{"version":3,"sources":["node_modules/jsrsasign/lib/jsrsasign.js","node_modules/dayjs/plugin/localeData.js","node_modules/dayjs/plugin/customParseFormat.js","node_modules/dayjs/plugin/objectSupport.js","node_modules/dayjs/plugin/localizedFormat.js","node_modules/dayjs/plugin/utc.js","node_modules/dayjs/plugin/isoWeek.js","node_modules/dayjs/plugin/weekOfYear.js","node_modules/dayjs/plugin/weekday.js","node_modules/dayjs/locale/fi.js","node_modules/dayjs/locale/sv.js","src/app/app.module.ts","node_modules/@progress/kendo-angular-intl/locales/fi/all.js","node_modules/@progress/kendo-angular-intl/locales/sv/all.js","node_modules/@progress/kendo-angular-intl/locales/en/all.js","src/app/page-not-found.component.ts","src/app/no-usage-right.component.ts","src/app/no-usage-right.component.html","src/app/no-admin-right.component.ts","src/app/app-landing.component.ts","src/app/app-landing.component.html","src/app/forbidden.component.ts","src/app/open-target.component.ts","src/app/open-target.component.html","src/app/services/app-component.service.ts","src/app/auth/callback/callback.component.ts","src/app/auth/callback/callback.component.html","src/app/app-routing.module.ts","src/app/shared/handlers/hpo-errorhandler.service.ts","node_modules/angular-oauth2-oidc-jwks/fesm2022/angular-oauth2-oidc-jwks.mjs","src/environments/environment.prod.ts","src/app/app.component.ts","src/app/app.component.html","src/app/services/floating-chat.service.ts","node_modules/angular-split/fesm2022/angular-split.mjs","src/app/modules/Iframe/Iframe.component.ts","src/app/modules/Iframe/Iframe.component.html","node_modules/@angular/common/locales/fi.mjs","node_modules/@angular/common/locales/sv.mjs","node_modules/@angular/common/locales/en.mjs","src/app/providers/blah-mat-paginator-intl.ts","node_modules/@headpower/components/dayjs/loader.mjs","src/app/services/localization-message-service.ts","src/app/bypass-service-worker.interceptor.ts","src/app/core.module.ts","src/app/auth/auth.module.ts","src/main.ts"],"sourcesContent":["var navigator = {};\nnavigator.userAgent = false;\nvar window = {};\n/*\n * jsrsasign(all) 11.1.0 (2024-02-01) (c) 2010-2023 Kenji Urushima | kjur.github.io/jsrsasign/license\n */\nvar VERSION = \"11.1.0\";\nvar VERSION_FULL = \"jsrsasign(all) 11.1.0 (2024-02-01) (c) 2010-2023 Kenji Urushima | kjur.github.io/jsrsasign/license\";\n\n/*! CryptoJS v3.1.2 core-fix.js\n * code.google.com/p/crypto-js\n * (c) 2009-2013 by Jeff Mott. All rights reserved.\n * code.google.com/p/crypto-js/wiki/License\n * THIS IS FIX of 'core.js' to fix Hmac issue.\n * https://code.google.com/p/crypto-js/issues/detail?id=84\n * https://crypto-js.googlecode.com/svn-history/r667/branches/3.x/src/core.js\n */\nvar CryptoJS = CryptoJS || function (e, g) {\n var a = {};\n var b = a.lib = {};\n var j = b.Base = function () {\n function n() {}\n return {\n extend: function (p) {\n n.prototype = this;\n var o = new n();\n if (p) {\n o.mixIn(p);\n }\n if (!o.hasOwnProperty(\"init\")) {\n o.init = function () {\n o.$super.init.apply(this, arguments);\n };\n }\n o.init.prototype = o;\n o.$super = this;\n return o;\n },\n create: function () {\n var o = this.extend();\n o.init.apply(o, arguments);\n return o;\n },\n init: function () {},\n mixIn: function (p) {\n for (var o in p) {\n if (p.hasOwnProperty(o)) {\n this[o] = p[o];\n }\n }\n if (p.hasOwnProperty(\"toString\")) {\n this.toString = p.toString;\n }\n },\n clone: function () {\n return this.init.prototype.extend(this);\n }\n };\n }();\n var l = b.WordArray = j.extend({\n init: function (o, n) {\n o = this.words = o || [];\n if (n != g) {\n this.sigBytes = n;\n } else {\n this.sigBytes = o.length * 4;\n }\n },\n toString: function (n) {\n return (n || h).stringify(this);\n },\n concat: function (t) {\n var q = this.words;\n var p = t.words;\n var n = this.sigBytes;\n var s = t.sigBytes;\n this.clamp();\n if (n % 4) {\n for (var r = 0; r < s; r++) {\n var o = p[r >>> 2] >>> 24 - r % 4 * 8 & 255;\n q[n + r >>> 2] |= o << 24 - (n + r) % 4 * 8;\n }\n } else {\n for (var r = 0; r < s; r += 4) {\n q[n + r >>> 2] = p[r >>> 2];\n }\n }\n this.sigBytes += s;\n return this;\n },\n clamp: function () {\n var o = this.words;\n var n = this.sigBytes;\n o[n >>> 2] &= 4294967295 << 32 - n % 4 * 8;\n o.length = e.ceil(n / 4);\n },\n clone: function () {\n var n = j.clone.call(this);\n n.words = this.words.slice(0);\n return n;\n },\n random: function (p) {\n var o = [];\n for (var n = 0; n < p; n += 4) {\n o.push(e.random() * 4294967296 | 0);\n }\n return new l.init(o, p);\n }\n });\n var m = a.enc = {};\n var h = m.Hex = {\n stringify: function (p) {\n var r = p.words;\n var o = p.sigBytes;\n var q = [];\n for (var n = 0; n < o; n++) {\n var s = r[n >>> 2] >>> 24 - n % 4 * 8 & 255;\n q.push((s >>> 4).toString(16));\n q.push((s & 15).toString(16));\n }\n return q.join(\"\");\n },\n parse: function (p) {\n var n = p.length;\n var q = [];\n for (var o = 0; o < n; o += 2) {\n q[o >>> 3] |= parseInt(p.substr(o, 2), 16) << 24 - o % 8 * 4;\n }\n return new l.init(q, n / 2);\n }\n };\n var d = m.Latin1 = {\n stringify: function (q) {\n var r = q.words;\n var p = q.sigBytes;\n var n = [];\n for (var o = 0; o < p; o++) {\n var s = r[o >>> 2] >>> 24 - o % 4 * 8 & 255;\n n.push(String.fromCharCode(s));\n }\n return n.join(\"\");\n },\n parse: function (p) {\n var n = p.length;\n var q = [];\n for (var o = 0; o < n; o++) {\n q[o >>> 2] |= (p.charCodeAt(o) & 255) << 24 - o % 4 * 8;\n }\n return new l.init(q, n);\n }\n };\n var c = m.Utf8 = {\n stringify: function (n) {\n try {\n return decodeURIComponent(escape(d.stringify(n)));\n } catch (o) {\n throw new Error(\"Malformed UTF-8 data\");\n }\n },\n parse: function (n) {\n return d.parse(unescape(encodeURIComponent(n)));\n }\n };\n var i = b.BufferedBlockAlgorithm = j.extend({\n reset: function () {\n this._data = new l.init();\n this._nDataBytes = 0;\n },\n _append: function (n) {\n if (typeof n == \"string\") {\n n = c.parse(n);\n }\n this._data.concat(n);\n this._nDataBytes += n.sigBytes;\n },\n _process: function (w) {\n var q = this._data;\n var x = q.words;\n var n = q.sigBytes;\n var t = this.blockSize;\n var v = t * 4;\n var u = n / v;\n if (w) {\n u = e.ceil(u);\n } else {\n u = e.max((u | 0) - this._minBufferSize, 0);\n }\n var s = u * t;\n var r = e.min(s * 4, n);\n if (s) {\n for (var p = 0; p < s; p += t) {\n this._doProcessBlock(x, p);\n }\n var o = x.splice(0, s);\n q.sigBytes -= r;\n }\n return new l.init(o, r);\n },\n clone: function () {\n var n = j.clone.call(this);\n n._data = this._data.clone();\n return n;\n },\n _minBufferSize: 0\n });\n var f = b.Hasher = i.extend({\n cfg: j.extend(),\n init: function (n) {\n this.cfg = this.cfg.extend(n);\n this.reset();\n },\n reset: function () {\n i.reset.call(this);\n this._doReset();\n },\n update: function (n) {\n this._append(n);\n this._process();\n return this;\n },\n finalize: function (n) {\n if (n) {\n this._append(n);\n }\n var o = this._doFinalize();\n return o;\n },\n blockSize: 512 / 32,\n _createHelper: function (n) {\n return function (p, o) {\n return new n.init(o).finalize(p);\n };\n },\n _createHmacHelper: function (n) {\n return function (p, o) {\n return new k.HMAC.init(n, o).finalize(p);\n };\n }\n });\n var k = a.algo = {};\n return a;\n}(Math);\n/*\nCryptoJS v3.1.2 x64-core-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function (g) {\n var a = CryptoJS,\n f = a.lib,\n e = f.Base,\n h = f.WordArray,\n a = a.x64 = {};\n a.Word = e.extend({\n init: function (b, c) {\n this.high = b;\n this.low = c;\n }\n });\n a.WordArray = e.extend({\n init: function (b, c) {\n b = this.words = b || [];\n this.sigBytes = c != g ? c : 8 * b.length;\n },\n toX32: function () {\n for (var b = this.words, c = b.length, a = [], d = 0; d < c; d++) {\n var e = b[d];\n a.push(e.high);\n a.push(e.low);\n }\n return h.create(a, this.sigBytes);\n },\n clone: function () {\n for (var b = e.clone.call(this), c = b.words = this.words.slice(0), a = c.length, d = 0; d < a; d++) c[d] = c[d].clone();\n return b;\n }\n });\n})();\n\n/*\nCryptoJS v3.1.2 cipher-core.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nCryptoJS.lib.Cipher || function (u) {\n var g = CryptoJS,\n f = g.lib,\n k = f.Base,\n l = f.WordArray,\n q = f.BufferedBlockAlgorithm,\n r = g.enc.Base64,\n v = g.algo.EvpKDF,\n n = f.Cipher = q.extend({\n cfg: k.extend(),\n createEncryptor: function (a, b) {\n return this.create(this._ENC_XFORM_MODE, a, b);\n },\n createDecryptor: function (a, b) {\n return this.create(this._DEC_XFORM_MODE, a, b);\n },\n init: function (a, b, c) {\n this.cfg = this.cfg.extend(c);\n this._xformMode = a;\n this._key = b;\n this.reset();\n },\n reset: function () {\n q.reset.call(this);\n this._doReset();\n },\n process: function (a) {\n this._append(a);\n return this._process();\n },\n finalize: function (a) {\n a && this._append(a);\n return this._doFinalize();\n },\n keySize: 4,\n ivSize: 4,\n _ENC_XFORM_MODE: 1,\n _DEC_XFORM_MODE: 2,\n _createHelper: function (a) {\n return {\n encrypt: function (b, c, d) {\n return (\"string\" == typeof c ? s : j).encrypt(a, b, c, d);\n },\n decrypt: function (b, c, d) {\n return (\"string\" == typeof c ? s : j).decrypt(a, b, c, d);\n }\n };\n }\n });\n f.StreamCipher = n.extend({\n _doFinalize: function () {\n return this._process(!0);\n },\n blockSize: 1\n });\n var m = g.mode = {},\n t = function (a, b, c) {\n var d = this._iv;\n d ? this._iv = u : d = this._prevBlock;\n for (var e = 0; e < c; e++) a[b + e] ^= d[e];\n },\n h = (f.BlockCipherMode = k.extend({\n createEncryptor: function (a, b) {\n return this.Encryptor.create(a, b);\n },\n createDecryptor: function (a, b) {\n return this.Decryptor.create(a, b);\n },\n init: function (a, b) {\n this._cipher = a;\n this._iv = b;\n }\n })).extend();\n h.Encryptor = h.extend({\n processBlock: function (a, b) {\n var c = this._cipher,\n d = c.blockSize;\n t.call(this, a, b, d);\n c.encryptBlock(a, b);\n this._prevBlock = a.slice(b, b + d);\n }\n });\n h.Decryptor = h.extend({\n processBlock: function (a, b) {\n var c = this._cipher,\n d = c.blockSize,\n e = a.slice(b, b + d);\n c.decryptBlock(a, b);\n t.call(this, a, b, d);\n this._prevBlock = e;\n }\n });\n m = m.CBC = h;\n h = (g.pad = {}).Pkcs7 = {\n pad: function (a, b) {\n for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, e = [], f = 0; f < c; f += 4) e.push(d);\n c = l.create(e, c);\n a.concat(c);\n },\n unpad: function (a) {\n a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255;\n }\n };\n f.BlockCipher = n.extend({\n cfg: n.cfg.extend({\n mode: m,\n padding: h\n }),\n reset: function () {\n n.reset.call(this);\n var a = this.cfg,\n b = a.iv,\n a = a.mode;\n if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor;else c = a.createDecryptor, this._minBufferSize = 1;\n this._mode = c.call(a, this, b && b.words);\n },\n _doProcessBlock: function (a, b) {\n this._mode.processBlock(a, b);\n },\n _doFinalize: function () {\n var a = this.cfg.padding;\n if (this._xformMode == this._ENC_XFORM_MODE) {\n a.pad(this._data, this.blockSize);\n var b = this._process(!0);\n } else b = this._process(!0), a.unpad(b);\n return b;\n },\n blockSize: 4\n });\n var p = f.CipherParams = k.extend({\n init: function (a) {\n this.mixIn(a);\n },\n toString: function (a) {\n return (a || this.formatter).stringify(this);\n }\n }),\n m = (g.format = {}).OpenSSL = {\n stringify: function (a) {\n var b = a.ciphertext;\n a = a.salt;\n return (a ? l.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(r);\n },\n parse: function (a) {\n a = r.parse(a);\n var b = a.words;\n if (1398893684 == b[0] && 1701076831 == b[1]) {\n var c = l.create(b.slice(2, 4));\n b.splice(0, 4);\n a.sigBytes -= 16;\n }\n return p.create({\n ciphertext: a,\n salt: c\n });\n }\n },\n j = f.SerializableCipher = k.extend({\n cfg: k.extend({\n format: m\n }),\n encrypt: function (a, b, c, d) {\n d = this.cfg.extend(d);\n var e = a.createEncryptor(c, d);\n b = e.finalize(b);\n e = e.cfg;\n return p.create({\n ciphertext: b,\n key: c,\n iv: e.iv,\n algorithm: a,\n mode: e.mode,\n padding: e.padding,\n blockSize: a.blockSize,\n formatter: d.format\n });\n },\n decrypt: function (a, b, c, d) {\n d = this.cfg.extend(d);\n b = this._parse(b, d.format);\n return a.createDecryptor(c, d).finalize(b.ciphertext);\n },\n _parse: function (a, b) {\n return \"string\" == typeof a ? b.parse(a, this) : a;\n }\n }),\n g = (g.kdf = {}).OpenSSL = {\n execute: function (a, b, c, d) {\n d || (d = l.random(8));\n a = v.create({\n keySize: b + c\n }).compute(a, d);\n c = l.create(a.words.slice(b), 4 * c);\n a.sigBytes = 4 * b;\n return p.create({\n key: a,\n iv: c,\n salt: d\n });\n }\n },\n s = f.PasswordBasedCipher = j.extend({\n cfg: j.cfg.extend({\n kdf: g\n }),\n encrypt: function (a, b, c, d) {\n d = this.cfg.extend(d);\n c = d.kdf.execute(c, a.keySize, a.ivSize);\n d.iv = c.iv;\n a = j.encrypt.call(this, a, b, c.key, d);\n a.mixIn(c);\n return a;\n },\n decrypt: function (a, b, c, d) {\n d = this.cfg.extend(d);\n b = this._parse(b, d.format);\n c = d.kdf.execute(c, a.keySize, a.ivSize, b.salt);\n d.iv = c.iv;\n return j.decrypt.call(this, a, b, c.key, d);\n }\n });\n}();\n\n/*\nCryptoJS v3.1.2 aes.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n for (var q = CryptoJS, x = q.lib.BlockCipher, r = q.algo, j = [], y = [], z = [], A = [], B = [], C = [], s = [], u = [], v = [], w = [], g = [], k = 0; 256 > k; k++) g[k] = 128 > k ? k << 1 : k << 1 ^ 283;\n for (var n = 0, l = 0, k = 0; 256 > k; k++) {\n var f = l ^ l << 1 ^ l << 2 ^ l << 3 ^ l << 4,\n f = f >>> 8 ^ f & 255 ^ 99;\n j[n] = f;\n y[f] = n;\n var t = g[n],\n D = g[t],\n E = g[D],\n b = 257 * g[f] ^ 16843008 * f;\n z[n] = b << 24 | b >>> 8;\n A[n] = b << 16 | b >>> 16;\n B[n] = b << 8 | b >>> 24;\n C[n] = b;\n b = 16843009 * E ^ 65537 * D ^ 257 * t ^ 16843008 * n;\n s[f] = b << 24 | b >>> 8;\n u[f] = b << 16 | b >>> 16;\n v[f] = b << 8 | b >>> 24;\n w[f] = b;\n n ? (n = t ^ g[g[g[E ^ t]]], l ^= g[g[l]]) : n = l = 1;\n }\n var F = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54],\n r = r.AES = x.extend({\n _doReset: function () {\n for (var c = this._key, e = c.words, a = c.sigBytes / 4, c = 4 * ((this._nRounds = a + 6) + 1), b = this._keySchedule = [], h = 0; h < c; h++) if (h < a) b[h] = e[h];else {\n var d = b[h - 1];\n h % a ? 6 < a && 4 == h % a && (d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255]) : (d = d << 8 | d >>> 24, d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255], d ^= F[h / a | 0] << 24);\n b[h] = b[h - a] ^ d;\n }\n e = this._invKeySchedule = [];\n for (a = 0; a < c; a++) h = c - a, d = a % 4 ? b[h] : b[h - 4], e[a] = 4 > a || 4 >= h ? d : s[j[d >>> 24]] ^ u[j[d >>> 16 & 255]] ^ v[j[d >>> 8 & 255]] ^ w[j[d & 255]];\n },\n encryptBlock: function (c, e) {\n this._doCryptBlock(c, e, this._keySchedule, z, A, B, C, j);\n },\n decryptBlock: function (c, e) {\n var a = c[e + 1];\n c[e + 1] = c[e + 3];\n c[e + 3] = a;\n this._doCryptBlock(c, e, this._invKeySchedule, s, u, v, w, y);\n a = c[e + 1];\n c[e + 1] = c[e + 3];\n c[e + 3] = a;\n },\n _doCryptBlock: function (c, e, a, b, h, d, j, m) {\n for (var n = this._nRounds, f = c[e] ^ a[0], g = c[e + 1] ^ a[1], k = c[e + 2] ^ a[2], p = c[e + 3] ^ a[3], l = 4, t = 1; t < n; t++) var q = b[f >>> 24] ^ h[g >>> 16 & 255] ^ d[k >>> 8 & 255] ^ j[p & 255] ^ a[l++], r = b[g >>> 24] ^ h[k >>> 16 & 255] ^ d[p >>> 8 & 255] ^ j[f & 255] ^ a[l++], s = b[k >>> 24] ^ h[p >>> 16 & 255] ^ d[f >>> 8 & 255] ^ j[g & 255] ^ a[l++], p = b[p >>> 24] ^ h[f >>> 16 & 255] ^ d[g >>> 8 & 255] ^ j[k & 255] ^ a[l++], f = q, g = r, k = s;\n q = (m[f >>> 24] << 24 | m[g >>> 16 & 255] << 16 | m[k >>> 8 & 255] << 8 | m[p & 255]) ^ a[l++];\n r = (m[g >>> 24] << 24 | m[k >>> 16 & 255] << 16 | m[p >>> 8 & 255] << 8 | m[f & 255]) ^ a[l++];\n s = (m[k >>> 24] << 24 | m[p >>> 16 & 255] << 16 | m[f >>> 8 & 255] << 8 | m[g & 255]) ^ a[l++];\n p = (m[p >>> 24] << 24 | m[f >>> 16 & 255] << 16 | m[g >>> 8 & 255] << 8 | m[k & 255]) ^ a[l++];\n c[e] = q;\n c[e + 1] = r;\n c[e + 2] = s;\n c[e + 3] = p;\n },\n keySize: 8\n });\n q.AES = x._createHelper(r);\n})();\n\n/*\nCryptoJS v3.1.2 tripledes-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n function j(b, c) {\n var a = (this._lBlock >>> b ^ this._rBlock) & c;\n this._rBlock ^= a;\n this._lBlock ^= a << b;\n }\n function l(b, c) {\n var a = (this._rBlock >>> b ^ this._lBlock) & c;\n this._lBlock ^= a;\n this._rBlock ^= a << b;\n }\n var h = CryptoJS,\n e = h.lib,\n n = e.WordArray,\n e = e.BlockCipher,\n g = h.algo,\n q = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4],\n p = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32],\n r = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28],\n s = [{\n \"0\": 8421888,\n 268435456: 32768,\n 536870912: 8421378,\n 805306368: 2,\n 1073741824: 512,\n 1342177280: 8421890,\n 1610612736: 8389122,\n 1879048192: 8388608,\n 2147483648: 514,\n 2415919104: 8389120,\n 2684354560: 33280,\n 2952790016: 8421376,\n 3221225472: 32770,\n 3489660928: 8388610,\n 3758096384: 0,\n 4026531840: 33282,\n 134217728: 0,\n 402653184: 8421890,\n 671088640: 33282,\n 939524096: 32768,\n 1207959552: 8421888,\n 1476395008: 512,\n 1744830464: 8421378,\n 2013265920: 2,\n 2281701376: 8389120,\n 2550136832: 33280,\n 2818572288: 8421376,\n 3087007744: 8389122,\n 3355443200: 8388610,\n 3623878656: 32770,\n 3892314112: 514,\n 4160749568: 8388608,\n 1: 32768,\n 268435457: 2,\n 536870913: 8421888,\n 805306369: 8388608,\n 1073741825: 8421378,\n 1342177281: 33280,\n 1610612737: 512,\n 1879048193: 8389122,\n 2147483649: 8421890,\n 2415919105: 8421376,\n 2684354561: 8388610,\n 2952790017: 33282,\n 3221225473: 514,\n 3489660929: 8389120,\n 3758096385: 32770,\n 4026531841: 0,\n 134217729: 8421890,\n 402653185: 8421376,\n 671088641: 8388608,\n 939524097: 512,\n 1207959553: 32768,\n 1476395009: 8388610,\n 1744830465: 2,\n 2013265921: 33282,\n 2281701377: 32770,\n 2550136833: 8389122,\n 2818572289: 514,\n 3087007745: 8421888,\n 3355443201: 8389120,\n 3623878657: 0,\n 3892314113: 33280,\n 4160749569: 8421378\n }, {\n \"0\": 1074282512,\n 16777216: 16384,\n 33554432: 524288,\n 50331648: 1074266128,\n 67108864: 1073741840,\n 83886080: 1074282496,\n 100663296: 1073758208,\n 117440512: 16,\n 134217728: 540672,\n 150994944: 1073758224,\n 167772160: 1073741824,\n 184549376: 540688,\n 201326592: 524304,\n 218103808: 0,\n 234881024: 16400,\n 251658240: 1074266112,\n 8388608: 1073758208,\n 25165824: 540688,\n 41943040: 16,\n 58720256: 1073758224,\n 75497472: 1074282512,\n 92274688: 1073741824,\n 109051904: 524288,\n 125829120: 1074266128,\n 142606336: 524304,\n 159383552: 0,\n 176160768: 16384,\n 192937984: 1074266112,\n 209715200: 1073741840,\n 226492416: 540672,\n 243269632: 1074282496,\n 260046848: 16400,\n 268435456: 0,\n 285212672: 1074266128,\n 301989888: 1073758224,\n 318767104: 1074282496,\n 335544320: 1074266112,\n 352321536: 16,\n 369098752: 540688,\n 385875968: 16384,\n 402653184: 16400,\n 419430400: 524288,\n 436207616: 524304,\n 452984832: 1073741840,\n 469762048: 540672,\n 486539264: 1073758208,\n 503316480: 1073741824,\n 520093696: 1074282512,\n 276824064: 540688,\n 293601280: 524288,\n 310378496: 1074266112,\n 327155712: 16384,\n 343932928: 1073758208,\n 360710144: 1074282512,\n 377487360: 16,\n 394264576: 1073741824,\n 411041792: 1074282496,\n 427819008: 1073741840,\n 444596224: 1073758224,\n 461373440: 524304,\n 478150656: 0,\n 494927872: 16400,\n 511705088: 1074266128,\n 528482304: 540672\n }, {\n \"0\": 260,\n 1048576: 0,\n 2097152: 67109120,\n 3145728: 65796,\n 4194304: 65540,\n 5242880: 67108868,\n 6291456: 67174660,\n 7340032: 67174400,\n 8388608: 67108864,\n 9437184: 67174656,\n 10485760: 65792,\n 11534336: 67174404,\n 12582912: 67109124,\n 13631488: 65536,\n 14680064: 4,\n 15728640: 256,\n 524288: 67174656,\n 1572864: 67174404,\n 2621440: 0,\n 3670016: 67109120,\n 4718592: 67108868,\n 5767168: 65536,\n 6815744: 65540,\n 7864320: 260,\n 8912896: 4,\n 9961472: 256,\n 11010048: 67174400,\n 12058624: 65796,\n 13107200: 65792,\n 14155776: 67109124,\n 15204352: 67174660,\n 16252928: 67108864,\n 16777216: 67174656,\n 17825792: 65540,\n 18874368: 65536,\n 19922944: 67109120,\n 20971520: 256,\n 22020096: 67174660,\n 23068672: 67108868,\n 24117248: 0,\n 25165824: 67109124,\n 26214400: 67108864,\n 27262976: 4,\n 28311552: 65792,\n 29360128: 67174400,\n 30408704: 260,\n 31457280: 65796,\n 32505856: 67174404,\n 17301504: 67108864,\n 18350080: 260,\n 19398656: 67174656,\n 20447232: 0,\n 21495808: 65540,\n 22544384: 67109120,\n 23592960: 256,\n 24641536: 67174404,\n 25690112: 65536,\n 26738688: 67174660,\n 27787264: 65796,\n 28835840: 67108868,\n 29884416: 67109124,\n 30932992: 67174400,\n 31981568: 4,\n 33030144: 65792\n }, {\n \"0\": 2151682048,\n 65536: 2147487808,\n 131072: 4198464,\n 196608: 2151677952,\n 262144: 0,\n 327680: 4198400,\n 393216: 2147483712,\n 458752: 4194368,\n 524288: 2147483648,\n 589824: 4194304,\n 655360: 64,\n 720896: 2147487744,\n 786432: 2151678016,\n 851968: 4160,\n 917504: 4096,\n 983040: 2151682112,\n 32768: 2147487808,\n 98304: 64,\n 163840: 2151678016,\n 229376: 2147487744,\n 294912: 4198400,\n 360448: 2151682112,\n 425984: 0,\n 491520: 2151677952,\n 557056: 4096,\n 622592: 2151682048,\n 688128: 4194304,\n 753664: 4160,\n 819200: 2147483648,\n 884736: 4194368,\n 950272: 4198464,\n 1015808: 2147483712,\n 1048576: 4194368,\n 1114112: 4198400,\n 1179648: 2147483712,\n 1245184: 0,\n 1310720: 4160,\n 1376256: 2151678016,\n 1441792: 2151682048,\n 1507328: 2147487808,\n 1572864: 2151682112,\n 1638400: 2147483648,\n 1703936: 2151677952,\n 1769472: 4198464,\n 1835008: 2147487744,\n 1900544: 4194304,\n 1966080: 64,\n 2031616: 4096,\n 1081344: 2151677952,\n 1146880: 2151682112,\n 1212416: 0,\n 1277952: 4198400,\n 1343488: 4194368,\n 1409024: 2147483648,\n 1474560: 2147487808,\n 1540096: 64,\n 1605632: 2147483712,\n 1671168: 4096,\n 1736704: 2147487744,\n 1802240: 2151678016,\n 1867776: 4160,\n 1933312: 2151682048,\n 1998848: 4194304,\n 2064384: 4198464\n }, {\n \"0\": 128,\n 4096: 17039360,\n 8192: 262144,\n 12288: 536870912,\n 16384: 537133184,\n 20480: 16777344,\n 24576: 553648256,\n 28672: 262272,\n 32768: 16777216,\n 36864: 537133056,\n 40960: 536871040,\n 45056: 553910400,\n 49152: 553910272,\n 53248: 0,\n 57344: 17039488,\n 61440: 553648128,\n 2048: 17039488,\n 6144: 553648256,\n 10240: 128,\n 14336: 17039360,\n 18432: 262144,\n 22528: 537133184,\n 26624: 553910272,\n 30720: 536870912,\n 34816: 537133056,\n 38912: 0,\n 43008: 553910400,\n 47104: 16777344,\n 51200: 536871040,\n 55296: 553648128,\n 59392: 16777216,\n 63488: 262272,\n 65536: 262144,\n 69632: 128,\n 73728: 536870912,\n 77824: 553648256,\n 81920: 16777344,\n 86016: 553910272,\n 90112: 537133184,\n 94208: 16777216,\n 98304: 553910400,\n 102400: 553648128,\n 106496: 17039360,\n 110592: 537133056,\n 114688: 262272,\n 118784: 536871040,\n 122880: 0,\n 126976: 17039488,\n 67584: 553648256,\n 71680: 16777216,\n 75776: 17039360,\n 79872: 537133184,\n 83968: 536870912,\n 88064: 17039488,\n 92160: 128,\n 96256: 553910272,\n 100352: 262272,\n 104448: 553910400,\n 108544: 0,\n 112640: 553648128,\n 116736: 16777344,\n 120832: 262144,\n 124928: 537133056,\n 129024: 536871040\n }, {\n \"0\": 268435464,\n 256: 8192,\n 512: 270532608,\n 768: 270540808,\n 1024: 268443648,\n 1280: 2097152,\n 1536: 2097160,\n 1792: 268435456,\n 2048: 0,\n 2304: 268443656,\n 2560: 2105344,\n 2816: 8,\n 3072: 270532616,\n 3328: 2105352,\n 3584: 8200,\n 3840: 270540800,\n 128: 270532608,\n 384: 270540808,\n 640: 8,\n 896: 2097152,\n 1152: 2105352,\n 1408: 268435464,\n 1664: 268443648,\n 1920: 8200,\n 2176: 2097160,\n 2432: 8192,\n 2688: 268443656,\n 2944: 270532616,\n 3200: 0,\n 3456: 270540800,\n 3712: 2105344,\n 3968: 268435456,\n 4096: 268443648,\n 4352: 270532616,\n 4608: 270540808,\n 4864: 8200,\n 5120: 2097152,\n 5376: 268435456,\n 5632: 268435464,\n 5888: 2105344,\n 6144: 2105352,\n 6400: 0,\n 6656: 8,\n 6912: 270532608,\n 7168: 8192,\n 7424: 268443656,\n 7680: 270540800,\n 7936: 2097160,\n 4224: 8,\n 4480: 2105344,\n 4736: 2097152,\n 4992: 268435464,\n 5248: 268443648,\n 5504: 8200,\n 5760: 270540808,\n 6016: 270532608,\n 6272: 270540800,\n 6528: 270532616,\n 6784: 8192,\n 7040: 2105352,\n 7296: 2097160,\n 7552: 0,\n 7808: 268435456,\n 8064: 268443656\n }, {\n \"0\": 1048576,\n 16: 33555457,\n 32: 1024,\n 48: 1049601,\n 64: 34604033,\n 80: 0,\n 96: 1,\n 112: 34603009,\n 128: 33555456,\n 144: 1048577,\n 160: 33554433,\n 176: 34604032,\n 192: 34603008,\n 208: 1025,\n 224: 1049600,\n 240: 33554432,\n 8: 34603009,\n 24: 0,\n 40: 33555457,\n 56: 34604032,\n 72: 1048576,\n 88: 33554433,\n 104: 33554432,\n 120: 1025,\n 136: 1049601,\n 152: 33555456,\n 168: 34603008,\n 184: 1048577,\n 200: 1024,\n 216: 34604033,\n 232: 1,\n 248: 1049600,\n 256: 33554432,\n 272: 1048576,\n 288: 33555457,\n 304: 34603009,\n 320: 1048577,\n 336: 33555456,\n 352: 34604032,\n 368: 1049601,\n 384: 1025,\n 400: 34604033,\n 416: 1049600,\n 432: 1,\n 448: 0,\n 464: 34603008,\n 480: 33554433,\n 496: 1024,\n 264: 1049600,\n 280: 33555457,\n 296: 34603009,\n 312: 1,\n 328: 33554432,\n 344: 1048576,\n 360: 1025,\n 376: 34604032,\n 392: 33554433,\n 408: 34603008,\n 424: 0,\n 440: 34604033,\n 456: 1049601,\n 472: 1024,\n 488: 33555456,\n 504: 1048577\n }, {\n \"0\": 134219808,\n 1: 131072,\n 2: 134217728,\n 3: 32,\n 4: 131104,\n 5: 134350880,\n 6: 134350848,\n 7: 2048,\n 8: 134348800,\n 9: 134219776,\n 10: 133120,\n 11: 134348832,\n 12: 2080,\n 13: 0,\n 14: 134217760,\n 15: 133152,\n 2147483648: 2048,\n 2147483649: 134350880,\n 2147483650: 134219808,\n 2147483651: 134217728,\n 2147483652: 134348800,\n 2147483653: 133120,\n 2147483654: 133152,\n 2147483655: 32,\n 2147483656: 134217760,\n 2147483657: 2080,\n 2147483658: 131104,\n 2147483659: 134350848,\n 2147483660: 0,\n 2147483661: 134348832,\n 2147483662: 134219776,\n 2147483663: 131072,\n 16: 133152,\n 17: 134350848,\n 18: 32,\n 19: 2048,\n 20: 134219776,\n 21: 134217760,\n 22: 134348832,\n 23: 131072,\n 24: 0,\n 25: 131104,\n 26: 134348800,\n 27: 134219808,\n 28: 134350880,\n 29: 133120,\n 30: 2080,\n 31: 134217728,\n 2147483664: 131072,\n 2147483665: 2048,\n 2147483666: 134348832,\n 2147483667: 133152,\n 2147483668: 32,\n 2147483669: 134348800,\n 2147483670: 134217728,\n 2147483671: 134219808,\n 2147483672: 134350880,\n 2147483673: 134217760,\n 2147483674: 134219776,\n 2147483675: 0,\n 2147483676: 133120,\n 2147483677: 2080,\n 2147483678: 131104,\n 2147483679: 134350848\n }],\n t = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679],\n m = g.DES = e.extend({\n _doReset: function () {\n for (var b = this._key.words, c = [], a = 0; 56 > a; a++) {\n var f = q[a] - 1;\n c[a] = b[f >>> 5] >>> 31 - f % 32 & 1;\n }\n b = this._subKeys = [];\n for (f = 0; 16 > f; f++) {\n for (var d = b[f] = [], e = r[f], a = 0; 24 > a; a++) d[a / 6 | 0] |= c[(p[a] - 1 + e) % 28] << 31 - a % 6, d[4 + (a / 6 | 0)] |= c[28 + (p[a + 24] - 1 + e) % 28] << 31 - a % 6;\n d[0] = d[0] << 1 | d[0] >>> 31;\n for (a = 1; 7 > a; a++) d[a] >>>= 4 * (a - 1) + 3;\n d[7] = d[7] << 5 | d[7] >>> 27;\n }\n c = this._invSubKeys = [];\n for (a = 0; 16 > a; a++) c[a] = b[15 - a];\n },\n encryptBlock: function (b, c) {\n this._doCryptBlock(b, c, this._subKeys);\n },\n decryptBlock: function (b, c) {\n this._doCryptBlock(b, c, this._invSubKeys);\n },\n _doCryptBlock: function (b, c, a) {\n this._lBlock = b[c];\n this._rBlock = b[c + 1];\n j.call(this, 4, 252645135);\n j.call(this, 16, 65535);\n l.call(this, 2, 858993459);\n l.call(this, 8, 16711935);\n j.call(this, 1, 1431655765);\n for (var f = 0; 16 > f; f++) {\n for (var d = a[f], e = this._lBlock, h = this._rBlock, g = 0, k = 0; 8 > k; k++) g |= s[k][((h ^ d[k]) & t[k]) >>> 0];\n this._lBlock = h;\n this._rBlock = e ^ g;\n }\n a = this._lBlock;\n this._lBlock = this._rBlock;\n this._rBlock = a;\n j.call(this, 1, 1431655765);\n l.call(this, 8, 16711935);\n l.call(this, 2, 858993459);\n j.call(this, 16, 65535);\n j.call(this, 4, 252645135);\n b[c] = this._lBlock;\n b[c + 1] = this._rBlock;\n },\n keySize: 2,\n ivSize: 2,\n blockSize: 2\n });\n h.DES = e._createHelper(m);\n g = g.TripleDES = e.extend({\n _doReset: function () {\n var b = this._key.words;\n this._des1 = m.createEncryptor(n.create(b.slice(0, 2)));\n this._des2 = m.createEncryptor(n.create(b.slice(2, 4)));\n this._des3 = m.createEncryptor(n.create(b.slice(4, 6)));\n },\n encryptBlock: function (b, c) {\n this._des1.encryptBlock(b, c);\n this._des2.decryptBlock(b, c);\n this._des3.encryptBlock(b, c);\n },\n decryptBlock: function (b, c) {\n this._des3.decryptBlock(b, c);\n this._des2.encryptBlock(b, c);\n this._des1.decryptBlock(b, c);\n },\n keySize: 6,\n ivSize: 2,\n blockSize: 2\n });\n h.TripleDES = e._createHelper(g);\n})();\n\n/*\nCryptoJS v3.1.2 enc-base64.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n var h = CryptoJS,\n j = h.lib.WordArray;\n h.enc.Base64 = {\n stringify: function (b) {\n var e = b.words,\n f = b.sigBytes,\n c = this._map;\n b.clamp();\n b = [];\n for (var a = 0; a < f; a += 3) for (var d = (e[a >>> 2] >>> 24 - 8 * (a % 4) & 255) << 16 | (e[a + 1 >>> 2] >>> 24 - 8 * ((a + 1) % 4) & 255) << 8 | e[a + 2 >>> 2] >>> 24 - 8 * ((a + 2) % 4) & 255, g = 0; 4 > g && a + 0.75 * g < f; g++) b.push(c.charAt(d >>> 6 * (3 - g) & 63));\n if (e = c.charAt(64)) for (; b.length % 4;) b.push(e);\n return b.join(\"\");\n },\n parse: function (b) {\n var e = b.length,\n f = this._map,\n c = f.charAt(64);\n c && (c = b.indexOf(c), -1 != c && (e = c));\n for (var c = [], a = 0, d = 0; d < e; d++) if (d % 4) {\n var g = f.indexOf(b.charAt(d - 1)) << 2 * (d % 4),\n h = f.indexOf(b.charAt(d)) >>> 6 - 2 * (d % 4);\n c[a >>> 2] |= (g | h) << 24 - 8 * (a % 4);\n a++;\n }\n return j.create(c, a);\n },\n _map: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"\n };\n})();\n\n/*\nCryptoJS v3.1.2 md5.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function (E) {\n function h(a, f, g, j, p, h, k) {\n a = a + (f & g | ~f & j) + p + k;\n return (a << h | a >>> 32 - h) + f;\n }\n function k(a, f, g, j, p, h, k) {\n a = a + (f & j | g & ~j) + p + k;\n return (a << h | a >>> 32 - h) + f;\n }\n function l(a, f, g, j, h, k, l) {\n a = a + (f ^ g ^ j) + h + l;\n return (a << k | a >>> 32 - k) + f;\n }\n function n(a, f, g, j, h, k, l) {\n a = a + (g ^ (f | ~j)) + h + l;\n return (a << k | a >>> 32 - k) + f;\n }\n for (var r = CryptoJS, q = r.lib, F = q.WordArray, s = q.Hasher, q = r.algo, a = [], t = 0; 64 > t; t++) a[t] = 4294967296 * E.abs(E.sin(t + 1)) | 0;\n q = q.MD5 = s.extend({\n _doReset: function () {\n this._hash = new F.init([1732584193, 4023233417, 2562383102, 271733878]);\n },\n _doProcessBlock: function (m, f) {\n for (var g = 0; 16 > g; g++) {\n var j = f + g,\n p = m[j];\n m[j] = (p << 8 | p >>> 24) & 16711935 | (p << 24 | p >>> 8) & 4278255360;\n }\n var g = this._hash.words,\n j = m[f + 0],\n p = m[f + 1],\n q = m[f + 2],\n r = m[f + 3],\n s = m[f + 4],\n t = m[f + 5],\n u = m[f + 6],\n v = m[f + 7],\n w = m[f + 8],\n x = m[f + 9],\n y = m[f + 10],\n z = m[f + 11],\n A = m[f + 12],\n B = m[f + 13],\n C = m[f + 14],\n D = m[f + 15],\n b = g[0],\n c = g[1],\n d = g[2],\n e = g[3],\n b = h(b, c, d, e, j, 7, a[0]),\n e = h(e, b, c, d, p, 12, a[1]),\n d = h(d, e, b, c, q, 17, a[2]),\n c = h(c, d, e, b, r, 22, a[3]),\n b = h(b, c, d, e, s, 7, a[4]),\n e = h(e, b, c, d, t, 12, a[5]),\n d = h(d, e, b, c, u, 17, a[6]),\n c = h(c, d, e, b, v, 22, a[7]),\n b = h(b, c, d, e, w, 7, a[8]),\n e = h(e, b, c, d, x, 12, a[9]),\n d = h(d, e, b, c, y, 17, a[10]),\n c = h(c, d, e, b, z, 22, a[11]),\n b = h(b, c, d, e, A, 7, a[12]),\n e = h(e, b, c, d, B, 12, a[13]),\n d = h(d, e, b, c, C, 17, a[14]),\n c = h(c, d, e, b, D, 22, a[15]),\n b = k(b, c, d, e, p, 5, a[16]),\n e = k(e, b, c, d, u, 9, a[17]),\n d = k(d, e, b, c, z, 14, a[18]),\n c = k(c, d, e, b, j, 20, a[19]),\n b = k(b, c, d, e, t, 5, a[20]),\n e = k(e, b, c, d, y, 9, a[21]),\n d = k(d, e, b, c, D, 14, a[22]),\n c = k(c, d, e, b, s, 20, a[23]),\n b = k(b, c, d, e, x, 5, a[24]),\n e = k(e, b, c, d, C, 9, a[25]),\n d = k(d, e, b, c, r, 14, a[26]),\n c = k(c, d, e, b, w, 20, a[27]),\n b = k(b, c, d, e, B, 5, a[28]),\n e = k(e, b, c, d, q, 9, a[29]),\n d = k(d, e, b, c, v, 14, a[30]),\n c = k(c, d, e, b, A, 20, a[31]),\n b = l(b, c, d, e, t, 4, a[32]),\n e = l(e, b, c, d, w, 11, a[33]),\n d = l(d, e, b, c, z, 16, a[34]),\n c = l(c, d, e, b, C, 23, a[35]),\n b = l(b, c, d, e, p, 4, a[36]),\n e = l(e, b, c, d, s, 11, a[37]),\n d = l(d, e, b, c, v, 16, a[38]),\n c = l(c, d, e, b, y, 23, a[39]),\n b = l(b, c, d, e, B, 4, a[40]),\n e = l(e, b, c, d, j, 11, a[41]),\n d = l(d, e, b, c, r, 16, a[42]),\n c = l(c, d, e, b, u, 23, a[43]),\n b = l(b, c, d, e, x, 4, a[44]),\n e = l(e, b, c, d, A, 11, a[45]),\n d = l(d, e, b, c, D, 16, a[46]),\n c = l(c, d, e, b, q, 23, a[47]),\n b = n(b, c, d, e, j, 6, a[48]),\n e = n(e, b, c, d, v, 10, a[49]),\n d = n(d, e, b, c, C, 15, a[50]),\n c = n(c, d, e, b, t, 21, a[51]),\n b = n(b, c, d, e, A, 6, a[52]),\n e = n(e, b, c, d, r, 10, a[53]),\n d = n(d, e, b, c, y, 15, a[54]),\n c = n(c, d, e, b, p, 21, a[55]),\n b = n(b, c, d, e, w, 6, a[56]),\n e = n(e, b, c, d, D, 10, a[57]),\n d = n(d, e, b, c, u, 15, a[58]),\n c = n(c, d, e, b, B, 21, a[59]),\n b = n(b, c, d, e, s, 6, a[60]),\n e = n(e, b, c, d, z, 10, a[61]),\n d = n(d, e, b, c, q, 15, a[62]),\n c = n(c, d, e, b, x, 21, a[63]);\n g[0] = g[0] + b | 0;\n g[1] = g[1] + c | 0;\n g[2] = g[2] + d | 0;\n g[3] = g[3] + e | 0;\n },\n _doFinalize: function () {\n var a = this._data,\n f = a.words,\n g = 8 * this._nDataBytes,\n j = 8 * a.sigBytes;\n f[j >>> 5] |= 128 << 24 - j % 32;\n var h = E.floor(g / 4294967296);\n f[(j + 64 >>> 9 << 4) + 15] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360;\n f[(j + 64 >>> 9 << 4) + 14] = (g << 8 | g >>> 24) & 16711935 | (g << 24 | g >>> 8) & 4278255360;\n a.sigBytes = 4 * (f.length + 1);\n this._process();\n a = this._hash;\n f = a.words;\n for (g = 0; 4 > g; g++) j = f[g], f[g] = (j << 8 | j >>> 24) & 16711935 | (j << 24 | j >>> 8) & 4278255360;\n return a;\n },\n clone: function () {\n var a = s.clone.call(this);\n a._hash = this._hash.clone();\n return a;\n }\n });\n r.MD5 = s._createHelper(q);\n r.HmacMD5 = s._createHmacHelper(q);\n})(Math);\n\n/*\nCryptoJS v3.1.2 sha1-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n var k = CryptoJS,\n b = k.lib,\n m = b.WordArray,\n l = b.Hasher,\n d = [],\n b = k.algo.SHA1 = l.extend({\n _doReset: function () {\n this._hash = new m.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]);\n },\n _doProcessBlock: function (n, p) {\n for (var a = this._hash.words, e = a[0], f = a[1], h = a[2], j = a[3], b = a[4], c = 0; 80 > c; c++) {\n if (16 > c) d[c] = n[p + c] | 0;else {\n var g = d[c - 3] ^ d[c - 8] ^ d[c - 14] ^ d[c - 16];\n d[c] = g << 1 | g >>> 31;\n }\n g = (e << 5 | e >>> 27) + b + d[c];\n g = 20 > c ? g + ((f & h | ~f & j) + 1518500249) : 40 > c ? g + ((f ^ h ^ j) + 1859775393) : 60 > c ? g + ((f & h | f & j | h & j) - 1894007588) : g + ((f ^ h ^ j) - 899497514);\n b = j;\n j = h;\n h = f << 30 | f >>> 2;\n f = e;\n e = g;\n }\n a[0] = a[0] + e | 0;\n a[1] = a[1] + f | 0;\n a[2] = a[2] + h | 0;\n a[3] = a[3] + j | 0;\n a[4] = a[4] + b | 0;\n },\n _doFinalize: function () {\n var b = this._data,\n d = b.words,\n a = 8 * this._nDataBytes,\n e = 8 * b.sigBytes;\n d[e >>> 5] |= 128 << 24 - e % 32;\n d[(e + 64 >>> 9 << 4) + 14] = Math.floor(a / 4294967296);\n d[(e + 64 >>> 9 << 4) + 15] = a;\n b.sigBytes = 4 * d.length;\n this._process();\n return this._hash;\n },\n clone: function () {\n var b = l.clone.call(this);\n b._hash = this._hash.clone();\n return b;\n }\n });\n k.SHA1 = l._createHelper(b);\n k.HmacSHA1 = l._createHmacHelper(b);\n})();\n\n/*\nCryptoJS v3.1.2 sha256-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function (k) {\n for (var g = CryptoJS, h = g.lib, v = h.WordArray, j = h.Hasher, h = g.algo, s = [], t = [], u = function (q) {\n return 4294967296 * (q - (q | 0)) | 0;\n }, l = 2, b = 0; 64 > b;) {\n var d;\n a: {\n d = l;\n for (var w = k.sqrt(d), r = 2; r <= w; r++) if (!(d % r)) {\n d = !1;\n break a;\n }\n d = !0;\n }\n d && (8 > b && (s[b] = u(k.pow(l, 0.5))), t[b] = u(k.pow(l, 1 / 3)), b++);\n l++;\n }\n var n = [],\n h = h.SHA256 = j.extend({\n _doReset: function () {\n this._hash = new v.init(s.slice(0));\n },\n _doProcessBlock: function (q, h) {\n for (var a = this._hash.words, c = a[0], d = a[1], b = a[2], k = a[3], f = a[4], g = a[5], j = a[6], l = a[7], e = 0; 64 > e; e++) {\n if (16 > e) n[e] = q[h + e] | 0;else {\n var m = n[e - 15],\n p = n[e - 2];\n n[e] = ((m << 25 | m >>> 7) ^ (m << 14 | m >>> 18) ^ m >>> 3) + n[e - 7] + ((p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10) + n[e - 16];\n }\n m = l + ((f << 26 | f >>> 6) ^ (f << 21 | f >>> 11) ^ (f << 7 | f >>> 25)) + (f & g ^ ~f & j) + t[e] + n[e];\n p = ((c << 30 | c >>> 2) ^ (c << 19 | c >>> 13) ^ (c << 10 | c >>> 22)) + (c & d ^ c & b ^ d & b);\n l = j;\n j = g;\n g = f;\n f = k + m | 0;\n k = b;\n b = d;\n d = c;\n c = m + p | 0;\n }\n a[0] = a[0] + c | 0;\n a[1] = a[1] + d | 0;\n a[2] = a[2] + b | 0;\n a[3] = a[3] + k | 0;\n a[4] = a[4] + f | 0;\n a[5] = a[5] + g | 0;\n a[6] = a[6] + j | 0;\n a[7] = a[7] + l | 0;\n },\n _doFinalize: function () {\n var d = this._data,\n b = d.words,\n a = 8 * this._nDataBytes,\n c = 8 * d.sigBytes;\n b[c >>> 5] |= 128 << 24 - c % 32;\n b[(c + 64 >>> 9 << 4) + 14] = k.floor(a / 4294967296);\n b[(c + 64 >>> 9 << 4) + 15] = a;\n d.sigBytes = 4 * b.length;\n this._process();\n return this._hash;\n },\n clone: function () {\n var b = j.clone.call(this);\n b._hash = this._hash.clone();\n return b;\n }\n });\n g.SHA256 = j._createHelper(h);\n g.HmacSHA256 = j._createHmacHelper(h);\n})(Math);\n\n/*\nCryptoJS v3.1.2 sha224-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n var b = CryptoJS,\n d = b.lib.WordArray,\n a = b.algo,\n c = a.SHA256,\n a = a.SHA224 = c.extend({\n _doReset: function () {\n this._hash = new d.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428]);\n },\n _doFinalize: function () {\n var a = c._doFinalize.call(this);\n a.sigBytes -= 4;\n return a;\n }\n });\n b.SHA224 = c._createHelper(a);\n b.HmacSHA224 = c._createHmacHelper(a);\n})();\n\n/*\nCryptoJS v3.1.2 sha512-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n function a() {\n return d.create.apply(d, arguments);\n }\n for (var n = CryptoJS, r = n.lib.Hasher, e = n.x64, d = e.Word, T = e.WordArray, e = n.algo, ea = [a(1116352408, 3609767458), a(1899447441, 602891725), a(3049323471, 3964484399), a(3921009573, 2173295548), a(961987163, 4081628472), a(1508970993, 3053834265), a(2453635748, 2937671579), a(2870763221, 3664609560), a(3624381080, 2734883394), a(310598401, 1164996542), a(607225278, 1323610764), a(1426881987, 3590304994), a(1925078388, 4068182383), a(2162078206, 991336113), a(2614888103, 633803317), a(3248222580, 3479774868), a(3835390401, 2666613458), a(4022224774, 944711139), a(264347078, 2341262773), a(604807628, 2007800933), a(770255983, 1495990901), a(1249150122, 1856431235), a(1555081692, 3175218132), a(1996064986, 2198950837), a(2554220882, 3999719339), a(2821834349, 766784016), a(2952996808, 2566594879), a(3210313671, 3203337956), a(3336571891, 1034457026), a(3584528711, 2466948901), a(113926993, 3758326383), a(338241895, 168717936), a(666307205, 1188179964), a(773529912, 1546045734), a(1294757372, 1522805485), a(1396182291, 2643833823), a(1695183700, 2343527390), a(1986661051, 1014477480), a(2177026350, 1206759142), a(2456956037, 344077627), a(2730485921, 1290863460), a(2820302411, 3158454273), a(3259730800, 3505952657), a(3345764771, 106217008), a(3516065817, 3606008344), a(3600352804, 1432725776), a(4094571909, 1467031594), a(275423344, 851169720), a(430227734, 3100823752), a(506948616, 1363258195), a(659060556, 3750685593), a(883997877, 3785050280), a(958139571, 3318307427), a(1322822218, 3812723403), a(1537002063, 2003034995), a(1747873779, 3602036899), a(1955562222, 1575990012), a(2024104815, 1125592928), a(2227730452, 2716904306), a(2361852424, 442776044), a(2428436474, 593698344), a(2756734187, 3733110249), a(3204031479, 2999351573), a(3329325298, 3815920427), a(3391569614, 3928383900), a(3515267271, 566280711), a(3940187606, 3454069534), a(4118630271, 4000239992), a(116418474, 1914138554), a(174292421, 2731055270), a(289380356, 3203993006), a(460393269, 320620315), a(685471733, 587496836), a(852142971, 1086792851), a(1017036298, 365543100), a(1126000580, 2618297676), a(1288033470, 3409855158), a(1501505948, 4234509866), a(1607167915, 987167468), a(1816402316, 1246189591)], v = [], w = 0; 80 > w; w++) v[w] = a();\n e = e.SHA512 = r.extend({\n _doReset: function () {\n this._hash = new T.init([new d.init(1779033703, 4089235720), new d.init(3144134277, 2227873595), new d.init(1013904242, 4271175723), new d.init(2773480762, 1595750129), new d.init(1359893119, 2917565137), new d.init(2600822924, 725511199), new d.init(528734635, 4215389547), new d.init(1541459225, 327033209)]);\n },\n _doProcessBlock: function (a, d) {\n for (var f = this._hash.words, F = f[0], e = f[1], n = f[2], r = f[3], G = f[4], H = f[5], I = f[6], f = f[7], w = F.high, J = F.low, X = e.high, K = e.low, Y = n.high, L = n.low, Z = r.high, M = r.low, $ = G.high, N = G.low, aa = H.high, O = H.low, ba = I.high, P = I.low, ca = f.high, Q = f.low, k = w, g = J, z = X, x = K, A = Y, y = L, U = Z, B = M, l = $, h = N, R = aa, C = O, S = ba, D = P, V = ca, E = Q, m = 0; 80 > m; m++) {\n var s = v[m];\n if (16 > m) var j = s.high = a[d + 2 * m] | 0,\n b = s.low = a[d + 2 * m + 1] | 0;else {\n var j = v[m - 15],\n b = j.high,\n p = j.low,\n j = (b >>> 1 | p << 31) ^ (b >>> 8 | p << 24) ^ b >>> 7,\n p = (p >>> 1 | b << 31) ^ (p >>> 8 | b << 24) ^ (p >>> 7 | b << 25),\n u = v[m - 2],\n b = u.high,\n c = u.low,\n u = (b >>> 19 | c << 13) ^ (b << 3 | c >>> 29) ^ b >>> 6,\n c = (c >>> 19 | b << 13) ^ (c << 3 | b >>> 29) ^ (c >>> 6 | b << 26),\n b = v[m - 7],\n W = b.high,\n t = v[m - 16],\n q = t.high,\n t = t.low,\n b = p + b.low,\n j = j + W + (b >>> 0 < p >>> 0 ? 1 : 0),\n b = b + c,\n j = j + u + (b >>> 0 < c >>> 0 ? 1 : 0),\n b = b + t,\n j = j + q + (b >>> 0 < t >>> 0 ? 1 : 0);\n s.high = j;\n s.low = b;\n }\n var W = l & R ^ ~l & S,\n t = h & C ^ ~h & D,\n s = k & z ^ k & A ^ z & A,\n T = g & x ^ g & y ^ x & y,\n p = (k >>> 28 | g << 4) ^ (k << 30 | g >>> 2) ^ (k << 25 | g >>> 7),\n u = (g >>> 28 | k << 4) ^ (g << 30 | k >>> 2) ^ (g << 25 | k >>> 7),\n c = ea[m],\n fa = c.high,\n da = c.low,\n c = E + ((h >>> 14 | l << 18) ^ (h >>> 18 | l << 14) ^ (h << 23 | l >>> 9)),\n q = V + ((l >>> 14 | h << 18) ^ (l >>> 18 | h << 14) ^ (l << 23 | h >>> 9)) + (c >>> 0 < E >>> 0 ? 1 : 0),\n c = c + t,\n q = q + W + (c >>> 0 < t >>> 0 ? 1 : 0),\n c = c + da,\n q = q + fa + (c >>> 0 < da >>> 0 ? 1 : 0),\n c = c + b,\n q = q + j + (c >>> 0 < b >>> 0 ? 1 : 0),\n b = u + T,\n s = p + s + (b >>> 0 < u >>> 0 ? 1 : 0),\n V = S,\n E = D,\n S = R,\n D = C,\n R = l,\n C = h,\n h = B + c | 0,\n l = U + q + (h >>> 0 < B >>> 0 ? 1 : 0) | 0,\n U = A,\n B = y,\n A = z,\n y = x,\n z = k,\n x = g,\n g = c + b | 0,\n k = q + s + (g >>> 0 < c >>> 0 ? 1 : 0) | 0;\n }\n J = F.low = J + g;\n F.high = w + k + (J >>> 0 < g >>> 0 ? 1 : 0);\n K = e.low = K + x;\n e.high = X + z + (K >>> 0 < x >>> 0 ? 1 : 0);\n L = n.low = L + y;\n n.high = Y + A + (L >>> 0 < y >>> 0 ? 1 : 0);\n M = r.low = M + B;\n r.high = Z + U + (M >>> 0 < B >>> 0 ? 1 : 0);\n N = G.low = N + h;\n G.high = $ + l + (N >>> 0 < h >>> 0 ? 1 : 0);\n O = H.low = O + C;\n H.high = aa + R + (O >>> 0 < C >>> 0 ? 1 : 0);\n P = I.low = P + D;\n I.high = ba + S + (P >>> 0 < D >>> 0 ? 1 : 0);\n Q = f.low = Q + E;\n f.high = ca + V + (Q >>> 0 < E >>> 0 ? 1 : 0);\n },\n _doFinalize: function () {\n var a = this._data,\n d = a.words,\n f = 8 * this._nDataBytes,\n e = 8 * a.sigBytes;\n d[e >>> 5] |= 128 << 24 - e % 32;\n d[(e + 128 >>> 10 << 5) + 30] = Math.floor(f / 4294967296);\n d[(e + 128 >>> 10 << 5) + 31] = f;\n a.sigBytes = 4 * d.length;\n this._process();\n return this._hash.toX32();\n },\n clone: function () {\n var a = r.clone.call(this);\n a._hash = this._hash.clone();\n return a;\n },\n blockSize: 32\n });\n n.SHA512 = r._createHelper(e);\n n.HmacSHA512 = r._createHmacHelper(e);\n})();\n\n/*\nCryptoJS v3.1.2 sha384-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n var c = CryptoJS,\n a = c.x64,\n b = a.Word,\n e = a.WordArray,\n a = c.algo,\n d = a.SHA512,\n a = a.SHA384 = d.extend({\n _doReset: function () {\n this._hash = new e.init([new b.init(3418070365, 3238371032), new b.init(1654270250, 914150663), new b.init(2438529370, 812702999), new b.init(355462360, 4144912697), new b.init(1731405415, 4290775857), new b.init(2394180231, 1750603025), new b.init(3675008525, 1694076839), new b.init(1203062813, 3204075428)]);\n },\n _doFinalize: function () {\n var a = d._doFinalize.call(this);\n a.sigBytes -= 16;\n return a;\n }\n });\n c.SHA384 = d._createHelper(a);\n c.HmacSHA384 = d._createHmacHelper(a);\n})();\n\n/*\nCryptoJS v3.1.2 ripemd160-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n/*\n\n(c) 2012 by Cedric Mesnil. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n(function () {\n var q = CryptoJS,\n d = q.lib,\n n = d.WordArray,\n p = d.Hasher,\n d = q.algo,\n x = n.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]),\n y = n.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]),\n z = n.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6]),\n A = n.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11]),\n B = n.create([0, 1518500249, 1859775393, 2400959708, 2840853838]),\n C = n.create([1352829926, 1548603684, 1836072691, 2053994217, 0]),\n d = d.RIPEMD160 = p.extend({\n _doReset: function () {\n this._hash = n.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520]);\n },\n _doProcessBlock: function (e, v) {\n for (var b = 0; 16 > b; b++) {\n var c = v + b,\n f = e[c];\n e[c] = (f << 8 | f >>> 24) & 16711935 | (f << 24 | f >>> 8) & 4278255360;\n }\n var c = this._hash.words,\n f = B.words,\n d = C.words,\n n = x.words,\n q = y.words,\n p = z.words,\n w = A.words,\n t,\n g,\n h,\n j,\n r,\n u,\n k,\n l,\n m,\n s;\n u = t = c[0];\n k = g = c[1];\n l = h = c[2];\n m = j = c[3];\n s = r = c[4];\n for (var a, b = 0; 80 > b; b += 1) a = t + e[v + n[b]] | 0, a = 16 > b ? a + ((g ^ h ^ j) + f[0]) : 32 > b ? a + ((g & h | ~g & j) + f[1]) : 48 > b ? a + (((g | ~h) ^ j) + f[2]) : 64 > b ? a + ((g & j | h & ~j) + f[3]) : a + ((g ^ (h | ~j)) + f[4]), a |= 0, a = a << p[b] | a >>> 32 - p[b], a = a + r | 0, t = r, r = j, j = h << 10 | h >>> 22, h = g, g = a, a = u + e[v + q[b]] | 0, a = 16 > b ? a + ((k ^ (l | ~m)) + d[0]) : 32 > b ? a + ((k & m | l & ~m) + d[1]) : 48 > b ? a + (((k | ~l) ^ m) + d[2]) : 64 > b ? a + ((k & l | ~k & m) + d[3]) : a + ((k ^ l ^ m) + d[4]), a |= 0, a = a << w[b] | a >>> 32 - w[b], a = a + s | 0, u = s, s = m, m = l << 10 | l >>> 22, l = k, k = a;\n a = c[1] + h + m | 0;\n c[1] = c[2] + j + s | 0;\n c[2] = c[3] + r + u | 0;\n c[3] = c[4] + t + k | 0;\n c[4] = c[0] + g + l | 0;\n c[0] = a;\n },\n _doFinalize: function () {\n var e = this._data,\n d = e.words,\n b = 8 * this._nDataBytes,\n c = 8 * e.sigBytes;\n d[c >>> 5] |= 128 << 24 - c % 32;\n d[(c + 64 >>> 9 << 4) + 14] = (b << 8 | b >>> 24) & 16711935 | (b << 24 | b >>> 8) & 4278255360;\n e.sigBytes = 4 * (d.length + 1);\n this._process();\n e = this._hash;\n d = e.words;\n for (b = 0; 5 > b; b++) c = d[b], d[b] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360;\n return e;\n },\n clone: function () {\n var d = p.clone.call(this);\n d._hash = this._hash.clone();\n return d;\n }\n });\n q.RIPEMD160 = p._createHelper(d);\n q.HmacRIPEMD160 = p._createHmacHelper(d);\n})(Math);\n\n/*\nCryptoJS v3.1.2 hmac.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n var c = CryptoJS,\n k = c.enc.Utf8;\n c.algo.HMAC = c.lib.Base.extend({\n init: function (a, b) {\n a = this._hasher = new a.init();\n \"string\" == typeof b && (b = k.parse(b));\n var c = a.blockSize,\n e = 4 * c;\n b.sigBytes > e && (b = a.finalize(b));\n b.clamp();\n for (var f = this._oKey = b.clone(), g = this._iKey = b.clone(), h = f.words, j = g.words, d = 0; d < c; d++) h[d] ^= 1549556828, j[d] ^= 909522486;\n f.sigBytes = g.sigBytes = e;\n this.reset();\n },\n reset: function () {\n var a = this._hasher;\n a.reset();\n a.update(this._iKey);\n },\n update: function (a) {\n this._hasher.update(a);\n return this;\n },\n finalize: function (a) {\n var b = this._hasher;\n a = b.finalize(a);\n b.reset();\n return b.finalize(this._oKey.clone().concat(a));\n }\n });\n})();\n\n/*\nCryptoJS v3.1.2 pbkdf2-min.js\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\n(function () {\n var b = CryptoJS,\n a = b.lib,\n d = a.Base,\n m = a.WordArray,\n a = b.algo,\n q = a.HMAC,\n l = a.PBKDF2 = d.extend({\n cfg: d.extend({\n keySize: 4,\n hasher: a.SHA1,\n iterations: 1\n }),\n init: function (a) {\n this.cfg = this.cfg.extend(a);\n },\n compute: function (a, b) {\n for (var c = this.cfg, f = q.create(c.hasher, a), g = m.create(), d = m.create([1]), l = g.words, r = d.words, n = c.keySize, c = c.iterations; l.length < n;) {\n var h = f.update(b).finalize(d);\n f.reset();\n for (var j = h.words, s = j.length, k = h, p = 1; p < c; p++) {\n k = f.finalize(k);\n f.reset();\n for (var t = k.words, e = 0; e < s; e++) j[e] ^= t[e];\n }\n g.concat(h);\n r[0]++;\n }\n g.sigBytes = 4 * n;\n return g;\n }\n });\n b.PBKDF2 = function (a, b, c) {\n return l.create(c).compute(a, b);\n };\n})();\n\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nvar b64map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar b64pad = \"=\";\nfunction hex2b64(d) {\n var b;\n var e;\n var a = \"\";\n for (b = 0; b + 3 <= d.length; b += 3) {\n e = parseInt(d.substring(b, b + 3), 16);\n a += b64map.charAt(e >> 6) + b64map.charAt(e & 63);\n }\n if (b + 1 == d.length) {\n e = parseInt(d.substring(b, b + 1), 16);\n a += b64map.charAt(e << 2);\n } else {\n if (b + 2 == d.length) {\n e = parseInt(d.substring(b, b + 2), 16);\n a += b64map.charAt(e >> 2) + b64map.charAt((e & 3) << 4);\n }\n }\n if (b64pad) {\n while ((a.length & 3) > 0) {\n a += b64pad;\n }\n }\n return a;\n}\nfunction b64tohex(f) {\n var d = \"\";\n var e;\n var b = 0;\n var c;\n var a;\n for (e = 0; e < f.length; ++e) {\n if (f.charAt(e) == b64pad) {\n break;\n }\n a = b64map.indexOf(f.charAt(e));\n if (a < 0) {\n continue;\n }\n if (b == 0) {\n d += int2char(a >> 2);\n c = a & 3;\n b = 1;\n } else {\n if (b == 1) {\n d += int2char(c << 2 | a >> 4);\n c = a & 15;\n b = 2;\n } else {\n if (b == 2) {\n d += int2char(c);\n d += int2char(a >> 2);\n c = a & 3;\n b = 3;\n } else {\n d += int2char(c << 2 | a >> 4);\n d += int2char(a & 15);\n b = 0;\n }\n }\n }\n }\n if (b == 1) {\n d += int2char(c << 2);\n }\n return d;\n}\nfunction b64toBA(e) {\n var d = b64tohex(e);\n var c;\n var b = new Array();\n for (c = 0; 2 * c < d.length; ++c) {\n b[c] = parseInt(d.substring(2 * c, 2 * c + 2), 16);\n }\n return b;\n}\n;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nvar dbits;\nvar canary = 244837814094590;\nvar j_lm = (canary & 16777215) == 15715070;\nfunction BigInteger(e, d, f) {\n if (e != null) {\n if (\"number\" == typeof e) {\n this.fromNumber(e, d, f);\n } else {\n if (d == null && \"string\" != typeof e) {\n this.fromString(e, 256);\n } else {\n this.fromString(e, d);\n }\n }\n }\n}\nfunction nbi() {\n return new BigInteger(null);\n}\nfunction am1(f, a, b, e, h, g) {\n while (--g >= 0) {\n var d = a * this[f++] + b[e] + h;\n h = Math.floor(d / 67108864);\n b[e++] = d & 67108863;\n }\n return h;\n}\nfunction am2(f, q, r, e, o, a) {\n var k = q & 32767,\n p = q >> 15;\n while (--a >= 0) {\n var d = this[f] & 32767;\n var g = this[f++] >> 15;\n var b = p * d + g * k;\n d = k * d + ((b & 32767) << 15) + r[e] + (o & 1073741823);\n o = (d >>> 30) + (b >>> 15) + p * g + (o >>> 30);\n r[e++] = d & 1073741823;\n }\n return o;\n}\nfunction am3(f, q, r, e, o, a) {\n var k = q & 16383,\n p = q >> 14;\n while (--a >= 0) {\n var d = this[f] & 16383;\n var g = this[f++] >> 14;\n var b = p * d + g * k;\n d = k * d + ((b & 16383) << 14) + r[e] + o;\n o = (d >> 28) + (b >> 14) + p * g;\n r[e++] = d & 268435455;\n }\n return o;\n}\nif (j_lm && navigator.appName == \"Microsoft Internet Explorer\") {\n BigInteger.prototype.am = am2;\n dbits = 30;\n} else {\n if (j_lm && navigator.appName != \"Netscape\") {\n BigInteger.prototype.am = am1;\n dbits = 26;\n } else {\n BigInteger.prototype.am = am3;\n dbits = 28;\n }\n}\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = (1 << dbits) - 1;\nBigInteger.prototype.DV = 1 << dbits;\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nvar BI_RC = new Array();\nvar rr, vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nfunction int2char(a) {\n return BI_RM.charAt(a);\n}\nfunction intAt(b, a) {\n var d = BI_RC[b.charCodeAt(a)];\n return d == null ? -1 : d;\n}\nfunction bnpCopyTo(b) {\n for (var a = this.t - 1; a >= 0; --a) {\n b[a] = this[a];\n }\n b.t = this.t;\n b.s = this.s;\n}\nfunction bnpFromInt(a) {\n this.t = 1;\n this.s = a < 0 ? -1 : 0;\n if (a > 0) {\n this[0] = a;\n } else {\n if (a < -1) {\n this[0] = a + this.DV;\n } else {\n this.t = 0;\n }\n }\n}\nfunction nbv(a) {\n var b = nbi();\n b.fromInt(a);\n return b;\n}\nfunction bnpFromString(h, c) {\n var e;\n if (c == 16) {\n e = 4;\n } else {\n if (c == 8) {\n e = 3;\n } else {\n if (c == 256) {\n e = 8;\n } else {\n if (c == 2) {\n e = 1;\n } else {\n if (c == 32) {\n e = 5;\n } else {\n if (c == 4) {\n e = 2;\n } else {\n this.fromRadix(h, c);\n return;\n }\n }\n }\n }\n }\n }\n this.t = 0;\n this.s = 0;\n var g = h.length,\n d = false,\n f = 0;\n while (--g >= 0) {\n var a = e == 8 ? h[g] & 255 : intAt(h, g);\n if (a < 0) {\n if (h.charAt(g) == \"-\") {\n d = true;\n }\n continue;\n }\n d = false;\n if (f == 0) {\n this[this.t++] = a;\n } else {\n if (f + e > this.DB) {\n this[this.t - 1] |= (a & (1 << this.DB - f) - 1) << f;\n this[this.t++] = a >> this.DB - f;\n } else {\n this[this.t - 1] |= a << f;\n }\n }\n f += e;\n if (f >= this.DB) {\n f -= this.DB;\n }\n }\n if (e == 8 && (h[0] & 128) != 0) {\n this.s = -1;\n if (f > 0) {\n this[this.t - 1] |= (1 << this.DB - f) - 1 << f;\n }\n }\n this.clamp();\n if (d) {\n BigInteger.ZERO.subTo(this, this);\n }\n}\nfunction bnpClamp() {\n var a = this.s & this.DM;\n while (this.t > 0 && this[this.t - 1] == a) {\n --this.t;\n }\n}\nfunction bnToString(c) {\n if (this.s < 0) {\n return \"-\" + this.negate().toString(c);\n }\n var e;\n if (c == 16) {\n e = 4;\n } else {\n if (c == 8) {\n e = 3;\n } else {\n if (c == 2) {\n e = 1;\n } else {\n if (c == 32) {\n e = 5;\n } else {\n if (c == 4) {\n e = 2;\n } else {\n return this.toRadix(c);\n }\n }\n }\n }\n }\n var g = (1 << e) - 1,\n l,\n a = false,\n h = \"\",\n f = this.t;\n var j = this.DB - f * this.DB % e;\n if (f-- > 0) {\n if (j < this.DB && (l = this[f] >> j) > 0) {\n a = true;\n h = int2char(l);\n }\n while (f >= 0) {\n if (j < e) {\n l = (this[f] & (1 << j) - 1) << e - j;\n l |= this[--f] >> (j += this.DB - e);\n } else {\n l = this[f] >> (j -= e) & g;\n if (j <= 0) {\n j += this.DB;\n --f;\n }\n }\n if (l > 0) {\n a = true;\n }\n if (a) {\n h += int2char(l);\n }\n }\n }\n return a ? h : \"0\";\n}\nfunction bnNegate() {\n var a = nbi();\n BigInteger.ZERO.subTo(this, a);\n return a;\n}\nfunction bnAbs() {\n return this.s < 0 ? this.negate() : this;\n}\nfunction bnCompareTo(b) {\n var d = this.s - b.s;\n if (d != 0) {\n return d;\n }\n var c = this.t;\n d = c - b.t;\n if (d != 0) {\n return this.s < 0 ? -d : d;\n }\n while (--c >= 0) {\n if ((d = this[c] - b[c]) != 0) {\n return d;\n }\n }\n return 0;\n}\nfunction nbits(a) {\n var c = 1,\n b;\n if ((b = a >>> 16) != 0) {\n a = b;\n c += 16;\n }\n if ((b = a >> 8) != 0) {\n a = b;\n c += 8;\n }\n if ((b = a >> 4) != 0) {\n a = b;\n c += 4;\n }\n if ((b = a >> 2) != 0) {\n a = b;\n c += 2;\n }\n if ((b = a >> 1) != 0) {\n a = b;\n c += 1;\n }\n return c;\n}\nfunction bnBitLength() {\n if (this.t <= 0) {\n return 0;\n }\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM);\n}\nfunction bnpDLShiftTo(c, b) {\n var a;\n for (a = this.t - 1; a >= 0; --a) {\n b[a + c] = this[a];\n }\n for (a = c - 1; a >= 0; --a) {\n b[a] = 0;\n }\n b.t = this.t + c;\n b.s = this.s;\n}\nfunction bnpDRShiftTo(c, b) {\n for (var a = c; a < this.t; ++a) {\n b[a - c] = this[a];\n }\n b.t = Math.max(this.t - c, 0);\n b.s = this.s;\n}\nfunction bnpLShiftTo(j, e) {\n var b = j % this.DB;\n var a = this.DB - b;\n var g = (1 << a) - 1;\n var f = Math.floor(j / this.DB),\n h = this.s << b & this.DM,\n d;\n for (d = this.t - 1; d >= 0; --d) {\n e[d + f + 1] = this[d] >> a | h;\n h = (this[d] & g) << b;\n }\n for (d = f - 1; d >= 0; --d) {\n e[d] = 0;\n }\n e[f] = h;\n e.t = this.t + f + 1;\n e.s = this.s;\n e.clamp();\n}\nfunction bnpRShiftTo(g, d) {\n d.s = this.s;\n var e = Math.floor(g / this.DB);\n if (e >= this.t) {\n d.t = 0;\n return;\n }\n var b = g % this.DB;\n var a = this.DB - b;\n var f = (1 << b) - 1;\n d[0] = this[e] >> b;\n for (var c = e + 1; c < this.t; ++c) {\n d[c - e - 1] |= (this[c] & f) << a;\n d[c - e] = this[c] >> b;\n }\n if (b > 0) {\n d[this.t - e - 1] |= (this.s & f) << a;\n }\n d.t = this.t - e;\n d.clamp();\n}\nfunction bnpSubTo(d, f) {\n var e = 0,\n g = 0,\n b = Math.min(d.t, this.t);\n while (e < b) {\n g += this[e] - d[e];\n f[e++] = g & this.DM;\n g >>= this.DB;\n }\n if (d.t < this.t) {\n g -= d.s;\n while (e < this.t) {\n g += this[e];\n f[e++] = g & this.DM;\n g >>= this.DB;\n }\n g += this.s;\n } else {\n g += this.s;\n while (e < d.t) {\n g -= d[e];\n f[e++] = g & this.DM;\n g >>= this.DB;\n }\n g -= d.s;\n }\n f.s = g < 0 ? -1 : 0;\n if (g < -1) {\n f[e++] = this.DV + g;\n } else {\n if (g > 0) {\n f[e++] = g;\n }\n }\n f.t = e;\n f.clamp();\n}\nfunction bnpMultiplyTo(c, e) {\n var b = this.abs(),\n f = c.abs();\n var d = b.t;\n e.t = d + f.t;\n while (--d >= 0) {\n e[d] = 0;\n }\n for (d = 0; d < f.t; ++d) {\n e[d + b.t] = b.am(0, f[d], e, d, 0, b.t);\n }\n e.s = 0;\n e.clamp();\n if (this.s != c.s) {\n BigInteger.ZERO.subTo(e, e);\n }\n}\nfunction bnpSquareTo(d) {\n var a = this.abs();\n var b = d.t = 2 * a.t;\n while (--b >= 0) {\n d[b] = 0;\n }\n for (b = 0; b < a.t - 1; ++b) {\n var e = a.am(b, a[b], d, 2 * b, 0, 1);\n if ((d[b + a.t] += a.am(b + 1, 2 * a[b], d, 2 * b + 1, e, a.t - b - 1)) >= a.DV) {\n d[b + a.t] -= a.DV;\n d[b + a.t + 1] = 1;\n }\n }\n if (d.t > 0) {\n d[d.t - 1] += a.am(b, a[b], d, 2 * b, 0, 1);\n }\n d.s = 0;\n d.clamp();\n}\nfunction bnpDivRemTo(n, h, g) {\n var w = n.abs();\n if (w.t <= 0) {\n return;\n }\n var k = this.abs();\n if (k.t < w.t) {\n if (h != null) {\n h.fromInt(0);\n }\n if (g != null) {\n this.copyTo(g);\n }\n return;\n }\n if (g == null) {\n g = nbi();\n }\n var d = nbi(),\n a = this.s,\n l = n.s;\n var v = this.DB - nbits(w[w.t - 1]);\n if (v > 0) {\n w.lShiftTo(v, d);\n k.lShiftTo(v, g);\n } else {\n w.copyTo(d);\n k.copyTo(g);\n }\n var p = d.t;\n var b = d[p - 1];\n if (b == 0) {\n return;\n }\n var o = b * (1 << this.F1) + (p > 1 ? d[p - 2] >> this.F2 : 0);\n var A = this.FV / o,\n z = (1 << this.F1) / o,\n x = 1 << this.F2;\n var u = g.t,\n s = u - p,\n f = h == null ? nbi() : h;\n d.dlShiftTo(s, f);\n if (g.compareTo(f) >= 0) {\n g[g.t++] = 1;\n g.subTo(f, g);\n }\n BigInteger.ONE.dlShiftTo(p, f);\n f.subTo(d, d);\n while (d.t < p) {\n d[d.t++] = 0;\n }\n while (--s >= 0) {\n var c = g[--u] == b ? this.DM : Math.floor(g[u] * A + (g[u - 1] + x) * z);\n if ((g[u] += d.am(0, c, g, s, 0, p)) < c) {\n d.dlShiftTo(s, f);\n g.subTo(f, g);\n while (g[u] < --c) {\n g.subTo(f, g);\n }\n }\n }\n if (h != null) {\n g.drShiftTo(p, h);\n if (a != l) {\n BigInteger.ZERO.subTo(h, h);\n }\n }\n g.t = p;\n g.clamp();\n if (v > 0) {\n g.rShiftTo(v, g);\n }\n if (a < 0) {\n BigInteger.ZERO.subTo(g, g);\n }\n}\nfunction bnMod(b) {\n var c = nbi();\n this.abs().divRemTo(b, null, c);\n if (this.s < 0 && c.compareTo(BigInteger.ZERO) > 0) {\n b.subTo(c, c);\n }\n return c;\n}\nfunction Classic(a) {\n this.m = a;\n}\nfunction cConvert(a) {\n if (a.s < 0 || a.compareTo(this.m) >= 0) {\n return a.mod(this.m);\n } else {\n return a;\n }\n}\nfunction cRevert(a) {\n return a;\n}\nfunction cReduce(a) {\n a.divRemTo(this.m, null, a);\n}\nfunction cMulTo(a, c, b) {\n a.multiplyTo(c, b);\n this.reduce(b);\n}\nfunction cSqrTo(a, b) {\n a.squareTo(b);\n this.reduce(b);\n}\nClassic.prototype.convert = cConvert;\nClassic.prototype.revert = cRevert;\nClassic.prototype.reduce = cReduce;\nClassic.prototype.mulTo = cMulTo;\nClassic.prototype.sqrTo = cSqrTo;\nfunction bnpInvDigit() {\n if (this.t < 1) {\n return 0;\n }\n var a = this[0];\n if ((a & 1) == 0) {\n return 0;\n }\n var b = a & 3;\n b = b * (2 - (a & 15) * b) & 15;\n b = b * (2 - (a & 255) * b) & 255;\n b = b * (2 - ((a & 65535) * b & 65535)) & 65535;\n b = b * (2 - a * b % this.DV) % this.DV;\n return b > 0 ? this.DV - b : -b;\n}\nfunction Montgomery(a) {\n this.m = a;\n this.mp = a.invDigit();\n this.mpl = this.mp & 32767;\n this.mph = this.mp >> 15;\n this.um = (1 << a.DB - 15) - 1;\n this.mt2 = 2 * a.t;\n}\nfunction montConvert(a) {\n var b = nbi();\n a.abs().dlShiftTo(this.m.t, b);\n b.divRemTo(this.m, null, b);\n if (a.s < 0 && b.compareTo(BigInteger.ZERO) > 0) {\n this.m.subTo(b, b);\n }\n return b;\n}\nfunction montRevert(a) {\n var b = nbi();\n a.copyTo(b);\n this.reduce(b);\n return b;\n}\nfunction montReduce(a) {\n while (a.t <= this.mt2) {\n a[a.t++] = 0;\n }\n for (var c = 0; c < this.m.t; ++c) {\n var b = a[c] & 32767;\n var d = b * this.mpl + ((b * this.mph + (a[c] >> 15) * this.mpl & this.um) << 15) & a.DM;\n b = c + this.m.t;\n a[b] += this.m.am(0, d, a, c, 0, this.m.t);\n while (a[b] >= a.DV) {\n a[b] -= a.DV;\n a[++b]++;\n }\n }\n a.clamp();\n a.drShiftTo(this.m.t, a);\n if (a.compareTo(this.m) >= 0) {\n a.subTo(this.m, a);\n }\n}\nfunction montSqrTo(a, b) {\n a.squareTo(b);\n this.reduce(b);\n}\nfunction montMulTo(a, c, b) {\n a.multiplyTo(c, b);\n this.reduce(b);\n}\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo;\nfunction bnpIsEven() {\n return (this.t > 0 ? this[0] & 1 : this.s) == 0;\n}\nfunction bnpExp(h, j) {\n if (h > 4294967295 || h < 1) {\n return BigInteger.ONE;\n }\n var f = nbi(),\n a = nbi(),\n d = j.convert(this),\n c = nbits(h) - 1;\n d.copyTo(f);\n while (--c >= 0) {\n j.sqrTo(f, a);\n if ((h & 1 << c) > 0) {\n j.mulTo(a, d, f);\n } else {\n var b = f;\n f = a;\n a = b;\n }\n }\n return j.revert(f);\n}\nfunction bnModPowInt(b, a) {\n var c;\n if (b < 256 || a.isEven()) {\n c = new Classic(a);\n } else {\n c = new Montgomery(a);\n }\n return this.exp(b, c);\n}\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.isEven = bnpIsEven;\nBigInteger.prototype.exp = bnpExp;\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.modPowInt = bnModPowInt;\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction bnClone() {\n var a = nbi();\n this.copyTo(a);\n return a;\n}\nfunction bnIntValue() {\n if (this.s < 0) {\n if (this.t == 1) {\n return this[0] - this.DV;\n } else {\n if (this.t == 0) {\n return -1;\n }\n }\n } else {\n if (this.t == 1) {\n return this[0];\n } else {\n if (this.t == 0) {\n return 0;\n }\n }\n }\n return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0];\n}\nfunction bnByteValue() {\n return this.t == 0 ? this.s : this[0] << 24 >> 24;\n}\nfunction bnShortValue() {\n return this.t == 0 ? this.s : this[0] << 16 >> 16;\n}\nfunction bnpChunkSize(a) {\n return Math.floor(Math.LN2 * this.DB / Math.log(a));\n}\nfunction bnSigNum() {\n if (this.s < 0) {\n return -1;\n } else {\n if (this.t <= 0 || this.t == 1 && this[0] <= 0) {\n return 0;\n } else {\n return 1;\n }\n }\n}\nfunction bnpToRadix(c) {\n if (c == null) {\n c = 10;\n }\n if (this.signum() == 0 || c < 2 || c > 36) {\n return \"0\";\n }\n var f = this.chunkSize(c);\n var e = Math.pow(c, f);\n var i = nbv(e),\n j = nbi(),\n h = nbi(),\n g = \"\";\n this.divRemTo(i, j, h);\n while (j.signum() > 0) {\n g = (e + h.intValue()).toString(c).substr(1) + g;\n j.divRemTo(i, j, h);\n }\n return h.intValue().toString(c) + g;\n}\nfunction bnpFromRadix(m, h) {\n this.fromInt(0);\n if (h == null) {\n h = 10;\n }\n var f = this.chunkSize(h);\n var g = Math.pow(h, f),\n e = false,\n a = 0,\n l = 0;\n for (var c = 0; c < m.length; ++c) {\n var k = intAt(m, c);\n if (k < 0) {\n if (m.charAt(c) == \"-\" && this.signum() == 0) {\n e = true;\n }\n continue;\n }\n l = h * l + k;\n if (++a >= f) {\n this.dMultiply(g);\n this.dAddOffset(l, 0);\n a = 0;\n l = 0;\n }\n }\n if (a > 0) {\n this.dMultiply(Math.pow(h, a));\n this.dAddOffset(l, 0);\n }\n if (e) {\n BigInteger.ZERO.subTo(this, this);\n }\n}\nfunction bnpFromNumber(f, e, h) {\n if (\"number\" == typeof e) {\n if (f < 2) {\n this.fromInt(1);\n } else {\n this.fromNumber(f, h);\n if (!this.testBit(f - 1)) {\n this.bitwiseTo(BigInteger.ONE.shiftLeft(f - 1), op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n }\n while (!this.isProbablePrime(e)) {\n this.dAddOffset(2, 0);\n if (this.bitLength() > f) {\n this.subTo(BigInteger.ONE.shiftLeft(f - 1), this);\n }\n }\n }\n } else {\n var d = new Array(),\n g = f & 7;\n d.length = (f >> 3) + 1;\n e.nextBytes(d);\n if (g > 0) {\n d[0] &= (1 << g) - 1;\n } else {\n d[0] = 0;\n }\n this.fromString(d, 256);\n }\n}\nfunction bnToByteArray() {\n var b = this.t,\n c = new Array();\n c[0] = this.s;\n var e = this.DB - b * this.DB % 8,\n f,\n a = 0;\n if (b-- > 0) {\n if (e < this.DB && (f = this[b] >> e) != (this.s & this.DM) >> e) {\n c[a++] = f | this.s << this.DB - e;\n }\n while (b >= 0) {\n if (e < 8) {\n f = (this[b] & (1 << e) - 1) << 8 - e;\n f |= this[--b] >> (e += this.DB - 8);\n } else {\n f = this[b] >> (e -= 8) & 255;\n if (e <= 0) {\n e += this.DB;\n --b;\n }\n }\n if ((f & 128) != 0) {\n f |= -256;\n }\n if (a == 0 && (this.s & 128) != (f & 128)) {\n ++a;\n }\n if (a > 0 || f != this.s) {\n c[a++] = f;\n }\n }\n }\n return c;\n}\nfunction bnEquals(b) {\n return this.compareTo(b) == 0;\n}\nfunction bnMin(b) {\n return this.compareTo(b) < 0 ? this : b;\n}\nfunction bnMax(b) {\n return this.compareTo(b) > 0 ? this : b;\n}\nfunction bnpBitwiseTo(c, h, e) {\n var d,\n g,\n b = Math.min(c.t, this.t);\n for (d = 0; d < b; ++d) {\n e[d] = h(this[d], c[d]);\n }\n if (c.t < this.t) {\n g = c.s & this.DM;\n for (d = b; d < this.t; ++d) {\n e[d] = h(this[d], g);\n }\n e.t = this.t;\n } else {\n g = this.s & this.DM;\n for (d = b; d < c.t; ++d) {\n e[d] = h(g, c[d]);\n }\n e.t = c.t;\n }\n e.s = h(this.s, c.s);\n e.clamp();\n}\nfunction op_and(a, b) {\n return a & b;\n}\nfunction bnAnd(b) {\n var c = nbi();\n this.bitwiseTo(b, op_and, c);\n return c;\n}\nfunction op_or(a, b) {\n return a | b;\n}\nfunction bnOr(b) {\n var c = nbi();\n this.bitwiseTo(b, op_or, c);\n return c;\n}\nfunction op_xor(a, b) {\n return a ^ b;\n}\nfunction bnXor(b) {\n var c = nbi();\n this.bitwiseTo(b, op_xor, c);\n return c;\n}\nfunction op_andnot(a, b) {\n return a & ~b;\n}\nfunction bnAndNot(b) {\n var c = nbi();\n this.bitwiseTo(b, op_andnot, c);\n return c;\n}\nfunction bnNot() {\n var b = nbi();\n for (var a = 0; a < this.t; ++a) {\n b[a] = this.DM & ~this[a];\n }\n b.t = this.t;\n b.s = ~this.s;\n return b;\n}\nfunction bnShiftLeft(b) {\n var a = nbi();\n if (b < 0) {\n this.rShiftTo(-b, a);\n } else {\n this.lShiftTo(b, a);\n }\n return a;\n}\nfunction bnShiftRight(b) {\n var a = nbi();\n if (b < 0) {\n this.lShiftTo(-b, a);\n } else {\n this.rShiftTo(b, a);\n }\n return a;\n}\nfunction lbit(a) {\n if (a == 0) {\n return -1;\n }\n var b = 0;\n if ((a & 65535) == 0) {\n a >>= 16;\n b += 16;\n }\n if ((a & 255) == 0) {\n a >>= 8;\n b += 8;\n }\n if ((a & 15) == 0) {\n a >>= 4;\n b += 4;\n }\n if ((a & 3) == 0) {\n a >>= 2;\n b += 2;\n }\n if ((a & 1) == 0) {\n ++b;\n }\n return b;\n}\nfunction bnGetLowestSetBit() {\n for (var a = 0; a < this.t; ++a) {\n if (this[a] != 0) {\n return a * this.DB + lbit(this[a]);\n }\n }\n if (this.s < 0) {\n return this.t * this.DB;\n }\n return -1;\n}\nfunction cbit(a) {\n var b = 0;\n while (a != 0) {\n a &= a - 1;\n ++b;\n }\n return b;\n}\nfunction bnBitCount() {\n var c = 0,\n a = this.s & this.DM;\n for (var b = 0; b < this.t; ++b) {\n c += cbit(this[b] ^ a);\n }\n return c;\n}\nfunction bnTestBit(b) {\n var a = Math.floor(b / this.DB);\n if (a >= this.t) {\n return this.s != 0;\n }\n return (this[a] & 1 << b % this.DB) != 0;\n}\nfunction bnpChangeBit(c, b) {\n var a = BigInteger.ONE.shiftLeft(c);\n this.bitwiseTo(a, b, a);\n return a;\n}\nfunction bnSetBit(a) {\n return this.changeBit(a, op_or);\n}\nfunction bnClearBit(a) {\n return this.changeBit(a, op_andnot);\n}\nfunction bnFlipBit(a) {\n return this.changeBit(a, op_xor);\n}\nfunction bnpAddTo(d, f) {\n var e = 0,\n g = 0,\n b = Math.min(d.t, this.t);\n while (e < b) {\n g += this[e] + d[e];\n f[e++] = g & this.DM;\n g >>= this.DB;\n }\n if (d.t < this.t) {\n g += d.s;\n while (e < this.t) {\n g += this[e];\n f[e++] = g & this.DM;\n g >>= this.DB;\n }\n g += this.s;\n } else {\n g += this.s;\n while (e < d.t) {\n g += d[e];\n f[e++] = g & this.DM;\n g >>= this.DB;\n }\n g += d.s;\n }\n f.s = g < 0 ? -1 : 0;\n if (g > 0) {\n f[e++] = g;\n } else {\n if (g < -1) {\n f[e++] = this.DV + g;\n }\n }\n f.t = e;\n f.clamp();\n}\nfunction bnAdd(b) {\n var c = nbi();\n this.addTo(b, c);\n return c;\n}\nfunction bnSubtract(b) {\n var c = nbi();\n this.subTo(b, c);\n return c;\n}\nfunction bnMultiply(b) {\n var c = nbi();\n this.multiplyTo(b, c);\n return c;\n}\nfunction bnSquare() {\n var a = nbi();\n this.squareTo(a);\n return a;\n}\nfunction bnDivide(b) {\n var c = nbi();\n this.divRemTo(b, c, null);\n return c;\n}\nfunction bnRemainder(b) {\n var c = nbi();\n this.divRemTo(b, null, c);\n return c;\n}\nfunction bnDivideAndRemainder(b) {\n var d = nbi(),\n c = nbi();\n this.divRemTo(b, d, c);\n return new Array(d, c);\n}\nfunction bnpDMultiply(a) {\n this[this.t] = this.am(0, a - 1, this, 0, 0, this.t);\n ++this.t;\n this.clamp();\n}\nfunction bnpDAddOffset(b, a) {\n if (b == 0) {\n return;\n }\n while (this.t <= a) {\n this[this.t++] = 0;\n }\n this[a] += b;\n while (this[a] >= this.DV) {\n this[a] -= this.DV;\n if (++a >= this.t) {\n this[this.t++] = 0;\n }\n ++this[a];\n }\n}\nfunction NullExp() {}\nfunction nNop(a) {\n return a;\n}\nfunction nMulTo(a, c, b) {\n a.multiplyTo(c, b);\n}\nfunction nSqrTo(a, b) {\n a.squareTo(b);\n}\nNullExp.prototype.convert = nNop;\nNullExp.prototype.revert = nNop;\nNullExp.prototype.mulTo = nMulTo;\nNullExp.prototype.sqrTo = nSqrTo;\nfunction bnPow(a) {\n return this.exp(a, new NullExp());\n}\nfunction bnpMultiplyLowerTo(b, f, e) {\n var d = Math.min(this.t + b.t, f);\n e.s = 0;\n e.t = d;\n while (d > 0) {\n e[--d] = 0;\n }\n var c;\n for (c = e.t - this.t; d < c; ++d) {\n e[d + this.t] = this.am(0, b[d], e, d, 0, this.t);\n }\n for (c = Math.min(b.t, f); d < c; ++d) {\n this.am(0, b[d], e, d, 0, f - d);\n }\n e.clamp();\n}\nfunction bnpMultiplyUpperTo(b, e, d) {\n --e;\n var c = d.t = this.t + b.t - e;\n d.s = 0;\n while (--c >= 0) {\n d[c] = 0;\n }\n for (c = Math.max(e - this.t, 0); c < b.t; ++c) {\n d[this.t + c - e] = this.am(e - c, b[c], d, 0, 0, this.t + c - e);\n }\n d.clamp();\n d.drShiftTo(1, d);\n}\nfunction Barrett(a) {\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2 * a.t, this.r2);\n this.mu = this.r2.divide(a);\n this.m = a;\n}\nfunction barrettConvert(a) {\n if (a.s < 0 || a.t > 2 * this.m.t) {\n return a.mod(this.m);\n } else {\n if (a.compareTo(this.m) < 0) {\n return a;\n } else {\n var b = nbi();\n a.copyTo(b);\n this.reduce(b);\n return b;\n }\n }\n}\nfunction barrettRevert(a) {\n return a;\n}\nfunction barrettReduce(a) {\n a.drShiftTo(this.m.t - 1, this.r2);\n if (a.t > this.m.t + 1) {\n a.t = this.m.t + 1;\n a.clamp();\n }\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\n while (a.compareTo(this.r2) < 0) {\n a.dAddOffset(1, this.m.t + 1);\n }\n a.subTo(this.r2, a);\n while (a.compareTo(this.m) >= 0) {\n a.subTo(this.m, a);\n }\n}\nfunction barrettSqrTo(a, b) {\n a.squareTo(b);\n this.reduce(b);\n}\nfunction barrettMulTo(a, c, b) {\n a.multiplyTo(c, b);\n this.reduce(b);\n}\nBarrett.prototype.convert = barrettConvert;\nBarrett.prototype.revert = barrettRevert;\nBarrett.prototype.reduce = barrettReduce;\nBarrett.prototype.mulTo = barrettMulTo;\nBarrett.prototype.sqrTo = barrettSqrTo;\nfunction bnModPow(q, f) {\n var o = q.bitLength(),\n h,\n b = nbv(1),\n v;\n if (o <= 0) {\n return b;\n } else {\n if (o < 18) {\n h = 1;\n } else {\n if (o < 48) {\n h = 3;\n } else {\n if (o < 144) {\n h = 4;\n } else {\n if (o < 768) {\n h = 5;\n } else {\n h = 6;\n }\n }\n }\n }\n }\n if (o < 8) {\n v = new Classic(f);\n } else {\n if (f.isEven()) {\n v = new Barrett(f);\n } else {\n v = new Montgomery(f);\n }\n }\n var p = new Array(),\n d = 3,\n s = h - 1,\n a = (1 << h) - 1;\n p[1] = v.convert(this);\n if (h > 1) {\n var A = nbi();\n v.sqrTo(p[1], A);\n while (d <= a) {\n p[d] = nbi();\n v.mulTo(A, p[d - 2], p[d]);\n d += 2;\n }\n }\n var l = q.t - 1,\n x,\n u = true,\n c = nbi(),\n y;\n o = nbits(q[l]) - 1;\n while (l >= 0) {\n if (o >= s) {\n x = q[l] >> o - s & a;\n } else {\n x = (q[l] & (1 << o + 1) - 1) << s - o;\n if (l > 0) {\n x |= q[l - 1] >> this.DB + o - s;\n }\n }\n d = h;\n while ((x & 1) == 0) {\n x >>= 1;\n --d;\n }\n if ((o -= d) < 0) {\n o += this.DB;\n --l;\n }\n if (u) {\n p[x].copyTo(b);\n u = false;\n } else {\n while (d > 1) {\n v.sqrTo(b, c);\n v.sqrTo(c, b);\n d -= 2;\n }\n if (d > 0) {\n v.sqrTo(b, c);\n } else {\n y = b;\n b = c;\n c = y;\n }\n v.mulTo(c, p[x], b);\n }\n while (l >= 0 && (q[l] & 1 << o) == 0) {\n v.sqrTo(b, c);\n y = b;\n b = c;\n c = y;\n if (--o < 0) {\n o = this.DB - 1;\n --l;\n }\n }\n }\n return v.revert(b);\n}\nfunction bnGCD(c) {\n var b = this.s < 0 ? this.negate() : this.clone();\n var h = c.s < 0 ? c.negate() : c.clone();\n if (b.compareTo(h) < 0) {\n var e = b;\n b = h;\n h = e;\n }\n var d = b.getLowestSetBit(),\n f = h.getLowestSetBit();\n if (f < 0) {\n return b;\n }\n if (d < f) {\n f = d;\n }\n if (f > 0) {\n b.rShiftTo(f, b);\n h.rShiftTo(f, h);\n }\n while (b.signum() > 0) {\n if ((d = b.getLowestSetBit()) > 0) {\n b.rShiftTo(d, b);\n }\n if ((d = h.getLowestSetBit()) > 0) {\n h.rShiftTo(d, h);\n }\n if (b.compareTo(h) >= 0) {\n b.subTo(h, b);\n b.rShiftTo(1, b);\n } else {\n h.subTo(b, h);\n h.rShiftTo(1, h);\n }\n }\n if (f > 0) {\n h.lShiftTo(f, h);\n }\n return h;\n}\nfunction bnpModInt(e) {\n if (e <= 0) {\n return 0;\n }\n var c = this.DV % e,\n b = this.s < 0 ? e - 1 : 0;\n if (this.t > 0) {\n if (c == 0) {\n b = this[0] % e;\n } else {\n for (var a = this.t - 1; a >= 0; --a) {\n b = (c * b + this[a]) % e;\n }\n }\n }\n return b;\n}\nfunction bnModInverse(f) {\n var j = f.isEven();\n if (this.isEven() && j || f.signum() == 0) {\n return BigInteger.ZERO;\n }\n var i = f.clone(),\n h = this.clone();\n var g = nbv(1),\n e = nbv(0),\n l = nbv(0),\n k = nbv(1);\n while (i.signum() != 0) {\n while (i.isEven()) {\n i.rShiftTo(1, i);\n if (j) {\n if (!g.isEven() || !e.isEven()) {\n g.addTo(this, g);\n e.subTo(f, e);\n }\n g.rShiftTo(1, g);\n } else {\n if (!e.isEven()) {\n e.subTo(f, e);\n }\n }\n e.rShiftTo(1, e);\n }\n while (h.isEven()) {\n h.rShiftTo(1, h);\n if (j) {\n if (!l.isEven() || !k.isEven()) {\n l.addTo(this, l);\n k.subTo(f, k);\n }\n l.rShiftTo(1, l);\n } else {\n if (!k.isEven()) {\n k.subTo(f, k);\n }\n }\n k.rShiftTo(1, k);\n }\n if (i.compareTo(h) >= 0) {\n i.subTo(h, i);\n if (j) {\n g.subTo(l, g);\n }\n e.subTo(k, e);\n } else {\n h.subTo(i, h);\n if (j) {\n l.subTo(g, l);\n }\n k.subTo(e, k);\n }\n }\n if (h.compareTo(BigInteger.ONE) != 0) {\n return BigInteger.ZERO;\n }\n if (k.compareTo(f) >= 0) {\n return k.subtract(f);\n }\n if (k.signum() < 0) {\n k.addTo(f, k);\n } else {\n return k;\n }\n if (k.signum() < 0) {\n return k.add(f);\n } else {\n return k;\n }\n}\nvar lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\nfunction bnIsProbablePrime(e) {\n var d,\n b = this.abs();\n if (b.t == 1 && b[0] <= lowprimes[lowprimes.length - 1]) {\n for (d = 0; d < lowprimes.length; ++d) {\n if (b[0] == lowprimes[d]) {\n return true;\n }\n }\n return false;\n }\n if (b.isEven()) {\n return false;\n }\n d = 1;\n while (d < lowprimes.length) {\n var a = lowprimes[d],\n c = d + 1;\n while (c < lowprimes.length && a < lplim) {\n a *= lowprimes[c++];\n }\n a = b.modInt(a);\n while (d < c) {\n if (a % lowprimes[d++] == 0) {\n return false;\n }\n }\n }\n return b.millerRabin(e);\n}\nfunction bnpMillerRabin(f) {\n var g = this.subtract(BigInteger.ONE);\n var c = g.getLowestSetBit();\n if (c <= 0) {\n return false;\n }\n var h = g.shiftRight(c);\n f = f + 1 >> 1;\n if (f > lowprimes.length) {\n f = lowprimes.length;\n }\n var b = nbi();\n for (var e = 0; e < f; ++e) {\n b.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\n var l = b.modPow(h, this);\n if (l.compareTo(BigInteger.ONE) != 0 && l.compareTo(g) != 0) {\n var d = 1;\n while (d++ < c && l.compareTo(g) != 0) {\n l = l.modPowInt(2, this);\n if (l.compareTo(BigInteger.ONE) == 0) {\n return false;\n }\n }\n if (l.compareTo(g) != 0) {\n return false;\n }\n }\n }\n return true;\n}\nBigInteger.prototype.chunkSize = bnpChunkSize;\nBigInteger.prototype.toRadix = bnpToRadix;\nBigInteger.prototype.fromRadix = bnpFromRadix;\nBigInteger.prototype.fromNumber = bnpFromNumber;\nBigInteger.prototype.bitwiseTo = bnpBitwiseTo;\nBigInteger.prototype.changeBit = bnpChangeBit;\nBigInteger.prototype.addTo = bnpAddTo;\nBigInteger.prototype.dMultiply = bnpDMultiply;\nBigInteger.prototype.dAddOffset = bnpDAddOffset;\nBigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\nBigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\nBigInteger.prototype.modInt = bnpModInt;\nBigInteger.prototype.millerRabin = bnpMillerRabin;\nBigInteger.prototype.clone = bnClone;\nBigInteger.prototype.intValue = bnIntValue;\nBigInteger.prototype.byteValue = bnByteValue;\nBigInteger.prototype.shortValue = bnShortValue;\nBigInteger.prototype.signum = bnSigNum;\nBigInteger.prototype.toByteArray = bnToByteArray;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.min = bnMin;\nBigInteger.prototype.max = bnMax;\nBigInteger.prototype.and = bnAnd;\nBigInteger.prototype.or = bnOr;\nBigInteger.prototype.xor = bnXor;\nBigInteger.prototype.andNot = bnAndNot;\nBigInteger.prototype.not = bnNot;\nBigInteger.prototype.shiftLeft = bnShiftLeft;\nBigInteger.prototype.shiftRight = bnShiftRight;\nBigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\nBigInteger.prototype.bitCount = bnBitCount;\nBigInteger.prototype.testBit = bnTestBit;\nBigInteger.prototype.setBit = bnSetBit;\nBigInteger.prototype.clearBit = bnClearBit;\nBigInteger.prototype.flipBit = bnFlipBit;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.remainder = bnRemainder;\nBigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\nBigInteger.prototype.modPow = bnModPow;\nBigInteger.prototype.modInverse = bnModInverse;\nBigInteger.prototype.pow = bnPow;\nBigInteger.prototype.gcd = bnGCD;\nBigInteger.prototype.isProbablePrime = bnIsProbablePrime;\nBigInteger.prototype.square = bnSquare;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction Arcfour() {\n this.i = 0;\n this.j = 0;\n this.S = new Array();\n}\nfunction ARC4init(d) {\n var c, a, b;\n for (c = 0; c < 256; ++c) {\n this.S[c] = c;\n }\n a = 0;\n for (c = 0; c < 256; ++c) {\n a = a + this.S[c] + d[c % d.length] & 255;\n b = this.S[c];\n this.S[c] = this.S[a];\n this.S[a] = b;\n }\n this.i = 0;\n this.j = 0;\n}\nfunction ARC4next() {\n var a;\n this.i = this.i + 1 & 255;\n this.j = this.j + this.S[this.i] & 255;\n a = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = a;\n return this.S[a + this.S[this.i] & 255];\n}\nArcfour.prototype.init = ARC4init;\nArcfour.prototype.next = ARC4next;\nfunction prng_newstate() {\n return new Arcfour();\n}\nvar rng_psize = 256;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nvar rng_state;\nvar rng_pool;\nvar rng_pptr;\nfunction rng_seed_int(a) {\n rng_pool[rng_pptr++] ^= a & 255;\n rng_pool[rng_pptr++] ^= a >> 8 & 255;\n rng_pool[rng_pptr++] ^= a >> 16 & 255;\n rng_pool[rng_pptr++] ^= a >> 24 & 255;\n if (rng_pptr >= rng_psize) {\n rng_pptr -= rng_psize;\n }\n}\nfunction rng_seed_time() {\n rng_seed_int(new Date().getTime());\n}\nif (rng_pool == null) {\n rng_pool = new Array();\n rng_pptr = 0;\n var t;\n if (window !== undefined && (window.crypto !== undefined || window.msCrypto !== undefined)) {\n var crypto = window.crypto || window.msCrypto;\n if (crypto.getRandomValues) {\n var ua = new Uint8Array(32);\n crypto.getRandomValues(ua);\n for (t = 0; t < 32; ++t) {\n rng_pool[rng_pptr++] = ua[t];\n }\n } else {\n if (navigator.appName == \"Netscape\" && navigator.appVersion < \"5\") {\n var z = window.crypto.random(32);\n for (t = 0; t < z.length; ++t) {\n rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;\n }\n }\n }\n }\n while (rng_pptr < rng_psize) {\n t = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = t >>> 8;\n rng_pool[rng_pptr++] = t & 255;\n }\n rng_pptr = 0;\n rng_seed_time();\n}\nfunction rng_get_byte() {\n if (rng_state == null) {\n rng_seed_time();\n rng_state = prng_newstate();\n rng_state.init(rng_pool);\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {\n rng_pool[rng_pptr] = 0;\n }\n rng_pptr = 0;\n }\n return rng_state.next();\n}\nfunction rng_get_bytes(b) {\n var a;\n for (a = 0; a < b.length; ++a) {\n b[a] = rng_get_byte();\n }\n}\nfunction SecureRandom() {}\nSecureRandom.prototype.nextBytes = rng_get_bytes;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction parseBigInt(b, a) {\n return new BigInteger(b, a);\n}\nfunction linebrk(c, d) {\n var a = \"\";\n var b = 0;\n while (b + d < c.length) {\n a += c.substring(b, b + d) + \"\\n\";\n b += d;\n }\n return a + c.substring(b, c.length);\n}\nfunction byte2Hex(a) {\n if (a < 16) {\n return \"0\" + a.toString(16);\n } else {\n return a.toString(16);\n }\n}\nfunction pkcs1pad2(e, h) {\n if (h < e.length + 11) {\n throw \"Message too long for RSA\";\n return null;\n }\n var g = new Array();\n var d = e.length - 1;\n while (d >= 0 && h > 0) {\n var f = e.charCodeAt(d--);\n if (f < 128) {\n g[--h] = f;\n } else {\n if (f > 127 && f < 2048) {\n g[--h] = f & 63 | 128;\n g[--h] = f >> 6 | 192;\n } else {\n g[--h] = f & 63 | 128;\n g[--h] = f >> 6 & 63 | 128;\n g[--h] = f >> 12 | 224;\n }\n }\n }\n g[--h] = 0;\n var b = new SecureRandom();\n var a = new Array();\n while (h > 2) {\n a[0] = 0;\n while (a[0] == 0) {\n b.nextBytes(a);\n }\n g[--h] = a[0];\n }\n g[--h] = 2;\n g[--h] = 0;\n return new BigInteger(g);\n}\nfunction oaep_mgf1_arr(c, a, e) {\n var b = \"\",\n d = 0;\n while (b.length < a) {\n b += e(String.fromCharCode.apply(String, c.concat([(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255])));\n d += 1;\n }\n return b;\n}\nfunction oaep_pad(q, a, f, l) {\n var c = KJUR.crypto.MessageDigest;\n var o = KJUR.crypto.Util;\n var b = null;\n if (!f) {\n f = \"sha1\";\n }\n if (typeof f === \"string\") {\n b = c.getCanonicalAlgName(f);\n l = c.getHashLength(b);\n f = function (i) {\n return hextorstr(o.hashHex(rstrtohex(i), b));\n };\n }\n if (q.length + 2 * l + 2 > a) {\n throw \"Message too long for RSA\";\n }\n var k = \"\",\n e;\n for (e = 0; e < a - q.length - 2 * l - 2; e += 1) {\n k += \"\\x00\";\n }\n var h = f(\"\") + k + \"\\x01\" + q;\n var g = new Array(l);\n new SecureRandom().nextBytes(g);\n var j = oaep_mgf1_arr(g, h.length, f);\n var p = [];\n for (e = 0; e < h.length; e += 1) {\n p[e] = h.charCodeAt(e) ^ j.charCodeAt(e);\n }\n var m = oaep_mgf1_arr(p, g.length, f);\n var d = [0];\n for (e = 0; e < g.length; e += 1) {\n d[e + 1] = g[e] ^ m.charCodeAt(e);\n }\n return new BigInteger(d.concat(p));\n}\nfunction RSAKey() {\n this.n = null;\n this.e = 0;\n this.d = null;\n this.p = null;\n this.q = null;\n this.dmp1 = null;\n this.dmq1 = null;\n this.coeff = null;\n}\nfunction RSASetPublic(b, a) {\n this.isPublic = true;\n this.isPrivate = false;\n if (typeof b !== \"string\") {\n this.n = b;\n this.e = a;\n } else {\n if (b != null && a != null && b.length > 0 && a.length > 0) {\n this.n = parseBigInt(b, 16);\n this.e = parseInt(a, 16);\n } else {\n throw \"Invalid RSA public key\";\n }\n }\n}\nfunction RSADoPublic(a) {\n return a.modPowInt(this.e, this.n);\n}\nRSAKey.prototype.doPublic = RSADoPublic;\nRSAKey.prototype.setPublic = RSASetPublic;\nRSAKey.prototype.type = \"RSA\";\n/*! (c) Tom Wu, Kenji Urushima | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction pkcs1unpad2(g, j) {\n var a = g.toByteArray();\n var f = 0;\n while (f < a.length && a[f] == 0) {\n ++f;\n }\n if (a.length - f != j - 1 || a[f] != 2) {\n return null;\n }\n ++f;\n while (a[f] != 0) {\n if (++f >= a.length) {\n return null;\n }\n }\n var e = \"\";\n while (++f < a.length) {\n var h = a[f] & 255;\n if (h < 128) {\n e += String.fromCharCode(h);\n } else {\n if (h > 191 && h < 224) {\n e += String.fromCharCode((h & 31) << 6 | a[f + 1] & 63);\n ++f;\n } else {\n e += String.fromCharCode((h & 15) << 12 | (a[f + 1] & 63) << 6 | a[f + 2] & 63);\n f += 2;\n }\n }\n }\n return e;\n}\nfunction oaep_mgf1_str(c, a, e) {\n var b = \"\",\n d = 0;\n while (b.length < a) {\n b += e(c + String.fromCharCode.apply(String, [(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255]));\n d += 1;\n }\n return b;\n}\nfunction oaep_unpad(o, b, g, p) {\n var e = KJUR.crypto.MessageDigest;\n var r = KJUR.crypto.Util;\n var c = null;\n if (!g) {\n g = \"sha1\";\n }\n if (typeof g === \"string\") {\n c = e.getCanonicalAlgName(g);\n p = e.getHashLength(c);\n g = function (d) {\n return hextorstr(r.hashHex(rstrtohex(d), c));\n };\n }\n o = o.toByteArray();\n var h;\n for (h = 0; h < o.length; h += 1) {\n o[h] &= 255;\n }\n while (o.length < b) {\n o.unshift(0);\n }\n o = String.fromCharCode.apply(String, o);\n if (o.length < 2 * p + 2) {\n throw \"Cipher too short\";\n }\n var f = o.substr(1, p);\n var s = o.substr(p + 1);\n var q = oaep_mgf1_str(s, p, g);\n var k = [],\n h;\n for (h = 0; h < f.length; h += 1) {\n k[h] = f.charCodeAt(h) ^ q.charCodeAt(h);\n }\n var l = oaep_mgf1_str(String.fromCharCode.apply(String, k), o.length - p, g);\n var j = [];\n for (h = 0; h < s.length; h += 1) {\n j[h] = s.charCodeAt(h) ^ l.charCodeAt(h);\n }\n j = String.fromCharCode.apply(String, j);\n if (j.substr(0, p) !== g(\"\")) {\n throw \"Hash mismatch\";\n }\n j = j.substr(p);\n var a = j.indexOf(\"\\x01\");\n var m = a != -1 ? j.substr(0, a).lastIndexOf(\"\\x00\") : -1;\n if (m + 1 != a) {\n throw \"Malformed data\";\n }\n return j.substr(a + 1);\n}\nfunction RSASetPrivate(c, a, b) {\n this.isPrivate = true;\n if (typeof c !== \"string\") {\n this.n = c;\n this.e = a;\n this.d = b;\n } else {\n if (c != null && a != null && c.length > 0 && a.length > 0) {\n this.n = parseBigInt(c, 16);\n this.e = parseInt(a, 16);\n this.d = parseBigInt(b, 16);\n } else {\n throw \"Invalid RSA private key\";\n }\n }\n}\nfunction RSASetPrivateEx(g, d, e, c, b, a, h, f) {\n this.isPrivate = true;\n this.isPublic = false;\n if (g == null) {\n throw \"RSASetPrivateEx N == null\";\n }\n if (d == null) {\n throw \"RSASetPrivateEx E == null\";\n }\n if (g.length == 0) {\n throw \"RSASetPrivateEx N.length == 0\";\n }\n if (d.length == 0) {\n throw \"RSASetPrivateEx E.length == 0\";\n }\n if (g != null && d != null && g.length > 0 && d.length > 0) {\n this.n = parseBigInt(g, 16);\n this.e = parseInt(d, 16);\n this.d = parseBigInt(e, 16);\n this.p = parseBigInt(c, 16);\n this.q = parseBigInt(b, 16);\n this.dmp1 = parseBigInt(a, 16);\n this.dmq1 = parseBigInt(h, 16);\n this.coeff = parseBigInt(f, 16);\n } else {\n throw \"Invalid RSA private key in RSASetPrivateEx\";\n }\n}\nfunction RSAGenerate(b, l) {\n var a = new SecureRandom();\n var g = b >> 1;\n this.e = parseInt(l, 16);\n var c = new BigInteger(l, 16);\n var d = b / 2 - 100;\n var k = BigInteger.ONE.shiftLeft(d);\n for (;;) {\n for (;;) {\n this.p = new BigInteger(b - g, 1, a);\n if (this.p.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {\n break;\n }\n }\n for (;;) {\n this.q = new BigInteger(g, 1, a);\n if (this.q.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {\n break;\n }\n }\n if (this.p.compareTo(this.q) <= 0) {\n var j = this.p;\n this.p = this.q;\n this.q = j;\n }\n var h = this.q.subtract(this.p).abs();\n if (h.bitLength() < d || h.compareTo(k) <= 0) {\n continue;\n }\n var i = this.p.subtract(BigInteger.ONE);\n var e = this.q.subtract(BigInteger.ONE);\n var f = i.multiply(e);\n if (f.gcd(c).compareTo(BigInteger.ONE) == 0) {\n this.n = this.p.multiply(this.q);\n if (this.n.bitLength() == b) {\n this.d = c.modInverse(f);\n this.dmp1 = this.d.mod(i);\n this.dmq1 = this.d.mod(e);\n this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n }\n this.isPrivate = true;\n}\nfunction RSADoPrivate(a) {\n if (this.p == null || this.q == null) {\n return a.modPow(this.d, this.n);\n }\n var c = a.mod(this.p).modPow(this.dmp1, this.p);\n var b = a.mod(this.q).modPow(this.dmq1, this.q);\n while (c.compareTo(b) < 0) {\n c = c.add(this.p);\n }\n return c.subtract(b).multiply(this.coeff).mod(this.p).multiply(this.q).add(b);\n}\nRSAKey.prototype.doPrivate = RSADoPrivate;\nRSAKey.prototype.setPrivate = RSASetPrivate;\nRSAKey.prototype.setPrivateEx = RSASetPrivateEx;\nRSAKey.prototype.generate = RSAGenerate;\n/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/\n */\nfunction ECFieldElementFp(b, a) {\n this.x = a;\n this.q = b;\n}\nfunction feFpEquals(a) {\n if (a == this) {\n return true;\n }\n return this.q.equals(a.q) && this.x.equals(a.x);\n}\nfunction feFpToBigInteger() {\n return this.x;\n}\nfunction feFpNegate() {\n return new ECFieldElementFp(this.q, this.x.negate().mod(this.q));\n}\nfunction feFpAdd(a) {\n return new ECFieldElementFp(this.q, this.x.add(a.toBigInteger()).mod(this.q));\n}\nfunction feFpSubtract(a) {\n return new ECFieldElementFp(this.q, this.x.subtract(a.toBigInteger()).mod(this.q));\n}\nfunction feFpMultiply(a) {\n return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger()).mod(this.q));\n}\nfunction feFpSquare() {\n return new ECFieldElementFp(this.q, this.x.square().mod(this.q));\n}\nfunction feFpDivide(a) {\n return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger().modInverse(this.q)).mod(this.q));\n}\nECFieldElementFp.prototype.equals = feFpEquals;\nECFieldElementFp.prototype.toBigInteger = feFpToBigInteger;\nECFieldElementFp.prototype.negate = feFpNegate;\nECFieldElementFp.prototype.add = feFpAdd;\nECFieldElementFp.prototype.subtract = feFpSubtract;\nECFieldElementFp.prototype.multiply = feFpMultiply;\nECFieldElementFp.prototype.square = feFpSquare;\nECFieldElementFp.prototype.divide = feFpDivide;\nECFieldElementFp.prototype.sqrt = function () {\n return new ECFieldElementFp(this.q, this.x.sqrt().mod(this.q));\n};\nfunction ECPointFp(c, a, d, b) {\n this.curve = c;\n this.x = a;\n this.y = d;\n if (b == null) {\n this.z = BigInteger.ONE;\n } else {\n this.z = b;\n }\n this.zinv = null;\n}\nfunction pointFpGetX() {\n if (this.zinv == null) {\n this.zinv = this.z.modInverse(this.curve.q);\n }\n return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q));\n}\nfunction pointFpGetY() {\n if (this.zinv == null) {\n this.zinv = this.z.modInverse(this.curve.q);\n }\n return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q));\n}\nfunction pointFpEquals(a) {\n if (a == this) {\n return true;\n }\n if (this.isInfinity()) {\n return a.isInfinity();\n }\n if (a.isInfinity()) {\n return this.isInfinity();\n }\n var c, b;\n c = a.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(a.z)).mod(this.curve.q);\n if (!c.equals(BigInteger.ZERO)) {\n return false;\n }\n b = a.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(a.z)).mod(this.curve.q);\n return b.equals(BigInteger.ZERO);\n}\nfunction pointFpIsInfinity() {\n if (this.x == null && this.y == null) {\n return true;\n }\n return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO);\n}\nfunction pointFpNegate() {\n return new ECPointFp(this.curve, this.x, this.y.negate(), this.z);\n}\nfunction pointFpAdd(l) {\n if (this.isInfinity()) {\n return l;\n }\n if (l.isInfinity()) {\n return this;\n }\n var p = l.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(l.z)).mod(this.curve.q);\n var o = l.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(l.z)).mod(this.curve.q);\n if (BigInteger.ZERO.equals(o)) {\n if (BigInteger.ZERO.equals(p)) {\n return this.twice();\n }\n return this.curve.getInfinity();\n }\n var j = new BigInteger(\"3\");\n var e = this.x.toBigInteger();\n var n = this.y.toBigInteger();\n var c = l.x.toBigInteger();\n var k = l.y.toBigInteger();\n var m = o.square();\n var i = m.multiply(o);\n var d = e.multiply(m);\n var g = p.square().multiply(this.z);\n var a = g.subtract(d.shiftLeft(1)).multiply(l.z).subtract(i).multiply(o).mod(this.curve.q);\n var h = d.multiply(j).multiply(p).subtract(n.multiply(i)).subtract(g.multiply(p)).multiply(l.z).add(p.multiply(i)).mod(this.curve.q);\n var f = i.multiply(this.z).multiply(l.z).mod(this.curve.q);\n return new ECPointFp(this.curve, this.curve.fromBigInteger(a), this.curve.fromBigInteger(h), f);\n}\nfunction pointFpTwice() {\n if (this.isInfinity()) {\n return this;\n }\n if (this.y.toBigInteger().signum() == 0) {\n return this.curve.getInfinity();\n }\n var g = new BigInteger(\"3\");\n var c = this.x.toBigInteger();\n var h = this.y.toBigInteger();\n var e = h.multiply(this.z);\n var j = e.multiply(h).mod(this.curve.q);\n var i = this.curve.a.toBigInteger();\n var k = c.square().multiply(g);\n if (!BigInteger.ZERO.equals(i)) {\n k = k.add(this.z.square().multiply(i));\n }\n k = k.mod(this.curve.q);\n var b = k.square().subtract(c.shiftLeft(3).multiply(j)).shiftLeft(1).multiply(e).mod(this.curve.q);\n var f = k.multiply(g).multiply(c).subtract(j.shiftLeft(1)).shiftLeft(2).multiply(j).subtract(k.square().multiply(k)).mod(this.curve.q);\n var d = e.square().multiply(e).shiftLeft(3).mod(this.curve.q);\n return new ECPointFp(this.curve, this.curve.fromBigInteger(b), this.curve.fromBigInteger(f), d);\n}\nfunction pointFpMultiply(d) {\n if (this.isInfinity()) {\n return this;\n }\n if (d.signum() == 0) {\n return this.curve.getInfinity();\n }\n var m = d;\n var l = m.multiply(new BigInteger(\"3\"));\n var b = this.negate();\n var j = this;\n var q = this.curve.q.subtract(d);\n var o = q.multiply(new BigInteger(\"3\"));\n var c = new ECPointFp(this.curve, this.x, this.y);\n var a = c.negate();\n var g;\n for (g = l.bitLength() - 2; g > 0; --g) {\n j = j.twice();\n var n = l.testBit(g);\n var f = m.testBit(g);\n if (n != f) {\n j = j.add(n ? this : b);\n }\n }\n for (g = o.bitLength() - 2; g > 0; --g) {\n c = c.twice();\n var p = o.testBit(g);\n var r = q.testBit(g);\n if (p != r) {\n c = c.add(p ? c : a);\n }\n }\n return j;\n}\nfunction pointFpMultiplyTwo(c, a, b) {\n var d;\n if (c.bitLength() > b.bitLength()) {\n d = c.bitLength() - 1;\n } else {\n d = b.bitLength() - 1;\n }\n var f = this.curve.getInfinity();\n var e = this.add(a);\n while (d >= 0) {\n f = f.twice();\n if (c.testBit(d)) {\n if (b.testBit(d)) {\n f = f.add(e);\n } else {\n f = f.add(this);\n }\n } else {\n if (b.testBit(d)) {\n f = f.add(a);\n }\n }\n --d;\n }\n return f;\n}\nECPointFp.prototype.getX = pointFpGetX;\nECPointFp.prototype.getY = pointFpGetY;\nECPointFp.prototype.equals = pointFpEquals;\nECPointFp.prototype.isInfinity = pointFpIsInfinity;\nECPointFp.prototype.negate = pointFpNegate;\nECPointFp.prototype.add = pointFpAdd;\nECPointFp.prototype.twice = pointFpTwice;\nECPointFp.prototype.multiply = pointFpMultiply;\nECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo;\nfunction ECCurveFp(e, d, c) {\n this.q = e;\n this.a = this.fromBigInteger(d);\n this.b = this.fromBigInteger(c);\n this.infinity = new ECPointFp(this, null, null);\n}\nfunction curveFpGetQ() {\n return this.q;\n}\nfunction curveFpGetA() {\n return this.a;\n}\nfunction curveFpGetB() {\n return this.b;\n}\nfunction curveFpEquals(a) {\n if (a == this) {\n return true;\n }\n return this.q.equals(a.q) && this.a.equals(a.a) && this.b.equals(a.b);\n}\nfunction curveFpGetInfinity() {\n return this.infinity;\n}\nfunction curveFpFromBigInteger(a) {\n return new ECFieldElementFp(this.q, a);\n}\nfunction curveFpDecodePointHex(m) {\n switch (parseInt(m.substr(0, 2), 16)) {\n case 0:\n return this.infinity;\n case 2:\n case 3:\n var c = m.substr(0, 2);\n var l = m.substr(2);\n var j = this.fromBigInteger(new BigInteger(k, 16));\n var i = this.getA();\n var h = this.getB();\n var e = j.square().add(i).multiply(j).add(h);\n var g = e.sqrt();\n if (c == \"03\") {\n g = g.negate();\n }\n return new ECPointFp(this, j, g);\n case 4:\n case 6:\n case 7:\n var d = (m.length - 2) / 2;\n var k = m.substr(2, d);\n var f = m.substr(d + 2, d);\n return new ECPointFp(this, this.fromBigInteger(new BigInteger(k, 16)), this.fromBigInteger(new BigInteger(f, 16)));\n default:\n return null;\n }\n}\nECCurveFp.prototype.getQ = curveFpGetQ;\nECCurveFp.prototype.getA = curveFpGetA;\nECCurveFp.prototype.getB = curveFpGetB;\nECCurveFp.prototype.equals = curveFpEquals;\nECCurveFp.prototype.getInfinity = curveFpGetInfinity;\nECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger;\nECCurveFp.prototype.decodePointHex = curveFpDecodePointHex;\n/*! (c) Stefan Thomas | https://github.com/bitcoinjs/bitcoinjs-lib\n */\nECFieldElementFp.prototype.getByteLength = function () {\n return Math.floor((this.toBigInteger().bitLength() + 7) / 8);\n};\nECPointFp.prototype.getEncoded = function (c) {\n var d = function (h, f) {\n var g = h.toByteArrayUnsigned();\n if (f < g.length) {\n g = g.slice(g.length - f);\n } else {\n while (f > g.length) {\n g.unshift(0);\n }\n }\n return g;\n };\n var a = this.getX().toBigInteger();\n var e = this.getY().toBigInteger();\n var b = d(a, 32);\n if (c) {\n if (e.isEven()) {\n b.unshift(2);\n } else {\n b.unshift(3);\n }\n } else {\n b.unshift(4);\n b = b.concat(d(e, 32));\n }\n return b;\n};\nECPointFp.decodeFrom = function (g, c) {\n var f = c[0];\n var e = c.length - 1;\n var d = c.slice(1, 1 + e / 2);\n var b = c.slice(1 + e / 2, 1 + e);\n d.unshift(0);\n b.unshift(0);\n var a = new BigInteger(d);\n var h = new BigInteger(b);\n return new ECPointFp(g, g.fromBigInteger(a), g.fromBigInteger(h));\n};\nECPointFp.decodeFromHex = function (g, c) {\n var f = c.substr(0, 2);\n var e = c.length - 2;\n var d = c.substr(2, e / 2);\n var b = c.substr(2 + e / 2, e / 2);\n var a = new BigInteger(d, 16);\n var h = new BigInteger(b, 16);\n return new ECPointFp(g, g.fromBigInteger(a), g.fromBigInteger(h));\n};\nECPointFp.prototype.add2D = function (c) {\n if (this.isInfinity()) {\n return c;\n }\n if (c.isInfinity()) {\n return this;\n }\n if (this.x.equals(c.x)) {\n if (this.y.equals(c.y)) {\n return this.twice();\n }\n return this.curve.getInfinity();\n }\n var g = c.x.subtract(this.x);\n var e = c.y.subtract(this.y);\n var a = e.divide(g);\n var d = a.square().subtract(this.x).subtract(c.x);\n var f = a.multiply(this.x.subtract(d)).subtract(this.y);\n return new ECPointFp(this.curve, d, f);\n};\nECPointFp.prototype.twice2D = function () {\n if (this.isInfinity()) {\n return this;\n }\n if (this.y.toBigInteger().signum() == 0) {\n return this.curve.getInfinity();\n }\n var b = this.curve.fromBigInteger(BigInteger.valueOf(2));\n var e = this.curve.fromBigInteger(BigInteger.valueOf(3));\n var a = this.x.square().multiply(e).add(this.curve.a).divide(this.y.multiply(b));\n var c = a.square().subtract(this.x.multiply(b));\n var d = a.multiply(this.x.subtract(c)).subtract(this.y);\n return new ECPointFp(this.curve, c, d);\n};\nECPointFp.prototype.multiply2D = function (b) {\n if (this.isInfinity()) {\n return this;\n }\n if (b.signum() == 0) {\n return this.curve.getInfinity();\n }\n var g = b;\n var f = g.multiply(new BigInteger(\"3\"));\n var l = this.negate();\n var d = this;\n var c;\n for (c = f.bitLength() - 2; c > 0; --c) {\n d = d.twice();\n var a = f.testBit(c);\n var j = g.testBit(c);\n if (a != j) {\n d = d.add2D(a ? this : l);\n }\n }\n return d;\n};\nECPointFp.prototype.isOnCurve = function () {\n var d = this.getX().toBigInteger();\n var i = this.getY().toBigInteger();\n var f = this.curve.getA().toBigInteger();\n var c = this.curve.getB().toBigInteger();\n var h = this.curve.getQ();\n var e = i.multiply(i).mod(h);\n var g = d.multiply(d).multiply(d).add(f.multiply(d)).add(c).mod(h);\n return e.equals(g);\n};\nECPointFp.prototype.toString = function () {\n return \"(\" + this.getX().toBigInteger().toString() + \",\" + this.getY().toBigInteger().toString() + \")\";\n};\nECPointFp.prototype.validate = function () {\n var c = this.curve.getQ();\n if (this.isInfinity()) {\n throw new Error(\"Point is at infinity.\");\n }\n var a = this.getX().toBigInteger();\n var b = this.getY().toBigInteger();\n if (a.compareTo(BigInteger.ONE) < 0 || a.compareTo(c.subtract(BigInteger.ONE)) > 0) {\n throw new Error(\"x coordinate out of bounds\");\n }\n if (b.compareTo(BigInteger.ONE) < 0 || b.compareTo(c.subtract(BigInteger.ONE)) > 0) {\n throw new Error(\"y coordinate out of bounds\");\n }\n if (!this.isOnCurve()) {\n throw new Error(\"Point is not on the curve.\");\n }\n if (this.multiply(c).isInfinity()) {\n throw new Error(\"Point is not a scalar multiple of G.\");\n }\n return true;\n};\n/*! Mike Samuel (c) 2009 | code.google.com/p/json-sans-eval\n */\nvar jsonParse = function () {\n var e = \"(?:-?\\\\b(?:0|[1-9][0-9]*)(?:\\\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\\\b)\";\n var j = '(?:[^\\\\0-\\\\x08\\\\x0a-\\\\x1f\"\\\\\\\\]|\\\\\\\\(?:[\"/\\\\\\\\bfnrt]|u[0-9A-Fa-f]{4}))';\n var i = '(?:\"' + j + '*\")';\n var d = new RegExp(\"(?:false|true|null|[\\\\{\\\\}\\\\[\\\\]]|\" + e + \"|\" + i + \")\", \"g\");\n var k = new RegExp(\"\\\\\\\\(?:([^u])|u(.{4}))\", \"g\");\n var g = {\n '\"': '\"',\n \"/\": \"/\",\n \"\\\\\": \"\\\\\",\n b: \"\\b\",\n f: \"\\f\",\n n: \"\\n\",\n r: \"\\r\",\n t: \"\\t\"\n };\n function h(l, m, n) {\n return m ? g[m] : String.fromCharCode(parseInt(n, 16));\n }\n var c = new String(\"\");\n var a = \"\\\\\";\n var f = {\n \"{\": Object,\n \"[\": Array\n };\n var b = Object.hasOwnProperty;\n return function (u, q) {\n var p = u.match(d);\n var x;\n var v = p[0];\n var l = false;\n if (\"{\" === v) {\n x = {};\n } else {\n if (\"[\" === v) {\n x = [];\n } else {\n x = [];\n l = true;\n }\n }\n var t;\n var r = [x];\n for (var o = 1 - l, m = p.length; o < m; ++o) {\n v = p[o];\n var w;\n switch (v.charCodeAt(0)) {\n default:\n w = r[0];\n w[t || w.length] = +v;\n t = void 0;\n break;\n case 34:\n v = v.substring(1, v.length - 1);\n if (v.indexOf(a) !== -1) {\n v = v.replace(k, h);\n }\n w = r[0];\n if (!t) {\n if (w instanceof Array) {\n t = w.length;\n } else {\n t = v || c;\n break;\n }\n }\n w[t] = v;\n t = void 0;\n break;\n case 91:\n w = r[0];\n r.unshift(w[t || w.length] = []);\n t = void 0;\n break;\n case 93:\n r.shift();\n break;\n case 102:\n w = r[0];\n w[t || w.length] = false;\n t = void 0;\n break;\n case 110:\n w = r[0];\n w[t || w.length] = null;\n t = void 0;\n break;\n case 116:\n w = r[0];\n w[t || w.length] = true;\n t = void 0;\n break;\n case 123:\n w = r[0];\n r.unshift(w[t || w.length] = {});\n t = void 0;\n break;\n case 125:\n r.shift();\n break;\n }\n }\n if (l) {\n if (r.length !== 1) {\n throw new Error();\n }\n x = x[0];\n } else {\n if (r.length) {\n throw new Error();\n }\n }\n if (q) {\n var s = function (C, B) {\n var D = C[B];\n if (D && typeof D === \"object\") {\n var n = null;\n for (var z in D) {\n if (b.call(D, z) && D !== C) {\n var y = s(D, z);\n if (y !== void 0) {\n D[z] = y;\n } else {\n if (!n) {\n n = [];\n }\n n.push(z);\n }\n }\n }\n if (n) {\n for (var A = n.length; --A >= 0;) {\n delete D[n[A]];\n }\n }\n }\n return q.call(C, B, D);\n };\n x = s({\n \"\": x\n }, \"\");\n }\n return x;\n };\n}();\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) {\n KJUR.asn1 = {};\n}\nKJUR.asn1.ASN1Util = new function () {\n this.integerToByteHex = function (a) {\n var b = a.toString(16);\n if (b.length % 2 == 1) {\n b = \"0\" + b;\n }\n return b;\n };\n this.bigIntToMinTwosComplementsHex = function (a) {\n return twoscompl(a);\n };\n this.getPEMStringFromHex = function (a, b) {\n return hextopem(a, b);\n };\n this.newObject = function (k) {\n var F = KJUR,\n o = F.asn1,\n v = o.ASN1Object,\n B = o.DERBoolean,\n e = o.DERInteger,\n t = o.DERBitString,\n h = o.DEROctetString,\n x = o.DERNull,\n y = o.DERObjectIdentifier,\n m = o.DEREnumerated,\n g = o.DERUTF8String,\n f = o.DERNumericString,\n A = o.DERPrintableString,\n w = o.DERTeletexString,\n q = o.DERIA5String,\n E = o.DERUTCTime,\n j = o.DERGeneralizedTime,\n b = o.DERVisibleString,\n l = o.DERBMPString,\n n = o.DERSequence,\n c = o.DERSet,\n s = o.DERTaggedObject,\n p = o.ASN1Util.newObject;\n if (k instanceof o.ASN1Object) {\n return k;\n }\n var u = Object.keys(k);\n if (u.length != 1) {\n throw new Error(\"key of param shall be only one.\");\n }\n var H = u[0];\n if (\":asn1:bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:visstr:bmpstr:seq:set:tag:\".indexOf(\":\" + H + \":\") == -1) {\n throw new Error(\"undefined key: \" + H);\n }\n if (H == \"bool\") {\n return new B(k[H]);\n }\n if (H == \"int\") {\n return new e(k[H]);\n }\n if (H == \"bitstr\") {\n return new t(k[H]);\n }\n if (H == \"octstr\") {\n return new h(k[H]);\n }\n if (H == \"null\") {\n return new x(k[H]);\n }\n if (H == \"oid\") {\n return new y(k[H]);\n }\n if (H == \"enum\") {\n return new m(k[H]);\n }\n if (H == \"utf8str\") {\n return new g(k[H]);\n }\n if (H == \"numstr\") {\n return new f(k[H]);\n }\n if (H == \"prnstr\") {\n return new A(k[H]);\n }\n if (H == \"telstr\") {\n return new w(k[H]);\n }\n if (H == \"ia5str\") {\n return new q(k[H]);\n }\n if (H == \"utctime\") {\n return new E(k[H]);\n }\n if (H == \"gentime\") {\n return new j(k[H]);\n }\n if (H == \"visstr\") {\n return new b(k[H]);\n }\n if (H == \"bmpstr\") {\n return new l(k[H]);\n }\n if (H == \"asn1\") {\n return new v(k[H]);\n }\n if (H == \"seq\") {\n var d = k[H];\n var G = [];\n for (var z = 0; z < d.length; z++) {\n var D = p(d[z]);\n G.push(D);\n }\n return new n({\n array: G\n });\n }\n if (H == \"set\") {\n var d = k[H];\n var G = [];\n for (var z = 0; z < d.length; z++) {\n var D = p(d[z]);\n G.push(D);\n }\n return new c({\n array: G\n });\n }\n if (H == \"tag\") {\n var C = k[H];\n if (Object.prototype.toString.call(C) === \"[object Array]\" && C.length == 3) {\n var r = p(C[2]);\n return new s({\n tag: C[0],\n explicit: C[1],\n obj: r\n });\n } else {\n return new s(C);\n }\n }\n };\n this.jsonToASN1HEX = function (b) {\n var a = this.newObject(b);\n return a.tohex();\n };\n}();\nKJUR.asn1.ASN1Util.oidHexToInt = function (a) {\n var j = \"\";\n var k = parseInt(a.substr(0, 2), 16);\n var d = Math.floor(k / 40);\n var c = k % 40;\n var j = d + \".\" + c;\n var e = \"\";\n for (var f = 2; f < a.length; f += 2) {\n var g = parseInt(a.substr(f, 2), 16);\n var h = (\"00000000\" + g.toString(2)).slice(-8);\n e = e + h.substr(1, 7);\n if (h.substr(0, 1) == \"0\") {\n var b = new BigInteger(e, 2);\n j = j + \".\" + b.toString(10);\n e = \"\";\n }\n }\n return j;\n};\nKJUR.asn1.ASN1Util.oidIntToHex = function (f) {\n var e = function (a) {\n var k = a.toString(16);\n if (k.length == 1) {\n k = \"0\" + k;\n }\n return k;\n };\n var d = function (o) {\n var n = \"\";\n var k = new BigInteger(o, 10);\n var a = k.toString(2);\n var l = 7 - a.length % 7;\n if (l == 7) {\n l = 0;\n }\n var q = \"\";\n for (var m = 0; m < l; m++) {\n q += \"0\";\n }\n a = q + a;\n for (var m = 0; m < a.length - 1; m += 7) {\n var p = a.substr(m, 7);\n if (m != a.length - 7) {\n p = \"1\" + p;\n }\n n += e(parseInt(p, 2));\n }\n return n;\n };\n if (!f.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + f;\n }\n var g = \"\";\n var b = f.split(\".\");\n var j = parseInt(b[0]) * 40 + parseInt(b[1]);\n g += e(j);\n b.splice(0, 2);\n for (var c = 0; c < b.length; c++) {\n g += d(b[c]);\n }\n return g;\n};\nKJUR.asn1.ASN1Object = function (e) {\n var c = true;\n var b = null;\n var d = \"00\";\n var f = \"00\";\n var a = \"\";\n this.params = null;\n this.getLengthHexFromValue = function () {\n if (typeof this.hV == \"undefined\" || this.hV == null) {\n throw new Error(\"this.hV is null or undefined\");\n }\n if (this.hV.length % 2 == 1) {\n throw new Error(\"value hex must be even length: n=\" + a.length + \",v=\" + this.hV);\n }\n var j = this.hV.length / 2;\n var i = j.toString(16);\n if (i.length % 2 == 1) {\n i = \"0\" + i;\n }\n if (j < 128) {\n return i;\n } else {\n var h = i.length / 2;\n if (h > 15) {\n throw new Error(\"ASN.1 length too long to represent by 8x: n = \" + j.toString(16));\n }\n var g = 128 + h;\n return g.toString(16) + i;\n }\n };\n this.tohex = function () {\n if (this.hTLV == null || this.isModified) {\n this.hV = this.getFreshValueHex();\n this.hL = this.getLengthHexFromValue();\n this.hTLV = this.hT + this.hL + this.hV;\n this.isModified = false;\n }\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.getValueHex = function () {\n this.tohex();\n return this.hV;\n };\n this.getFreshValueHex = function () {\n return \"\";\n };\n this.setByParam = function (g) {\n this.params = g;\n };\n if (e != undefined) {\n if (e.tlv != undefined) {\n this.hTLV = e.tlv;\n this.isModified = false;\n }\n }\n};\nKJUR.asn1.DERAbstractString = function (c) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var b = null;\n var a = null;\n this.getString = function () {\n return this.s;\n };\n this.setString = function (d) {\n this.hTLV = null;\n this.isModified = true;\n this.s = d;\n this.hV = utf8tohex(this.s).toLowerCase();\n };\n this.setStringHex = function (d) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = d;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof c != \"undefined\") {\n if (typeof c == \"string\") {\n this.setString(c);\n } else {\n if (typeof c.str != \"undefined\") {\n this.setString(c.str);\n } else {\n if (typeof c.hex != \"undefined\") {\n this.setStringHex(c.hex);\n }\n }\n }\n }\n};\nextendClass(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERAbstractTime = function (c) {\n KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);\n var b = null;\n var a = null;\n this.localDateToUTC = function (g) {\n var e = g.getTime() + g.getTimezoneOffset() * 60000;\n var f = new Date(e);\n return f;\n };\n this.formatDate = function (m, o, e) {\n var g = this.zeroPadding;\n var n = this.localDateToUTC(m);\n var p = String(n.getFullYear());\n if (o == \"utc\") {\n p = p.substr(2, 2);\n }\n var l = g(String(n.getMonth() + 1), 2);\n var q = g(String(n.getDate()), 2);\n var h = g(String(n.getHours()), 2);\n var i = g(String(n.getMinutes()), 2);\n var j = g(String(n.getSeconds()), 2);\n var r = p + l + q + h + i + j;\n if (e === true) {\n var f = n.getMilliseconds();\n if (f != 0) {\n var k = g(String(f), 3);\n k = k.replace(/[0]+$/, \"\");\n r = r + \".\" + k;\n }\n }\n return r + \"Z\";\n };\n this.zeroPadding = function (e, d) {\n if (e.length >= d) {\n return e;\n }\n return new Array(d - e.length + 1).join(\"0\") + e;\n };\n this.setByParam = function (d) {\n this.hV = null;\n this.hTLV = null;\n this.params = d;\n };\n this.getString = function () {\n return undefined;\n };\n this.setString = function (d) {\n this.hTLV = null;\n this.isModified = true;\n if (this.params == undefined) {\n this.params = {};\n }\n this.params.str = d;\n };\n this.setByDate = function (d) {\n this.hTLV = null;\n this.isModified = true;\n if (this.params == undefined) {\n this.params = {};\n }\n this.params.date = d;\n };\n this.setByDateValue = function (h, j, e, d, f, g) {\n var i = new Date(Date.UTC(h, j - 1, e, d, f, g, 0));\n this.setByDate(i);\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n};\nextendClass(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERAbstractStructured = function (b) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var a = null;\n this.setByASN1ObjectArray = function (c) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array = c;\n };\n this.appendASN1Object = function (c) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array.push(c);\n };\n this.asn1Array = new Array();\n if (typeof b != \"undefined\") {\n if (typeof b.array != \"undefined\") {\n this.asn1Array = b.array;\n }\n }\n};\nextendClass(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERBoolean = function (a) {\n KJUR.asn1.DERBoolean.superclass.constructor.call(this);\n this.hT = \"01\";\n if (a == false) {\n this.hTLV = \"010100\";\n } else {\n this.hTLV = \"0101ff\";\n }\n};\nextendClass(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERInteger = function (b) {\n KJUR.asn1.DERInteger.superclass.constructor.call(this);\n this.hT = \"02\";\n this.params = null;\n var a = twoscompl;\n this.setByBigInteger = function (c) {\n this.isModified = true;\n this.params = {\n bigint: c\n };\n };\n this.setByInteger = function (c) {\n this.isModified = true;\n this.params = c;\n };\n this.setValueHex = function (c) {\n this.isModified = true;\n this.params = {\n hex: c\n };\n };\n this.getFreshValueHex = function () {\n var d = this.params;\n var c = null;\n if (d == null) {\n throw new Error(\"value not set\");\n }\n if (typeof d == \"object\" && d.hex != undefined) {\n this.hV = d.hex;\n return this.hV;\n }\n if (typeof d == \"number\") {\n c = new BigInteger(String(d), 10);\n } else {\n if (d[\"int\"] != undefined) {\n c = new BigInteger(String(d[\"int\"]), 10);\n } else {\n if (d.bigint != undefined) {\n c = d.bigint;\n } else {\n throw new Error(\"wrong parameter\");\n }\n }\n }\n this.hV = a(c);\n return this.hV;\n };\n if (b != undefined) {\n this.params = b;\n }\n};\nextendClass(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERBitString = function (b) {\n if (b !== undefined && typeof b.obj !== \"undefined\") {\n var a = KJUR.asn1.ASN1Util.newObject(b.obj);\n b.hex = \"00\" + a.tohex();\n }\n KJUR.asn1.DERBitString.superclass.constructor.call(this);\n this.hT = \"03\";\n this.setHexValueIncludingUnusedBits = function (c) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = c;\n };\n this.setUnusedBitsAndHexValue = function (c, e) {\n if (c < 0 || 7 < c) {\n throw \"unused bits shall be from 0 to 7: u = \" + c;\n }\n var d = \"0\" + c;\n this.hTLV = null;\n this.isModified = true;\n this.hV = d + e;\n };\n this.setByBinaryString = function (e) {\n e = e.replace(/0+$/, \"\");\n var f = 8 - e.length % 8;\n if (f == 8) {\n f = 0;\n }\n e += \"0000000\".substr(0, f);\n var j = \"\";\n for (var g = 0; g < e.length - 1; g += 8) {\n var d = e.substr(g, 8);\n var c = parseInt(d, 2).toString(16);\n if (c.length == 1) {\n c = \"0\" + c;\n }\n j += c;\n }\n this.hTLV = null;\n this.isModified = true;\n this.hV = \"0\" + f + j;\n };\n this.setByBooleanArray = function (e) {\n var d = \"\";\n for (var c = 0; c < e.length; c++) {\n if (e[c] == true) {\n d += \"1\";\n } else {\n d += \"0\";\n }\n }\n this.setByBinaryString(d);\n };\n this.newFalseArray = function (e) {\n var c = new Array(e);\n for (var d = 0; d < e; d++) {\n c[d] = false;\n }\n return c;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof b != \"undefined\") {\n if (typeof b == \"string\" && b.toLowerCase().match(/^[0-9a-f]+$/)) {\n this.setHexValueIncludingUnusedBits(b);\n } else {\n if (typeof b.hex != \"undefined\") {\n this.setHexValueIncludingUnusedBits(b.hex);\n } else {\n if (typeof b.bin != \"undefined\") {\n this.setByBinaryString(b.bin);\n } else {\n if (typeof b.array != \"undefined\") {\n this.setByBooleanArray(b.array);\n }\n }\n }\n }\n }\n};\nextendClass(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);\nKJUR.asn1.DEROctetString = function (b) {\n if (b !== undefined && typeof b.obj !== \"undefined\") {\n var a = KJUR.asn1.ASN1Util.newObject(b.obj);\n b.hex = a.tohex();\n }\n KJUR.asn1.DEROctetString.superclass.constructor.call(this, b);\n this.hT = \"04\";\n};\nextendClass(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERNull = function () {\n KJUR.asn1.DERNull.superclass.constructor.call(this);\n this.hT = \"05\";\n this.hTLV = \"0500\";\n};\nextendClass(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERObjectIdentifier = function (a) {\n KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);\n this.hT = \"06\";\n this.setValueHex = function (b) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = b;\n };\n this.setValueOidString = function (b) {\n var c = oidtohex(b);\n if (c == null) {\n throw new Error(\"malformed oid string: \" + b);\n }\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = c;\n };\n this.setValueName = function (c) {\n var b = KJUR.asn1.x509.OID.name2oid(c);\n if (b !== \"\") {\n this.setValueOidString(b);\n } else {\n throw new Error(\"DERObjectIdentifier oidName undefined: \" + c);\n }\n };\n this.setValueNameOrOid = function (b) {\n if (b.match(/^[0-2].[0-9.]+$/)) {\n this.setValueOidString(b);\n } else {\n this.setValueName(b);\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n this.setByParam = function (b) {\n if (typeof b === \"string\") {\n this.setValueNameOrOid(b);\n } else {\n if (b.oid !== undefined) {\n this.setValueNameOrOid(b.oid);\n } else {\n if (b.name !== undefined) {\n this.setValueNameOrOid(b.name);\n } else {\n if (b.hex !== undefined) {\n this.setValueHex(b.hex);\n }\n }\n }\n }\n };\n if (a !== undefined) {\n this.setByParam(a);\n }\n};\nextendClass(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);\nKJUR.asn1.DEREnumerated = function (a) {\n KJUR.asn1.DEREnumerated.superclass.constructor.call(this);\n this.hT = \"0a\";\n this.setByBigInteger = function (b) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = twoscompl(b);\n };\n this.setByInteger = function (c) {\n var b = new BigInteger(String(c), 10);\n this.setByBigInteger(b);\n };\n this.setValueHex = function (b) {\n this.hV = b;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof a != \"undefined\") {\n if (typeof a[\"int\"] != \"undefined\") {\n this.setByInteger(a[\"int\"]);\n } else {\n if (typeof a == \"number\") {\n this.setByInteger(a);\n } else {\n if (typeof a.hex != \"undefined\") {\n this.setValueHex(a.hex);\n }\n }\n }\n }\n};\nextendClass(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);\nKJUR.asn1.DERUTF8String = function (a) {\n KJUR.asn1.DERUTF8String.superclass.constructor.call(this, a);\n this.hT = \"0c\";\n};\nextendClass(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERNumericString = function (a) {\n KJUR.asn1.DERNumericString.superclass.constructor.call(this, a);\n this.hT = \"12\";\n};\nextendClass(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERPrintableString = function (a) {\n KJUR.asn1.DERPrintableString.superclass.constructor.call(this, a);\n this.hT = \"13\";\n};\nextendClass(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERTeletexString = function (a) {\n KJUR.asn1.DERTeletexString.superclass.constructor.call(this, a);\n this.hT = \"14\";\n};\nextendClass(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERIA5String = function (a) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, a);\n this.hT = \"16\";\n};\nextendClass(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERVisibleString = function (a) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, a);\n this.hT = \"1a\";\n};\nextendClass(KJUR.asn1.DERVisibleString, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERBMPString = function (a) {\n KJUR.asn1.DERBMPString.superclass.constructor.call(this, a);\n this.hT = \"1e\";\n};\nextendClass(KJUR.asn1.DERBMPString, KJUR.asn1.DERAbstractString);\nKJUR.asn1.DERUTCTime = function (a) {\n KJUR.asn1.DERUTCTime.superclass.constructor.call(this, a);\n this.hT = \"17\";\n this.params = undefined;\n this.getFreshValueHex = function () {\n var d = this.params;\n if (this.params == undefined) {\n d = {\n date: new Date()\n };\n }\n if (typeof d == \"string\") {\n if (d.match(/^[0-9]{12}Z$/) || d.match(/^[0-9]{12}\\.[0-9]+Z$/)) {\n this.hV = stohex(d);\n } else {\n throw new Error(\"malformed string for UTCTime: \" + d);\n }\n } else {\n if (d.str != undefined) {\n this.hV = stohex(d.str);\n } else {\n if (d.date == undefined && d.millis == true) {\n var c = new Date();\n this.hV = stohex(this.formatDate(c, \"utc\", true));\n } else {\n if (d.date != undefined && d.date instanceof Date) {\n var b = d.millis === true;\n this.hV = stohex(this.formatDate(d.date, \"utc\", b));\n } else {\n if (d instanceof Date) {\n this.hV = stohex(this.formatDate(d, \"utc\"));\n }\n }\n }\n }\n }\n if (this.hV == undefined) {\n throw new Error(\"parameter not specified properly for UTCTime\");\n }\n return this.hV;\n };\n if (a != undefined) {\n this.setByParam(a);\n }\n};\nextendClass(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);\nKJUR.asn1.DERGeneralizedTime = function (a) {\n KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, a);\n this.hT = \"18\";\n this.params = a;\n this.getFreshValueHex = function () {\n var d = this.params;\n if (this.params == undefined) {\n d = {\n date: new Date()\n };\n }\n if (typeof d == \"string\") {\n if (d.match(/^[0-9]{14}Z$/) || d.match(/^[0-9]{14}\\.[0-9]+Z$/)) {\n this.hV = stohex(d);\n } else {\n throw new Error(\"malformed string for GeneralizedTime: \" + d);\n }\n } else {\n if (d.str != undefined) {\n this.hV = stohex(d.str);\n } else {\n if (d.date == undefined && d.millis == true) {\n var c = new Date();\n this.hV = stohex(this.formatDate(c, \"gen\", true));\n } else {\n if (d.date != undefined && d.date instanceof Date) {\n var b = d.millis === true;\n this.hV = stohex(this.formatDate(d.date, \"gen\", b));\n } else {\n if (d instanceof Date) {\n this.hV = stohex(this.formatDate(d, \"gen\"));\n }\n }\n }\n }\n }\n if (this.hV == undefined) {\n throw new Error(\"parameter not specified properly for GeneralizedTime\");\n }\n return this.hV;\n };\n if (a != undefined) {\n this.setByParam(a);\n }\n};\nextendClass(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);\nKJUR.asn1.DERSequence = function (a) {\n KJUR.asn1.DERSequence.superclass.constructor.call(this, a);\n this.hT = \"30\";\n this.getFreshValueHex = function () {\n var c = \"\";\n for (var b = 0; b < this.asn1Array.length; b++) {\n var d = this.asn1Array[b];\n c += d.tohex();\n }\n this.hV = c;\n return this.hV;\n };\n};\nextendClass(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);\nKJUR.asn1.DERSet = function (a) {\n KJUR.asn1.DERSet.superclass.constructor.call(this, a);\n this.hT = \"31\";\n this.sortFlag = true;\n this.getFreshValueHex = function () {\n var b = new Array();\n for (var c = 0; c < this.asn1Array.length; c++) {\n var d = this.asn1Array[c];\n b.push(d.tohex());\n }\n if (this.sortFlag == true) {\n b.sort();\n }\n this.hV = b.join(\"\");\n return this.hV;\n };\n if (typeof a != \"undefined\") {\n if (typeof a.sortflag != \"undefined\" && a.sortflag == false) {\n this.sortFlag = false;\n }\n }\n};\nextendClass(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);\nKJUR.asn1.DERTaggedObject = function (f) {\n KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);\n var d = KJUR.asn1,\n e = ASN1HEX,\n a = e.getV,\n c = e.isASN1HEX,\n b = d.ASN1Util.newObject;\n this.hT = \"a0\";\n this.hV = \"\";\n this.isExplicit = true;\n this.asn1Object = null;\n this.params = {\n tag: \"a0\",\n explicit: true\n };\n this.setASN1Object = function (g, h, i) {\n this.params = {\n tag: h,\n explicit: g,\n obj: i\n };\n };\n this.getFreshValueHex = function () {\n var h = this.params;\n if (h.explicit == undefined) {\n h.explicit = true;\n }\n if (h.tage != undefined) {\n h.tag = h.tage;\n h.explicit = true;\n }\n if (h.tagi != undefined) {\n h.tag = h.tagi;\n h.explicit = false;\n }\n if (h.str != undefined) {\n this.hV = utf8tohex(h.str);\n } else {\n if (h.hex != undefined) {\n this.hV = h.hex;\n } else {\n if (h.obj != undefined) {\n var g;\n if (h.obj instanceof d.ASN1Object) {\n g = h.obj.tohex();\n } else {\n if (typeof h.obj == \"object\") {\n g = b(h.obj).tohex();\n }\n }\n if (h.explicit) {\n this.hV = g;\n } else {\n this.hV = a(g, 0);\n }\n } else {\n throw new Error(\"str, hex nor obj not specified\");\n }\n }\n }\n if (h.tag == undefined) {\n h.tag = \"a0\";\n }\n this.hT = h.tag;\n this.hTLV = null;\n this.isModified = true;\n return this.hV;\n };\n this.setByParam = function (g) {\n this.params = g;\n };\n if (f !== undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);\nvar ASN1HEX = new function () {}();\nASN1HEX.getLblen = function (c, a) {\n if (c.substr(a + 2, 1) != \"8\") {\n return 1;\n }\n var b = parseInt(c.substr(a + 3, 1));\n if (b == 0) {\n return -1;\n }\n if (0 < b && b < 10) {\n return b + 1;\n }\n return -2;\n};\nASN1HEX.getL = function (c, b) {\n var a = ASN1HEX.getLblen(c, b);\n if (a < 1) {\n return \"\";\n }\n return c.substr(b + 2, a * 2);\n};\nASN1HEX.getVblen = function (d, a) {\n var c, b;\n c = ASN1HEX.getL(d, a);\n if (c == \"\") {\n return -1;\n }\n if (c.substr(0, 1) === \"8\") {\n b = new BigInteger(c.substr(2), 16);\n } else {\n b = new BigInteger(c, 16);\n }\n return b.intValue();\n};\nASN1HEX.getVidx = function (c, b) {\n var a = ASN1HEX.getLblen(c, b);\n if (a < 0) {\n return a;\n }\n return b + (a + 1) * 2;\n};\nASN1HEX.getV = function (d, a) {\n var c = ASN1HEX.getVidx(d, a);\n var b = ASN1HEX.getVblen(d, a);\n return d.substr(c, b * 2);\n};\nASN1HEX.getTLV = function (b, a) {\n return b.substr(a, 2) + ASN1HEX.getL(b, a) + ASN1HEX.getV(b, a);\n};\nASN1HEX.getTLVblen = function (b, a) {\n return 2 + ASN1HEX.getLblen(b, a) * 2 + ASN1HEX.getVblen(b, a) * 2;\n};\nASN1HEX.getNextSiblingIdx = function (d, a) {\n var c = ASN1HEX.getVidx(d, a);\n var b = ASN1HEX.getVblen(d, a);\n return c + b * 2;\n};\nASN1HEX.getChildIdx = function (e, k) {\n var l = ASN1HEX;\n var j = [];\n var c, f, g;\n c = l.getVidx(e, k);\n f = l.getVblen(e, k) * 2;\n if (e.substr(k, 2) == \"03\") {\n c += 2;\n f -= 2;\n }\n g = 0;\n var d = c;\n while (g <= f) {\n var b = l.getTLVblen(e, d);\n g += b;\n if (g <= f) {\n j.push(d);\n }\n d += b;\n if (g >= f) {\n break;\n }\n }\n return j;\n};\nASN1HEX.getNthChildIdx = function (d, b, e) {\n var c = ASN1HEX.getChildIdx(d, b);\n return c[e];\n};\nASN1HEX.getIdxbyList = function (e, d, c, i) {\n var g = ASN1HEX;\n var f, b;\n if (c.length == 0) {\n if (i !== undefined) {\n if (e.substr(d, 2) !== i) {\n return -1;\n }\n }\n return d;\n }\n f = c.shift();\n b = g.getChildIdx(e, d);\n if (f >= b.length) {\n return -1;\n }\n return g.getIdxbyList(e, b[f], c, i);\n};\nASN1HEX.getIdxbyListEx = function (f, k, b, g) {\n var m = ASN1HEX;\n var d, l;\n if (b.length == 0) {\n if (g !== undefined) {\n if (f.substr(k, 2) !== g) {\n return -1;\n }\n }\n return k;\n }\n d = b.shift();\n l = m.getChildIdx(f, k);\n var j = 0;\n for (var e = 0; e < l.length; e++) {\n var c = f.substr(l[e], 2);\n if (typeof d == \"number\" && !m.isContextTag(c) && j == d || typeof d == \"string\" && m.isContextTag(c, d)) {\n return m.getIdxbyListEx(f, l[e], b, g);\n }\n if (!m.isContextTag(c)) {\n j++;\n }\n }\n return -1;\n};\nASN1HEX.getTLVbyList = function (d, c, b, f) {\n var e = ASN1HEX;\n var a = e.getIdxbyList(d, c, b, f);\n if (a == -1) {\n return null;\n }\n if (a >= d.length) {\n return null;\n }\n return e.getTLV(d, a);\n};\nASN1HEX.getTLVbyListEx = function (d, c, b, f) {\n var e = ASN1HEX;\n var a = e.getIdxbyListEx(d, c, b, f);\n if (a == -1) {\n return null;\n }\n return e.getTLV(d, a);\n};\nASN1HEX.getVbyList = function (e, c, b, g, i) {\n var f = ASN1HEX;\n var a, d;\n a = f.getIdxbyList(e, c, b, g);\n if (a == -1) {\n return null;\n }\n if (a >= e.length) {\n return null;\n }\n d = f.getV(e, a);\n if (i === true) {\n d = d.substr(2);\n }\n return d;\n};\nASN1HEX.getVbyListEx = function (b, e, a, d, f) {\n var j = ASN1HEX;\n var g, c, i;\n g = j.getIdxbyListEx(b, e, a, d);\n if (g == -1) {\n return null;\n }\n i = j.getV(b, g);\n if (b.substr(g, 2) == \"03\" && f !== false) {\n i = i.substr(2);\n }\n return i;\n};\nASN1HEX.getInt = function (e, b, f) {\n if (f == undefined) {\n f = -1;\n }\n try {\n var c = e.substr(b, 2);\n if (c != \"02\" && c != \"03\") {\n return f;\n }\n var a = ASN1HEX.getV(e, b);\n if (c == \"02\") {\n return parseInt(a, 16);\n } else {\n return bitstrtoint(a);\n }\n } catch (d) {\n return f;\n }\n};\nASN1HEX.getOID = function (c, a, d) {\n if (d == undefined) {\n d = null;\n }\n try {\n if (c.substr(a, 2) != \"06\") {\n return d;\n }\n var e = ASN1HEX.getV(c, a);\n return hextooid(e);\n } catch (b) {\n return d;\n }\n};\nASN1HEX.getOIDName = function (d, a, f) {\n if (f == undefined) {\n f = null;\n }\n try {\n var e = ASN1HEX.getOID(d, a, f);\n if (e == f) {\n return f;\n }\n var b = KJUR.asn1.x509.OID.oid2name(e);\n if (b == \"\") {\n return e;\n }\n return b;\n } catch (c) {\n return f;\n }\n};\nASN1HEX.getString = function (d, b, e) {\n if (e == undefined) {\n e = null;\n }\n try {\n var a = ASN1HEX.getV(d, b);\n return hextorstr(a);\n } catch (c) {\n return e;\n }\n};\nASN1HEX.hextooidstr = function (e) {\n var h = function (b, a) {\n if (b.length >= a) {\n return b;\n }\n return new Array(a - b.length + 1).join(\"0\") + b;\n };\n var l = [];\n var o = e.substr(0, 2);\n var f = parseInt(o, 16);\n l[0] = new String(Math.floor(f / 40));\n l[1] = new String(f % 40);\n var m = e.substr(2);\n var k = [];\n for (var g = 0; g < m.length / 2; g++) {\n k.push(parseInt(m.substr(g * 2, 2), 16));\n }\n var j = [];\n var d = \"\";\n for (var g = 0; g < k.length; g++) {\n if (k[g] & 128) {\n d = d + h((k[g] & 127).toString(2), 7);\n } else {\n d = d + h((k[g] & 127).toString(2), 7);\n j.push(new String(parseInt(d, 2)));\n d = \"\";\n }\n }\n var n = l.join(\".\");\n if (j.length > 0) {\n n = n + \".\" + j.join(\".\");\n }\n return n;\n};\nASN1HEX.dump = function (t, c, l, g) {\n var p = ASN1HEX;\n var j = p.getV;\n var y = p.dump;\n var w = p.getChildIdx;\n var e = t;\n if (t instanceof KJUR.asn1.ASN1Object) {\n e = t.tohex();\n }\n var q = function (A, i) {\n if (A.length <= i * 2) {\n return A;\n } else {\n var v = A.substr(0, i) + \"..(total \" + A.length / 2 + \"bytes)..\" + A.substr(A.length - i, i);\n return v;\n }\n };\n if (c === undefined) {\n c = {\n ommit_long_octet: 32\n };\n }\n if (l === undefined) {\n l = 0;\n }\n if (g === undefined) {\n g = \"\";\n }\n var x = c.ommit_long_octet;\n var z = e.substr(l, 2);\n if (z == \"01\") {\n var h = j(e, l);\n if (h == \"00\") {\n return g + \"BOOLEAN FALSE\\n\";\n } else {\n return g + \"BOOLEAN TRUE\\n\";\n }\n }\n if (z == \"02\") {\n var h = j(e, l);\n return g + \"INTEGER \" + q(h, x) + \"\\n\";\n }\n if (z == \"03\") {\n var h = j(e, l);\n if (p.isASN1HEX(h.substr(2))) {\n var k = g + \"BITSTRING, encapsulates\\n\";\n k = k + y(h.substr(2), c, 0, g + \" \");\n return k;\n } else {\n return g + \"BITSTRING \" + q(h, x) + \"\\n\";\n }\n }\n if (z == \"04\") {\n var h = j(e, l);\n if (p.isASN1HEX(h)) {\n var k = g + \"OCTETSTRING, encapsulates\\n\";\n k = k + y(h, c, 0, g + \" \");\n return k;\n } else {\n return g + \"OCTETSTRING \" + q(h, x) + \"\\n\";\n }\n }\n if (z == \"05\") {\n return g + \"NULL\\n\";\n }\n if (z == \"06\") {\n var m = j(e, l);\n var b = KJUR.asn1.ASN1Util.oidHexToInt(m);\n var o = KJUR.asn1.x509.OID.oid2name(b);\n var a = b.replace(/\\./g, \" \");\n if (o != \"\") {\n return g + \"ObjectIdentifier \" + o + \" (\" + a + \")\\n\";\n } else {\n return g + \"ObjectIdentifier (\" + a + \")\\n\";\n }\n }\n if (z == \"0a\") {\n return g + \"ENUMERATED \" + parseInt(j(e, l)) + \"\\n\";\n }\n if (z == \"0c\") {\n return g + \"UTF8String '\" + hextoutf8(j(e, l)) + \"'\\n\";\n }\n if (z == \"13\") {\n return g + \"PrintableString '\" + hextoutf8(j(e, l)) + \"'\\n\";\n }\n if (z == \"14\") {\n return g + \"TeletexString '\" + hextoutf8(j(e, l)) + \"'\\n\";\n }\n if (z == \"16\") {\n return g + \"IA5String '\" + hextoutf8(j(e, l)) + \"'\\n\";\n }\n if (z == \"17\") {\n return g + \"UTCTime \" + hextoutf8(j(e, l)) + \"\\n\";\n }\n if (z == \"18\") {\n return g + \"GeneralizedTime \" + hextoutf8(j(e, l)) + \"\\n\";\n }\n if (z == \"1a\") {\n return g + \"VisualString '\" + hextoutf8(j(e, l)) + \"'\\n\";\n }\n if (z == \"1e\") {\n return g + \"BMPString '\" + ucs2hextoutf8(j(e, l)) + \"'\\n\";\n }\n if (z == \"30\") {\n if (e.substr(l, 4) == \"3000\") {\n return g + \"SEQUENCE {}\\n\";\n }\n var k = g + \"SEQUENCE\\n\";\n var d = w(e, l);\n var f = c;\n if ((d.length == 2 || d.length == 3) && e.substr(d[0], 2) == \"06\" && e.substr(d[d.length - 1], 2) == \"04\") {\n var o = p.oidname(j(e, d[0]));\n var r = JSON.parse(JSON.stringify(c));\n r.x509ExtName = o;\n f = r;\n }\n for (var u = 0; u < d.length; u++) {\n k = k + y(e, f, d[u], g + \" \");\n }\n return k;\n }\n if (z == \"31\") {\n var k = g + \"SET\\n\";\n var d = w(e, l);\n for (var u = 0; u < d.length; u++) {\n k = k + y(e, c, d[u], g + \" \");\n }\n return k;\n }\n var z = parseInt(z, 16);\n if ((z & 128) != 0) {\n var n = z & 31;\n if ((z & 32) != 0) {\n var k = g + \"[\" + n + \"]\\n\";\n var d = w(e, l);\n for (var u = 0; u < d.length; u++) {\n k = k + y(e, c, d[u], g + \" \");\n }\n return k;\n } else {\n var h = j(e, l);\n if (ASN1HEX.isASN1HEX(h)) {\n var k = g + \"[\" + n + \"]\\n\";\n k = k + y(h, c, 0, g + \" \");\n return k;\n } else {\n if (h.substr(0, 8) == \"68747470\") {\n h = hextoutf8(h);\n } else {\n if (c.x509ExtName === \"subjectAltName\" && n == 2) {\n h = hextoutf8(h);\n }\n }\n }\n var k = g + \"[\" + n + \"] \" + h + \"\\n\";\n return k;\n }\n }\n return g + \"UNKNOWN(\" + z + \") \" + j(e, l) + \"\\n\";\n};\nASN1HEX.parse = function (x) {\n var t = ASN1HEX,\n f = t.parse,\n a = t.isASN1HEX,\n l = t.getV,\n b = t.getTLV,\n y = t.getChildIdx,\n i = KJUR.asn1,\n e = i.ASN1Util.oidHexToInt,\n B = i.x509.OID.oid2name,\n k = hextoutf8,\n n = ucs2hextoutf8,\n q = iso88591hextoutf8;\n var c = {\n \"0c\": \"utf8str\",\n \"12\": \"numstr\",\n \"13\": \"prnstr\",\n \"14\": \"telstr\",\n \"16\": \"ia5str\",\n \"17\": \"utctime\",\n \"18\": \"gentime\",\n \"1a\": \"visstr\",\n \"1e\": \"bmpstr\",\n \"30\": \"seq\",\n \"31\": \"set\"\n };\n var u = function (H) {\n var D = [];\n var E = y(H, 0);\n for (var G = 0; G < E.length; G++) {\n var s = E[G];\n var d = b(H, s);\n var F = f(d);\n D.push(F);\n }\n return D;\n };\n var C = x.substr(0, 2);\n var j = {};\n var p = l(x, 0);\n if (C == \"01\") {\n if (x == \"0101ff\") {\n return {\n bool: true\n };\n }\n return {\n bool: false\n };\n } else {\n if (C == \"02\") {\n return {\n \"int\": {\n hex: p\n }\n };\n } else {\n if (C == \"03\") {\n try {\n if (p.substr(0, 2) != \"00\") {\n throw \"not encap\";\n }\n var v = p.substr(2);\n if (!a(v)) {\n throw \"not encap\";\n }\n return {\n bitstr: {\n obj: f(v)\n }\n };\n } catch (z) {\n var m = null;\n if (p.length <= 10) {\n m = bitstrtobinstr(p);\n }\n if (m == null) {\n return {\n bitstr: {\n hex: p\n }\n };\n } else {\n return {\n bitstr: {\n bin: m\n }\n };\n }\n }\n } else {\n if (C == \"04\") {\n try {\n if (!a(p)) {\n throw \"not encap\";\n }\n return {\n octstr: {\n obj: f(p)\n }\n };\n } catch (z) {\n return {\n octstr: {\n hex: p\n }\n };\n }\n } else {\n if (C == \"05\") {\n return {\n \"null\": \"\"\n };\n } else {\n if (C == \"06\") {\n var g = e(p);\n var r = B(g);\n if (r == \"\") {\n return {\n oid: g\n };\n } else {\n return {\n oid: r\n };\n }\n } else {\n if (C == \"0a\") {\n if (p.length > 4) {\n return {\n \"enum\": {\n hex: p\n }\n };\n } else {\n return {\n \"enum\": parseInt(p, 16)\n };\n }\n } else {\n if (C == \"30\" || C == \"31\") {\n j[c[C]] = u(x);\n return j;\n } else {\n if (C == \"14\") {\n var o = q(p);\n j[c[C]] = {\n str: o\n };\n return j;\n } else {\n if (C == \"1e\") {\n var o = n(p);\n j[c[C]] = {\n str: o\n };\n return j;\n } else {\n if (\":0c:12:13:16:17:18:1a:\".indexOf(C) != -1) {\n var o = k(p);\n j[c[C]] = {\n str: o\n };\n return j;\n } else {\n if (C.match(/^8[0-9]$/)) {\n var o = k(p);\n if (o == null | o == \"\") {\n return {\n tag: {\n tag: C,\n explicit: false,\n hex: p\n }\n };\n } else {\n if (o.match(/[\\x00-\\x1F\\x7F-\\x9F]/) != null || o.match(/[\\u0000-\\u001F\\u0080–\\u009F]/) != null) {\n return {\n tag: {\n tag: C,\n explicit: false,\n hex: p\n }\n };\n } else {\n return {\n tag: {\n tag: C,\n explicit: false,\n str: o\n }\n };\n }\n }\n } else {\n if (C.match(/^a[0-9]$/)) {\n try {\n if (!a(p)) {\n throw new Error(\"not encap\");\n }\n return {\n tag: {\n tag: C,\n explicit: true,\n obj: f(p)\n }\n };\n } catch (z) {\n return {\n tag: {\n tag: C,\n explicit: true,\n hex: p\n }\n };\n }\n } else {\n var A = new KJUR.asn1.ASN1Object();\n A.hV = p;\n var w = A.getLengthHexFromValue();\n return {\n asn1: {\n tlv: C + w + p\n }\n };\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n};\nASN1HEX.isContextTag = function (c, b) {\n c = c.toLowerCase();\n var f, e;\n try {\n f = parseInt(c, 16);\n } catch (d) {\n return -1;\n }\n if (b === undefined) {\n if ((f & 192) == 128) {\n return true;\n } else {\n return false;\n }\n }\n try {\n var a = b.match(/^\\[[0-9]+\\]$/);\n if (a == null) {\n return false;\n }\n e = parseInt(b.substr(1, b.length - 1), 10);\n if (e > 31) {\n return false;\n }\n if ((f & 192) == 128 && (f & 31) == e) {\n return true;\n }\n return false;\n } catch (d) {\n return false;\n }\n};\nASN1HEX.isASN1HEX = function (e) {\n var d = ASN1HEX;\n if (e.length % 2 == 1) {\n return false;\n }\n var c = d.getVblen(e, 0);\n var b = e.substr(0, 2);\n var f = d.getL(e, 0);\n var a = e.length - b.length - f.length;\n if (a == c * 2) {\n return true;\n }\n return false;\n};\nASN1HEX.checkStrictDER = function (g, o, d, c, r) {\n var s = ASN1HEX;\n if (d === undefined) {\n if (typeof g != \"string\") {\n throw new Error(\"not hex string\");\n }\n g = g.toLowerCase();\n if (!KJUR.lang.String.isHex(g)) {\n throw new Error(\"not hex string\");\n }\n d = g.length;\n c = g.length / 2;\n if (c < 128) {\n r = 1;\n } else {\n r = Math.ceil(c.toString(16)) + 1;\n }\n }\n var k = s.getL(g, o);\n if (k.length > r * 2) {\n throw new Error(\"L of TLV too long: idx=\" + o);\n }\n var n = s.getVblen(g, o);\n if (n > c) {\n throw new Error(\"value of L too long than hex: idx=\" + o);\n }\n var q = s.getTLV(g, o);\n var f = q.length - 2 - s.getL(g, o).length;\n if (f !== n * 2) {\n throw new Error(\"V string length and L's value not the same:\" + f + \"/\" + n * 2);\n }\n if (o === 0) {\n if (g.length != q.length) {\n throw new Error(\"total length and TLV length unmatch:\" + g.length + \"!=\" + q.length);\n }\n }\n var b = g.substr(o, 2);\n if (b === \"02\") {\n var a = s.getVidx(g, o);\n if (g.substr(a, 2) == \"00\" && g.charCodeAt(a + 2) < 56) {\n throw new Error(\"not least zeros for DER INTEGER\");\n }\n }\n if (parseInt(b, 16) & 32) {\n var p = s.getVblen(g, o);\n var m = 0;\n var l = s.getChildIdx(g, o);\n for (var e = 0; e < l.length; e++) {\n var j = s.getTLV(g, l[e]);\n m += j.length;\n s.checkStrictDER(g, l[e], d, c, r);\n }\n if (p * 2 != m) {\n throw new Error(\"sum of children's TLV length and L unmatch: \" + p * 2 + \"!=\" + m);\n }\n }\n};\nASN1HEX.oidname = function (a) {\n var c = KJUR.asn1;\n if (KJUR.lang.String.isHex(a)) {\n a = c.ASN1Util.oidHexToInt(a);\n }\n var b = c.x509.OID.oid2name(a);\n if (b === \"\") {\n b = a;\n }\n return b;\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) {\n KJUR.asn1 = {};\n}\nif (typeof KJUR.asn1.x509 == \"undefined\" || !KJUR.asn1.x509) {\n KJUR.asn1.x509 = {};\n}\nKJUR.asn1.x509.Certificate = function (h) {\n KJUR.asn1.x509.Certificate.superclass.constructor.call(this);\n var d = KJUR,\n c = d.asn1,\n f = c.DERBitString,\n b = c.DERSequence,\n g = c.x509,\n a = g.TBSCertificate,\n e = g.AlgorithmIdentifier;\n this.params = undefined;\n this.setByParam = function (i) {\n this.params = i;\n };\n this.sign = function () {\n var l = this.params;\n var k = l.sigalg;\n if (l.sigalg.name != undefined) {\n k = l.sigalg.name;\n }\n var i = l.tbsobj.tohex();\n var j = new KJUR.crypto.Signature({\n alg: k\n });\n j.init(l.cakey);\n j.updateHex(i);\n l.sighex = j.sign();\n };\n this.getPEM = function () {\n return hextopem(this.tohex(), \"CERTIFICATE\");\n };\n this.tohex = function () {\n var k = this.params;\n if (k.tbsobj == undefined || k.tbsobj == null) {\n k.tbsobj = new a(k);\n }\n if (k.sighex == undefined && k.cakey != undefined) {\n this.sign();\n }\n if (k.sighex == undefined) {\n throw new Error(\"sighex or cakey parameter not defined\");\n }\n var i = [];\n i.push(k.tbsobj);\n i.push(new e({\n name: k.sigalg\n }));\n i.push(new f({\n hex: \"00\" + k.sighex\n }));\n var j = new b({\n array: i\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (h != undefined) {\n this.params = h;\n }\n};\nextendClass(KJUR.asn1.x509.Certificate, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.TBSCertificate = function (f) {\n KJUR.asn1.x509.TBSCertificate.superclass.constructor.call(this);\n var b = KJUR,\n i = b.asn1,\n d = i.x509,\n c = i.DERTaggedObject,\n h = i.DERInteger,\n g = i.DERSequence,\n l = d.AlgorithmIdentifier,\n e = d.Time,\n a = d.X500Name,\n j = d.Extensions,\n k = d.SubjectPublicKeyInfo;\n this.params = null;\n this.setByParam = function (m) {\n this.params = m;\n };\n this.tohex = function () {\n var n = [];\n var q = this.params;\n if (q.version != undefined || q.version != 1) {\n var m = 2;\n if (q.version != undefined) {\n m = q.version - 1;\n }\n var p = new c({\n obj: new h({\n \"int\": m\n })\n });\n n.push(p);\n }\n n.push(new h(q.serial));\n n.push(new l({\n name: q.sigalg\n }));\n n.push(new a(q.issuer));\n n.push(new g({\n array: [new e(q.notbefore), new e(q.notafter)]\n }));\n n.push(new a(q.subject));\n n.push(new k(KEYUTIL.getKey(q.sbjpubkey)));\n if (q.ext !== undefined && q.ext.length > 0) {\n n.push(new c({\n tag: \"a3\",\n obj: new j(q.ext)\n }));\n }\n var o = new KJUR.asn1.DERSequence({\n array: n\n });\n return o.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f !== undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.x509.TBSCertificate, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.Extensions = function (d) {\n KJUR.asn1.x509.Extensions.superclass.constructor.call(this);\n var c = KJUR,\n b = c.asn1,\n a = b.DERSequence,\n e = b.x509;\n this.aParam = [];\n this.setByParam = function (f) {\n this.aParam = f;\n };\n this.tohex = function () {\n var f = [];\n for (var h = 0; h < this.aParam.length; h++) {\n var l = this.aParam[h];\n var k = l.extname;\n var j = null;\n if (l.extn != undefined) {\n j = new e.PrivateExtension(l);\n } else {\n if (k == \"subjectKeyIdentifier\") {\n j = new e.SubjectKeyIdentifier(l);\n } else {\n if (k == \"keyUsage\") {\n j = new e.KeyUsage(l);\n } else {\n if (k == \"subjectAltName\") {\n j = new e.SubjectAltName(l);\n } else {\n if (k == \"issuerAltName\") {\n j = new e.IssuerAltName(l);\n } else {\n if (k == \"basicConstraints\") {\n j = new e.BasicConstraints(l);\n } else {\n if (k == \"nameConstraints\") {\n j = new e.NameConstraints(l);\n } else {\n if (k == \"cRLDistributionPoints\") {\n j = new e.CRLDistributionPoints(l);\n } else {\n if (k == \"certificatePolicies\") {\n j = new e.CertificatePolicies(l);\n } else {\n if (k == \"policyMappings\") {\n j = new e.PolicyMappings(l);\n } else {\n if (k == \"policyConstraints\") {\n j = new e.PolicyConstraints(l);\n } else {\n if (k == \"inhibitAnyPolicy\") {\n j = new e.InhibitAnyPolicy(l);\n } else {\n if (k == \"authorityKeyIdentifier\") {\n j = new e.AuthorityKeyIdentifier(l);\n } else {\n if (k == \"extKeyUsage\") {\n j = new e.ExtKeyUsage(l);\n } else {\n if (k == \"authorityInfoAccess\") {\n j = new e.AuthorityInfoAccess(l);\n } else {\n if (k == \"cRLNumber\") {\n j = new e.CRLNumber(l);\n } else {\n if (k == \"cRLReason\") {\n j = new e.CRLReason(l);\n } else {\n if (k == \"ocspNonce\") {\n j = new e.OCSPNonce(l);\n } else {\n if (k == \"ocspNoCheck\") {\n j = new e.OCSPNoCheck(l);\n } else {\n if (k == \"adobeTimeStamp\") {\n j = new e.AdobeTimeStamp(l);\n } else {\n if (k == \"subjectDirectoryAttributes\") {\n j = new e.SubjectDirectoryAttributes(l);\n } else {\n throw new Error(\"extension not supported:\" + JSON.stringify(l));\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (j != null) {\n f.push(j);\n }\n }\n var g = new a({\n array: f\n });\n return g.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (d != undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.x509.Extensions, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.Extension = function (d) {\n KJUR.asn1.x509.Extension.superclass.constructor.call(this);\n var f = null,\n a = KJUR,\n e = a.asn1,\n h = e.DERObjectIdentifier,\n i = e.DEROctetString,\n b = e.DERBitString,\n g = e.DERBoolean,\n c = e.DERSequence;\n this.tohex = function () {\n var m = new h({\n oid: this.oid\n });\n var l = new i({\n hex: this.getExtnValueHex()\n });\n var k = new Array();\n k.push(m);\n if (this.critical) {\n k.push(new g());\n }\n k.push(l);\n var j = new c({\n array: k\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.critical = false;\n if (d !== undefined) {\n if (d.critical !== undefined) {\n this.critical = d.critical;\n }\n }\n};\nextendClass(KJUR.asn1.x509.Extension, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.KeyUsage = function (c) {\n KJUR.asn1.x509.KeyUsage.superclass.constructor.call(this, c);\n var b = Error;\n var a = {\n digitalSignature: 0,\n nonRepudiation: 1,\n keyEncipherment: 2,\n dataEncipherment: 3,\n keyAgreement: 4,\n keyCertSign: 5,\n cRLSign: 6,\n encipherOnly: 7,\n decipherOnly: 8\n };\n this.getExtnValueHex = function () {\n var d = this.getBinValue();\n this.asn1ExtnValue = new KJUR.asn1.DERBitString({\n bin: d\n });\n return this.asn1ExtnValue.tohex();\n };\n this.getBinValue = function () {\n var d = this.params;\n if (typeof d != \"object\" || typeof d.names != \"object\" && typeof d.bin != \"string\") {\n throw new b(\"parameter not yet set\");\n }\n if (d.names != undefined) {\n return namearraytobinstr(d.names, a);\n } else {\n if (d.bin != undefined) {\n return d.bin;\n } else {\n throw new b(\"parameter not set properly\");\n }\n }\n };\n this.oid = \"2.5.29.15\";\n if (c !== undefined) {\n this.params = c;\n }\n};\nextendClass(KJUR.asn1.x509.KeyUsage, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.BasicConstraints = function (g) {\n KJUR.asn1.x509.BasicConstraints.superclass.constructor.call(this, g);\n var c = KJUR.asn1,\n e = c.DERBoolean,\n f = c.DERInteger,\n b = c.DERSequence;\n var a = false;\n var d = -1;\n this.getExtnValueHex = function () {\n var i = new Array();\n if (this.cA) {\n i.push(new e());\n }\n if (this.pathLen > -1) {\n i.push(new f({\n \"int\": this.pathLen\n }));\n }\n var h = new b({\n array: i\n });\n this.asn1ExtnValue = h;\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.19\";\n this.cA = false;\n this.pathLen = -1;\n if (g !== undefined) {\n if (g.cA !== undefined) {\n this.cA = g.cA;\n }\n if (g.pathLen !== undefined) {\n this.pathLen = g.pathLen;\n }\n }\n};\nextendClass(KJUR.asn1.x509.BasicConstraints, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.CRLDistributionPoints = function (d) {\n KJUR.asn1.x509.CRLDistributionPoints.superclass.constructor.call(this, d);\n var b = KJUR,\n a = b.asn1,\n c = a.x509;\n this.getExtnValueHex = function () {\n return this.asn1ExtnValue.tohex();\n };\n this.setByDPArray = function (e) {\n var f = [];\n for (var g = 0; g < e.length; g++) {\n if (e[g] instanceof KJUR.asn1.ASN1Object) {\n f.push(e[g]);\n } else {\n var h = new c.DistributionPoint(e[g]);\n f.push(h);\n }\n }\n this.asn1ExtnValue = new a.DERSequence({\n array: f\n });\n };\n this.setByOneURI = function (f) {\n var e = new c.DistributionPoint({\n fulluri: f\n });\n this.setByDPArray([e]);\n };\n this.oid = \"2.5.29.31\";\n if (d !== undefined) {\n if (d.array !== undefined) {\n this.setByDPArray(d.array);\n } else {\n if (d.uri !== undefined) {\n this.setByOneURI(d.uri);\n }\n }\n }\n};\nextendClass(KJUR.asn1.x509.CRLDistributionPoints, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.DistributionPoint = function (e) {\n KJUR.asn1.x509.DistributionPoint.superclass.constructor.call(this);\n var a = null,\n c = KJUR,\n b = c.asn1,\n d = b.x509.DistributionPointName;\n this.tohex = function () {\n var f = new b.DERSequence();\n if (this.asn1DP != null) {\n var g = new b.DERTaggedObject({\n explicit: true,\n tag: \"a0\",\n obj: this.asn1DP\n });\n f.appendASN1Object(g);\n }\n this.hTLV = f.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n if (e.dpobj !== undefined) {\n this.asn1DP = e.dpobj;\n } else {\n if (e.dpname !== undefined) {\n this.asn1DP = new d(e.dpname);\n } else {\n if (e.fulluri !== undefined) {\n this.asn1DP = new d({\n full: [{\n uri: e.fulluri\n }]\n });\n }\n }\n }\n }\n};\nextendClass(KJUR.asn1.x509.DistributionPoint, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.DistributionPointName = function (h) {\n KJUR.asn1.x509.DistributionPointName.superclass.constructor.call(this);\n var g = null,\n d = null,\n a = null,\n f = null,\n c = KJUR,\n b = c.asn1,\n e = b.DERTaggedObject;\n this.tohex = function () {\n if (this.type != \"full\") {\n throw new Error(\"currently type shall be 'full': \" + this.type);\n }\n this.asn1Obj = new e({\n explicit: false,\n tag: this.tag,\n obj: this.asn1V\n });\n this.hTLV = this.asn1Obj.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (h !== undefined) {\n if (b.x509.GeneralNames.prototype.isPrototypeOf(h)) {\n this.type = \"full\";\n this.tag = \"a0\";\n this.asn1V = h;\n } else {\n if (h.full !== undefined) {\n this.type = \"full\";\n this.tag = \"a0\";\n this.asn1V = new b.x509.GeneralNames(h.full);\n } else {\n throw new Error(\"This class supports GeneralNames only as argument\");\n }\n }\n }\n};\nextendClass(KJUR.asn1.x509.DistributionPointName, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.CertificatePolicies = function (f) {\n KJUR.asn1.x509.CertificatePolicies.superclass.constructor.call(this, f);\n var c = KJUR,\n b = c.asn1,\n e = b.x509,\n a = b.DERSequence,\n d = e.PolicyInformation;\n this.params = null;\n this.getExtnValueHex = function () {\n var j = [];\n for (var h = 0; h < this.params.array.length; h++) {\n j.push(new d(this.params.array[h]));\n }\n var g = new a({\n array: j\n });\n this.asn1ExtnValue = g;\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.32\";\n if (f !== undefined) {\n this.params = f;\n }\n};\nextendClass(KJUR.asn1.x509.CertificatePolicies, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.PolicyInformation = function (d) {\n KJUR.asn1.x509.PolicyInformation.superclass.constructor.call(this, d);\n var c = KJUR.asn1,\n b = c.DERSequence,\n e = c.DERObjectIdentifier,\n a = c.x509.PolicyQualifierInfo;\n this.params = null;\n this.tohex = function () {\n if (this.params.policyoid === undefined && this.params.array === undefined) {\n throw new Error(\"parameter oid and array missing\");\n }\n var f = [new e(this.params.policyoid)];\n if (this.params.array !== undefined) {\n var j = [];\n for (var h = 0; h < this.params.array.length; h++) {\n j.push(new a(this.params.array[h]));\n }\n if (j.length > 0) {\n f.push(new b({\n array: j\n }));\n }\n }\n var g = new b({\n array: f\n });\n return g.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (d !== undefined) {\n this.params = d;\n }\n};\nextendClass(KJUR.asn1.x509.PolicyInformation, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.PolicyQualifierInfo = function (e) {\n KJUR.asn1.x509.PolicyQualifierInfo.superclass.constructor.call(this, e);\n var c = KJUR.asn1,\n b = c.DERSequence,\n d = c.DERIA5String,\n f = c.DERObjectIdentifier,\n a = c.x509.UserNotice;\n this.params = null;\n this.tohex = function () {\n if (this.params.cps !== undefined) {\n var g = new b({\n array: [new f({\n oid: \"1.3.6.1.5.5.7.2.1\"\n }), new d({\n str: this.params.cps\n })]\n });\n return g.tohex();\n }\n if (this.params.unotice != undefined) {\n var g = new b({\n array: [new f({\n oid: \"1.3.6.1.5.5.7.2.2\"\n }), new a(this.params.unotice)]\n });\n return g.tohex();\n }\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.x509.PolicyQualifierInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.UserNotice = function (e) {\n KJUR.asn1.x509.UserNotice.superclass.constructor.call(this, e);\n var a = KJUR.asn1.DERSequence,\n d = KJUR.asn1.DERInteger,\n c = KJUR.asn1.x509.DisplayText,\n b = KJUR.asn1.x509.NoticeReference;\n this.params = null;\n this.tohex = function () {\n var f = [];\n if (this.params.noticeref !== undefined) {\n f.push(new b(this.params.noticeref));\n }\n if (this.params.exptext !== undefined) {\n f.push(new c(this.params.exptext));\n }\n var g = new a({\n array: f\n });\n return g.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.x509.UserNotice, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.NoticeReference = function (d) {\n KJUR.asn1.x509.NoticeReference.superclass.constructor.call(this, d);\n var a = KJUR.asn1.DERSequence,\n c = KJUR.asn1.DERInteger,\n b = KJUR.asn1.x509.DisplayText;\n this.params = null;\n this.tohex = function () {\n var f = [];\n if (this.params.org !== undefined) {\n f.push(new b(this.params.org));\n }\n if (this.params.noticenum !== undefined) {\n var h = [];\n var e = this.params.noticenum;\n for (var j = 0; j < e.length; j++) {\n h.push(new c(e[j]));\n }\n f.push(new a({\n array: h\n }));\n }\n if (f.length == 0) {\n throw new Error(\"parameter is empty\");\n }\n var g = new a({\n array: f\n });\n return g.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (d !== undefined) {\n this.params = d;\n }\n};\nextendClass(KJUR.asn1.x509.NoticeReference, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.DisplayText = function (a) {\n KJUR.asn1.x509.DisplayText.superclass.constructor.call(this, a);\n this.hT = \"0c\";\n if (a !== undefined) {\n if (a.type === \"ia5\") {\n this.hT = \"16\";\n } else {\n if (a.type === \"vis\") {\n this.hT = \"1a\";\n } else {\n if (a.type === \"bmp\") {\n this.hT = \"1e\";\n }\n }\n }\n }\n};\nextendClass(KJUR.asn1.x509.DisplayText, KJUR.asn1.DERAbstractString);\nKJUR.asn1.x509.PolicyMappings = function (e) {\n KJUR.asn1.x509.PolicyMappings.superclass.constructor.call(this, e);\n var c = KJUR,\n b = c.asn1,\n d = b.x509,\n a = b.ASN1Util.newObject;\n this.params = null;\n this.getExtnValueHex = function () {\n var j = this.params;\n var f = [];\n for (var g = 0; g < j.array.length; g++) {\n var h = j.array[g];\n f.push({\n seq: [{\n oid: h[0]\n }, {\n oid: h[1]\n }]\n });\n }\n this.asn1ExtnValue = a({\n seq: f\n });\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.33\";\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.x509.PolicyMappings, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.PolicyConstraints = function (e) {\n KJUR.asn1.x509.PolicyConstraints.superclass.constructor.call(this, e);\n var c = KJUR,\n b = c.asn1,\n d = b.x509,\n a = b.ASN1Util.newObject;\n this.params = null;\n this.getExtnValueHex = function () {\n var g = this.params;\n var f = [];\n if (g.reqexp != undefined) {\n f.push({\n tag: {\n tagi: \"80\",\n obj: {\n \"int\": g.reqexp\n }\n }\n });\n }\n if (g.inhibit != undefined) {\n f.push({\n tag: {\n tagi: \"81\",\n obj: {\n \"int\": g.inhibit\n }\n }\n });\n }\n this.asn1ExtnValue = a({\n seq: f\n });\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.36\";\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.x509.PolicyConstraints, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.InhibitAnyPolicy = function (e) {\n KJUR.asn1.x509.InhibitAnyPolicy.superclass.constructor.call(this, e);\n var c = KJUR,\n b = c.asn1,\n d = b.x509,\n a = b.ASN1Util.newObject;\n this.params = null;\n this.getExtnValueHex = function () {\n this.asn1ExtnValue = a({\n \"int\": this.params.skip\n });\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.54\";\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.x509.InhibitAnyPolicy, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.NameConstraints = function (f) {\n KJUR.asn1.x509.NameConstraints.superclass.constructor.call(this, f);\n var c = KJUR,\n b = c.asn1,\n e = b.x509,\n a = b.ASN1Util.newObject,\n d = e.GeneralSubtree;\n this.params = null;\n this.getExtnValueHex = function () {\n var l = this.params;\n var g = [];\n if (l.permit != undefined && l.permit.length != undefined) {\n var k = [];\n for (var h = 0; h < l.permit.length; h++) {\n k.push(new d(l.permit[h]));\n }\n g.push({\n tag: {\n tagi: \"a0\",\n obj: {\n seq: k\n }\n }\n });\n }\n if (l.exclude != undefined && l.exclude.length != undefined) {\n var j = [];\n for (var h = 0; h < l.exclude.length; h++) {\n j.push(new d(l.exclude[h]));\n }\n g.push({\n tag: {\n tagi: \"a1\",\n obj: {\n seq: j\n }\n }\n });\n }\n this.asn1ExtnValue = a({\n seq: g\n });\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.30\";\n if (f !== undefined) {\n this.params = f;\n }\n};\nextendClass(KJUR.asn1.x509.NameConstraints, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.GeneralSubtree = function (e) {\n KJUR.asn1.x509.GeneralSubtree.superclass.constructor.call(this);\n var b = KJUR.asn1,\n d = b.x509,\n c = d.GeneralName,\n a = b.ASN1Util.newObject;\n this.params = null;\n this.setByParam = function (f) {\n this.params = f;\n };\n this.tohex = function () {\n var h = this.params;\n var f = [new c(h)];\n if (h.min != undefined) {\n f.push({\n tag: {\n tagi: \"80\",\n obj: {\n \"int\": h.min\n }\n }\n });\n }\n if (h.max != undefined) {\n f.push({\n tag: {\n tagi: \"81\",\n obj: {\n \"int\": h.max\n }\n }\n });\n }\n var g = a({\n seq: f\n });\n return g.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.x509.GeneralSubtree, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.ExtKeyUsage = function (c) {\n KJUR.asn1.x509.ExtKeyUsage.superclass.constructor.call(this, c);\n var b = KJUR,\n a = b.asn1;\n this.setPurposeArray = function (d) {\n this.asn1ExtnValue = new a.DERSequence();\n for (var e = 0; e < d.length; e++) {\n var f = new a.DERObjectIdentifier(d[e]);\n this.asn1ExtnValue.appendASN1Object(f);\n }\n };\n this.getExtnValueHex = function () {\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.37\";\n if (c !== undefined) {\n if (c.array !== undefined) {\n this.setPurposeArray(c.array);\n }\n }\n};\nextendClass(KJUR.asn1.x509.ExtKeyUsage, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.AuthorityKeyIdentifier = function (f) {\n KJUR.asn1.x509.AuthorityKeyIdentifier.superclass.constructor.call(this, f);\n var b = KJUR,\n a = b.asn1,\n d = a.DERTaggedObject,\n e = a.x509.GeneralNames,\n c = b.crypto.Util.isKey;\n this.asn1KID = null;\n this.asn1CertIssuer = null;\n this.asn1CertSN = null;\n this.getExtnValueHex = function () {\n var h = new Array();\n if (this.asn1KID) {\n h.push(new d({\n explicit: false,\n tag: \"80\",\n obj: this.asn1KID\n }));\n }\n if (this.asn1CertIssuer) {\n h.push(new d({\n explicit: false,\n tag: \"a1\",\n obj: new e([{\n dn: this.asn1CertIssuer\n }])\n }));\n }\n if (this.asn1CertSN) {\n h.push(new d({\n explicit: false,\n tag: \"82\",\n obj: this.asn1CertSN\n }));\n }\n var g = new a.DERSequence({\n array: h\n });\n this.asn1ExtnValue = g;\n return this.asn1ExtnValue.tohex();\n };\n this.setKIDByParam = function (i) {\n if (i.str !== undefined || i.hex !== undefined) {\n this.asn1KID = new KJUR.asn1.DEROctetString(i);\n } else {\n if (typeof i === \"object\" && KJUR.crypto.Util.isKey(i) || typeof i === \"string\" && i.indexOf(\"BEGIN \") != -1) {\n var h = i;\n if (typeof i === \"string\") {\n h = KEYUTIL.getKey(i);\n }\n var g = KEYUTIL.getKeyID(h);\n this.asn1KID = new KJUR.asn1.DEROctetString({\n hex: g\n });\n }\n }\n };\n this.setCertIssuerByParam = function (g) {\n if (g.str !== undefined || g.ldapstr !== undefined || g.hex !== undefined || g.certsubject !== undefined || g.certissuer !== undefined) {\n this.asn1CertIssuer = new KJUR.asn1.x509.X500Name(g);\n } else {\n if (typeof g === \"string\" && g.indexOf(\"BEGIN \") != -1 && g.indexOf(\"CERTIFICATE\") != -1) {\n this.asn1CertIssuer = new KJUR.asn1.x509.X500Name({\n certissuer: g\n });\n }\n }\n };\n this.setCertSNByParam = function (i) {\n if (i.str !== undefined || i.bigint !== undefined || i.hex !== undefined) {\n this.asn1CertSN = new KJUR.asn1.DERInteger(i);\n } else {\n if (typeof i === \"string\" && i.indexOf(\"BEGIN \") != -1 && i.indexOf(\"CERTIFICATE\")) {\n var g = new X509();\n g.readCertPEM(i);\n var h = g.getSerialNumberHex();\n this.asn1CertSN = new KJUR.asn1.DERInteger({\n hex: h\n });\n }\n }\n };\n this.oid = \"2.5.29.35\";\n if (f !== undefined) {\n if (f.kid !== undefined) {\n this.setKIDByParam(f.kid);\n }\n if (f.issuer !== undefined) {\n this.setCertIssuerByParam(f.issuer);\n }\n if (f.sn !== undefined) {\n this.setCertSNByParam(f.sn);\n }\n if (f.issuersn !== undefined && typeof f.issuersn === \"string\" && f.issuersn.indexOf(\"BEGIN \") != -1 && f.issuersn.indexOf(\"CERTIFICATE\")) {\n this.setCertSNByParam(f.issuersn);\n this.setCertIssuerByParam(f.issuersn);\n }\n }\n};\nextendClass(KJUR.asn1.x509.AuthorityKeyIdentifier, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.SubjectKeyIdentifier = function (d) {\n KJUR.asn1.x509.SubjectKeyIdentifier.superclass.constructor.call(this, d);\n var b = KJUR,\n a = b.asn1,\n c = a.DEROctetString;\n this.asn1KID = null;\n this.getExtnValueHex = function () {\n this.asn1ExtnValue = this.asn1KID;\n return this.asn1ExtnValue.tohex();\n };\n this.setKIDByParam = function (g) {\n if (g.str !== undefined || g.hex !== undefined) {\n this.asn1KID = new c(g);\n } else {\n if (typeof g === \"object\" && KJUR.crypto.Util.isKey(g) || typeof g === \"string\" && g.indexOf(\"BEGIN\") != -1) {\n var f = g;\n if (typeof g === \"string\") {\n f = KEYUTIL.getKey(g);\n }\n var e = KEYUTIL.getKeyID(f);\n this.asn1KID = new KJUR.asn1.DEROctetString({\n hex: e\n });\n }\n }\n };\n this.oid = \"2.5.29.14\";\n if (d !== undefined) {\n if (d.kid !== undefined) {\n this.setKIDByParam(d.kid);\n }\n }\n};\nextendClass(KJUR.asn1.x509.SubjectKeyIdentifier, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.AuthorityInfoAccess = function (a) {\n KJUR.asn1.x509.AuthorityInfoAccess.superclass.constructor.call(this, a);\n this.setAccessDescriptionArray = function (k) {\n var d = new Array(),\n b = KJUR,\n g = b.asn1,\n c = g.DERSequence,\n j = g.DERObjectIdentifier,\n l = g.x509.GeneralName;\n for (var f = 0; f < k.length; f++) {\n var e;\n var h = k[f];\n if (h.ocsp !== undefined) {\n e = new c({\n array: [new j({\n oid: \"1.3.6.1.5.5.7.48.1\"\n }), new l({\n uri: h.ocsp\n })]\n });\n } else {\n if (h.caissuer !== undefined) {\n e = new c({\n array: [new j({\n oid: \"1.3.6.1.5.5.7.48.2\"\n }), new l({\n uri: h.caissuer\n })]\n });\n } else {\n throw new Error(\"unknown AccessMethod parameter: \" + JSON.stringify(h));\n }\n }\n d.push(e);\n }\n this.asn1ExtnValue = new c({\n array: d\n });\n };\n this.getExtnValueHex = function () {\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"1.3.6.1.5.5.7.1.1\";\n if (a !== undefined) {\n if (a.array !== undefined) {\n this.setAccessDescriptionArray(a.array);\n }\n }\n};\nextendClass(KJUR.asn1.x509.AuthorityInfoAccess, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.SubjectAltName = function (a) {\n KJUR.asn1.x509.SubjectAltName.superclass.constructor.call(this, a);\n this.setNameArray = function (b) {\n this.asn1ExtnValue = new KJUR.asn1.x509.GeneralNames(b);\n };\n this.getExtnValueHex = function () {\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.17\";\n if (a !== undefined) {\n if (a.array !== undefined) {\n this.setNameArray(a.array);\n }\n }\n};\nextendClass(KJUR.asn1.x509.SubjectAltName, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.IssuerAltName = function (a) {\n KJUR.asn1.x509.IssuerAltName.superclass.constructor.call(this, a);\n this.setNameArray = function (b) {\n this.asn1ExtnValue = new KJUR.asn1.x509.GeneralNames(b);\n };\n this.getExtnValueHex = function () {\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.18\";\n if (a !== undefined) {\n if (a.array !== undefined) {\n this.setNameArray(a.array);\n }\n }\n};\nextendClass(KJUR.asn1.x509.IssuerAltName, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.SubjectDirectoryAttributes = function (e) {\n KJUR.asn1.x509.SubjectDirectoryAttributes.superclass.constructor.call(this, e);\n var c = KJUR.asn1,\n a = c.DERSequence,\n b = c.ASN1Util.newObject,\n d = c.x509.OID.name2oid;\n this.params = null;\n this.getExtnValueHex = function () {\n var f = [];\n for (var j = 0; j < this.params.array.length; j++) {\n var l = this.params.array[j];\n if (l.attr != undefined && l.array != undefined) {\n var k = {\n seq: [{\n oid: l.attr\n }, {\n set: l.array\n }]\n };\n f.push(b(k));\n continue;\n }\n var h = {\n seq: [{\n oid: \"1.2.3.4\"\n }, {\n set: [{\n utf8str: \"DE\"\n }]\n }]\n };\n if (l.attr == \"dateOfBirth\") {\n h.seq[0].oid = d(l.attr);\n h.seq[1].set[0] = {\n gentime: l.str\n };\n } else {\n if (l.attr == \"placeOfBirth\") {\n h.seq[0].oid = d(l.attr);\n h.seq[1].set[0] = {\n utf8str: l.str\n };\n } else {\n if (l.attr == \"gender\") {\n h.seq[0].oid = d(l.attr);\n h.seq[1].set[0] = {\n prnstr: l.str\n };\n } else {\n if (l.attr == \"countryOfCitizenship\") {\n h.seq[0].oid = d(l.attr);\n h.seq[1].set[0] = {\n prnstr: l.str\n };\n } else {\n if (l.attr == \"countryOfResidence\") {\n h.seq[0].oid = d(l.attr);\n h.seq[1].set[0] = {\n prnstr: l.str\n };\n } else {\n throw new Error(\"unsupported attribute: \" + l.attr);\n }\n }\n }\n }\n }\n f.push(new b(h));\n }\n var g = new a({\n array: f\n });\n this.asn1ExtnValue = g;\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.9\";\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.x509.SubjectDirectoryAttributes, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.PrivateExtension = function (f) {\n KJUR.asn1.x509.PrivateExtension.superclass.constructor.call(this, f);\n var c = KJUR,\n e = c.lang.String.isHex,\n b = c.asn1,\n d = b.x509.OID.name2oid,\n a = b.ASN1Util.newObject;\n this.params = null;\n this.setByParam = function (g) {\n this.oid = d(g.extname);\n this.params = g;\n };\n this.getExtnValueHex = function () {\n if (this.params.extname == undefined || this.params.extn == undefined) {\n throw new Error(\"extname or extnhex not specified\");\n }\n var h = this.params.extn;\n if (typeof h == \"string\" && e(h)) {\n return h;\n } else {\n if (typeof h == \"object\") {\n try {\n return a(h).tohex();\n } catch (g) {}\n }\n }\n throw new Error(\"unsupported extn value\");\n };\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.x509.PrivateExtension, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.CRL = function (g) {\n KJUR.asn1.x509.CRL.superclass.constructor.call(this);\n var c = KJUR,\n b = c.asn1,\n a = b.DERSequence,\n e = b.DERBitString,\n f = b.x509,\n d = f.AlgorithmIdentifier,\n h = f.TBSCertList;\n this.params = undefined;\n this.setByParam = function (i) {\n this.params = i;\n };\n this.sign = function () {\n var j = new h(this.params).tohex();\n var k = new KJUR.crypto.Signature({\n alg: this.params.sigalg\n });\n k.init(this.params.cakey);\n k.updateHex(j);\n var i = k.sign();\n this.params.sighex = i;\n };\n this.getPEM = function () {\n return hextopem(this.tohex(), \"X509 CRL\");\n };\n this.tohex = function () {\n var k = this.params;\n if (k.tbsobj == undefined) {\n k.tbsobj = new h(k);\n }\n if (k.sighex == undefined && k.cakey != undefined) {\n this.sign();\n }\n if (k.sighex == undefined) {\n throw new Error(\"sighex or cakey parameter not defined\");\n }\n var i = [];\n i.push(k.tbsobj);\n i.push(new d({\n name: k.sigalg\n }));\n i.push(new e({\n hex: \"00\" + k.sighex\n }));\n var j = new a({\n array: i\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.params = g;\n }\n};\nextendClass(KJUR.asn1.x509.CRL, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.TBSCertList = function (f) {\n KJUR.asn1.x509.TBSCertList.superclass.constructor.call(this);\n var b = KJUR,\n i = b.asn1,\n h = i.DERInteger,\n g = i.DERSequence,\n c = i.DERTaggedObject,\n k = i.DERObjectIdentifier,\n d = i.x509,\n l = d.AlgorithmIdentifier,\n e = d.Time,\n j = d.Extensions,\n a = d.X500Name;\n this.params = null;\n this.setByParam = function (m) {\n this.params = m;\n };\n this.getRevCertSequence = function () {\n var m = [];\n var n = this.params.revcert;\n for (var o = 0; o < n.length; o++) {\n var p = [new h(n[o].sn), new e(n[o].date)];\n if (n[o].ext != undefined) {\n p.push(new j(n[o].ext));\n }\n m.push(new g({\n array: p\n }));\n }\n return new g({\n array: m\n });\n };\n this.tohex = function () {\n var n = [];\n var r = this.params;\n if (r.version != undefined) {\n var m = r.version - 1;\n var p = new h({\n \"int\": m\n });\n n.push(p);\n }\n n.push(new l({\n name: r.sigalg\n }));\n n.push(new a(r.issuer));\n n.push(new e(r.thisupdate));\n if (r.nextupdate != undefined) {\n n.push(new e(r.nextupdate));\n }\n if (r.revcert != undefined) {\n n.push(this.getRevCertSequence());\n }\n if (r.ext != undefined) {\n var q = new j(r.ext);\n n.push(new c({\n tag: \"a0\",\n explicit: true,\n obj: q\n }));\n }\n var o = new g({\n array: n\n });\n return o.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f !== undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.x509.TBSCertList, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.CRLEntry = function (e) {\n KJUR.asn1.x509.CRLEntry.superclass.constructor.call(this);\n var d = null,\n c = null,\n b = KJUR,\n a = b.asn1;\n this.setCertSerial = function (f) {\n this.sn = new a.DERInteger(f);\n };\n this.setRevocationDate = function (f) {\n this.time = new a.x509.Time(f);\n };\n this.tohex = function () {\n var f = new a.DERSequence({\n array: [this.sn, this.time]\n });\n this.TLV = f.tohex();\n return this.TLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n if (e.time !== undefined) {\n this.setRevocationDate(e.time);\n }\n if (e.sn !== undefined) {\n this.setCertSerial(e.sn);\n }\n }\n};\nextendClass(KJUR.asn1.x509.CRLEntry, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.CRLNumber = function (a) {\n KJUR.asn1.x509.CRLNumber.superclass.constructor.call(this, a);\n this.params = undefined;\n this.getExtnValueHex = function () {\n this.asn1ExtnValue = new KJUR.asn1.DERInteger(this.params.num);\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.20\";\n if (a != undefined) {\n this.params = a;\n }\n};\nextendClass(KJUR.asn1.x509.CRLNumber, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.CRLReason = function (a) {\n KJUR.asn1.x509.CRLReason.superclass.constructor.call(this, a);\n this.params = undefined;\n this.getExtnValueHex = function () {\n this.asn1ExtnValue = new KJUR.asn1.DEREnumerated(this.params.code);\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"2.5.29.21\";\n if (a != undefined) {\n this.params = a;\n }\n};\nextendClass(KJUR.asn1.x509.CRLReason, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.OCSPNonce = function (a) {\n KJUR.asn1.x509.OCSPNonce.superclass.constructor.call(this, a);\n this.params = undefined;\n this.getExtnValueHex = function () {\n this.asn1ExtnValue = new KJUR.asn1.DEROctetString(this.params);\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"1.3.6.1.5.5.7.48.1.2\";\n if (a != undefined) {\n this.params = a;\n }\n};\nextendClass(KJUR.asn1.x509.OCSPNonce, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.OCSPNoCheck = function (a) {\n KJUR.asn1.x509.OCSPNoCheck.superclass.constructor.call(this, a);\n this.params = undefined;\n this.getExtnValueHex = function () {\n this.asn1ExtnValue = new KJUR.asn1.DERNull();\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"1.3.6.1.5.5.7.48.1.5\";\n if (a != undefined) {\n this.params = a;\n }\n};\nextendClass(KJUR.asn1.x509.OCSPNoCheck, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.AdobeTimeStamp = function (g) {\n KJUR.asn1.x509.AdobeTimeStamp.superclass.constructor.call(this, g);\n var c = KJUR,\n b = c.asn1,\n f = b.DERInteger,\n d = b.DERBoolean,\n a = b.DERSequence,\n e = b.x509.GeneralName;\n this.params = null;\n this.getExtnValueHex = function () {\n var i = this.params;\n var h = [new f(1)];\n h.push(new e({\n uri: i.uri\n }));\n if (i.reqauth != undefined) {\n h.push(new d(i.reqauth));\n }\n this.asn1ExtnValue = new a({\n array: h\n });\n return this.asn1ExtnValue.tohex();\n };\n this.oid = \"1.2.840.113583.1.1.9.1\";\n if (g !== undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.x509.AdobeTimeStamp, KJUR.asn1.x509.Extension);\nKJUR.asn1.x509.X500Name = function (f) {\n KJUR.asn1.x509.X500Name.superclass.constructor.call(this);\n this.asn1Array = [];\n this.paramArray = [];\n this.sRule = \"utf8\";\n var c = KJUR,\n b = c.asn1,\n e = b.x509,\n d = e.RDN,\n a = pemtohex;\n this.setByString = function (g, l) {\n if (l !== undefined) {\n this.sRule = l;\n }\n var k = g.split(\"/\");\n k.shift();\n var j = [];\n for (var m = 0; m < k.length; m++) {\n if (k[m].match(/^[^=]+=.+$/)) {\n j.push(k[m]);\n } else {\n var h = j.length - 1;\n j[h] = j[h] + \"/\" + k[m];\n }\n }\n for (var m = 0; m < j.length; m++) {\n this.asn1Array.push(new d({\n str: j[m],\n rule: this.sRule\n }));\n }\n };\n this.setByLdapString = function (g, h) {\n if (h !== undefined) {\n this.sRule = h;\n }\n var i = e.X500Name.ldapToCompat(g);\n this.setByString(i, h);\n };\n this.setByObject = function (j, i) {\n if (i !== undefined) {\n this.sRule = i;\n }\n for (var g in j) {\n if (j.hasOwnProperty(g)) {\n var h = new d({\n str: g + \"=\" + j[g],\n rule: this.sRule\n });\n this.asn1Array ? this.asn1Array.push(h) : this.asn1Array = [h];\n }\n }\n };\n this.setByParam = function (h) {\n if (h.rule !== undefined) {\n this.sRule = h.rule;\n }\n if (h.array !== undefined) {\n this.paramArray = h.array;\n } else {\n if (h.str !== undefined) {\n this.setByString(h.str);\n } else {\n if (h.ldapstr !== undefined) {\n this.setByLdapString(h.ldapstr);\n } else {\n if (h.hex !== undefined) {\n this.hTLV = h.hex;\n } else {\n if (h.certissuer !== undefined) {\n var g = new X509();\n g.readCertPEM(h.certissuer);\n this.hTLV = g.getIssuerHex();\n } else {\n if (h.certsubject !== undefined) {\n var g = new X509();\n g.readCertPEM(h.certsubject);\n this.hTLV = g.getSubjectHex();\n } else {\n if (typeof h === \"object\" && h.certsubject === undefined && h.certissuer === undefined) {\n this.setByObject(h);\n }\n }\n }\n }\n }\n }\n }\n };\n this.tohex = function () {\n if (typeof this.hTLV == \"string\") {\n return this.hTLV;\n }\n if (this.asn1Array.length == 0 && this.paramArray.length > 0) {\n for (var g = 0; g < this.paramArray.length; g++) {\n var k = {\n array: this.paramArray[g]\n };\n if (this.sRule != \"utf8\") {\n k.rule = this.sRule;\n }\n var h = new d(k);\n this.asn1Array.push(h);\n }\n }\n var j = new b.DERSequence({\n array: this.asn1Array\n });\n this.hTLV = j.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f !== undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.x509.X500Name, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.X500Name.compatToLDAP = function (d) {\n if (d.substr(0, 1) !== \"/\") {\n throw \"malformed input\";\n }\n var b = \"\";\n d = d.substr(1);\n var c = d.split(\"/\");\n c.reverse();\n c = c.map(function (a) {\n return a.replace(/,/, \"\\\\,\");\n });\n return c.join(\",\");\n};\nKJUR.asn1.x509.X500Name.onelineToLDAP = function (a) {\n return KJUR.asn1.x509.X500Name.compatToLDAP(a);\n};\nKJUR.asn1.x509.X500Name.ldapToCompat = function (g) {\n var c = g.split(\",\");\n var e = false;\n var b = [];\n for (var f = 0; c.length > 0; f++) {\n var h = c.shift();\n if (e === true) {\n var d = b.pop();\n var j = (d + \",\" + h).replace(/\\\\,/g, \",\");\n b.push(j);\n e = false;\n } else {\n b.push(h);\n }\n if (h.substr(-1, 1) === \"\\\\\") {\n e = true;\n }\n }\n b = b.map(function (a) {\n return a.replace(\"/\", \"\\\\/\");\n });\n b.reverse();\n return \"/\" + b.join(\"/\");\n};\nKJUR.asn1.x509.X500Name.ldapToOneline = function (a) {\n return KJUR.asn1.x509.X500Name.ldapToCompat(a);\n};\nKJUR.asn1.x509.RDN = function (b) {\n KJUR.asn1.x509.RDN.superclass.constructor.call(this);\n this.asn1Array = [];\n this.paramArray = [];\n this.sRule = \"utf8\";\n var a = KJUR.asn1.x509.AttributeTypeAndValue;\n this.setByParam = function (c) {\n if (c.rule !== undefined) {\n this.sRule = c.rule;\n }\n if (c.str !== undefined) {\n this.addByMultiValuedString(c.str);\n }\n if (c.array !== undefined) {\n this.paramArray = c.array;\n }\n };\n this.addByString = function (c) {\n this.asn1Array.push(new KJUR.asn1.x509.AttributeTypeAndValue({\n str: c,\n rule: this.sRule\n }));\n };\n this.addByMultiValuedString = function (e) {\n var c = KJUR.asn1.x509.RDN.parseString(e);\n for (var d = 0; d < c.length; d++) {\n this.addByString(c[d]);\n }\n };\n this.tohex = function () {\n if (this.asn1Array.length == 0 && this.paramArray.length > 0) {\n for (var d = 0; d < this.paramArray.length; d++) {\n var f = this.paramArray[d];\n if (f.rule !== undefined && this.sRule != \"utf8\") {\n f.rule = this.sRule;\n }\n var c = new a(f);\n this.asn1Array.push(c);\n }\n }\n var e = new KJUR.asn1.DERSet({\n array: this.asn1Array\n });\n this.TLV = e.tohex();\n return this.TLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (b !== undefined) {\n this.setByParam(b);\n }\n};\nextendClass(KJUR.asn1.x509.RDN, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.RDN.parseString = function (m) {\n var j = m.split(/\\+/);\n var h = false;\n var c = [];\n for (var g = 0; j.length > 0; g++) {\n var k = j.shift();\n if (h === true) {\n var f = c.pop();\n var d = (f + \"+\" + k).replace(/\\\\\\+/g, \"+\");\n c.push(d);\n h = false;\n } else {\n c.push(k);\n }\n if (k.substr(-1, 1) === \"\\\\\") {\n h = true;\n }\n }\n var l = false;\n var b = [];\n for (var g = 0; c.length > 0; g++) {\n var k = c.shift();\n if (l === true) {\n var e = b.pop();\n if (k.match(/\"$/)) {\n var d = (e + \"+\" + k).replace(/^([^=]+)=\"(.*)\"$/, \"$1=$2\");\n b.push(d);\n l = false;\n } else {\n b.push(e + \"+\" + k);\n }\n } else {\n b.push(k);\n }\n if (k.match(/^[^=]+=\"/)) {\n l = true;\n }\n }\n return b;\n};\nKJUR.asn1.x509.AttributeTypeAndValue = function (c) {\n KJUR.asn1.x509.AttributeTypeAndValue.superclass.constructor.call(this);\n this.sRule = \"utf8\";\n this.sType = null;\n this.sValue = null;\n this.dsType = null;\n var a = KJUR,\n g = a.asn1,\n d = g.DERSequence,\n l = g.DERUTF8String,\n i = g.DERPrintableString,\n h = g.DERTeletexString,\n b = g.DERIA5String,\n e = g.DERVisibleString,\n k = g.DERBMPString,\n f = a.lang.String.isMail,\n j = a.lang.String.isPrintable;\n this.setByParam = function (o) {\n if (o.rule !== undefined) {\n this.sRule = o.rule;\n }\n if (o.ds !== undefined) {\n this.dsType = o.ds;\n }\n if (o.value === undefined && o.str !== undefined) {\n var n = o.str;\n var m = n.match(/^([^=]+)=(.+)$/);\n if (m) {\n this.sType = m[1];\n this.sValue = m[2];\n } else {\n throw new Error(\"malformed attrTypeAndValueStr: \" + attrTypeAndValueStr);\n }\n } else {\n this.sType = o.type;\n this.sValue = o.value;\n }\n };\n this.setByString = function (n, o) {\n if (o !== undefined) {\n this.sRule = o;\n }\n var m = n.match(/^([^=]+)=(.+)$/);\n if (m) {\n this.setByAttrTypeAndValueStr(m[1], m[2]);\n } else {\n throw new Error(\"malformed attrTypeAndValueStr: \" + attrTypeAndValueStr);\n }\n };\n this._getDsType = function () {\n var o = this.sType;\n var n = this.sValue;\n var m = this.sRule;\n if (m === \"prn\") {\n if (o == \"CN\" && f(n)) {\n return \"ia5\";\n }\n if (j(n)) {\n return \"prn\";\n }\n return \"utf8\";\n } else {\n if (m === \"utf8\") {\n if (o == \"CN\" && f(n)) {\n return \"ia5\";\n }\n if (o == \"C\") {\n return \"prn\";\n }\n return \"utf8\";\n }\n }\n return \"utf8\";\n };\n this.setByAttrTypeAndValueStr = function (o, n, m) {\n if (m !== undefined) {\n this.sRule = m;\n }\n this.sType = o;\n this.sValue = n;\n };\n this.getValueObj = function (n, m) {\n if (n == \"utf8\") {\n return new l({\n str: m\n });\n }\n if (n == \"prn\") {\n return new i({\n str: m\n });\n }\n if (n == \"tel\") {\n return new h({\n str: m\n });\n }\n if (n == \"ia5\") {\n return new b({\n str: m\n });\n }\n if (n == \"vis\") {\n return new e({\n str: m\n });\n }\n if (n == \"bmp\") {\n return new k({\n str: m\n });\n }\n throw new Error(\"unsupported directory string type: type=\" + n + \" value=\" + m);\n };\n this.tohex = function () {\n if (this.dsType == null) {\n this.dsType = this._getDsType();\n }\n var n = KJUR.asn1.x509.OID.atype2obj(this.sType);\n var m = this.getValueObj(this.dsType, this.sValue);\n var p = new d({\n array: [n, m]\n });\n this.TLV = p.tohex();\n return this.TLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (c !== undefined) {\n this.setByParam(c);\n }\n};\nextendClass(KJUR.asn1.x509.AttributeTypeAndValue, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.SubjectPublicKeyInfo = function (f) {\n KJUR.asn1.x509.SubjectPublicKeyInfo.superclass.constructor.call(this);\n var l = null,\n k = null,\n a = KJUR,\n j = a.asn1,\n i = j.DERInteger,\n b = j.DERBitString,\n m = j.DERObjectIdentifier,\n e = j.DERSequence,\n h = j.ASN1Util.newObject,\n d = j.x509,\n o = d.AlgorithmIdentifier,\n g = a.crypto,\n n = g.ECDSA,\n c = g.DSA;\n this.getASN1Object = function () {\n if (this.asn1AlgId == null || this.asn1SubjPKey == null) {\n throw \"algId and/or subjPubKey not set\";\n }\n var p = new e({\n array: [this.asn1AlgId, this.asn1SubjPKey]\n });\n return p;\n };\n this.tohex = function () {\n var p = this.getASN1Object();\n this.hTLV = p.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setPubKey = function (q) {\n try {\n if (q instanceof RSAKey) {\n var u = h({\n seq: [{\n \"int\": {\n bigint: q.n\n }\n }, {\n \"int\": {\n \"int\": q.e\n }\n }]\n });\n var s = u.tohex();\n this.asn1AlgId = new o({\n name: \"rsaEncryption\"\n });\n this.asn1SubjPKey = new b({\n hex: \"00\" + s\n });\n }\n } catch (p) {}\n try {\n if (q instanceof KJUR.crypto.ECDSA) {\n var r = new m({\n name: q.curveName\n });\n this.asn1AlgId = new o({\n name: \"ecPublicKey\",\n asn1params: r\n });\n this.asn1SubjPKey = new b({\n hex: \"00\" + q.pubKeyHex\n });\n }\n } catch (p) {}\n try {\n if (q instanceof KJUR.crypto.DSA) {\n var r = new h({\n seq: [{\n \"int\": {\n bigint: q.p\n }\n }, {\n \"int\": {\n bigint: q.q\n }\n }, {\n \"int\": {\n bigint: q.g\n }\n }]\n });\n this.asn1AlgId = new o({\n name: \"dsa\",\n asn1params: r\n });\n var t = new i({\n bigint: q.y\n });\n this.asn1SubjPKey = new b({\n hex: \"00\" + t.tohex()\n });\n }\n } catch (p) {}\n };\n if (f !== undefined) {\n this.setPubKey(f);\n }\n};\nextendClass(KJUR.asn1.x509.SubjectPublicKeyInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.Time = function (f) {\n KJUR.asn1.x509.Time.superclass.constructor.call(this);\n var e = null,\n a = null,\n d = KJUR,\n c = d.asn1,\n b = c.DERUTCTime,\n g = c.DERGeneralizedTime;\n this.params = null;\n this.type = null;\n this.setTimeParams = function (h) {\n this.timeParams = h;\n };\n this.setByParam = function (h) {\n this.params = h;\n };\n this.getType = function (h) {\n if (h.match(/^[0-9]{12}Z$/)) {\n return \"utc\";\n }\n if (h.match(/^[0-9]{14}Z$/)) {\n return \"gen\";\n }\n if (h.match(/^[0-9]{12}\\.[0-9]+Z$/)) {\n return \"utc\";\n }\n if (h.match(/^[0-9]{14}\\.[0-9]+Z$/)) {\n return \"gen\";\n }\n return null;\n };\n this.tohex = function () {\n var i = this.params;\n var h = null;\n if (typeof i == \"string\") {\n i = {\n str: i\n };\n }\n if (i != null && i.str && (i.type == null || i.type == undefined)) {\n i.type = this.getType(i.str);\n }\n if (i != null && i.str) {\n if (i.type == \"utc\") {\n h = new b(i.str);\n }\n if (i.type == \"gen\") {\n h = new g(i.str);\n }\n } else {\n if (this.type == \"gen\") {\n h = new g();\n } else {\n h = new b();\n }\n }\n if (h == null) {\n throw new Error(\"wrong setting for Time\");\n }\n this.TLV = h.tohex();\n return this.TLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nKJUR.asn1.x509.Time_bak = function (f) {\n KJUR.asn1.x509.Time_bak.superclass.constructor.call(this);\n var e = null,\n a = null,\n d = KJUR,\n c = d.asn1,\n b = c.DERUTCTime,\n g = c.DERGeneralizedTime;\n this.setTimeParams = function (h) {\n this.timeParams = h;\n };\n this.tohex = function () {\n var h = null;\n if (this.timeParams != null) {\n if (this.type == \"utc\") {\n h = new b(this.timeParams);\n } else {\n h = new g(this.timeParams);\n }\n } else {\n if (this.type == \"utc\") {\n h = new b();\n } else {\n h = new g();\n }\n }\n this.TLV = h.tohex();\n return this.TLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.type = \"utc\";\n if (f !== undefined) {\n if (f.type !== undefined) {\n this.type = f.type;\n } else {\n if (f.str !== undefined) {\n if (f.str.match(/^[0-9]{12}Z$/)) {\n this.type = \"utc\";\n }\n if (f.str.match(/^[0-9]{14}Z$/)) {\n this.type = \"gen\";\n }\n }\n }\n this.timeParams = f;\n }\n};\nextendClass(KJUR.asn1.x509.Time, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.AlgorithmIdentifier = function (e) {\n KJUR.asn1.x509.AlgorithmIdentifier.superclass.constructor.call(this);\n this.nameAlg = null;\n this.asn1Alg = null;\n this.asn1Params = null;\n this.paramEmpty = false;\n var b = KJUR,\n a = b.asn1,\n c = a.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV;\n this.tohex = function () {\n if (this.nameAlg === null && this.asn1Alg === null) {\n throw new Error(\"algorithm not specified\");\n }\n if (this.nameAlg !== null) {\n var f = null;\n for (var h in c) {\n if (h === this.nameAlg) {\n f = c[h];\n }\n }\n if (f !== null) {\n this.hTLV = f;\n return this.hTLV;\n }\n }\n if (this.nameAlg !== null && this.asn1Alg === null) {\n this.asn1Alg = a.x509.OID.name2obj(this.nameAlg);\n }\n var g = [this.asn1Alg];\n if (this.asn1Params !== null) {\n g.push(this.asn1Params);\n }\n var i = new a.DERSequence({\n array: g\n });\n this.hTLV = i.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n if (e.name !== undefined) {\n this.nameAlg = e.name;\n }\n if (e.asn1params !== undefined) {\n this.asn1Params = e.asn1params;\n }\n if (e.paramempty !== undefined) {\n this.paramEmpty = e.paramempty;\n }\n }\n if (this.asn1Params === null && this.paramEmpty === false && this.nameAlg !== null) {\n if (this.nameAlg.name !== undefined) {\n this.nameAlg = this.nameAlg.name;\n }\n var d = this.nameAlg.toLowerCase();\n if (d.substr(-7, 7) !== \"withdsa\" && d.substr(-9, 9) !== \"withecdsa\") {\n this.asn1Params = new a.DERNull();\n }\n }\n};\nextendClass(KJUR.asn1.x509.AlgorithmIdentifier, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV = {\n SHAwithRSAandMGF1: \"300d06092a864886f70d01010a3000\",\n SHA256withRSAandMGF1: \"303d06092a864886f70d01010a3030a00d300b0609608648016503040201a11a301806092a864886f70d010108300b0609608648016503040201a203020120\",\n SHA384withRSAandMGF1: \"303d06092a864886f70d01010a3030a00d300b0609608648016503040202a11a301806092a864886f70d010108300b0609608648016503040202a203020130\",\n SHA512withRSAandMGF1: \"303d06092a864886f70d01010a3030a00d300b0609608648016503040203a11a301806092a864886f70d010108300b0609608648016503040203a203020140\"\n};\nKJUR.asn1.x509.GeneralName = function (f) {\n KJUR.asn1.x509.GeneralName.superclass.constructor.call(this);\n var l = {\n rfc822: \"81\",\n dns: \"82\",\n dn: \"a4\",\n uri: \"86\",\n ip: \"87\",\n otherName: \"a0\"\n },\n b = KJUR,\n h = b.asn1,\n d = h.x509,\n a = d.X500Name,\n g = d.OtherName,\n e = h.DERIA5String,\n i = h.DERPrintableString,\n k = h.DEROctetString,\n c = h.DERTaggedObject,\n m = h.ASN1Object,\n j = Error;\n this.params = null;\n this.setByParam = function (n) {\n this.params = n;\n };\n this.tohex = function () {\n var p = this.params;\n var A, y, q;\n var y = false;\n if (p.other !== undefined) {\n A = \"a0\", q = new g(p.other);\n } else {\n if (p.rfc822 !== undefined) {\n A = \"81\";\n q = new e({\n str: p.rfc822\n });\n } else {\n if (p.dns !== undefined) {\n A = \"82\";\n q = new e({\n str: p.dns\n });\n } else {\n if (p.dn !== undefined) {\n A = \"a4\";\n y = true;\n if (typeof p.dn === \"string\") {\n q = new a({\n str: p.dn\n });\n } else {\n if (p.dn instanceof KJUR.asn1.x509.X500Name) {\n q = p.dn;\n } else {\n q = new a(p.dn);\n }\n }\n } else {\n if (p.ldapdn !== undefined) {\n A = \"a4\";\n y = true;\n q = new a({\n ldapstr: p.ldapdn\n });\n } else {\n if (p.certissuer !== undefined || p.certsubj !== undefined) {\n A = \"a4\";\n y = true;\n var n, o;\n var z = null;\n if (p.certsubj !== undefined) {\n n = false;\n o = p.certsubj;\n } else {\n n = true;\n o = p.certissuer;\n }\n if (o.match(/^[0-9A-Fa-f]+$/)) {\n z == o;\n }\n if (o.indexOf(\"-----BEGIN \") != -1) {\n z = pemtohex(o);\n }\n if (z == null) {\n throw new Error(\"certsubj/certissuer not cert\");\n }\n var w = new X509();\n w.hex = z;\n var s;\n if (n) {\n s = w.getIssuerHex();\n } else {\n s = w.getSubjectHex();\n }\n q = new m();\n q.hTLV = s;\n } else {\n if (p.uri !== undefined) {\n A = \"86\";\n q = new e({\n str: p.uri\n });\n } else {\n if (p.ip !== undefined) {\n A = \"87\";\n var v;\n var t = p.ip;\n try {\n if (t.match(/^[0-9a-f]+$/)) {\n var r = t.length;\n if (r == 8 || r == 16 || r == 32 || r == 64) {\n v = t;\n } else {\n throw \"err\";\n }\n } else {\n v = iptohex(t);\n }\n } catch (u) {\n throw new j(\"malformed IP address: \" + p.ip + \":\" + u.message);\n }\n q = new k({\n hex: v\n });\n } else {\n throw new j(\"improper params\");\n }\n }\n }\n }\n }\n }\n }\n }\n var B = new c({\n tag: A,\n explicit: y,\n obj: q\n });\n return B.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f !== undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.x509.GeneralName, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.GeneralNames = function (d) {\n KJUR.asn1.x509.GeneralNames.superclass.constructor.call(this);\n var a = null,\n c = KJUR,\n b = c.asn1;\n this.setByParamArray = function (g) {\n for (var e = 0; e < g.length; e++) {\n var f = new b.x509.GeneralName(g[e]);\n this.asn1Array.push(f);\n }\n };\n this.tohex = function () {\n var e = new b.DERSequence({\n array: this.asn1Array\n });\n return e.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.asn1Array = new Array();\n if (typeof d != \"undefined\") {\n this.setByParamArray(d);\n }\n};\nextendClass(KJUR.asn1.x509.GeneralNames, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.OtherName = function (g) {\n KJUR.asn1.x509.OtherName.superclass.constructor.call(this);\n var f = null,\n e = null,\n d = KJUR,\n c = d.asn1,\n h = c.DERObjectIdentifier,\n a = c.DERSequence,\n b = c.ASN1Util.newObject;\n this.params = null;\n this.setByParam = function (i) {\n this.params = i;\n };\n this.tohex = function () {\n var k = this.params;\n if (k.oid == undefined || k.value == undefined) {\n throw new Error(\"oid or value not specified\");\n }\n var l = new h({\n oid: k.oid\n });\n var i = b({\n tag: {\n tag: \"a0\",\n explicit: true,\n obj: k.value\n }\n });\n var j = new a({\n array: [l, i]\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g !== undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.x509.OtherName, KJUR.asn1.ASN1Object);\nKJUR.asn1.x509.OID = new function () {\n var a = KJUR.asn1.DERObjectIdentifier;\n this.name2oidList = {\n \"aes128-CBC\": \"2.16.840.1.101.3.4.1.2\",\n \"aes256-CBC\": \"2.16.840.1.101.3.4.1.42\",\n sha1: \"1.3.14.3.2.26\",\n sha256: \"2.16.840.1.101.3.4.2.1\",\n sha384: \"2.16.840.1.101.3.4.2.2\",\n sha512: \"2.16.840.1.101.3.4.2.3\",\n sha224: \"2.16.840.1.101.3.4.2.4\",\n md5: \"1.2.840.113549.2.5\",\n md2: \"1.3.14.7.2.2.1\",\n ripemd160: \"1.3.36.3.2.1\",\n hmacWithSHA1: \"1.2.840.113549.2.7\",\n hmacWithSHA224: \"1.2.840.113549.2.8\",\n hmacWithSHA256: \"1.2.840.113549.2.9\",\n hmacWithSHA384: \"1.2.840.113549.2.10\",\n hmacWithSHA512: \"1.2.840.113549.2.11\",\n MD2withRSA: \"1.2.840.113549.1.1.2\",\n MD4withRSA: \"1.2.840.113549.1.1.3\",\n MD5withRSA: \"1.2.840.113549.1.1.4\",\n SHA1withRSA: \"1.2.840.113549.1.1.5\",\n \"pkcs1-MGF\": \"1.2.840.113549.1.1.8\",\n rsaPSS: \"1.2.840.113549.1.1.10\",\n SHA224withRSA: \"1.2.840.113549.1.1.14\",\n SHA256withRSA: \"1.2.840.113549.1.1.11\",\n SHA384withRSA: \"1.2.840.113549.1.1.12\",\n SHA512withRSA: \"1.2.840.113549.1.1.13\",\n SHA1withECDSA: \"1.2.840.10045.4.1\",\n SHA224withECDSA: \"1.2.840.10045.4.3.1\",\n SHA256withECDSA: \"1.2.840.10045.4.3.2\",\n SHA384withECDSA: \"1.2.840.10045.4.3.3\",\n SHA512withECDSA: \"1.2.840.10045.4.3.4\",\n dsa: \"1.2.840.10040.4.1\",\n SHA1withDSA: \"1.2.840.10040.4.3\",\n SHA224withDSA: \"2.16.840.1.101.3.4.3.1\",\n SHA256withDSA: \"2.16.840.1.101.3.4.3.2\",\n rsaEncryption: \"1.2.840.113549.1.1.1\",\n commonName: \"2.5.4.3\",\n countryName: \"2.5.4.6\",\n localityName: \"2.5.4.7\",\n stateOrProvinceName: \"2.5.4.8\",\n streetAddress: \"2.5.4.9\",\n organizationName: \"2.5.4.10\",\n organizationalUnitName: \"2.5.4.11\",\n domainComponent: \"0.9.2342.19200300.100.1.25\",\n userId: \"0.9.2342.19200300.100.1.1\",\n surname: \"2.5.4.4\",\n givenName: \"2.5.4.42\",\n title: \"2.5.4.12\",\n distinguishedName: \"2.5.4.49\",\n emailAddress: \"1.2.840.113549.1.9.1\",\n description: \"2.5.4.13\",\n businessCategory: \"2.5.4.15\",\n postalCode: \"2.5.4.17\",\n uniqueIdentifier: \"2.5.4.45\",\n organizationIdentifier: \"2.5.4.97\",\n jurisdictionOfIncorporationL: \"1.3.6.1.4.1.311.60.2.1.1\",\n jurisdictionOfIncorporationSP: \"1.3.6.1.4.1.311.60.2.1.2\",\n jurisdictionOfIncorporationC: \"1.3.6.1.4.1.311.60.2.1.3\",\n subjectDirectoryAttributes: \"2.5.29.9\",\n subjectKeyIdentifier: \"2.5.29.14\",\n keyUsage: \"2.5.29.15\",\n subjectAltName: \"2.5.29.17\",\n issuerAltName: \"2.5.29.18\",\n basicConstraints: \"2.5.29.19\",\n cRLNumber: \"2.5.29.20\",\n cRLReason: \"2.5.29.21\",\n nameConstraints: \"2.5.29.30\",\n cRLDistributionPoints: \"2.5.29.31\",\n certificatePolicies: \"2.5.29.32\",\n anyPolicy: \"2.5.29.32.0\",\n policyMappings: \"2.5.29.33\",\n authorityKeyIdentifier: \"2.5.29.35\",\n policyConstraints: \"2.5.29.36\",\n extKeyUsage: \"2.5.29.37\",\n inhibitAnyPolicy: \"2.5.29.54\",\n authorityInfoAccess: \"1.3.6.1.5.5.7.1.1\",\n ocsp: \"1.3.6.1.5.5.7.48.1\",\n ocspBasic: \"1.3.6.1.5.5.7.48.1.1\",\n ocspNonce: \"1.3.6.1.5.5.7.48.1.2\",\n ocspNoCheck: \"1.3.6.1.5.5.7.48.1.5\",\n caIssuers: \"1.3.6.1.5.5.7.48.2\",\n anyExtendedKeyUsage: \"2.5.29.37.0\",\n serverAuth: \"1.3.6.1.5.5.7.3.1\",\n clientAuth: \"1.3.6.1.5.5.7.3.2\",\n codeSigning: \"1.3.6.1.5.5.7.3.3\",\n emailProtection: \"1.3.6.1.5.5.7.3.4\",\n timeStamping: \"1.3.6.1.5.5.7.3.8\",\n ocspSigning: \"1.3.6.1.5.5.7.3.9\",\n smtpUTF8Mailbox: \"1.3.6.1.5.5.7.8.9\",\n dateOfBirth: \"1.3.6.1.5.5.7.9.1\",\n placeOfBirth: \"1.3.6.1.5.5.7.9.2\",\n gender: \"1.3.6.1.5.5.7.9.3\",\n countryOfCitizenship: \"1.3.6.1.5.5.7.9.4\",\n countryOfResidence: \"1.3.6.1.5.5.7.9.5\",\n ecPublicKey: \"1.2.840.10045.2.1\",\n \"P-256\": \"1.2.840.10045.3.1.7\",\n secp256r1: \"1.2.840.10045.3.1.7\",\n secp256k1: \"1.3.132.0.10\",\n secp384r1: \"1.3.132.0.34\",\n secp521r1: \"1.3.132.0.35\",\n pkcs5PBES2: \"1.2.840.113549.1.5.13\",\n pkcs5PBKDF2: \"1.2.840.113549.1.5.12\",\n \"des-EDE3-CBC\": \"1.2.840.113549.3.7\",\n data: \"1.2.840.113549.1.7.1\",\n \"signed-data\": \"1.2.840.113549.1.7.2\",\n \"enveloped-data\": \"1.2.840.113549.1.7.3\",\n \"digested-data\": \"1.2.840.113549.1.7.5\",\n \"encrypted-data\": \"1.2.840.113549.1.7.6\",\n \"authenticated-data\": \"1.2.840.113549.1.9.16.1.2\",\n tstinfo: \"1.2.840.113549.1.9.16.1.4\",\n signingCertificate: \"1.2.840.113549.1.9.16.2.12\",\n timeStampToken: \"1.2.840.113549.1.9.16.2.14\",\n signaturePolicyIdentifier: \"1.2.840.113549.1.9.16.2.15\",\n etsArchiveTimeStamp: \"1.2.840.113549.1.9.16.2.27\",\n signingCertificateV2: \"1.2.840.113549.1.9.16.2.47\",\n etsArchiveTimeStampV2: \"1.2.840.113549.1.9.16.2.48\",\n extensionRequest: \"1.2.840.113549.1.9.14\",\n contentType: \"1.2.840.113549.1.9.3\",\n messageDigest: \"1.2.840.113549.1.9.4\",\n signingTime: \"1.2.840.113549.1.9.5\",\n counterSignature: \"1.2.840.113549.1.9.6\",\n archiveTimeStampV3: \"0.4.0.1733.2.4\",\n pdfRevocationInfoArchival: \"1.2.840.113583.1.1.8\",\n adobeTimeStamp: \"1.2.840.113583.1.1.9.1\",\n smimeMailboxLegacy: \"2.23.140.1.5.1.1\",\n smimeMailboxMulti: \"2.23.140.1.5.1.2\",\n smimeMailboxStrict: \"2.23.140.1.5.1.3\",\n smimeOrganizationLegacy: \"2.23.140.1.5.2.1\",\n smimeOrganizationMulti: \"2.23.140.1.5.2.2\",\n smimeOrganizationStrict: \"2.23.140.1.5.2.3\",\n smimeSponsorLegacy: \"2.23.140.1.5.3.1\",\n smimeSponsorMulti: \"2.23.140.1.5.3.2\",\n smimeSponsorStrict: \"2.23.140.1.5.3.3\",\n smimeIndividualLegacy: \"2.23.140.1.5.4.1\",\n smimeIndividualMulti: \"2.23.140.1.5.4.2\",\n smimeIndividualStrict: \"2.23.140.1.5.4.3\"\n };\n this.atype2oidList = {\n CN: \"2.5.4.3\",\n L: \"2.5.4.7\",\n ST: \"2.5.4.8\",\n O: \"2.5.4.10\",\n OU: \"2.5.4.11\",\n C: \"2.5.4.6\",\n STREET: \"2.5.4.9\",\n DC: \"0.9.2342.19200300.100.1.25\",\n UID: \"0.9.2342.19200300.100.1.1\",\n SN: \"2.5.4.4\",\n T: \"2.5.4.12\",\n GN: \"2.5.4.42\",\n DN: \"2.5.4.49\",\n E: \"1.2.840.113549.1.9.1\",\n description: \"2.5.4.13\",\n businessCategory: \"2.5.4.15\",\n postalCode: \"2.5.4.17\",\n serialNumber: \"2.5.4.5\",\n uniqueIdentifier: \"2.5.4.45\",\n organizationIdentifier: \"2.5.4.97\",\n jurisdictionOfIncorporationL: \"1.3.6.1.4.1.311.60.2.1.1\",\n jurisdictionOfIncorporationSP: \"1.3.6.1.4.1.311.60.2.1.2\",\n jurisdictionOfIncorporationC: \"1.3.6.1.4.1.311.60.2.1.3\"\n };\n this.objCache = {};\n this.name2obj = function (b) {\n if (typeof this.objCache[b] != \"undefined\") {\n return this.objCache[b];\n }\n if (typeof this.name2oidList[b] == \"undefined\") {\n throw \"Name of ObjectIdentifier not defined: \" + b;\n }\n var c = this.name2oidList[b];\n var d = new a({\n oid: c\n });\n this.objCache[b] = d;\n return d;\n };\n this.atype2obj = function (b) {\n if (this.objCache[b] !== undefined) {\n return this.objCache[b];\n }\n var c;\n if (b.match(/^\\d+\\.\\d+\\.[0-9.]+$/)) {\n c = b;\n } else {\n if (this.atype2oidList[b] !== undefined) {\n c = this.atype2oidList[b];\n } else {\n if (this.name2oidList[b] !== undefined) {\n c = this.name2oidList[b];\n } else {\n throw new Error(\"AttributeType name undefined: \" + b);\n }\n }\n }\n var d = new a({\n oid: c\n });\n this.objCache[b] = d;\n return d;\n };\n this.registerOIDs = function (b) {\n if (!this.checkOIDs(b)) {\n return;\n }\n for (var c in b) {\n this.name2oidList[c] = b[c];\n }\n };\n this.checkOIDs = function (b) {\n try {\n var d = Object.keys(b);\n if (d.length == 0) {\n return false;\n }\n d.map(function (g, e, h) {\n var f = this[g];\n if (!f.match(/^[0-2]\\.[0-9.]+$/)) {\n throw new Error(\"value is not OID\");\n }\n }, b);\n return true;\n } catch (c) {\n return false;\n }\n };\n}();\nKJUR.asn1.x509.OID.oid2name = function (b) {\n var c = KJUR.asn1.x509.OID.name2oidList;\n for (var a in c) {\n if (c[a] == b) {\n return a;\n }\n }\n return \"\";\n};\nKJUR.asn1.x509.OID.oid2atype = function (b) {\n var c = KJUR.asn1.x509.OID.atype2oidList;\n for (var a in c) {\n if (c[a] == b) {\n return a;\n }\n }\n return b;\n};\nKJUR.asn1.x509.OID.name2oid = function (a) {\n if (a.match(/^[0-9.]+$/)) {\n return a;\n }\n var b = KJUR.asn1.x509.OID.name2oidList;\n if (b[a] === undefined) {\n return \"\";\n }\n return b[a];\n};\nKJUR.asn1.x509.X509Util = {};\nKJUR.asn1.x509.X509Util.newCertPEM = function (e) {\n var d = KJUR.asn1.x509,\n b = d.TBSCertificate,\n a = d.Certificate;\n var c = new a(e);\n return c.getPEM();\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) {\n KJUR.asn1 = {};\n}\nif (typeof KJUR.asn1.cms == \"undefined\" || !KJUR.asn1.cms) {\n KJUR.asn1.cms = {};\n}\nKJUR.asn1.cms.Attribute = function (f) {\n var e = Error,\n d = KJUR,\n c = d.asn1,\n b = c.DERSequence,\n a = c.DERSet,\n g = c.DERObjectIdentifier;\n this.params = null;\n this.typeOid = null;\n this.setByParam = function (h) {\n this.params = h;\n };\n this.getValueArray = function () {\n throw new e(\"not yet implemented abstract\");\n };\n this.tohex = function () {\n var j = new g({\n oid: this.typeOid\n });\n var h = new a({\n array: this.getValueArray()\n });\n var i = new b({\n array: [j, h]\n });\n return i.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n};\nextendClass(KJUR.asn1.cms.Attribute, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.ContentType = function (c) {\n var b = KJUR,\n a = b.asn1;\n a.cms.ContentType.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.3\";\n this.getValueArray = function () {\n var d = new a.DERObjectIdentifier(this.params.type);\n return [d];\n };\n if (c != undefined) {\n this.setByParam(c);\n }\n};\nextendClass(KJUR.asn1.cms.ContentType, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cms.MessageDigest = function (e) {\n var b = KJUR,\n a = b.asn1,\n c = a.DEROctetString,\n d = a.cms;\n d.MessageDigest.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.4\";\n this.getValueArray = function () {\n var f = new c(this.params);\n return [f];\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cms.MessageDigest, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cms.SigningTime = function (c) {\n var b = KJUR,\n a = b.asn1;\n a.cms.SigningTime.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.5\";\n this.getValueArray = function () {\n var d = new a.x509.Time(this.params);\n return [d];\n };\n if (c != undefined) {\n this.setByParam(c);\n }\n};\nextendClass(KJUR.asn1.cms.SigningTime, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cms.SigningCertificate = function (h) {\n var e = Error,\n d = KJUR,\n c = d.asn1,\n b = c.DERSequence,\n g = c.cms,\n a = g.ESSCertID,\n f = d.crypto;\n g.SigningCertificate.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.16.2.12\";\n this.getValueArray = function () {\n if (this.params == null || this.params == undefined || this.params.array == undefined) {\n throw new e(\"parameter 'array' not specified\");\n }\n var o = this.params.array;\n var k = [];\n for (var l = 0; l < o.length; l++) {\n var n = o[l];\n if (h.hasis == false && typeof n == \"string\" && (n.indexOf(\"-----BEGIN\") != -1 || ASN1HEX.isASN1HEX(n))) {\n n = {\n cert: n\n };\n }\n if (n.hasis != false && h.hasis == false) {\n n.hasis = false;\n }\n k.push(new a(n));\n }\n var j = new b({\n array: k\n });\n var m = new b({\n array: [j]\n });\n return [m];\n };\n if (h != undefined) {\n this.setByParam(h);\n }\n};\nextendClass(KJUR.asn1.cms.SigningCertificate, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cms.ESSCertID = function (g) {\n KJUR.asn1.cms.ESSCertID.superclass.constructor.call(this);\n var d = Error,\n c = KJUR,\n b = c.asn1,\n f = b.DEROctetString,\n a = b.DERSequence,\n e = b.cms.IssuerSerial;\n this.params = null;\n this.getCertHash = function (k, h) {\n if (k.hash != undefined) {\n return k.hash;\n }\n if (typeof k == \"string\" && k.indexOf(\"-----BEGIN\") == -1 && !ASN1HEX.isASN1HEX(k)) {\n return k;\n }\n var i;\n if (typeof k == \"string\") {\n i = k;\n } else {\n if (k.cert != undefined) {\n i = k.cert;\n } else {\n throw new d(\"hash nor cert unspecified\");\n }\n }\n var j;\n if (i.indexOf(\"-----BEGIN\") != -1) {\n j = pemtohex(i);\n } else {\n j = i;\n }\n if (typeof k == \"string\") {\n if (k.indexOf(\"-----BEGIN\") != -1) {\n j = pemtohex(k);\n } else {\n if (ASN1HEX.isASN1HEX(k)) {\n j = k;\n }\n }\n }\n var l;\n if (k.alg != undefined) {\n l = k.alg;\n } else {\n if (h != undefined) {\n l = h;\n } else {\n throw new d(\"hash alg unspecified\");\n }\n }\n return c.crypto.Util.hashHex(j, l);\n };\n this.tohex = function () {\n var k = this.params;\n var j = this.getCertHash(k, \"sha1\");\n var h = [];\n h.push(new f({\n hex: j\n }));\n if (typeof k == \"string\" && k.indexOf(\"-----BEGIN\") != -1 || k.cert != undefined && k.hasis != false || k.issuer != undefined && k.serial != undefined) {\n h.push(new e(k));\n }\n var i = new a({\n array: h\n });\n return i.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.cms.ESSCertID, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.SigningCertificateV2 = function (d) {\n var h = Error,\n a = KJUR,\n g = a.asn1,\n e = g.DERSequence,\n b = g.x509,\n i = g.cms,\n c = i.ESSCertIDv2,\n f = a.crypto;\n i.SigningCertificateV2.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.16.2.47\";\n this.getValueArray = function () {\n if (this.params == null || this.params == undefined || this.params.array == undefined) {\n throw new h(\"parameter 'array' not specified\");\n }\n var o = this.params.array;\n var l = [];\n for (var m = 0; m < o.length; m++) {\n var n = o[m];\n if ((d.alg != undefined || d.hasis == false) && typeof n == \"string\" && (n.indexOf(\"-----BEGIN\") != -1 || ASN1HEX.isASN1HEX(n))) {\n n = {\n cert: n\n };\n }\n if (n.alg == undefined && d.alg != undefined) {\n n.alg = d.alg;\n }\n if (n.hasis != false && d.hasis == false) {\n n.hasis = false;\n }\n l.push(new c(n));\n }\n var k = new e({\n array: l\n });\n var j = new e({\n array: [k]\n });\n return [j];\n };\n if (d != undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.cms.SigningCertificateV2, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cms.ESSCertIDv2 = function (h) {\n KJUR.asn1.cms.ESSCertIDv2.superclass.constructor.call(this);\n var d = Error,\n c = KJUR,\n b = c.asn1,\n f = b.DEROctetString,\n a = b.DERSequence,\n e = b.cms.IssuerSerial,\n g = b.x509.AlgorithmIdentifier;\n this.params = null;\n this.tohex = function () {\n var l = this.params;\n var k = this.getCertHash(l, \"sha256\");\n var i = [];\n if (l.alg != undefined && l.alg != \"sha256\") {\n i.push(new g({\n name: l.alg\n }));\n }\n i.push(new f({\n hex: k\n }));\n if (typeof l == \"string\" && l.indexOf(\"-----BEGIN\") != -1 || l.cert != undefined && l.hasis != false || l.issuer != undefined && l.serial != undefined) {\n i.push(new e(l));\n }\n var j = new a({\n array: i\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (h != undefined) {\n this.setByParam(h);\n }\n};\nextendClass(KJUR.asn1.cms.ESSCertIDv2, KJUR.asn1.cms.ESSCertID);\nKJUR.asn1.cms.IssuerSerial = function (e) {\n var i = Error,\n c = KJUR,\n h = c.asn1,\n g = h.DERInteger,\n f = h.DERSequence,\n j = h.cms,\n d = h.x509,\n a = d.GeneralNames,\n b = X509;\n j.IssuerSerial.superclass.constructor.call(this);\n this.setByParam = function (k) {\n this.params = k;\n };\n this.tohex = function () {\n var p = this.params;\n var l, r;\n if (typeof p == \"string\" && p.indexOf(\"-----BEGIN\") != -1 || p.cert != undefined) {\n var n;\n if (p.cert != undefined) {\n n = p.cert;\n } else {\n n = p;\n }\n var k = new b();\n k.readCertPEM(n);\n l = k.getIssuer();\n r = {\n hex: k.getSerialNumberHex()\n };\n } else {\n if (p.issuer != undefined && p.serial) {\n l = p.issuer;\n r = p.serial;\n } else {\n throw new i(\"cert or issuer and serial parameter not specified\");\n }\n }\n var q = new a([{\n dn: l\n }]);\n var o = new g(r);\n var m = new f({\n array: [q, o]\n });\n return m.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cms.IssuerSerial, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.SignerIdentifier = function (f) {\n var c = KJUR,\n i = c.asn1,\n h = i.DERInteger,\n g = i.DERSequence,\n l = i.cms,\n k = l.IssuerAndSerialNumber,\n d = l.SubjectKeyIdentifier,\n e = i.x509,\n a = e.X500Name,\n b = X509,\n j = Error;\n l.SignerIdentifier.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var o = this.params;\n if (o.type == \"isssn\") {\n var m = new k(o);\n return m.tohex();\n } else {\n if (o.type == \"skid\") {\n var n = new d(o);\n return n.tohex();\n } else {\n throw new Error(\"wrong property for isssn or skid\");\n }\n }\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.cms.SignerIdentifier, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.IssuerAndSerialNumber = function (e) {\n var c = KJUR,\n h = c.asn1,\n g = h.DERInteger,\n f = h.DERSequence,\n j = h.cms,\n d = h.x509,\n a = d.X500Name,\n b = X509,\n i = Error;\n j.IssuerAndSerialNumber.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var p = this.params;\n var l, r;\n if (typeof p == \"string\" && p.indexOf(\"-----BEGIN\") != -1 || p.cert != undefined) {\n var n;\n if (p.cert != undefined) {\n n = p.cert;\n } else {\n n = p;\n }\n var k = new b();\n k.readCertPEM(n);\n l = k.getIssuer();\n r = {\n hex: k.getSerialNumberHex()\n };\n } else {\n if (p.issuer != undefined && p.serial) {\n l = p.issuer;\n r = p.serial;\n } else {\n throw new i(\"cert or issuer and serial parameter not specified\");\n }\n }\n var q = new a(l);\n var o = new g(r);\n var m = new f({\n array: [q, o]\n });\n return m.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (k) {\n this.params = k;\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cms.IssuerAndSerialNumber, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.SubjectKeyIdentifier = function (g) {\n var d = KJUR,\n k = d.asn1,\n i = k.DERInteger,\n h = k.DERSequence,\n j = k.ASN1Util.newObject,\n m = k.cms,\n f = m.IssuerAndSerialName,\n c = m.SubjectKeyIdentifier,\n e = k.x509,\n a = e.X500Name,\n b = X509,\n l = Error;\n m.SubjectKeyIdentifier.superclass.constructor.call(this);\n this.tohex = function () {\n var r = this.params;\n if (r.cert == undefined && r.skid == undefined) {\n throw new l(\"property cert nor skid undefined\");\n }\n var q;\n if (r.cert != undefined) {\n var n = new b(r.cert);\n var o = n.getExtSubjectKeyIdentifier();\n q = o.kid.hex;\n } else {\n if (r.skid != undefined) {\n q = r.skid;\n }\n }\n var p = j({\n tag: {\n tage: \"a0\",\n obj: {\n octstr: {\n hex: q\n }\n }\n }\n });\n return p.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.cms.SubjectKeyIdentifier, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.AttributeList = function (f) {\n var d = Error,\n c = KJUR,\n b = c.asn1,\n a = b.DERSet,\n e = b.cms;\n e.AttributeList.superclass.constructor.call(this);\n this.params = null;\n this.hTLV = null;\n this.setByParam = function (g) {\n this.params = g;\n };\n this.tohex = function () {\n var o = this.params;\n if (this.hTLV != null) {\n return this.hTLV;\n }\n var m = true;\n if (o.sortflag != undefined) {\n m = o.sortflag;\n }\n var j = o.array;\n var g = [];\n for (var l = 0; l < j.length; l++) {\n var n = j[l];\n var k = n.attr;\n if (k == \"contentType\") {\n g.push(new e.ContentType(n));\n } else {\n if (k == \"messageDigest\") {\n g.push(new e.MessageDigest(n));\n } else {\n if (k == \"signingTime\") {\n g.push(new e.SigningTime(n));\n } else {\n if (k == \"signingCertificate\") {\n g.push(new e.SigningCertificate(n));\n } else {\n if (k == \"signingCertificateV2\") {\n g.push(new e.SigningCertificateV2(n));\n } else {\n if (k == \"signaturePolicyIdentifier\") {\n g.push(new KJUR.asn1.cades.SignaturePolicyIdentifier(n));\n } else {\n if (k == \"signatureTimeStamp\" || k == \"timeStampToken\") {\n g.push(new KJUR.asn1.cades.SignatureTimeStamp(n));\n } else {\n throw new d(\"unknown attr: \" + k);\n }\n }\n }\n }\n }\n }\n }\n }\n var h = new a({\n array: g,\n sortflag: m\n });\n this.hTLV = h.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.cms.AttributeList, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.SignerInfo = function (q) {\n var n = Error,\n r = KJUR,\n i = r.asn1,\n c = i.DERInteger,\n f = i.DEROctetString,\n h = i.DERSequence,\n m = i.DERTaggedObject,\n k = i.cms,\n p = k.SignerIdentifier,\n l = k.AttributeList,\n g = k.ContentType,\n e = k.EncapsulatedContentInfo,\n d = k.MessageDigest,\n j = k.SignedData,\n a = i.x509,\n s = a.AlgorithmIdentifier,\n b = r.crypto,\n o = KEYUTIL;\n k.SignerInfo.superclass.constructor.call(this);\n this.params = null;\n this.sign = function () {\n var y = this.params;\n var x = y.sigalg;\n var u = new l(y.sattrs).tohex();\n var v = o.getKey(y.signkey);\n var w = new b.Signature({\n alg: x\n });\n w.init(v);\n w.updateHex(u);\n var t = w.sign();\n y.sighex = t;\n };\n this.tohex = function () {\n var w = this.params;\n var t = [];\n t.push(new c({\n \"int\": w.version\n }));\n t.push(new p(w.id));\n t.push(new s({\n name: w.hashalg\n }));\n if (w.sattrs != undefined) {\n var x = new l(w.sattrs);\n try {\n t.push(new m({\n tag: \"a0\",\n explicit: false,\n obj: x\n }));\n } catch (v) {\n throw new n(\"si sattr error: \" + v);\n }\n }\n if (w.sigalgfield != undefined) {\n t.push(new s({\n name: w.sigalgfield\n }));\n } else {\n t.push(new s({\n name: w.sigalg\n }));\n }\n if (w.sighex == undefined && w.signkey != undefined) {\n this.sign();\n }\n t.push(new f({\n hex: w.sighex\n }));\n if (w.uattrs != undefined) {\n var x = new l(w.uattrs);\n try {\n t.push(new m({\n tag: \"a1\",\n explicit: false,\n obj: x\n }));\n } catch (v) {\n throw new n(\"si uattr error: \" + v);\n }\n }\n var u = new h({\n array: t\n });\n return u.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (q != undefined) {\n this.setByParam(q);\n }\n};\nextendClass(KJUR.asn1.cms.SignerInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.EncapsulatedContentInfo = function (g) {\n var c = KJUR,\n b = c.asn1,\n e = b.DERTaggedObject,\n a = b.DERSequence,\n h = b.DERObjectIdentifier,\n d = b.DEROctetString,\n f = b.cms;\n f.EncapsulatedContentInfo.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var m = this.params;\n var i = [];\n i.push(new h(m.type));\n if (m.content != undefined && (m.content.hex != undefined || m.content.str != undefined) && m.isDetached != true) {\n var k = new d(m.content);\n var l = new e({\n tag: \"a0\",\n explicit: true,\n obj: k\n });\n i.push(l);\n }\n var j = new a({\n array: i\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (i) {\n this.params = i;\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.cms.EncapsulatedContentInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.ContentInfo = function (g) {\n var c = KJUR,\n b = c.asn1,\n d = b.DERTaggedObject,\n a = b.DERSequence,\n h = b.DERObjectIdentifier,\n f = b.x509,\n e = f.OID.name2obj;\n KJUR.asn1.cms.ContentInfo.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var l = this.params;\n var i = [];\n i.push(new h(l.type));\n var k = new d({\n tag: \"a0\",\n explicit: true,\n obj: l.obj\n });\n i.push(k);\n var j = new a({\n array: i\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (i) {\n this.params = i;\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.cms.ContentInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.SignedData = function (e) {\n var j = Error,\n a = KJUR,\n h = a.asn1,\n m = h.ASN1Object,\n g = h.DERInteger,\n p = h.DERSet,\n f = h.DERSequence,\n b = h.DERTaggedObject,\n o = h.cms,\n l = o.EncapsulatedContentInfo,\n d = o.SignerInfo,\n q = o.ContentInfo,\n k = o.CertificateSet,\n i = o.RevocationInfoChoices,\n c = h.x509,\n n = c.AlgorithmIdentifier;\n KJUR.asn1.cms.SignedData.superclass.constructor.call(this);\n this.params = null;\n this.checkAndFixParam = function () {\n var r = this.params;\n this._setDigestAlgs(r);\n this._setContentTypeByEContent(r);\n this._setMessageDigestByEContent(r);\n this._setSignerInfoVersion(r);\n this._setSignedDataVersion(r);\n };\n this._setDigestAlgs = function (v) {\n var u = {};\n var t = v.sinfos;\n for (var r = 0; r < t.length; r++) {\n var s = t[r];\n u[s.hashalg] = 1;\n }\n v.hashalgs = Object.keys(u).sort();\n };\n this._setContentTypeByEContent = function (w) {\n var u = w.econtent.type;\n var v = w.sinfos;\n for (var r = 0; r < v.length; r++) {\n var t = v[r];\n var s = this._getAttrParamByName(t, \"contentType\");\n s.type = u;\n }\n };\n this._setMessageDigestByEContent = function (r) {\n var v = r.econtent;\n var y = r.econtent.type;\n var x = v.content.hex;\n if (x == undefined && v.type == \"data\" && v.content.str != undefined) {\n x = rstrtohex(v.content.str);\n }\n var A = r.sinfos;\n for (var u = 0; u < A.length; u++) {\n var t = A[u];\n var s = t.hashalg;\n var z = this._getAttrParamByName(t, \"messageDigest\");\n var w = KJUR.crypto.Util.hashHex(x, s);\n z.hex = w;\n }\n };\n this._getAttrParamByName = function (t, s) {\n var u = t.sattrs.array;\n for (var r = 0; r < u.length; r++) {\n if (u[r].attr == s) {\n return u[r];\n }\n }\n };\n this._setSignerInfoVersion = function (v) {\n var t = v.sinfos;\n for (var r = 0; r < t.length; r++) {\n var s = t[r];\n var u = 1;\n if (s.id.type == \"skid\") {\n u = 3;\n }\n s.version = u;\n }\n };\n this._setSignedDataVersion = function (s) {\n var r = this._getSignedDataVersion(s);\n s.version = r;\n };\n this._getSignedDataVersion = function (w) {\n if (w.revinfos != undefined) {\n var r = w.revinfos;\n for (var t = 0; t < r.length; t++) {\n var s = r[t];\n if (s.ocsp != undefined) {\n return 5;\n }\n }\n }\n var v = w.sinfos;\n for (var t = 0; t < v.length; t++) {\n var u = w.sinfos[t];\n if (u.version == 3) {\n return 3;\n }\n }\n if (w.econtent.type != \"data\") {\n return 3;\n }\n return 1;\n };\n this.tohex = function () {\n var y = this.params;\n if (this.getEncodedHexPrepare != undefined) {\n this.getEncodedHexPrepare();\n }\n if (y.fixed != true) {\n this.checkAndFixParam();\n }\n var r = [];\n r.push(new g({\n \"int\": y.version\n }));\n var w = [];\n for (var v = 0; v < y.hashalgs.length; v++) {\n var t = y.hashalgs[v];\n w.push(new n({\n name: t\n }));\n }\n r.push(new p({\n array: w\n }));\n r.push(new l(y.econtent));\n if (y.certs != undefined) {\n r.push(new k(y.certs));\n }\n if (y.revinfos != undefined) {\n r.push(new i(y.revinfos));\n }\n var u = [];\n for (var v = 0; v < y.sinfos.length; v++) {\n var x = y.sinfos[v];\n u.push(new d(x));\n }\n r.push(new p({\n array: u\n }));\n var s = new f({\n array: r\n });\n return s.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.getContentInfo = function () {\n var r = new q({\n type: \"signed-data\",\n obj: this\n });\n return r;\n };\n this.getContentInfoEncodedHex = function () {\n return this.getContentInfo().tohex();\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cms.SignedData, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.CertificateSet = function (f) {\n KJUR.asn1.cms.CertificateSet.superclass.constructor.call(this);\n var c = Error,\n b = KJUR.asn1,\n e = b.DERTaggedObject,\n a = b.DERSet,\n d = b.ASN1Object;\n this.params = null;\n this.tohex = function () {\n var j = this.params;\n var p = [];\n var q;\n if (j instanceof Array) {\n q = j;\n } else {\n if (j.array != undefined) {\n q = j.array;\n } else {\n throw new c(\"cert array not specified\");\n }\n }\n for (var k = 0; k < q.length; k++) {\n var l = q[k];\n var n = pemtohex(l);\n var g = new d();\n g.hTLV = n;\n p.push(g);\n }\n var m = {\n array: p\n };\n if (j.sortflag == false) {\n m.sortflag = false;\n }\n var o = new a(m);\n var h = new e({\n tag: \"a0\",\n explicit: false,\n obj: o\n });\n return h.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.cms.CertificateSet, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.RevocationInfoChoices = function (a) {\n KJUR.asn1.cms.RevocationInfoChoices.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var e = this.params;\n if (!e instanceof Array) {\n throw new Error(\"params is not array\");\n }\n var b = [];\n for (var c = 0; c < e.length; c++) {\n b.push(new KJUR.asn1.cms.RevocationInfoChoice(e[c]));\n }\n var d = KJUR.asn1.ASN1Util.newObject({\n tag: {\n tagi: \"a1\",\n obj: {\n set: b\n }\n }\n });\n return d.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (a != undefined) {\n this.setByParam(a);\n }\n};\nextendClass(KJUR.asn1.cms.RevocationInfoChoices, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.RevocationInfoChoice = function (a) {\n KJUR.asn1.cms.RevocationInfoChoice.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var d = this.params;\n if (d.crl != undefined && typeof d.crl == \"string\") {\n var b = d.crl;\n if (d.crl.indexOf(\"-----BEGIN\") != -1) {\n b = pemtohex(d.crl);\n }\n return b;\n } else {\n if (d.ocsp != undefined) {\n var c = KJUR.asn1.ASN1Util.newObject({\n tag: {\n tagi: \"a1\",\n obj: new KJUR.asn1.cms.OtherRevocationFormat(d)\n }\n });\n return c.tohex();\n } else {\n throw new Error(\"property crl or ocsp undefined\");\n }\n }\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (a != undefined) {\n this.setByParam(a);\n }\n};\nextendClass(KJUR.asn1.cms.RevocationInfoChoice, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.OtherRevocationFormat = function (f) {\n KJUR.asn1.cms.OtherRevocationFormat.superclass.constructor.call(this);\n var d = Error,\n c = KJUR,\n b = c.asn1,\n a = b.ASN1Util.newObject,\n e = c.lang.String.isHex;\n this.params = null;\n this.tohex = function () {\n var h = this.params;\n if (h.ocsp == undefined) {\n throw new d(\"property ocsp not specified\");\n }\n if (!e(h.ocsp) || !ASN1HEX.isASN1HEX(h.ocsp)) {\n throw new d(\"ocsp value not ASN.1 hex string\");\n }\n var g = a({\n seq: [{\n oid: \"1.3.6.1.5.5.7.16.2\"\n }, {\n asn1: {\n tlv: h.ocsp\n }\n }]\n });\n return g.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.cms.OtherRevocationFormat, KJUR.asn1.ASN1Object);\nKJUR.asn1.cms.CMSUtil = new function () {}();\nKJUR.asn1.cms.CMSUtil.newSignedData = function (a) {\n return new KJUR.asn1.cms.SignedData(a);\n};\nKJUR.asn1.cms.CMSUtil.verifySignedData = function (n) {\n var C = KJUR,\n p = C.asn1,\n s = p.cms,\n D = s.SignerInfo,\n q = s.SignedData,\n y = s.SigningTime,\n b = s.SigningCertificate,\n d = s.SigningCertificateV2,\n A = p.cades,\n u = A.SignaturePolicyIdentifier,\n i = C.lang.String.isHex,\n v = ASN1HEX,\n h = v.getVbyList,\n a = v.getTLVbyList,\n t = v.getIdxbyList,\n z = v.getChildIdx,\n c = v.getTLV,\n B = v.oidname,\n j = C.crypto.Util.hashHex;\n if (n.cms === undefined && !i(n.cms)) {}\n var E = n.cms;\n var g = function (J, H) {\n var G;\n for (var I = 3; I < 6; I++) {\n G = t(J, 0, [1, 0, I]);\n if (G !== undefined) {\n var F = J.substr(G, 2);\n if (F === \"a0\") {\n H.certsIdx = G;\n }\n if (F === \"a1\") {\n H.revinfosIdx = G;\n }\n if (F === \"31\") {\n H.signerinfosIdx = G;\n }\n }\n }\n };\n var l = function (I, F) {\n var H = F.signerinfosIdx;\n if (H === undefined) {\n return;\n }\n var L = z(I, H);\n F.signerInfoIdxList = L;\n for (var G = 0; G < L.length; G++) {\n var K = L[G];\n var J = {\n idx: K\n };\n k(I, J);\n F.signerInfos.push(J);\n }\n };\n var k = function (I, J) {\n var F = J.idx;\n J.signerid_issuer1 = a(I, F, [1, 0], \"30\");\n J.signerid_serial1 = h(I, F, [1, 1], \"02\");\n J.hashalg = B(h(I, F, [2, 0], \"06\"));\n var H = t(I, F, [3], \"a0\");\n J.idxSignedAttrs = H;\n f(I, J, H);\n var G = z(I, F);\n var K = G.length;\n if (K < 6) {\n throw \"malformed SignerInfo\";\n }\n J.sigalg = B(h(I, F, [K - 2, 0], \"06\"));\n J.sigval = h(I, F, [K - 1], \"04\");\n };\n var f = function (L, M, F) {\n var J = z(L, F);\n M.signedAttrIdxList = J;\n for (var K = 0; K < J.length; K++) {\n var I = J[K];\n var G = h(L, I, [0], \"06\");\n var H;\n if (G === \"2a864886f70d010905\") {\n H = hextoutf8(h(L, I, [1, 0]));\n M.saSigningTime = H;\n } else {\n if (G === \"2a864886f70d010904\") {\n H = h(L, I, [1, 0], \"04\");\n M.saMessageDigest = H;\n }\n }\n }\n };\n var w = function (G, F) {\n if (h(G, 0, [0], \"06\") !== \"2a864886f70d010702\") {\n return F;\n }\n F.cmsType = \"signedData\";\n F.econtent = h(G, 0, [1, 0, 2, 1, 0]);\n g(G, F);\n F.signerInfos = [];\n l(G, F);\n };\n var o = function (J, F) {\n var G = F.parse.signerInfos;\n var L = G.length;\n var K = true;\n for (var I = 0; I < L; I++) {\n var H = G[I];\n e(J, F, H, I);\n if (!H.isValid) {\n K = false;\n }\n }\n F.isValid = K;\n };\n var x = function (F, Q, J, P) {\n var N = Q.parse.certsIdx;\n var H;\n if (Q.certs === undefined) {\n H = [];\n Q.certkeys = [];\n var K = z(F, N);\n for (var I = 0; I < K.length; I++) {\n var M = c(F, K[I]);\n var O = new X509();\n O.readCertHex(M);\n H[I] = O;\n Q.certkeys[I] = O.getPublicKey();\n }\n Q.certs = H;\n } else {\n H = Q.certs;\n }\n Q.cccc = H.length;\n Q.cccci = K.length;\n for (var I = 0; I < H.length; I++) {\n var L = O.getIssuerHex();\n var G = O.getSerialNumberHex();\n if (J.signerid_issuer1 === L && J.signerid_serial1 === G) {\n J.certkey_idx = I;\n }\n }\n };\n var e = function (F, R, I, N) {\n I.verifyDetail = {};\n var Q = I.verifyDetail;\n var K = R.parse.econtent;\n var G = I.hashalg;\n var L = I.saMessageDigest;\n Q.validMessageDigest = false;\n if (j(K, G) === L) {\n Q.validMessageDigest = true;\n }\n x(F, R, I, N);\n Q.validSignatureValue = false;\n var H = I.sigalg;\n var M = \"31\" + c(F, I.idxSignedAttrs).substr(2);\n I.signedattrshex = M;\n var J = R.certs[I.certkey_idx].getPublicKey();\n var P = new KJUR.crypto.Signature({\n alg: H\n });\n P.init(J);\n P.updateHex(M);\n var O = P.verify(I.sigval);\n Q.validSignatureValue_isValid = O;\n if (O === true) {\n Q.validSignatureValue = true;\n }\n I.isValid = false;\n if (Q.validMessageDigest && Q.validSignatureValue) {\n I.isValid = true;\n }\n };\n var m = function () {};\n var r = {\n isValid: false,\n parse: {}\n };\n w(E, r.parse);\n o(E, r);\n return r;\n};\nKJUR.asn1.cms.CMSParser = function () {\n var g = Error,\n a = X509,\n h = new a(),\n l = ASN1HEX,\n i = l.getV,\n b = l.getTLV,\n f = l.getIdxbyList,\n c = l.getTLVbyList,\n d = l.getTLVbyListEx,\n e = l.getVbyList,\n k = l.getVbyListEx,\n j = l.getChildIdx;\n this.getCMSSignedData = function (m) {\n var o = c(m, 0, [1, 0]);\n var n = this.getSignedData(o);\n return n;\n };\n this.getSignedData = function (o) {\n var q = j(o, 0);\n var v = {};\n var p = i(o, q[0]);\n var n = parseInt(p, 16);\n v.version = n;\n var r = b(o, q[1]);\n v.hashalgs = this.getHashAlgArray(r);\n var t = b(o, q[2]);\n v.econtent = this.getEContent(t);\n var m = d(o, 0, [\"[0]\"]);\n if (m != null) {\n v.certs = this.getCertificateSet(m);\n }\n var u = d(o, 0, [\"[1]\"]);\n if (u != null) {}\n var s = d(o, 0, [3]);\n v.sinfos = this.getSignerInfos(s);\n return v;\n };\n this.getHashAlgArray = function (s) {\n var q = j(s, 0);\n var m = new a();\n var n = [];\n for (var r = 0; r < q.length; r++) {\n var p = b(s, q[r]);\n var o = m.getAlgorithmIdentifierName(p);\n n.push(o);\n }\n return n;\n };\n this.getEContent = function (m) {\n var n = {};\n var p = e(m, 0, [0]);\n var o = e(m, 0, [1, 0]);\n n.type = KJUR.asn1.x509.OID.oid2name(ASN1HEX.hextooidstr(p));\n n.content = {\n hex: o\n };\n return n;\n };\n this.getSignerInfos = function (p) {\n var r = [];\n var m = j(p, 0);\n for (var n = 0; n < m.length; n++) {\n var o = b(p, m[n]);\n var q = this.getSignerInfo(o);\n r.push(q);\n }\n return r;\n };\n this.getSignerInfo = function (s) {\n var y = {};\n var u = j(s, 0);\n var q = l.getInt(s, u[0], -1);\n if (q != -1) {\n y.version = q;\n }\n var t = b(s, u[1]);\n var p = this.getIssuerAndSerialNumber(t);\n y.id = p;\n var z = b(s, u[2]);\n var n = h.getAlgorithmIdentifierName(z);\n y.hashalg = n;\n var w = d(s, 0, [\"[0]\"]);\n if (w != null) {\n var A = this.getAttributeList(w);\n y.sattrs = A;\n }\n var m = d(s, 0, [3]);\n var x = h.getAlgorithmIdentifierName(m);\n y.sigalg = x;\n var o = k(s, 0, [4]);\n y.sighex = o;\n var r = d(s, 0, [\"[1]\"]);\n if (r != null) {\n var v = this.getAttributeList(r);\n y.uattrs = v;\n }\n return y;\n };\n this.getSignerIdentifier = function (m) {\n if (m.substr(0, 2) == \"30\") {\n return this.getIssuerAndSerialNumber(m);\n } else {\n throw new Error(\"SKID of signerIdentifier not supported\");\n }\n };\n this.getIssuerAndSerialNumber = function (n) {\n var o = {\n type: \"isssn\"\n };\n var m = j(n, 0);\n var p = b(n, m[0]);\n o.issuer = h.getX500Name(p);\n var q = i(n, m[1]);\n o.serial = {\n hex: q\n };\n return o;\n };\n this.getAttributeList = function (q) {\n var m = [];\n var n = j(q, 0);\n for (var o = 0; o < n.length; o++) {\n var p = b(q, n[o]);\n var r = this.getAttribute(p);\n m.push(r);\n }\n return {\n array: m\n };\n };\n this.getAttribute = function (p) {\n var t = {};\n var q = j(p, 0);\n var o = l.getOID(p, q[0]);\n var m = KJUR.asn1.x509.OID.oid2name(o);\n t.attr = m;\n var r = b(p, q[1]);\n var u = j(r, 0);\n if (u.length == 1) {\n t.valhex = b(r, u[0]);\n } else {\n var s = [];\n for (var n = 0; n < u.length; n++) {\n s.push(b(r, u[n]));\n }\n t.valhex = s;\n }\n if (m == \"contentType\") {\n this.setContentType(t);\n } else {\n if (m == \"messageDigest\") {\n this.setMessageDigest(t);\n } else {\n if (m == \"signingTime\") {\n this.setSigningTime(t);\n } else {\n if (m == \"signingCertificate\") {\n this.setSigningCertificate(t);\n } else {\n if (m == \"signingCertificateV2\") {\n this.setSigningCertificateV2(t);\n } else {\n if (m == \"signaturePolicyIdentifier\") {\n this.setSignaturePolicyIdentifier(t);\n }\n }\n }\n }\n }\n }\n return t;\n };\n this.setContentType = function (m) {\n var n = l.getOIDName(m.valhex, 0, null);\n if (n != null) {\n m.type = n;\n delete m.valhex;\n }\n };\n this.setSigningTime = function (o) {\n var n = i(o.valhex, 0);\n var m = hextoutf8(n);\n o.str = m;\n delete o.valhex;\n };\n this.setMessageDigest = function (m) {\n var n = i(m.valhex, 0);\n m.hex = n;\n delete m.valhex;\n };\n this.setSigningCertificate = function (n) {\n var q = j(n.valhex, 0);\n if (q.length > 0) {\n var m = b(n.valhex, q[0]);\n var p = j(m, 0);\n var t = [];\n for (var o = 0; o < p.length; o++) {\n var s = b(m, p[o]);\n var u = this.getESSCertID(s);\n t.push(u);\n }\n n.array = t;\n }\n if (q.length > 1) {\n var r = b(n.valhex, q[1]);\n n.polhex = r;\n }\n delete n.valhex;\n };\n this.setSignaturePolicyIdentifier = function (s) {\n var q = j(s.valhex, 0);\n if (q.length > 0) {\n var r = l.getOID(s.valhex, q[0]);\n s.oid = r;\n }\n if (q.length > 1) {\n var m = new a();\n var t = j(s.valhex, q[1]);\n var p = b(s.valhex, t[0]);\n var o = m.getAlgorithmIdentifierName(p);\n s.alg = o;\n var n = i(s.valhex, t[1]);\n s.hash = n;\n }\n delete s.valhex;\n };\n this.setSigningCertificateV2 = function (o) {\n var s = j(o.valhex, 0);\n if (s.length > 0) {\n var n = b(o.valhex, s[0]);\n var r = j(n, 0);\n var u = [];\n for (var q = 0; q < r.length; q++) {\n var m = b(n, r[q]);\n var p = this.getESSCertIDv2(m);\n u.push(p);\n }\n o.array = u;\n }\n if (s.length > 1) {\n var t = b(o.valhex, s[1]);\n o.polhex = t;\n }\n delete o.valhex;\n };\n this.getESSCertID = function (o) {\n var p = {};\n var n = j(o, 0);\n if (n.length > 0) {\n var q = i(o, n[0]);\n p.hash = q;\n }\n if (n.length > 1) {\n var m = b(o, n[1]);\n var r = this.getIssuerSerial(m);\n if (r.serial != undefined) {\n p.serial = r.serial;\n }\n if (r.issuer != undefined) {\n p.issuer = r.issuer;\n }\n }\n return p;\n };\n this.getESSCertIDv2 = function (q) {\n var s = {};\n var p = j(q, 0);\n if (p.length < 1 || 3 < p.length) {\n throw new g(\"wrong number of elements\");\n }\n var r = 0;\n if (q.substr(p[0], 2) == \"30\") {\n var o = b(q, p[0]);\n s.alg = h.getAlgorithmIdentifierName(o);\n r++;\n } else {\n s.alg = \"sha256\";\n }\n var n = i(q, p[r]);\n s.hash = n;\n if (p.length > r + 1) {\n var m = b(q, p[r + 1]);\n var t = this.getIssuerSerial(m);\n s.issuer = t.issuer;\n s.serial = t.serial;\n }\n return s;\n };\n this.getIssuerSerial = function (q) {\n var r = {};\n var n = j(q, 0);\n var m = b(q, n[0]);\n var p = h.getGeneralNames(m);\n var o = p[0].dn;\n r.issuer = o;\n var s = i(q, n[1]);\n r.serial = {\n hex: s\n };\n return r;\n };\n this.getCertificateSet = function (p) {\n var n = j(p, 0);\n var m = [];\n for (var o = 0; o < n.length; o++) {\n var r = b(p, n[o]);\n if (r.substr(0, 2) == \"30\") {\n var q = hextopem(r, \"CERTIFICATE\");\n m.push(q);\n }\n }\n return {\n array: m,\n sortflag: false\n };\n };\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) {\n KJUR.asn1 = {};\n}\nif (typeof KJUR.asn1.tsp == \"undefined\" || !KJUR.asn1.tsp) {\n KJUR.asn1.tsp = {};\n}\nKJUR.asn1.tsp.TimeStampToken = function (d) {\n var c = KJUR,\n b = c.asn1,\n a = b.tsp;\n a.TimeStampToken.superclass.constructor.call(this);\n this.params = null;\n this.getEncodedHexPrepare = function () {\n var e = new a.TSTInfo(this.params.econtent.content);\n this.params.econtent.content.hex = e.tohex();\n };\n if (d != undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.tsp.TimeStampToken, KJUR.asn1.cms.SignedData);\nKJUR.asn1.tsp.TSTInfo = function (f) {\n var m = Error,\n c = KJUR,\n j = c.asn1,\n g = j.DERSequence,\n i = j.DERInteger,\n l = j.DERBoolean,\n h = j.DERGeneralizedTime,\n n = j.DERObjectIdentifier,\n e = j.DERTaggedObject,\n k = j.tsp,\n d = k.MessageImprint,\n b = k.Accuracy,\n a = j.x509.X500Name,\n o = j.x509.GeneralName;\n k.TSTInfo.superclass.constructor.call(this);\n this.dVersion = new i({\n \"int\": 1\n });\n this.dPolicy = null;\n this.dMessageImprint = null;\n this.dSerial = null;\n this.dGenTime = null;\n this.dAccuracy = null;\n this.dOrdering = null;\n this.dNonce = null;\n this.dTsa = null;\n this.tohex = function () {\n var p = [this.dVersion];\n if (this.dPolicy == null) {\n throw new Error(\"policy shall be specified.\");\n }\n p.push(this.dPolicy);\n if (this.dMessageImprint == null) {\n throw new Error(\"messageImprint shall be specified.\");\n }\n p.push(this.dMessageImprint);\n if (this.dSerial == null) {\n throw new Error(\"serialNumber shall be specified.\");\n }\n p.push(this.dSerial);\n if (this.dGenTime == null) {\n throw new Error(\"genTime shall be specified.\");\n }\n p.push(this.dGenTime);\n if (this.dAccuracy != null) {\n p.push(this.dAccuracy);\n }\n if (this.dOrdering != null) {\n p.push(this.dOrdering);\n }\n if (this.dNonce != null) {\n p.push(this.dNonce);\n }\n if (this.dTsa != null) {\n p.push(this.dTsa);\n }\n var q = new g({\n array: p\n });\n this.hTLV = q.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f !== undefined) {\n if (typeof f.policy == \"string\") {\n if (!f.policy.match(/^[0-9.]+$/)) {\n throw \"policy shall be oid like 0.1.4.134\";\n }\n this.dPolicy = new n({\n oid: f.policy\n });\n }\n if (f.messageImprint !== undefined) {\n this.dMessageImprint = new d(f.messageImprint);\n }\n if (f.serial !== undefined) {\n this.dSerial = new i(f.serial);\n }\n if (f.genTime !== undefined) {\n this.dGenTime = new h(f.genTime);\n }\n if (f.accuracy !== undefined) {\n this.dAccuracy = new b(f.accuracy);\n }\n if (f.ordering !== undefined && f.ordering == true) {\n this.dOrdering = new l();\n }\n if (f.nonce !== undefined) {\n this.dNonce = new i(f.nonce);\n }\n if (f.tsa !== undefined) {\n this.dTsa = new e({\n tag: \"a0\",\n explicit: true,\n obj: new o({\n dn: f.tsa\n })\n });\n }\n }\n};\nextendClass(KJUR.asn1.tsp.TSTInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.Accuracy = function (d) {\n var c = KJUR,\n b = c.asn1,\n a = b.ASN1Util.newObject;\n b.tsp.Accuracy.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var f = this.params;\n var e = [];\n if (f.seconds != undefined && typeof f.seconds == \"number\") {\n e.push({\n \"int\": f.seconds\n });\n }\n if (f.millis != undefined && typeof f.millis == \"number\") {\n e.push({\n tag: {\n tagi: \"80\",\n obj: {\n \"int\": f.millis\n }\n }\n });\n }\n if (f.micros != undefined && typeof f.micros == \"number\") {\n e.push({\n tag: {\n tagi: \"81\",\n obj: {\n \"int\": f.micros\n }\n }\n });\n }\n return a({\n seq: e\n }).tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (d != undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.tsp.Accuracy, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.MessageImprint = function (g) {\n var c = KJUR,\n b = c.asn1,\n a = b.DERSequence,\n d = b.DEROctetString,\n f = b.x509,\n e = f.AlgorithmIdentifier;\n b.tsp.MessageImprint.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var k = this.params;\n var j = new e({\n name: k.alg\n });\n var h = new d({\n hex: k.hash\n });\n var i = new a({\n array: [j, h]\n });\n return i.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g !== undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.tsp.MessageImprint, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.TimeStampReq = function (c) {\n var a = KJUR,\n f = a.asn1,\n d = f.DERSequence,\n e = f.DERInteger,\n h = f.DERBoolean,\n j = f.ASN1Object,\n i = f.DERObjectIdentifier,\n g = f.tsp,\n b = g.MessageImprint;\n g.TimeStampReq.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var m = this.params;\n var k = [];\n k.push(new e({\n \"int\": 1\n }));\n if (m.messageImprint instanceof KJUR.asn1.ASN1Object) {\n k.push(m.messageImprint);\n } else {\n k.push(new b(m.messageImprint));\n }\n if (m.policy != undefined) {\n k.push(new i(m.policy));\n }\n if (m.nonce != undefined) {\n k.push(new e(m.nonce));\n }\n if (m.certreq == true) {\n k.push(new h());\n }\n var l = new d({\n array: k\n });\n return l.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (c != undefined) {\n this.setByParam(c);\n }\n};\nextendClass(KJUR.asn1.tsp.TimeStampReq, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.TimeStampResp = function (g) {\n var e = KJUR,\n d = e.asn1,\n c = d.DERSequence,\n f = d.ASN1Object,\n a = d.tsp,\n b = a.PKIStatusInfo;\n a.TimeStampResp.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var j = this.params;\n var h = [];\n if (j.econtent != undefined || j.tst != undefined) {\n if (j.statusinfo != undefined) {\n h.push(new b(j.statusinfo));\n } else {\n h.push(new b(\"granted\"));\n }\n if (j.econtent != undefined) {\n h.push(new a.TimeStampToken(j).getContentInfo());\n } else {\n if (j.tst instanceof d.ASN1Object) {\n h.push(j.tst);\n } else {\n throw new Error(\"improper member tst value\");\n }\n }\n } else {\n if (j.statusinfo != undefined) {\n h.push(new b(j.statusinfo));\n } else {\n throw new Error(\"parameter for token nor statusinfo not specified\");\n }\n }\n var i = new c({\n array: h\n });\n return i.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.tsp.TimeStampResp, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.PKIStatusInfo = function (d) {\n var h = Error,\n a = KJUR,\n g = a.asn1,\n e = g.DERSequence,\n i = g.tsp,\n f = i.PKIStatus,\n c = i.PKIFreeText,\n b = i.PKIFailureInfo;\n i.PKIStatusInfo.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var l = this.params;\n var j = [];\n if (typeof l == \"string\") {\n j.push(new f(l));\n } else {\n if (l.status == undefined) {\n throw new h(\"property 'status' unspecified\");\n }\n j.push(new f(l.status));\n if (l.statusstr != undefined) {\n j.push(new c(l.statusstr));\n }\n if (l.failinfo != undefined) {\n j.push(new b(l.failinfo));\n }\n }\n var k = new e({\n array: j\n });\n return k.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (d != undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.tsp.PKIStatusInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.PKIStatus = function (g) {\n var e = Error,\n d = KJUR,\n c = d.asn1,\n f = c.DERInteger,\n b = c.tsp;\n b.PKIStatus.superclass.constructor.call(this);\n var a = {\n granted: 0,\n grantedWithMods: 1,\n rejection: 2,\n waiting: 3,\n revocationWarning: 4,\n revocationNotification: 5\n };\n this.params = null;\n this.tohex = function () {\n var k = this.params;\n var h, j;\n if (typeof k == \"string\") {\n try {\n j = a[k];\n } catch (i) {\n throw new e(\"undefined name: \" + k);\n }\n } else {\n if (typeof k == \"number\") {\n j = k;\n } else {\n throw new e(\"unsupported params\");\n }\n }\n return new f({\n \"int\": j\n }).tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.tsp.PKIStatus, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.PKIFreeText = function (g) {\n var f = Error,\n e = KJUR,\n d = e.asn1,\n b = d.DERSequence,\n c = d.DERUTF8String,\n a = d.tsp;\n a.PKIFreeText.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var l = this.params;\n if (!l instanceof Array) {\n throw new f(\"wrong params: not array\");\n }\n var h = [];\n for (var k = 0; k < l.length; k++) {\n h.push(new c({\n str: l[k]\n }));\n }\n var j = new b({\n array: h\n });\n return j.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.tsp.PKIFreeText, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.PKIFailureInfo = function (h) {\n var f = Error,\n e = KJUR,\n d = e.asn1,\n g = d.DERBitString,\n b = d.tsp,\n c = b.PKIFailureInfo;\n var a = {\n badAlg: 0,\n badRequest: 2,\n badDataFormat: 5,\n timeNotAvailable: 14,\n unacceptedPolicy: 15,\n unacceptedExtension: 16,\n addInfoNotAvailable: 17,\n systemFailure: 25\n };\n c.superclass.constructor.call(this);\n this.params = null;\n this.getBinValue = function () {\n var n = this.params;\n var m = 0;\n if (typeof n == \"number\" && 0 <= n && n <= 25) {\n m |= 1 << n;\n var k = m.toString(2);\n var l = \"\";\n for (var j = k.length - 1; j >= 0; j--) {\n l += k[j];\n }\n return l;\n } else {\n if (typeof n == \"string\" && a[n] != undefined) {\n return namearraytobinstr([n], a);\n } else {\n if (typeof n == \"object\" && n.length != undefined) {\n return namearraytobinstr(n, a);\n } else {\n throw new f(\"wrong params\");\n }\n }\n }\n return;\n };\n this.tohex = function () {\n var j = this.params;\n var i = this.getBinValue();\n return new g({\n bin: i\n }).tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (h != undefined) {\n this.setByParam(h);\n }\n};\nextendClass(KJUR.asn1.tsp.PKIFailureInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.tsp.AbstractTSAAdapter = function (a) {\n this.getTSTHex = function (c, b) {\n throw \"not implemented yet\";\n };\n};\nKJUR.asn1.tsp.SimpleTSAAdapter = function (e) {\n var d = KJUR,\n c = d.asn1,\n a = c.tsp,\n b = d.crypto.Util.hashHex;\n a.SimpleTSAAdapter.superclass.constructor.call(this);\n this.params = null;\n this.serial = 0;\n this.getTSTHex = function (g, f) {\n var i = b(g, f);\n this.params.econtent.content.messageImprint = {\n alg: f,\n hash: i\n };\n this.params.econtent.content.serial = {\n \"int\": this.serial++\n };\n var h = Math.floor(Math.random() * 1000000000);\n this.params.econtent.content.nonce = {\n \"int\": h\n };\n var j = new a.TimeStampToken(this.params);\n return j.getContentInfoEncodedHex();\n };\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.tsp.SimpleTSAAdapter, KJUR.asn1.tsp.AbstractTSAAdapter);\nKJUR.asn1.tsp.FixedTSAAdapter = function (e) {\n var d = KJUR,\n c = d.asn1,\n a = c.tsp,\n b = d.crypto.Util.hashHex;\n a.FixedTSAAdapter.superclass.constructor.call(this);\n this.params = null;\n this.getTSTHex = function (g, f) {\n var h = b(g, f);\n this.params.econtent.content.messageImprint = {\n alg: f,\n hash: h\n };\n var i = new a.TimeStampToken(this.params);\n return i.getContentInfoEncodedHex();\n };\n if (e !== undefined) {\n this.params = e;\n }\n};\nextendClass(KJUR.asn1.tsp.FixedTSAAdapter, KJUR.asn1.tsp.AbstractTSAAdapter);\nKJUR.asn1.tsp.TSPUtil = new function () {}();\nKJUR.asn1.tsp.TSPUtil.newTimeStampToken = function (a) {\n return new KJUR.asn1.tsp.TimeStampToken(a);\n};\nKJUR.asn1.tsp.TSPUtil.parseTimeStampReq = function (a) {\n var b = new KJUR.asn1.tsp.TSPParser();\n return b.getTimeStampReq(a);\n};\nKJUR.asn1.tsp.TSPUtil.parseMessageImprint = function (a) {\n var b = new KJUR.asn1.tsp.TSPParser();\n return b.getMessageImprint(a);\n};\nKJUR.asn1.tsp.TSPParser = function () {\n var e = Error,\n a = X509,\n f = new a(),\n k = ASN1HEX,\n g = k.getV,\n b = k.getTLV,\n d = k.getIdxbyList,\n c = k.getTLVbyListEx,\n i = k.getChildIdx;\n var j = [\"granted\", \"grantedWithMods\", \"rejection\", \"waiting\", \"revocationWarning\", \"revocationNotification\"];\n var h = {\n 0: \"badAlg\",\n 2: \"badRequest\",\n 5: \"badDataFormat\",\n 14: \"timeNotAvailable\",\n 15: \"unacceptedPolicy\",\n 16: \"unacceptedExtension\",\n 17: \"addInfoNotAvailable\",\n 25: \"systemFailure\"\n };\n this.getResponse = function (n) {\n var l = i(n, 0);\n if (l.length == 1) {\n return this.getPKIStatusInfo(b(n, l[0]));\n } else {\n if (l.length > 1) {\n var o = this.getPKIStatusInfo(b(n, l[0]));\n var m = b(n, l[1]);\n var p = this.getToken(m);\n p.statusinfo = o;\n return p;\n }\n }\n };\n this.getToken = function (m) {\n var l = new KJUR.asn1.cms.CMSParser();\n var n = l.getCMSSignedData(m);\n this.setTSTInfo(n);\n return n;\n };\n this.setTSTInfo = function (l) {\n var o = l.econtent;\n if (o.type == \"tstinfo\") {\n var n = o.content.hex;\n var m = this.getTSTInfo(n);\n o.content = m;\n }\n };\n this.getTSTInfo = function (r) {\n var x = {};\n var s = i(r, 0);\n var p = g(r, s[1]);\n x.policy = hextooid(p);\n var o = b(r, s[2]);\n x.messageImprint = this.getMessageImprint(o);\n var u = g(r, s[3]);\n x.serial = {\n hex: u\n };\n var y = g(r, s[4]);\n x.genTime = {\n str: hextoutf8(y)\n };\n var q = 0;\n if (s.length > 5 && r.substr(s[5], 2) == \"30\") {\n var v = b(r, s[5]);\n x.accuracy = this.getAccuracy(v);\n q++;\n }\n if (s.length > 5 + q && r.substr(s[5 + q], 2) == \"01\") {\n var z = g(r, s[5 + q]);\n if (z == \"ff\") {\n x.ordering = true;\n }\n q++;\n }\n if (s.length > 5 + q && r.substr(s[5 + q], 2) == \"02\") {\n var n = g(r, s[5 + q]);\n x.nonce = {\n hex: n\n };\n q++;\n }\n if (s.length > 5 + q && r.substr(s[5 + q], 2) == \"a0\") {\n var m = b(r, s[5 + q]);\n m = \"30\" + m.substr(2);\n pGeneralNames = f.getGeneralNames(m);\n var t = pGeneralNames[0].dn;\n x.tsa = t;\n q++;\n }\n if (s.length > 5 + q && r.substr(s[5 + q], 2) == \"a1\") {\n var l = b(r, s[5 + q]);\n l = \"30\" + l.substr(2);\n var w = f.getExtParamArray(l);\n x.ext = w;\n q++;\n }\n return x;\n };\n this.getAccuracy = function (q) {\n var r = {};\n var o = i(q, 0);\n for (var p = 0; p < o.length; p++) {\n var m = q.substr(o[p], 2);\n var l = g(q, o[p]);\n var n = parseInt(l, 16);\n if (m == \"02\") {\n r.seconds = n;\n } else {\n if (m == \"80\") {\n r.millis = n;\n } else {\n if (m == \"81\") {\n r.micros = n;\n }\n }\n }\n }\n return r;\n };\n this.getMessageImprint = function (n) {\n if (n.substr(0, 2) != \"30\") {\n throw new Error(\"head of messageImprint hex shall be x30\");\n }\n var s = {};\n var l = i(n, 0);\n var t = d(n, 0, [0, 0]);\n var o = g(n, t);\n var p = k.hextooidstr(o);\n var r = KJUR.asn1.x509.OID.oid2name(p);\n if (r == \"\") {\n throw new Error(\"hashAlg name undefined: \" + p);\n }\n var m = r;\n var q = d(n, 0, [1]);\n s.alg = m;\n s.hash = g(n, q);\n return s;\n };\n this.getPKIStatusInfo = function (o) {\n var t = {};\n var r = i(o, 0);\n var n = 0;\n try {\n var l = g(o, r[0]);\n var p = parseInt(l, 16);\n t.status = j[p];\n } catch (s) {}\n if (r.length > 1 && o.substr(r[1], 2) == \"30\") {\n var m = b(o, r[1]);\n t.statusstr = this.getPKIFreeText(m);\n n++;\n }\n if (r.length > n && o.substr(r[1 + n], 2) == \"03\") {\n var q = b(o, r[1 + n]);\n t.failinfo = this.getPKIFailureInfo(q);\n }\n return t;\n };\n this.getPKIFreeText = function (n) {\n var o = [];\n var l = i(n, 0);\n for (var m = 0; m < l.length; m++) {\n o.push(k.getString(n, l[m]));\n }\n return o;\n };\n this.getPKIFailureInfo = function (l) {\n var m = k.getInt(l, 0);\n if (h[m] != undefined) {\n return h[m];\n } else {\n return m;\n }\n };\n this.getTimeStampReq = function (q) {\n var p = {};\n p.certreq = false;\n var s = i(q, 0);\n if (s.length < 2) {\n throw new Error(\"TimeStampReq must have at least 2 items\");\n }\n var n = b(q, s[1]);\n p.messageImprint = KJUR.asn1.tsp.TSPUtil.parseMessageImprint(n);\n for (var o = 2; o < s.length; o++) {\n var m = s[o];\n var l = q.substr(m, 2);\n if (l == \"06\") {\n var r = g(q, m);\n p.policy = k.hextooidstr(r);\n }\n if (l == \"02\") {\n p.nonce = g(q, m);\n }\n if (l == \"01\") {\n p.certreq = true;\n }\n }\n return p;\n };\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) {\n KJUR.asn1 = {};\n}\nif (typeof KJUR.asn1.cades == \"undefined\" || !KJUR.asn1.cades) {\n KJUR.asn1.cades = {};\n}\nKJUR.asn1.cades.SignaturePolicyIdentifier = function (e) {\n var c = KJUR,\n b = c.asn1,\n a = b.cades,\n d = a.SignaturePolicyId;\n a.SignaturePolicyIdentifier.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.16.2.15\";\n this.params = null;\n this.getValueArray = function () {\n return [new d(this.params)];\n };\n this.setByParam = function (f) {\n this.params = f;\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cades.SignaturePolicyIdentifier, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cades.SignaturePolicyId = function (e) {\n var a = KJUR,\n g = a.asn1,\n f = g.DERSequence,\n i = g.DERObjectIdentifier,\n d = g.x509,\n j = d.AlgorithmIdentifier,\n c = g.cades,\n h = c.SignaturePolicyId,\n b = c.OtherHashAlgAndValue;\n h.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var m = this.params;\n var k = [];\n k.push(new i(m.oid));\n k.push(new b(m));\n var l = new f({\n array: k\n });\n return l.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (k) {\n this.params = k;\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cades.SignaturePolicyId, KJUR.asn1.ASN1Object);\nKJUR.asn1.cades.OtherHashAlgAndValue = function (e) {\n var h = Error,\n a = KJUR,\n g = a.asn1,\n f = g.DERSequence,\n i = g.DEROctetString,\n d = g.x509,\n j = d.AlgorithmIdentifier,\n c = g.cades,\n b = c.OtherHashAlgAndValue;\n b.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var o = this.params;\n if (o.alg == undefined) {\n throw new h(\"property 'alg' not specified\");\n }\n if (o.hash == undefined && o.cert == undefined) {\n throw new h(\"property 'hash' nor 'cert' not specified\");\n }\n var m = null;\n if (o.hash != undefined) {\n m = o.hash;\n } else {\n if (o.cert != undefined) {\n if (typeof o.cert != \"string\") {\n throw new h(\"cert not string\");\n }\n var n = o.cert;\n if (o.cert.indexOf(\"-----BEGIN\") != -1) {\n n = pemtohex(o.cert);\n }\n m = KJUR.crypto.Util.hashHex(n, o.alg);\n }\n }\n var k = [];\n k.push(new j({\n name: o.alg\n }));\n k.push(new i({\n hex: m\n }));\n var l = new f({\n array: k\n });\n return l.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cades.OtherHashAlgAndValue, KJUR.asn1.ASN1Object);\nKJUR.asn1.cades.OtherHashValue = function (g) {\n KJUR.asn1.cades.OtherHashValue.superclass.constructor.call(this);\n var d = Error,\n c = KJUR,\n f = c.lang.String.isHex,\n b = c.asn1,\n e = b.DEROctetString,\n a = c.crypto.Util.hashHex;\n this.params = null;\n this.tohex = function () {\n var j = this.params;\n if (j.hash == undefined && j.cert == undefined) {\n throw new d(\"hash or cert not specified\");\n }\n var h = null;\n if (j.hash != undefined) {\n h = j.hash;\n } else {\n if (j.cert != undefined) {\n if (typeof j.cert != \"string\") {\n throw new d(\"cert not string\");\n }\n var i = j.cert;\n if (j.cert.indexOf(\"-----BEGIN\") != -1) {\n i = pemtohex(j.cert);\n }\n h = KJUR.crypto.Util.hashHex(i, \"sha1\");\n }\n }\n return new e({\n hex: h\n }).tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.cades.OtherHashValue, KJUR.asn1.ASN1Object);\nKJUR.asn1.cades.SignatureTimeStamp = function (h) {\n var d = Error,\n c = KJUR,\n f = c.lang.String.isHex,\n b = c.asn1,\n e = b.ASN1Object,\n g = b.x509,\n a = b.cades;\n a.SignatureTimeStamp.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.16.2.14\";\n this.params = null;\n this.getValueArray = function () {\n var l = this.params;\n if (l.tst != undefined) {\n if (f(l.tst)) {\n var j = new e();\n j.hTLV = l.tst;\n return [j];\n } else {\n if (l.tst instanceof e) {\n return [l.tst];\n } else {\n throw new d(\"params.tst has wrong value\");\n }\n }\n } else {\n if (l.res != undefined) {\n var k = l.res;\n if (k instanceof e) {\n k = k.tohex();\n }\n if (typeof k != \"string\" || !f(k)) {\n throw new d(\"params.res has wrong value\");\n }\n var i = ASN1HEX.getTLVbyList(k, 0, [1]);\n var j = new e();\n j.hTLV = l.tst;\n return [j];\n }\n }\n };\n if (h != null) {\n this.setByParam(h);\n }\n};\nextendClass(KJUR.asn1.cades.SignatureTimeStamp, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cades.CompleteCertificateRefs = function (h) {\n var f = Error,\n e = KJUR,\n d = e.asn1,\n b = d.DERSequence,\n c = d.cades,\n a = c.OtherCertID,\n g = e.lang.String.isHex;\n c.CompleteCertificateRefs.superclass.constructor.call(this);\n this.typeOid = \"1.2.840.113549.1.9.16.2.21\";\n this.params = null;\n this.getValueArray = function () {\n var o = this.params;\n var k = [];\n for (var m = 0; m < o.array.length; m++) {\n var n = o.array[m];\n if (typeof n == \"string\") {\n if (n.indexOf(\"-----BEGIN\") != -1) {\n n = {\n cert: n\n };\n } else {\n if (g(n)) {\n n = {\n hash: n\n };\n } else {\n throw new f(\"unsupported value: \" + n);\n }\n }\n }\n if (o.alg != undefined && n.alg == undefined) {\n n.alg = o.alg;\n }\n if (o.hasis != undefined && n.hasis == undefined) {\n n.hasis = o.hasis;\n }\n var j = new a(n);\n k.push(j);\n }\n var l = new b({\n array: k\n });\n return [l];\n };\n if (h != undefined) {\n this.setByParam(h);\n }\n};\nextendClass(KJUR.asn1.cades.CompleteCertificateRefs, KJUR.asn1.cms.Attribute);\nKJUR.asn1.cades.OtherCertID = function (e) {\n var a = KJUR,\n h = a.asn1,\n f = h.DERSequence,\n i = h.cms,\n g = i.IssuerSerial,\n c = h.cades,\n d = c.OtherHashValue,\n b = c.OtherHashAlgAndValue;\n c.OtherCertID.superclass.constructor.call(this);\n this.params = e;\n this.tohex = function () {\n var n = this.params;\n if (typeof n == \"string\") {\n if (n.indexOf(\"-----BEGIN\") != -1) {\n n = {\n cert: n\n };\n } else {\n if (_isHex(n)) {\n n = {\n hash: n\n };\n }\n }\n }\n var j = [];\n var m = null;\n if (n.alg != undefined) {\n m = new b(n);\n } else {\n m = new d(n);\n }\n j.push(m);\n if (n.cert != undefined && n.hasis == true || n.issuer != undefined && n.serial != undefined) {\n var l = new g(n);\n j.push(l);\n }\n var k = new f({\n array: j\n });\n return k.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e != undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.cades.OtherCertID, KJUR.asn1.ASN1Object);\nKJUR.asn1.cades.OtherHash = function (g) {\n var i = Error,\n a = KJUR,\n h = a.asn1,\n j = h.cms,\n c = h.cades,\n b = c.OtherHashAlgAndValue,\n e = c.OtherHashValue,\n d = a.crypto.Util.hashHex,\n f = a.lang.String.isHex;\n c.OtherHash.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var l = this.params;\n if (typeof l == \"string\") {\n if (l.indexOf(\"-----BEGIN\") != -1) {\n l = {\n cert: l\n };\n } else {\n if (f(l)) {\n l = {\n hash: l\n };\n }\n }\n }\n var k = null;\n if (l.alg != undefined) {\n k = new b(l);\n } else {\n k = new e(l);\n }\n return k.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g != undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.cades.OtherHash, KJUR.asn1.ASN1Object);\nKJUR.asn1.cades.CAdESUtil = new function () {}();\nKJUR.asn1.cades.CAdESUtil.parseSignedDataForAddingUnsigned = function (a) {\n var c = new KJUR.asn1.cms.CMSParser();\n var b = c.getCMSSignedData(a);\n return b;\n};\nKJUR.asn1.cades.CAdESUtil.parseSignerInfoForAddingUnsigned = function (g, q, c) {\n var p = ASN1HEX,\n s = p.getChildIdx,\n a = p.getTLV,\n l = p.getV,\n v = KJUR,\n h = v.asn1,\n n = h.ASN1Object,\n j = h.cms,\n k = j.AttributeList,\n w = j.SignerInfo;\n var o = {};\n var t = s(g, q);\n if (t.length != 6) {\n throw \"not supported items for SignerInfo (!=6)\";\n }\n var d = t.shift();\n o.version = a(g, d);\n var e = t.shift();\n o.si = a(g, e);\n var m = t.shift();\n o.digalg = a(g, m);\n var f = t.shift();\n o.sattrs = a(g, f);\n var i = t.shift();\n o.sigalg = a(g, i);\n var b = t.shift();\n o.sig = a(g, b);\n o.sigval = l(g, b);\n var u = null;\n o.obj = new w();\n u = new n();\n u.hTLV = o.version;\n o.obj.dCMSVersion = u;\n u = new n();\n u.hTLV = o.si;\n o.obj.dSignerIdentifier = u;\n u = new n();\n u.hTLV = o.digalg;\n o.obj.dDigestAlgorithm = u;\n u = new n();\n u.hTLV = o.sattrs;\n o.obj.dSignedAttrs = u;\n u = new n();\n u.hTLV = o.sigalg;\n o.obj.dSigAlg = u;\n u = new n();\n u.hTLV = o.sig;\n o.obj.dSig = u;\n o.obj.dUnsignedAttrs = new k();\n return o;\n};\nif (typeof KJUR.asn1.csr == \"undefined\" || !KJUR.asn1.csr) {\n KJUR.asn1.csr = {};\n}\nKJUR.asn1.csr.CertificationRequest = function (g) {\n var d = KJUR,\n c = d.asn1,\n e = c.DERBitString,\n b = c.DERSequence,\n a = c.csr,\n f = c.x509,\n h = a.CertificationRequestInfo;\n a.CertificationRequest.superclass.constructor.call(this);\n this.setByParam = function (i) {\n this.params = i;\n };\n this.sign = function () {\n var j = new h(this.params).tohex();\n var k = new KJUR.crypto.Signature({\n alg: this.params.sigalg\n });\n k.init(this.params.sbjprvkey);\n k.updateHex(j);\n var i = k.sign();\n this.params.sighex = i;\n };\n this.getPEM = function () {\n return hextopem(this.tohex(), \"CERTIFICATE REQUEST\");\n };\n this.tohex = function () {\n var l = this.params;\n var j = new KJUR.asn1.csr.CertificationRequestInfo(this.params);\n var m = new KJUR.asn1.x509.AlgorithmIdentifier({\n name: l.sigalg\n });\n if (l.sighex == undefined && l.sbjprvkey != undefined) {\n this.sign();\n }\n if (l.sighex == undefined) {\n throw new Error(\"sighex or sbjprvkey parameter not defined\");\n }\n var k = new e({\n hex: \"00\" + l.sighex\n });\n var i = new b({\n array: [j, m, k]\n });\n return i.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (g !== undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.csr.CertificationRequest, KJUR.asn1.ASN1Object);\nKJUR.asn1.csr.CertificationRequestInfo = function (f) {\n var b = KJUR,\n j = b.asn1,\n c = j.DERBitString,\n g = j.DERSequence,\n i = j.DERInteger,\n p = j.DERUTF8String,\n d = j.DERTaggedObject,\n h = j.ASN1Util.newObject,\n n = j.csr,\n e = j.x509,\n a = e.X500Name,\n l = e.Extensions,\n o = e.SubjectPublicKeyInfo,\n k = n.AttributeList;\n n.CertificationRequestInfo.superclass.constructor.call(this);\n this.params = null;\n this.setByParam = function (q) {\n if (q != undefined) {\n this.params = q;\n }\n };\n this.tohex = function () {\n var v = this.params;\n var r = [];\n r.push(new i({\n \"int\": 0\n }));\n r.push(new a(v.subject));\n r.push(new o(KEYUTIL.getKey(v.sbjpubkey)));\n if (v.attrs != undefined) {\n var u = m(v.attrs);\n var t = h({\n tag: {\n tage: \"a0\",\n obj: u\n }\n });\n r.push(t);\n } else {\n if (v.extreq != undefined) {\n var q = new l(v.extreq);\n var t = h({\n tag: {\n tage: \"a0\",\n obj: {\n seq: [{\n oid: \"1.2.840.113549.1.9.14\"\n }, {\n set: [q]\n }]\n }\n }\n });\n r.push(t);\n } else {\n r.push(new d({\n tag: \"a0\",\n explicit: false,\n obj: new p({\n str: \"\"\n })\n }));\n }\n }\n var s = new g({\n array: r\n });\n return s.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n function m(s) {\n var w = Error,\n v = KJUR.asn1.x509.Extensions;\n var y = [];\n for (var u = 0; u < s.length; u++) {\n var r = s[u];\n var x = r.attr;\n if (x == \"extensionRequest\") {\n var t = new v(r.ext);\n var q = {\n seq: [{\n oid: \"1.2.840.113549.1.9.14\"\n }, {\n set: [t]\n }]\n };\n y.push(q);\n } else {\n if (x == \"unstructuredName\") {\n var q = {\n seq: [{\n oid: \"1.2.840.113549.1.9.2\"\n }, {\n set: r.names\n }]\n };\n y.push(q);\n } else {\n if (x == \"challengePassword\") {\n var q = {\n seq: [{\n oid: \"1.2.840.113549.1.9.7\"\n }, {\n set: [{\n utf8str: r.password\n }]\n }]\n };\n y.push(q);\n } else {\n throw new w(\"unknown CSR attribute\");\n }\n }\n }\n }\n return {\n set: y\n };\n }\n if (f != undefined) {\n this.setByParam(f);\n }\n};\nextendClass(KJUR.asn1.csr.CertificationRequestInfo, KJUR.asn1.ASN1Object);\nKJUR.asn1.csr.AttributeList = function (b) {\n function a(c) {}\n};\nextendClass(KJUR.asn1.csr.AttributeList, KJUR.asn1.ASN1Object);\nKJUR.asn1.csr.CSRUtil = new function () {}();\nKJUR.asn1.csr.CSRUtil.newCSRPEM = function (e) {\n var b = KEYUTIL,\n a = KJUR.asn1.csr;\n var c = new a.CertificationRequest(e);\n var d = c.getPEM();\n return d;\n};\nKJUR.asn1.csr.CSRUtil.getParam = function (d, a) {\n var m = ASN1HEX,\n i = m.getV,\n j = m.getIdxbyList,\n b = m.getTLVbyList,\n o = m.getTLVbyListEx,\n n = m.getVbyListEx;\n var l = function (u) {\n var t = j(u, 0, [0, 3, 0, 0], \"06\");\n if (i(u, t) != \"2a864886f70d01090e\") {\n return null;\n }\n return b(u, 0, [0, 3, 0, 1, 0], \"30\");\n };\n var g = {};\n if (d.indexOf(\"-----BEGIN CERTIFICATE REQUEST\") == -1) {\n throw new Error(\"argument is not PEM file\");\n }\n var e = pemtohex(d, \"CERTIFICATE REQUEST\");\n if (a) {\n g.tbs = b(e, 0, [0]);\n }\n try {\n var p = o(e, 0, [0, 1]);\n if (p == \"3000\") {\n g.subject = {};\n } else {\n var f = new X509();\n g.subject = f.getX500Name(p);\n }\n } catch (q) {}\n var k = o(e, 0, [0, 2]);\n var r = KEYUTIL.getKey(k, null, \"pkcs8pub\");\n g.sbjpubkey = KEYUTIL.getPEM(r, \"PKCS8PUB\");\n var c = l(e);\n var f = new X509();\n if (c != null) {\n g.extreq = f.getExtParamArray(c);\n }\n try {\n var h = o(e, 0, [1], \"30\");\n var f = new X509();\n g.sigalg = f.getAlgorithmIdentifierName(h);\n } catch (q) {}\n try {\n var s = n(e, 0, [2]);\n g.sighex = s;\n } catch (q) {}\n return g;\n};\nKJUR.asn1.csr.CSRUtil.verifySignature = function (b) {\n try {\n var c = null;\n if (typeof b == \"string\" && b.indexOf(\"-----BEGIN CERTIFICATE REQUEST\") != -1) {\n c = KJUR.asn1.csr.CSRUtil.getParam(b, true);\n } else {\n if (typeof b == \"object\" && b.sbjpubkey != undefined && b.sigalg != undefined && b.sighex != undefined && b.tbs != undefined) {\n c = b;\n }\n }\n if (c == null) {\n return false;\n }\n var d = new KJUR.crypto.Signature({\n alg: c.sigalg\n });\n d.init(c.sbjpubkey);\n d.updateHex(c.tbs);\n return d.verify(c.sighex);\n } catch (a) {\n alert(a);\n return false;\n }\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1) {\n KJUR.asn1 = {};\n}\nif (typeof KJUR.asn1.ocsp == \"undefined\" || !KJUR.asn1.ocsp) {\n KJUR.asn1.ocsp = {};\n}\nKJUR.asn1.ocsp.DEFAULT_HASH = \"sha1\";\nKJUR.asn1.ocsp.OCSPResponse = function (e) {\n KJUR.asn1.ocsp.OCSPResponse.superclass.constructor.call(this);\n var a = KJUR.asn1.DEREnumerated,\n b = KJUR.asn1.ASN1Util.newObject,\n c = KJUR.asn1.ocsp.ResponseBytes;\n var d = [\"successful\", \"malformedRequest\", \"internalError\", \"tryLater\", \"_not_used_\", \"sigRequired\", \"unauthorized\"];\n this.params = null;\n this._getStatusCode = function () {\n var f = this.params.resstatus;\n if (typeof f == \"number\") {\n return f;\n }\n if (typeof f != \"string\") {\n return -1;\n }\n return d.indexOf(f);\n };\n this.setByParam = function (f) {\n this.params = f;\n };\n this.tohex = function () {\n var h = this.params;\n var g = this._getStatusCode();\n if (g == -1) {\n throw new Error(\"responseStatus not supported: \" + h.resstatus);\n }\n if (g != 0) {\n return b({\n seq: [{\n \"enum\": {\n \"int\": g\n }\n }]\n }).tohex();\n }\n var f = new c(h);\n return b({\n seq: [{\n \"enum\": {\n \"int\": 0\n }\n }, {\n tag: {\n tag: \"a0\",\n explicit: true,\n obj: f\n }\n }]\n }).tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.ocsp.OCSPResponse, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.ResponseBytes = function (e) {\n KJUR.asn1.ocsp.ResponseBytes.superclass.constructor.call(this);\n var b = KJUR.asn1,\n a = b.DERSequence,\n f = b.DERObjectIdentifier,\n c = b.DEROctetString,\n d = b.ocsp.BasicOCSPResponse;\n this.params = null;\n this.setByParam = function (g) {\n this.params = g;\n };\n this.tohex = function () {\n var j = this.params;\n if (j.restype != \"ocspBasic\") {\n throw new Error(\"not supported responseType: \" + j.restype);\n }\n var i = new d(j);\n var g = [];\n g.push(new f({\n name: \"ocspBasic\"\n }));\n g.push(new c({\n hex: i.tohex()\n }));\n var h = new a({\n array: g\n });\n return h.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.ocsp.ResponseBytes, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.BasicOCSPResponse = function (d) {\n KJUR.asn1.ocsp.BasicOCSPResponse.superclass.constructor.call(this);\n var i = Error,\n g = KJUR.asn1,\n j = g.ASN1Object,\n e = g.DERSequence,\n f = g.DERGeneralizedTime,\n c = g.DERTaggedObject,\n b = g.DERBitString,\n h = g.x509.Extensions,\n k = g.x509.AlgorithmIdentifier,\n l = g.ocsp,\n a = l.ResponderID;\n _SingleResponseList = l.SingleResponseList, _ResponseData = l.ResponseData;\n this.params = null;\n this.setByParam = function (m) {\n this.params = m;\n };\n this.sign = function () {\n var o = this.params;\n var m = o.tbsresp.tohex();\n var n = new KJUR.crypto.Signature({\n alg: o.sigalg\n });\n n.init(o.reskey);\n n.updateHex(m);\n o.sighex = n.sign();\n };\n this.tohex = function () {\n var t = this.params;\n if (t.tbsresp == undefined) {\n t.tbsresp = new _ResponseData(t);\n }\n if (t.sighex == undefined && t.reskey != undefined) {\n this.sign();\n }\n var n = [];\n n.push(t.tbsresp);\n n.push(new k({\n name: t.sigalg\n }));\n n.push(new b({\n hex: \"00\" + t.sighex\n }));\n if (t.certs != undefined && t.certs.length != undefined) {\n var m = [];\n for (var q = 0; q < t.certs.length; q++) {\n var s = t.certs[q];\n var r = null;\n if (ASN1HEX.isASN1HEX(s)) {\n r = s;\n } else {\n if (s.match(/-----BEGIN/)) {\n r = pemtohex(s);\n } else {\n throw new i(\"certs[\" + q + \"] not hex or PEM\");\n }\n }\n m.push(new j({\n tlv: r\n }));\n }\n var p = new e({\n array: m\n });\n n.push(new c({\n tag: \"a0\",\n explicit: true,\n obj: p\n }));\n }\n var o = new e({\n array: n\n });\n return o.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (d !== undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.ocsp.BasicOCSPResponse, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.ResponseData = function (c) {\n KJUR.asn1.ocsp.ResponseData.superclass.constructor.call(this);\n var h = Error,\n f = KJUR.asn1,\n d = f.DERSequence,\n e = f.DERGeneralizedTime,\n b = f.DERTaggedObject,\n g = f.x509.Extensions,\n i = f.ocsp,\n a = i.ResponderID;\n _SingleResponseList = i.SingleResponseList;\n this.params = null;\n this.tohex = function () {\n var m = this.params;\n if (m.respid != undefined) {\n new h(\"respid not specified\");\n }\n if (m.prodat != undefined) {\n new h(\"prodat not specified\");\n }\n if (m.array != undefined) {\n new h(\"array not specified\");\n }\n var j = [];\n j.push(new a(m.respid));\n j.push(new e(m.prodat));\n j.push(new _SingleResponseList(m.array));\n if (m.ext != undefined) {\n var l = new g(m.ext);\n j.push(new b({\n tag: \"a1\",\n explicit: true,\n obj: l\n }));\n }\n var k = new d({\n array: j\n });\n return k.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (j) {\n this.params = j;\n };\n if (c !== undefined) {\n this.setByParam(c);\n }\n};\nextendClass(KJUR.asn1.ocsp.ResponseData, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.ResponderID = function (g) {\n KJUR.asn1.ocsp.ResponderID.superclass.constructor.call(this);\n var d = KJUR,\n c = d.asn1,\n b = c.ASN1Util.newObject,\n f = c.x509.X500Name,\n e = d.lang.String.isHex,\n a = Error;\n this.params = null;\n this.tohex = function () {\n var m = this.params;\n if (m.key != undefined) {\n var l = null;\n if (typeof m.key == \"string\") {\n if (e(m.key)) {\n l = m.key;\n }\n if (m.key.match(/-----BEGIN CERTIFICATE/)) {\n var h = new X509(m.key);\n var k = h.getExtSubjectKeyIdentifier();\n if (k != null) {\n l = k.kid.hex;\n }\n }\n } else {\n if (m.key instanceof X509) {\n var k = m.key.getExtSubjectKeyIdentifier();\n if (k != null) {\n l = k.kid.hex;\n }\n }\n }\n if (l == null) {\n throw new a(\"wrong key member value\");\n }\n var j = b({\n tag: {\n tag: \"a2\",\n explicit: true,\n obj: {\n octstr: {\n hex: l\n }\n }\n }\n });\n return j.tohex();\n } else {\n if (m.name != undefined) {\n var i = null;\n if (typeof m.name == \"string\" && m.name.match(/-----BEGIN CERTIFICATE/)) {\n var h = new X509(m.name);\n i = h.getSubject();\n } else {\n if (m.name instanceof X509) {\n i = m.name.getSubject();\n } else {\n if (typeof m.name == \"object\" && (m.name.array != undefined || m.name.str != undefined)) {\n i = m.name;\n }\n }\n }\n if (i == null) {\n throw new a(\"wrong name member value\");\n }\n var j = b({\n tag: {\n tag: \"a1\",\n explicit: true,\n obj: new f(i)\n }\n });\n return j.tohex();\n }\n }\n throw new a(\"key or name not specified\");\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (h) {\n this.params = h;\n };\n if (g !== undefined) {\n this.setByParam(g);\n }\n};\nextendClass(KJUR.asn1.ocsp.ResponderID, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.SingleResponseList = function (d) {\n KJUR.asn1.ocsp.SingleResponseList.superclass.constructor.call(this);\n var c = KJUR.asn1,\n b = c.DERSequence,\n a = c.ocsp.SingleResponse;\n this.params = null;\n this.tohex = function () {\n var h = this.params;\n if (typeof h != \"object\" || h.length == undefined) {\n throw new Error(\"params not specified properly\");\n }\n var e = [];\n for (var g = 0; g < h.length; g++) {\n e.push(new a(h[g]));\n }\n var f = new b({\n array: e\n });\n return f.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (e) {\n this.params = e;\n };\n if (d !== undefined) {\n this.setByParam(d);\n }\n};\nextendClass(KJUR.asn1.ocsp.SingleResponseList, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.SingleResponse = function (e) {\n var k = Error,\n a = KJUR,\n i = a.asn1,\n f = i.DERSequence,\n g = i.DERGeneralizedTime,\n b = i.DERTaggedObject,\n l = i.ocsp,\n h = l.CertID,\n c = l.CertStatus,\n d = i.x509,\n j = d.Extensions;\n l.SingleResponse.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var q = this.params;\n var n = [];\n if (q.certid == undefined) {\n throw new k(\"certid unspecified\");\n }\n if (q.status == undefined) {\n throw new k(\"status unspecified\");\n }\n if (q.thisupdate == undefined) {\n throw new k(\"thisupdate unspecified\");\n }\n n.push(new h(q.certid));\n n.push(new c(q.status));\n n.push(new g(q.thisupdate));\n if (q.nextupdate != undefined) {\n var m = new g(q.nextupdate);\n n.push(new b({\n tag: \"a0\",\n explicit: true,\n obj: m\n }));\n }\n if (q.ext != undefined) {\n var p = new j(q.ext);\n n.push(new b({\n tag: \"a1\",\n explicit: true,\n obj: p\n }));\n }\n var o = new f({\n array: n\n });\n return o.tohex();\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (m) {\n this.params = m;\n };\n if (e !== undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.ocsp.SingleResponse, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.CertID = function (e) {\n var b = KJUR,\n i = b.asn1,\n l = i.DEROctetString,\n h = i.DERInteger,\n f = i.DERSequence,\n d = i.x509,\n m = d.AlgorithmIdentifier,\n n = i.ocsp,\n k = n.DEFAULT_HASH,\n g = b.crypto,\n c = g.Util.hashHex,\n a = X509,\n o = ASN1HEX,\n j = o.getVbyList;\n n.CertID.superclass.constructor.call(this);\n this.DEFAULT_HASH = \"sha1\";\n this.params = null;\n this.setByValue = function (s, r, p, q) {\n if (q == undefined) {\n q = this.DEFAULT_HASH;\n }\n this.params = {\n alg: q,\n issname: s,\n isskey: r,\n sbjsn: p\n };\n };\n this.setByCert = function (p, q, r) {\n if (r == undefined) {\n r = this.DEFAULT_HASH;\n }\n this.params = {\n alg: r,\n issuerCert: p,\n subjectCert: q\n };\n };\n this.getParamByCerts = function (y, x, t) {\n if (t == undefined) {\n t = this.DEFAULT_HASH;\n }\n var q = new a(y);\n var v = new a(x);\n var s = c(q.getSubjectHex(), t);\n var u = q.getPublicKeyHex();\n var p = c(j(u, 0, [1], \"03\", true), t);\n var w = v.getSerialNumberHex();\n var r = {\n alg: t,\n issname: s,\n isskey: p,\n sbjsn: w\n };\n return r;\n };\n this.tohex = function () {\n if (typeof this.params != \"object\") {\n throw new Error(\"params not set\");\n }\n var s = this.params;\n var u, r, y, q;\n if (s.alg == undefined) {\n q = this.DEFAULT_HASH;\n } else {\n q = s.alg;\n }\n if (s.issuerCert != undefined && s.subjectCert != undefined) {\n var t = this.getParamByCerts(s.issuerCert, s.subjectCert, q);\n u = t.issname;\n r = t.isskey;\n y = t.sbjsn;\n } else {\n if (s.issname != undefined && s.isskey != undefined && s.sbjsn != undefined) {\n u = s.issname;\n r = s.isskey;\n y = s.sbjsn;\n } else {\n throw new Error(\"required param members not defined\");\n }\n }\n var A = new m({\n name: q\n });\n var v = new l({\n hex: u\n });\n var x = new l({\n hex: r\n });\n var w = new h({\n hex: y\n });\n var z = new f({\n array: [A, v, x, w]\n });\n this.hTLV = z.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n this.setByParam(e);\n }\n};\nextendClass(KJUR.asn1.ocsp.CertID, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.CertStatus = function (a) {\n KJUR.asn1.ocsp.CertStatus.superclass.constructor.call(this);\n this.params = null;\n this.tohex = function () {\n var d = this.params;\n if (d.status == \"good\") {\n return \"8000\";\n }\n if (d.status == \"unknown\") {\n return \"8200\";\n }\n if (d.status == \"revoked\") {\n var c = [{\n gentime: {\n str: d.time\n }\n }];\n if (d.reason != undefined) {\n c.push({\n tag: {\n tag: \"a0\",\n explicit: true,\n obj: {\n \"enum\": {\n \"int\": d.reason\n }\n }\n }\n });\n }\n var b = {\n tag: \"a1\",\n explicit: false,\n obj: {\n seq: c\n }\n };\n return KJUR.asn1.ASN1Util.newObject({\n tag: b\n }).tohex();\n }\n throw new Error(\"bad status\");\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n this.setByParam = function (b) {\n this.params = b;\n };\n if (a !== undefined) {\n this.setByParam(a);\n }\n};\nextendClass(KJUR.asn1.ocsp.CertStatus, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.Request = function (f) {\n var c = KJUR,\n b = c.asn1,\n a = b.DERSequence,\n d = b.ocsp;\n d.Request.superclass.constructor.call(this);\n this.dReqCert = null;\n this.dExt = null;\n this.tohex = function () {\n var g = [];\n if (this.dReqCert === null) {\n throw \"reqCert not set\";\n }\n g.push(this.dReqCert);\n var h = new a({\n array: g\n });\n this.hTLV = h.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (typeof f !== \"undefined\") {\n var e = new d.CertID(f);\n this.dReqCert = e;\n }\n};\nextendClass(KJUR.asn1.ocsp.Request, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.TBSRequest = function (e) {\n var c = KJUR,\n b = c.asn1,\n a = b.DERSequence,\n d = b.ocsp;\n d.TBSRequest.superclass.constructor.call(this);\n this.version = 0;\n this.dRequestorName = null;\n this.dRequestList = [];\n this.dRequestExt = null;\n this.setRequestListByParam = function (h) {\n var f = [];\n for (var g = 0; g < h.length; g++) {\n var j = new d.Request(h[0]);\n f.push(j);\n }\n this.dRequestList = f;\n };\n this.tohex = function () {\n var f = [];\n if (this.version !== 0) {\n throw \"not supported version: \" + this.version;\n }\n if (this.dRequestorName !== null) {\n throw \"requestorName not supported\";\n }\n var h = new a({\n array: this.dRequestList\n });\n f.push(h);\n if (this.dRequestExt !== null) {\n throw \"requestExtensions not supported\";\n }\n var g = new a({\n array: f\n });\n this.hTLV = g.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (e !== undefined) {\n if (e.reqList !== undefined) {\n this.setRequestListByParam(e.reqList);\n }\n }\n};\nextendClass(KJUR.asn1.ocsp.TBSRequest, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.OCSPRequest = function (f) {\n var c = KJUR,\n b = c.asn1,\n a = b.DERSequence,\n d = b.ocsp;\n d.OCSPRequest.superclass.constructor.call(this);\n this.dTbsRequest = null;\n this.dOptionalSignature = null;\n this.tohex = function () {\n var g = [];\n if (this.dTbsRequest !== null) {\n g.push(this.dTbsRequest);\n } else {\n throw \"tbsRequest not set\";\n }\n if (this.dOptionalSignature !== null) {\n throw \"optionalSignature not supported\";\n }\n var h = new a({\n array: g\n });\n this.hTLV = h.tohex();\n return this.hTLV;\n };\n this.getEncodedHex = function () {\n return this.tohex();\n };\n if (f !== undefined) {\n if (f.reqList !== undefined) {\n var e = new d.TBSRequest(f);\n this.dTbsRequest = e;\n }\n }\n};\nextendClass(KJUR.asn1.ocsp.OCSPRequest, KJUR.asn1.ASN1Object);\nKJUR.asn1.ocsp.OCSPUtil = {};\nKJUR.asn1.ocsp.OCSPUtil.getRequestHex = function (a, b, h) {\n var d = KJUR,\n c = d.asn1,\n e = c.ocsp;\n if (h === undefined) {\n h = e.DEFAULT_HASH;\n }\n var g = {\n alg: h,\n issuerCert: a,\n subjectCert: b\n };\n var f = new e.OCSPRequest({\n reqList: [g]\n });\n return f.tohex();\n};\nKJUR.asn1.ocsp.OCSPUtil.getOCSPResponseInfo = function (b) {\n var m = ASN1HEX,\n c = m.getVbyList,\n k = m.getVbyListEx,\n e = m.getIdxbyList,\n d = m.getIdxbyListEx,\n g = m.getV;\n var n = {};\n try {\n var j = k(b, 0, [0], \"0a\");\n n.responseStatus = parseInt(j, 16);\n } catch (f) {}\n if (n.responseStatus !== 0) {\n return n;\n }\n try {\n var i = e(b, 0, [1, 0, 1, 0, 0, 2, 0, 1]);\n if (b.substr(i, 2) === \"80\") {\n n.certStatus = \"good\";\n } else {\n if (b.substr(i, 2) === \"a1\") {\n n.certStatus = \"revoked\";\n n.revocationTime = hextoutf8(c(b, i, [0]));\n } else {\n if (b.substr(i, 2) === \"82\") {\n n.certStatus = \"unknown\";\n }\n }\n }\n } catch (f) {}\n try {\n var a = e(b, 0, [1, 0, 1, 0, 0, 2, 0, 2]);\n n.thisUpdate = hextoutf8(g(b, a));\n } catch (f) {}\n try {\n var l = e(b, 0, [1, 0, 1, 0, 0, 2, 0, 3]);\n if (b.substr(l, 2) === \"a0\") {\n n.nextUpdate = hextoutf8(c(b, l, [0]));\n }\n } catch (f) {}\n return n;\n};\nKJUR.asn1.ocsp.OCSPParser = function () {\n var g = Error,\n a = X509,\n h = new a(),\n l = ASN1HEX,\n i = l.getV,\n b = l.getTLV,\n f = l.getIdxbyList,\n e = l.getVbyList,\n c = l.getTLVbyList,\n k = l.getVbyListEx,\n d = l.getTLVbyListEx,\n j = l.getChildIdx;\n this.getOCSPRequest = function (o) {\n var n = j(o, 0);\n if (n.length != 1 && n.length != 2) {\n throw new g(\"wrong number elements: \" + n.length);\n }\n var m = this.getTBSRequest(b(o, n[0]));\n return m;\n };\n this.getTBSRequest = function (o) {\n var m = {};\n var n = d(o, 0, [0], \"30\");\n m.array = this.getRequestList(n);\n var p = d(o, 0, [\"[2]\", 0], \"30\");\n if (p != null) {\n m.ext = h.getExtParamArray(p);\n }\n return m;\n };\n this.getRequestList = function (p) {\n var m = [];\n var n = j(p, 0);\n for (var o = 0; o < n.length; o++) {\n var p = b(p, n[o]);\n m.push(this.getRequest(p));\n }\n return m;\n };\n this.getRequest = function (n) {\n var m = j(n, 0);\n if (m.length != 1 && m.length != 2) {\n throw new g(\"wrong number elements: \" + m.length);\n }\n var p = this.getCertID(b(n, m[0]));\n if (m.length == 2) {\n var o = f(n, 0, [1, 0]);\n p.ext = h.getExtParamArray(b(n, o));\n }\n return p;\n };\n this.getCertID = function (p) {\n var o = j(p, 0);\n if (o.length != 4) {\n throw new g(\"wrong number elements: \" + o.length);\n }\n var n = new a();\n var m = {};\n m.alg = n.getAlgorithmIdentifierName(b(p, o[0]));\n m.issname = i(p, o[1]);\n m.isskey = i(p, o[2]);\n m.sbjsn = i(p, o[3]);\n return m;\n };\n this.getOCSPResponse = function (r) {\n var o = j(r, 0);\n var m;\n var q = i(r, o[0]);\n var p = parseInt(q);\n if (o.length == 1) {\n return {\n resstatus: p\n };\n }\n var n = c(r, 0, [1, 0]);\n m = this.getResponseBytes(n);\n m.resstatus = p;\n return m;\n };\n this.getResponseBytes = function (p) {\n var o = j(p, 0);\n var n;\n var q = c(p, 0, [1, 0]);\n n = this.getBasicOCSPResponse(q);\n var m = i(p, o[0]);\n n.restype = KJUR.asn1.x509.OID.oid2name(hextooid(m));\n return n;\n };\n this.getBasicOCSPResponse = function (q) {\n var t = j(q, 0);\n var v;\n v = this.getResponseData(b(q, t[0]));\n var u = new X509();\n v.alg = u.getAlgorithmIdentifierName(b(q, t[1]));\n var n = i(q, t[2]);\n v.sighex = n.substr(2);\n var m = k(q, 0, [\"[0]\"]);\n if (m != null) {\n var r = j(m, 0);\n var o = [];\n for (var p = 0; p < r.length; p++) {\n var s = b(m, r[p]);\n o.push(s);\n }\n v.certs = o;\n }\n return v;\n };\n this.getResponseData = function (q) {\n var p = j(q, 0);\n var r = p.length;\n var o = {};\n var n = 0;\n if (q.substr(p[0], 2) == \"a0\") {\n n++;\n }\n o.respid = this.getResponderID(b(q, p[n++]));\n var t = i(q, p[n++]);\n o.prodat = hextoutf8(t);\n o.array = this.getSingleResponseList(b(q, p[n++]));\n if (q.substr(p[r - 1], 2) == \"a1\") {\n var s = c(q, p[r - 1], [0]);\n var m = new X509();\n o.ext = m.getExtParamArray(s);\n }\n return o;\n };\n this.getResponderID = function (o) {\n var n = {};\n if (o.substr(0, 2) == \"a2\") {\n var p = e(o, 0, [0]);\n n.key = p;\n }\n if (o.substr(0, 2) == \"a1\") {\n var q = c(o, 0, [0]);\n var m = new X509();\n n.name = m.getX500Name(q);\n }\n return n;\n };\n this.getSingleResponseList = function (q) {\n var n = j(q, 0);\n var m = [];\n for (var o = 0; o < n.length; o++) {\n var r = this.getSingleResponse(b(q, n[o]));\n m.push(r);\n }\n return m;\n };\n this.getSingleResponse = function (p) {\n var t = j(p, 0);\n var v = {};\n var r = this.getCertID(b(p, t[0]));\n v.certid = r;\n var u = this.getCertStatus(b(p, t[1]));\n v.status = u;\n if (p.substr(t[2], 2) == \"18\") {\n var q = i(p, t[2]);\n v.thisupdate = hextoutf8(q);\n }\n for (var o = 3; o < t.length; o++) {\n if (p.substr(t[o], 2) == \"a0\") {\n var m = e(p, t[o], [0], \"18\");\n v.nextupdate = hextoutf8(m);\n }\n if (p.substr(t[o], 2) == \"a1\") {\n var s = new X509();\n var n = c(p, 0, [o, 0]);\n v.ext = s.getExtParamArray(n);\n }\n }\n return v;\n };\n this.getCertStatus = function (p) {\n var m = {};\n if (p == \"8000\") {\n return {\n status: \"good\"\n };\n }\n if (p == \"8200\") {\n return {\n status: \"unknown\"\n };\n }\n if (p.substr(0, 2) == \"a1\") {\n m.status = \"revoked\";\n var o = e(p, 0, [0]);\n var n = hextoutf8(o);\n m.time = n;\n }\n return m;\n };\n};\nvar KJUR;\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.lang == \"undefined\" || !KJUR.lang) {\n KJUR.lang = {};\n}\nKJUR.lang.String = function () {};\nfunction Base64x() {}\nfunction stoBA(d) {\n var b = new Array();\n for (var c = 0; c < d.length; c++) {\n b[c] = d.charCodeAt(c);\n }\n return b;\n}\nfunction BAtos(b) {\n var d = \"\";\n for (var c = 0; c < b.length; c++) {\n d = d + String.fromCharCode(b[c]);\n }\n return d;\n}\nfunction BAtohex(b) {\n var e = \"\";\n for (var d = 0; d < b.length; d++) {\n var c = b[d].toString(16);\n if (c.length == 1) {\n c = \"0\" + c;\n }\n e = e + c;\n }\n return e;\n}\nfunction stohex(a) {\n return BAtohex(stoBA(a));\n}\nfunction stob64(a) {\n return hex2b64(stohex(a));\n}\nfunction stob64u(a) {\n return b64tob64u(hex2b64(stohex(a)));\n}\nfunction b64utos(a) {\n return BAtos(b64toBA(b64utob64(a)));\n}\nfunction b64tob64u(a) {\n a = a.replace(/\\=/g, \"\");\n a = a.replace(/\\+/g, \"-\");\n a = a.replace(/\\//g, \"_\");\n return a;\n}\nfunction b64utob64(a) {\n if (a.length % 4 == 2) {\n a = a + \"==\";\n } else {\n if (a.length % 4 == 3) {\n a = a + \"=\";\n }\n }\n a = a.replace(/-/g, \"+\");\n a = a.replace(/_/g, \"/\");\n return a;\n}\nfunction hextob64u(a) {\n if (a.length % 2 == 1) {\n a = \"0\" + a;\n }\n return b64tob64u(hex2b64(a));\n}\nfunction b64utohex(a) {\n return b64tohex(b64utob64(a));\n}\nvar utf8tob64u, b64utoutf8;\nif (typeof Buffer === \"function\") {\n utf8tob64u = function (a) {\n return b64tob64u(Buffer.from(a, \"utf8\").toString(\"base64\"));\n };\n b64utoutf8 = function (a) {\n return Buffer.from(b64utob64(a), \"base64\").toString(\"utf8\");\n };\n} else {\n utf8tob64u = function (a) {\n return hextob64u(uricmptohex(encodeURIComponentAll(a)));\n };\n b64utoutf8 = function (a) {\n return decodeURIComponent(hextouricmp(b64utohex(a)));\n };\n}\nfunction utf8tob64(a) {\n return hex2b64(uricmptohex(encodeURIComponentAll(a)));\n}\nfunction b64toutf8(a) {\n return decodeURIComponent(hextouricmp(b64tohex(a)));\n}\nfunction utf8tohex(a) {\n return uricmptohex(encodeURIComponentAll(a)).toLowerCase();\n}\nfunction hextoutf8(b) {\n try {\n return decodeURIComponent(hextouricmp(b));\n } catch (a) {\n return null;\n }\n}\nfunction iso88591hextoutf8(a) {\n return hextoutf8(iso88591hextoutf8hex(a));\n}\nfunction utf8toiso88591hex(a) {\n return utf8hextoiso88591hex(utf8tohex(a));\n}\nfunction iso88591hextoutf8hex(e) {\n var c = e.match(/.{1,2}/g);\n var b = [];\n for (var d = 0; d < c.length; d++) {\n var f = parseInt(c[d], 16);\n if (161 <= f && f <= 191) {\n b.push(\"c2\");\n b.push(c[d]);\n } else {\n if (192 <= f && f <= 255) {\n b.push(\"c3\");\n b.push((f - 64).toString(16));\n } else {\n b.push(c[d]);\n }\n }\n }\n return b.join(\"\");\n}\nfunction utf8hextoiso88591hex(f) {\n var c = f.match(/.{1,2}/g);\n var b = [];\n for (var e = 0; e < c.length; e++) {\n if (c[e] == \"c2\") {\n e++;\n b.push(c[e]);\n } else {\n if (c[e] == \"c3\") {\n e++;\n var d = c[e];\n var g = parseInt(c[e], 16) + 64;\n b.push(g.toString(16));\n } else {\n b.push(c[e]);\n }\n }\n }\n return b.join(\"\");\n}\nfunction hextorstr(c) {\n var b = \"\";\n for (var a = 0; a < c.length - 1; a += 2) {\n b += String.fromCharCode(parseInt(c.substr(a, 2), 16));\n }\n return b;\n}\nfunction rstrtohex(c) {\n var a = \"\";\n for (var b = 0; b < c.length; b++) {\n a += (\"0\" + c.charCodeAt(b).toString(16)).slice(-2);\n }\n return a;\n}\nfunction hextob64(a) {\n return hex2b64(a);\n}\nfunction hextob64nl(a) {\n return foldnl(hextob64(a), 64);\n}\nfunction foldnl(a, b) {\n a = a.replace(new RegExp(\"(.{\" + b + \"})\", \"g\"), \"$1\\r\\n\");\n a = a.replace(/\\s+$/, \"\");\n return a;\n}\nfunction b64nltohex(b) {\n var a = b.replace(/[^0-9A-Za-z\\/+=]*/g, \"\");\n var c = b64tohex(a);\n return c;\n}\nfunction b64topem(b, a) {\n return \"-----BEGIN \" + a + \"-----\\r\\n\" + foldnl(b, 64) + \"\\r\\n-----END \" + a + \"-----\\r\\n\";\n}\nfunction hextopem(a, b) {\n return \"-----BEGIN \" + b + \"-----\\r\\n\" + foldnl(hextob64(a), 64) + \"\\r\\n-----END \" + b + \"-----\\r\\n\";\n}\nfunction pemtohex(a, b) {\n if (a.indexOf(\"-----BEGIN \") == -1) {\n throw new Error(\"can't find PEM header\");\n }\n if (b !== undefined) {\n a = a.replace(new RegExp(\"^[^]*-----BEGIN \" + b + \"-----\"), \"\");\n a = a.replace(new RegExp(\"-----END \" + b + \"-----[^]*$\"), \"\");\n } else {\n a = a.replace(/^[^]*-----BEGIN [^-]+-----/, \"\");\n a = a.replace(/-----END [^-]+-----[^]*$/, \"\");\n }\n return b64nltohex(a);\n}\nfunction pemtob64(a) {\n if (a.indexOf(\"-----BEGIN \") == -1 || a.indexOf(\"-----END \") == -1) {\n return null;\n }\n a = a.replace(/^[\\s\\S]*?-----BEGIN [^-]+-----/m, \"\");\n a = a.replace(/-----END [\\s\\S]+$/m, \"\");\n a = a.replace(/\\s+/g, \"\");\n return a.match(/^[0-9a-zA-Z+/=]+$/) ? a : null;\n}\nfunction hextoArrayBuffer(d) {\n if (d.length % 2 != 0) {\n throw \"input is not even length\";\n }\n if (d.match(/^[0-9A-Fa-f]+$/) == null) {\n throw \"input is not hexadecimal\";\n }\n var b = new ArrayBuffer(d.length / 2);\n var a = new DataView(b);\n for (var c = 0; c < d.length / 2; c++) {\n a.setUint8(c, parseInt(d.substr(c * 2, 2), 16));\n }\n return b;\n}\nfunction ArrayBuffertohex(b) {\n var d = \"\";\n var a = new DataView(b);\n for (var c = 0; c < b.byteLength; c++) {\n d += (\"00\" + a.getUint8(c).toString(16)).slice(-2);\n }\n return d;\n}\nfunction zulutomsec(n) {\n var l, j, m, e, f, i, b, k;\n var a, h, g, c;\n n = timetogen(n);\n c = n.match(/^(\\d{4})(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(\\d\\d)(|\\.\\d+)Z$/);\n if (c) {\n l = parseInt(c[1]);\n j = parseInt(c[2]) - 1;\n m = parseInt(c[3]);\n e = parseInt(c[4]);\n f = parseInt(c[5]);\n i = parseInt(c[6]);\n b = 0;\n h = c[7];\n if (h !== \"\") {\n g = (h.substr(1) + \"00\").substr(0, 3);\n b = parseInt(g);\n }\n return Date.UTC(l, j, m, e, f, i, b);\n }\n throw new Error(\"unsupported zulu format: \" + n);\n}\nfunction msectozulu(b) {\n var h = new Date(b),\n i = (\"0000\" + h.getUTCFullYear()).slice(-4),\n c = (\"00\" + (h.getUTCMonth() + 1)).slice(-2),\n j = (\"00\" + h.getUTCDate()).slice(-2),\n e = (\"00\" + h.getUTCHours()).slice(-2),\n f = (\"00\" + h.getUTCMinutes()).slice(-2),\n g = (\"00\" + h.getUTCSeconds()).slice(-2),\n a = (\"000\" + h.getUTCMilliseconds()).slice(-3);\n a = a.replace(/0+$/, \"\");\n a = a != \"\" ? \".\" + a : a;\n return i + c + j + e + f + g + a + \"Z\";\n}\nfunction zulutosec(a) {\n return Math.round(zulutomsec(a) / 1000);\n}\nfunction zulutodate(a) {\n return new Date(zulutomsec(a));\n}\nfunction datetozulu(g, e, f) {\n var b;\n var a = g.getUTCFullYear();\n if (e) {\n if (a < 1950 || 2049 < a) {\n throw \"not proper year for UTCTime: \" + a;\n }\n b = (\"\" + a).slice(-2);\n } else {\n b = (\"000\" + a).slice(-4);\n }\n b += (\"0\" + (g.getUTCMonth() + 1)).slice(-2);\n b += (\"0\" + g.getUTCDate()).slice(-2);\n b += (\"0\" + g.getUTCHours()).slice(-2);\n b += (\"0\" + g.getUTCMinutes()).slice(-2);\n b += (\"0\" + g.getUTCSeconds()).slice(-2);\n if (f) {\n var c = g.getUTCMilliseconds();\n if (c !== 0) {\n c = (\"00\" + c).slice(-3);\n c = c.replace(/0+$/g, \"\");\n b += \".\" + c;\n }\n }\n b += \"Z\";\n return b;\n}\nfunction timetogen(a) {\n if (a.match(/^[0-9]{12}Z$/) || a.match(/^[0-9]{12}[.][0-9]*Z$/)) {\n return a.match(/^[0-4]/) ? \"20\" + a : \"19\" + a;\n }\n return a;\n}\nfunction uricmptohex(a) {\n return a.replace(/%/g, \"\");\n}\nfunction hextouricmp(a) {\n return a.replace(/(..)/g, \"%$1\");\n}\nfunction ipv6tohex(g) {\n var b = \"malformed IPv6 address\";\n if (!g.match(/^[0-9A-Fa-f:]+$/)) {\n throw b;\n }\n g = g.toLowerCase();\n var d = g.split(\":\").length - 1;\n if (d < 2) {\n throw b;\n }\n var e = \":\".repeat(7 - d + 2);\n g = g.replace(\"::\", e);\n var c = g.split(\":\");\n if (c.length != 8) {\n throw b;\n }\n for (var f = 0; f < 8; f++) {\n c[f] = (\"0000\" + c[f]).slice(-4);\n }\n return c.join(\"\");\n}\nfunction hextoipv6(d) {\n if (!d.match(/^[0-9A-Fa-f]{32}$/)) {\n throw new Error(\"malformed IPv6 address: \" + d);\n }\n d = d.toLowerCase();\n var b = d.match(/.{1,4}/g);\n b = b.map(function (a) {\n return a.replace(/^0+/, \"\");\n });\n b = b.map(function (a) {\n return a == \"\" ? \"0\" : a;\n });\n d = \":\" + b.join(\":\") + \":\";\n var c = d.match(/:(0:){2,}/g);\n if (c == null) {\n return d.slice(1, -1);\n }\n var e = c.sort().slice(-1)[0];\n d = d.replace(e.substr(0, e.length - 1), \":\");\n if (d.substr(0, 2) != \"::\") {\n d = d.substr(1);\n }\n if (d.substr(-2, 2) != \"::\") {\n d = d.substr(0, d.length - 1);\n }\n return d;\n}\nfunction hextoip(b) {\n var c = new Error(\"malformed hex value\");\n if (!b.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/)) {\n throw c;\n }\n if (b.length == 8) {\n var d;\n try {\n d = parseInt(b.substr(0, 2), 16) + \".\" + parseInt(b.substr(2, 2), 16) + \".\" + parseInt(b.substr(4, 2), 16) + \".\" + parseInt(b.substr(6, 2), 16);\n return d;\n } catch (a) {\n throw c;\n }\n } else {\n if (b.length == 16) {\n try {\n return hextoip(b.substr(0, 8)) + \"/\" + ipprefixlen(b.substr(8));\n } catch (a) {\n throw c;\n }\n } else {\n if (b.length == 32) {\n return hextoipv6(b);\n } else {\n if (b.length == 64) {\n try {\n return hextoipv6(b.substr(0, 32)) + \"/\" + ipprefixlen(b.substr(32));\n } catch (a) {\n throw c;\n }\n return;\n } else {\n return b;\n }\n }\n }\n }\n}\nfunction ipprefixlen(c) {\n var d = new Error(\"malformed mask\");\n var a;\n try {\n a = new BigInteger(c, 16).toString(2);\n } catch (b) {\n throw d;\n }\n if (!a.match(/^1*0*$/)) {\n throw d;\n }\n return a.replace(/0+$/, \"\").length;\n}\nfunction iptohex(g) {\n var j = new Error(\"malformed IP address\");\n g = g.toLowerCase(g);\n if (!g.match(/^[0-9a-f.:/]+$/)) {\n throw j;\n }\n if (g.match(/^[0-9.]+$/)) {\n var b = g.split(\".\");\n if (b.length !== 4) {\n throw j;\n }\n var h = \"\";\n try {\n for (var f = 0; f < 4; f++) {\n var k = parseInt(b[f]);\n h += (\"0\" + k.toString(16)).slice(-2);\n }\n return h;\n } catch (e) {\n throw j;\n }\n } else {\n if (g.match(/^[0-9.]+\\/[0-9]+$/)) {\n var c = g.split(\"/\");\n return iptohex(c[0]) + ipnetmask(parseInt(c[1]), 32);\n } else {\n if (g.match(/^[0-9a-f:]+$/) && g.indexOf(\":\") !== -1) {\n return ipv6tohex(g);\n } else {\n if (g.match(/^[0-9a-f:]+\\/[0-9]+$/) && g.indexOf(\":\") !== -1) {\n var c = g.split(\"/\");\n return ipv6tohex(c[0]) + ipnetmask(parseInt(c[1]), 128);\n } else {\n throw j;\n }\n }\n }\n }\n}\nfunction ipnetmask(d, c) {\n if (c == 32 && d == 0) {\n return \"00000000\";\n }\n if (c == 128 && d == 0) {\n return \"00000000000000000000000000000000\";\n }\n var a = Array(d + 1).join(\"1\") + Array(c - d + 1).join(\"0\");\n return new BigInteger(a, 2).toString(16);\n}\nfunction ucs2hextoutf8(d) {\n function e(f) {\n var h = parseInt(f.substr(0, 2), 16);\n var a = parseInt(f.substr(2), 16);\n if (h == 0 & a < 128) {\n return String.fromCharCode(a);\n }\n if (h < 8) {\n var j = 192 | (h & 7) << 3 | (a & 192) >> 6;\n var i = 128 | a & 63;\n return hextoutf8(j.toString(16) + i.toString(16));\n }\n var j = 224 | (h & 240) >> 4;\n var i = 128 | (h & 15) << 2 | (a & 192) >> 6;\n var g = 128 | a & 63;\n return hextoutf8(j.toString(16) + i.toString(16) + g.toString(16));\n }\n var c = d.match(/.{4}/g);\n var b = c.map(e);\n return b.join(\"\");\n}\nfunction encodeURIComponentAll(a) {\n var d = encodeURIComponent(a);\n var b = \"\";\n for (var c = 0; c < d.length; c++) {\n if (d[c] == \"%\") {\n b = b + d.substr(c, 3);\n c = c + 2;\n } else {\n b = b + \"%\" + stohex(d[c]);\n }\n }\n return b;\n}\nfunction newline_toUnix(a) {\n a = a.replace(/\\r\\n/mg, \"\\n\");\n return a;\n}\nfunction newline_toDos(a) {\n a = a.replace(/\\r\\n/mg, \"\\n\");\n a = a.replace(/\\n/mg, \"\\r\\n\");\n return a;\n}\nKJUR.lang.String.isInteger = function (a) {\n if (a.match(/^[0-9]+$/)) {\n return true;\n } else {\n if (a.match(/^-[0-9]+$/)) {\n return true;\n } else {\n return false;\n }\n }\n};\nKJUR.lang.String.isHex = function (a) {\n return ishex(a);\n};\nfunction ishex(a) {\n if (a.length % 2 == 0 && (a.match(/^[0-9a-f]+$/) || a.match(/^[0-9A-F]+$/))) {\n return true;\n } else {\n return false;\n }\n}\nKJUR.lang.String.isBase64 = function (a) {\n a = a.replace(/\\s+/g, \"\");\n if (a.match(/^[0-9A-Za-z+\\/]+={0,3}$/) && a.length % 4 == 0) {\n return true;\n } else {\n return false;\n }\n};\nKJUR.lang.String.isBase64URL = function (a) {\n if (a.match(/[+/=]/)) {\n return false;\n }\n a = b64utob64(a);\n return KJUR.lang.String.isBase64(a);\n};\nfunction isBase64URLDot(a) {\n if (a.match(/^[0-9A-Za-z-_.]+$/)) {\n return true;\n }\n return false;\n}\nKJUR.lang.String.isIntegerArray = function (a) {\n a = a.replace(/\\s+/g, \"\");\n if (a.match(/^\\[[0-9,]+\\]$/)) {\n return true;\n } else {\n return false;\n }\n};\nKJUR.lang.String.isPrintable = function (a) {\n if (a.match(/^[0-9A-Za-z '()+,-./:=?]*$/) !== null) {\n return true;\n }\n return false;\n};\nKJUR.lang.String.isIA5 = function (a) {\n if (a.match(/^[\\x20-\\x21\\x23-\\x7f]*$/) !== null) {\n return true;\n }\n return false;\n};\nKJUR.lang.String.isMail = function (a) {\n if (a.match(/^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}\\.[A-Za-z0-9]{1,}$/) !== null) {\n return true;\n }\n return false;\n};\nfunction hextoposhex(a) {\n if (a.length % 2 == 1) {\n return \"0\" + a;\n }\n if (a.substr(0, 1) > \"7\") {\n return \"00\" + a;\n }\n return a;\n}\nfunction intarystrtohex(b) {\n b = b.replace(/^\\s*\\[\\s*/, \"\");\n b = b.replace(/\\s*\\]\\s*$/, \"\");\n b = b.replace(/\\s*/g, \"\");\n try {\n var c = b.split(/,/).map(function (g, e, h) {\n var f = parseInt(g);\n if (f < 0 || 255 < f) {\n throw \"integer not in range 0-255\";\n }\n var d = (\"00\" + f.toString(16)).slice(-2);\n return d;\n }).join(\"\");\n return c;\n } catch (a) {\n throw \"malformed integer array string: \" + a;\n }\n}\nvar strdiffidx = function (c, a) {\n var d = c.length;\n if (c.length > a.length) {\n d = a.length;\n }\n for (var b = 0; b < d; b++) {\n if (c.charCodeAt(b) != a.charCodeAt(b)) {\n return b;\n }\n }\n if (c.length != a.length) {\n return d;\n }\n return -1;\n};\nfunction oidtohex(g) {\n var f = function (a) {\n var l = a.toString(16);\n if (l.length == 1) {\n l = \"0\" + l;\n }\n return l;\n };\n var e = function (p) {\n var o = \"\";\n var l = parseInt(p, 10);\n var a = l.toString(2);\n var m = 7 - a.length % 7;\n if (m == 7) {\n m = 0;\n }\n var r = \"\";\n for (var n = 0; n < m; n++) {\n r += \"0\";\n }\n a = r + a;\n for (var n = 0; n < a.length - 1; n += 7) {\n var q = a.substr(n, 7);\n if (n != a.length - 7) {\n q = \"1\" + q;\n }\n o += f(parseInt(q, 2));\n }\n return o;\n };\n try {\n if (!g.match(/^[0-9.]+$/)) {\n return null;\n }\n var j = \"\";\n var b = g.split(\".\");\n var k = parseInt(b[0], 10) * 40 + parseInt(b[1], 10);\n j += f(k);\n b.splice(0, 2);\n for (var d = 0; d < b.length; d++) {\n j += e(b[d]);\n }\n return j;\n } catch (c) {\n return null;\n }\n}\nfunction hextooid(g) {\n if (!ishex(g)) {\n return null;\n }\n try {\n var m = [];\n var p = g.substr(0, 2);\n var e = parseInt(p, 16);\n m[0] = new String(Math.floor(e / 40));\n m[1] = new String(e % 40);\n var n = g.substr(2);\n var l = [];\n for (var f = 0; f < n.length / 2; f++) {\n l.push(parseInt(n.substr(f * 2, 2), 16));\n }\n var k = [];\n var d = \"\";\n for (var f = 0; f < l.length; f++) {\n if (l[f] & 128) {\n d = d + strpad((l[f] & 127).toString(2), 7);\n } else {\n d = d + strpad((l[f] & 127).toString(2), 7);\n k.push(new String(parseInt(d, 2)));\n d = \"\";\n }\n }\n var o = m.join(\".\");\n if (k.length > 0) {\n o = o + \".\" + k.join(\".\");\n }\n return o;\n } catch (j) {\n return null;\n }\n}\nfunction inttohex(b) {\n var a = new BigInteger(String(b), 10);\n return twoscompl(a);\n}\nfunction twoscompl(b) {\n var g = b.toString(16);\n if (g.substr(0, 1) != \"-\") {\n if (g.length % 2 == 1) {\n g = \"0\" + g;\n } else {\n if (!g.match(/^[0-7]/)) {\n g = \"00\" + g;\n }\n }\n return g;\n }\n var a = g.substr(1);\n var f = a.length;\n if (f % 2 == 1) {\n f += 1;\n } else {\n if (!g.match(/^[0-7]/)) {\n f += 2;\n }\n }\n var j = \"\";\n for (var e = 0; e < f; e++) {\n j += \"f\";\n }\n var d = new BigInteger(j, 16);\n var c = d.xor(b).add(BigInteger.ONE);\n g = c.toString(16).replace(/^-/, \"\");\n return g;\n}\nvar strpad = function (c, b, a) {\n if (a == undefined) {\n a = \"0\";\n }\n if (c.length >= b) {\n return c;\n }\n return new Array(b - c.length + 1).join(a) + c;\n};\nfunction bitstrtoint(e) {\n if (e.length % 2 != 0) {\n return -1;\n }\n e = e.toLowerCase();\n if (e.match(/^[0-9a-f]+$/) == null) {\n return -1;\n }\n try {\n var a = e.substr(0, 2);\n if (a == \"00\") {\n return parseInt(e.substr(2), 16);\n }\n var b = parseInt(a, 16);\n if (b > 7) {\n return -1;\n }\n var g = e.substr(2);\n var d = parseInt(g, 16).toString(2);\n if (d == \"0\") {\n d = \"00000000\";\n }\n d = d.slice(0, 0 - b);\n var f = parseInt(d, 2);\n if (f == NaN) {\n return -1;\n }\n return f;\n } catch (c) {\n return -1;\n }\n}\nfunction inttobitstr(e) {\n if (typeof e != \"number\") {\n return null;\n }\n if (e < 0) {\n return null;\n }\n var c = Number(e).toString(2);\n var b = 8 - c.length % 8;\n if (b == 8) {\n b = 0;\n }\n c = c + strpad(\"\", b, \"0\");\n var d = parseInt(c, 2).toString(16);\n if (d.length % 2 == 1) {\n d = \"0\" + d;\n }\n var a = \"0\" + b;\n return a + d;\n}\nfunction bitstrtobinstr(g) {\n if (typeof g != \"string\") {\n return null;\n }\n if (g.length % 2 != 0) {\n return null;\n }\n if (!g.match(/^[0-9a-f]+$/)) {\n return null;\n }\n try {\n var c = parseInt(g.substr(0, 2), 16);\n if (c < 0 || 7 < c) {\n return null;\n }\n var j = g.substr(2);\n var f = \"\";\n for (var e = 0; e < j.length; e += 2) {\n var b = j.substr(e, 2);\n var a = parseInt(b, 16).toString(2);\n a = (\"0000000\" + a).slice(-8);\n f += a;\n }\n return f.substr(0, f.length - c);\n } catch (d) {\n return null;\n }\n}\nfunction binstrtobitstr(b) {\n if (typeof b != \"string\") {\n return null;\n }\n if (b.match(/^[01]+$/) == null) {\n return null;\n }\n try {\n var c = parseInt(b, 2);\n return inttobitstr(c);\n } catch (a) {\n return null;\n }\n}\nfunction namearraytobinstr(e, g) {\n var f = 0;\n for (var a = 0; a < e.length; a++) {\n f |= 1 << g[e[a]];\n }\n var b = f.toString(2);\n var c = \"\";\n for (var a = b.length - 1; a >= 0; a--) {\n c += b[a];\n }\n return c;\n}\nfunction aryval(e, c, d) {\n if (typeof e != \"object\") {\n return undefined;\n }\n var c = String(c).split(\".\");\n for (var b = 0; b < c.length && e; b++) {\n var a = c[b];\n if (a.match(/^[0-9]+$/)) {\n a = parseInt(a);\n }\n e = e[a];\n }\n return e || e === false ? e : d;\n}\nfunction extendClass(c, a) {\n var b = function () {};\n b.prototype = a.prototype;\n c.prototype = new b();\n c.prototype.constructor = c;\n c.superclass = a.prototype;\n if (a.prototype.constructor == Object.prototype.constructor) {\n a.prototype.constructor = a;\n }\n}\n;\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.crypto == \"undefined\" || !KJUR.crypto) {\n KJUR.crypto = {};\n}\nKJUR.crypto.Util = new function () {\n this.DIGESTINFOHEAD = {\n sha1: \"3021300906052b0e03021a05000414\",\n sha224: \"302d300d06096086480165030402040500041c\",\n sha256: \"3031300d060960864801650304020105000420\",\n sha384: \"3041300d060960864801650304020205000430\",\n sha512: \"3051300d060960864801650304020305000440\",\n md2: \"3020300c06082a864886f70d020205000410\",\n md5: \"3020300c06082a864886f70d020505000410\",\n ripemd160: \"3021300906052b2403020105000414\"\n };\n this.DEFAULTPROVIDER = {\n md5: \"cryptojs\",\n sha1: \"cryptojs\",\n sha224: \"cryptojs\",\n sha256: \"cryptojs\",\n sha384: \"cryptojs\",\n sha512: \"cryptojs\",\n ripemd160: \"cryptojs\",\n hmacmd5: \"cryptojs\",\n hmacsha1: \"cryptojs\",\n hmacsha224: \"cryptojs\",\n hmacsha256: \"cryptojs\",\n hmacsha384: \"cryptojs\",\n hmacsha512: \"cryptojs\",\n hmacripemd160: \"cryptojs\",\n MD5withRSA: \"cryptojs/jsrsa\",\n SHA1withRSA: \"cryptojs/jsrsa\",\n SHA224withRSA: \"cryptojs/jsrsa\",\n SHA256withRSA: \"cryptojs/jsrsa\",\n SHA384withRSA: \"cryptojs/jsrsa\",\n SHA512withRSA: \"cryptojs/jsrsa\",\n RIPEMD160withRSA: \"cryptojs/jsrsa\",\n MD5withECDSA: \"cryptojs/jsrsa\",\n SHA1withECDSA: \"cryptojs/jsrsa\",\n SHA224withECDSA: \"cryptojs/jsrsa\",\n SHA256withECDSA: \"cryptojs/jsrsa\",\n SHA384withECDSA: \"cryptojs/jsrsa\",\n SHA512withECDSA: \"cryptojs/jsrsa\",\n RIPEMD160withECDSA: \"cryptojs/jsrsa\",\n SHA1withDSA: \"cryptojs/jsrsa\",\n SHA224withDSA: \"cryptojs/jsrsa\",\n SHA256withDSA: \"cryptojs/jsrsa\",\n MD5withRSAandMGF1: \"cryptojs/jsrsa\",\n SHAwithRSAandMGF1: \"cryptojs/jsrsa\",\n SHA1withRSAandMGF1: \"cryptojs/jsrsa\",\n SHA224withRSAandMGF1: \"cryptojs/jsrsa\",\n SHA256withRSAandMGF1: \"cryptojs/jsrsa\",\n SHA384withRSAandMGF1: \"cryptojs/jsrsa\",\n SHA512withRSAandMGF1: \"cryptojs/jsrsa\",\n RIPEMD160withRSAandMGF1: \"cryptojs/jsrsa\"\n };\n this.CRYPTOJSMESSAGEDIGESTNAME = {\n md5: CryptoJS.algo.MD5,\n sha1: CryptoJS.algo.SHA1,\n sha224: CryptoJS.algo.SHA224,\n sha256: CryptoJS.algo.SHA256,\n sha384: CryptoJS.algo.SHA384,\n sha512: CryptoJS.algo.SHA512,\n ripemd160: CryptoJS.algo.RIPEMD160\n };\n this.getDigestInfoHex = function (a, b) {\n if (typeof this.DIGESTINFOHEAD[b] == \"undefined\") {\n throw \"alg not supported in Util.DIGESTINFOHEAD: \" + b;\n }\n return this.DIGESTINFOHEAD[b] + a;\n };\n this.getPaddedDigestInfoHex = function (h, a, j) {\n var c = this.getDigestInfoHex(h, a);\n var d = j / 4;\n if (c.length + 22 > d) {\n throw \"key is too short for SigAlg: keylen=\" + j + \",\" + a;\n }\n var b = \"0001\";\n var k = \"00\" + c;\n var g = \"\";\n var l = d - b.length - k.length;\n for (var f = 0; f < l; f += 2) {\n g += \"ff\";\n }\n var e = b + g + k;\n return e;\n };\n this.hashString = function (a, c) {\n var b = new KJUR.crypto.MessageDigest({\n alg: c\n });\n return b.digestString(a);\n };\n this.hashHex = function (b, c) {\n var a = new KJUR.crypto.MessageDigest({\n alg: c\n });\n return a.digestHex(b);\n };\n this.sha1 = function (a) {\n return this.hashString(a, \"sha1\");\n };\n this.sha256 = function (a) {\n return this.hashString(a, \"sha256\");\n };\n this.sha256Hex = function (a) {\n return this.hashHex(a, \"sha256\");\n };\n this.sha512 = function (a) {\n return this.hashString(a, \"sha512\");\n };\n this.sha512Hex = function (a) {\n return this.hashHex(a, \"sha512\");\n };\n this.isKey = function (a) {\n if (a instanceof RSAKey || a instanceof KJUR.crypto.DSA || a instanceof KJUR.crypto.ECDSA) {\n return true;\n } else {\n return false;\n }\n };\n}();\nKJUR.crypto.Util.md5 = function (a) {\n var b = new KJUR.crypto.MessageDigest({\n alg: \"md5\",\n prov: \"cryptojs\"\n });\n return b.digestString(a);\n};\nKJUR.crypto.Util.ripemd160 = function (a) {\n var b = new KJUR.crypto.MessageDigest({\n alg: \"ripemd160\",\n prov: \"cryptojs\"\n });\n return b.digestString(a);\n};\nKJUR.crypto.Util.SECURERANDOMGEN = new SecureRandom();\nKJUR.crypto.Util.getRandomHexOfNbytes = function (b) {\n var a = new Array(b);\n KJUR.crypto.Util.SECURERANDOMGEN.nextBytes(a);\n return BAtohex(a);\n};\nKJUR.crypto.Util.getRandomBigIntegerOfNbytes = function (a) {\n return new BigInteger(KJUR.crypto.Util.getRandomHexOfNbytes(a), 16);\n};\nKJUR.crypto.Util.getRandomHexOfNbits = function (d) {\n var c = d % 8;\n var a = (d - c) / 8;\n var b = new Array(a + 1);\n KJUR.crypto.Util.SECURERANDOMGEN.nextBytes(b);\n b[0] = (255 << c & 255 ^ 255) & b[0];\n return BAtohex(b);\n};\nKJUR.crypto.Util.getRandomBigIntegerOfNbits = function (a) {\n return new BigInteger(KJUR.crypto.Util.getRandomHexOfNbits(a), 16);\n};\nKJUR.crypto.Util.getRandomBigIntegerZeroToMax = function (b) {\n var a = b.bitLength();\n while (1) {\n var c = KJUR.crypto.Util.getRandomBigIntegerOfNbits(a);\n if (b.compareTo(c) != -1) {\n return c;\n }\n }\n};\nKJUR.crypto.Util.getRandomBigIntegerMinToMax = function (e, b) {\n var c = e.compareTo(b);\n if (c == 1) {\n throw \"biMin is greater than biMax\";\n }\n if (c == 0) {\n return e;\n }\n var a = b.subtract(e);\n var d = KJUR.crypto.Util.getRandomBigIntegerZeroToMax(a);\n return d.add(e);\n};\nKJUR.crypto.MessageDigest = function (c) {\n var b = null;\n var a = null;\n var d = null;\n this.setAlgAndProvider = function (g, f) {\n g = KJUR.crypto.MessageDigest.getCanonicalAlgName(g);\n if (g !== null && f === undefined) {\n f = KJUR.crypto.Util.DEFAULTPROVIDER[g];\n }\n if (\":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:\".indexOf(g) != -1 && f == \"cryptojs\") {\n try {\n this.md = KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[g].create();\n } catch (e) {\n throw \"setAlgAndProvider hash alg set fail alg=\" + g + \"/\" + e;\n }\n this.updateString = function (h) {\n this.md.update(h);\n };\n this.updateHex = function (h) {\n var i = CryptoJS.enc.Hex.parse(h);\n this.md.update(i);\n };\n this.digest = function () {\n var h = this.md.finalize();\n return h.toString(CryptoJS.enc.Hex);\n };\n this.digestString = function (h) {\n this.updateString(h);\n return this.digest();\n };\n this.digestHex = function (h) {\n this.updateHex(h);\n return this.digest();\n };\n }\n if (\":sha256:\".indexOf(g) != -1 && f == \"sjcl\") {\n try {\n this.md = new sjcl.hash.sha256();\n } catch (e) {\n throw \"setAlgAndProvider hash alg set fail alg=\" + g + \"/\" + e;\n }\n this.updateString = function (h) {\n this.md.update(h);\n };\n this.updateHex = function (i) {\n var h = sjcl.codec.hex.toBits(i);\n this.md.update(h);\n };\n this.digest = function () {\n var h = this.md.finalize();\n return sjcl.codec.hex.fromBits(h);\n };\n this.digestString = function (h) {\n this.updateString(h);\n return this.digest();\n };\n this.digestHex = function (h) {\n this.updateHex(h);\n return this.digest();\n };\n }\n };\n this.updateString = function (e) {\n throw \"updateString(str) not supported for this alg/prov: \" + this.algName + \"/\" + this.provName;\n };\n this.updateHex = function (e) {\n throw \"updateHex(hex) not supported for this alg/prov: \" + this.algName + \"/\" + this.provName;\n };\n this.digest = function () {\n throw \"digest() not supported for this alg/prov: \" + this.algName + \"/\" + this.provName;\n };\n this.digestString = function (e) {\n throw \"digestString(str) not supported for this alg/prov: \" + this.algName + \"/\" + this.provName;\n };\n this.digestHex = function (e) {\n throw \"digestHex(hex) not supported for this alg/prov: \" + this.algName + \"/\" + this.provName;\n };\n if (c !== undefined) {\n if (c.alg !== undefined) {\n this.algName = c.alg;\n if (c.prov === undefined) {\n this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName];\n }\n this.setAlgAndProvider(this.algName, this.provName);\n }\n }\n};\nKJUR.crypto.MessageDigest.getCanonicalAlgName = function (a) {\n if (typeof a === \"string\") {\n a = a.toLowerCase();\n a = a.replace(/-/, \"\");\n }\n return a;\n};\nKJUR.crypto.MessageDigest.getHashLength = function (c) {\n var b = KJUR.crypto.MessageDigest;\n var a = b.getCanonicalAlgName(c);\n if (b.HASHLENGTH[a] === undefined) {\n throw \"not supported algorithm: \" + c;\n }\n return b.HASHLENGTH[a];\n};\nKJUR.crypto.MessageDigest.HASHLENGTH = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n ripemd160: 20\n};\nKJUR.crypto.Mac = function (d) {\n var f = null;\n var c = null;\n var a = null;\n var e = null;\n var b = null;\n this.setAlgAndProvider = function (k, i) {\n k = k.toLowerCase();\n if (k == null) {\n k = \"hmacsha1\";\n }\n k = k.toLowerCase();\n if (k.substr(0, 4) != \"hmac\") {\n throw \"setAlgAndProvider unsupported HMAC alg: \" + k;\n }\n if (i === undefined) {\n i = KJUR.crypto.Util.DEFAULTPROVIDER[k];\n }\n this.algProv = k + \"/\" + i;\n var g = k.substr(4);\n if (\":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:\".indexOf(g) != -1 && i == \"cryptojs\") {\n try {\n var j = KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[g];\n this.mac = CryptoJS.algo.HMAC.create(j, this.pass);\n } catch (h) {\n throw \"setAlgAndProvider hash alg set fail hashAlg=\" + g + \"/\" + h;\n }\n this.updateString = function (l) {\n this.mac.update(l);\n };\n this.updateHex = function (l) {\n var m = CryptoJS.enc.Hex.parse(l);\n this.mac.update(m);\n };\n this.doFinal = function () {\n var l = this.mac.finalize();\n return l.toString(CryptoJS.enc.Hex);\n };\n this.doFinalString = function (l) {\n this.updateString(l);\n return this.doFinal();\n };\n this.doFinalHex = function (l) {\n this.updateHex(l);\n return this.doFinal();\n };\n }\n };\n this.updateString = function (g) {\n throw \"updateString(str) not supported for this alg/prov: \" + this.algProv;\n };\n this.updateHex = function (g) {\n throw \"updateHex(hex) not supported for this alg/prov: \" + this.algProv;\n };\n this.doFinal = function () {\n throw \"digest() not supported for this alg/prov: \" + this.algProv;\n };\n this.doFinalString = function (g) {\n throw \"digestString(str) not supported for this alg/prov: \" + this.algProv;\n };\n this.doFinalHex = function (g) {\n throw \"digestHex(hex) not supported for this alg/prov: \" + this.algProv;\n };\n this.setPassword = function (h) {\n if (typeof h == \"string\") {\n var g = h;\n if (h.length % 2 == 1 || !h.match(/^[0-9A-Fa-f]+$/)) {\n g = rstrtohex(h);\n }\n this.pass = CryptoJS.enc.Hex.parse(g);\n return;\n }\n if (typeof h != \"object\") {\n throw \"KJUR.crypto.Mac unsupported password type: \" + h;\n }\n var g = null;\n if (h.hex !== undefined) {\n if (h.hex.length % 2 != 0 || !h.hex.match(/^[0-9A-Fa-f]+$/)) {\n throw \"Mac: wrong hex password: \" + h.hex;\n }\n g = h.hex;\n }\n if (h.utf8 !== undefined) {\n g = utf8tohex(h.utf8);\n }\n if (h.rstr !== undefined) {\n g = rstrtohex(h.rstr);\n }\n if (h.b64 !== undefined) {\n g = b64tohex(h.b64);\n }\n if (h.b64u !== undefined) {\n g = b64utohex(h.b64u);\n }\n if (g == null) {\n throw \"KJUR.crypto.Mac unsupported password type: \" + h;\n }\n this.pass = CryptoJS.enc.Hex.parse(g);\n };\n if (d !== undefined) {\n if (d.pass !== undefined) {\n this.setPassword(d.pass);\n }\n if (d.alg !== undefined) {\n this.algName = d.alg;\n if (d.prov === undefined) {\n this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName];\n }\n this.setAlgAndProvider(this.algName, this.provName);\n }\n }\n};\nKJUR.crypto.Signature = function (o) {\n var q = null;\n var n = null;\n var r = null;\n var c = null;\n var l = null;\n var d = null;\n var k = null;\n var h = null;\n var p = null;\n var e = null;\n var b = -1;\n var g = null;\n var j = null;\n var a = null;\n var i = null;\n var f = null;\n this._setAlgNames = function () {\n var s = this.algName.match(/^(.+)with(.+)$/);\n if (s) {\n this.mdAlgName = s[1].toLowerCase();\n this.pubkeyAlgName = s[2].toLowerCase();\n if (this.pubkeyAlgName == \"rsaandmgf1\" && this.mdAlgName == \"sha\") {\n this.mdAlgName = \"sha1\";\n }\n }\n };\n this._zeroPaddingOfSignature = function (x, w) {\n var v = \"\";\n var t = w / 4 - x.length;\n for (var u = 0; u < t; u++) {\n v = v + \"0\";\n }\n return v + x;\n };\n this.setAlgAndProvider = function (u, t) {\n this._setAlgNames();\n if (t != \"cryptojs/jsrsa\") {\n throw new Error(\"provider not supported: \" + t);\n }\n if (\":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:\".indexOf(this.mdAlgName) != -1) {\n try {\n this.md = new KJUR.crypto.MessageDigest({\n alg: this.mdAlgName\n });\n } catch (s) {\n throw new Error(\"setAlgAndProvider hash alg set fail alg=\" + this.mdAlgName + \"/\" + s);\n }\n this.init = function (w, x) {\n var y = null;\n try {\n if (x === undefined) {\n y = KEYUTIL.getKey(w);\n } else {\n y = KEYUTIL.getKey(w, x);\n }\n } catch (v) {\n throw \"init failed:\" + v;\n }\n if (y.isPrivate === true) {\n this.prvKey = y;\n this.state = \"SIGN\";\n } else {\n if (y.isPublic === true) {\n this.pubKey = y;\n this.state = \"VERIFY\";\n } else {\n throw \"init failed.:\" + y;\n }\n }\n };\n this.updateString = function (v) {\n this.md.updateString(v);\n };\n this.updateHex = function (v) {\n this.md.updateHex(v);\n };\n this.sign = function () {\n this.sHashHex = this.md.digest();\n if (this.prvKey === undefined && this.ecprvhex !== undefined && this.eccurvename !== undefined && KJUR.crypto.ECDSA !== undefined) {\n this.prvKey = new KJUR.crypto.ECDSA({\n curve: this.eccurvename,\n prv: this.ecprvhex\n });\n }\n if (this.prvKey instanceof RSAKey && this.pubkeyAlgName === \"rsaandmgf1\") {\n this.hSign = this.prvKey.signWithMessageHashPSS(this.sHashHex, this.mdAlgName, this.pssSaltLen);\n } else {\n if (this.prvKey instanceof RSAKey && this.pubkeyAlgName === \"rsa\") {\n this.hSign = this.prvKey.signWithMessageHash(this.sHashHex, this.mdAlgName);\n } else {\n if (this.prvKey instanceof KJUR.crypto.ECDSA) {\n this.hSign = this.prvKey.signWithMessageHash(this.sHashHex);\n } else {\n if (this.prvKey instanceof KJUR.crypto.DSA) {\n this.hSign = this.prvKey.signWithMessageHash(this.sHashHex);\n } else {\n throw \"Signature: unsupported private key alg: \" + this.pubkeyAlgName;\n }\n }\n }\n }\n return this.hSign;\n };\n this.signString = function (v) {\n this.updateString(v);\n return this.sign();\n };\n this.signHex = function (v) {\n this.updateHex(v);\n return this.sign();\n };\n this.verify = function (v) {\n this.sHashHex = this.md.digest();\n if (this.pubKey === undefined && this.ecpubhex !== undefined && this.eccurvename !== undefined && KJUR.crypto.ECDSA !== undefined) {\n this.pubKey = new KJUR.crypto.ECDSA({\n curve: this.eccurvename,\n pub: this.ecpubhex\n });\n }\n if (this.pubKey instanceof RSAKey && this.pubkeyAlgName === \"rsaandmgf1\") {\n return this.pubKey.verifyWithMessageHashPSS(this.sHashHex, v, this.mdAlgName, this.pssSaltLen);\n } else {\n if (this.pubKey instanceof RSAKey && this.pubkeyAlgName === \"rsa\") {\n return this.pubKey.verifyWithMessageHash(this.sHashHex, v);\n } else {\n if (KJUR.crypto.ECDSA !== undefined && this.pubKey instanceof KJUR.crypto.ECDSA) {\n return this.pubKey.verifyWithMessageHash(this.sHashHex, v);\n } else {\n if (KJUR.crypto.DSA !== undefined && this.pubKey instanceof KJUR.crypto.DSA) {\n return this.pubKey.verifyWithMessageHash(this.sHashHex, v);\n } else {\n throw \"Signature: unsupported public key alg: \" + this.pubkeyAlgName;\n }\n }\n }\n }\n };\n }\n };\n this.init = function (s, t) {\n throw \"init(key, pass) not supported for this alg:prov=\" + this.algProvName;\n };\n this.updateString = function (s) {\n throw \"updateString(str) not supported for this alg:prov=\" + this.algProvName;\n };\n this.updateHex = function (s) {\n throw \"updateHex(hex) not supported for this alg:prov=\" + this.algProvName;\n };\n this.sign = function () {\n throw \"sign() not supported for this alg:prov=\" + this.algProvName;\n };\n this.signString = function (s) {\n throw \"digestString(str) not supported for this alg:prov=\" + this.algProvName;\n };\n this.signHex = function (s) {\n throw \"digestHex(hex) not supported for this alg:prov=\" + this.algProvName;\n };\n this.verify = function (s) {\n throw \"verify(hSigVal) not supported for this alg:prov=\" + this.algProvName;\n };\n this.initParams = o;\n if (o !== undefined) {\n if (o.alg !== undefined) {\n this.algName = o.alg;\n if (o.prov === undefined) {\n this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName];\n } else {\n this.provName = o.prov;\n }\n this.algProvName = this.algName + \":\" + this.provName;\n this.setAlgAndProvider(this.algName, this.provName);\n this._setAlgNames();\n }\n if (o.psssaltlen !== undefined) {\n this.pssSaltLen = o.psssaltlen;\n }\n if (o.prvkeypem !== undefined) {\n if (o.prvkeypas !== undefined) {\n throw \"both prvkeypem and prvkeypas parameters not supported\";\n } else {\n try {\n var q = KEYUTIL.getKey(o.prvkeypem);\n this.init(q);\n } catch (m) {\n throw \"fatal error to load pem private key: \" + m;\n }\n }\n }\n }\n};\nKJUR.crypto.Cipher = function (a) {};\nKJUR.crypto.Cipher.encrypt = function (j, i, b, c) {\n if (aryval(c, \"enclag\") != undefined) {\n b = c.encalg;\n }\n if (typeof b == \"string\" && b.substr(-4) == \"-CBC\") {\n var g = i;\n var e = j;\n if (aryval(c, \"key\") != undefined) {\n g = c.key;\n }\n if (aryval(c, \"enc\") != undefined) {\n hEnc = c.enc;\n }\n var h = CryptoJS.enc.Hex.parse(g);\n var a = CryptoJS.enc.Hex.parse(e);\n var f = CryptoJS.enc.Hex.parse(c.iv);\n var d;\n if (b == \"des-EDE3-CBC\") {\n d = CryptoJS.TripleDES.encrypt(a, h, {\n iv: f\n });\n } else {\n if (b == \"aes128-CBC\" || b == \"aes256-CBC\") {\n d = CryptoJS.AES.encrypt(a, h, {\n iv: f\n });\n } else {\n throw new Error(\"unsupported algorithm: \" + b);\n }\n }\n return d + \"\";\n } else {\n throw new Error(\"Cipher.encrypt: unsupported key or algorithm\");\n }\n};\nKJUR.crypto.Cipher.decrypt = function (c, j, a, b) {\n if (aryval(b, \"enclag\") != undefined) {\n a = b.encalg;\n }\n if (typeof a == \"string\" && a.substr(-4) == \"-CBC\") {\n var h = j;\n var e = c;\n if (aryval(b, \"key\") != undefined) {\n h = b.key;\n }\n if (aryval(b, \"enc\") != undefined) {\n e = b.enc;\n }\n var i = CryptoJS.enc.Hex.parse(h);\n var f = CryptoJS.enc.Hex.parse(e);\n var g = CryptoJS.enc.Hex.parse(b.iv);\n var d;\n if (a == \"des-EDE3-CBC\") {\n d = CryptoJS.TripleDES.decrypt({\n ciphertext: f\n }, i, {\n iv: g\n });\n } else {\n if (a == \"aes128-CBC\" || a == \"aes256-CBC\") {\n d = CryptoJS.AES.decrypt({\n ciphertext: f\n }, i, {\n iv: g\n });\n } else {\n throw new Error(\"unsupported algorithm: \" + a);\n }\n }\n return CryptoJS.enc.Hex.stringify(d);\n } else {\n throw new Error(\"Cipher.decrypt: unsupported key or algorithm\");\n }\n};\nKJUR.crypto.OID = new function () {\n this.oidhex2name = {\n \"2a864886f70d010101\": \"rsaEncryption\",\n \"2a8648ce3d0201\": \"ecPublicKey\",\n \"2a8648ce380401\": \"dsa\",\n \"2a8648ce3d030107\": \"secp256r1\",\n \"2b8104001f\": \"secp192k1\",\n \"2b81040021\": \"secp224r1\",\n \"2b8104000a\": \"secp256k1\",\n \"2b81040022\": \"secp384r1\",\n \"2b81040023\": \"secp521r1\",\n \"2a8648ce380403\": \"SHA1withDSA\",\n \"608648016503040301\": \"SHA224withDSA\",\n \"608648016503040302\": \"SHA256withDSA\"\n };\n}();\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.crypto == \"undefined\" || !KJUR.crypto) {\n KJUR.crypto = {};\n}\nKJUR.crypto.ECDSA = function (e) {\n var g = \"secp256r1\";\n var p = null;\n var b = null;\n var i = null;\n var j = Error,\n f = BigInteger,\n h = ECPointFp,\n m = KJUR.crypto.ECDSA,\n c = KJUR.crypto.ECParameterDB,\n d = m.getName,\n q = ASN1HEX,\n n = q.getVbyListEx,\n k = q.isASN1HEX;\n var a = new SecureRandom();\n var o = null;\n this.type = \"EC\";\n this.isPrivate = false;\n this.isPublic = false;\n function l(x, t, w, s) {\n var r = Math.max(t.bitLength(), s.bitLength());\n var y = x.add2D(w);\n var v = x.curve.getInfinity();\n for (var u = r - 1; u >= 0; --u) {\n v = v.twice2D();\n v.z = f.ONE;\n if (t.testBit(u)) {\n if (s.testBit(u)) {\n v = v.add2D(y);\n } else {\n v = v.add2D(x);\n }\n } else {\n if (s.testBit(u)) {\n v = v.add2D(w);\n }\n }\n }\n return v;\n }\n this.getBigRandom = function (r) {\n return new f(r.bitLength(), a).mod(r.subtract(f.ONE)).add(f.ONE);\n };\n this.setNamedCurve = function (r) {\n this.ecparams = c.getByName(r);\n this.prvKeyHex = null;\n this.pubKeyHex = null;\n this.curveName = r;\n };\n this.setPrivateKeyHex = function (r) {\n this.isPrivate = true;\n this.prvKeyHex = r;\n };\n this.setPublicKeyHex = function (r) {\n this.isPublic = true;\n this.pubKeyHex = r;\n };\n this.getPublicKeyXYHex = function () {\n var t = this.pubKeyHex;\n if (t.substr(0, 2) !== \"04\") {\n throw \"this method supports uncompressed format(04) only\";\n }\n var s = this.ecparams.keycharlen;\n if (t.length !== 2 + s * 2) {\n throw \"malformed public key hex length\";\n }\n var r = {};\n r.x = t.substr(2, s);\n r.y = t.substr(2 + s);\n return r;\n };\n this.getShortNISTPCurveName = function () {\n var r = this.curveName;\n if (r === \"secp256r1\" || r === \"NIST P-256\" || r === \"P-256\" || r === \"prime256v1\") {\n return \"P-256\";\n }\n if (r === \"secp384r1\" || r === \"NIST P-384\" || r === \"P-384\") {\n return \"P-384\";\n }\n if (r === \"secp521r1\" || r === \"NIST P-521\" || r === \"P-521\") {\n return \"P-521\";\n }\n return null;\n };\n this.generateKeyPairHex = function () {\n var s = this.ecparams.n;\n var u = this.getBigRandom(s);\n var r = this.ecparams.keycharlen;\n var t = (\"0000000000\" + u.toString(16)).slice(-r);\n this.setPrivateKeyHex(t);\n var v = this.generatePublicKeyHex();\n return {\n ecprvhex: t,\n ecpubhex: v\n };\n };\n this.generatePublicKeyHex = function () {\n var u = new f(this.prvKeyHex, 16);\n var w = this.ecparams.G.multiply(u);\n var t = w.getX().toBigInteger();\n var s = w.getY().toBigInteger();\n var r = this.ecparams.keycharlen;\n var y = (\"0000000000\" + t.toString(16)).slice(-r);\n var v = (\"0000000000\" + s.toString(16)).slice(-r);\n var x = \"04\" + y + v;\n this.setPublicKeyHex(x);\n return x;\n };\n this.signWithMessageHash = function (r) {\n return this.signHex(r, this.prvKeyHex);\n };\n this.signHex = function (x, u) {\n var A = new f(u, 16);\n var v = this.ecparams.n;\n var z = new f(x.substring(0, this.ecparams.keycharlen), 16);\n do {\n var w = this.getBigRandom(v);\n var B = this.ecparams.G;\n var y = B.multiply(w);\n var t = y.getX().toBigInteger().mod(v);\n } while (t.compareTo(f.ZERO) <= 0);\n var C = w.modInverse(v).multiply(z.add(A.multiply(t))).mod(v);\n return m.biRSSigToASN1Sig(t, C);\n };\n this.sign = function (w, B) {\n var z = B;\n var u = this.ecparams.n;\n var y = f.fromByteArrayUnsigned(w);\n do {\n var v = this.getBigRandom(u);\n var A = this.ecparams.G;\n var x = A.multiply(v);\n var t = x.getX().toBigInteger().mod(u);\n } while (t.compareTo(BigInteger.ZERO) <= 0);\n var C = v.modInverse(u).multiply(y.add(z.multiply(t))).mod(u);\n return this.serializeSig(t, C);\n };\n this.verifyWithMessageHash = function (s, r) {\n return this.verifyHex(s, r, this.pubKeyHex);\n };\n this.verifyHex = function (v, y, u) {\n try {\n var t, B;\n var w = m.parseSigHex(y);\n t = w.r;\n B = w.s;\n var x = h.decodeFromHex(this.ecparams.curve, u);\n var z = new f(v.substring(0, this.ecparams.keycharlen), 16);\n return this.verifyRaw(z, t, B, x);\n } catch (A) {\n return false;\n }\n };\n this.verify = function (z, A, u) {\n var w, t;\n if (Bitcoin.Util.isArray(A)) {\n var y = this.parseSig(A);\n w = y.r;\n t = y.s;\n } else {\n if (\"object\" === typeof A && A.r && A.s) {\n w = A.r;\n t = A.s;\n } else {\n throw \"Invalid value for signature\";\n }\n }\n var v;\n if (u instanceof ECPointFp) {\n v = u;\n } else {\n if (Bitcoin.Util.isArray(u)) {\n v = h.decodeFrom(this.ecparams.curve, u);\n } else {\n throw \"Invalid format for pubkey value, must be byte array or ECPointFp\";\n }\n }\n var x = f.fromByteArrayUnsigned(z);\n return this.verifyRaw(x, w, t, v);\n };\n this.verifyRaw = function (z, t, E, y) {\n var x = this.ecparams.n;\n var D = this.ecparams.G;\n if (t.compareTo(f.ONE) < 0 || t.compareTo(x) >= 0) {\n return false;\n }\n if (E.compareTo(f.ONE) < 0 || E.compareTo(x) >= 0) {\n return false;\n }\n var A = E.modInverse(x);\n var w = z.multiply(A).mod(x);\n var u = t.multiply(A).mod(x);\n var B = D.multiply(w).add(y.multiply(u));\n var C = B.getX().toBigInteger().mod(x);\n return C.equals(t);\n };\n this.serializeSig = function (v, u) {\n var w = v.toByteArraySigned();\n var t = u.toByteArraySigned();\n var x = [];\n x.push(2);\n x.push(w.length);\n x = x.concat(w);\n x.push(2);\n x.push(t.length);\n x = x.concat(t);\n x.unshift(x.length);\n x.unshift(48);\n return x;\n };\n this.parseSig = function (y) {\n var x;\n if (y[0] != 48) {\n throw new Error(\"Signature not a valid DERSequence\");\n }\n x = 2;\n if (y[x] != 2) {\n throw new Error(\"First element in signature must be a DERInteger\");\n }\n var w = y.slice(x + 2, x + 2 + y[x + 1]);\n x += 2 + y[x + 1];\n if (y[x] != 2) {\n throw new Error(\"Second element in signature must be a DERInteger\");\n }\n var t = y.slice(x + 2, x + 2 + y[x + 1]);\n x += 2 + y[x + 1];\n var v = f.fromByteArrayUnsigned(w);\n var u = f.fromByteArrayUnsigned(t);\n return {\n r: v,\n s: u\n };\n };\n this.parseSigCompact = function (w) {\n if (w.length !== 65) {\n throw \"Signature has the wrong length\";\n }\n var t = w[0] - 27;\n if (t < 0 || t > 7) {\n throw \"Invalid signature type\";\n }\n var x = this.ecparams.n;\n var v = f.fromByteArrayUnsigned(w.slice(1, 33)).mod(x);\n var u = f.fromByteArrayUnsigned(w.slice(33, 65)).mod(x);\n return {\n r: v,\n s: u,\n i: t\n };\n };\n this.readPKCS5PrvKeyHex = function (u) {\n if (k(u) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n var r, t, v;\n try {\n r = n(u, 0, [\"[0]\", 0], \"06\");\n t = n(u, 0, [1], \"04\");\n try {\n v = n(u, 0, [\"[1]\", 0], \"03\");\n } catch (s) {}\n } catch (s) {\n throw new Error(\"malformed PKCS#1/5 plain ECC private key\");\n }\n this.curveName = d(r);\n if (this.curveName === undefined) {\n throw \"unsupported curve name\";\n }\n this.setNamedCurve(this.curveName);\n this.setPublicKeyHex(v);\n this.setPrivateKeyHex(t);\n this.isPublic = false;\n };\n this.readPKCS8PrvKeyHex = function (v) {\n if (k(v) === false) {\n throw new j(\"not ASN.1 hex string\");\n }\n var t, r, u, w;\n try {\n t = n(v, 0, [1, 0], \"06\");\n r = n(v, 0, [1, 1], \"06\");\n u = n(v, 0, [2, 0, 1], \"04\");\n try {\n w = n(v, 0, [2, 0, \"[1]\", 0], \"03\");\n } catch (s) {}\n } catch (s) {\n throw new j(\"malformed PKCS#8 plain ECC private key\");\n }\n this.curveName = d(r);\n if (this.curveName === undefined) {\n throw new j(\"unsupported curve name\");\n }\n this.setNamedCurve(this.curveName);\n this.setPublicKeyHex(w);\n this.setPrivateKeyHex(u);\n this.isPublic = false;\n };\n this.readPKCS8PubKeyHex = function (u) {\n if (k(u) === false) {\n throw new j(\"not ASN.1 hex string\");\n }\n var t, r, v;\n try {\n t = n(u, 0, [0, 0], \"06\");\n r = n(u, 0, [0, 1], \"06\");\n v = n(u, 0, [1], \"03\");\n } catch (s) {\n throw new j(\"malformed PKCS#8 ECC public key\");\n }\n this.curveName = d(r);\n if (this.curveName === null) {\n throw new j(\"unsupported curve name\");\n }\n this.setNamedCurve(this.curveName);\n this.setPublicKeyHex(v);\n };\n this.readCertPubKeyHex = function (t, v) {\n if (k(t) === false) {\n throw new j(\"not ASN.1 hex string\");\n }\n var r, u;\n try {\n r = n(t, 0, [0, 5, 0, 1], \"06\");\n u = n(t, 0, [0, 5, 1], \"03\");\n } catch (s) {\n throw new j(\"malformed X.509 certificate ECC public key\");\n }\n this.curveName = d(r);\n if (this.curveName === null) {\n throw new j(\"unsupported curve name\");\n }\n this.setNamedCurve(this.curveName);\n this.setPublicKeyHex(u);\n };\n if (e !== undefined) {\n if (e.curve !== undefined) {\n this.curveName = e.curve;\n }\n }\n if (this.curveName === undefined) {\n this.curveName = g;\n }\n this.setNamedCurve(this.curveName);\n if (e !== undefined) {\n if (e.prv !== undefined) {\n this.setPrivateKeyHex(e.prv);\n }\n if (e.pub !== undefined) {\n this.setPublicKeyHex(e.pub);\n }\n }\n};\nKJUR.crypto.ECDSA.parseSigHex = function (a) {\n var b = KJUR.crypto.ECDSA.parseSigHexInHexRS(a);\n var d = new BigInteger(b.r, 16);\n var c = new BigInteger(b.s, 16);\n return {\n r: d,\n s: c\n };\n};\nKJUR.crypto.ECDSA.parseSigHexInHexRS = function (f) {\n var j = ASN1HEX,\n i = j.getChildIdx,\n g = j.getV;\n j.checkStrictDER(f, 0);\n if (f.substr(0, 2) != \"30\") {\n throw new Error(\"signature is not a ASN.1 sequence\");\n }\n var h = i(f, 0);\n if (h.length != 2) {\n throw new Error(\"signature shall have two elements\");\n }\n var e = h[0];\n var d = h[1];\n if (f.substr(e, 2) != \"02\") {\n throw new Error(\"1st item not ASN.1 integer\");\n }\n if (f.substr(d, 2) != \"02\") {\n throw new Error(\"2nd item not ASN.1 integer\");\n }\n var c = g(f, e);\n var b = g(f, d);\n return {\n r: c,\n s: b\n };\n};\nKJUR.crypto.ECDSA.asn1SigToConcatSig = function (d) {\n var e = KJUR.crypto.ECDSA.parseSigHexInHexRS(d);\n var b = e.r;\n var a = e.s;\n if (b.length >= 130 && b.length <= 134) {\n if (b.length % 2 != 0) {\n throw Error(\"unknown ECDSA sig r length error\");\n }\n if (a.length % 2 != 0) {\n throw Error(\"unknown ECDSA sig s length error\");\n }\n if (b.substr(0, 2) == \"00\") {\n b = b.substr(2);\n }\n if (a.substr(0, 2) == \"00\") {\n a = a.substr(2);\n }\n var c = Math.max(b.length, a.length);\n b = (\"000000\" + b).slice(-c);\n a = (\"000000\" + a).slice(-c);\n return b + a;\n }\n if (b.substr(0, 2) == \"00\" && b.length % 32 == 2) {\n b = b.substr(2);\n }\n if (a.substr(0, 2) == \"00\" && a.length % 32 == 2) {\n a = a.substr(2);\n }\n if (b.length % 32 == 30) {\n b = \"00\" + b;\n }\n if (a.length % 32 == 30) {\n a = \"00\" + a;\n }\n if (b.length % 32 != 0) {\n throw Error(\"unknown ECDSA sig r length error\");\n }\n if (a.length % 32 != 0) {\n throw Error(\"unknown ECDSA sig s length error\");\n }\n return b + a;\n};\nKJUR.crypto.ECDSA.concatSigToASN1Sig = function (a) {\n if (a.length % 4 != 0) {\n throw Error(\"unknown ECDSA concatinated r-s sig length error\");\n }\n var c = a.substr(0, a.length / 2);\n var b = a.substr(a.length / 2);\n return KJUR.crypto.ECDSA.hexRSSigToASN1Sig(c, b);\n};\nKJUR.crypto.ECDSA.hexRSSigToASN1Sig = function (b, a) {\n var d = new BigInteger(b, 16);\n var c = new BigInteger(a, 16);\n return KJUR.crypto.ECDSA.biRSSigToASN1Sig(d, c);\n};\nKJUR.crypto.ECDSA.biRSSigToASN1Sig = function (f, d) {\n var c = KJUR.asn1;\n var b = new c.DERInteger({\n bigint: f\n });\n var a = new c.DERInteger({\n bigint: d\n });\n var e = new c.DERSequence({\n array: [b, a]\n });\n return e.tohex();\n};\nKJUR.crypto.ECDSA.getName = function (a) {\n if (a === \"2b8104001f\") {\n return \"secp192k1\";\n }\n if (a === \"2a8648ce3d030107\") {\n return \"secp256r1\";\n }\n if (a === \"2b8104000a\") {\n return \"secp256k1\";\n }\n if (a === \"2b81040021\") {\n return \"secp224r1\";\n }\n if (a === \"2b81040022\") {\n return \"secp384r1\";\n }\n if (a === \"2b81040023\") {\n return \"secp521r1\";\n }\n if (\"|secp256r1|NIST P-256|P-256|prime256v1|\".indexOf(a) !== -1) {\n return \"secp256r1\";\n }\n if (\"|secp256k1|\".indexOf(a) !== -1) {\n return \"secp256k1\";\n }\n if (\"|secp224r1|NIST P-224|P-224|\".indexOf(a) !== -1) {\n return \"secp224r1\";\n }\n if (\"|secp384r1|NIST P-384|P-384|\".indexOf(a) !== -1) {\n return \"secp384r1\";\n }\n if (\"|secp521r1|NIST P-521|P-521|\".indexOf(a) !== -1) {\n return \"secp521r1\";\n }\n return null;\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.crypto == \"undefined\" || !KJUR.crypto) {\n KJUR.crypto = {};\n}\nKJUR.crypto.ECParameterDB = new function () {\n var b = {};\n var c = {};\n function a(d) {\n return new BigInteger(d, 16);\n }\n this.getByName = function (e) {\n var d = e;\n if (typeof c[d] != \"undefined\") {\n d = c[e];\n }\n if (typeof b[d] != \"undefined\") {\n return b[d];\n }\n throw \"unregistered EC curve name: \" + d;\n };\n this.regist = function (A, l, o, g, m, e, j, f, k, u, d, x) {\n b[A] = {};\n var s = a(o);\n var z = a(g);\n var y = a(m);\n var t = a(e);\n var w = a(j);\n var r = new ECCurveFp(s, z, y);\n var q = r.decodePointHex(\"04\" + f + k);\n b[A][\"name\"] = A;\n b[A][\"keylen\"] = l;\n b[A][\"keycharlen\"] = Math.ceil(l / 8) * 2;\n b[A][\"curve\"] = r;\n b[A][\"G\"] = q;\n b[A][\"n\"] = t;\n b[A][\"h\"] = w;\n b[A][\"oid\"] = d;\n b[A][\"info\"] = x;\n for (var v = 0; v < u.length; v++) {\n c[u[v]] = A;\n }\n };\n}();\nKJUR.crypto.ECParameterDB.regist(\"secp128r1\", 128, \"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF\", \"FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC\", \"E87579C11079F43DD824993C2CEE5ED3\", \"FFFFFFFE0000000075A30D1B9038A115\", \"1\", \"161FF7528B899B2D0C28607CA52C5B86\", \"CF5AC8395BAFEB13C02DA292DDED7A83\", [], \"\", \"secp128r1 : SECG curve over a 128 bit prime field\");\nKJUR.crypto.ECParameterDB.regist(\"secp160k1\", 160, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73\", \"0\", \"7\", \"0100000000000000000001B8FA16DFAB9ACA16B6B3\", \"1\", \"3B4C382CE37AA192A4019E763036F4F5DD4D7EBB\", \"938CF935318FDCED6BC28286531733C3F03C4FEE\", [], \"\", \"secp160k1 : SECG curve over a 160 bit prime field\");\nKJUR.crypto.ECParameterDB.regist(\"secp160r1\", 160, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC\", \"1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45\", \"0100000000000000000001F4C8F927AED3CA752257\", \"1\", \"4A96B5688EF573284664698968C38BB913CBFC82\", \"23A628553168947D59DCC912042351377AC5FB32\", [], \"\", \"secp160r1 : SECG curve over a 160 bit prime field\");\nKJUR.crypto.ECParameterDB.regist(\"secp192k1\", 192, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37\", \"0\", \"3\", \"FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D\", \"1\", \"DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D\", \"9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D\", []);\nKJUR.crypto.ECParameterDB.regist(\"secp192r1\", 192, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC\", \"64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1\", \"FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831\", \"1\", \"188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012\", \"07192B95FFC8DA78631011ED6B24CDD573F977A11E794811\", []);\nKJUR.crypto.ECParameterDB.regist(\"secp224r1\", 224, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE\", \"B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D\", \"1\", \"B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21\", \"BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34\", []);\nKJUR.crypto.ECParameterDB.regist(\"secp256k1\", 256, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F\", \"0\", \"7\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141\", \"1\", \"79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798\", \"483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8\", []);\nKJUR.crypto.ECParameterDB.regist(\"secp256r1\", 256, \"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF\", \"FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC\", \"5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B\", \"FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551\", \"1\", \"6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296\", \"4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5\", [\"NIST P-256\", \"P-256\", \"prime256v1\"]);\nKJUR.crypto.ECParameterDB.regist(\"secp384r1\", 384, \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC\", \"B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF\", \"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973\", \"1\", \"AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7\", \"3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f\", [\"NIST P-384\", \"P-384\"]);\nKJUR.crypto.ECParameterDB.regist(\"secp521r1\", 521, \"1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\", \"1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC\", \"051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00\", \"1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409\", \"1\", \"00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66\", \"011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650\", [\"NIST P-521\", \"P-521\"]);\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.crypto == \"undefined\" || !KJUR.crypto) {\n KJUR.crypto = {};\n}\nKJUR.crypto.DSA = function () {\n var b = ASN1HEX,\n e = b.getVbyList,\n d = b.getVbyListEx,\n a = b.isASN1HEX,\n c = BigInteger;\n this.p = null;\n this.q = null;\n this.g = null;\n this.y = null;\n this.x = null;\n this.type = \"DSA\";\n this.isPrivate = false;\n this.isPublic = false;\n this.setPrivate = function (j, i, h, k, f) {\n this.isPrivate = true;\n this.p = j;\n this.q = i;\n this.g = h;\n this.y = k;\n this.x = f;\n };\n this.setPrivateHex = function (i, g, k, n, o) {\n var h, f, j, l, m;\n h = new BigInteger(i, 16);\n f = new BigInteger(g, 16);\n j = new BigInteger(k, 16);\n if (typeof n === \"string\" && n.length > 1) {\n l = new BigInteger(n, 16);\n } else {\n l = null;\n }\n m = new BigInteger(o, 16);\n this.setPrivate(h, f, j, l, m);\n };\n this.setPublic = function (i, h, f, j) {\n this.isPublic = true;\n this.p = i;\n this.q = h;\n this.g = f;\n this.y = j;\n this.x = null;\n };\n this.setPublicHex = function (k, j, i, l) {\n var g, f, m, h;\n g = new BigInteger(k, 16);\n f = new BigInteger(j, 16);\n m = new BigInteger(i, 16);\n h = new BigInteger(l, 16);\n this.setPublic(g, f, m, h);\n };\n this.signWithMessageHash = function (j) {\n var i = this.p;\n var h = this.q;\n var m = this.g;\n var o = this.y;\n var t = this.x;\n var l = KJUR.crypto.Util.getRandomBigIntegerMinToMax(BigInteger.ONE.add(BigInteger.ONE), h.subtract(BigInteger.ONE));\n var u = j.substr(0, h.bitLength() / 4);\n var n = new BigInteger(u, 16);\n var f = m.modPow(l, i).mod(h);\n var w = l.modInverse(h).multiply(n.add(t.multiply(f))).mod(h);\n var v = KJUR.asn1.ASN1Util.jsonToASN1HEX({\n seq: [{\n \"int\": {\n bigint: f\n }\n }, {\n \"int\": {\n bigint: w\n }\n }]\n });\n return v;\n };\n this.verifyWithMessageHash = function (m, l) {\n var j = this.p;\n var h = this.q;\n var o = this.g;\n var u = this.y;\n var n = this.parseASN1Signature(l);\n var f = n[0];\n var C = n[1];\n var B = m.substr(0, h.bitLength() / 4);\n var t = new BigInteger(B, 16);\n if (BigInteger.ZERO.compareTo(f) > 0 || f.compareTo(h) > 0) {\n throw \"invalid DSA signature\";\n }\n if (BigInteger.ZERO.compareTo(C) >= 0 || C.compareTo(h) > 0) {\n throw \"invalid DSA signature\";\n }\n var x = C.modInverse(h);\n var k = t.multiply(x).mod(h);\n var i = f.multiply(x).mod(h);\n var A = o.modPow(k, j).multiply(u.modPow(i, j)).mod(j).mod(h);\n return A.compareTo(f) == 0;\n };\n this.parseASN1Signature = function (f) {\n try {\n var i = new c(d(f, 0, [0], \"02\"), 16);\n var h = new c(d(f, 0, [1], \"02\"), 16);\n return [i, h];\n } catch (g) {\n throw new Error(\"malformed ASN.1 DSA signature\");\n }\n };\n this.readPKCS5PrvKeyHex = function (j) {\n var k, i, g, l, m;\n if (a(j) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n try {\n k = d(j, 0, [1], \"02\");\n i = d(j, 0, [2], \"02\");\n g = d(j, 0, [3], \"02\");\n l = d(j, 0, [4], \"02\");\n m = d(j, 0, [5], \"02\");\n } catch (f) {\n throw new Error(\"malformed PKCS#1/5 plain DSA private key\");\n }\n this.setPrivateHex(k, i, g, l, m);\n };\n this.readPKCS8PrvKeyHex = function (j) {\n var k, i, g, l;\n if (a(j) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n try {\n k = d(j, 0, [1, 1, 0], \"02\");\n i = d(j, 0, [1, 1, 1], \"02\");\n g = d(j, 0, [1, 1, 2], \"02\");\n l = d(j, 0, [2, 0], \"02\");\n } catch (f) {\n throw new Error(\"malformed PKCS#8 plain DSA private key\");\n }\n this.setPrivateHex(k, i, g, null, l);\n };\n this.readPKCS8PubKeyHex = function (j) {\n var k, i, g, l;\n if (a(j) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n try {\n k = d(j, 0, [0, 1, 0], \"02\");\n i = d(j, 0, [0, 1, 1], \"02\");\n g = d(j, 0, [0, 1, 2], \"02\");\n l = d(j, 0, [1, 0], \"02\");\n } catch (f) {\n throw new Error(\"malformed PKCS#8 DSA public key\");\n }\n this.setPublicHex(k, i, g, l);\n };\n this.readCertPubKeyHex = function (j, m) {\n var k, i, g, l;\n if (a(j) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n try {\n k = d(j, 0, [0, 5, 0, 1, 0], \"02\");\n i = d(j, 0, [0, 5, 0, 1, 1], \"02\");\n g = d(j, 0, [0, 5, 0, 1, 2], \"02\");\n l = d(j, 0, [0, 5, 1, 0], \"02\");\n } catch (f) {\n throw new Error(\"malformed X.509 certificate DSA public key\");\n }\n this.setPublicHex(k, i, g, l);\n };\n};\nvar KEYUTIL = function () {\n var d = function (p, r, q) {\n return k(CryptoJS.AES, p, r, q);\n };\n var e = function (p, r, q) {\n return k(CryptoJS.TripleDES, p, r, q);\n };\n var a = function (p, r, q) {\n return k(CryptoJS.DES, p, r, q);\n };\n var k = function (s, x, u, q) {\n var r = CryptoJS.enc.Hex.parse(x);\n var w = CryptoJS.enc.Hex.parse(u);\n var p = CryptoJS.enc.Hex.parse(q);\n var t = {};\n t.key = w;\n t.iv = p;\n t.ciphertext = r;\n var v = s.decrypt(t, w, {\n iv: p\n });\n return CryptoJS.enc.Hex.stringify(v);\n };\n var l = function (p, r, q) {\n return g(CryptoJS.AES, p, r, q);\n };\n var o = function (p, r, q) {\n return g(CryptoJS.TripleDES, p, r, q);\n };\n var f = function (p, r, q) {\n return g(CryptoJS.DES, p, r, q);\n };\n var g = function (t, y, v, q) {\n var s = CryptoJS.enc.Hex.parse(y);\n var x = CryptoJS.enc.Hex.parse(v);\n var p = CryptoJS.enc.Hex.parse(q);\n var w = t.encrypt(s, x, {\n iv: p\n });\n var r = CryptoJS.enc.Hex.parse(w.toString());\n var u = CryptoJS.enc.Base64.stringify(r);\n return u;\n };\n var i = {\n \"AES-256-CBC\": {\n proc: d,\n eproc: l,\n keylen: 32,\n ivlen: 16\n },\n \"AES-192-CBC\": {\n proc: d,\n eproc: l,\n keylen: 24,\n ivlen: 16\n },\n \"AES-128-CBC\": {\n proc: d,\n eproc: l,\n keylen: 16,\n ivlen: 16\n },\n \"DES-EDE3-CBC\": {\n proc: e,\n eproc: o,\n keylen: 24,\n ivlen: 8\n },\n \"DES-CBC\": {\n proc: a,\n eproc: f,\n keylen: 8,\n ivlen: 8\n }\n };\n var c = function (p) {\n return i[p][\"proc\"];\n };\n var m = function (p) {\n var r = CryptoJS.lib.WordArray.random(p);\n var q = CryptoJS.enc.Hex.stringify(r);\n return q;\n };\n var n = function (v) {\n var w = {};\n var q = v.match(new RegExp(\"DEK-Info: ([^,]+),([0-9A-Fa-f]+)\", \"m\"));\n if (q) {\n w.cipher = q[1];\n w.ivsalt = q[2];\n }\n var p = v.match(new RegExp(\"-----BEGIN ([A-Z]+) PRIVATE KEY-----\"));\n if (p) {\n w.type = p[1];\n }\n var u = -1;\n var x = 0;\n if (v.indexOf(\"\\r\\n\\r\\n\") != -1) {\n u = v.indexOf(\"\\r\\n\\r\\n\");\n x = 2;\n }\n if (v.indexOf(\"\\n\\n\") != -1) {\n u = v.indexOf(\"\\n\\n\");\n x = 1;\n }\n var t = v.indexOf(\"-----END\");\n if (u != -1 && t != -1) {\n var r = v.substring(u + x * 2, t - x);\n r = r.replace(/\\s+/g, \"\");\n w.data = r;\n }\n return w;\n };\n var j = function (q, y, p) {\n var v = p.substring(0, 16);\n var t = CryptoJS.enc.Hex.parse(v);\n var r = CryptoJS.enc.Utf8.parse(y);\n var u = i[q][\"keylen\"] + i[q][\"ivlen\"];\n var x = \"\";\n var w = null;\n for (;;) {\n var s = CryptoJS.algo.MD5.create();\n if (w != null) {\n s.update(w);\n }\n s.update(r);\n s.update(t);\n w = s.finalize();\n x = x + CryptoJS.enc.Hex.stringify(w);\n if (x.length >= u * 2) {\n break;\n }\n }\n var z = {};\n z.keyhex = x.substr(0, i[q][\"keylen\"] * 2);\n z.ivhex = x.substr(i[q][\"keylen\"] * 2, i[q][\"ivlen\"] * 2);\n return z;\n };\n var b = function (p, v, r, w) {\n var s = CryptoJS.enc.Base64.parse(p);\n var q = CryptoJS.enc.Hex.stringify(s);\n var u = i[v][\"proc\"];\n var t = u(q, r, w);\n return t;\n };\n var h = function (p, s, q, u) {\n var r = i[s][\"eproc\"];\n var t = r(p, q, u);\n return t;\n };\n return {\n version: \"1.0.0\",\n parsePKCS5PEM: function (p) {\n return n(p);\n },\n getKeyAndUnusedIvByPasscodeAndIvsalt: function (q, p, r) {\n return j(q, p, r);\n },\n decryptKeyB64: function (p, r, q, s) {\n return b(p, r, q, s);\n },\n getDecryptedKeyHex: function (y, x) {\n var q = n(y);\n var t = q.type;\n var r = q.cipher;\n var p = q.ivsalt;\n var s = q.data;\n var w = j(r, x, p);\n var v = w.keyhex;\n var u = b(s, r, v, p);\n return u;\n },\n getEncryptedPKCS5PEMFromPrvKeyHex: function (x, s, A, t, r) {\n var p = \"\";\n if (typeof t == \"undefined\" || t == null) {\n t = \"AES-256-CBC\";\n }\n if (typeof i[t] == \"undefined\") {\n throw new Error(\"KEYUTIL unsupported algorithm: \" + t);\n }\n if (typeof r == \"undefined\" || r == null) {\n var v = i[t][\"ivlen\"];\n var u = m(v);\n r = u.toUpperCase();\n }\n var z = j(t, A, r);\n var y = z.keyhex;\n var w = h(s, t, y, r);\n var q = w.replace(/(.{64})/g, \"$1\\r\\n\");\n var p = \"-----BEGIN \" + x + \" PRIVATE KEY-----\\r\\n\";\n p += \"Proc-Type: 4,ENCRYPTED\\r\\n\";\n p += \"DEK-Info: \" + t + \",\" + r + \"\\r\\n\";\n p += \"\\r\\n\";\n p += q;\n p += \"\\r\\n-----END \" + x + \" PRIVATE KEY-----\\r\\n\";\n return p;\n },\n getEncryptedPKCS8PEM: function (r, p, s) {\n var q = this.getEncryptedPKCS8Hex(r, p, s);\n return hextopem(q, \"ENCRYPTED PRIVATE KEY\");\n },\n getEncryptedPKCS8Hex: function (r, p, t) {\n var q;\n if (t == undefined || t == null) {\n q = {};\n } else {\n q = JSON.parse(JSON.stringify(t));\n }\n q.plain = r;\n this.initPBES2Param(q);\n this.encryptPBES2Param(q, p);\n var s = this.generatePBES2ASN1Param(q);\n return KJUR.asn1.ASN1Util.newObject(s).tohex();\n },\n initPBES2Param: function (p) {\n if (aryval(p, \"encalg\") == undefined) {\n p.encalg = \"aes256-CBC\";\n }\n if (aryval(p, \"iter\") == undefined) {\n p.iter = 2048;\n }\n if (aryval(p, \"prf\") == undefined) {\n p.prf = \"hmacWithSHA256\";\n }\n if (aryval(p, \"salt\") == undefined) {\n p.salt = CryptoJS.enc.Hex.stringify(CryptoJS.lib.WordArray.random(8));\n }\n if (aryval(p, \"enciv\") == undefined) {\n var q;\n if (p.encalg == \"des-EDE3-CBC\") {\n q = 8;\n }\n if (p.encalg == \"aes128-CBC\") {\n q = 16;\n }\n if (p.encalg == \"aes256-CBC\") {\n q = 16;\n }\n p.enciv = CryptoJS.enc.Hex.stringify(CryptoJS.lib.WordArray.random(q));\n }\n },\n encryptPBES2Param: function (p, q) {\n var t = KEYUTIL.getDKFromPBES2Param(p, q);\n try {\n var s = KJUR.crypto.Cipher.encrypt(p.plain, t, p.encalg, {\n iv: p.enciv\n });\n } catch (r) {\n throw new Error(\"encrypt error: \" + p.plain + \" \" + t + \" \" + p.encalg + \" \" + p.enciv);\n }\n p.enc = s;\n },\n generatePBES2ASN1Param: function (p) {\n var q = {\n seq: [{\n seq: [{\n oid: \"pkcs5PBES2\"\n }, {\n seq: [{\n seq: [{\n oid: \"pkcs5PBKDF2\"\n }, {\n seq: [{\n octstr: {\n hex: p.salt\n }\n }, {\n \"int\": {\n hex: inttohex(p.iter)\n }\n }]\n }]\n }, {\n seq: [{\n oid: p.encalg\n }, {\n octstr: {\n hex: p.enciv\n }\n }]\n }]\n }]\n }, {\n octstr: {\n hex: p.enc\n }\n }]\n };\n if (p.prf != \"hmacWithSHA1\") {\n q.seq[0].seq[1].seq[0].seq[1].seq.push({\n seq: [{\n oid: p.prf\n }, {\n \"null\": \"\"\n }]\n });\n }\n return q;\n },\n parseHexOfEncryptedPKCS8: function (y) {\n var B = ASN1HEX;\n var z = B.getChildIdx;\n var w = B.getV;\n var t = {};\n var r = z(y, 0);\n if (r.length != 2) {\n throw new Error(\"malformed format: SEQUENCE(0).items != 2: \" + r.length);\n }\n t.ciphertext = w(y, r[1]);\n var A = z(y, r[0]);\n if (A.length != 2) {\n throw new Error(\"malformed format: SEQUENCE(0.0).items != 2: \" + A.length);\n }\n if (w(y, A[0]) != \"2a864886f70d01050d\") {\n throw new Error(\"this only supports pkcs5PBES2\");\n }\n var p = z(y, A[1]);\n if (A.length != 2) {\n throw new Error(\"malformed format: SEQUENCE(0.0.1).items != 2: \" + p.length);\n }\n var q = z(y, p[1]);\n if (q.length != 2) {\n throw new Error(\"malformed format: SEQUENCE(0.0.1.1).items != 2: \" + q.length);\n }\n if (w(y, q[0]) != \"2a864886f70d0307\") {\n throw \"this only supports TripleDES\";\n }\n t.encryptionSchemeAlg = \"TripleDES\";\n t.encryptionSchemeIV = w(y, q[1]);\n var s = z(y, p[0]);\n if (s.length != 2) {\n throw new Error(\"malformed format: SEQUENCE(0.0.1.0).items != 2: \" + s.length);\n }\n if (w(y, s[0]) != \"2a864886f70d01050c\") {\n throw new Error(\"this only supports pkcs5PBKDF2\");\n }\n var x = z(y, s[1]);\n if (x.length < 2) {\n throw new Error(\"malformed format: SEQUENCE(0.0.1.0.1).items < 2: \" + x.length);\n }\n t.pbkdf2Salt = w(y, x[0]);\n var u = w(y, x[1]);\n try {\n t.pbkdf2Iter = parseInt(u, 16);\n } catch (v) {\n throw new Error(\"malformed format pbkdf2Iter: \" + u);\n }\n return t;\n },\n getPBKDF2KeyHexFromParam: function (u, p) {\n var t = CryptoJS.enc.Hex.parse(u.pbkdf2Salt);\n var q = u.pbkdf2Iter;\n var s = CryptoJS.PBKDF2(p, t, {\n keySize: 192 / 32,\n iterations: q\n });\n var r = CryptoJS.enc.Hex.stringify(s);\n return r;\n },\n _getPlainPKCS8HexFromEncryptedPKCS8PEM: function (x, y) {\n var r = pemtohex(x, \"ENCRYPTED PRIVATE KEY\");\n var p = this.parseHexOfEncryptedPKCS8(r);\n var u = KEYUTIL.getPBKDF2KeyHexFromParam(p, y);\n var v = {};\n v.ciphertext = CryptoJS.enc.Hex.parse(p.ciphertext);\n var t = CryptoJS.enc.Hex.parse(u);\n var s = CryptoJS.enc.Hex.parse(p.encryptionSchemeIV);\n var w = CryptoJS.TripleDES.decrypt(v, t, {\n iv: s\n });\n var q = CryptoJS.enc.Hex.stringify(w);\n return q;\n },\n parsePBES2: function (z) {\n var v = ASN1HEX.parse(z);\n if (aryval(v, \"seq.0.seq.0.oid\") != \"pkcs5PBES2\" || aryval(v, \"seq.0.seq.1.seq.0.seq.0.oid\") != \"pkcs5PBKDF2\") {\n throw new Error(\"not pkcs5PBES2 and pkcs5PBKDF2 used\");\n }\n var y = aryval(v, \"seq.0.seq.1.seq.0.seq.1.seq\");\n if (y == undefined) {\n throw new Error(\"PBKDF2 parameter not found\");\n }\n var t = aryval(y, \"0.octstr.hex\");\n var p = aryval(y, \"1.int.hex\");\n var q = aryval(y, \"2.seq.0.oid\", \"hmacWithSHA1\");\n var x = -1;\n try {\n x = parseInt(p, 16);\n } catch (w) {\n throw new Error(\"iter not proper value\");\n }\n var u = aryval(v, \"seq.0.seq.1.seq.1.seq.0.oid\");\n var s = aryval(v, \"seq.0.seq.1.seq.1.seq.1.octstr.hex\");\n var r = aryval(v, \"seq.1.octstr.hex\");\n if (u == undefined || s == undefined || r == undefined) {\n throw new Error(\"encalg, enciv or enc is undefined\");\n }\n var A = {\n salt: t,\n iter: x,\n prf: q,\n encalg: u,\n enciv: s,\n enc: r\n };\n return A;\n },\n getDKFromPBES2Param: function (p, w) {\n var x = {\n hmacWithSHA1: CryptoJS.algo.SHA1,\n hmacWithSHA224: CryptoJS.algo.SHA224,\n hmacWithSHA256: CryptoJS.algo.SHA256,\n hmacWithSHA384: CryptoJS.algo.SHA384,\n hmacWithSHA512: CryptoJS.algo.SHA512\n };\n var q = {\n \"des-EDE3-CBC\": 192 / 32,\n \"aes128-CBC\": 128 / 32,\n \"aes256-CBC\": 256 / 32\n };\n var y = x[p.prf];\n if (y == undefined) {\n throw new Error(\"unsupported prf\");\n }\n var r = q[p.encalg];\n if (r == undefined) {\n throw new Error(\"unsupported encalg\");\n }\n var s = CryptoJS.enc.Hex.parse(p.salt);\n var u = p.iter;\n try {\n var v = CryptoJS.PBKDF2(w, s, {\n keySize: r,\n iterations: u,\n hasher: y\n });\n return CryptoJS.enc.Hex.stringify(v);\n } catch (t) {\n throw new Error(\"PBKDF2 error: \" + t + \" \" + JSON.stringify(p) + \" \" + w);\n }\n },\n getPlainHexFromEncryptedPKCS8PEM: function (t, q) {\n if (t.indexOf(\"BEGIN ENCRYPTED PRIVATE KEY\") == -1) {\n throw new Error(\"not Encrypted PKCS#8 PEM string\");\n }\n var u = pemtohex(t);\n var p;\n try {\n p = KEYUTIL.parsePBES2(u);\n } catch (r) {\n throw new Error(\"malformed PBES2 format: \" + r.message);\n }\n var s = KEYUTIL.getDKFromPBES2Param(p, q);\n return KJUR.crypto.Cipher.decrypt(p.enc, s, p.encalg, {\n iv: p.enciv\n });\n },\n getKeyFromEncryptedPKCS8PEM: function (s, q) {\n var p = this.getPlainHexFromEncryptedPKCS8PEM(s, q);\n var r = this.getKeyFromPlainPrivatePKCS8Hex(p);\n return r;\n },\n parsePlainPrivatePKCS8Hex: function (s) {\n var v = ASN1HEX;\n var u = v.getChildIdx;\n var t = v.getV;\n var q = {};\n q.algparam = null;\n if (s.substr(0, 2) != \"30\") {\n throw new Error(\"malformed plain PKCS8 private key(code:001)\");\n }\n var r = u(s, 0);\n if (r.length < 3) {\n throw new Error(\"malformed plain PKCS8 private key(code:002)\");\n }\n if (s.substr(r[1], 2) != \"30\") {\n throw new Error(\"malformed PKCS8 private key(code:003)\");\n }\n var p = u(s, r[1]);\n if (p.length != 2) {\n throw new Error(\"malformed PKCS8 private key(code:004)\");\n }\n if (s.substr(p[0], 2) != \"06\") {\n throw new Error(\"malformed PKCS8 private key(code:005)\");\n }\n q.algoid = t(s, p[0]);\n if (s.substr(p[1], 2) == \"06\") {\n q.algparam = t(s, p[1]);\n }\n if (s.substr(r[2], 2) != \"04\") {\n throw new Error(\"malformed PKCS8 private key(code:006)\");\n }\n q.keyidx = v.getVidx(s, r[2]);\n return q;\n },\n getKeyFromPlainPrivatePKCS8PEM: function (q) {\n var p = pemtohex(q, \"PRIVATE KEY\");\n var r = this.getKeyFromPlainPrivatePKCS8Hex(p);\n return r;\n },\n getKeyFromPlainPrivatePKCS8Hex: function (p) {\n var q = this.parsePlainPrivatePKCS8Hex(p);\n var r;\n if (q.algoid == \"2a864886f70d010101\") {\n r = new RSAKey();\n } else {\n if (q.algoid == \"2a8648ce380401\") {\n r = new KJUR.crypto.DSA();\n } else {\n if (q.algoid == \"2a8648ce3d0201\") {\n r = new KJUR.crypto.ECDSA();\n } else {\n throw new Error(\"unsupported private key algorithm\");\n }\n }\n }\n r.readPKCS8PrvKeyHex(p);\n return r;\n },\n _getKeyFromPublicPKCS8Hex: function (q) {\n var p;\n var r = ASN1HEX.getVbyList(q, 0, [0, 0], \"06\");\n if (r === \"2a864886f70d010101\") {\n p = new RSAKey();\n } else {\n if (r === \"2a8648ce380401\") {\n p = new KJUR.crypto.DSA();\n } else {\n if (r === \"2a8648ce3d0201\") {\n p = new KJUR.crypto.ECDSA();\n } else {\n throw new Error(\"unsupported PKCS#8 public key hex\");\n }\n }\n }\n p.readPKCS8PubKeyHex(q);\n return p;\n },\n parsePublicRawRSAKeyHex: function (r) {\n var u = ASN1HEX;\n var t = u.getChildIdx;\n var s = u.getV;\n var p = {};\n if (r.substr(0, 2) != \"30\") {\n throw new Error(\"malformed RSA key(code:001)\");\n }\n var q = t(r, 0);\n if (q.length != 2) {\n throw new Error(\"malformed RSA key(code:002)\");\n }\n if (r.substr(q[0], 2) != \"02\") {\n throw new Error(\"malformed RSA key(code:003)\");\n }\n p.n = s(r, q[0]);\n if (r.substr(q[1], 2) != \"02\") {\n throw new Error(\"malformed RSA key(code:004)\");\n }\n p.e = s(r, q[1]);\n return p;\n },\n parsePublicPKCS8Hex: function (t) {\n var v = ASN1HEX;\n var u = v.getChildIdx;\n var s = v.getV;\n var q = {};\n q.algparam = null;\n var r = u(t, 0);\n if (r.length != 2) {\n throw new Error(\"outer DERSequence shall have 2 elements: \" + r.length);\n }\n var w = r[0];\n if (t.substr(w, 2) != \"30\") {\n throw new Error(\"malformed PKCS8 public key(code:001)\");\n }\n var p = u(t, w);\n if (p.length != 2) {\n throw new Error(\"malformed PKCS8 public key(code:002)\");\n }\n if (t.substr(p[0], 2) != \"06\") {\n throw new Error(\"malformed PKCS8 public key(code:003)\");\n }\n q.algoid = s(t, p[0]);\n if (t.substr(p[1], 2) == \"06\") {\n q.algparam = s(t, p[1]);\n } else {\n if (t.substr(p[1], 2) == \"30\") {\n q.algparam = {};\n q.algparam.p = v.getVbyList(t, p[1], [0], \"02\");\n q.algparam.q = v.getVbyList(t, p[1], [1], \"02\");\n q.algparam.g = v.getVbyList(t, p[1], [2], \"02\");\n }\n }\n if (t.substr(r[1], 2) != \"03\") {\n throw new Error(\"malformed PKCS8 public key(code:004)\");\n }\n q.key = s(t, r[1]).substr(2);\n return q;\n }\n };\n}();\nKEYUTIL.getKey = function (l, k, n) {\n var G = ASN1HEX,\n L = G.getChildIdx,\n v = G.getV,\n d = G.getVbyList,\n c = KJUR.crypto,\n i = c.ECDSA,\n C = c.DSA,\n w = RSAKey,\n M = pemtohex,\n F = KEYUTIL;\n if (typeof w != \"undefined\" && l instanceof w) {\n return l;\n }\n if (typeof i != \"undefined\" && l instanceof i) {\n return l;\n }\n if (typeof C != \"undefined\" && l instanceof C) {\n return l;\n }\n if (l.curve !== undefined && l.xy !== undefined && l.d === undefined) {\n return new i({\n pub: l.xy,\n curve: l.curve\n });\n }\n if (l.curve !== undefined && l.d !== undefined) {\n return new i({\n prv: l.d,\n curve: l.curve\n });\n }\n if (l.kty === undefined && l.n !== undefined && l.e !== undefined && l.d === undefined) {\n var P = new w();\n P.setPublic(l.n, l.e);\n return P;\n }\n if (l.kty === undefined && l.n !== undefined && l.e !== undefined && l.d !== undefined && l.p !== undefined && l.q !== undefined && l.dp !== undefined && l.dq !== undefined && l.co !== undefined && l.qi === undefined) {\n var P = new w();\n P.setPrivateEx(l.n, l.e, l.d, l.p, l.q, l.dp, l.dq, l.co);\n return P;\n }\n if (l.kty === undefined && l.n !== undefined && l.e !== undefined && l.d !== undefined && l.p === undefined) {\n var P = new w();\n P.setPrivate(l.n, l.e, l.d);\n return P;\n }\n if (l.p !== undefined && l.q !== undefined && l.g !== undefined && l.y !== undefined && l.x === undefined) {\n var P = new C();\n P.setPublic(l.p, l.q, l.g, l.y);\n return P;\n }\n if (l.p !== undefined && l.q !== undefined && l.g !== undefined && l.y !== undefined && l.x !== undefined) {\n var P = new C();\n P.setPrivate(l.p, l.q, l.g, l.y, l.x);\n return P;\n }\n if (l.kty === \"RSA\" && l.n !== undefined && l.e !== undefined && l.d === undefined) {\n var P = new w();\n P.setPublic(b64utohex(l.n), b64utohex(l.e));\n return P;\n }\n if (l.kty === \"RSA\" && l.n !== undefined && l.e !== undefined && l.d !== undefined && l.p !== undefined && l.q !== undefined && l.dp !== undefined && l.dq !== undefined && l.qi !== undefined) {\n var P = new w();\n P.setPrivateEx(b64utohex(l.n), b64utohex(l.e), b64utohex(l.d), b64utohex(l.p), b64utohex(l.q), b64utohex(l.dp), b64utohex(l.dq), b64utohex(l.qi));\n return P;\n }\n if (l.kty === \"RSA\" && l.n !== undefined && l.e !== undefined && l.d !== undefined) {\n var P = new w();\n P.setPrivate(b64utohex(l.n), b64utohex(l.e), b64utohex(l.d));\n return P;\n }\n if (l.kty === \"EC\" && l.crv !== undefined && l.x !== undefined && l.y !== undefined && l.d === undefined) {\n var j = new i({\n curve: l.crv\n });\n var t = j.ecparams.keycharlen;\n var B = (\"0000000000\" + b64utohex(l.x)).slice(-t);\n var z = (\"0000000000\" + b64utohex(l.y)).slice(-t);\n var u = \"04\" + B + z;\n j.setPublicKeyHex(u);\n return j;\n }\n if (l.kty === \"EC\" && l.crv !== undefined && l.x !== undefined && l.y !== undefined && l.d !== undefined) {\n var j = new i({\n curve: l.crv\n });\n var t = j.ecparams.keycharlen;\n var B = (\"0000000000\" + b64utohex(l.x)).slice(-t);\n var z = (\"0000000000\" + b64utohex(l.y)).slice(-t);\n var u = \"04\" + B + z;\n var b = (\"0000000000\" + b64utohex(l.d)).slice(-t);\n j.setPublicKeyHex(u);\n j.setPrivateKeyHex(b);\n return j;\n }\n if (n === \"pkcs5prv\") {\n var J = l,\n G = ASN1HEX,\n N,\n P;\n N = L(J, 0);\n if (N.length === 9) {\n P = new w();\n P.readPKCS5PrvKeyHex(J);\n } else {\n if (N.length === 6) {\n P = new C();\n P.readPKCS5PrvKeyHex(J);\n } else {\n if (N.length > 2 && J.substr(N[1], 2) === \"04\") {\n P = new i();\n P.readPKCS5PrvKeyHex(J);\n } else {\n throw new Error(\"unsupported PKCS#1/5 hexadecimal key\");\n }\n }\n }\n return P;\n }\n if (n === \"pkcs8prv\") {\n var P = F.getKeyFromPlainPrivatePKCS8Hex(l);\n return P;\n }\n if (n === \"pkcs8pub\") {\n return F._getKeyFromPublicPKCS8Hex(l);\n }\n if (n === \"x509pub\") {\n return X509.getPublicKeyFromCertHex(l);\n }\n if (l.indexOf(\"-END CERTIFICATE-\", 0) != -1 || l.indexOf(\"-END X509 CERTIFICATE-\", 0) != -1 || l.indexOf(\"-END TRUSTED CERTIFICATE-\", 0) != -1) {\n return X509.getPublicKeyFromCertPEM(l);\n }\n if (l.indexOf(\"-END PUBLIC KEY-\") != -1) {\n var O = pemtohex(l, \"PUBLIC KEY\");\n return F._getKeyFromPublicPKCS8Hex(O);\n }\n if (l.indexOf(\"-END RSA PRIVATE KEY-\") != -1 && l.indexOf(\"4,ENCRYPTED\") == -1) {\n var m = M(l, \"RSA PRIVATE KEY\");\n return F.getKey(m, null, \"pkcs5prv\");\n }\n if (l.indexOf(\"-END DSA PRIVATE KEY-\") != -1 && l.indexOf(\"4,ENCRYPTED\") == -1) {\n var I = M(l, \"DSA PRIVATE KEY\");\n var E = d(I, 0, [1], \"02\");\n var D = d(I, 0, [2], \"02\");\n var K = d(I, 0, [3], \"02\");\n var r = d(I, 0, [4], \"02\");\n var s = d(I, 0, [5], \"02\");\n var P = new C();\n P.setPrivate(new BigInteger(E, 16), new BigInteger(D, 16), new BigInteger(K, 16), new BigInteger(r, 16), new BigInteger(s, 16));\n return P;\n }\n if (l.indexOf(\"-END EC PRIVATE KEY-\") != -1 && l.indexOf(\"4,ENCRYPTED\") == -1) {\n var m = M(l, \"EC PRIVATE KEY\");\n return F.getKey(m, null, \"pkcs5prv\");\n }\n if (l.indexOf(\"-END PRIVATE KEY-\") != -1) {\n return F.getKeyFromPlainPrivatePKCS8PEM(l);\n }\n if (l.indexOf(\"-END RSA PRIVATE KEY-\") != -1 && l.indexOf(\"4,ENCRYPTED\") != -1) {\n var o = F.getDecryptedKeyHex(l, k);\n var H = new RSAKey();\n H.readPKCS5PrvKeyHex(o);\n return H;\n }\n if (l.indexOf(\"-END EC PRIVATE KEY-\") != -1 && l.indexOf(\"4,ENCRYPTED\") != -1) {\n var I = F.getDecryptedKeyHex(l, k);\n var P = d(I, 0, [1], \"04\");\n var f = d(I, 0, [2, 0], \"06\");\n var A = d(I, 0, [3, 0], \"03\").substr(2);\n var e = \"\";\n if (KJUR.crypto.OID.oidhex2name[f] !== undefined) {\n e = KJUR.crypto.OID.oidhex2name[f];\n } else {\n throw new Error(\"undefined OID(hex) in KJUR.crypto.OID: \" + f);\n }\n var j = new i({\n curve: e\n });\n j.setPublicKeyHex(A);\n j.setPrivateKeyHex(P);\n j.isPublic = false;\n return j;\n }\n if (l.indexOf(\"-END DSA PRIVATE KEY-\") != -1 && l.indexOf(\"4,ENCRYPTED\") != -1) {\n var I = F.getDecryptedKeyHex(l, k);\n var E = d(I, 0, [1], \"02\");\n var D = d(I, 0, [2], \"02\");\n var K = d(I, 0, [3], \"02\");\n var r = d(I, 0, [4], \"02\");\n var s = d(I, 0, [5], \"02\");\n var P = new C();\n P.setPrivate(new BigInteger(E, 16), new BigInteger(D, 16), new BigInteger(K, 16), new BigInteger(r, 16), new BigInteger(s, 16));\n return P;\n }\n if (l.indexOf(\"-END ENCRYPTED PRIVATE KEY-\") != -1) {\n return F.getKeyFromEncryptedPKCS8PEM(l, k);\n }\n throw new Error(\"not supported argument\");\n};\nKEYUTIL.generateKeypair = function (a, c) {\n if (a == \"RSA\") {\n var b = c;\n var h = new RSAKey();\n h.generate(b, \"10001\");\n h.isPrivate = true;\n h.isPublic = true;\n var f = new RSAKey();\n var e = h.n.toString(16);\n var i = h.e.toString(16);\n f.setPublic(e, i);\n f.isPrivate = false;\n f.isPublic = true;\n var k = {};\n k.prvKeyObj = h;\n k.pubKeyObj = f;\n return k;\n } else {\n if (a == \"EC\") {\n var d = c;\n var g = new KJUR.crypto.ECDSA({\n curve: d\n });\n var j = g.generateKeyPairHex();\n var h = new KJUR.crypto.ECDSA({\n curve: d\n });\n h.setPublicKeyHex(j.ecpubhex);\n h.setPrivateKeyHex(j.ecprvhex);\n h.isPrivate = true;\n h.isPublic = false;\n var f = new KJUR.crypto.ECDSA({\n curve: d\n });\n f.setPublicKeyHex(j.ecpubhex);\n f.isPrivate = false;\n f.isPublic = true;\n var k = {};\n k.prvKeyObj = h;\n k.pubKeyObj = f;\n return k;\n } else {\n throw new Error(\"unknown algorithm: \" + a);\n }\n }\n};\nKEYUTIL.getPEM = function (b, C, x, m, p, j) {\n var E = KJUR,\n k = E.asn1,\n y = k.DERObjectIdentifier,\n e = k.DERInteger,\n l = k.ASN1Util.newObject,\n a = k.x509,\n B = a.SubjectPublicKeyInfo,\n d = E.crypto,\n t = d.DSA,\n q = d.ECDSA,\n n = RSAKey;\n function z(s) {\n var G = l({\n seq: [{\n \"int\": 0\n }, {\n \"int\": {\n bigint: s.n\n }\n }, {\n \"int\": s.e\n }, {\n \"int\": {\n bigint: s.d\n }\n }, {\n \"int\": {\n bigint: s.p\n }\n }, {\n \"int\": {\n bigint: s.q\n }\n }, {\n \"int\": {\n bigint: s.dmp1\n }\n }, {\n \"int\": {\n bigint: s.dmq1\n }\n }, {\n \"int\": {\n bigint: s.coeff\n }\n }]\n });\n return G;\n }\n function A(G) {\n var s = l({\n seq: [{\n \"int\": 1\n }, {\n octstr: {\n hex: G.prvKeyHex\n }\n }, {\n tag: [\"a0\", true, {\n oid: {\n name: G.curveName\n }\n }]\n }, {\n tag: [\"a1\", true, {\n bitstr: {\n hex: \"00\" + G.pubKeyHex\n }\n }]\n }]\n });\n return s;\n }\n function w(s) {\n var G = l({\n seq: [{\n \"int\": 0\n }, {\n \"int\": {\n bigint: s.p\n }\n }, {\n \"int\": {\n bigint: s.q\n }\n }, {\n \"int\": {\n bigint: s.g\n }\n }, {\n \"int\": {\n bigint: s.y\n }\n }, {\n \"int\": {\n bigint: s.x\n }\n }]\n });\n return G;\n }\n if ((n !== undefined && b instanceof n || t !== undefined && b instanceof t || q !== undefined && b instanceof q) && b.isPublic == true && (C === undefined || C == \"PKCS8PUB\")) {\n var D = new B(b);\n var v = D.tohex();\n return hextopem(v, \"PUBLIC KEY\");\n }\n if (C == \"PKCS1PRV\" && n !== undefined && b instanceof n && (x === undefined || x == null) && b.isPrivate == true) {\n var D = z(b);\n var v = D.tohex();\n return hextopem(v, \"RSA PRIVATE KEY\");\n }\n if (C == \"PKCS1PRV\" && q !== undefined && b instanceof q && (x === undefined || x == null) && b.isPrivate == true) {\n var i = new y({\n name: b.curveName\n });\n var u = i.tohex();\n var h = A(b);\n var r = h.tohex();\n var o = \"\";\n o += hextopem(u, \"EC PARAMETERS\");\n o += hextopem(r, \"EC PRIVATE KEY\");\n return o;\n }\n if (C == \"PKCS1PRV\" && t !== undefined && b instanceof t && (x === undefined || x == null) && b.isPrivate == true) {\n var D = w(b);\n var v = D.tohex();\n return hextopem(v, \"DSA PRIVATE KEY\");\n }\n if (C == \"PKCS5PRV\" && n !== undefined && b instanceof n && x !== undefined && x != null && b.isPrivate == true) {\n var D = z(b);\n var v = D.tohex();\n if (m === undefined) {\n m = \"DES-EDE3-CBC\";\n }\n return this.getEncryptedPKCS5PEMFromPrvKeyHex(\"RSA\", v, x, m, j);\n }\n if (C == \"PKCS5PRV\" && q !== undefined && b instanceof q && x !== undefined && x != null && b.isPrivate == true) {\n var D = A(b);\n var v = D.tohex();\n if (m === undefined) {\n m = \"DES-EDE3-CBC\";\n }\n return this.getEncryptedPKCS5PEMFromPrvKeyHex(\"EC\", v, x, m, j);\n }\n if (C == \"PKCS5PRV\" && t !== undefined && b instanceof t && x !== undefined && x != null && b.isPrivate == true) {\n var D = w(b);\n var v = D.tohex();\n if (m === undefined) {\n m = \"DES-EDE3-CBC\";\n }\n return this.getEncryptedPKCS5PEMFromPrvKeyHex(\"DSA\", v, x, m, j);\n }\n var f = function (G, H) {\n if (typeof H == \"string\") {\n return KEYUTIL.getEncryptedPKCS8PEM(G, H);\n } else {\n if (typeof H == \"object\" && aryval(H, \"passcode\") != undefined) {\n var I = JSON.parse(JSON.stringify(H));\n var s = I.passcode;\n delete I.passcode;\n return KEYUTIL.getEncryptedPKCS8PEM(G, s, I);\n }\n }\n };\n if (C == \"PKCS8PRV\" && n != undefined && b instanceof n && b.isPrivate == true) {\n var g = z(b);\n var c = g.tohex();\n var D = l({\n seq: [{\n \"int\": 0\n }, {\n seq: [{\n oid: {\n name: \"rsaEncryption\"\n }\n }, {\n \"null\": true\n }]\n }, {\n octstr: {\n hex: c\n }\n }]\n });\n var v = D.tohex();\n if (x === undefined || x == null) {\n return hextopem(v, \"PRIVATE KEY\");\n } else {\n return f(v, x);\n }\n }\n if (C == \"PKCS8PRV\" && q !== undefined && b instanceof q && b.isPrivate == true) {\n var F = {\n seq: [{\n \"int\": 1\n }, {\n octstr: {\n hex: b.prvKeyHex\n }\n }]\n };\n if (typeof b.pubKeyHex == \"string\") {\n F.seq.push({\n tag: [\"a1\", true, {\n bitstr: {\n hex: \"00\" + b.pubKeyHex\n }\n }]\n });\n }\n var g = new l(F);\n var c = g.tohex();\n var D = l({\n seq: [{\n \"int\": 0\n }, {\n seq: [{\n oid: {\n name: \"ecPublicKey\"\n }\n }, {\n oid: {\n name: b.curveName\n }\n }]\n }, {\n octstr: {\n hex: c\n }\n }]\n });\n var v = D.tohex();\n if (x === undefined || x == null) {\n return hextopem(v, \"PRIVATE KEY\");\n } else {\n return f(v, x);\n }\n }\n if (C == \"PKCS8PRV\" && t !== undefined && b instanceof t && b.isPrivate == true) {\n var g = new e({\n bigint: b.x\n });\n var c = g.tohex();\n var D = l({\n seq: [{\n \"int\": 0\n }, {\n seq: [{\n oid: {\n name: \"dsa\"\n }\n }, {\n seq: [{\n \"int\": {\n bigint: b.p\n }\n }, {\n \"int\": {\n bigint: b.q\n }\n }, {\n \"int\": {\n bigint: b.g\n }\n }]\n }]\n }, {\n octstr: {\n hex: c\n }\n }]\n });\n var v = D.tohex();\n if (x === undefined || x == null) {\n return hextopem(v, \"PRIVATE KEY\");\n } else {\n return f(v, x);\n }\n }\n throw new Error(\"unsupported object nor format\");\n};\nKEYUTIL.getKeyFromCSRPEM = function (b) {\n var a = pemtohex(b, \"CERTIFICATE REQUEST\");\n var c = KEYUTIL.getKeyFromCSRHex(a);\n return c;\n};\nKEYUTIL.getKeyFromCSRHex = function (a) {\n var c = KEYUTIL.parseCSRHex(a);\n var b = KEYUTIL.getKey(c.p8pubkeyhex, null, \"pkcs8pub\");\n return b;\n};\nKEYUTIL.parseCSRHex = function (d) {\n var i = ASN1HEX;\n var f = i.getChildIdx;\n var c = i.getTLV;\n var b = {};\n var g = d;\n if (g.substr(0, 2) != \"30\") {\n throw new Error(\"malformed CSR(code:001)\");\n }\n var e = f(g, 0);\n if (e.length < 1) {\n throw new Error(\"malformed CSR(code:002)\");\n }\n if (g.substr(e[0], 2) != \"30\") {\n throw new Error(\"malformed CSR(code:003)\");\n }\n var a = f(g, e[0]);\n if (a.length < 3) {\n throw new Error(\"malformed CSR(code:004)\");\n }\n b.p8pubkeyhex = c(g, a[2]);\n return b;\n};\nKEYUTIL.getKeyID = function (f) {\n var c = KEYUTIL;\n var e = ASN1HEX;\n if (typeof f === \"string\" && f.indexOf(\"BEGIN \") != -1) {\n f = c.getKey(f);\n }\n var d = pemtohex(c.getPEM(f));\n var b = e.getIdxbyList(d, 0, [1]);\n var a = e.getV(d, b).substring(2);\n return KJUR.crypto.Util.hashHex(a, \"sha1\");\n};\nKEYUTIL.getJWK = function (d, h, g, b, f) {\n var i;\n var k = {};\n var e;\n var c = KJUR.crypto.Util.hashHex;\n if (typeof d == \"string\") {\n i = KEYUTIL.getKey(d);\n if (d.indexOf(\"CERTIFICATE\") != -1) {\n e = pemtohex(d);\n }\n } else {\n if (typeof d == \"object\") {\n if (d instanceof X509) {\n i = d.getPublicKey();\n e = d.hex;\n } else {\n i = d;\n }\n } else {\n throw new Error(\"unsupported keyinfo type\");\n }\n }\n if (i instanceof RSAKey && i.isPrivate) {\n k.kty = \"RSA\";\n k.n = hextob64u(i.n.toString(16));\n k.e = hextob64u(i.e.toString(16));\n k.d = hextob64u(i.d.toString(16));\n k.p = hextob64u(i.p.toString(16));\n k.q = hextob64u(i.q.toString(16));\n k.dp = hextob64u(i.dmp1.toString(16));\n k.dq = hextob64u(i.dmq1.toString(16));\n k.qi = hextob64u(i.coeff.toString(16));\n } else {\n if (i instanceof RSAKey && i.isPublic) {\n k.kty = \"RSA\";\n k.n = hextob64u(i.n.toString(16));\n k.e = hextob64u(i.e.toString(16));\n } else {\n if (i instanceof KJUR.crypto.ECDSA && i.isPrivate) {\n var a = i.getShortNISTPCurveName();\n if (a !== \"P-256\" && a !== \"P-384\" && a !== \"P-521\") {\n throw new Error(\"unsupported curve name for JWT: \" + a);\n }\n var j = i.getPublicKeyXYHex();\n k.kty = \"EC\";\n k.crv = a;\n k.x = hextob64u(j.x);\n k.y = hextob64u(j.y);\n k.d = hextob64u(i.prvKeyHex);\n } else {\n if (i instanceof KJUR.crypto.ECDSA && i.isPublic) {\n var a = i.getShortNISTPCurveName();\n if (a !== \"P-256\" && a !== \"P-384\" && a !== \"P-521\") {\n throw new Error(\"unsupported curve name for JWT: \" + a);\n }\n var j = i.getPublicKeyXYHex();\n k.kty = \"EC\";\n k.crv = a;\n k.x = hextob64u(j.x);\n k.y = hextob64u(j.y);\n }\n }\n }\n }\n if (k.kty == undefined) {\n throw new Error(\"unsupported keyinfo\");\n }\n if (!i.isPrivate && h != true) {\n k.kid = KJUR.jws.JWS.getJWKthumbprint(k);\n }\n if (e != undefined && g != true) {\n k.x5c = [hex2b64(e)];\n }\n if (e != undefined && b != true) {\n k.x5t = b64tob64u(hex2b64(c(e, \"sha1\")));\n }\n if (e != undefined && f != true) {\n k[\"x5t#S256\"] = b64tob64u(hex2b64(c(e, \"sha256\")));\n }\n return k;\n};\nKEYUTIL.getJWKFromKey = function (a) {\n return KEYUTIL.getJWK(a, true, true, true, true);\n};\nRSAKey.getPosArrayOfChildrenFromHex = function (a) {\n return ASN1HEX.getChildIdx(a, 0);\n};\nRSAKey.getHexValueArrayOfChildrenFromHex = function (f) {\n var n = ASN1HEX;\n var i = n.getV;\n var k = RSAKey.getPosArrayOfChildrenFromHex(f);\n var e = i(f, k[0]);\n var j = i(f, k[1]);\n var b = i(f, k[2]);\n var c = i(f, k[3]);\n var h = i(f, k[4]);\n var g = i(f, k[5]);\n var m = i(f, k[6]);\n var l = i(f, k[7]);\n var d = i(f, k[8]);\n var k = new Array();\n k.push(e, j, b, c, h, g, m, l, d);\n return k;\n};\nRSAKey.prototype.readPrivateKeyFromPEMString = function (d) {\n var c = pemtohex(d);\n var b = RSAKey.getHexValueArrayOfChildrenFromHex(c);\n this.setPrivateEx(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8]);\n};\nRSAKey.prototype.readPKCS5PrvKeyHex = function (c) {\n var b = RSAKey.getHexValueArrayOfChildrenFromHex(c);\n this.setPrivateEx(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8]);\n};\nRSAKey.prototype.readPKCS8PrvKeyHex = function (e) {\n var c, i, k, b, a, f, d, j;\n var m = ASN1HEX;\n var l = m.getVbyListEx;\n if (m.isASN1HEX(e) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n try {\n c = l(e, 0, [2, 0, 1], \"02\");\n i = l(e, 0, [2, 0, 2], \"02\");\n k = l(e, 0, [2, 0, 3], \"02\");\n b = l(e, 0, [2, 0, 4], \"02\");\n a = l(e, 0, [2, 0, 5], \"02\");\n f = l(e, 0, [2, 0, 6], \"02\");\n d = l(e, 0, [2, 0, 7], \"02\");\n j = l(e, 0, [2, 0, 8], \"02\");\n } catch (g) {\n throw new Error(\"malformed PKCS#8 plain RSA private key\");\n }\n this.setPrivateEx(c, i, k, b, a, f, d, j);\n};\nRSAKey.prototype.readPKCS5PubKeyHex = function (c) {\n var e = ASN1HEX;\n var b = e.getV;\n if (e.isASN1HEX(c) === false) {\n throw new Error(\"keyHex is not ASN.1 hex string\");\n }\n var a = e.getChildIdx(c, 0);\n if (a.length !== 2 || c.substr(a[0], 2) !== \"02\" || c.substr(a[1], 2) !== \"02\") {\n throw new Error(\"wrong hex for PKCS#5 public key\");\n }\n var f = b(c, a[0]);\n var d = b(c, a[1]);\n this.setPublic(f, d);\n};\nRSAKey.prototype.readPKCS8PubKeyHex = function (b) {\n var c = ASN1HEX;\n if (c.isASN1HEX(b) === false) {\n throw new Error(\"not ASN.1 hex string\");\n }\n if (c.getTLVbyListEx(b, 0, [0, 0]) !== \"06092a864886f70d010101\") {\n throw new Error(\"not PKCS8 RSA public key\");\n }\n var a = c.getTLVbyListEx(b, 0, [1, 0]);\n this.readPKCS5PubKeyHex(a);\n};\nRSAKey.prototype.readCertPubKeyHex = function (b, d) {\n var a, c;\n a = new X509();\n a.readCertHex(b);\n c = a.getPublicKeyHex();\n this.readPKCS8PubKeyHex(c);\n};\nvar _RE_HEXDECONLY = new RegExp(\"[^0-9a-f]\", \"gi\");\nfunction _rsasign_getHexPaddedDigestInfoForString(d, e, a) {\n var b = function (f) {\n return KJUR.crypto.Util.hashString(f, a);\n };\n var c = b(d);\n return KJUR.crypto.Util.getPaddedDigestInfoHex(c, a, e);\n}\nfunction _zeroPaddingOfSignature(e, d) {\n var c = \"\";\n var a = d / 4 - e.length;\n for (var b = 0; b < a; b++) {\n c = c + \"0\";\n }\n return c + e;\n}\nRSAKey.prototype.sign = function (d, a) {\n var b = function (e) {\n return KJUR.crypto.Util.hashString(e, a);\n };\n var c = b(d);\n return this.signWithMessageHash(c, a);\n};\nRSAKey.prototype.signWithMessageHash = function (e, c) {\n var f = KJUR.crypto.Util.getPaddedDigestInfoHex(e, c, this.n.bitLength());\n var b = parseBigInt(f, 16);\n var d = this.doPrivate(b);\n var a = d.toString(16);\n return _zeroPaddingOfSignature(a, this.n.bitLength());\n};\nfunction pss_mgf1_str(c, a, e) {\n var b = \"\",\n d = 0;\n while (b.length < a) {\n b += hextorstr(e(rstrtohex(c + String.fromCharCode.apply(String, [(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255]))));\n d += 1;\n }\n return b;\n}\nRSAKey.prototype.signPSS = function (e, a, d) {\n var c = function (f) {\n return KJUR.crypto.Util.hashHex(f, a);\n };\n var b = c(rstrtohex(e));\n if (d === undefined) {\n d = -1;\n }\n return this.signWithMessageHashPSS(b, a, d);\n};\nRSAKey.prototype.signWithMessageHashPSS = function (l, a, k) {\n var b = hextorstr(l);\n var g = b.length;\n var m = this.n.bitLength() - 1;\n var c = Math.ceil(m / 8);\n var d;\n var o = function (i) {\n return KJUR.crypto.Util.hashHex(i, a);\n };\n if (k === -1 || k === undefined) {\n k = g;\n } else {\n if (k === -2) {\n k = c - g - 2;\n } else {\n if (k < -2) {\n throw new Error(\"invalid salt length\");\n }\n }\n }\n if (c < g + k + 2) {\n throw new Error(\"data too long\");\n }\n var f = \"\";\n if (k > 0) {\n f = new Array(k);\n new SecureRandom().nextBytes(f);\n f = String.fromCharCode.apply(String, f);\n }\n var n = hextorstr(o(rstrtohex(\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\" + b + f)));\n var j = [];\n for (d = 0; d < c - k - g - 2; d += 1) {\n j[d] = 0;\n }\n var e = String.fromCharCode.apply(String, j) + \"\\x01\" + f;\n var h = pss_mgf1_str(n, e.length, o);\n var q = [];\n for (d = 0; d < e.length; d += 1) {\n q[d] = e.charCodeAt(d) ^ h.charCodeAt(d);\n }\n var p = 65280 >> 8 * c - m & 255;\n q[0] &= ~p;\n for (d = 0; d < g; d++) {\n q.push(n.charCodeAt(d));\n }\n q.push(188);\n return _zeroPaddingOfSignature(this.doPrivate(new BigInteger(q)).toString(16), this.n.bitLength());\n};\nfunction _rsasign_getDecryptSignatureBI(a, d, c) {\n var b = new RSAKey();\n b.setPublic(d, c);\n var e = b.doPublic(a);\n return e;\n}\nfunction _rsasign_getHexDigestInfoFromSig(a, c, b) {\n var e = _rsasign_getDecryptSignatureBI(a, c, b);\n var d = e.toString(16).replace(/^1f+00/, \"\");\n return d;\n}\nfunction _rsasign_getAlgNameAndHashFromHexDisgestInfo(f) {\n for (var e in KJUR.crypto.Util.DIGESTINFOHEAD) {\n var d = KJUR.crypto.Util.DIGESTINFOHEAD[e];\n var b = d.length;\n if (f.substring(0, b) == d) {\n var c = [e, f.substring(b)];\n return c;\n }\n }\n return [];\n}\nRSAKey.prototype.verify = function (f, l) {\n l = l.toLowerCase();\n if (l.match(/^[0-9a-f]+$/) == null) {\n return false;\n }\n var b = parseBigInt(l, 16);\n var k = this.n.bitLength();\n if (b.bitLength() > k) {\n return false;\n }\n var j = this.doPublic(b);\n var i = j.toString(16);\n if (i.length + 3 != k / 4) {\n return false;\n }\n var e = i.replace(/^1f+00/, \"\");\n var g = _rsasign_getAlgNameAndHashFromHexDisgestInfo(e);\n if (g.length == 0) {\n return false;\n }\n var d = g[0];\n var h = g[1];\n var a = function (m) {\n return KJUR.crypto.Util.hashString(m, d);\n };\n var c = a(f);\n return h == c;\n};\nRSAKey.prototype.verifyWithMessageHash = function (e, a) {\n if (a.length != Math.ceil(this.n.bitLength() / 4)) {\n return false;\n }\n var b = parseBigInt(a, 16);\n if (b.bitLength() > this.n.bitLength()) {\n return 0;\n }\n var h = this.doPublic(b);\n var g = h.toString(16).replace(/^1f+00/, \"\");\n var c = _rsasign_getAlgNameAndHashFromHexDisgestInfo(g);\n if (c.length == 0) {\n return false;\n }\n var d = c[0];\n var f = c[1];\n return f == e;\n};\nRSAKey.prototype.verifyPSS = function (c, b, a, f) {\n var e = function (g) {\n return KJUR.crypto.Util.hashHex(g, a);\n };\n var d = e(rstrtohex(c));\n if (f === undefined) {\n f = -1;\n }\n return this.verifyWithMessageHashPSS(d, b, a, f);\n};\nRSAKey.prototype.verifyWithMessageHashPSS = function (f, s, l, c) {\n if (s.length != Math.ceil(this.n.bitLength() / 4)) {\n return false;\n }\n var k = new BigInteger(s, 16);\n var r = function (i) {\n return KJUR.crypto.Util.hashHex(i, l);\n };\n var j = hextorstr(f);\n var h = j.length;\n var g = this.n.bitLength() - 1;\n var m = Math.ceil(g / 8);\n var q;\n if (c === -1 || c === undefined) {\n c = h;\n } else {\n if (c === -2) {\n c = m - h - 2;\n } else {\n if (c < -2) {\n throw new Error(\"invalid salt length\");\n }\n }\n }\n if (m < h + c + 2) {\n throw new Error(\"data too long\");\n }\n var a = this.doPublic(k).toByteArray();\n for (q = 0; q < a.length; q += 1) {\n a[q] &= 255;\n }\n while (a.length < m) {\n a.unshift(0);\n }\n if (a[m - 1] !== 188) {\n throw new Error(\"encoded message does not end in 0xbc\");\n }\n a = String.fromCharCode.apply(String, a);\n var d = a.substr(0, m - h - 1);\n var e = a.substr(d.length, h);\n var p = 65280 >> 8 * m - g & 255;\n if ((d.charCodeAt(0) & p) !== 0) {\n throw new Error(\"bits beyond keysize not zero\");\n }\n var n = pss_mgf1_str(e, d.length, r);\n var o = [];\n for (q = 0; q < d.length; q += 1) {\n o[q] = d.charCodeAt(q) ^ n.charCodeAt(q);\n }\n o[0] &= ~p;\n var b = m - h - c - 2;\n for (q = 0; q < b; q += 1) {\n if (o[q] !== 0) {\n throw new Error(\"leftmost octets not zero\");\n }\n }\n if (o[b] !== 1) {\n throw new Error(\"0x01 marker not found\");\n }\n return e === hextorstr(r(rstrtohex(\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\" + j + String.fromCharCode.apply(String, o.slice(-c)))));\n};\nRSAKey.SALT_LEN_HLEN = -1;\nRSAKey.SALT_LEN_MAX = -2;\nRSAKey.SALT_LEN_RECOVER = -2;\nfunction X509(v) {\n var o = ASN1HEX,\n s = o.getChildIdx,\n k = o.getV,\n y = o.dump,\n j = o.parse,\n b = o.getTLV,\n c = o.getVbyList,\n p = o.getVbyListEx,\n a = o.getTLVbyList,\n q = o.getTLVbyListEx,\n l = o.getIdxbyList,\n f = o.getIdxbyListEx,\n n = o.getVidx,\n x = o.getInt,\n u = o.oidname,\n r = o.hextooidstr,\n d = X509,\n w = pemtohex,\n g,\n m = Error;\n try {\n g = KJUR.asn1.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV;\n } catch (t) {}\n this.HEX2STAG = {\n \"0c\": \"utf8\",\n \"13\": \"prn\",\n \"16\": \"ia5\",\n \"1a\": \"vis\",\n \"1e\": \"bmp\"\n };\n this.hex = null;\n this.version = 0;\n this.foffset = 0;\n this.aExtInfo = null;\n this.getVersion = function () {\n if (this.hex === null || this.version !== 0) {\n return this.version;\n }\n var A = a(this.hex, 0, [0, 0]);\n if (A.substr(0, 2) == \"a0\") {\n var B = a(A, 0, [0]);\n var z = x(B, 0);\n if (z < 0 || 2 < z) {\n throw new Error(\"malformed version field\");\n }\n this.version = z + 1;\n return this.version;\n } else {\n this.version = 1;\n this.foffset = -1;\n return 1;\n }\n };\n this.getSerialNumberHex = function () {\n return p(this.hex, 0, [0, 0], \"02\");\n };\n this.getSignatureAlgorithmField = function () {\n var z = q(this.hex, 0, [0, 1]);\n return this.getAlgorithmIdentifierName(z);\n };\n this.getAlgorithmIdentifierName = function (z) {\n for (var A in g) {\n if (z === g[A]) {\n return A;\n }\n }\n return u(p(z, 0, [0], \"06\"));\n };\n this.getIssuer = function (A, z) {\n return this.getX500Name(this.getIssuerHex(), A, z);\n };\n this.getIssuerHex = function () {\n return a(this.hex, 0, [0, 3 + this.foffset], \"30\");\n };\n this.getIssuerString = function () {\n var z = this.getIssuer();\n return z.str;\n };\n this.getSubject = function (A, z) {\n return this.getX500Name(this.getSubjectHex(), A, z);\n };\n this.getSubjectHex = function () {\n return a(this.hex, 0, [0, 5 + this.foffset], \"30\");\n };\n this.getSubjectString = function () {\n var z = this.getSubject();\n return z.str;\n };\n this.getNotBefore = function () {\n var z = c(this.hex, 0, [0, 4 + this.foffset, 0]);\n z = z.replace(/(..)/g, \"%$1\");\n z = decodeURIComponent(z);\n return z;\n };\n this.getNotAfter = function () {\n var z = c(this.hex, 0, [0, 4 + this.foffset, 1]);\n z = z.replace(/(..)/g, \"%$1\");\n z = decodeURIComponent(z);\n return z;\n };\n this.getPublicKeyHex = function () {\n return this.getSPKI();\n };\n this.getSPKI = function () {\n return a(this.hex, 0, [0, 6 + this.foffset], \"30\");\n };\n this.getSPKIValue = function () {\n var z = this.getSPKI();\n if (z == null) {\n return null;\n }\n return c(z, 0, [1], \"03\", true);\n };\n this.getPublicKeyIdx = function () {\n return l(this.hex, 0, [0, 6 + this.foffset], \"30\");\n };\n this.getPublicKeyContentIdx = function () {\n var z = this.getPublicKeyIdx();\n return l(this.hex, z, [1, 0], \"30\");\n };\n this.getPublicKey = function () {\n return KEYUTIL.getKey(this.getPublicKeyHex(), null, \"pkcs8pub\");\n };\n this.getSignatureAlgorithmName = function () {\n var z = a(this.hex, 0, [1], \"30\");\n return this.getAlgorithmIdentifierName(z);\n };\n this.getSignatureValueHex = function () {\n return c(this.hex, 0, [2], \"03\", true);\n };\n this.verifySignature = function (B) {\n var C = this.getSignatureAlgorithmField();\n var z = this.getSignatureValueHex();\n var A = a(this.hex, 0, [0], \"30\");\n var D = new KJUR.crypto.Signature({\n alg: C\n });\n D.init(B);\n D.updateHex(A);\n return D.verify(z);\n };\n this.parseExt = function (I) {\n var B, z, D;\n if (I === undefined) {\n D = this.hex;\n if (this.version !== 3) {\n return -1;\n }\n B = l(D, 0, [0, 7, 0], \"30\");\n z = s(D, B);\n } else {\n D = pemtohex(I);\n var E = l(D, 0, [0, 3, 0, 0], \"06\");\n if (k(D, E) != \"2a864886f70d01090e\") {\n this.aExtInfo = new Array();\n return;\n }\n B = l(D, 0, [0, 3, 0, 1, 0], \"30\");\n z = s(D, B);\n this.hex = D;\n }\n this.aExtInfo = new Array();\n for (var C = 0; C < z.length; C++) {\n var G = {};\n G.critical = false;\n var F = s(D, z[C]);\n var A = 0;\n if (F.length === 3) {\n G.critical = true;\n A = 1;\n }\n G.oid = o.hextooidstr(c(D, z[C], [0], \"06\"));\n var H = l(D, z[C], [1 + A]);\n G.vidx = n(D, H);\n this.aExtInfo.push(G);\n }\n };\n this.getExtInfo = function (B) {\n var z = this.aExtInfo;\n var C = B;\n if (!B.match(/^[0-9.]+$/)) {\n C = KJUR.asn1.x509.OID.name2oid(B);\n }\n if (C === \"\") {\n return undefined;\n }\n for (var A = 0; A < z.length; A++) {\n if (z[A].oid === C) {\n return z[A];\n }\n }\n return undefined;\n };\n this.getCriticalExtV = function (C, z, B) {\n if (z != undefined) {\n return [z, B];\n }\n var A = this.getExtInfo(C);\n if (A == undefined) {\n return [null, null];\n }\n return [b(this.hex, A.vidx), A.critical];\n };\n this.getExtBasicConstraints = function (A, E) {\n if (A === undefined && E === undefined) {\n var C = this.getExtInfo(\"basicConstraints\");\n if (C === undefined) {\n return undefined;\n }\n A = b(this.hex, C.vidx);\n E = C.critical;\n }\n var z = {\n extname: \"basicConstraints\"\n };\n if (E) {\n z.critical = true;\n }\n if (A === \"3000\") {\n return z;\n }\n if (A === \"30030101ff\") {\n z.cA = true;\n return z;\n }\n if (A.substr(0, 12) === \"30060101ff02\") {\n var D = k(A, 10);\n var B = parseInt(D, 16);\n z.cA = true;\n z.pathLen = B;\n return z;\n }\n throw new Error(\"hExtV parse error: \" + A);\n };\n this.getExtNameConstraints = function (I, G) {\n var A = this.getCriticalExtV(\"nameConstraints\", I, G);\n I = A[0];\n G = A[1];\n if (I == null) {\n return undefined;\n }\n var K = {\n extname: \"nameConstraints\"\n };\n if (G) {\n K.critical = true;\n }\n var F = s(I, 0);\n for (var D = 0; D < F.length; D++) {\n var E = [];\n var B = s(I, F[D]);\n for (var C = 0; C < B.length; C++) {\n var H = b(I, B[C]);\n var z = this.getGeneralSubtree(H);\n E.push(z);\n }\n var J = I.substr(F[D], 2);\n if (J == \"a0\") {\n K.permit = E;\n } else {\n if (J == \"a1\") {\n K.exclude = E;\n }\n }\n }\n return K;\n };\n this.getGeneralSubtree = function (F) {\n var D = s(F, 0);\n var C = D.length;\n if (C < 1 || 2 < C) {\n throw new Error(\"wrong num elements\");\n }\n var B = this.getGeneralName(b(F, D[0]));\n for (var E = 1; E < C; E++) {\n var A = F.substr(D[E], 2);\n var z = k(F, D[E]);\n var G = parseInt(z, 16);\n if (A == \"80\") {\n B.min = G;\n }\n if (A == \"81\") {\n B.max = G;\n }\n }\n return B;\n };\n this.getExtKeyUsage = function (A, C) {\n var B = this.getCriticalExtV(\"keyUsage\", A, C);\n A = B[0];\n C = B[1];\n if (A == null) {\n return undefined;\n }\n var z = {\n extname: \"keyUsage\"\n };\n if (C) {\n z.critical = true;\n }\n z.names = this.getExtKeyUsageString(A).split(\",\");\n return z;\n };\n this.getExtKeyUsageBin = function (A) {\n if (A === undefined) {\n var B = this.getExtInfo(\"keyUsage\");\n if (B === undefined) {\n return \"\";\n }\n A = b(this.hex, B.vidx);\n }\n if (A.length != 8 && A.length != 10) {\n throw new Error(\"malformed key usage value: \" + A);\n }\n var z = \"000000000000000\" + parseInt(A.substr(6), 16).toString(2);\n if (A.length == 8) {\n z = z.slice(-8);\n }\n if (A.length == 10) {\n z = z.slice(-16);\n }\n z = z.replace(/0+$/, \"\");\n if (z == \"\") {\n z = \"0\";\n }\n return z;\n };\n this.getExtKeyUsageString = function (B) {\n var C = this.getExtKeyUsageBin(B);\n var z = new Array();\n for (var A = 0; A < C.length; A++) {\n if (C.substr(A, 1) == \"1\") {\n z.push(X509.KEYUSAGE_NAME[A]);\n }\n }\n return z.join(\",\");\n };\n this.getExtSubjectKeyIdentifier = function (B, D) {\n if (B === undefined && D === undefined) {\n var C = this.getExtInfo(\"subjectKeyIdentifier\");\n if (C === undefined) {\n return undefined;\n }\n B = b(this.hex, C.vidx);\n D = C.critical;\n }\n var z = {\n extname: \"subjectKeyIdentifier\"\n };\n if (D) {\n z.critical = true;\n }\n var A = k(B, 0);\n z.kid = {\n hex: A\n };\n return z;\n };\n this.getExtAuthorityKeyIdentifier = function (F, D) {\n if (F === undefined && D === undefined) {\n var z = this.getExtInfo(\"authorityKeyIdentifier\");\n if (z === undefined) {\n return undefined;\n }\n F = b(this.hex, z.vidx);\n D = z.critical;\n }\n var G = {\n extname: \"authorityKeyIdentifier\"\n };\n if (D) {\n G.critical = true;\n }\n var E = s(F, 0);\n for (var A = 0; A < E.length; A++) {\n var H = F.substr(E[A], 2);\n if (H === \"80\") {\n G.kid = {\n hex: k(F, E[A])\n };\n }\n if (H === \"a1\") {\n var C = b(F, E[A]);\n var B = this.getGeneralNames(C);\n G.issuer = B[0][\"dn\"];\n }\n if (H === \"82\") {\n G.sn = {\n hex: k(F, E[A])\n };\n }\n }\n return G;\n };\n this.getExtExtKeyUsage = function (C, E) {\n if (C === undefined && E === undefined) {\n var D = this.getExtInfo(\"extKeyUsage\");\n if (D === undefined) {\n return undefined;\n }\n C = b(this.hex, D.vidx);\n E = D.critical;\n }\n var z = {\n extname: \"extKeyUsage\",\n array: []\n };\n if (E) {\n z.critical = true;\n }\n var A = s(C, 0);\n for (var B = 0; B < A.length; B++) {\n z.array.push(u(k(C, A[B])));\n }\n return z;\n };\n this.getExtExtKeyUsageName = function () {\n var D = this.getExtInfo(\"extKeyUsage\");\n if (D === undefined) {\n return D;\n }\n var z = new Array();\n var C = b(this.hex, D.vidx);\n if (C === \"\") {\n return z;\n }\n var A = s(C, 0);\n for (var B = 0; B < A.length; B++) {\n z.push(u(k(C, A[B])));\n }\n return z;\n };\n this.getExtSubjectAltName = function (A, C) {\n if (A === undefined && C === undefined) {\n var B = this.getExtInfo(\"subjectAltName\");\n if (B === undefined) {\n return undefined;\n }\n A = b(this.hex, B.vidx);\n C = B.critical;\n }\n var z = {\n extname: \"subjectAltName\",\n array: []\n };\n if (C) {\n z.critical = true;\n }\n z.array = this.getGeneralNames(A);\n return z;\n };\n this.getExtIssuerAltName = function (A, C) {\n if (A === undefined && C === undefined) {\n var B = this.getExtInfo(\"issuerAltName\");\n if (B === undefined) {\n return undefined;\n }\n A = b(this.hex, B.vidx);\n C = B.critical;\n }\n var z = {\n extname: \"issuerAltName\",\n array: []\n };\n if (C) {\n z.critical = true;\n }\n z.array = this.getGeneralNames(A);\n return z;\n };\n this.getGeneralNames = function (D) {\n var B = s(D, 0);\n var z = [];\n for (var C = 0; C < B.length; C++) {\n var A = this.getGeneralName(b(D, B[C]));\n if (A !== undefined) {\n z.push(A);\n }\n }\n return z;\n };\n this.getGeneralName = function (A) {\n var z = A.substr(0, 2);\n var C = k(A, 0);\n var B = hextorstr(C);\n if (z == \"81\") {\n return {\n rfc822: B\n };\n }\n if (z == \"82\") {\n return {\n dns: B\n };\n }\n if (z == \"86\") {\n return {\n uri: B\n };\n }\n if (z == \"87\") {\n return {\n ip: hextoip(C)\n };\n }\n if (z == \"a4\") {\n return {\n dn: this.getX500Name(C)\n };\n }\n if (z == \"a0\") {\n return {\n other: this.getOtherName(A)\n };\n }\n return undefined;\n };\n this.getExtSubjectAltName2 = function () {\n var D, G, F;\n var E = this.getExtInfo(\"subjectAltName\");\n if (E === undefined) {\n return E;\n }\n var z = new Array();\n var C = b(this.hex, E.vidx);\n var A = s(C, 0);\n for (var B = 0; B < A.length; B++) {\n F = C.substr(A[B], 2);\n D = k(C, A[B]);\n if (F === \"81\") {\n G = hextoutf8(D);\n z.push([\"MAIL\", G]);\n }\n if (F === \"82\") {\n G = hextoutf8(D);\n z.push([\"DNS\", G]);\n }\n if (F === \"84\") {\n G = X509.hex2dn(D, 0);\n z.push([\"DN\", G]);\n }\n if (F === \"86\") {\n G = hextoutf8(D);\n z.push([\"URI\", G]);\n }\n if (F === \"87\") {\n G = hextoip(D);\n z.push([\"IP\", G]);\n }\n }\n return z;\n };\n this.getExtCRLDistributionPoints = function (D, F) {\n if (D === undefined && F === undefined) {\n var E = this.getExtInfo(\"cRLDistributionPoints\");\n if (E === undefined) {\n return undefined;\n }\n D = b(this.hex, E.vidx);\n F = E.critical;\n }\n var A = {\n extname: \"cRLDistributionPoints\",\n array: []\n };\n if (F) {\n A.critical = true;\n }\n var B = s(D, 0);\n for (var C = 0; C < B.length; C++) {\n var z = b(D, B[C]);\n A.array.push(this.getDistributionPoint(z));\n }\n return A;\n };\n this.getDistributionPoint = function (E) {\n var B = {};\n var C = s(E, 0);\n for (var D = 0; D < C.length; D++) {\n var A = E.substr(C[D], 2);\n var z = b(E, C[D]);\n if (A == \"a0\") {\n B.dpname = this.getDistributionPointName(z);\n }\n }\n return B;\n };\n this.getDistributionPointName = function (E) {\n var B = {};\n var C = s(E, 0);\n for (var D = 0; D < C.length; D++) {\n var A = E.substr(C[D], 2);\n var z = b(E, C[D]);\n if (A == \"a0\") {\n B.full = this.getGeneralNames(z);\n }\n }\n return B;\n };\n this.getExtCRLDistributionPointsURI = function () {\n var D = this.getExtCRLDistributionPoints();\n if (D == undefined) {\n return D;\n }\n var A = D.array;\n var z = [];\n for (var C = 0; C < A.length; C++) {\n try {\n if (A[C].dpname.full[0].uri != undefined) {\n z.push(A[C].dpname.full[0].uri);\n }\n } catch (B) {}\n }\n return z;\n };\n this.getExtAIAInfo = function () {\n var D = this.getExtInfo(\"authorityInfoAccess\");\n if (D === undefined) {\n return D;\n }\n var z = {\n ocsp: [],\n caissuer: []\n };\n var A = s(this.hex, D.vidx);\n for (var B = 0; B < A.length; B++) {\n var E = c(this.hex, A[B], [0], \"06\");\n var C = c(this.hex, A[B], [1], \"86\");\n if (E === \"2b06010505073001\") {\n z.ocsp.push(hextoutf8(C));\n }\n if (E === \"2b06010505073002\") {\n z.caissuer.push(hextoutf8(C));\n }\n }\n return z;\n };\n this.getExtAuthorityInfoAccess = function (G, E) {\n if (G === undefined && E === undefined) {\n var z = this.getExtInfo(\"authorityInfoAccess\");\n if (z === undefined) {\n return undefined;\n }\n G = b(this.hex, z.vidx);\n E = z.critical;\n }\n var H = {\n extname: \"authorityInfoAccess\",\n array: []\n };\n if (E) {\n H.critical = true;\n }\n var F = s(G, 0);\n for (var A = 0; A < F.length; A++) {\n var D = p(G, F[A], [0], \"06\");\n var B = c(G, F[A], [1], \"86\");\n var C = hextoutf8(B);\n if (D == \"2b06010505073001\") {\n H.array.push({\n ocsp: C\n });\n } else {\n if (D == \"2b06010505073002\") {\n H.array.push({\n caissuer: C\n });\n } else {\n throw new Error(\"unknown method: \" + D);\n }\n }\n }\n return H;\n };\n this.getExtCertificatePolicies = function (D, G) {\n if (D === undefined && G === undefined) {\n var F = this.getExtInfo(\"certificatePolicies\");\n if (F === undefined) {\n return undefined;\n }\n D = b(this.hex, F.vidx);\n G = F.critical;\n }\n var z = {\n extname: \"certificatePolicies\",\n array: []\n };\n if (G) {\n z.critical = true;\n }\n var A = s(D, 0);\n for (var B = 0; B < A.length; B++) {\n var E = b(D, A[B]);\n var C = this.getPolicyInformation(E);\n z.array.push(C);\n }\n return z;\n };\n this.getPolicyInformation = function (D) {\n var z = {};\n var F = c(D, 0, [0], \"06\");\n z.policyoid = u(F);\n var G = f(D, 0, [1], \"30\");\n if (G != -1) {\n z.array = [];\n var A = s(D, G);\n for (var B = 0; B < A.length; B++) {\n var E = b(D, A[B]);\n var C = this.getPolicyQualifierInfo(E);\n z.array.push(C);\n }\n }\n return z;\n };\n this.getOtherName = function (B) {\n var z = {};\n var A = s(B, 0);\n var D = c(B, A[0], [], \"06\");\n var C = c(B, A[1], []);\n z.oid = u(D);\n z.value = j(C);\n return z;\n };\n this.getPolicyQualifierInfo = function (A) {\n var z = {};\n var B = c(A, 0, [0], \"06\");\n if (B === \"2b06010505070201\") {\n var D = p(A, 0, [1], \"16\");\n z.cps = hextorstr(D);\n } else {\n if (B === \"2b06010505070202\") {\n var C = a(A, 0, [1], \"30\");\n z.unotice = this.getUserNotice(C);\n }\n }\n return z;\n };\n this.getUserNotice = function (B) {\n var D = null;\n var z = {};\n try {\n D = o.parse(B);\n var C = this._asn1ToUnotice(D);\n return C;\n } catch (A) {\n return undefined;\n }\n };\n this._asn1ToUnotice = function (E) {\n try {\n var z = {};\n var A = aryval(E, \"seq\");\n for (var C = 0; C < A.length; C++) {\n var D = this._asn1ToNoticeRef(A[C]);\n if (D != undefined) {\n z.noticeref = D;\n }\n var F = this.asn1ToDisplayText(A[C]);\n if (F != undefined) {\n z.exptext = F;\n }\n }\n if (Object.keys(z).length > 0) {\n return z;\n }\n return undefined;\n } catch (B) {\n return undefined;\n }\n };\n this._asn1ToNoticeRef = function (F) {\n try {\n var A = {};\n var B = aryval(F, \"seq\");\n for (var D = 0; D < B.length; D++) {\n var E = this._asn1ToNoticeNum(B[D]);\n if (E != undefined) {\n A.noticenum = E;\n }\n var z = this.asn1ToDisplayText(B[D]);\n if (z != undefined) {\n A.org = z;\n }\n }\n if (Object.keys(A).length > 0) {\n return A;\n }\n return undefined;\n } catch (C) {\n return undefined;\n }\n };\n this._asn1ToNoticeNum = function (E) {\n try {\n var A = aryval(E, \"seq\");\n var z = [];\n for (var C = 0; C < A.length; C++) {\n var D = A[C];\n z.push(parseInt(aryval(D, \"int.hex\"), 16));\n }\n return z;\n } catch (B) {\n return undefined;\n }\n };\n this.getDisplayText = function (A) {\n var B = {\n \"0c\": \"utf8\",\n \"16\": \"ia5\",\n \"1a\": \"vis\",\n \"1e\": \"bmp\"\n };\n var z = {};\n z.type = B[A.substr(0, 2)];\n z.str = hextorstr(k(A, 0));\n return z;\n };\n this.asn1ToDisplayText = function (z) {\n if (z.utf8str != undefined) {\n return {\n type: \"utf8\",\n str: z.utf8str.str\n };\n }\n if (z.ia5str != undefined) {\n return {\n type: \"ia5\",\n str: z.ia5str.str\n };\n }\n if (z.visstr != undefined) {\n return {\n type: \"vis\",\n str: z.visstr.str\n };\n }\n if (z.bmpstr != undefined) {\n return {\n type: \"bmp\",\n str: z.bmpstr.str\n };\n }\n if (z.prnstr != undefined) {\n return {\n type: \"prn\",\n str: z.prnstr.str\n };\n }\n return undefined;\n };\n this.getExtPolicyMappings = function (G, E) {\n var z = this.getCriticalExtV(\"policyMappings\", G, E);\n G = z[0];\n E = z[1];\n if (G == null) {\n return undefined;\n }\n var I = {\n extname: \"policyMappings\"\n };\n if (E) {\n I.critical = true;\n }\n try {\n var A = j(G);\n var B = A.seq;\n var F = [];\n for (var C = 0; C < B.length; C++) {\n var H = B[C].seq;\n F.push([H[0].oid, H[1].oid]);\n }\n I.array = F;\n } catch (D) {\n throw new m(\"malformed policyMappings\");\n }\n return I;\n };\n this.getExtPolicyConstraints = function (G, D) {\n var z = this.getCriticalExtV(\"policyConstraints\", G, D);\n G = z[0];\n D = z[1];\n if (G == null) {\n return undefined;\n }\n var H = {\n extname: \"policyConstraints\"\n };\n if (D) {\n H.critical = true;\n }\n var A = j(G);\n try {\n var F = A.seq;\n for (var B = 0; B < F.length; B++) {\n var E = F[B].tag;\n if (E.explicit != false) {\n continue;\n }\n if (E.tag == \"80\") {\n H.reqexp = parseInt(E.hex, 16);\n }\n if (E.tag == \"81\") {\n H.inhibit = parseInt(E.hex, 16);\n }\n }\n } catch (C) {\n return new m(\"malformed policyConstraints value\");\n }\n return H;\n };\n this.getExtInhibitAnyPolicy = function (A, D) {\n var C = this.getCriticalExtV(\"inhibitAnyPolicy\", A, D);\n A = C[0];\n D = C[1];\n if (A == null) {\n return undefined;\n }\n var z = {\n extname: \"inhibitAnyPolicy\"\n };\n if (D) {\n z.critical = true;\n }\n var B = x(A, 0);\n if (B == -1) {\n return new m(\"wrong value\");\n }\n z.skip = B;\n return z;\n };\n this.getExtCRLNumber = function (A, B) {\n var z = {\n extname: \"cRLNumber\"\n };\n if (B) {\n z.critical = true;\n }\n if (A.substr(0, 2) == \"02\") {\n z.num = {\n hex: k(A, 0)\n };\n return z;\n }\n throw new m(\"hExtV parse error: \" + A);\n };\n this.getExtCRLReason = function (A, B) {\n var z = {\n extname: \"cRLReason\"\n };\n if (B) {\n z.critical = true;\n }\n if (A.substr(0, 2) == \"0a\") {\n z.code = parseInt(k(A, 0), 16);\n return z;\n }\n throw new Error(\"hExtV parse error: \" + A);\n };\n this.getExtOcspNonce = function (A, C) {\n var z = {\n extname: \"ocspNonce\"\n };\n if (C) {\n z.critical = true;\n }\n var B = k(A, 0);\n z.hex = B;\n return z;\n };\n this.getExtOcspNoCheck = function (A, B) {\n var z = {\n extname: \"ocspNoCheck\"\n };\n if (B) {\n z.critical = true;\n }\n return z;\n };\n this.getExtAdobeTimeStamp = function (C, F) {\n if (C === undefined && F === undefined) {\n var E = this.getExtInfo(\"adobeTimeStamp\");\n if (E === undefined) {\n return undefined;\n }\n C = b(this.hex, E.vidx);\n F = E.critical;\n }\n var z = {\n extname: \"adobeTimeStamp\"\n };\n if (F) {\n z.critical = true;\n }\n var B = s(C, 0);\n if (B.length > 1) {\n var G = b(C, B[1]);\n var A = this.getGeneralName(G);\n if (A.uri != undefined) {\n z.uri = A.uri;\n }\n }\n if (B.length > 2) {\n var D = b(C, B[2]);\n if (D == \"0101ff\") {\n z.reqauth = true;\n }\n if (D == \"010100\") {\n z.reqauth = false;\n }\n }\n return z;\n };\n this.getExtSubjectDirectoryAttributes = function (I, H) {\n if (I === undefined && H === undefined) {\n var B = this.getExtInfo(\"subjectDirectoryAttributes\");\n if (B === undefined) {\n return undefined;\n }\n I = b(this.hex, B.vidx);\n H = B.critical;\n }\n var J = {\n extname: \"subjectDirectoryAttributes\"\n };\n if (H) {\n J.critical = true;\n }\n try {\n var z = j(I);\n var D = [];\n for (var E = 0; E < z.seq.length; E++) {\n var A = z.seq[E];\n var C = aryval(A, \"seq.0.oid\");\n var F = aryval(A, \"seq.1.set\");\n if (C == undefined || F == undefined) {\n throw \"error\";\n }\n D.push({\n attr: C,\n array: F\n });\n }\n J.array = D;\n return J;\n } catch (G) {\n throw new Error(\"malformed subjectDirectoryAttributes extension value\");\n }\n };\n var e = function (E) {\n var z = {};\n try {\n var B = E.seq[0].oid;\n var D = KJUR.asn1.x509.OID.name2oid(B);\n z.type = KJUR.asn1.x509.OID.oid2atype(D);\n var A = E.seq[1];\n if (A.utf8str != undefined) {\n z.ds = \"utf8\";\n z.value = A.utf8str.str;\n } else {\n if (A.numstr != undefined) {\n z.ds = \"num\";\n z.value = A.numstr.str;\n } else {\n if (A.telstr != undefined) {\n z.ds = \"tel\";\n z.value = A.telstr.str;\n } else {\n if (A.prnstr != undefined) {\n z.ds = \"prn\";\n z.value = A.prnstr.str;\n } else {\n if (A.ia5str != undefined) {\n z.ds = \"ia5\";\n z.value = A.ia5str.str;\n } else {\n if (A.visstr != undefined) {\n z.ds = \"vis\";\n z.value = A.visstr.str;\n } else {\n if (A.bmpstr != undefined) {\n z.ds = \"bmp\";\n z.value = A.bmpstr.str;\n } else {\n throw \"error\";\n }\n }\n }\n }\n }\n }\n }\n return z;\n } catch (C) {\n throw new Erorr(\"improper ASN.1 parsed AttrTypeAndValue\");\n }\n };\n var i = function (A) {\n try {\n return A.set.map(function (B) {\n return e(B);\n });\n } catch (z) {\n throw new Error(\"improper ASN.1 parsed RDN: \" + z);\n }\n };\n var h = function (A) {\n try {\n return A.seq.map(function (B) {\n return i(B);\n });\n } catch (z) {\n throw new Error(\"improper ASN.1 parsed X500Name: \" + z);\n }\n };\n this.getX500NameRule = function (z) {\n var G = true;\n var K = true;\n var J = false;\n var A = \"\";\n var D = \"\";\n var M = null;\n var H = [];\n for (var C = 0; C < z.length; C++) {\n var E = z[C];\n for (var B = 0; B < E.length; B++) {\n H.push(E[B]);\n }\n }\n for (var C = 0; C < H.length; C++) {\n var L = H[C];\n var N = L.ds;\n var I = L.value;\n var F = L.type;\n A += \":\" + N;\n if (N != \"prn\" && N != \"utf8\" && N != \"ia5\") {\n return \"mixed\";\n }\n if (N == \"ia5\") {\n if (F != \"CN\") {\n return \"mixed\";\n } else {\n if (!KJUR.lang.String.isMail(I)) {\n return \"mixed\";\n } else {\n continue;\n }\n }\n }\n if (F == \"C\") {\n if (N == \"prn\") {\n continue;\n } else {\n return \"mixed\";\n }\n }\n D += \":\" + N;\n if (M == null) {\n M = N;\n } else {\n if (M !== N) {\n return \"mixed\";\n }\n }\n }\n if (M == null) {\n return \"prn\";\n } else {\n return M;\n }\n };\n this.getAttrTypeAndValue = function (z) {\n var A = j(z);\n return e(A);\n };\n this.getRDN = function (z) {\n var A = j(z);\n return i(A);\n };\n this.getX500NameArray = function (z) {\n var A = j(z);\n return h(A);\n };\n this.getX500Name = function (C, E, D) {\n var A = this.getX500NameArray(C);\n var B = this.dnarraytostr(A);\n var z = {\n str: B\n };\n z.array = A;\n if (D == true) {\n z.hex = C;\n }\n if (E == true) {\n z.canon = this.c14nRDNArray(A);\n }\n return z;\n };\n this.readCertPEM = function (z) {\n this.readCertHex(w(z));\n };\n this.readCertHex = function (z) {\n this.hex = z;\n this.getVersion();\n try {\n l(this.hex, 0, [0, 7], \"a3\");\n this.parseExt();\n } catch (A) {}\n };\n this.getParam = function (A) {\n var z = {};\n if (A == undefined) {\n A = {};\n }\n z.version = this.getVersion();\n z.serial = {\n hex: this.getSerialNumberHex()\n };\n z.sigalg = this.getSignatureAlgorithmField();\n z.issuer = this.getIssuer(A.dncanon, A.dnhex);\n z.notbefore = this.getNotBefore();\n z.notafter = this.getNotAfter();\n z.subject = this.getSubject(A.dncanon, A.dnhex);\n z.sbjpubkey = hextopem(this.getPublicKeyHex(), \"PUBLIC KEY\");\n if (this.aExtInfo != undefined && this.aExtInfo.length > 0) {\n z.ext = this.getExtParamArray();\n }\n z.sighex = this.getSignatureValueHex();\n if (A.tbshex == true) {\n z.tbshex = a(this.hex, 0, [0]);\n }\n if (A.nodnarray == true) {\n delete z.issuer.array;\n delete z.subject.array;\n }\n return z;\n };\n this.getExtParamArray = function (A) {\n if (A == undefined) {\n var C = f(this.hex, 0, [0, \"[3]\"]);\n if (C != -1) {\n A = q(this.hex, 0, [0, \"[3]\", 0], \"30\");\n }\n }\n var z = [];\n var B = s(A, 0);\n for (var D = 0; D < B.length; D++) {\n var F = b(A, B[D]);\n var E = this.getExtParam(F);\n if (E != null) {\n z.push(E);\n }\n }\n return z;\n };\n this.getExtParam = function (A) {\n var I = {};\n var C = s(A, 0);\n var E = C.length;\n if (E != 2 && E != 3) {\n throw new Error(\"wrong number elements in Extension: \" + E + \" \" + A);\n }\n var B = r(c(A, 0, [0], \"06\"));\n var G = false;\n if (E == 3 && a(A, 0, [1]) == \"0101ff\") {\n G = true;\n }\n var H = a(A, 0, [E - 1, 0]);\n var F = undefined;\n if (B == \"2.5.29.14\") {\n F = this.getExtSubjectKeyIdentifier(H, G);\n } else {\n if (B == \"2.5.29.15\") {\n F = this.getExtKeyUsage(H, G);\n } else {\n if (B == \"2.5.29.17\") {\n F = this.getExtSubjectAltName(H, G);\n } else {\n if (B == \"2.5.29.18\") {\n F = this.getExtIssuerAltName(H, G);\n } else {\n if (B == \"2.5.29.19\") {\n F = this.getExtBasicConstraints(H, G);\n } else {\n if (B == \"2.5.29.30\") {\n F = this.getExtNameConstraints(H, G);\n } else {\n if (B == \"2.5.29.31\") {\n F = this.getExtCRLDistributionPoints(H, G);\n } else {\n if (B == \"2.5.29.32\") {\n F = this.getExtCertificatePolicies(H, G);\n } else {\n if (B == \"2.5.29.33\") {\n F = this.getExtPolicyMappings(H, G);\n } else {\n if (B == \"2.5.29.35\") {\n F = this.getExtAuthorityKeyIdentifier(H, G);\n } else {\n if (B == \"2.5.29.36\") {\n F = this.getExtPolicyConstraints(H, G);\n } else {\n if (B == \"2.5.29.37\") {\n F = this.getExtExtKeyUsage(H, G);\n } else {\n if (B == \"2.5.29.54\") {\n F = this.getExtInhibitAnyPolicy(H, G);\n } else {\n if (B == \"1.3.6.1.5.5.7.1.1\") {\n F = this.getExtAuthorityInfoAccess(H, G);\n } else {\n if (B == \"2.5.29.20\") {\n F = this.getExtCRLNumber(H, G);\n } else {\n if (B == \"2.5.29.21\") {\n F = this.getExtCRLReason(H, G);\n } else {\n if (B == \"2.5.29.9\") {\n F = this.getExtSubjectDirectoryAttributes(H, G);\n } else {\n if (B == \"1.3.6.1.5.5.7.48.1.2\") {\n F = this.getExtOcspNonce(H, G);\n } else {\n if (B == \"1.3.6.1.5.5.7.48.1.5\") {\n F = this.getExtOcspNoCheck(H, G);\n } else {\n if (B == \"1.2.840.113583.1.1.9.1\") {\n F = this.getExtAdobeTimeStamp(H, G);\n } else {\n if (X509.EXT_PARSER[B] != undefined) {\n F = X509.EXT_PARSER[B](B, G, H);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (F != undefined) {\n return F;\n }\n var z = {\n extname: B,\n extn: H\n };\n try {\n z.extn = j(H);\n } catch (D) {}\n if (G) {\n z.critical = true;\n }\n return z;\n };\n this.findExt = function (A, B) {\n for (var z = 0; z < A.length; z++) {\n if (A[z].extname == B) {\n return A[z];\n }\n }\n return null;\n };\n this.updateExtCDPFullURI = function (D, z) {\n var C = this.findExt(D, \"cRLDistributionPoints\");\n if (C == null) {\n return;\n }\n if (C.array == undefined) {\n return;\n }\n var F = C.array;\n for (var B = 0; B < F.length; B++) {\n if (F[B].dpname == undefined) {\n continue;\n }\n if (F[B].dpname.full == undefined) {\n continue;\n }\n var G = F[B].dpname.full;\n for (var A = 0; A < G.length; A++) {\n var E = G[B];\n if (E.uri == undefined) {\n continue;\n }\n E.uri = z;\n }\n }\n };\n this.updateExtAIAOCSP = function (D, A) {\n var C = this.findExt(D, \"authorityInfoAccess\");\n if (C == null) {\n return;\n }\n if (C.array == undefined) {\n return;\n }\n var z = C.array;\n for (var B = 0; B < z.length; B++) {\n if (z[B].ocsp != undefined) {\n z[B].ocsp = A;\n }\n }\n };\n this.updateExtAIACAIssuer = function (D, A) {\n var C = this.findExt(D, \"authorityInfoAccess\");\n if (C == null) {\n return;\n }\n if (C.array == undefined) {\n return;\n }\n var z = C.array;\n for (var B = 0; B < z.length; B++) {\n if (z[B].caissuer != undefined) {\n z[B].caissuer = A;\n }\n }\n };\n this.dnarraytostr = function (B) {\n function z(C) {\n return C.map(function (D) {\n return A(D).replace(/\\+/, \"\\\\+\");\n }).join(\"+\");\n }\n function A(C) {\n return C.type + \"=\" + C.value;\n }\n return \"/\" + B.map(function (C) {\n return z(C).replace(/\\//, \"\\\\/\");\n }).join(\"/\");\n };\n this.setCanonicalizedDN = function (A) {\n var C;\n if (A.str != undefined && A.array == undefined) {\n var B = new KJUR.asn1.x509.X500Name({\n str: A.str\n });\n var z = B.tohex();\n C = this.getX500NameArray(z);\n } else {\n C = A.array;\n }\n if (A.canon == undefined) {\n A.canon = this.c14nRDNArray(C);\n }\n };\n this.c14nRDNArray = function (G) {\n var A = [];\n for (var C = 0; C < G.length; C++) {\n var E = G[C];\n var z = [];\n for (var B = 0; B < E.length; B++) {\n var D = E[B];\n var F = D.value;\n F = F.replace(/^\\s*/, \"\");\n F = F.replace(/\\s*$/, \"\");\n F = F.replace(/\\s+/g, \" \");\n F = F.toLowerCase();\n z.push(D.type.toLowerCase() + \"=\" + F);\n }\n A.push(z.join(\"+\"));\n }\n return \"/\" + A.join(\"/\");\n };\n this.getInfo = function () {\n var A = function (W) {\n var ac = \"\";\n var U = \" \";\n var Y = \"\\n\";\n var Z = W.array;\n for (var X = 0; X < Z.length; X++) {\n var V = Z[X];\n if (V.dn != undefined) {\n ac += U + \"dn: \" + V.dn.str + Y;\n }\n if (V.ip != undefined) {\n ac += U + \"ip: \" + V.ip + Y;\n }\n if (V.rfc822 != undefined) {\n ac += U + \"rfc822: \" + V.rfc822 + Y;\n }\n if (V.dns != undefined) {\n ac += U + \"dns: \" + V.dns + Y;\n }\n if (V.uri != undefined) {\n ac += U + \"uri: \" + V.uri + Y;\n }\n if (V.other != undefined) {\n var ab = V.other.oid;\n var aa = JSON.stringify(V.other.value).replace(/\\\"/g, \"\");\n ac += U + \"other: \" + ab + \"=\" + aa + Y;\n }\n }\n ac = ac.replace(/\\n$/, \"\");\n return ac;\n };\n var H = function (aa) {\n var Y = \"\";\n var U = aa.array;\n for (var X = 0; X < U.length; X++) {\n var Z = U[X];\n Y += \" policy oid: \" + Z.policyoid + \"\\n\";\n if (Z.array === undefined) {\n continue;\n }\n for (var W = 0; W < Z.array.length; W++) {\n var V = Z.array[W];\n if (V.cps !== undefined) {\n Y += \" cps: \" + V.cps + \"\\n\";\n }\n }\n }\n return Y;\n };\n var K = function (Y) {\n var X = \"\";\n var U = Y.array;\n for (var W = 0; W < U.length; W++) {\n var Z = U[W];\n try {\n if (Z.dpname.full[0].uri !== undefined) {\n X += \" \" + Z.dpname.full[0].uri + \"\\n\";\n }\n } catch (V) {}\n try {\n if (Z.dname.full[0].dn.hex !== undefined) {\n X += \" \" + X509.hex2dn(Z.dpname.full[0].dn.hex) + \"\\n\";\n }\n } catch (V) {}\n }\n return X;\n };\n var I = function (Y) {\n var X = \"\";\n var U = Y.array;\n for (var V = 0; V < U.length; V++) {\n var W = U[V];\n if (W.caissuer !== undefined) {\n X += \" caissuer: \" + W.caissuer + \"\\n\";\n }\n if (W.ocsp !== undefined) {\n X += \" ocsp: \" + W.ocsp + \"\\n\";\n }\n }\n return X;\n };\n var B = X509;\n var M, L, T;\n M = \"Basic Fields\\n\";\n M += \" serial number: \" + this.getSerialNumberHex() + \"\\n\";\n M += \" signature algorithm: \" + this.getSignatureAlgorithmField() + \"\\n\";\n M += \" issuer: \" + this.getIssuerString() + \"\\n\";\n M += \" notBefore: \" + this.getNotBefore() + \"\\n\";\n M += \" notAfter: \" + this.getNotAfter() + \"\\n\";\n M += \" subject: \" + this.getSubjectString() + \"\\n\";\n M += \" subject public key info: \\n\";\n L = this.getPublicKey();\n M += \" key algorithm: \" + L.type + \"\\n\";\n if (L.type === \"RSA\") {\n M += \" n=\" + hextoposhex(L.n.toString(16)).substr(0, 16) + \"...\\n\";\n M += \" e=\" + hextoposhex(L.e.toString(16)) + \"\\n\";\n }\n T = this.aExtInfo;\n if (T !== undefined && T !== null) {\n M += \"X509v3 Extensions:\\n\";\n for (var P = 0; P < T.length; P++) {\n var R = T[P];\n var z = KJUR.asn1.x509.OID.oid2name(R.oid);\n if (z === \"\") {\n z = R.oid;\n }\n var O = \"\";\n if (R.critical === true) {\n O = \"CRITICAL\";\n }\n M += \" \" + z + \" \" + O + \":\\n\";\n if (z === \"basicConstraints\") {\n var C = this.getExtBasicConstraints();\n if (C.cA === undefined) {\n M += \" {}\\n\";\n } else {\n M += \" cA=true\";\n if (C.pathLen !== undefined) {\n M += \", pathLen=\" + C.pathLen;\n }\n M += \"\\n\";\n }\n } else {\n if (z == \"policyMappings\") {\n var S = this.getExtPolicyMappings().array;\n var G = S.map(function (U) {\n var V = U;\n return V[0] + \":\" + V[1];\n }).join(\", \");\n M += \" \" + G + \"\\n\";\n } else {\n if (z == \"policyConstraints\") {\n var N = this.getExtPolicyConstraints();\n M += \" \";\n if (N.reqexp != undefined) {\n M += \" reqexp=\" + N.reqexp;\n }\n if (N.inhibit != undefined) {\n M += \" inhibit=\" + N.inhibit;\n }\n M += \"\\n\";\n } else {\n if (z == \"inhibitAnyPolicy\") {\n var N = this.getExtInhibitAnyPolicy();\n M += \" skip=\" + N.skip + \"\\n\";\n } else {\n if (z == \"keyUsage\") {\n M += \" \" + this.getExtKeyUsageString() + \"\\n\";\n } else {\n if (z == \"subjectKeyIdentifier\") {\n M += \" \" + this.getExtSubjectKeyIdentifier().kid.hex + \"\\n\";\n } else {\n if (z == \"authorityKeyIdentifier\") {\n var D = this.getExtAuthorityKeyIdentifier();\n if (D.kid !== undefined) {\n M += \" kid=\" + D.kid.hex + \"\\n\";\n }\n } else {\n if (z == \"extKeyUsage\") {\n var Q = this.getExtExtKeyUsage().array;\n M += \" \" + Q.join(\", \") + \"\\n\";\n } else {\n if (z == \"subjectAltName\") {\n var E = A(this.getExtSubjectAltName());\n M += E + \"\\n\";\n } else {\n if (z == \"cRLDistributionPoints\") {\n var J = this.getExtCRLDistributionPoints();\n M += K(J);\n } else {\n if (z == \"authorityInfoAccess\") {\n var F = this.getExtAuthorityInfoAccess();\n M += I(F);\n } else {\n if (z == \"certificatePolicies\") {\n M += H(this.getExtCertificatePolicies());\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n M += \"signature algorithm: \" + this.getSignatureAlgorithmName() + \"\\n\";\n M += \"signature: \" + this.getSignatureValueHex().substr(0, 16) + \"...\\n\";\n return M;\n };\n if (typeof v == \"string\") {\n if (v.indexOf(\"-----BEGIN\") != -1) {\n this.readCertPEM(v);\n } else {\n if (KJUR.lang.String.isHex(v)) {\n this.readCertHex(v);\n }\n }\n }\n}\nX509.EXT_PARSER = {};\nX509.registExtParser = function (b, a) {\n X509.EXT_PARSER[b] = a;\n};\nX509.hex2dn = function (e, b) {\n if (b === undefined) {\n b = 0;\n }\n var a = new X509();\n var c = ASN1HEX.getTLV(e, b);\n var d = a.getX500Name(e);\n return d.str;\n};\nX509.hex2rdn = function (f, b) {\n if (b === undefined) {\n b = 0;\n }\n if (f.substr(b, 2) !== \"31\") {\n throw new Error(\"malformed RDN\");\n }\n var c = new Array();\n var d = ASN1HEX.getChildIdx(f, b);\n for (var e = 0; e < d.length; e++) {\n c.push(X509.hex2attrTypeValue(f, d[e]));\n }\n c = c.map(function (a) {\n return a.replace(\"+\", \"\\\\+\");\n });\n return c.join(\"+\");\n};\nX509.hex2attrTypeValue = function (d, i) {\n var j = ASN1HEX;\n var h = j.getV;\n if (i === undefined) {\n i = 0;\n }\n if (d.substr(i, 2) !== \"30\") {\n throw new Error(\"malformed attribute type and value\");\n }\n var g = j.getChildIdx(d, i);\n if (g.length !== 2 || d.substr(g[0], 2) !== \"06\") {\n \"malformed attribute type and value\";\n }\n var b = h(d, g[0]);\n var f = KJUR.asn1.ASN1Util.oidHexToInt(b);\n var e = KJUR.asn1.x509.OID.oid2atype(f);\n var a = h(d, g[1]);\n var c = hextorstr(a);\n return e + \"=\" + c;\n};\nX509.getPublicKeyFromCertHex = function (b) {\n var a = new X509();\n a.readCertHex(b);\n return a.getPublicKey();\n};\nX509.getPublicKeyFromCertPEM = function (b) {\n var a = new X509();\n a.readCertPEM(b);\n return a.getPublicKey();\n};\nX509.getPublicKeyInfoPropOfCertPEM = function (c) {\n var e = ASN1HEX;\n var g = e.getVbyList;\n var b = {};\n var a, f, d;\n b.algparam = null;\n a = new X509();\n a.readCertPEM(c);\n f = a.getPublicKeyHex();\n b.keyhex = g(f, 0, [1], \"03\").substr(2);\n b.algoid = g(f, 0, [0, 0], \"06\");\n if (b.algoid === \"2a8648ce3d0201\") {\n b.algparam = g(f, 0, [0, 1], \"06\");\n }\n return b;\n};\nX509.KEYUSAGE_NAME = [\"digitalSignature\", \"nonRepudiation\", \"keyEncipherment\", \"dataEncipherment\", \"keyAgreement\", \"keyCertSign\", \"cRLSign\", \"encipherOnly\", \"decipherOnly\"];\nvar X509CRL = function (e) {\n var a = KJUR,\n f = a.lang.String.isHex,\n m = ASN1HEX,\n k = m.getV,\n b = m.getTLV,\n h = m.getVbyList,\n c = m.getTLVbyList,\n d = m.getTLVbyListEx,\n i = m.getIdxbyList,\n g = m.getIdxbyListEx,\n l = m.getChildIdx,\n j = new X509();\n this.hex = null;\n this.posSigAlg = null;\n this.posRevCert = null;\n this.parsed = null;\n this._setPos = function () {\n var o = i(this.hex, 0, [0, 0]);\n var n = this.hex.substr(o, 2);\n if (n == \"02\") {\n this.posSigAlg = 1;\n } else {\n if (n == \"30\") {\n this.posSigAlg = 0;\n } else {\n throw new Error(\"malformed 1st item of TBSCertList: \" + n);\n }\n }\n var s = i(this.hex, 0, [0, this.posSigAlg + 3]);\n var r = this.hex.substr(s, 2);\n if (r == \"17\" || r == \"18\") {\n var q, p;\n q = i(this.hex, 0, [0, this.posSigAlg + 4]);\n this.posRevCert = null;\n if (q != -1) {\n p = this.hex.substr(q, 2);\n if (p == \"30\") {\n this.posRevCert = this.posSigAlg + 4;\n }\n }\n } else {\n if (r == \"30\") {\n this.posRevCert = this.posSigAlg + 3;\n } else {\n if (r == \"a0\") {\n this.posRevCert = null;\n } else {\n throw new Error(\"malformed nextUpdate or revCert tag: \" + r);\n }\n }\n }\n };\n this.getVersion = function () {\n if (this.posSigAlg == 0) {\n return null;\n }\n return parseInt(h(this.hex, 0, [0, 0], \"02\"), 16) + 1;\n };\n this.getSignatureAlgorithmField = function () {\n var n = c(this.hex, 0, [0, this.posSigAlg], \"30\");\n return j.getAlgorithmIdentifierName(n);\n };\n this.getIssuer = function () {\n return j.getX500Name(this.getIssuerHex());\n };\n this.getIssuerHex = function () {\n return c(this.hex, 0, [0, this.posSigAlg + 1], \"30\");\n };\n this.getThisUpdate = function () {\n var n = h(this.hex, 0, [0, this.posSigAlg + 2]);\n return result = hextorstr(n);\n };\n this.getNextUpdate = function () {\n var o = i(this.hex, 0, [0, this.posSigAlg + 3]);\n var n = this.hex.substr(o, 2);\n if (n != \"17\" && n != \"18\") {\n return null;\n }\n return hextorstr(k(this.hex, o));\n };\n this.getRevCertArray = function () {\n if (this.posRevCert == null) {\n return null;\n }\n var o = [];\n var n = i(this.hex, 0, [0, this.posRevCert]);\n var p = l(this.hex, n);\n for (var q = 0; q < p.length; q++) {\n var r = b(this.hex, p[q]);\n o.push(this.getRevCert(r));\n }\n return o;\n };\n this.getRevCert = function (p) {\n var o = {};\n var n = l(p, 0);\n o.sn = {\n hex: h(p, 0, [0], \"02\")\n };\n o.date = hextorstr(h(p, 0, [1]));\n if (n.length == 3) {\n o.ext = j.getExtParamArray(c(p, 0, [2]));\n }\n return o;\n };\n this.findRevCert = function (p) {\n var n = new X509(p);\n var o = n.getSerialNumberHex();\n return this.findRevCertBySN(o);\n };\n this.findRevCertBySN = function (o) {\n if (this.parsed == null) {\n this.getParam();\n }\n if (this.parsed.revcert == null) {\n return null;\n }\n var n = this.parsed.revcert;\n for (var p = 0; p < n.length; p++) {\n if (o == n[p].sn.hex) {\n return n[p];\n }\n }\n return null;\n };\n this.getSignatureValueHex = function () {\n return h(this.hex, 0, [2], \"03\", true);\n };\n this.verifySignature = function (o) {\n var p = this.getSignatureAlgorithmField();\n var n = this.getSignatureValueHex();\n var q = c(this.hex, 0, [0], \"30\");\n var r = new KJUR.crypto.Signature({\n alg: p\n });\n r.init(o);\n r.updateHex(q);\n return r.verify(n);\n };\n this.getParam = function (r) {\n var n = {};\n var p = this.getVersion();\n if (p != null) {\n n.version = p;\n }\n n.sigalg = this.getSignatureAlgorithmField();\n n.issuer = this.getIssuer();\n n.thisupdate = this.getThisUpdate();\n var q = this.getNextUpdate();\n if (q != null) {\n n.nextupdate = q;\n }\n var t = this.getRevCertArray();\n if (t != null) {\n n.revcert = t;\n }\n var s = g(this.hex, 0, [0, \"[0]\"]);\n if (s != -1) {\n var o = d(this.hex, 0, [0, \"[0]\", 0]);\n n.ext = j.getExtParamArray(o);\n }\n n.sighex = this.getSignatureValueHex();\n this.parsed = n;\n if (typeof r == \"object\") {\n if (r.tbshex == true) {\n n.tbshex = c(this.hex, 0, [0]);\n }\n if (r.nodnarray == true) {\n delete n.issuer.array;\n }\n }\n return n;\n };\n if (typeof e == \"string\") {\n if (f(e)) {\n this.hex = e;\n } else {\n if (e.match(/-----BEGIN X509 CRL/)) {\n this.hex = pemtohex(e);\n }\n }\n this._setPos();\n }\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.jws == \"undefined\" || !KJUR.jws) {\n KJUR.jws = {};\n}\nKJUR.jws.JWS = function () {\n var b = KJUR,\n a = b.jws.JWS,\n c = a.isSafeJSONString;\n this.parseJWS = function (g, j) {\n if (this.parsedJWS !== undefined && (j || this.parsedJWS.sigvalH !== undefined)) {\n return;\n }\n var i = g.match(/^([^.]+)\\.([^.]+)\\.([^.]+)$/);\n if (i == null) {\n throw \"JWS signature is not a form of 'Head.Payload.SigValue'.\";\n }\n var k = i[1];\n var e = i[2];\n var l = i[3];\n var n = k + \".\" + e;\n this.parsedJWS = {};\n this.parsedJWS.headB64U = k;\n this.parsedJWS.payloadB64U = e;\n this.parsedJWS.sigvalB64U = l;\n this.parsedJWS.si = n;\n if (!j) {\n var h = b64utohex(l);\n var f = parseBigInt(h, 16);\n this.parsedJWS.sigvalH = h;\n this.parsedJWS.sigvalBI = f;\n }\n var d = b64utoutf8(k);\n var m = b64utoutf8(e);\n this.parsedJWS.headS = d;\n this.parsedJWS.payloadS = m;\n if (!c(d, this.parsedJWS, \"headP\")) {\n throw \"malformed JSON string for JWS Head: \" + d;\n }\n };\n};\nKJUR.jws.JWS.sign = function (j, w, z, A, a) {\n var x = KJUR,\n n = x.jws,\n r = n.JWS,\n h = r.readSafeJSONString,\n q = r.isSafeJSONString,\n d = x.crypto,\n l = d.ECDSA,\n p = d.Mac,\n c = d.Signature,\n u = JSON;\n var t, k, o;\n if (typeof w != \"string\" && typeof w != \"object\") {\n throw \"spHeader must be JSON string or object: \" + w;\n }\n if (typeof w == \"object\") {\n k = w;\n t = u.stringify(k);\n }\n if (typeof w == \"string\") {\n t = w;\n if (!q(t)) {\n throw \"JWS Head is not safe JSON string: \" + t;\n }\n k = h(t);\n }\n o = z;\n if (typeof z == \"object\") {\n o = u.stringify(z);\n }\n if ((j == \"\" || j == null) && k.alg !== undefined) {\n j = k.alg;\n }\n if (j != \"\" && j != null && k.alg === undefined) {\n k.alg = j;\n t = u.stringify(k);\n }\n if (j !== k.alg) {\n throw \"alg and sHeader.alg doesn't match: \" + j + \"!=\" + k.alg;\n }\n var s = null;\n if (r.jwsalg2sigalg[j] === undefined) {\n throw \"unsupported alg name: \" + j;\n } else {\n s = r.jwsalg2sigalg[j];\n }\n var e = utf8tob64u(t);\n var m = utf8tob64u(o);\n var b = e + \".\" + m;\n var y = \"\";\n if (s.substr(0, 4) == \"Hmac\") {\n if (A === undefined) {\n throw \"mac key shall be specified for HS* alg\";\n }\n var i = new p({\n alg: s,\n prov: \"cryptojs\",\n pass: A\n });\n i.updateString(b);\n y = i.doFinal();\n } else {\n if (s.indexOf(\"withECDSA\") != -1) {\n var f = new c({\n alg: s\n });\n f.init(A, a);\n f.updateString(b);\n var g = f.sign();\n y = KJUR.crypto.ECDSA.asn1SigToConcatSig(g);\n } else {\n if (s != \"none\") {\n var f = new c({\n alg: s\n });\n f.init(A, a);\n f.updateString(b);\n y = f.sign();\n }\n }\n }\n var v = hextob64u(y);\n return b + \".\" + v;\n};\nKJUR.jws.JWS.verify = function (w, B, n) {\n var x = KJUR,\n q = x.jws,\n t = q.JWS,\n i = t.readSafeJSONString,\n e = x.crypto,\n p = e.ECDSA,\n s = e.Mac,\n d = e.Signature,\n m;\n if (typeof RSAKey !== undefined) {\n m = RSAKey;\n }\n if (!isBase64URLDot(w)) {\n return false;\n }\n var y = w.split(\".\");\n if (y.length !== 3) {\n return false;\n }\n var f = y[0];\n var r = y[1];\n var c = f + \".\" + r;\n var A = b64utohex(y[2]);\n var l = i(b64utoutf8(y[0]));\n var k = null;\n var z = null;\n if (l.alg === undefined) {\n throw \"algorithm not specified in header\";\n } else {\n k = l.alg;\n z = k.substr(0, 2);\n }\n if (n != null && Object.prototype.toString.call(n) === \"[object Array]\" && n.length > 0) {\n var b = \":\" + n.join(\":\") + \":\";\n if (b.indexOf(\":\" + k + \":\") == -1) {\n throw \"algorithm '\" + k + \"' not accepted in the list\";\n }\n }\n if (k != \"none\" && B === null) {\n throw \"key shall be specified to verify.\";\n }\n if (typeof B == \"string\" && B.indexOf(\"-----BEGIN \") != -1) {\n B = KEYUTIL.getKey(B);\n }\n if (z == \"RS\" || z == \"PS\") {\n if (!(B instanceof m)) {\n throw \"key shall be a RSAKey obj for RS* and PS* algs\";\n }\n }\n if (z == \"ES\") {\n if (!(B instanceof p)) {\n throw \"key shall be a ECDSA obj for ES* algs\";\n }\n }\n if (k == \"none\") {}\n var u = null;\n if (t.jwsalg2sigalg[l.alg] === undefined) {\n throw \"unsupported alg name: \" + k;\n } else {\n u = t.jwsalg2sigalg[k];\n }\n if (u == \"none\") {\n throw \"not supported\";\n } else {\n if (u.substr(0, 4) == \"Hmac\") {\n var o = null;\n if (B === undefined) {\n throw \"hexadecimal key shall be specified for HMAC\";\n }\n var j = new s({\n alg: u,\n pass: B\n });\n j.updateString(c);\n o = j.doFinal();\n return A == o;\n } else {\n if (u.indexOf(\"withECDSA\") != -1) {\n var h = null;\n try {\n h = p.concatSigToASN1Sig(A);\n } catch (v) {\n return false;\n }\n var g = new d({\n alg: u\n });\n g.init(B);\n g.updateString(c);\n return g.verify(h);\n } else {\n var g = new d({\n alg: u\n });\n g.init(B);\n g.updateString(c);\n return g.verify(A);\n }\n }\n }\n};\nKJUR.jws.JWS.parse = function (g) {\n var c = g.split(\".\");\n var b = {};\n var f, e, d;\n if (c.length != 2 && c.length != 3) {\n throw \"malformed sJWS: wrong number of '.' splitted elements\";\n }\n f = c[0];\n e = c[1];\n if (c.length == 3) {\n d = c[2];\n }\n b.headerObj = KJUR.jws.JWS.readSafeJSONString(b64utoutf8(f));\n b.payloadObj = KJUR.jws.JWS.readSafeJSONString(b64utoutf8(e));\n b.headerPP = JSON.stringify(b.headerObj, null, \" \");\n if (b.payloadObj == null) {\n b.payloadPP = b64utoutf8(e);\n } else {\n b.payloadPP = JSON.stringify(b.payloadObj, null, \" \");\n }\n if (d !== undefined) {\n b.sigHex = b64utohex(d);\n }\n return b;\n};\nKJUR.jws.JWS.verifyJWT = function (e, l, r) {\n var d = KJUR,\n j = d.jws,\n o = j.JWS,\n n = o.readSafeJSONString,\n p = o.inArray,\n f = o.includedArray;\n if (!isBase64URLDot(e)) {\n return false;\n }\n var k = e.split(\".\");\n if (k.length != 3) {\n return false;\n }\n var c = k[0];\n var i = k[1];\n var q = c + \".\" + i;\n var m = b64utohex(k[2]);\n var h = n(b64utoutf8(c));\n var g = n(b64utoutf8(i));\n if (h.alg === undefined) {\n return false;\n }\n if (r.alg === undefined) {\n throw \"acceptField.alg shall be specified\";\n }\n if (!p(h.alg, r.alg)) {\n return false;\n }\n if (g.iss !== undefined && typeof r.iss === \"object\") {\n if (!p(g.iss, r.iss)) {\n return false;\n }\n }\n if (g.sub !== undefined && typeof r.sub === \"object\") {\n if (!p(g.sub, r.sub)) {\n return false;\n }\n }\n if (g.aud !== undefined && typeof r.aud === \"object\") {\n if (typeof g.aud == \"string\") {\n if (!p(g.aud, r.aud)) {\n return false;\n }\n } else {\n if (typeof g.aud == \"object\") {\n if (!f(g.aud, r.aud)) {\n return false;\n }\n }\n }\n }\n var b = j.IntDate.getNow();\n if (r.verifyAt !== undefined && typeof r.verifyAt === \"number\") {\n b = r.verifyAt;\n }\n if (r.gracePeriod === undefined || typeof r.gracePeriod !== \"number\") {\n r.gracePeriod = 0;\n }\n if (g.exp !== undefined && typeof g.exp == \"number\") {\n if (g.exp + r.gracePeriod < b) {\n return false;\n }\n }\n if (g.nbf !== undefined && typeof g.nbf == \"number\") {\n if (b < g.nbf - r.gracePeriod) {\n return false;\n }\n }\n if (g.iat !== undefined && typeof g.iat == \"number\") {\n if (b < g.iat - r.gracePeriod) {\n return false;\n }\n }\n if (g.jti !== undefined && r.jti !== undefined) {\n if (g.jti !== r.jti) {\n return false;\n }\n }\n if (!o.verify(e, l, r.alg)) {\n return false;\n }\n return true;\n};\nKJUR.jws.JWS.includedArray = function (b, a) {\n var c = KJUR.jws.JWS.inArray;\n if (b === null) {\n return false;\n }\n if (typeof b !== \"object\") {\n return false;\n }\n if (typeof b.length !== \"number\") {\n return false;\n }\n for (var d = 0; d < b.length; d++) {\n if (!c(b[d], a)) {\n return false;\n }\n }\n return true;\n};\nKJUR.jws.JWS.inArray = function (d, b) {\n if (b === null) {\n return false;\n }\n if (typeof b !== \"object\") {\n return false;\n }\n if (typeof b.length !== \"number\") {\n return false;\n }\n for (var c = 0; c < b.length; c++) {\n if (b[c] == d) {\n return true;\n }\n }\n return false;\n};\nKJUR.jws.JWS.jwsalg2sigalg = {\n HS256: \"HmacSHA256\",\n HS384: \"HmacSHA384\",\n HS512: \"HmacSHA512\",\n RS256: \"SHA256withRSA\",\n RS384: \"SHA384withRSA\",\n RS512: \"SHA512withRSA\",\n ES256: \"SHA256withECDSA\",\n ES384: \"SHA384withECDSA\",\n ES512: \"SHA512withECDSA\",\n PS256: \"SHA256withRSAandMGF1\",\n PS384: \"SHA384withRSAandMGF1\",\n PS512: \"SHA512withRSAandMGF1\",\n none: \"none\"\n};\nKJUR.jws.JWS.isSafeJSONString = function (c, b, d) {\n var e = null;\n try {\n e = jsonParse(c);\n if (typeof e != \"object\") {\n return 0;\n }\n if (e.constructor === Array) {\n return 0;\n }\n if (b) {\n b[d] = e;\n }\n return 1;\n } catch (a) {\n return 0;\n }\n};\nKJUR.jws.JWS.readSafeJSONString = function (b) {\n var c = null;\n try {\n c = jsonParse(b);\n if (typeof c != \"object\") {\n return null;\n }\n if (c.constructor === Array) {\n return null;\n }\n return c;\n } catch (a) {\n return null;\n }\n};\nKJUR.jws.JWS.getEncodedSignatureValueFromJWS = function (b) {\n var a = b.match(/^[^.]+\\.[^.]+\\.([^.]+)$/);\n if (a == null) {\n throw \"JWS signature is not a form of 'Head.Payload.SigValue'.\";\n }\n return a[1];\n};\nKJUR.jws.JWS.getJWKthumbprint = function (d) {\n if (d.kty !== \"RSA\" && d.kty !== \"EC\" && d.kty !== \"oct\") {\n throw \"unsupported algorithm for JWK Thumprint\";\n }\n var a = \"{\";\n if (d.kty === \"RSA\") {\n if (typeof d.n != \"string\" || typeof d.e != \"string\") {\n throw \"wrong n and e value for RSA key\";\n }\n a += '\"e\":\"' + d.e + '\",';\n a += '\"kty\":\"' + d.kty + '\",';\n a += '\"n\":\"' + d.n + '\"}';\n } else {\n if (d.kty === \"EC\") {\n if (typeof d.crv != \"string\" || typeof d.x != \"string\" || typeof d.y != \"string\") {\n throw \"wrong crv, x and y value for EC key\";\n }\n a += '\"crv\":\"' + d.crv + '\",';\n a += '\"kty\":\"' + d.kty + '\",';\n a += '\"x\":\"' + d.x + '\",';\n a += '\"y\":\"' + d.y + '\"}';\n } else {\n if (d.kty === \"oct\") {\n if (typeof d.k != \"string\") {\n throw \"wrong k value for oct(symmetric) key\";\n }\n a += '\"kty\":\"' + d.kty + '\",';\n a += '\"k\":\"' + d.k + '\"}';\n }\n }\n }\n var b = rstrtohex(a);\n var c = KJUR.crypto.Util.hashHex(b, \"sha256\");\n var e = hextob64u(c);\n return e;\n};\nKJUR.jws.IntDate = {};\nKJUR.jws.IntDate.get = function (c) {\n var b = KJUR.jws.IntDate,\n d = b.getNow,\n a = b.getZulu;\n if (c == \"now\") {\n return d();\n } else {\n if (c == \"now + 1hour\") {\n return d() + 60 * 60;\n } else {\n if (c == \"now + 1day\") {\n return d() + 60 * 60 * 24;\n } else {\n if (c == \"now + 1month\") {\n return d() + 60 * 60 * 24 * 30;\n } else {\n if (c == \"now + 1year\") {\n return d() + 60 * 60 * 24 * 365;\n } else {\n if (c.match(/Z$/)) {\n return a(c);\n } else {\n if (c.match(/^[0-9]+$/)) {\n return parseInt(c);\n }\n }\n }\n }\n }\n }\n }\n throw \"unsupported format: \" + c;\n};\nKJUR.jws.IntDate.getZulu = function (a) {\n return zulutosec(a);\n};\nKJUR.jws.IntDate.getNow = function () {\n var a = ~~(new Date() / 1000);\n return a;\n};\nKJUR.jws.IntDate.intDate2UTCString = function (a) {\n var b = new Date(a * 1000);\n return b.toUTCString();\n};\nKJUR.jws.IntDate.intDate2Zulu = function (e) {\n var i = new Date(e * 1000),\n h = (\"0000\" + i.getUTCFullYear()).slice(-4),\n g = (\"00\" + (i.getUTCMonth() + 1)).slice(-2),\n b = (\"00\" + i.getUTCDate()).slice(-2),\n a = (\"00\" + i.getUTCHours()).slice(-2),\n c = (\"00\" + i.getUTCMinutes()).slice(-2),\n f = (\"00\" + i.getUTCSeconds()).slice(-2);\n return h + g + b + a + c + f + \"Z\";\n};\nif (typeof KJUR == \"undefined\" || !KJUR) {\n KJUR = {};\n}\nif (typeof KJUR.jws == \"undefined\" || !KJUR.jws) {\n KJUR.jws = {};\n}\nKJUR.jws.JWSJS = function () {\n var c = KJUR,\n b = c.jws,\n a = b.JWS,\n d = a.readSafeJSONString;\n this.aHeader = [];\n this.sPayload = \"\";\n this.aSignature = [];\n this.init = function () {\n this.aHeader = [];\n this.sPayload = undefined;\n this.aSignature = [];\n };\n this.initWithJWS = function (f) {\n this.init();\n var e = f.split(\".\");\n if (e.length != 3) {\n throw \"malformed input JWS\";\n }\n this.aHeader.push(e[0]);\n this.sPayload = e[1];\n this.aSignature.push(e[2]);\n };\n this.addSignature = function (e, h, m, k) {\n if (this.sPayload === undefined || this.sPayload === null) {\n throw \"there's no JSON-JS signature to add.\";\n }\n var l = this.aHeader.length;\n if (this.aHeader.length != this.aSignature.length) {\n throw \"aHeader.length != aSignature.length\";\n }\n try {\n var f = KJUR.jws.JWS.sign(e, h, this.sPayload, m, k);\n var j = f.split(\".\");\n var n = j[0];\n var g = j[2];\n this.aHeader.push(j[0]);\n this.aSignature.push(j[2]);\n } catch (i) {\n if (this.aHeader.length > l) {\n this.aHeader.pop();\n }\n if (this.aSignature.length > l) {\n this.aSignature.pop();\n }\n throw \"addSignature failed: \" + i;\n }\n };\n this.verifyAll = function (h) {\n if (this.aHeader.length !== h.length || this.aSignature.length !== h.length) {\n return false;\n }\n for (var g = 0; g < h.length; g++) {\n var f = h[g];\n if (f.length !== 2) {\n return false;\n }\n var e = this.verifyNth(g, f[0], f[1]);\n if (e === false) {\n return false;\n }\n }\n return true;\n };\n this.verifyNth = function (f, j, g) {\n if (this.aHeader.length <= f || this.aSignature.length <= f) {\n return false;\n }\n var h = this.aHeader[f];\n var k = this.aSignature[f];\n var l = h + \".\" + this.sPayload + \".\" + k;\n var e = false;\n try {\n e = a.verify(l, j, g);\n } catch (i) {\n return false;\n }\n return e;\n };\n this.readJWSJS = function (g) {\n if (typeof g === \"string\") {\n var f = d(g);\n if (f == null) {\n throw \"argument is not safe JSON object string\";\n }\n this.aHeader = f.headers;\n this.sPayload = f.payload;\n this.aSignature = f.signatures;\n } else {\n try {\n if (g.headers.length > 0) {\n this.aHeader = g.headers;\n } else {\n throw \"malformed header\";\n }\n if (typeof g.payload === \"string\") {\n this.sPayload = g.payload;\n } else {\n throw \"malformed signatures\";\n }\n if (g.signatures.length > 0) {\n this.aSignature = g.signatures;\n } else {\n throw \"malformed signatures\";\n }\n } catch (e) {\n throw \"malformed JWS-JS JSON object: \" + e;\n }\n }\n };\n this.getJSON = function () {\n return {\n headers: this.aHeader,\n payload: this.sPayload,\n signatures: this.aSignature\n };\n };\n this.isEmpty = function () {\n if (this.aHeader.length == 0) {\n return 1;\n }\n return 0;\n };\n};\nexports.SecureRandom = SecureRandom;\nexports.rng_seed_time = rng_seed_time;\nexports.BigInteger = BigInteger;\nexports.RSAKey = RSAKey;\nexports.ECDSA = KJUR.crypto.ECDSA;\nexports.DSA = KJUR.crypto.DSA;\nexports.Signature = KJUR.crypto.Signature;\nexports.MessageDigest = KJUR.crypto.MessageDigest;\nexports.Mac = KJUR.crypto.Mac;\n//exports.Cipher = KJUR.crypto.Cipher;\nexports.KEYUTIL = KEYUTIL;\nexports.ASN1HEX = ASN1HEX;\nexports.X509 = X509;\nexports.X509CRL = X509CRL;\nexports.CryptoJS = CryptoJS;\n\n// ext/base64.js\nexports.b64tohex = b64tohex;\nexports.b64toBA = b64toBA;\n\n// ext/ec*.js\nexports.ECFieldElementFp = ECFieldElementFp;\nexports.ECPointFp = ECPointFp;\nexports.ECCurveFp = ECCurveFp;\n\n// base64x.js\nexports.stoBA = stoBA;\nexports.BAtos = BAtos;\nexports.BAtohex = BAtohex;\nexports.stohex = stohex;\nexports.stob64 = stob64;\nexports.stob64u = stob64u;\nexports.b64utos = b64utos;\nexports.b64tob64u = b64tob64u;\nexports.b64utob64 = b64utob64;\nexports.hex2b64 = hex2b64;\nexports.hextob64u = hextob64u;\nexports.b64utohex = b64utohex;\nexports.utf8tob64u = utf8tob64u;\nexports.b64utoutf8 = b64utoutf8;\nexports.utf8tob64 = utf8tob64;\nexports.b64toutf8 = b64toutf8;\nexports.utf8tohex = utf8tohex;\nexports.hextoutf8 = hextoutf8;\nexports.hextorstr = hextorstr;\nexports.rstrtohex = rstrtohex;\nexports.hextob64 = hextob64;\nexports.hextob64nl = hextob64nl;\nexports.b64nltohex = b64nltohex;\nexports.hextopem = hextopem;\nexports.pemtohex = pemtohex;\nexports.hextoArrayBuffer = hextoArrayBuffer;\nexports.ArrayBuffertohex = ArrayBuffertohex;\nexports.zulutomsec = zulutomsec;\nexports.msectozulu = msectozulu;\nexports.zulutosec = zulutosec;\nexports.zulutodate = zulutodate;\nexports.datetozulu = datetozulu;\nexports.uricmptohex = uricmptohex;\nexports.hextouricmp = hextouricmp;\nexports.ipv6tohex = ipv6tohex;\nexports.hextoipv6 = hextoipv6;\nexports.hextoip = hextoip;\nexports.iptohex = iptohex;\nexports.ucs2hextoutf8 = ucs2hextoutf8;\nexports.encodeURIComponentAll = encodeURIComponentAll;\nexports.newline_toUnix = newline_toUnix;\nexports.newline_toDos = newline_toDos;\nexports.hextoposhex = hextoposhex;\nexports.intarystrtohex = intarystrtohex;\nexports.strdiffidx = strdiffidx;\nexports.oidtohex = oidtohex;\nexports.hextooid = hextooid;\nexports.strpad = strpad;\nexports.bitstrtoint = bitstrtoint;\nexports.inttobitstr = inttobitstr;\nexports.bitstrtobinstr = bitstrtobinstr;\nexports.binstrtobitstr = binstrtobitstr;\nexports.isBase64URLDot = isBase64URLDot;\nexports.namearraytobinstr = namearraytobinstr;\nexports.extendClass = extendClass;\nexports.foldnl = foldnl;\nexports.b64topem = b64topem;\nexports.pemtob64 = pemtob64;\nexports.timeogen = timetogen;\nexports.aryval = aryval;\nexports.inttohex = inttohex;\nexports.twoscompl = twoscompl;\n\n// name spaces\nexports.KJUR = KJUR;\nexports.crypto = KJUR.crypto;\nexports.asn1 = KJUR.asn1;\nexports.jws = KJUR.jws;\nexports.lang = KJUR.lang;\nexports.VERSION = VERSION;\nexports.VERSION_FULL = VERSION_FULL;","!function (n, e) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = e() : \"function\" == typeof define && define.amd ? define(e) : (n = \"undefined\" != typeof globalThis ? globalThis : n || self).dayjs_plugin_localeData = e();\n}(this, function () {\n \"use strict\";\n\n return function (n, e, t) {\n var r = e.prototype,\n o = function (n) {\n return n && (n.indexOf ? n : n.s);\n },\n u = function (n, e, t, r, u) {\n var i = n.name ? n : n.$locale(),\n a = o(i[e]),\n s = o(i[t]),\n f = a || s.map(function (n) {\n return n.slice(0, r);\n });\n if (!u) return f;\n var d = i.weekStart;\n return f.map(function (n, e) {\n return f[(e + (d || 0)) % 7];\n });\n },\n i = function () {\n return t.Ls[t.locale()];\n },\n a = function (n, e) {\n return n.formats[e] || function (n) {\n return n.replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g, function (n, e, t) {\n return e || t.slice(1);\n });\n }(n.formats[e.toUpperCase()]);\n },\n s = function () {\n var n = this;\n return {\n months: function (e) {\n return e ? e.format(\"MMMM\") : u(n, \"months\");\n },\n monthsShort: function (e) {\n return e ? e.format(\"MMM\") : u(n, \"monthsShort\", \"months\", 3);\n },\n firstDayOfWeek: function () {\n return n.$locale().weekStart || 0;\n },\n weekdays: function (e) {\n return e ? e.format(\"dddd\") : u(n, \"weekdays\");\n },\n weekdaysMin: function (e) {\n return e ? e.format(\"dd\") : u(n, \"weekdaysMin\", \"weekdays\", 2);\n },\n weekdaysShort: function (e) {\n return e ? e.format(\"ddd\") : u(n, \"weekdaysShort\", \"weekdays\", 3);\n },\n longDateFormat: function (e) {\n return a(n.$locale(), e);\n },\n meridiem: this.$locale().meridiem,\n ordinal: this.$locale().ordinal\n };\n };\n r.localeData = function () {\n return s.bind(this)();\n }, t.localeData = function () {\n var n = i();\n return {\n firstDayOfWeek: function () {\n return n.weekStart || 0;\n },\n weekdays: function () {\n return t.weekdays();\n },\n weekdaysShort: function () {\n return t.weekdaysShort();\n },\n weekdaysMin: function () {\n return t.weekdaysMin();\n },\n months: function () {\n return t.months();\n },\n monthsShort: function () {\n return t.monthsShort();\n },\n longDateFormat: function (e) {\n return a(n, e);\n },\n meridiem: n.meridiem,\n ordinal: n.ordinal\n };\n }, t.months = function () {\n return u(i(), \"months\");\n }, t.monthsShort = function () {\n return u(i(), \"monthsShort\", \"months\", 3);\n }, t.weekdays = function (n) {\n return u(i(), \"weekdays\", null, null, n);\n }, t.weekdaysShort = function (n) {\n return u(i(), \"weekdaysShort\", \"weekdays\", 3, n);\n }, t.weekdaysMin = function (n) {\n return u(i(), \"weekdaysMin\", \"weekdays\", 2, n);\n };\n };\n});","!function (e, t) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define(t) : (e = \"undefined\" != typeof globalThis ? globalThis : e || self).dayjs_plugin_customParseFormat = t();\n}(this, function () {\n \"use strict\";\n\n var e = {\n LTS: \"h:mm:ss A\",\n LT: \"h:mm A\",\n L: \"MM/DD/YYYY\",\n LL: \"MMMM D, YYYY\",\n LLL: \"MMMM D, YYYY h:mm A\",\n LLLL: \"dddd, MMMM D, YYYY h:mm A\"\n },\n t = /(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,\n n = /\\d/,\n r = /\\d\\d/,\n i = /\\d\\d?/,\n o = /\\d*[^-_:/,()\\s\\d]+/,\n s = {},\n a = function (e) {\n return (e = +e) + (e > 68 ? 1900 : 2e3);\n };\n var f = function (e) {\n return function (t) {\n this[e] = +t;\n };\n },\n h = [/[+-]\\d\\d:?(\\d\\d)?|Z/, function (e) {\n (this.zone || (this.zone = {})).offset = function (e) {\n if (!e) return 0;\n if (\"Z\" === e) return 0;\n var t = e.match(/([+-]|\\d\\d)/g),\n n = 60 * t[1] + (+t[2] || 0);\n return 0 === n ? 0 : \"+\" === t[0] ? -n : n;\n }(e);\n }],\n u = function (e) {\n var t = s[e];\n return t && (t.indexOf ? t : t.s.concat(t.f));\n },\n d = function (e, t) {\n var n,\n r = s.meridiem;\n if (r) {\n for (var i = 1; i <= 24; i += 1) if (e.indexOf(r(i, 0, t)) > -1) {\n n = i > 12;\n break;\n }\n } else n = e === (t ? \"pm\" : \"PM\");\n return n;\n },\n c = {\n A: [o, function (e) {\n this.afternoon = d(e, !1);\n }],\n a: [o, function (e) {\n this.afternoon = d(e, !0);\n }],\n Q: [n, function (e) {\n this.month = 3 * (e - 1) + 1;\n }],\n S: [n, function (e) {\n this.milliseconds = 100 * +e;\n }],\n SS: [r, function (e) {\n this.milliseconds = 10 * +e;\n }],\n SSS: [/\\d{3}/, function (e) {\n this.milliseconds = +e;\n }],\n s: [i, f(\"seconds\")],\n ss: [i, f(\"seconds\")],\n m: [i, f(\"minutes\")],\n mm: [i, f(\"minutes\")],\n H: [i, f(\"hours\")],\n h: [i, f(\"hours\")],\n HH: [i, f(\"hours\")],\n hh: [i, f(\"hours\")],\n D: [i, f(\"day\")],\n DD: [r, f(\"day\")],\n Do: [o, function (e) {\n var t = s.ordinal,\n n = e.match(/\\d+/);\n if (this.day = n[0], t) for (var r = 1; r <= 31; r += 1) t(r).replace(/\\[|\\]/g, \"\") === e && (this.day = r);\n }],\n w: [i, f(\"week\")],\n ww: [r, f(\"week\")],\n M: [i, f(\"month\")],\n MM: [r, f(\"month\")],\n MMM: [o, function (e) {\n var t = u(\"months\"),\n n = (u(\"monthsShort\") || t.map(function (e) {\n return e.slice(0, 3);\n })).indexOf(e) + 1;\n if (n < 1) throw new Error();\n this.month = n % 12 || n;\n }],\n MMMM: [o, function (e) {\n var t = u(\"months\").indexOf(e) + 1;\n if (t < 1) throw new Error();\n this.month = t % 12 || t;\n }],\n Y: [/[+-]?\\d+/, f(\"year\")],\n YY: [r, function (e) {\n this.year = a(e);\n }],\n YYYY: [/\\d{4}/, f(\"year\")],\n Z: h,\n ZZ: h\n };\n function l(n) {\n var r, i;\n r = n, i = s && s.formats;\n for (var o = (n = r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g, function (t, n, r) {\n var o = r && r.toUpperCase();\n return n || i[r] || e[r] || i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g, function (e, t, n) {\n return t || n.slice(1);\n });\n })).match(t), a = o.length, f = 0; f < a; f += 1) {\n var h = o[f],\n u = c[h],\n d = u && u[0],\n l = u && u[1];\n o[f] = l ? {\n regex: d,\n parser: l\n } : h.replace(/^\\[|\\]$/g, \"\");\n }\n return function (e) {\n for (var t = {}, n = 0, r = 0; n < a; n += 1) {\n var i = o[n];\n if (\"string\" == typeof i) r += i.length;else {\n var s = i.regex,\n f = i.parser,\n h = e.slice(r),\n u = s.exec(h)[0];\n f.call(t, u), e = e.replace(u, \"\");\n }\n }\n return function (e) {\n var t = e.afternoon;\n if (void 0 !== t) {\n var n = e.hours;\n t ? n < 12 && (e.hours += 12) : 12 === n && (e.hours = 0), delete e.afternoon;\n }\n }(t), t;\n };\n }\n return function (e, t, n) {\n n.p.customParseFormat = !0, e && e.parseTwoDigitYear && (a = e.parseTwoDigitYear);\n var r = t.prototype,\n i = r.parse;\n r.parse = function (e) {\n var t = e.date,\n r = e.utc,\n o = e.args;\n this.$u = r;\n var a = o[1];\n if (\"string\" == typeof a) {\n var f = !0 === o[2],\n h = !0 === o[3],\n u = f || h,\n d = o[2];\n h && (d = o[2]), s = this.$locale(), !f && d && (s = n.Ls[d]), this.$d = function (e, t, n, r) {\n try {\n if ([\"x\", \"X\"].indexOf(t) > -1) return new Date((\"X\" === t ? 1e3 : 1) * e);\n var i = l(t)(e),\n o = i.year,\n s = i.month,\n a = i.day,\n f = i.hours,\n h = i.minutes,\n u = i.seconds,\n d = i.milliseconds,\n c = i.zone,\n m = i.week,\n M = new Date(),\n Y = a || (o || s ? 1 : M.getDate()),\n p = o || M.getFullYear(),\n v = 0;\n o && !s || (v = s > 0 ? s - 1 : M.getMonth());\n var D,\n w = f || 0,\n g = h || 0,\n y = u || 0,\n L = d || 0;\n return c ? new Date(Date.UTC(p, v, Y, w, g, y, L + 60 * c.offset * 1e3)) : n ? new Date(Date.UTC(p, v, Y, w, g, y, L)) : (D = new Date(p, v, Y, w, g, y, L), m && (D = r(D).week(m).toDate()), D);\n } catch (e) {\n return new Date(\"\");\n }\n }(t, a, r, n), this.init(), d && !0 !== d && (this.$L = this.locale(d).$L), u && t != this.format(a) && (this.$d = new Date(\"\")), s = {};\n } else if (a instanceof Array) for (var c = a.length, m = 1; m <= c; m += 1) {\n o[1] = a[m - 1];\n var M = n.apply(this, o);\n if (M.isValid()) {\n this.$d = M.$d, this.$L = M.$L, this.init();\n break;\n }\n m === c && (this.$d = new Date(\"\"));\n } else i.call(this, e);\n };\n };\n});","!function (t, n) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = n() : \"function\" == typeof define && define.amd ? define(n) : (t = \"undefined\" != typeof globalThis ? globalThis : t || self).dayjs_plugin_objectSupport = n();\n}(this, function () {\n \"use strict\";\n\n return function (t, n, e) {\n var i = n.prototype,\n r = function (t) {\n var n,\n r = t.date,\n o = t.utc,\n u = {};\n if (!(null === (n = r) || n instanceof Date || n instanceof Array || i.$utils().u(n) || \"Object\" !== n.constructor.name)) {\n if (!Object.keys(r).length) return new Date();\n var a = o ? e.utc() : e();\n Object.keys(r).forEach(function (t) {\n var n, e;\n u[(n = t, e = i.$utils().p(n), \"date\" === e ? \"day\" : e)] = r[t];\n });\n var c = u.day || (u.year || u.month >= 0 ? 1 : a.date()),\n s = u.year || a.year(),\n d = u.month >= 0 ? u.month : u.year || u.day ? 0 : a.month(),\n f = u.hour || 0,\n b = u.minute || 0,\n h = u.second || 0,\n y = u.millisecond || 0;\n return o ? new Date(Date.UTC(s, d, c, f, b, h, y)) : new Date(s, d, c, f, b, h, y);\n }\n return r;\n },\n o = i.parse;\n i.parse = function (t) {\n t.date = r.bind(this)(t), o.bind(this)(t);\n };\n var u = i.set,\n a = i.add,\n c = i.subtract,\n s = function (t, n, e, i) {\n void 0 === i && (i = 1);\n var r = Object.keys(n),\n o = this;\n return r.forEach(function (e) {\n o = t.bind(o)(n[e] * i, e);\n }), o;\n };\n i.set = function (t, n) {\n return n = void 0 === n ? t : n, \"Object\" === t.constructor.name ? s.bind(this)(function (t, n) {\n return u.bind(this)(n, t);\n }, n, t) : u.bind(this)(t, n);\n }, i.add = function (t, n) {\n return \"Object\" === t.constructor.name ? s.bind(this)(a, t, n) : a.bind(this)(t, n);\n }, i.subtract = function (t, n) {\n return \"Object\" === t.constructor.name ? s.bind(this)(a, t, n, -1) : c.bind(this)(t, n);\n };\n };\n});","!function (e, t) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define(t) : (e = \"undefined\" != typeof globalThis ? globalThis : e || self).dayjs_plugin_localizedFormat = t();\n}(this, function () {\n \"use strict\";\n\n var e = {\n LTS: \"h:mm:ss A\",\n LT: \"h:mm A\",\n L: \"MM/DD/YYYY\",\n LL: \"MMMM D, YYYY\",\n LLL: \"MMMM D, YYYY h:mm A\",\n LLLL: \"dddd, MMMM D, YYYY h:mm A\"\n };\n return function (t, o, n) {\n var r = o.prototype,\n i = r.format;\n n.en.formats = e, r.format = function (t) {\n void 0 === t && (t = \"YYYY-MM-DDTHH:mm:ssZ\");\n var o = this.$locale().formats,\n n = function (t, o) {\n return t.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g, function (t, n, r) {\n var i = r && r.toUpperCase();\n return n || o[r] || e[r] || o[i].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g, function (e, t, o) {\n return t || o.slice(1);\n });\n });\n }(t, void 0 === o ? {} : o);\n return i.call(this, n);\n };\n };\n});","!function (t, i) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = i() : \"function\" == typeof define && define.amd ? define(i) : (t = \"undefined\" != typeof globalThis ? globalThis : t || self).dayjs_plugin_utc = i();\n}(this, function () {\n \"use strict\";\n\n var t = \"minute\",\n i = /[+-]\\d\\d(?::?\\d\\d)?/g,\n e = /([+-]|\\d\\d)/g;\n return function (s, f, n) {\n var u = f.prototype;\n n.utc = function (t) {\n var i = {\n date: t,\n utc: !0,\n args: arguments\n };\n return new f(i);\n }, u.utc = function (i) {\n var e = n(this.toDate(), {\n locale: this.$L,\n utc: !0\n });\n return i ? e.add(this.utcOffset(), t) : e;\n }, u.local = function () {\n return n(this.toDate(), {\n locale: this.$L,\n utc: !1\n });\n };\n var o = u.parse;\n u.parse = function (t) {\n t.utc && (this.$u = !0), this.$utils().u(t.$offset) || (this.$offset = t.$offset), o.call(this, t);\n };\n var r = u.init;\n u.init = function () {\n if (this.$u) {\n var t = this.$d;\n this.$y = t.getUTCFullYear(), this.$M = t.getUTCMonth(), this.$D = t.getUTCDate(), this.$W = t.getUTCDay(), this.$H = t.getUTCHours(), this.$m = t.getUTCMinutes(), this.$s = t.getUTCSeconds(), this.$ms = t.getUTCMilliseconds();\n } else r.call(this);\n };\n var a = u.utcOffset;\n u.utcOffset = function (s, f) {\n var n = this.$utils().u;\n if (n(s)) return this.$u ? 0 : n(this.$offset) ? a.call(this) : this.$offset;\n if (\"string\" == typeof s && (s = function (t) {\n void 0 === t && (t = \"\");\n var s = t.match(i);\n if (!s) return null;\n var f = (\"\" + s[0]).match(e) || [\"-\", 0, 0],\n n = f[0],\n u = 60 * +f[1] + +f[2];\n return 0 === u ? 0 : \"+\" === n ? u : -u;\n }(s), null === s)) return this;\n var u = Math.abs(s) <= 16 ? 60 * s : s,\n o = this;\n if (f) return o.$offset = u, o.$u = 0 === s, o;\n if (0 !== s) {\n var r = this.$u ? this.toDate().getTimezoneOffset() : -1 * this.utcOffset();\n (o = this.local().add(u + r, t)).$offset = u, o.$x.$localOffset = r;\n } else o = this.utc();\n return o;\n };\n var h = u.format;\n u.format = function (t) {\n var i = t || (this.$u ? \"YYYY-MM-DDTHH:mm:ss[Z]\" : \"\");\n return h.call(this, i);\n }, u.valueOf = function () {\n var t = this.$utils().u(this.$offset) ? 0 : this.$offset + (this.$x.$localOffset || this.$d.getTimezoneOffset());\n return this.$d.valueOf() - 6e4 * t;\n }, u.isUTC = function () {\n return !!this.$u;\n }, u.toISOString = function () {\n return this.toDate().toISOString();\n }, u.toString = function () {\n return this.toDate().toUTCString();\n };\n var l = u.toDate;\n u.toDate = function (t) {\n return \"s\" === t && this.$offset ? n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate() : l.call(this);\n };\n var c = u.diff;\n u.diff = function (t, i, e) {\n if (t && this.$u === t.$u) return c.call(this, t, i, e);\n var s = this.local(),\n f = n(t).local();\n return c.call(s, f, i, e);\n };\n };\n});","!function (e, t) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define(t) : (e = \"undefined\" != typeof globalThis ? globalThis : e || self).dayjs_plugin_isoWeek = t();\n}(this, function () {\n \"use strict\";\n\n var e = \"day\";\n return function (t, i, s) {\n var a = function (t) {\n return t.add(4 - t.isoWeekday(), e);\n },\n d = i.prototype;\n d.isoWeekYear = function () {\n return a(this).year();\n }, d.isoWeek = function (t) {\n if (!this.$utils().u(t)) return this.add(7 * (t - this.isoWeek()), e);\n var i,\n d,\n n,\n o,\n r = a(this),\n u = (i = this.isoWeekYear(), d = this.$u, n = (d ? s.utc : s)().year(i).startOf(\"year\"), o = 4 - n.isoWeekday(), n.isoWeekday() > 4 && (o += 7), n.add(o, e));\n return r.diff(u, \"week\") + 1;\n }, d.isoWeekday = function (e) {\n return this.$utils().u(e) ? this.day() || 7 : this.day(this.day() % 7 ? e : e - 7);\n };\n var n = d.startOf;\n d.startOf = function (e, t) {\n var i = this.$utils(),\n s = !!i.u(t) || t;\n return \"isoweek\" === i.p(e) ? s ? this.date(this.date() - (this.isoWeekday() - 1)).startOf(\"day\") : this.date(this.date() - 1 - (this.isoWeekday() - 1) + 7).endOf(\"day\") : n.bind(this)(e, t);\n };\n };\n});","!function (e, t) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define(t) : (e = \"undefined\" != typeof globalThis ? globalThis : e || self).dayjs_plugin_weekOfYear = t();\n}(this, function () {\n \"use strict\";\n\n var e = \"week\",\n t = \"year\";\n return function (i, n, r) {\n var f = n.prototype;\n f.week = function (i) {\n if (void 0 === i && (i = null), null !== i) return this.add(7 * (i - this.week()), \"day\");\n var n = this.$locale().yearStart || 1;\n if (11 === this.month() && this.date() > 25) {\n var f = r(this).startOf(t).add(1, t).date(n),\n s = r(this).endOf(e);\n if (f.isBefore(s)) return 1;\n }\n var a = r(this).startOf(t).date(n).startOf(e).subtract(1, \"millisecond\"),\n o = this.diff(a, e, !0);\n return o < 0 ? r(this).startOf(\"week\").week() : Math.ceil(o);\n }, f.weeks = function (e) {\n return void 0 === e && (e = null), this.week(e);\n };\n };\n});","!function (e, t) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t() : \"function\" == typeof define && define.amd ? define(t) : (e = \"undefined\" != typeof globalThis ? globalThis : e || self).dayjs_plugin_weekday = t();\n}(this, function () {\n \"use strict\";\n\n return function (e, t) {\n t.prototype.weekday = function (e) {\n var t = this.$locale().weekStart || 0,\n i = this.$W,\n n = (i < t ? i + 7 : i) - t;\n return this.$utils().u(e) ? n : this.subtract(n, \"day\").add(e, \"day\");\n };\n };\n});","!function (u, e) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = e(require(\"dayjs\")) : \"function\" == typeof define && define.amd ? define([\"dayjs\"], e) : (u = \"undefined\" != typeof globalThis ? globalThis : u || self).dayjs_locale_fi = e(u.dayjs);\n}(this, function (u) {\n \"use strict\";\n\n function e(u) {\n return u && \"object\" == typeof u && \"default\" in u ? u : {\n default: u\n };\n }\n var t = e(u);\n function n(u, e, t, n) {\n var i = {\n s: \"muutama sekunti\",\n m: \"minuutti\",\n mm: \"%d minuuttia\",\n h: \"tunti\",\n hh: \"%d tuntia\",\n d: \"päivä\",\n dd: \"%d päivää\",\n M: \"kuukausi\",\n MM: \"%d kuukautta\",\n y: \"vuosi\",\n yy: \"%d vuotta\",\n numbers: \"nolla_yksi_kaksi_kolme_neljä_viisi_kuusi_seitsemän_kahdeksan_yhdeksän\".split(\"_\")\n },\n a = {\n s: \"muutaman sekunnin\",\n m: \"minuutin\",\n mm: \"%d minuutin\",\n h: \"tunnin\",\n hh: \"%d tunnin\",\n d: \"päivän\",\n dd: \"%d päivän\",\n M: \"kuukauden\",\n MM: \"%d kuukauden\",\n y: \"vuoden\",\n yy: \"%d vuoden\",\n numbers: \"nollan_yhden_kahden_kolmen_neljän_viiden_kuuden_seitsemän_kahdeksan_yhdeksän\".split(\"_\")\n },\n s = n && !e ? a : i,\n _ = s[t];\n return u < 10 ? _.replace(\"%d\", s.numbers[u]) : _.replace(\"%d\", u);\n }\n var i = {\n name: \"fi\",\n weekdays: \"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai\".split(\"_\"),\n weekdaysShort: \"su_ma_ti_ke_to_pe_la\".split(\"_\"),\n weekdaysMin: \"su_ma_ti_ke_to_pe_la\".split(\"_\"),\n months: \"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu\".split(\"_\"),\n monthsShort: \"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu\".split(\"_\"),\n ordinal: function (u) {\n return u + \".\";\n },\n weekStart: 1,\n yearStart: 4,\n relativeTime: {\n future: \"%s päästä\",\n past: \"%s sitten\",\n s: n,\n m: n,\n mm: n,\n h: n,\n hh: n,\n d: n,\n dd: n,\n M: n,\n MM: n,\n y: n,\n yy: n\n },\n formats: {\n LT: \"HH.mm\",\n LTS: \"HH.mm.ss\",\n L: \"DD.MM.YYYY\",\n LL: \"D. MMMM[ta] YYYY\",\n LLL: \"D. MMMM[ta] YYYY, [klo] HH.mm\",\n LLLL: \"dddd, D. MMMM[ta] YYYY, [klo] HH.mm\",\n l: \"D.M.YYYY\",\n ll: \"D. MMM YYYY\",\n lll: \"D. MMM YYYY, [klo] HH.mm\",\n llll: \"ddd, D. MMM YYYY, [klo] HH.mm\"\n }\n };\n return t.default.locale(i, null, !0), i;\n});","!function (e, t) {\n \"object\" == typeof exports && \"undefined\" != typeof module ? module.exports = t(require(\"dayjs\")) : \"function\" == typeof define && define.amd ? define([\"dayjs\"], t) : (e = \"undefined\" != typeof globalThis ? globalThis : e || self).dayjs_locale_sv = t(e.dayjs);\n}(this, function (e) {\n \"use strict\";\n\n function t(e) {\n return e && \"object\" == typeof e && \"default\" in e ? e : {\n default: e\n };\n }\n var a = t(e),\n d = {\n name: \"sv\",\n weekdays: \"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag\".split(\"_\"),\n weekdaysShort: \"sön_mån_tis_ons_tor_fre_lör\".split(\"_\"),\n weekdaysMin: \"sö_må_ti_on_to_fr_lö\".split(\"_\"),\n months: \"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december\".split(\"_\"),\n monthsShort: \"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),\n weekStart: 1,\n yearStart: 4,\n ordinal: function (e) {\n var t = e % 10;\n return \"[\" + e + (1 === t || 2 === t ? \"a\" : \"e\") + \"]\";\n },\n formats: {\n LT: \"HH:mm\",\n LTS: \"HH:mm:ss\",\n L: \"YYYY-MM-DD\",\n LL: \"D MMMM YYYY\",\n LLL: \"D MMMM YYYY [kl.] HH:mm\",\n LLLL: \"dddd D MMMM YYYY [kl.] HH:mm\",\n lll: \"D MMM YYYY HH:mm\",\n llll: \"ddd D MMM YYYY HH:mm\"\n },\n relativeTime: {\n future: \"om %s\",\n past: \"för %s sedan\",\n s: \"några sekunder\",\n m: \"en minut\",\n mm: \"%d minuter\",\n h: \"en timme\",\n hh: \"%d timmar\",\n d: \"en dag\",\n dd: \"%d dagar\",\n M: \"en månad\",\n MM: \"%d månader\",\n y: \"ett år\",\n yy: \"%d år\"\n }\n };\n return a.default.locale(d, null, !0), d;\n});","import { BrowserModule } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { APP_INITIALIZER, LOCALE_ID, NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ErrorHandler } from '@angular/core';\r\nimport { ServiceWorkerModule } from '@angular/service-worker';\r\n\r\nimport { OAuthModule, OAuthStorage } from 'angular-oauth2-oidc';\r\n\r\nimport { IntlModule } from '@progress/kendo-angular-intl';\r\nimport '@progress/kendo-angular-intl/locales/fi/all';\r\nimport '@progress/kendo-angular-intl/locales/sv/all';\r\nimport '@progress/kendo-angular-intl/locales/en/all';\r\n\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { BlahModule } from '@headpower/blah-ng';\r\n\r\nimport { HpoErrorHandler } from './shared/handlers/hpo-errorhandler.service';\r\nimport { AppComponent } from './app.component';\r\nimport { AppConfig } from './app.config';\r\n\r\nimport { AppLandingComponent } from './app-landing.component';\r\nimport { OpenTargetComponent } from './open-target.component';\r\nimport { PageNotFoundComponent } from './page-not-found.component';\r\nimport { NoUsageRightComponent } from './no-usage-right.component';\r\nimport { NoAdminRightComponent } from './no-admin-right.component';\r\nimport { ForbiddenComponent } from './forbidden.component';\r\n\r\nimport { environment } from '../environments/environment';\r\n\r\nimport { HpoLayoutModule, SmoothnessEnforcer, ThemeService } from '@headpower/layout';\r\n\r\nimport { registerLocaleData } from '@angular/common';\r\nimport localeFi from '@angular/common/locales/fi';\r\nimport localeSv from '@angular/common/locales/sv';\r\nimport localeEn from '@angular/common/locales/en';\r\nimport { SharedModule } from './shared/shared.module';\r\n\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MAT_DIALOG_DEFAULT_OPTIONS } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorIntl } from '@angular/material/paginator';\r\nimport { BlahMatPaginatorIntl } from './providers/blah-mat-paginator-intl';\r\n\r\nimport { AppOAuthStorage } from '@headpower/angular-oauth2-oidc-extensions';\r\nimport { ResizeService } from './services/resize.service';\r\nimport { FloatingActionButtonModule, FloatingActionButtonService, SpinnerModule, HpoNumberModule, ContentLayoutService } from '@headpower/components';\r\nimport '@headpower/components/dayjs-loader';\r\nimport { MessageService } from '@progress/kendo-angular-l10n';\r\nimport { LocalizationMessageService } from './services/localization-message-service';\r\n\r\nimport { AppComponentService } from './services/app-component.service';\r\n\r\nimport { BlahService } from '@headpower/blah-ng';\r\n// Import the Popup module\r\nimport { PopupModule } from '@progress/kendo-angular-popup';\r\nimport { ElementRef } from '@angular/core';\r\nimport { SinglePopupService } from '@progress/kendo-angular-grid';\r\nimport { CoreModule } from './core.module';\r\nimport { GanttModule } from '@progress/kendo-angular-gantt';\r\nimport { PagerModule } from '@progress/kendo-angular-pager';\r\n\r\nimport { AngularSplitModule } from 'angular-split';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\nimport { HybridUiMapService } from './hybrid-ui-map.service';\r\nimport { MapModule } from './map/map.module';\r\nimport { AuthModule } from './auth/auth.module';\r\nimport { FloatingChatService } from './services/floating-chat.service';\r\nimport { IframeComponent } from './modules/Iframe/Iframe.component';\r\n\r\nexport function createOAuthStorage() {\r\n return new AppOAuthStorage('headpower_web_app', 'iwm');\r\n}\r\n\r\nexport function initConfig(config: AppConfig) {\r\n return () => config.load(environment.version);\r\n}\r\n\r\nexport function initBlahFactory(blahService: BlahService): Function {\r\n return () => blahService.init({\r\n appVersion: environment.version,\r\n resourceNames: [\r\n 'default',\r\n 'layout',\r\n 'error',\r\n 'endCustomerInvoice',\r\n 'task',\r\n 'dashboard',\r\n 'components',\r\n 'worksite',\r\n 'invoicingProposal',\r\n 'invoicingProposalFilter',\r\n 'productExtensions',\r\n 'settings',\r\n 'taskStatuses',\r\n 'plan',\r\n 'filter',\r\n 'tendering',\r\n 'tenderingListFilter',\r\n 'admin',\r\n 'newTaskList',\r\n 'satnet',\r\n 'map',\r\n 'networkComponents',\r\n 'floatingChat'\r\n ]\r\n });\r\n}\r\n\r\nexport function initTheme(themeService: ThemeService): Function {\r\n return () => themeService.init();\r\n}\r\n\r\nregisterLocaleData(localeFi, 'fi');\r\nregisterLocaleData(localeEn, 'en');\r\nregisterLocaleData(localeSv, 'sv');\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n PageNotFoundComponent,\r\n NoUsageRightComponent,\r\n NoAdminRightComponent,\r\n AppLandingComponent,\r\n ForbiddenComponent,\r\n OpenTargetComponent,\r\n IframeComponent\r\n ],\r\n imports: [\r\n BrowserModule,\r\n CoreModule,\r\n BrowserAnimationsModule,\r\n FloatingActionButtonModule,\r\n SpinnerModule,\r\n MatMenuModule,\r\n MatNativeDateModule,\r\n SharedModule,\r\n IntlModule,\r\n HpoLayoutModule,\r\n AppRoutingModule,\r\n FormsModule,\r\n MatFormFieldModule,\r\n MatButtonModule,\r\n MatInputModule,\r\n ServiceWorkerModule.register('ngsw-worker.js', {\r\n enabled: environment.production\r\n }),\r\n OAuthModule.forRoot(),\r\n BlahModule,\r\n HpoNumberModule,\r\n PopupModule,\r\n AngularSplitModule,\r\n GanttModule,\r\n PagerModule,\r\n MapModule,\r\n AuthModule\r\n ],\r\n providers: [\r\n AppComponentService,\r\n { provide: ErrorHandler, useClass: HpoErrorHandler },\r\n { provide: LOCALE_ID, useValue: 'fi-FI' },\r\n { provide: OAuthStorage, useFactory: createOAuthStorage },\r\n { provide: AppOAuthStorage, useFactory: createOAuthStorage },\r\n { provide: APP_INITIALIZER, useFactory: initConfig, deps: [AppConfig], multi: true },\r\n { provide: MAT_DIALOG_DEFAULT_OPTIONS, useValue: { autoFocus: false, hasBackdrop: true, maxHeight: '90vh' } },\r\n {\r\n // Initialize Blah translation service\r\n provide: APP_INITIALIZER,\r\n useFactory: initBlahFactory,\r\n deps: [BlahService],\r\n multi: true\r\n },\r\n ResizeService,\r\n HybridUiMapService,\r\n ContentLayoutService,\r\n FloatingActionButtonService,\r\n [{ provide: MessageService, useClass: LocalizationMessageService }],\r\n { provide: MatPaginatorIntl, useClass: BlahMatPaginatorIntl },\r\n [{\r\n provide: SinglePopupService,\r\n useFactory: () => {\r\n // return the container ElementRef, where the Kendo Popup component will be injected\r\n return { nativeElement: document.body } as ElementRef;\r\n }\r\n }],\r\n SmoothnessEnforcer,\r\n { provide: APP_INITIALIZER, useFactory: initTheme, deps: [ThemeService], multi: true },\r\n FloatingChatService\r\n ],\r\n bootstrap: [\r\n AppComponent\r\n ]\r\n})\r\nexport class AppModule { }\r\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2024 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nvar setData = require('@progress/kendo-angular-intl').setData;\nsetData({\n name: \"fi\",\n identity: {\n language: \"fi\"\n },\n territory: \"FI\",\n numbers: {\n symbols: {\n decimal: \",\",\n group: \" \",\n list: \";\",\n percentSign: \"%\",\n plusSign: \"+\",\n minusSign: \"−\",\n approximatelySign: \"~\",\n exponential: \"E\",\n superscriptingExponent: \"×\",\n perMille: \"‰\",\n infinity: \"∞\",\n nan: \"epäluku\",\n timeSeparator: \".\"\n },\n decimal: {\n patterns: [\"n\"],\n groupSize: [3]\n },\n scientific: {\n patterns: [\"nEn\"],\n groupSize: []\n },\n percent: {\n patterns: [\"n %\"],\n groupSize: [3]\n },\n currency: {\n patterns: [\"n $\"],\n groupSize: [3],\n \"unitPattern-count-one\": \"n $\",\n \"unitPattern-count-other\": \"n $\"\n },\n accounting: {\n patterns: [\"n $\"],\n groupSize: [3]\n },\n currencies: {\n ADP: {\n displayName: \"Andorran peseta\",\n \"displayName-count-one\": \"Andorran peseta\",\n \"displayName-count-other\": \"Andorran pesetaa\",\n symbol: \"ADP\"\n },\n AED: {\n displayName: \"Arabiemiirikuntien dirhami\",\n \"displayName-count-one\": \"Arabiemiirikuntien dirhami\",\n \"displayName-count-other\": \"Arabiemiirikuntien dirhamia\",\n symbol: \"AED\"\n },\n AFA: {\n displayName: \"Afganistanin afgaani (1927–2002)\",\n \"displayName-count-one\": \"Afganistanin afgaani (1927–2002)\",\n \"displayName-count-other\": \"Afganistanin afgaania (1927–2002)\",\n symbol: \"AFA\"\n },\n AFN: {\n displayName: \"Afganistanin afgaani\",\n \"displayName-count-one\": \"Afganistanin afgaani\",\n \"displayName-count-other\": \"Afganistanin afgaania\",\n symbol: \"AFN\",\n \"symbol-alt-narrow\": \"؋\"\n },\n ALK: {\n displayName: \"Albanian lek (1946–1965)\",\n \"displayName-count-one\": \"Albanian lek (1946–1965)\",\n \"displayName-count-other\": \"Albanian lekiä (1946–1965)\",\n symbol: \"ALK\"\n },\n ALL: {\n displayName: \"Albanian lek\",\n \"displayName-count-one\": \"Albanian lek\",\n \"displayName-count-other\": \"Albanian lekiä\",\n symbol: \"ALL\"\n },\n AMD: {\n displayName: \"Armenian dram\",\n \"displayName-count-one\": \"Armenian dram\",\n \"displayName-count-other\": \"Armenian dramia\",\n symbol: \"AMD\",\n \"symbol-alt-narrow\": \"֏\"\n },\n ANG: {\n displayName: \"Alankomaiden Antillien guldeni\",\n \"displayName-count-one\": \"Alankomaiden Antillien guldeni\",\n \"displayName-count-other\": \"Alankomaiden Antillien guldenia\",\n symbol: \"ANG\"\n },\n AOA: {\n displayName: \"Angolan kwanza\",\n \"displayName-count-one\": \"Angolan kwanza\",\n \"displayName-count-other\": \"Angolan kwanzaa\",\n symbol: \"AOA\",\n \"symbol-alt-narrow\": \"AOA\"\n },\n AOK: {\n displayName: \"Angolan kwanza (1977–1991)\",\n \"displayName-count-one\": \"Angolan kwanza (1977–1990)\",\n \"displayName-count-other\": \"Angolan kwanzaa (1977–1990)\",\n symbol: \"AOK\"\n },\n AON: {\n displayName: \"Angolan uusi kwanza (1990–2000)\",\n \"displayName-count-one\": \"Angolan uusi kwanza (1990–2000)\",\n \"displayName-count-other\": \"Angolan uutta kwanzaa (1990–2000)\",\n symbol: \"AON\"\n },\n AOR: {\n displayName: \"Angolan kwanza reajustado (1995–1999)\",\n \"displayName-count-one\": \"Angolan kwanza reajustado (1995–1999)\",\n \"displayName-count-other\": \"Angolan kwanza reajustadoa (1995–1999)\",\n symbol: \"AOR\"\n },\n ARA: {\n displayName: \"Argentiinan austral\",\n \"displayName-count-one\": \"Argentiinan austral\",\n \"displayName-count-other\": \"Argentiinan australia\",\n symbol: \"ARA\"\n },\n ARL: {\n displayName: \"Argentiinan ley-peso (1970–1983)\",\n \"displayName-count-one\": \"Argentiinan ley-peso (1970–1983)\",\n \"displayName-count-other\": \"Argentiinan ley-pesoa (1970–1983)\",\n symbol: \"ARL\"\n },\n ARM: {\n displayName: \"Argentiinan peso (1881–1970)\",\n \"displayName-count-one\": \"Argentiinan peso (1881–1970)\",\n \"displayName-count-other\": \"Argentiinan pesoa (1881–1970)\",\n symbol: \"ARM\"\n },\n ARP: {\n displayName: \"Argentiinan peso (1983–1985)\",\n \"displayName-count-one\": \"Argentiinan peso (1983–1985)\",\n \"displayName-count-other\": \"Argentiinan pesoa (1983–1985)\",\n symbol: \"ARP\"\n },\n ARS: {\n displayName: \"Argentiinan peso\",\n \"displayName-count-one\": \"Argentiinan peso\",\n \"displayName-count-other\": \"Argentiinan pesoa\",\n symbol: \"ARS\",\n \"symbol-alt-narrow\": \"ARS\"\n },\n ATS: {\n displayName: \"Itävallan šillinki\",\n \"displayName-count-one\": \"Itävallan šillinki\",\n \"displayName-count-other\": \"Itävallan šillinkiä\",\n symbol: \"ATS\"\n },\n AUD: {\n displayName: \"Australian dollari\",\n \"displayName-count-one\": \"Australian dollari\",\n \"displayName-count-other\": \"Australian dollaria\",\n symbol: \"AUD\",\n \"symbol-alt-narrow\": \"AUD\"\n },\n AWG: {\n displayName: \"Aruban floriini\",\n \"displayName-count-one\": \"Aruban floriini\",\n \"displayName-count-other\": \"Aruban floriinia\",\n symbol: \"AWG\"\n },\n AZM: {\n displayName: \"Azerbaidžanin manat (1993–2006)\",\n \"displayName-count-one\": \"Azerbaidžanin manat (1993–2006)\",\n \"displayName-count-other\": \"Azerbaidžanin manatia (1993–2006)\",\n symbol: \"AZM\"\n },\n AZN: {\n displayName: \"Azerbaidžanin manat\",\n \"displayName-count-one\": \"Azerbaidžanin manat\",\n \"displayName-count-other\": \"Azerbaidžanin manatia\",\n symbol: \"AZN\",\n \"symbol-alt-narrow\": \"₼\"\n },\n BAD: {\n displayName: \"Bosnia-Hertsegovinan dinaari (1992–1994)\",\n \"displayName-count-one\": \"Bosnia-Hertsegovinan dinaari (1992–1994)\",\n \"displayName-count-other\": \"Bosnia-Hertsegovinan dinaaria (1992–1994)\",\n symbol: \"BAD\"\n },\n BAM: {\n displayName: \"Bosnia-Hertsegovinan vaihdettava markka\",\n \"displayName-count-one\": \"Bosnia-Hertsegovinan vaihdettava markka\",\n \"displayName-count-other\": \"Bosnia-Hertsegovinan vaihdettavaa markkaa\",\n symbol: \"BAM\",\n \"symbol-alt-narrow\": \"BAM\"\n },\n BAN: {\n displayName: \"Bosnia-Hertsegovinan uusi dinaari (1994–1997)\",\n \"displayName-count-one\": \"Bosnia-Hertsegovinan uusi dinaari (1994–1997)\",\n \"displayName-count-other\": \"Bosnia-Hertsegovinan uutta dinaaria (1994–1997)\",\n symbol: \"BAN\"\n },\n BBD: {\n displayName: \"Barbadosin dollari\",\n \"displayName-count-one\": \"Barbadosin dollari\",\n \"displayName-count-other\": \"Barbadosin dollaria\",\n symbol: \"BBD\",\n \"symbol-alt-narrow\": \"BBD\"\n },\n BDT: {\n displayName: \"Bangladeshin taka\",\n \"displayName-count-one\": \"Bangladeshin taka\",\n \"displayName-count-other\": \"Bangladeshin takaa\",\n symbol: \"BDT\",\n \"symbol-alt-narrow\": \"BDT\"\n },\n BEC: {\n displayName: \"Belgian vaihdettava frangi\",\n \"displayName-count-one\": \"Belgian vaihdettava frangi\",\n \"displayName-count-other\": \"Belgian vaihdettavaa frangia\",\n symbol: \"BEC\"\n },\n BEF: {\n displayName: \"Belgian frangi\",\n \"displayName-count-one\": \"Belgian frangi\",\n \"displayName-count-other\": \"Belgian frangia\",\n symbol: \"BEF\"\n },\n BEL: {\n displayName: \"Belgian rahoitusfrangi\",\n \"displayName-count-one\": \"Belgian rahoitusfrangi\",\n \"displayName-count-other\": \"Belgian rahoitusfrangia\",\n symbol: \"BEL\"\n },\n BGL: {\n displayName: \"Bulgarian kova lev\",\n \"displayName-count-one\": \"Bulgarian kova lev\",\n \"displayName-count-other\": \"Bulgarian kovaa leviä\",\n symbol: \"BGL\"\n },\n BGM: {\n displayName: \"Bulgarian sosialistinen lev\",\n \"displayName-count-one\": \"Bulgarian sosialistinen lev\",\n \"displayName-count-other\": \"Bulgarian sosialistista leviä\",\n symbol: \"BGM\"\n },\n BGN: {\n displayName: \"Bulgarian lev\",\n \"displayName-count-one\": \"Bulgarian lev\",\n \"displayName-count-other\": \"Bulgarian leviä\",\n symbol: \"BGN\"\n },\n BGO: {\n displayName: \"Bulgarian lev (1879–1952)\",\n \"displayName-count-one\": \"Bulgarian lev (1879–1952)\",\n \"displayName-count-other\": \"Bulgarian leviä (1879–1952)\",\n symbol: \"BGO\"\n },\n BHD: {\n displayName: \"Bahrainin dinaari\",\n \"displayName-count-one\": \"Bahrainin dinaari\",\n \"displayName-count-other\": \"Bahrainin dinaaria\",\n symbol: \"BHD\"\n },\n BIF: {\n displayName: \"Burundin frangi\",\n \"displayName-count-one\": \"Burundin frangi\",\n \"displayName-count-other\": \"Burundin frangia\",\n symbol: \"BIF\"\n },\n BMD: {\n displayName: \"Bermudan dollari\",\n \"displayName-count-one\": \"Bermudan dollari\",\n \"displayName-count-other\": \"Bermudan dollaria\",\n symbol: \"BMD\",\n \"symbol-alt-narrow\": \"BMD\"\n },\n BND: {\n displayName: \"Brunein dollari\",\n \"displayName-count-one\": \"Brunein dollari\",\n \"displayName-count-other\": \"Brunein dollaria\",\n symbol: \"BND\",\n \"symbol-alt-narrow\": \"BND\"\n },\n BOB: {\n displayName: \"Bolivian boliviano\",\n \"displayName-count-one\": \"Bolivian boliviano\",\n \"displayName-count-other\": \"Bolivian bolivianoa\",\n symbol: \"BOB\",\n \"symbol-alt-narrow\": \"BOB\"\n },\n BOL: {\n displayName: \"Bolivian boliviano (1863–1963)\",\n \"displayName-count-one\": \"Bolivian boliviano (1863–1963)\",\n \"displayName-count-other\": \"Bolivian bolivianoa (1863–1963)\",\n symbol: \"BOL\"\n },\n BOP: {\n displayName: \"Bolivian peso\",\n \"displayName-count-one\": \"Bolivian peso\",\n \"displayName-count-other\": \"Bolivian pesoa\",\n symbol: \"BOP\"\n },\n BOV: {\n displayName: \"Bolivian mvdol\",\n \"displayName-count-one\": \"Bolivian mvdol\",\n \"displayName-count-other\": \"Bolivian mvdol’ia\",\n symbol: \"BOV\"\n },\n BRB: {\n displayName: \"Brasilian uusi cruzeiro (1967–1986)\",\n \"displayName-count-one\": \"Brasilian uusi cruzeiro (1967–1986)\",\n \"displayName-count-other\": \"Brasilian uutta cruzeiroa (1967–1986)\",\n symbol: \"BRB\"\n },\n BRC: {\n displayName: \"Brasilian cruzado (1986–1989)\",\n \"displayName-count-one\": \"Brasilian cruzado (1986–1989)\",\n \"displayName-count-other\": \"Brasilian cruzadoa (1986–1989)\",\n symbol: \"BRC\"\n },\n BRE: {\n displayName: \"Brasilian cruzeiro (1990–1993)\",\n \"displayName-count-one\": \"Brasilian cruzeiro (1990–1993)\",\n \"displayName-count-other\": \"Brasilian cruzeiroa (1990–1993)\",\n symbol: \"BRE\"\n },\n BRL: {\n displayName: \"Brasilian real\",\n \"displayName-count-one\": \"Brasilian real\",\n \"displayName-count-other\": \"Brasilian realia\",\n symbol: \"BRL\",\n \"symbol-alt-narrow\": \"BRL\"\n },\n BRN: {\n displayName: \"Brasilian uusi cruzado (1989–1990)\",\n \"displayName-count-one\": \"Brasilian uusi cruzado (1989–1990)\",\n \"displayName-count-other\": \"Brasilian uutta cruzadoa (1989–1990)\",\n symbol: \"BRN\"\n },\n BRR: {\n displayName: \"Brasilian cruzeiro (1993–1994)\",\n \"displayName-count-one\": \"Brasilian cruzeiro (1993–1994)\",\n \"displayName-count-other\": \"Brasilian cruzeiroa (1993–1994)\",\n symbol: \"BRR\"\n },\n BRZ: {\n displayName: \"Brasilian cruzeiro (1942–1967)\",\n \"displayName-count-one\": \"Brasilian cruzeiro (1942–1967)\",\n \"displayName-count-other\": \"Brasilian cruzeiroa (1942–1967)\",\n symbol: \"BRZ\"\n },\n BSD: {\n displayName: \"Bahaman dollari\",\n \"displayName-count-one\": \"Bahaman dollari\",\n \"displayName-count-other\": \"Bahaman dollaria\",\n symbol: \"BSD\",\n \"symbol-alt-narrow\": \"BSD\"\n },\n BTN: {\n displayName: \"Bhutanin ngultrum\",\n \"displayName-count-one\": \"Bhutanin ngultrum\",\n \"displayName-count-other\": \"Bhutanin ngultrumia\",\n symbol: \"BTN\"\n },\n BUK: {\n displayName: \"Burman kyat\",\n \"displayName-count-one\": \"Burman kyat\",\n \"displayName-count-other\": \"Burman kyatia\",\n symbol: \"BUK\"\n },\n BWP: {\n displayName: \"Botswanan pula\",\n \"displayName-count-one\": \"Botswanan pula\",\n \"displayName-count-other\": \"Botswanan pulaa\",\n symbol: \"BWP\",\n \"symbol-alt-narrow\": \"BWP\"\n },\n BYB: {\n displayName: \"Valko-Venäjän uusi rupla (1994–1999)\",\n \"displayName-count-one\": \"Valko-Venäjän uusi rupla (1994–1999)\",\n \"displayName-count-other\": \"Valko-Venäjän uutta ruplaa (1994–1999)\",\n symbol: \"BYB\"\n },\n BYN: {\n displayName: \"Valko-Venäjän rupla\",\n \"displayName-count-one\": \"Valko-Venäjän rupla\",\n \"displayName-count-other\": \"Valko-Venäjän ruplaa\",\n symbol: \"BYN\",\n \"symbol-alt-narrow\": \"BYN\"\n },\n BYR: {\n displayName: \"Valko-Venäjän rupla (2000–2016)\",\n \"displayName-count-one\": \"Valko-Venäjän rupla (2000–2016)\",\n \"displayName-count-other\": \"Valko-Venäjän ruplaa (2000–2016)\",\n symbol: \"BYR\"\n },\n BZD: {\n displayName: \"Belizen dollari\",\n \"displayName-count-one\": \"Belizen dollari\",\n \"displayName-count-other\": \"Belizen dollaria\",\n symbol: \"BZD\",\n \"symbol-alt-narrow\": \"BZD\"\n },\n CAD: {\n displayName: \"Kanadan dollari\",\n \"displayName-count-one\": \"Kanadan dollari\",\n \"displayName-count-other\": \"Kanadan dollaria\",\n symbol: \"CAD\",\n \"symbol-alt-narrow\": \"CAD\"\n },\n CDF: {\n displayName: \"Kongon frangi\",\n \"displayName-count-one\": \"Kongon frangi\",\n \"displayName-count-other\": \"Kongon frangia\",\n symbol: \"CDF\"\n },\n CHE: {\n displayName: \"Sveitsin WIR-euro\",\n \"displayName-count-one\": \"Sveitsin WIR-euro\",\n \"displayName-count-other\": \"Sveitsin WIR-euroa\",\n symbol: \"CHE\"\n },\n CHF: {\n displayName: \"Sveitsin frangi\",\n \"displayName-count-one\": \"Sveitsin frangi\",\n \"displayName-count-other\": \"Sveitsin frangia\",\n symbol: \"CHF\"\n },\n CHW: {\n displayName: \"Sveitsin WIR-frangi\",\n \"displayName-count-one\": \"Sveitsin WIR-frangi\",\n \"displayName-count-other\": \"Sveitsin WIR-frangia\",\n symbol: \"CHW\"\n },\n CLE: {\n displayName: \"Chilen escudo\",\n \"displayName-count-one\": \"Chilen escudo\",\n \"displayName-count-other\": \"Chilen escudoa\",\n symbol: \"CLE\"\n },\n CLF: {\n displayName: \"Chilen unidades de fomento\",\n \"displayName-count-one\": \"Chilen unidades de fomento\",\n \"displayName-count-other\": \"Chilen unidades de fomentoa\",\n symbol: \"CLF\"\n },\n CLP: {\n displayName: \"Chilen peso\",\n \"displayName-count-one\": \"Chilen peso\",\n \"displayName-count-other\": \"Chilen pesoa\",\n symbol: \"CLP\",\n \"symbol-alt-narrow\": \"CLP\"\n },\n CNH: {\n displayName: \"Kiinan juan (offshore)\",\n \"displayName-count-one\": \"Kiinan juan (offshore)\",\n \"displayName-count-other\": \"Kiinan juania (offshore)\",\n symbol: \"CNH\"\n },\n CNX: {\n displayName: \"Kiinan kansanpankin dollari\",\n \"displayName-count-one\": \"Kiinan kansanpankin dollari\",\n \"displayName-count-other\": \"Kiinan kansanpankin dollaria\",\n symbol: \"CNX\"\n },\n CNY: {\n displayName: \"Kiinan juan\",\n \"displayName-count-one\": \"Kiinan juan\",\n \"displayName-count-other\": \"Kiinan juania\",\n symbol: \"CNY\",\n \"symbol-alt-narrow\": \"CNY\"\n },\n COP: {\n displayName: \"Kolumbian peso\",\n \"displayName-count-one\": \"Kolumbian peso\",\n \"displayName-count-other\": \"Kolumbian pesoa\",\n symbol: \"COP\",\n \"symbol-alt-narrow\": \"COP\"\n },\n COU: {\n displayName: \"Kolumbian unidad de valor real\",\n \"displayName-count-one\": \"Kolumbian unidad de valor real\",\n \"displayName-count-other\": \"Kolumbian unidad de valor realia\",\n symbol: \"COU\"\n },\n CRC: {\n displayName: \"Costa Rican colón\",\n \"displayName-count-one\": \"Costa Rican colón\",\n \"displayName-count-other\": \"Costa Rican colónia\",\n symbol: \"CRC\",\n \"symbol-alt-narrow\": \"CRC\"\n },\n CSD: {\n displayName: \"Serbian dinaari (2002–2006)\",\n \"displayName-count-one\": \"Serbian dinaari (2002–2006)\",\n \"displayName-count-other\": \"Serbian dinaaria (2002–2006)\",\n symbol: \"CSD\"\n },\n CSK: {\n displayName: \"Tšekkoslovakian kova koruna\",\n \"displayName-count-one\": \"Tšekkoslovakian kova koruna\",\n \"displayName-count-other\": \"Tšekkoslovakian kovaa korunaa\",\n symbol: \"CSK\"\n },\n CUC: {\n displayName: \"Kuuban vaihdettava peso\",\n \"displayName-count-one\": \"Kuuban vaihdettava peso\",\n \"displayName-count-other\": \"Kuuban vaihdettavaa pesoa\",\n symbol: \"CUC\",\n \"symbol-alt-narrow\": \"CUC\"\n },\n CUP: {\n displayName: \"Kuuban peso\",\n \"displayName-count-one\": \"Kuuban peso\",\n \"displayName-count-other\": \"Kuuban pesoa\",\n symbol: \"CUP\",\n \"symbol-alt-narrow\": \"CUP\"\n },\n CVE: {\n displayName: \"Kap Verden escudo\",\n \"displayName-count-one\": \"Kap Verden escudo\",\n \"displayName-count-other\": \"Kap Verden escudoa\",\n symbol: \"CVE\"\n },\n CYP: {\n displayName: \"Kyproksen punta\",\n \"displayName-count-one\": \"Kyproksen punta\",\n \"displayName-count-other\": \"Kyproksen puntaa\",\n symbol: \"CYP\"\n },\n CZK: {\n displayName: \"Tšekin koruna\",\n \"displayName-count-one\": \"Tšekin koruna\",\n \"displayName-count-other\": \"Tšekin korunaa\",\n symbol: \"CZK\",\n \"symbol-alt-narrow\": \"CZK\"\n },\n DDM: {\n displayName: \"Itä-Saksan markka\",\n \"displayName-count-one\": \"Itä-Saksan markka\",\n \"displayName-count-other\": \"Itä-Saksan markkaa\",\n symbol: \"DDM\"\n },\n DEM: {\n displayName: \"Saksan markka\",\n \"displayName-count-one\": \"Saksan markka\",\n \"displayName-count-other\": \"Saksan markkaa\",\n symbol: \"DEM\"\n },\n DJF: {\n displayName: \"Djiboutin frangi\",\n \"displayName-count-one\": \"Djiboutin frangi\",\n \"displayName-count-other\": \"Djiboutin frangia\",\n symbol: \"DJF\"\n },\n DKK: {\n displayName: \"Tanskan kruunu\",\n \"displayName-count-one\": \"Tanskan kruunu\",\n \"displayName-count-other\": \"Tanskan kruunua\",\n symbol: \"DKK\",\n \"symbol-alt-narrow\": \"DKK\"\n },\n DOP: {\n displayName: \"Dominikaanisen tasavallan peso\",\n \"displayName-count-one\": \"Dominikaanisen tasavallan peso\",\n \"displayName-count-other\": \"Dominikaanisen tasavallan pesoa\",\n symbol: \"DOP\",\n \"symbol-alt-narrow\": \"DOP\"\n },\n DZD: {\n displayName: \"Algerian dinaari\",\n \"displayName-count-one\": \"Algerian dinaari\",\n \"displayName-count-other\": \"Algerian dinaaria\",\n symbol: \"DZD\"\n },\n ECS: {\n displayName: \"Ecuadorin sucre\",\n \"displayName-count-one\": \"Ecuadorin sucre\",\n \"displayName-count-other\": \"Ecuadorin sucrea\",\n symbol: \"ECS\"\n },\n ECV: {\n displayName: \"Ecuadorin UVC\",\n \"displayName-count-one\": \"Ecuadorin UVC\",\n \"displayName-count-other\": \"Ecuadorin UVC’ta\",\n symbol: \"ECV\"\n },\n EEK: {\n displayName: \"Viron kruunu\",\n \"displayName-count-one\": \"Viron kruunu\",\n \"displayName-count-other\": \"Viron kruunua\",\n symbol: \"EEK\"\n },\n EGP: {\n displayName: \"Egyptin punta\",\n \"displayName-count-one\": \"Egyptin punta\",\n \"displayName-count-other\": \"Egyptin puntaa\",\n symbol: \"EGP\",\n \"symbol-alt-narrow\": \"EGP\"\n },\n ERN: {\n displayName: \"Eritrean nakfa\",\n \"displayName-count-one\": \"Eritrean nakfa\",\n \"displayName-count-other\": \"Eritrean nakfaa\",\n symbol: \"ERN\"\n },\n ESA: {\n displayName: \"Espanjan peseta (A-tili)\",\n \"displayName-count-one\": \"Espanjan peseta (A-tili)\",\n \"displayName-count-other\": \"Espanjan pesetaa (A-tili)\",\n symbol: \"ESA\"\n },\n ESB: {\n displayName: \"Espanjan peseta (vaihdettava tili)\",\n \"displayName-count-one\": \"Espanjan peseta (vaihdettava tili)\",\n \"displayName-count-other\": \"Espanjan pesetaa (vaihdettava tili)\",\n symbol: \"ESB\"\n },\n ESP: {\n displayName: \"Espanjan peseta\",\n \"displayName-count-one\": \"Espanjan peseta\",\n \"displayName-count-other\": \"Espanjan pesetaa\",\n symbol: \"ESP\",\n \"symbol-alt-narrow\": \"ESP\"\n },\n ETB: {\n displayName: \"Etiopian birr\",\n \"displayName-count-one\": \"Etiopian birr\",\n \"displayName-count-other\": \"Etiopian birriä\",\n symbol: \"ETB\"\n },\n EUR: {\n displayName: \"euro\",\n \"displayName-count-one\": \"euro\",\n \"displayName-count-other\": \"euroa\",\n symbol: \"€\",\n \"symbol-alt-narrow\": \"€\"\n },\n FIM: {\n displayName: \"Suomen markka\",\n \"displayName-count-one\": \"Suomen markka\",\n \"displayName-count-other\": \"Suomen markkaa\",\n symbol: \"mk\"\n },\n FJD: {\n displayName: \"Fidžin dollari\",\n \"displayName-count-one\": \"Fidžin dollari\",\n \"displayName-count-other\": \"Fidžin dollaria\",\n symbol: \"FJD\",\n \"symbol-alt-narrow\": \"FJD\"\n },\n FKP: {\n displayName: \"Falklandinsaarten punta\",\n \"displayName-count-one\": \"Falklandinsaarten punta\",\n \"displayName-count-other\": \"Falklandinsaarten puntaa\",\n symbol: \"FKP\",\n \"symbol-alt-narrow\": \"FKP\"\n },\n FRF: {\n displayName: \"Ranskan frangi\",\n \"displayName-count-one\": \"Ranskan frangi\",\n \"displayName-count-other\": \"Ranskan frangia\",\n symbol: \"FRF\"\n },\n GBP: {\n displayName: \"Englannin punta\",\n \"displayName-count-one\": \"Englannin punta\",\n \"displayName-count-other\": \"Englannin puntaa\",\n symbol: \"£\",\n \"symbol-alt-narrow\": \"£\"\n },\n GEK: {\n displayName: \"Georgian kuponkilari\",\n \"displayName-count-one\": \"Georgian kuponkilari\",\n \"displayName-count-other\": \"Georgian kuponkilaria\",\n symbol: \"GEK\"\n },\n GEL: {\n displayName: \"Georgian lari\",\n \"displayName-count-one\": \"Georgian lari\",\n \"displayName-count-other\": \"Georgian laria\",\n symbol: \"GEL\",\n \"symbol-alt-narrow\": \"GEL\"\n },\n GHC: {\n displayName: \"Ghanan cedi (1979–2007)\",\n \"displayName-count-one\": \"Ghanan cedi (1979–2007)\",\n \"displayName-count-other\": \"Ghanan cediä (1979–2007)\",\n symbol: \"GHC\"\n },\n GHS: {\n displayName: \"Ghanan cedi\",\n \"displayName-count-one\": \"Ghanan cedi\",\n \"displayName-count-other\": \"Ghanan cediä\",\n symbol: \"GHS\",\n \"symbol-alt-narrow\": \"GH₵\"\n },\n GIP: {\n displayName: \"Gibraltarin punta\",\n \"displayName-count-one\": \"Gibraltarin punta\",\n \"displayName-count-other\": \"Gibraltarin puntaa\",\n symbol: \"GIP\",\n \"symbol-alt-narrow\": \"GIP\"\n },\n GMD: {\n displayName: \"Gambian dalasi\",\n \"displayName-count-one\": \"Gambian dalasi\",\n \"displayName-count-other\": \"Gambian dalasia\",\n symbol: \"GMD\"\n },\n GNF: {\n displayName: \"Guinean frangi\",\n \"displayName-count-one\": \"Guinean frangi\",\n \"displayName-count-other\": \"Guinean frangia\",\n symbol: \"GNF\",\n \"symbol-alt-narrow\": \"GNF\"\n },\n GNS: {\n displayName: \"Guinean syli\",\n \"displayName-count-one\": \"Guinean syli\",\n \"displayName-count-other\": \"Guinean syliä\",\n symbol: \"GNS\"\n },\n GQE: {\n displayName: \"Päiväntasaajan Guinean ekwele\",\n \"displayName-count-one\": \"Päiväntasaajan Guinean ekwele\",\n \"displayName-count-other\": \"Päiväntasaajan Guinean ekweleä\",\n symbol: \"GQE\"\n },\n GRD: {\n displayName: \"Kreikan drakma\",\n \"displayName-count-one\": \"Kreikan drakma\",\n \"displayName-count-other\": \"Kreikan drakmaa\",\n symbol: \"GRD\"\n },\n GTQ: {\n displayName: \"Guatemalan quetzal\",\n \"displayName-count-one\": \"Guatemalan quetzal\",\n \"displayName-count-other\": \"Guatemalan quetzalia\",\n symbol: \"GTQ\",\n \"symbol-alt-narrow\": \"GTQ\"\n },\n GWE: {\n displayName: \"Portugalin Guinean escudo\",\n \"displayName-count-one\": \"Portugalin Guinean escudo\",\n \"displayName-count-other\": \"Portugalin Guinean escudoa\",\n symbol: \"GWE\"\n },\n GWP: {\n displayName: \"Guinea-Bissaun peso\",\n \"displayName-count-one\": \"Guinea-Bissaun peso\",\n \"displayName-count-other\": \"Guinea-Bissaun pesoa\",\n symbol: \"GWP\"\n },\n GYD: {\n displayName: \"Guyanan dollari\",\n \"displayName-count-one\": \"Guyanan dollari\",\n \"displayName-count-other\": \"Guyanan dollaria\",\n symbol: \"GYD\",\n \"symbol-alt-narrow\": \"GYD\"\n },\n HKD: {\n displayName: \"Hongkongin dollari\",\n \"displayName-count-one\": \"Hongkongin dollari\",\n \"displayName-count-other\": \"Hongkongin dollaria\",\n symbol: \"HKD\",\n \"symbol-alt-narrow\": \"HKD\"\n },\n HNL: {\n displayName: \"Hondurasin lempira\",\n \"displayName-count-one\": \"Hondurasin lempira\",\n \"displayName-count-other\": \"Hondurasin lempiraa\",\n symbol: \"HNL\",\n \"symbol-alt-narrow\": \"HNL\"\n },\n HRD: {\n displayName: \"Kroatian dinaari\",\n \"displayName-count-one\": \"Kroatian dinaari\",\n \"displayName-count-other\": \"Kroatian dinaaria\",\n symbol: \"HRD\"\n },\n HRK: {\n displayName: \"Kroatian kuna\",\n \"displayName-count-one\": \"Kroatian kuna\",\n \"displayName-count-other\": \"Kroatian kunaa\",\n symbol: \"HRK\",\n \"symbol-alt-narrow\": \"HRK\"\n },\n HTG: {\n displayName: \"Haitin gourde\",\n \"displayName-count-one\": \"Haitin gourde\",\n \"displayName-count-other\": \"Haitin gourdea\",\n symbol: \"HTG\"\n },\n HUF: {\n displayName: \"Unkarin forintti\",\n \"displayName-count-one\": \"Unkarin forintti\",\n \"displayName-count-other\": \"Unkarin forinttia\",\n symbol: \"HUF\",\n \"symbol-alt-narrow\": \"HUF\"\n },\n IDR: {\n displayName: \"Indonesian rupia\",\n \"displayName-count-one\": \"Indonesian rupia\",\n \"displayName-count-other\": \"Indonesian rupiaa\",\n symbol: \"IDR\",\n \"symbol-alt-narrow\": \"IDR\"\n },\n IEP: {\n displayName: \"Irlannin punta\",\n \"displayName-count-one\": \"Irlannin punta\",\n \"displayName-count-other\": \"Irlannin puntaa\",\n symbol: \"IEP\"\n },\n ILP: {\n displayName: \"Israelin punta\",\n \"displayName-count-one\": \"Israelin punta\",\n \"displayName-count-other\": \"Israelin puntaa\",\n symbol: \"ILP\"\n },\n ILR: {\n displayName: \"Israelin sekeli (1980–1985)\",\n \"displayName-count-one\": \"Israelin sekeli (1980–1985)\",\n \"displayName-count-other\": \"Israelin sekeliä (1980–1985)\",\n symbol: \"ILR\"\n },\n ILS: {\n displayName: \"Israelin uusi sekeli\",\n \"displayName-count-one\": \"Israelin uusi sekeli\",\n \"displayName-count-other\": \"Israelin uutta sekeliä\",\n symbol: \"ILS\",\n \"symbol-alt-narrow\": \"ILS\"\n },\n INR: {\n displayName: \"Intian rupia\",\n \"displayName-count-one\": \"Intian rupia\",\n \"displayName-count-other\": \"Intian rupiaa\",\n symbol: \"INR\",\n \"symbol-alt-narrow\": \"INR\"\n },\n IQD: {\n displayName: \"Irakin dinaari\",\n \"displayName-count-one\": \"Irakin dinaari\",\n \"displayName-count-other\": \"Irakin dinaaria\",\n symbol: \"IQD\"\n },\n IRR: {\n displayName: \"Iranin rial\",\n \"displayName-count-one\": \"Iranin rial\",\n \"displayName-count-other\": \"Iranin rialia\",\n symbol: \"IRR\"\n },\n ISJ: {\n displayName: \"Islannin kruunu (1918–1981)\",\n \"displayName-count-one\": \"Islannin kruunu (1918–1981)\",\n \"displayName-count-other\": \"Islannin kruunua (1918–1981)\",\n symbol: \"ISJ\"\n },\n ISK: {\n displayName: \"Islannin kruunu\",\n \"displayName-count-one\": \"Islannin kruunu\",\n \"displayName-count-other\": \"Islannin kruunua\",\n symbol: \"ISK\",\n \"symbol-alt-narrow\": \"ISK\"\n },\n ITL: {\n displayName: \"Italian liira\",\n \"displayName-count-one\": \"Italian liira\",\n \"displayName-count-other\": \"Italian liiraa\",\n symbol: \"ITL\"\n },\n JMD: {\n displayName: \"Jamaikan dollari\",\n \"displayName-count-one\": \"Jamaikan dollari\",\n \"displayName-count-other\": \"Jamaikan dollaria\",\n symbol: \"JMD\",\n \"symbol-alt-narrow\": \"JMD\"\n },\n JOD: {\n displayName: \"Jordanian dinaari\",\n \"displayName-count-one\": \"Jordanian dinaari\",\n \"displayName-count-other\": \"Jordanian dinaaria\",\n symbol: \"JOD\"\n },\n JPY: {\n displayName: \"Japanin jeni\",\n \"displayName-count-one\": \"Japanin jeni\",\n \"displayName-count-other\": \"Japanin jeniä\",\n symbol: \"¥\",\n \"symbol-alt-narrow\": \"¥\"\n },\n KES: {\n displayName: \"Kenian šillinki\",\n \"displayName-count-one\": \"Kenian šillinki\",\n \"displayName-count-other\": \"Kenian šillinkiä\",\n symbol: \"KES\"\n },\n KGS: {\n displayName: \"Kirgisian som\",\n \"displayName-count-one\": \"Kirgisian som\",\n \"displayName-count-other\": \"Kirgisian somia\",\n symbol: \"KGS\"\n },\n KHR: {\n displayName: \"Kambodžan riel\",\n \"displayName-count-one\": \"Kambodžan riel\",\n \"displayName-count-other\": \"Kambodžan rieliä\",\n symbol: \"KHR\",\n \"symbol-alt-narrow\": \"KHR\"\n },\n KMF: {\n displayName: \"Komorien frangi\",\n \"displayName-count-one\": \"Komorien frangi\",\n \"displayName-count-other\": \"Komorien frangia\",\n symbol: \"KMF\",\n \"symbol-alt-narrow\": \"KMF\"\n },\n KPW: {\n displayName: \"Pohjois-Korean won\",\n \"displayName-count-one\": \"Pohjois-Korean won\",\n \"displayName-count-other\": \"Pohjois-Korean wonia\",\n symbol: \"KPW\",\n \"symbol-alt-narrow\": \"KPW\"\n },\n KRH: {\n displayName: \"Etelä-Korean hwan (1953–1962)\",\n \"displayName-count-one\": \"Etelä-Korean hwan (1953–1962)\",\n \"displayName-count-other\": \"Etelä-Korean hwania (1953–1962)\",\n symbol: \"KRH\"\n },\n KRO: {\n displayName: \"Etelä-Korean won (1945–1953)\",\n \"displayName-count-one\": \"Etelä-Korean won (1945–1953)\",\n \"displayName-count-other\": \"Etelä-Korean wonia (1945–1953)\",\n symbol: \"KRO\"\n },\n KRW: {\n displayName: \"Etelä-Korean won\",\n \"displayName-count-one\": \"Etelä-Korean won\",\n \"displayName-count-other\": \"Etelä-Korean wonia\",\n symbol: \"KRW\",\n \"symbol-alt-narrow\": \"KRW\"\n },\n KWD: {\n displayName: \"Kuwaitin dinaari\",\n \"displayName-count-one\": \"Kuwaitin dinaari\",\n \"displayName-count-other\": \"Kuwaitin dinaaria\",\n symbol: \"KWD\"\n },\n KYD: {\n displayName: \"Caymansaarten dollari\",\n \"displayName-count-one\": \"Caymansaarten dollari\",\n \"displayName-count-other\": \"Caymansaarten dollaria\",\n symbol: \"KYD\",\n \"symbol-alt-narrow\": \"KYD\"\n },\n KZT: {\n displayName: \"Kazakstanin tenge\",\n \"displayName-count-one\": \"Kazakstanin tenge\",\n \"displayName-count-other\": \"Kazakstanin tengeä\",\n symbol: \"KZT\",\n \"symbol-alt-narrow\": \"KZT\"\n },\n LAK: {\n displayName: \"Laosin kip\",\n \"displayName-count-one\": \"Laosin kip\",\n \"displayName-count-other\": \"Laosin kipiä\",\n symbol: \"LAK\",\n \"symbol-alt-narrow\": \"LAK\"\n },\n LBP: {\n displayName: \"Libanonin punta\",\n \"displayName-count-one\": \"Libanonin punta\",\n \"displayName-count-other\": \"Libanonin puntaa\",\n symbol: \"LBP\",\n \"symbol-alt-narrow\": \"LBP\"\n },\n LKR: {\n displayName: \"Sri Lankan rupia\",\n \"displayName-count-one\": \"Sri Lankan rupia\",\n \"displayName-count-other\": \"Sri Lankan rupiaa\",\n symbol: \"LKR\",\n \"symbol-alt-narrow\": \"LKR\"\n },\n LRD: {\n displayName: \"Liberian dollari\",\n \"displayName-count-one\": \"Liberian dollari\",\n \"displayName-count-other\": \"Liberian dollaria\",\n symbol: \"LRD\",\n \"symbol-alt-narrow\": \"LRD\"\n },\n LSL: {\n displayName: \"Lesothon loti\",\n \"displayName-count-one\": \"Lesothon loti\",\n \"displayName-count-other\": \"Lesothon lotia\",\n symbol: \"LSL\"\n },\n LTL: {\n displayName: \"Liettuan liti\",\n \"displayName-count-one\": \"Liettuan liti\",\n \"displayName-count-other\": \"Liettuan litiä\",\n symbol: \"LTL\",\n \"symbol-alt-narrow\": \"LTL\"\n },\n LTT: {\n displayName: \"Liettuan talonas\",\n \"displayName-count-one\": \"Liettuan talonas\",\n \"displayName-count-other\": \"Liettuan talonasia\",\n symbol: \"LTT\"\n },\n LUC: {\n displayName: \"Luxemburgin vaihdettava frangi\",\n \"displayName-count-one\": \"Luxemburgin vaihdettava frangi\",\n \"displayName-count-other\": \"Luxemburgin vaihdettavaa frangia\",\n symbol: \"LUC\"\n },\n LUF: {\n displayName: \"Luxemburgin frangi\",\n \"displayName-count-one\": \"Luxemburgin frangi\",\n \"displayName-count-other\": \"Luxemburgin frangia\",\n symbol: \"LUF\"\n },\n LUL: {\n displayName: \"Luxemburgin rahoitusfrangi\",\n \"displayName-count-one\": \"Luxemburgin rahoitusfrangi\",\n \"displayName-count-other\": \"Luxemburgin rahoitusfrangia\",\n symbol: \"LUL\"\n },\n LVL: {\n displayName: \"Latvian lati\",\n \"displayName-count-one\": \"Latvian lati\",\n \"displayName-count-other\": \"Latvian latia\",\n symbol: \"LVL\",\n \"symbol-alt-narrow\": \"LVL\"\n },\n LVR: {\n displayName: \"Latvian rupla\",\n \"displayName-count-one\": \"Latvian rupla\",\n \"displayName-count-other\": \"Latvian ruplaa\",\n symbol: \"LVR\"\n },\n LYD: {\n displayName: \"Libyan dinaari\",\n \"displayName-count-one\": \"Libyan dinaari\",\n \"displayName-count-other\": \"Libyan dinaaria\",\n symbol: \"LYD\"\n },\n MAD: {\n displayName: \"Marokon dirhami\",\n \"displayName-count-one\": \"Marokon dirhami\",\n \"displayName-count-other\": \"Marokon dirhamia\",\n symbol: \"MAD\"\n },\n MAF: {\n displayName: \"Marokon frangi\",\n \"displayName-count-one\": \"Marokon frangi\",\n \"displayName-count-other\": \"Marokon frangia\",\n symbol: \"MAF\"\n },\n MCF: {\n displayName: \"Monacon frangi\",\n \"displayName-count-one\": \"Monacon frangi\",\n \"displayName-count-other\": \"Monacon frangia\",\n symbol: \"MCF\"\n },\n MDC: {\n displayName: \"Moldovan kuponkileu\",\n \"displayName-count-one\": \"Moldovan kuponkileu\",\n \"displayName-count-other\": \"Moldovan kuponkileuta\",\n symbol: \"MDC\"\n },\n MDL: {\n displayName: \"Moldovan leu\",\n \"displayName-count-one\": \"Moldovan leu\",\n \"displayName-count-other\": \"Moldovan leuta\",\n symbol: \"MDL\"\n },\n MGA: {\n displayName: \"Madagaskarin ariary\",\n \"displayName-count-one\": \"Madagaskarin ariary\",\n \"displayName-count-other\": \"Madagaskarin ariarya\",\n symbol: \"MGA\",\n \"symbol-alt-narrow\": \"MGA\"\n },\n MGF: {\n displayName: \"Madagaskarin frangi\",\n \"displayName-count-one\": \"Madagaskarin frangi\",\n \"displayName-count-other\": \"Madagaskarin frangia\",\n symbol: \"MGF\"\n },\n MKD: {\n displayName: \"Makedonian denaari\",\n \"displayName-count-one\": \"Makedonian denaari\",\n \"displayName-count-other\": \"Makedonian denaaria\",\n symbol: \"MKD\"\n },\n MKN: {\n displayName: \"Makedonian dinaari (1992–1993)\",\n \"displayName-count-one\": \"Makedonian dinaari (1992–1993)\",\n \"displayName-count-other\": \"Makedonian dinaaria (1992–1993)\",\n symbol: \"MKN\"\n },\n MLF: {\n displayName: \"Malin frangi\",\n \"displayName-count-one\": \"Malin frangi\",\n \"displayName-count-other\": \"Malin frangia\",\n symbol: \"MLF\"\n },\n MMK: {\n displayName: \"Myanmarin kyat\",\n \"displayName-count-one\": \"Myanmarin kyat\",\n \"displayName-count-other\": \"Myanmarin kyatia\",\n symbol: \"MMK\",\n \"symbol-alt-narrow\": \"MMK\"\n },\n MNT: {\n displayName: \"Mongolian tugrik\",\n \"displayName-count-one\": \"Mongolian tugrik\",\n \"displayName-count-other\": \"Mongolian tugrikia\",\n symbol: \"MNT\",\n \"symbol-alt-narrow\": \"MNT\"\n },\n MOP: {\n displayName: \"Macaon pataca\",\n \"displayName-count-one\": \"Macaon pataca\",\n \"displayName-count-other\": \"Macaon patacaa\",\n symbol: \"MOP\"\n },\n MRO: {\n displayName: \"Mauritanian ouguiya (1973–2017)\",\n \"displayName-count-one\": \"Mauritanian ouguiya (1973–2017)\",\n \"displayName-count-other\": \"Mauritanian ouguiyaa (1973–2017)\",\n symbol: \"MRO\"\n },\n MRU: {\n displayName: \"Mauritanian ouguiya\",\n \"displayName-count-one\": \"Mauritanian ouguiya\",\n \"displayName-count-other\": \"Mauritanian ouguiyaa\",\n symbol: \"MRU\"\n },\n MTL: {\n displayName: \"Maltan liira\",\n \"displayName-count-one\": \"Maltan liira\",\n \"displayName-count-other\": \"Maltan liiraa\",\n symbol: \"MTL\"\n },\n MTP: {\n displayName: \"Maltan punta\",\n \"displayName-count-one\": \"Maltan punta\",\n \"displayName-count-other\": \"Maltan puntaa\",\n symbol: \"MTP\"\n },\n MUR: {\n displayName: \"Mauritiuksen rupia\",\n \"displayName-count-one\": \"Mauritiuksen rupia\",\n \"displayName-count-other\": \"Mauritiuksen rupiaa\",\n symbol: \"MUR\",\n \"symbol-alt-narrow\": \"MUR\"\n },\n MVP: {\n displayName: \"Malediivien rupia (1947–1981)\",\n \"displayName-count-one\": \"Malediivien rupia (1947–1981)\",\n \"displayName-count-other\": \"Malediivien rupiaa (1947–1981)\",\n symbol: \"MVP\"\n },\n MVR: {\n displayName: \"Malediivien rufiyaa\",\n \"displayName-count-one\": \"Malediivien rufiyaa\",\n \"displayName-count-other\": \"Malediivien rufiyaata\",\n symbol: \"MVR\"\n },\n MWK: {\n displayName: \"Malawin kwacha\",\n \"displayName-count-one\": \"Malawin kwacha\",\n \"displayName-count-other\": \"Malawin kwachaa\",\n symbol: \"MWK\"\n },\n MXN: {\n displayName: \"Meksikon peso\",\n \"displayName-count-one\": \"Meksikon peso\",\n \"displayName-count-other\": \"Meksikon pesoa\",\n symbol: \"MXN\",\n \"symbol-alt-narrow\": \"MXN\"\n },\n MXP: {\n displayName: \"Meksikon hopeapeso (1861–1992)\",\n \"displayName-count-one\": \"Meksikon hopeapeso (1861–1992)\",\n \"displayName-count-other\": \"Meksikon hopeapesoa (1861–1992)\",\n symbol: \"MXP\"\n },\n MXV: {\n displayName: \"Meksikon UDI\",\n \"displayName-count-one\": \"Meksikon UDI\",\n \"displayName-count-other\": \"Meksikon UDI’ta\",\n symbol: \"MXV\"\n },\n MYR: {\n displayName: \"Malesian ringgit\",\n \"displayName-count-one\": \"Malesian ringgit\",\n \"displayName-count-other\": \"Malesian ringgitiä\",\n symbol: \"MYR\",\n \"symbol-alt-narrow\": \"MYR\"\n },\n MZE: {\n displayName: \"Mosambikin escudo\",\n \"displayName-count-one\": \"Mosambikin escudo\",\n \"displayName-count-other\": \"Mosambikin escudoa\",\n symbol: \"MZE\"\n },\n MZM: {\n displayName: \"Mosambikin metical (1980–2006)\",\n \"displayName-count-one\": \"Mosambikin metical (1980–2006)\",\n \"displayName-count-other\": \"Mosambikin meticalia (1980–2006)\",\n symbol: \"MZM\"\n },\n MZN: {\n displayName: \"Mosambikin metical\",\n \"displayName-count-one\": \"Mosambikin metical\",\n \"displayName-count-other\": \"Mosambikin meticalia\",\n symbol: \"MZN\"\n },\n NAD: {\n displayName: \"Namibian dollari\",\n \"displayName-count-one\": \"Namibian dollari\",\n \"displayName-count-other\": \"Namibian dollaria\",\n symbol: \"NAD\",\n \"symbol-alt-narrow\": \"NAD\"\n },\n NGN: {\n displayName: \"Nigerian naira\",\n \"displayName-count-one\": \"Nigerian naira\",\n \"displayName-count-other\": \"Nigerian nairaa\",\n symbol: \"NGN\",\n \"symbol-alt-narrow\": \"NGN\"\n },\n NIC: {\n displayName: \"Nicaraguan córdoba (1988–1991)\",\n \"displayName-count-one\": \"Nicaraguan córdoba (1988–1991)\",\n \"displayName-count-other\": \"Nicaraguan córdobaa (1988–1991)\",\n symbol: \"NIC\"\n },\n NIO: {\n displayName: \"Nicaraguan córdoba\",\n \"displayName-count-one\": \"Nicaraguan córdoba\",\n \"displayName-count-other\": \"Nicaraguan córdobaa\",\n symbol: \"NIO\",\n \"symbol-alt-narrow\": \"NIO\"\n },\n NLG: {\n displayName: \"Alankomaiden guldeni\",\n \"displayName-count-one\": \"Alankomaiden guldeni\",\n \"displayName-count-other\": \"Alankomaiden guldenia\",\n symbol: \"NLG\"\n },\n NOK: {\n displayName: \"Norjan kruunu\",\n \"displayName-count-one\": \"Norjan kruunu\",\n \"displayName-count-other\": \"Norjan kruunua\",\n symbol: \"NOK\",\n \"symbol-alt-narrow\": \"NOK\"\n },\n NPR: {\n displayName: \"Nepalin rupia\",\n \"displayName-count-one\": \"Nepalin rupia\",\n \"displayName-count-other\": \"Nepalin rupiaa\",\n symbol: \"NPR\",\n \"symbol-alt-narrow\": \"NPR\"\n },\n NZD: {\n displayName: \"Uuden-Seelannin dollari\",\n \"displayName-count-one\": \"Uuden-Seelannin dollari\",\n \"displayName-count-other\": \"Uuden-Seelannin dollaria\",\n symbol: \"NZD\",\n \"symbol-alt-narrow\": \"NZD\"\n },\n OMR: {\n displayName: \"Omanin rial\",\n \"displayName-count-one\": \"Omanin rial\",\n \"displayName-count-other\": \"Omanin rialia\",\n symbol: \"OMR\"\n },\n PAB: {\n displayName: \"Panaman balboa\",\n \"displayName-count-one\": \"Panaman balboa\",\n \"displayName-count-other\": \"Panaman balboaa\",\n symbol: \"PAB\"\n },\n PEI: {\n displayName: \"Perun inti\",\n \"displayName-count-one\": \"Perun inti\",\n \"displayName-count-other\": \"Perun intiä\",\n symbol: \"PEI\"\n },\n PEN: {\n displayName: \"Perun sol\",\n \"displayName-count-one\": \"Perun sol\",\n \"displayName-count-other\": \"Perun solia\",\n symbol: \"PEN\"\n },\n PES: {\n displayName: \"Perun sol (1863–1965)\",\n \"displayName-count-one\": \"Perun sol (1863–1965)\",\n \"displayName-count-other\": \"Perun solia (1863–1965)\",\n symbol: \"PES\"\n },\n PGK: {\n displayName: \"Papua-Uuden-Guinean kina\",\n \"displayName-count-one\": \"Papua-Uuden-Guinean kina\",\n \"displayName-count-other\": \"Papua-Uuden-Guinean kinaa\",\n symbol: \"PGK\"\n },\n PHP: {\n displayName: \"Filippiinien peso\",\n \"displayName-count-one\": \"Filippiinien peso\",\n \"displayName-count-other\": \"Filippiinien pesoa\",\n symbol: \"PHP\",\n \"symbol-alt-narrow\": \"PHP\"\n },\n PKR: {\n displayName: \"Pakistanin rupia\",\n \"displayName-count-one\": \"Pakistanin rupia\",\n \"displayName-count-other\": \"Pakistanin rupiaa\",\n symbol: \"PKR\",\n \"symbol-alt-narrow\": \"PKR\"\n },\n PLN: {\n displayName: \"Puolan złoty\",\n \"displayName-count-one\": \"Puolan złoty\",\n \"displayName-count-other\": \"Puolan złotya\",\n symbol: \"PLN\",\n \"symbol-alt-narrow\": \"PLN\"\n },\n PLZ: {\n displayName: \"Puolan złoty (1950–1995)\",\n \"displayName-count-one\": \"Puolan złoty (1950–1995)\",\n \"displayName-count-other\": \"Puolan złotya (1950–1995)\",\n symbol: \"PLZ\"\n },\n PTE: {\n displayName: \"Portugalin escudo\",\n \"displayName-count-one\": \"Portugalin escudo\",\n \"displayName-count-other\": \"Portugalin escudoa\",\n symbol: \"PTE\"\n },\n PYG: {\n displayName: \"Paraguayn guarani\",\n \"displayName-count-one\": \"Paraguayn guarani\",\n \"displayName-count-other\": \"Paraguayn guarania\",\n symbol: \"PYG\",\n \"symbol-alt-narrow\": \"PYG\"\n },\n QAR: {\n displayName: \"Qatarin rial\",\n \"displayName-count-one\": \"Qatarin rial\",\n \"displayName-count-other\": \"Qatarin rialia\",\n symbol: \"QAR\"\n },\n RHD: {\n displayName: \"Rhodesian dollari\",\n \"displayName-count-one\": \"Rhodesian dollari\",\n \"displayName-count-other\": \"Rhodesian dollaria\",\n symbol: \"RHD\"\n },\n ROL: {\n displayName: \"Romanian leu (1952–2006)\",\n \"displayName-count-one\": \"Romanian leu (1952–2006)\",\n \"displayName-count-other\": \"Romanian leuta (1952–2006)\",\n symbol: \"ROL\"\n },\n RON: {\n displayName: \"Romanian leu\",\n \"displayName-count-one\": \"Romanian leu\",\n \"displayName-count-other\": \"Romanian leuta\",\n symbol: \"RON\",\n \"symbol-alt-narrow\": \"RON\"\n },\n RSD: {\n displayName: \"Serbian dinaari\",\n \"displayName-count-one\": \"Serbian dinaari\",\n \"displayName-count-other\": \"Serbian dinaaria\",\n symbol: \"RSD\"\n },\n RUB: {\n displayName: \"Venäjän rupla\",\n \"displayName-count-one\": \"Venäjän rupla\",\n \"displayName-count-other\": \"Venäjän ruplaa\",\n symbol: \"RUB\",\n \"symbol-alt-narrow\": \"₽\"\n },\n RUR: {\n displayName: \"Venäjän rupla (1991–1998)\",\n \"displayName-count-one\": \"Venäjän rupla (1991–1998)\",\n \"displayName-count-other\": \"Venäjän ruplaa (1991–1998)\",\n symbol: \"RUR\"\n },\n RWF: {\n displayName: \"Ruandan frangi\",\n \"displayName-count-one\": \"Ruandan frangi\",\n \"displayName-count-other\": \"Ruandan frangia\",\n symbol: \"RWF\",\n \"symbol-alt-narrow\": \"RWF\"\n },\n SAR: {\n displayName: \"Saudi-Arabian rial\",\n \"displayName-count-one\": \"Saudi-Arabian rial\",\n \"displayName-count-other\": \"Saudi-Arabian rialia\",\n symbol: \"SAR\"\n },\n SBD: {\n displayName: \"Salomonsaarten dollari\",\n \"displayName-count-one\": \"Salomonsaarten dollari\",\n \"displayName-count-other\": \"Salomonsaarten dollaria\",\n symbol: \"SBD\",\n \"symbol-alt-narrow\": \"SBD\"\n },\n SCR: {\n displayName: \"Seychellien rupia\",\n \"displayName-count-one\": \"Seychellien rupia\",\n \"displayName-count-other\": \"Seychellien rupiaa\",\n symbol: \"SCR\"\n },\n SDD: {\n displayName: \"Sudanin dinaari (1992–2007)\",\n \"displayName-count-one\": \"Sudanin dinaari (1992–2007)\",\n \"displayName-count-other\": \"Sudanin dinaaria (1992–2007)\",\n symbol: \"SDD\"\n },\n SDG: {\n displayName: \"Sudanin punta\",\n \"displayName-count-one\": \"Sudanin punta\",\n \"displayName-count-other\": \"Sudanin puntaa\",\n symbol: \"SDG\"\n },\n SDP: {\n displayName: \"Sudanin punta (1957–1998)\",\n \"displayName-count-one\": \"Sudanin punta (1957–1998)\",\n \"displayName-count-other\": \"Sudanin puntaa (1957–1998)\",\n symbol: \"SDP\"\n },\n SEK: {\n displayName: \"Ruotsin kruunu\",\n \"displayName-count-one\": \"Ruotsin kruunu\",\n \"displayName-count-other\": \"Ruotsin kruunua\",\n symbol: \"SEK\",\n \"symbol-alt-narrow\": \"SEK\"\n },\n SGD: {\n displayName: \"Singaporen dollari\",\n \"displayName-count-one\": \"Singaporen dollari\",\n \"displayName-count-other\": \"Singaporen dollaria\",\n symbol: \"SGD\",\n \"symbol-alt-narrow\": \"SGD\"\n },\n SHP: {\n displayName: \"Saint Helenan punta\",\n \"displayName-count-one\": \"Saint Helenan punta\",\n \"displayName-count-other\": \"Saint Helenan puntaa\",\n symbol: \"SHP\",\n \"symbol-alt-narrow\": \"SHP\"\n },\n SIT: {\n displayName: \"Slovenian tolar\",\n \"displayName-count-one\": \"Slovenian tolar\",\n \"displayName-count-other\": \"Slovenian tolaria\",\n symbol: \"SIT\"\n },\n SKK: {\n displayName: \"Slovakian koruna\",\n \"displayName-count-one\": \"Slovakian koruna\",\n \"displayName-count-other\": \"Slovakian korunaa\",\n symbol: \"SKK\"\n },\n SLE: {\n displayName: \"SLE\",\n symbol: \"SLE\"\n },\n SLL: {\n displayName: \"Sierra Leonen leone\",\n \"displayName-count-one\": \"Sierra Leonen leone\",\n \"displayName-count-other\": \"Sierra Leonen leonea\",\n symbol: \"SLL\"\n },\n SOS: {\n displayName: \"Somalian šillinki\",\n \"displayName-count-one\": \"Somalian šillinki\",\n \"displayName-count-other\": \"Somalian šillinkiä\",\n symbol: \"SOS\"\n },\n SRD: {\n displayName: \"Surinamen dollari\",\n \"displayName-count-one\": \"Surinamen dollari\",\n \"displayName-count-other\": \"Surinamen dollaria\",\n symbol: \"SRD\",\n \"symbol-alt-narrow\": \"SRD\"\n },\n SRG: {\n displayName: \"Surinamen guldeni\",\n \"displayName-count-one\": \"Surinamen guldeni\",\n \"displayName-count-other\": \"Surinamen guldeni\",\n symbol: \"SRG\"\n },\n SSP: {\n displayName: \"Etelä-Sudanin punta\",\n \"displayName-count-one\": \"Etelä-Sudanin punta\",\n \"displayName-count-other\": \"Etelä-Sudanin puntaa\",\n symbol: \"SSP\",\n \"symbol-alt-narrow\": \"SSP\"\n },\n STD: {\n displayName: \"São Tomén ja Príncipen dobra (1977–2017)\",\n \"displayName-count-one\": \"São Tomén ja Príncipen dobra (1977–2017)\",\n \"displayName-count-other\": \"São Tomén ja Príncipen dobraa (1977–2017)\",\n symbol: \"STD\"\n },\n STN: {\n displayName: \"São Tomén ja Príncipen dobra\",\n \"displayName-count-one\": \"São Tomén ja Príncipen dobra\",\n \"displayName-count-other\": \"São Tomén ja Príncipen dobraa\",\n symbol: \"STN\",\n \"symbol-alt-narrow\": \"STD\"\n },\n SUR: {\n displayName: \"Neuvostoliiton rupla\",\n \"displayName-count-one\": \"Neuvostoliiton rupla\",\n \"displayName-count-other\": \"Neuvostoliiton ruplaa\",\n symbol: \"SUR\"\n },\n SVC: {\n displayName: \"El Salvadorin colón\",\n \"displayName-count-one\": \"El Salvadorin colón\",\n \"displayName-count-other\": \"El Salvadorin colónia\",\n symbol: \"SVC\"\n },\n SYP: {\n displayName: \"Syyrian punta\",\n \"displayName-count-one\": \"Syyrian punta\",\n \"displayName-count-other\": \"Syyrian puntaa\",\n symbol: \"SYP\",\n \"symbol-alt-narrow\": \"SYP\"\n },\n SZL: {\n displayName: \"Swazimaan lilangeni\",\n \"displayName-count-one\": \"Swazimaan lilangeni\",\n \"displayName-count-other\": \"Swazimaan lilangenia\",\n symbol: \"SZL\"\n },\n THB: {\n displayName: \"Thaimaan baht\",\n \"displayName-count-one\": \"Thaimaan baht\",\n \"displayName-count-other\": \"Thaimaan bahtia\",\n symbol: \"THB\",\n \"symbol-alt-narrow\": \"THB\"\n },\n TJR: {\n displayName: \"Tadžikistanin rupla\",\n \"displayName-count-one\": \"Tadžikistanin rupla\",\n \"displayName-count-other\": \"Tadžikistanin ruplaa\",\n symbol: \"TJR\"\n },\n TJS: {\n displayName: \"Tadžikistanin somoni\",\n \"displayName-count-one\": \"Tadžikistanin somoni\",\n \"displayName-count-other\": \"Tadžikistanin somonia\",\n symbol: \"TJS\"\n },\n TMM: {\n displayName: \"Turkmenistanin manat (1993–2009)\",\n \"displayName-count-one\": \"Turkmenistanin manat (1993–2009)\",\n \"displayName-count-other\": \"Turkmenistanin manatia (1993–2009)\",\n symbol: \"TMM\"\n },\n TMT: {\n displayName: \"Turkmenistanin manat\",\n \"displayName-count-one\": \"Turkmenistanin manat\",\n \"displayName-count-other\": \"Turkmenistanin manatia\",\n symbol: \"TMT\"\n },\n TND: {\n displayName: \"Tunisian dinaari\",\n \"displayName-count-one\": \"Tunisian dinaari\",\n \"displayName-count-other\": \"Tunisian dinaaria\",\n symbol: \"TND\"\n },\n TOP: {\n displayName: \"Tongan pa’anga\",\n \"displayName-count-one\": \"Tongan pa’anga\",\n \"displayName-count-other\": \"Tongan pa’angaa\",\n symbol: \"TOP\",\n \"symbol-alt-narrow\": \"TOP\"\n },\n TPE: {\n displayName: \"Timorin escudo\",\n \"displayName-count-one\": \"Timorin escudo\",\n \"displayName-count-other\": \"Timorin escudoa\",\n symbol: \"TPE\"\n },\n TRL: {\n displayName: \"Turkin liira (1922–2005)\",\n \"displayName-count-one\": \"Turkin liira (1922–2005)\",\n \"displayName-count-other\": \"Turkin liiraa (1922–2005)\",\n symbol: \"TRL\"\n },\n TRY: {\n displayName: \"Turkin liira\",\n \"displayName-count-one\": \"Turkin liira\",\n \"displayName-count-other\": \"Turkin liiraa\",\n symbol: \"TRY\",\n \"symbol-alt-narrow\": \"TRY\",\n \"symbol-alt-variant\": \"TL\"\n },\n TTD: {\n displayName: \"Trinidadin ja Tobagon dollari\",\n \"displayName-count-one\": \"Trinidadin ja Tobagon dollari\",\n \"displayName-count-other\": \"Trinidadin ja Tobagon dollaria\",\n symbol: \"TTD\",\n \"symbol-alt-narrow\": \"TTD\"\n },\n TWD: {\n displayName: \"Taiwanin uusi dollari\",\n \"displayName-count-one\": \"Taiwanin uusi dollari\",\n \"displayName-count-other\": \"Taiwanin uutta dollaria\",\n symbol: \"TWD\",\n \"symbol-alt-narrow\": \"TWD\"\n },\n TZS: {\n displayName: \"Tansanian šillinki\",\n \"displayName-count-one\": \"Tansanian šillinki\",\n \"displayName-count-other\": \"Tansanian šillinkiä\",\n symbol: \"TZS\"\n },\n UAH: {\n displayName: \"Ukrainan hryvnia\",\n \"displayName-count-one\": \"Ukrainan hryvnia\",\n \"displayName-count-other\": \"Ukrainan hryvniaa\",\n symbol: \"UAH\",\n \"symbol-alt-narrow\": \"UAH\"\n },\n UAK: {\n displayName: \"Ukrainan karbovanetz\",\n \"displayName-count-one\": \"Ukrainan karbovanetz\",\n \"displayName-count-other\": \"Ukrainan karbovanetzia\",\n symbol: \"UAK\"\n },\n UGS: {\n displayName: \"Ugandan šillinki (1966–1987)\",\n \"displayName-count-one\": \"Ugandan šillinki (1966–1987)\",\n \"displayName-count-other\": \"Ugandan šillinkiä (1966–1987)\",\n symbol: \"UGS\"\n },\n UGX: {\n displayName: \"Ugandan šillinki\",\n \"displayName-count-one\": \"Ugandan šillinki\",\n \"displayName-count-other\": \"Ugandan šillinkiä\",\n symbol: \"UGX\"\n },\n USD: {\n displayName: \"Yhdysvaltain dollari\",\n \"displayName-count-one\": \"Yhdysvaltain dollari\",\n \"displayName-count-other\": \"Yhdysvaltain dollaria\",\n symbol: \"$\",\n \"symbol-alt-narrow\": \"$\"\n },\n USN: {\n displayName: \"Yhdysvaltain dollari (seuraava päivä)\",\n \"displayName-count-one\": \"Yhdysvaltain dollari (seuraava päivä)\",\n \"displayName-count-other\": \"Yhdysvaltain dollaria (seuraava päivä)\",\n symbol: \"USN\"\n },\n USS: {\n displayName: \"Yhdysvaltain dollari (sama päivä)\",\n \"displayName-count-one\": \"Yhdysvaltain dollari (sama päivä)\",\n \"displayName-count-other\": \"Yhdysvaltain dollaria (sama päivä)\",\n symbol: \"USS\"\n },\n UYI: {\n displayName: \"Uruguayn peso en unidades indexadas\",\n \"displayName-count-one\": \"Uruguayn peso en unidades indexadas\",\n \"displayName-count-other\": \"Uruguayn pesoa en unidades indexadas\",\n symbol: \"UYI\"\n },\n UYP: {\n displayName: \"Uruguayn peso (1975–1993)\",\n \"displayName-count-one\": \"Uruguayn peso (1975–1993)\",\n \"displayName-count-other\": \"Uruguayn pesoa (1975–1993)\",\n symbol: \"UYP\"\n },\n UYU: {\n displayName: \"Uruguayn peso\",\n \"displayName-count-one\": \"Uruguayn peso\",\n \"displayName-count-other\": \"Uruguayn pesoa\",\n symbol: \"UYU\",\n \"symbol-alt-narrow\": \"UYU\"\n },\n UYW: {\n displayName: \"Uruguayn nimellinen palkkaindeksiyksikkö\",\n \"displayName-count-one\": \"Uruguayn nimellinen palkkaindeksiyksikkö\",\n \"displayName-count-other\": \"Uruguayn nimellistä palkkaindeksiyksikköä\",\n symbol: \"UYW\"\n },\n UZS: {\n displayName: \"Uzbekistanin som\",\n \"displayName-count-one\": \"Uzbekistanin som\",\n \"displayName-count-other\": \"Uzbekistanin somia\",\n symbol: \"UZS\"\n },\n VEB: {\n displayName: \"Venezuelan bolívar (1871–2008)\",\n \"displayName-count-one\": \"Venezuelan bolivar (1871–2008)\",\n \"displayName-count-other\": \"Venezuelan bolivaria (1871–2008)\",\n symbol: \"VEB\"\n },\n VED: {\n displayName: \"VED\",\n symbol: \"VED\"\n },\n VEF: {\n displayName: \"Venezuelan bolívar (2008–2018)\",\n \"displayName-count-one\": \"Venezuelan bolívar (2008–2018)\",\n \"displayName-count-other\": \"Venezuelan bolívaria (2008–2018)\",\n symbol: \"VEF\",\n \"symbol-alt-narrow\": \"VEF\"\n },\n VES: {\n displayName: \"Venezuelan suvereeni bolívar\",\n \"displayName-count-one\": \"Venezuelan suvereeni bolívar\",\n \"displayName-count-other\": \"Venezuelan suvereenia bolívaria\",\n symbol: \"VES\"\n },\n VND: {\n displayName: \"Vietnamin dong\",\n \"displayName-count-one\": \"Vietnamin dong\",\n \"displayName-count-other\": \"Vietnamin dongia\",\n symbol: \"VND\",\n \"symbol-alt-narrow\": \"VND\"\n },\n VNN: {\n displayName: \"Vietnamin dong (1978–1985)\",\n \"displayName-count-one\": \"Vietnamin dong (1978–1985)\",\n \"displayName-count-other\": \"Vietnamin dongia (1978–1985)\",\n symbol: \"VNN\"\n },\n VUV: {\n displayName: \"Vanuatun vatu\",\n \"displayName-count-one\": \"Vanuatun vatu\",\n \"displayName-count-other\": \"Vanuatun vatua\",\n symbol: \"VUV\"\n },\n WST: {\n displayName: \"Samoan tala\",\n \"displayName-count-one\": \"Samoan tala\",\n \"displayName-count-other\": \"Samoan talaa\",\n symbol: \"WST\"\n },\n XAF: {\n displayName: \"CFA-frangi BEAC\",\n \"displayName-count-one\": \"CFA-frangi BEAC\",\n \"displayName-count-other\": \"CFA-frangia BEAC\",\n symbol: \"FCFA\"\n },\n XAG: {\n displayName: \"hopea\",\n \"displayName-count-one\": \"troy-unssi hopeaa\",\n \"displayName-count-other\": \"troy-unssia hopeaa\",\n symbol: \"XAG\"\n },\n XAU: {\n displayName: \"kulta\",\n \"displayName-count-one\": \"troy-unssi kultaa\",\n \"displayName-count-other\": \"troy-unssia kultaa\",\n symbol: \"XAU\"\n },\n XBA: {\n displayName: \"EURCO\",\n \"displayName-count-one\": \"EURCO\",\n \"displayName-count-other\": \"EURCO’a\",\n symbol: \"XBA\"\n },\n XBB: {\n displayName: \"Euroopan rahayksikkö (EMU)\",\n \"displayName-count-one\": \"Euroopan rahayksikkö (EMU)\",\n \"displayName-count-other\": \"Euroopan rahayksikköä (EMU)\",\n symbol: \"XBB\"\n },\n XBC: {\n displayName: \"EUA (XBC)\",\n \"displayName-count-one\": \"EUA (XBC)\",\n \"displayName-count-other\": \"EUA’ta (XBC)\",\n symbol: \"XBC\"\n },\n XBD: {\n displayName: \"EUA (XBD)\",\n \"displayName-count-one\": \"EUA (XBD)\",\n \"displayName-count-other\": \"EUA’ta (XBD)\",\n symbol: \"XBD\"\n },\n XCD: {\n displayName: \"Itä-Karibian dollari\",\n \"displayName-count-one\": \"Itä-Karibian dollari\",\n \"displayName-count-other\": \"Itä-Karibian dollaria\",\n symbol: \"XCD\",\n \"symbol-alt-narrow\": \"XCD\"\n },\n XDR: {\n displayName: \"erityisnosto-oikeus (SDR)\",\n \"displayName-count-one\": \"erityisnosto-oikeus (SDR)\",\n \"displayName-count-other\": \"erityisnosto-oikeutta (SDR)\",\n symbol: \"XDR\"\n },\n XEU: {\n displayName: \"Euroopan valuuttayksikkö (ECU)\",\n \"displayName-count-one\": \"Euroopan valuuttayksikkö (ECU)\",\n \"displayName-count-other\": \"Euroopan valuuttayksikköä (ECU)\",\n symbol: \"XEU\"\n },\n XFO: {\n displayName: \"Ranskan kultafrangi\",\n \"displayName-count-one\": \"Ranskan kultafrangi\",\n \"displayName-count-other\": \"Ranskan kultafrangia\",\n symbol: \"XFO\"\n },\n XFU: {\n displayName: \"Ranskan UIC-frangi\",\n \"displayName-count-one\": \"Ranskan UIC-frangi\",\n \"displayName-count-other\": \"Ranskan UIC-frangia\",\n symbol: \"XFU\"\n },\n XOF: {\n displayName: \"CFA-frangi BCEAO\",\n \"displayName-count-one\": \"CFA-frangi BCEAO\",\n \"displayName-count-other\": \"CFA-frangia BCEAO\",\n symbol: \"F CFA\"\n },\n XPD: {\n displayName: \"palladium\",\n \"displayName-count-one\": \"troy-unssi palladiumia\",\n \"displayName-count-other\": \"troy-unssia palladiumia\",\n symbol: \"XPD\"\n },\n XPF: {\n displayName: \"CFP-frangi\",\n \"displayName-count-one\": \"CFP-frangi\",\n \"displayName-count-other\": \"CFP-frangia\",\n symbol: \"XPF\"\n },\n XPT: {\n displayName: \"platina\",\n \"displayName-count-one\": \"troy-unssi platinaa\",\n \"displayName-count-other\": \"troy-unssia platinaa\",\n symbol: \"XPT\"\n },\n XRE: {\n displayName: \"RINET-rahastot\",\n \"displayName-count-one\": \"RINET-rahastoyksikkö\",\n \"displayName-count-other\": \"RINET-rahastoyksikköä\",\n symbol: \"XRE\"\n },\n XSU: {\n displayName: \"etelä-amerikkalaisen ALBA:n laskentayksikkö sucre\",\n \"displayName-count-one\": \"sucre\",\n \"displayName-count-other\": \"sucrea\",\n symbol: \"XSU\"\n },\n XTS: {\n displayName: \"testaustarkoitukseen varattu valuuttakoodi\",\n \"displayName-count-one\": \"testaustarkoitukseen varattu valuuttakoodi\",\n \"displayName-count-other\": \"testaustarkoitukseen varattua valuuttakoodia\",\n symbol: \"XTS\"\n },\n XUA: {\n displayName: \"afrikkalainen AfDB-laskentayksikkö\",\n \"displayName-count-one\": \"AfDB-laskentayksikkö\",\n \"displayName-count-other\": \"AfDB-laskentayksikköä\",\n symbol: \"XUA\"\n },\n XXX: {\n displayName: \"tuntematon rahayksikkö\",\n \"displayName-count-one\": \"tuntematon rahayksikkö\",\n \"displayName-count-other\": \"tuntematonta rahayksikköä\",\n symbol: \"XXX\"\n },\n YDD: {\n displayName: \"Jemenin dinaari\",\n \"displayName-count-one\": \"Jemenin dinaari\",\n \"displayName-count-other\": \"Jemenin dinaaria\",\n symbol: \"YDD\"\n },\n YER: {\n displayName: \"Jemenin rial\",\n \"displayName-count-one\": \"Jemenin rial\",\n \"displayName-count-other\": \"Jemenin rialia\",\n symbol: \"YER\"\n },\n YUD: {\n displayName: \"Jugoslavian kova dinaari (1966–1990)\",\n \"displayName-count-one\": \"Jugoslavian kova dinaari (1966–1990)\",\n \"displayName-count-other\": \"Jugoslavian kovaa dinaaria (1966–1990)\",\n symbol: \"YUD\"\n },\n YUM: {\n displayName: \"Jugoslavian uusi dinaari (1994–2002)\",\n \"displayName-count-one\": \"Jugoslavian uusi dinaari (1994–2002)\",\n \"displayName-count-other\": \"Jugoslavian uutta dinaaria (1994–2002)\",\n symbol: \"YUM\"\n },\n YUN: {\n displayName: \"Jugoslavian vaihdettava dinaari (1990–1992)\",\n \"displayName-count-one\": \"Jugoslavian vaihdettava dinaari (1990–1992)\",\n \"displayName-count-other\": \"Jugoslavian vaihdettavaa dinaaria (1990–1992)\",\n symbol: \"YUN\"\n },\n YUR: {\n displayName: \"Jugoslavian uudistettu dinaari (1992–1993)\",\n \"displayName-count-one\": \"Jugoslavian uudistettu dinaari (1992–1993)\",\n \"displayName-count-other\": \"Jugoslavian uudistettua dinaaria (1992–1993)\",\n symbol: \"YUR\"\n },\n ZAL: {\n displayName: \"Etelä-Afrikan rahoitusrandi\",\n \"displayName-count-one\": \"Etelä-Afrikan rahoitusrandi\",\n \"displayName-count-other\": \"Etelä-Afrikan rahoitusrandia\",\n symbol: \"ZAL\"\n },\n ZAR: {\n displayName: \"Etelä-Afrikan randi\",\n \"displayName-count-one\": \"Etelä-Afrikan randi\",\n \"displayName-count-other\": \"Etelä-Afrikan randia\",\n symbol: \"ZAR\",\n \"symbol-alt-narrow\": \"ZAR\"\n },\n ZMK: {\n displayName: \"Sambian kwacha (1968–2012)\",\n \"displayName-count-one\": \"Sambian kwacha (1968–2012)\",\n \"displayName-count-other\": \"Sambian kwachaa (1968–2012)\",\n symbol: \"ZMK\"\n },\n ZMW: {\n displayName: \"Sambian kwacha\",\n \"displayName-count-one\": \"Sambian kwacha\",\n \"displayName-count-other\": \"Sambian kwachaa\",\n symbol: \"ZMW\",\n \"symbol-alt-narrow\": \"ZMW\"\n },\n ZRN: {\n displayName: \"Zairen uusi zaire (1993–1998)\",\n \"displayName-count-one\": \"Zairen uusi zaire (1993–1998)\",\n \"displayName-count-other\": \"Zairen uutta zairea (1993–1998)\",\n symbol: \"ZRN\"\n },\n ZRZ: {\n displayName: \"Zairen zaire (1971–1993)\",\n \"displayName-count-one\": \"Zairen zaire (1971–1993)\",\n \"displayName-count-other\": \"Zairen zairea (1971–1993)\",\n symbol: \"ZRZ\"\n },\n ZWD: {\n displayName: \"Zimbabwen dollari (1980–2008)\",\n \"displayName-count-one\": \"Zimbabwen dollari (1980–2008)\",\n \"displayName-count-other\": \"Zimbabwen dollaria (1980–2008)\",\n symbol: \"ZWD\"\n },\n ZWL: {\n displayName: \"Zimbabwen dollari (2009)\",\n \"displayName-count-one\": \"Zimbabwen dollari (2009)\",\n \"displayName-count-other\": \"Zimbabwen dollaria (2009)\",\n symbol: \"ZWL\"\n },\n ZWR: {\n displayName: \"Zimbabwen dollari (2008)\",\n \"displayName-count-one\": \"Zimbabwen dollari (2008)\",\n \"displayName-count-other\": \"Zimbabwen dollaria (2008)\",\n symbol: \"ZWR\"\n }\n },\n localeCurrency: \"EUR\"\n },\n calendar: {\n patterns: {\n d: \"d.M.y\",\n D: \"cccc d. MMMM y\",\n m: \"d. MMM\",\n M: \"d. MMMM\",\n y: \"LLL y\",\n Y: \"LLLL y\",\n F: \"cccc d. MMMM y H.mm.ss\",\n g: \"d.M.y H.mm\",\n G: \"d.M.y H.mm.ss\",\n t: \"H.mm\",\n T: \"H.mm.ss\",\n s: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\n u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\"\n },\n dateTimeFormats: {\n full: \"{1} 'klo' {0}\",\n long: \"{1} 'klo' {0}\",\n medium: \"{1} 'klo' {0}\",\n short: \"{1} {0}\",\n availableFormats: {\n Bh: \"h B\",\n Bhm: \"h.mm B\",\n Bhms: \"h.mm.ss B\",\n d: \"d\",\n E: \"ccc\",\n EBhm: \"E h.mm B\",\n EBhms: \"E h.mm.ss B\",\n Ed: \"E d.\",\n Ehm: \"E h.mm a\",\n EHm: \"E H.mm\",\n Ehms: \"E h.mm.ss a\",\n EHms: \"E H.mm.ss\",\n Gy: \"y G\",\n GyMd: \"M.d.y G\",\n GyMMM: \"LLL y G\",\n GyMMMd: \"d. MMM y G\",\n GyMMMEd: \"E d. MMM y G\",\n GyMMMMd: \"d. MMMM y G\",\n GyMMMMEd: \"E d. MMMM y G\",\n h: \"h a\",\n H: \"H\",\n hm: \"h.mm a\",\n Hm: \"H.mm\",\n hms: \"h.mm.ss a\",\n Hms: \"H.mm.ss\",\n hmsv: \"h.mm.ss a v\",\n Hmsv: \"H.mm.ss v\",\n hmv: \"h.mm a v\",\n Hmv: \"H.mm v\",\n M: \"L\",\n Md: \"d.M.\",\n MEd: \"E d.M.\",\n MMM: \"LLL\",\n MMMd: \"d. MMM\",\n MMMEd: \"ccc d. MMM\",\n MMMMd: \"d. MMMM\",\n MMMMEd: \"ccc d. MMMM\",\n \"MMMMW-count-one\": \"LLLL'n' W. 'viikko'\",\n \"MMMMW-count-other\": \"LLLL'n' W. 'viikko'\",\n ms: \"m.ss\",\n y: \"y\",\n yM: \"L.y\",\n yMd: \"d.M.y\",\n yMEd: \"E d.M.y\",\n yMM: \"M.y\",\n yMMM: \"LLL y\",\n yMMMd: \"d. MMM y\",\n yMMMEd: \"E d. MMM y\",\n yMMMM: \"LLLL y\",\n yMMMMccccd: \"cccc d. MMMM y\",\n yMMMMd: \"d. MMMM y\",\n yMMMMEd: \"E d. MMMM y\",\n yQQQ: \"QQQ y\",\n yQQQQ: \"QQQQ y\",\n \"yw-count-one\": \"'vuoden' Y 'viikko' w\",\n \"yw-count-other\": \"'vuoden' Y 'viikko' w\"\n }\n },\n timeFormats: {\n full: \"H.mm.ss zzzz\",\n long: \"H.mm.ss z\",\n medium: \"H.mm.ss\",\n short: \"H.mm\"\n },\n dateFormats: {\n full: \"cccc d. MMMM y\",\n long: \"d. MMMM y\",\n medium: \"d.M.y\",\n short: \"d.M.y\"\n },\n days: {\n format: {\n abbreviated: [\"su\", \"ma\", \"ti\", \"ke\", \"to\", \"pe\", \"la\"],\n narrow: [\"S\", \"M\", \"T\", \"K\", \"T\", \"P\", \"L\"],\n short: [\"su\", \"ma\", \"ti\", \"ke\", \"to\", \"pe\", \"la\"],\n wide: [\"sunnuntaina\", \"maanantaina\", \"tiistaina\", \"keskiviikkona\", \"torstaina\", \"perjantaina\", \"lauantaina\"]\n },\n \"stand-alone\": {\n abbreviated: [\"su\", \"ma\", \"ti\", \"ke\", \"to\", \"pe\", \"la\"],\n narrow: [\"S\", \"M\", \"T\", \"K\", \"T\", \"P\", \"L\"],\n short: [\"su\", \"ma\", \"ti\", \"ke\", \"to\", \"pe\", \"la\"],\n wide: [\"sunnuntai\", \"maanantai\", \"tiistai\", \"keskiviikko\", \"torstai\", \"perjantai\", \"lauantai\"]\n }\n },\n months: {\n format: {\n abbreviated: [\"tammik.\", \"helmik.\", \"maalisk.\", \"huhtik.\", \"toukok.\", \"kesäk.\", \"heinäk.\", \"elok.\", \"syysk.\", \"lokak.\", \"marrask.\", \"jouluk.\"],\n narrow: [\"T\", \"H\", \"M\", \"H\", \"T\", \"K\", \"H\", \"E\", \"S\", \"L\", \"M\", \"J\"],\n wide: [\"tammikuuta\", \"helmikuuta\", \"maaliskuuta\", \"huhtikuuta\", \"toukokuuta\", \"kesäkuuta\", \"heinäkuuta\", \"elokuuta\", \"syyskuuta\", \"lokakuuta\", \"marraskuuta\", \"joulukuuta\"]\n },\n \"stand-alone\": {\n abbreviated: [\"tammi\", \"helmi\", \"maalis\", \"huhti\", \"touko\", \"kesä\", \"heinä\", \"elo\", \"syys\", \"loka\", \"marras\", \"joulu\"],\n narrow: [\"T\", \"H\", \"M\", \"H\", \"T\", \"K\", \"H\", \"E\", \"S\", \"L\", \"M\", \"J\"],\n wide: [\"tammikuu\", \"helmikuu\", \"maaliskuu\", \"huhtikuu\", \"toukokuu\", \"kesäkuu\", \"heinäkuu\", \"elokuu\", \"syyskuu\", \"lokakuu\", \"marraskuu\", \"joulukuu\"]\n }\n },\n quarters: {\n format: {\n abbreviated: [\"1. nelj.\", \"2. nelj.\", \"3. nelj.\", \"4. nelj.\"],\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n wide: [\"1. neljännes\", \"2. neljännes\", \"3. neljännes\", \"4. neljännes\"]\n },\n \"stand-alone\": {\n abbreviated: [\"1. nelj.\", \"2. nelj.\", \"3. nelj.\", \"4. nelj.\"],\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n wide: [\"1. neljännes\", \"2. neljännes\", \"3. neljännes\", \"4. neljännes\"]\n }\n },\n dayPeriods: {\n format: {\n abbreviated: {\n midnight: \"keskiyöllä\",\n am: \"ap.\",\n noon: \"keskip.\",\n pm: \"ip.\",\n morning1: \"aamulla\",\n morning2: \"aamup.\",\n afternoon1: \"iltap.\",\n evening1: \"illalla\",\n night1: \"yöllä\"\n },\n narrow: {\n midnight: \"ky.\",\n am: \"ap.\",\n noon: \"kp.\",\n pm: \"ip.\",\n morning1: \"aamulla\",\n morning2: \"ap.\",\n afternoon1: \"ip.\",\n evening1: \"illalla\",\n night1: \"yöllä\"\n },\n wide: {\n midnight: \"keskiyöllä\",\n am: \"ap.\",\n noon: \"keskipäivällä\",\n pm: \"ip.\",\n morning1: \"aamulla\",\n morning2: \"aamupäivällä\",\n afternoon1: \"iltapäivällä\",\n evening1: \"illalla\",\n night1: \"yöllä\"\n }\n },\n \"stand-alone\": {\n abbreviated: {\n midnight: \"keskiyö\",\n am: \"ap.\",\n noon: \"keskip.\",\n pm: \"ip.\",\n morning1: \"aamu\",\n morning2: \"aamup.\",\n afternoon1: \"iltap.\",\n evening1: \"ilta\",\n night1: \"yö\"\n },\n narrow: {\n midnight: \"ky.\",\n am: \"ap.\",\n noon: \"kp.\",\n pm: \"ip.\",\n morning1: \"aamu\",\n morning2: \"ap.\",\n afternoon1: \"ip.\",\n evening1: \"ilta\",\n night1: \"yö\"\n },\n wide: {\n midnight: \"keskiyö\",\n am: \"ap.\",\n noon: \"keskipäivä\",\n pm: \"ip.\",\n morning1: \"aamu\",\n morning2: \"aamupäivä\",\n afternoon1: \"iltapäivä\",\n evening1: \"ilta\",\n night1: \"yö\"\n }\n }\n },\n eras: {\n format: {\n wide: {\n \"0\": \"ennen Kristuksen syntymää\",\n \"1\": \"jälkeen Kristuksen syntymän\",\n \"0-alt-variant\": \"ennen ajanlaskun alkua\",\n \"1-alt-variant\": \"jälkeen ajanlaskun alun\"\n },\n abbreviated: {\n \"0\": \"eKr.\",\n \"1\": \"jKr.\",\n \"0-alt-variant\": \"eaa.\",\n \"1-alt-variant\": \"jaa.\"\n },\n narrow: {\n \"0\": \"eKr\",\n \"1\": \"jKr\",\n \"0-alt-variant\": \"eaa\",\n \"1-alt-variant\": \"jaa\"\n }\n }\n },\n gmtFormat: \"UTC{0}\",\n gmtZeroFormat: \"UTC\",\n dateFields: {\n era: {\n wide: \"aikakausi\",\n short: \"aikakausi\",\n narrow: \"aikakausi\"\n },\n year: {\n wide: \"vuosi\",\n short: \"v\",\n narrow: \"v\"\n },\n quarter: {\n wide: \"neljännesvuosi\",\n short: \"neljännes\",\n narrow: \"nelj.\"\n },\n month: {\n wide: \"kuukausi\",\n short: \"kk\",\n narrow: \"kk\"\n },\n week: {\n wide: \"viikko\",\n short: \"vk\",\n narrow: \"vk\"\n },\n weekOfMonth: {\n wide: \"kuukauden viikko\",\n short: \"kuukauden vk\",\n narrow: \"kuukauden vk\"\n },\n day: {\n wide: \"päivä\",\n short: \"pv\",\n narrow: \"pv\"\n },\n dayOfYear: {\n wide: \"vuodenpäivä\",\n short: \"vuodenpv\",\n narrow: \"vuodenpv\"\n },\n weekday: {\n wide: \"viikonpäivä\",\n short: \"viikonpäivä\",\n narrow: \"viikonpäivä\"\n },\n weekdayOfMonth: {\n wide: \"kuukauden viikonpäivä\",\n short: \"kuukauden vk päivä\",\n narrow: \"kuukauden vk päivä\"\n },\n dayperiod: {\n short: \"vuorokaudenaika\",\n wide: \"vuorokaudenaika\",\n narrow: \"vuorokaudenaika\"\n },\n hour: {\n wide: \"tunti\",\n short: \"t\",\n narrow: \"t\"\n },\n minute: {\n wide: \"minuutti\",\n short: \"min\",\n narrow: \"min\"\n },\n second: {\n wide: \"sekunti\",\n short: \"s\",\n narrow: \"s\"\n },\n zone: {\n wide: \"aikavyöhyke\",\n short: \"aikavyöhyke\",\n narrow: \"aikavyöhyke\"\n },\n millisecond: {\n narrow: \"ms\",\n short: \"ms\",\n wide: \"millisekunti\"\n }\n }\n },\n firstDay: 1,\n weekendRange: {\n start: 6,\n end: 0\n },\n likelySubtags: {\n fi: \"fi-Latn-FI\"\n }\n});","/**-----------------------------------------------------------------------------------------\n* Copyright © 2024 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nvar setData = require('@progress/kendo-angular-intl').setData;\nsetData({\n name: \"sv\",\n identity: {\n language: \"sv\"\n },\n territory: \"SE\",\n numbers: {\n symbols: {\n decimal: \",\",\n group: \" \",\n list: \";\",\n percentSign: \"%\",\n plusSign: \"+\",\n minusSign: \"−\",\n approximatelySign: \"~\",\n exponential: \"×10^\",\n superscriptingExponent: \"×\",\n perMille: \"‰\",\n infinity: \"∞\",\n nan: \"NaN\",\n timeSeparator: \":\",\n \"timeSeparator-alt-variant\": \".\"\n },\n decimal: {\n patterns: [\"n\"],\n groupSize: [3]\n },\n scientific: {\n patterns: [\"nEn\"],\n groupSize: []\n },\n percent: {\n patterns: [\"n %\"],\n groupSize: [3]\n },\n currency: {\n patterns: [\"n $\"],\n groupSize: [3],\n \"unitPattern-count-one\": \"n $\",\n \"unitPattern-count-other\": \"n $\"\n },\n accounting: {\n patterns: [\"n $\"],\n groupSize: [3]\n },\n currencies: {\n ADP: {\n displayName: \"andorransk peseta\",\n \"displayName-count-one\": \"andorransk peseta\",\n \"displayName-count-other\": \"andorranska pesetas\",\n symbol: \"ADP\"\n },\n AED: {\n displayName: \"emiratisk dirham\",\n \"displayName-count-one\": \"emiratisk dirham\",\n \"displayName-count-other\": \"emiratisk dirham\",\n symbol: \"AED\"\n },\n AFA: {\n displayName: \"afghani (1927–2002)\",\n \"displayName-count-one\": \"afghani (1927–2002)\",\n \"displayName-count-other\": \"afghani (1927–2002)\",\n symbol: \"AFA\"\n },\n AFN: {\n displayName: \"afghansk afghani\",\n \"displayName-count-one\": \"afghansk afghani\",\n \"displayName-count-other\": \"afghanska afghani\",\n symbol: \"AFN\",\n \"symbol-alt-narrow\": \"؋\"\n },\n ALK: {\n displayName: \"albansk lek (1946–1965)\",\n \"displayName-count-one\": \"albansk lek (1946–1965)\",\n \"displayName-count-other\": \"albanska lek (1946–1965)\",\n symbol: \"ALK\"\n },\n ALL: {\n displayName: \"albansk lek\",\n \"displayName-count-one\": \"albansk lek\",\n \"displayName-count-other\": \"albanska leke\",\n symbol: \"ALL\"\n },\n AMD: {\n displayName: \"armenisk dram\",\n \"displayName-count-one\": \"armenisk dram\",\n \"displayName-count-other\": \"armeniska dram\",\n symbol: \"AMD\",\n \"symbol-alt-narrow\": \"֏\"\n },\n ANG: {\n displayName: \"antillergulden\",\n \"displayName-count-one\": \"antillergulden\",\n \"displayName-count-other\": \"antillergulden\",\n symbol: \"ANG\"\n },\n AOA: {\n displayName: \"angolansk kwanza\",\n \"displayName-count-one\": \"angolansk kwanza\",\n \"displayName-count-other\": \"angolanska kwanza\",\n symbol: \"AOA\",\n \"symbol-alt-narrow\": \"Kz\"\n },\n AOK: {\n displayName: \"angolansk kwanza (1977–1990)\",\n \"displayName-count-one\": \"angolansk kwanza (1977–1990)\",\n \"displayName-count-other\": \"angolanska kwanza (1977–1990)\",\n symbol: \"AOK\"\n },\n AON: {\n displayName: \"angolansk ny kwanza (1990–2000)\",\n \"displayName-count-one\": \"angolansk kwanza (1990–2000)\",\n \"displayName-count-other\": \"angolanska nya kwanza (1990–2000)\",\n symbol: \"AON\"\n },\n AOR: {\n displayName: \"angolansk kwanza reajustado (1995–1999)\",\n \"displayName-count-one\": \"angolansk kwanza reajustado (1995–1999)\",\n \"displayName-count-other\": \"angolanska kwanza reajustado (1995–1999)\",\n symbol: \"AOR\"\n },\n ARA: {\n displayName: \"argentinsk austral\",\n \"displayName-count-one\": \"argentinsk austral\",\n \"displayName-count-other\": \"argentinska australer\",\n symbol: \"ARA\"\n },\n ARL: {\n displayName: \"argentisk peso (1970–1983)\",\n \"displayName-count-one\": \"argentisk peso (1970–1983)\",\n \"displayName-count-other\": \"argentiska pesos (1970–1983)\",\n symbol: \"ARL\"\n },\n ARM: {\n displayName: \"argentisk peso (1881–1969)\",\n \"displayName-count-one\": \"argentisk peso (1881–1969)\",\n \"displayName-count-other\": \"argentiska pesos (1881–1969)\",\n symbol: \"ARM\"\n },\n ARP: {\n displayName: \"argentinsk peso (1983–1985)\",\n \"displayName-count-one\": \"argentinsk peso (1983–1985)\",\n \"displayName-count-other\": \"argentinska pesos (1983–1985)\",\n symbol: \"ARP\"\n },\n ARS: {\n displayName: \"argentinsk peso\",\n \"displayName-count-one\": \"argentinsk peso\",\n \"displayName-count-other\": \"argentinska pesos\",\n symbol: \"ARS\",\n \"symbol-alt-narrow\": \"$\"\n },\n ATS: {\n displayName: \"österrikisk schilling\",\n \"displayName-count-one\": \"österrikisk schilling\",\n \"displayName-count-other\": \"österrikiska schilling\",\n symbol: \"ATS\"\n },\n AUD: {\n displayName: \"australisk dollar\",\n \"displayName-count-one\": \"australisk dollar\",\n \"displayName-count-other\": \"australiska dollar\",\n symbol: \"AUD\",\n \"symbol-alt-narrow\": \"$\"\n },\n AWG: {\n displayName: \"arubansk florin\",\n \"displayName-count-one\": \"arubansk florin\",\n \"displayName-count-other\": \"arubanska floriner\",\n symbol: \"AWG\"\n },\n AZM: {\n displayName: \"azerbajdzjansk manat (1993–2006)\",\n \"displayName-count-one\": \"azerbajdzjansk manat (1993–2006)\",\n \"displayName-count-other\": \"azerbajdzjanska manat (1993–2006)\",\n symbol: \"AZM\"\n },\n AZN: {\n displayName: \"azerbajdzjansk manat\",\n \"displayName-count-one\": \"azerbajdzjansk manat\",\n \"displayName-count-other\": \"azerbajdzjanska manat\",\n symbol: \"AZN\",\n \"symbol-alt-narrow\": \"₼\"\n },\n BAD: {\n displayName: \"bosnisk-hercegovinsk dinar (1992–1994)\",\n \"displayName-count-one\": \"bosnisk-hercegovinsk dinar (1992–1994)\",\n \"displayName-count-other\": \"bosnisk-hercegovinska dinarer (1992–1994)\",\n symbol: \"BAD\"\n },\n BAM: {\n displayName: \"bosnisk-hercegovinsk mark (konvertibel)\",\n \"displayName-count-one\": \"bosnisk-hercegovinsk mark (konvertibel)\",\n \"displayName-count-other\": \"bosnisk-hercegovinska mark (konvertibla)\",\n symbol: \"BAM\",\n \"symbol-alt-narrow\": \"KM\"\n },\n BAN: {\n displayName: \"bosnisk-hercegovinsk dinar (1994–1998)\",\n \"displayName-count-one\": \"bosnisk-hercegovinsk dinar (1994–1998)\",\n \"displayName-count-other\": \"bosnisk-hercegovinska dinarer (1994–1998)\",\n symbol: \"BAN\"\n },\n BBD: {\n displayName: \"barbadisk dollar\",\n \"displayName-count-one\": \"barbadisk dollar\",\n \"displayName-count-other\": \"barbadisk dollar\",\n symbol: \"Bds$\",\n \"symbol-alt-narrow\": \"$\"\n },\n BDT: {\n displayName: \"bangladeshisk taka\",\n \"displayName-count-one\": \"bangladeshisk taka\",\n \"displayName-count-other\": \"bangladeshiska taka\",\n symbol: \"BDT\",\n \"symbol-alt-narrow\": \"৳\"\n },\n BEC: {\n displayName: \"belgisk franc (konvertibel)\",\n \"displayName-count-one\": \"belgisk franc (konvertibel)\",\n \"displayName-count-other\": \"belgiska franc (konvertibla)\",\n symbol: \"BEC\"\n },\n BEF: {\n displayName: \"belgisk franc\",\n \"displayName-count-one\": \"belgisk franc\",\n \"displayName-count-other\": \"belgiska franc\",\n symbol: \"BEF\"\n },\n BEL: {\n displayName: \"belgisk franc (finansiell)\",\n \"displayName-count-one\": \"belgisk franc (finansiell)\",\n \"displayName-count-other\": \"belgiska franc (finansiella)\",\n symbol: \"BEL\"\n },\n BGL: {\n displayName: \"bulgarisk hård lev (1962–1999)\",\n \"displayName-count-one\": \"bulgarisk hård lev (1962–1999)\",\n \"displayName-count-other\": \"bulgariska hårda lev (1962–1999)\",\n symbol: \"BGL\"\n },\n BGM: {\n displayName: \"bulgarisk lev (1952–1962)\",\n \"displayName-count-one\": \"bulgarisk lev (1952–1962)\",\n \"displayName-count-other\": \"bulgariska lev (1952–1962)\",\n symbol: \"BGM\"\n },\n BGN: {\n displayName: \"bulgarisk lev\",\n \"displayName-count-one\": \"bulgarisk lev\",\n \"displayName-count-other\": \"bulgariska leva\",\n symbol: \"BGN\"\n },\n BGO: {\n displayName: \"bulgarisk lev (1881–1952)\",\n \"displayName-count-one\": \"bulgarisk lev (1881–1952)\",\n \"displayName-count-other\": \"bulgarisk lev (1881–1952)\",\n symbol: \"BGO\"\n },\n BHD: {\n displayName: \"bahrainsk dinar\",\n \"displayName-count-one\": \"bahrainsk dinar\",\n \"displayName-count-other\": \"bahrainska dinarer\",\n symbol: \"BHD\"\n },\n BIF: {\n displayName: \"burundisk franc\",\n \"displayName-count-one\": \"burundisk franc\",\n \"displayName-count-other\": \"burundiska franc\",\n symbol: \"BIF\"\n },\n BMD: {\n displayName: \"bermudisk dollar\",\n \"displayName-count-one\": \"bermudisk dollar\",\n \"displayName-count-other\": \"bermudisk dollar\",\n symbol: \"BM$\",\n \"symbol-alt-narrow\": \"$\"\n },\n BND: {\n displayName: \"bruneisk dollar\",\n \"displayName-count-one\": \"bruneisk dollar\",\n \"displayName-count-other\": \"bruneiska dollar\",\n symbol: \"BND\",\n \"symbol-alt-narrow\": \"$\"\n },\n BOB: {\n displayName: \"boliviansk boliviano\",\n \"displayName-count-one\": \"boliviansk boliviano\",\n \"displayName-count-other\": \"bolivianska bolivianos\",\n symbol: \"BOB\",\n \"symbol-alt-narrow\": \"Bs\"\n },\n BOL: {\n displayName: \"boliviansk boliviano (1864–1963)\",\n \"displayName-count-one\": \"boliviansk boliviano (1864–1963)\",\n \"displayName-count-other\": \"bolivianska bolivianos (1864–1963)\",\n symbol: \"BOL\"\n },\n BOP: {\n displayName: \"boliviansk peso\",\n \"displayName-count-one\": \"boliviansk peso\",\n \"displayName-count-other\": \"bolivianska pesos\",\n symbol: \"BOP\"\n },\n BOV: {\n displayName: \"boliviansk mvdol\",\n \"displayName-count-one\": \"boliviansk mvdol\",\n \"displayName-count-other\": \"bolivianska mvdol\",\n symbol: \"BOV\"\n },\n BRB: {\n displayName: \"brasiliansk cruzeiro novo (1967–1986)\",\n \"displayName-count-one\": \"brasiliansk cruzeiro (1967–1986)\",\n \"displayName-count-other\": \"brasilianska cruzeiro novo (1967–1986)\",\n symbol: \"BRB\"\n },\n BRC: {\n displayName: \"brasiliansk cruzado\",\n \"displayName-count-one\": \"brasiliansk cruzado\",\n \"displayName-count-other\": \"brasilianska cruzado\",\n symbol: \"BRC\"\n },\n BRE: {\n displayName: \"brasiliansk cruzeiro (1990–1993)\",\n \"displayName-count-one\": \"brasiliansk cruzeiro (1990–1993)\",\n \"displayName-count-other\": \"brasilianska cruzeiro (1990–1993)\",\n symbol: \"BRE\"\n },\n BRL: {\n displayName: \"brasiliansk real\",\n \"displayName-count-one\": \"brasiliansk real\",\n \"displayName-count-other\": \"brasilianska real\",\n symbol: \"BR$\",\n \"symbol-alt-narrow\": \"R$\"\n },\n BRN: {\n displayName: \"brasiliansk cruzado novo\",\n \"displayName-count-one\": \"brasiliansk cruzado novo\",\n \"displayName-count-other\": \"brasilianska cruzado novo\",\n symbol: \"BRN\"\n },\n BRR: {\n displayName: \"brasiliansk cruzeiro\",\n \"displayName-count-one\": \"brasiliansk cruzeiro\",\n \"displayName-count-other\": \"brasilianska cruzeiros\",\n symbol: \"BRR\"\n },\n BRZ: {\n displayName: \"brasiliansk cruzeiro (1942–1967)\",\n \"displayName-count-one\": \"brasiliansk cruzeiro (1942–1967)\",\n \"displayName-count-other\": \"brasilianska cruzeiros (1942–1967)\",\n symbol: \"BRZ\"\n },\n BSD: {\n displayName: \"bahamansk dollar\",\n \"displayName-count-one\": \"bahamansk dollar\",\n \"displayName-count-other\": \"bahamanska dollar\",\n symbol: \"BS$\",\n \"symbol-alt-narrow\": \"$\"\n },\n BTN: {\n displayName: \"bhutanesisk ngultrum\",\n \"displayName-count-one\": \"bhutanesisk ngultrum\",\n \"displayName-count-other\": \"bhutanesiska ngultrum\",\n symbol: \"BTN\"\n },\n BUK: {\n displayName: \"burmesisk kyat\",\n \"displayName-count-one\": \"burmesisk kyat\",\n \"displayName-count-other\": \"burmesiska kyat\",\n symbol: \"BUK\"\n },\n BWP: {\n displayName: \"botswansk pula\",\n \"displayName-count-one\": \"botswansk pula\",\n \"displayName-count-other\": \"botswanska pula\",\n symbol: \"BWP\",\n \"symbol-alt-narrow\": \"P\"\n },\n BYB: {\n displayName: \"vitrysk ny rubel (1994–1999)\",\n \"displayName-count-one\": \"vitrysk rubel (1994–1999)\",\n \"displayName-count-other\": \"vitryska nya rubel (1994–1999)\",\n symbol: \"BYB\"\n },\n BYN: {\n displayName: \"vitrysk rubel\",\n \"displayName-count-one\": \"vitrysk rubel\",\n \"displayName-count-other\": \"vitryska rubel\",\n symbol: \"BYN\",\n \"symbol-alt-narrow\": \"р.\"\n },\n BYR: {\n displayName: \"vitrysk rubel (2000–2016)\",\n \"displayName-count-one\": \"vitrysk rubel (2000–2016)\",\n \"displayName-count-other\": \"vitryska rubel (2000–2016)\",\n symbol: \"BYR\"\n },\n BZD: {\n displayName: \"belizisk dollar\",\n \"displayName-count-one\": \"belizisk dollar\",\n \"displayName-count-other\": \"beliziska dollar\",\n symbol: \"BZ$\",\n \"symbol-alt-narrow\": \"$\"\n },\n CAD: {\n displayName: \"kanadensisk dollar\",\n \"displayName-count-one\": \"kanadensisk dollar\",\n \"displayName-count-other\": \"kanadensiska dollar\",\n symbol: \"CA$\",\n \"symbol-alt-narrow\": \"$\"\n },\n CDF: {\n displayName: \"kongolesisk franc\",\n \"displayName-count-one\": \"kongolesisk franc\",\n \"displayName-count-other\": \"kongolesiska franc\",\n symbol: \"CDF\"\n },\n CHE: {\n displayName: \"euro (konvertibelt konto, WIR Bank, Schweiz)\",\n \"displayName-count-one\": \"euro (WIR Bank)\",\n \"displayName-count-other\": \"euro (konvertibelt konto, WIR Bank, Schweiz)\",\n symbol: \"CHE\"\n },\n CHF: {\n displayName: \"schweizisk franc\",\n \"displayName-count-one\": \"schweizisk franc\",\n \"displayName-count-other\": \"schweiziska franc\",\n symbol: \"CHF\"\n },\n CHW: {\n displayName: \"franc (konvertibelt konto, WIR Bank, Schweiz)\",\n \"displayName-count-one\": \"franc (WIR Bank)\",\n \"displayName-count-other\": \"franc (konvertibelt konto, WIR Bank, Schweiz)\",\n symbol: \"CHW\"\n },\n CLE: {\n displayName: \"chilensk escudo (1960–1975)\",\n \"displayName-count-one\": \"chilensk escudo (1960–1975)\",\n \"displayName-count-other\": \"chilenska escudos (1960–1975)\",\n symbol: \"CLE\"\n },\n CLF: {\n displayName: \"chilensk unidad de fomento\",\n \"displayName-count-one\": \"chilensk unidad de fomento\",\n \"displayName-count-other\": \"chilenska unidad de fomento\",\n symbol: \"CLF\"\n },\n CLP: {\n displayName: \"chilensk peso\",\n \"displayName-count-one\": \"chilensk peso\",\n \"displayName-count-other\": \"chilenska pesos\",\n symbol: \"CLP\",\n \"symbol-alt-narrow\": \"$\"\n },\n CNH: {\n displayName: \"kinesisk yuan (offshore)\",\n \"displayName-count-one\": \"kinesisk yuan (offshore)\",\n \"displayName-count-other\": \"kinesisk yuan (offshore)\",\n symbol: \"CNH\"\n },\n CNX: {\n displayName: \"kinesisk dollar\",\n \"displayName-count-one\": \"kinesisk dollar\",\n \"displayName-count-other\": \"kinesiska dollar\",\n symbol: \"CNX\"\n },\n CNY: {\n displayName: \"kinesisk yuan\",\n \"displayName-count-one\": \"kinesisk yuan\",\n \"displayName-count-other\": \"kinesiska yuan\",\n symbol: \"CNY\",\n \"symbol-alt-narrow\": \"¥\"\n },\n COP: {\n displayName: \"colombiansk peso\",\n \"displayName-count-one\": \"colombiansk peso\",\n \"displayName-count-other\": \"colombianska pesos\",\n symbol: \"COP\",\n \"symbol-alt-narrow\": \"$\"\n },\n COU: {\n displayName: \"colombiansk unidad de valor real\",\n \"displayName-count-one\": \"colombiansk unidad de valor real\",\n \"displayName-count-other\": \"colombianska unidad de valor real\",\n symbol: \"COU\"\n },\n CRC: {\n displayName: \"costarikansk colón\",\n \"displayName-count-one\": \"costarikansk colón\",\n \"displayName-count-other\": \"costarikanska colón\",\n symbol: \"CRC\",\n \"symbol-alt-narrow\": \"₡\"\n },\n CSD: {\n displayName: \"serbisk dinar (2002–2006)\",\n \"displayName-count-one\": \"serbisk dinar (2002–2006)\",\n \"displayName-count-other\": \"serbiska dinarer (2002–2006)\",\n symbol: \"CSD\"\n },\n CSK: {\n displayName: \"tjeckoslovakisk krona (–1993)\",\n \"displayName-count-one\": \"tjeckoslovakisk hård koruna\",\n \"displayName-count-other\": \"tjeckiska hårda koruna\",\n symbol: \"CSK\"\n },\n CUC: {\n displayName: \"kubansk peso (konvertibel)\",\n \"displayName-count-one\": \"kubansk peso (konvertibel)\",\n \"displayName-count-other\": \"kubanska pesos (konvertibla)\",\n symbol: \"CUC\",\n \"symbol-alt-narrow\": \"$\"\n },\n CUP: {\n displayName: \"kubansk peso\",\n \"displayName-count-one\": \"kubansk peso\",\n \"displayName-count-other\": \"kubanska pesos\",\n symbol: \"CUP\",\n \"symbol-alt-narrow\": \"$\"\n },\n CVE: {\n displayName: \"kapverdisk escudo\",\n \"displayName-count-one\": \"kapverdisk escudo\",\n \"displayName-count-other\": \"kapverdiska escudos\",\n symbol: \"CVE\"\n },\n CYP: {\n displayName: \"cypriotiskt pund\",\n \"displayName-count-one\": \"cypriotiskt pund\",\n \"displayName-count-other\": \"cypriotiska pund\",\n symbol: \"CYP\"\n },\n CZK: {\n displayName: \"tjeckisk koruna\",\n \"displayName-count-one\": \"tjeckisk koruna\",\n \"displayName-count-other\": \"tjeckiska koruna\",\n symbol: \"CZK\",\n \"symbol-alt-narrow\": \"Kč\"\n },\n DDM: {\n displayName: \"östtysk mark\",\n \"displayName-count-one\": \"östtysk mark\",\n \"displayName-count-other\": \"östtyska mark\",\n symbol: \"DDM\"\n },\n DEM: {\n displayName: \"tysk mark\",\n \"displayName-count-one\": \"tysk mark\",\n \"displayName-count-other\": \"tyska mark\",\n symbol: \"DEM\"\n },\n DJF: {\n displayName: \"djiboutisk franc\",\n \"displayName-count-one\": \"djiboutisk franc\",\n \"displayName-count-other\": \"djiboutiska franc\",\n symbol: \"DJF\"\n },\n DKK: {\n displayName: \"dansk krona\",\n \"displayName-count-one\": \"dansk krona\",\n \"displayName-count-other\": \"danska kronor\",\n symbol: \"Dkr\",\n \"symbol-alt-narrow\": \"kr\"\n },\n DOP: {\n displayName: \"dominikansk peso\",\n \"displayName-count-one\": \"dominikansk peso\",\n \"displayName-count-other\": \"dominikanska pesos\",\n symbol: \"RD$\",\n \"symbol-alt-narrow\": \"$\"\n },\n DZD: {\n displayName: \"algerisk dinar\",\n \"displayName-count-one\": \"algerisk dinar\",\n \"displayName-count-other\": \"algeriska dinarer\",\n symbol: \"DZD\"\n },\n ECS: {\n displayName: \"ecuadoriansk sucre\",\n \"displayName-count-one\": \"ecuadoriansk sucre\",\n \"displayName-count-other\": \"ecuadorianska sucre\",\n symbol: \"ECS\"\n },\n ECV: {\n displayName: \"ecuadoriansk unidad de valor constante\",\n \"displayName-count-one\": \"ecuadoriansk unidad de valor constante\",\n \"displayName-count-other\": \"ecuadorianska unidad de valor constante\",\n symbol: \"ECV\"\n },\n EEK: {\n displayName: \"estnisk krona\",\n \"displayName-count-one\": \"estnisk krona\",\n \"displayName-count-other\": \"estniska kronor\",\n symbol: \"Ekr\"\n },\n EGP: {\n displayName: \"egyptiskt pund\",\n \"displayName-count-one\": \"egyptiskt pund\",\n \"displayName-count-other\": \"egyptiska pund\",\n symbol: \"EG£\",\n \"symbol-alt-narrow\": \"E£\"\n },\n ERN: {\n displayName: \"eritreansk nakfa\",\n \"displayName-count-one\": \"eritreansk nakfa\",\n \"displayName-count-other\": \"eritreanska nakfa\",\n symbol: \"ERN\"\n },\n ESA: {\n displayName: \"spansk peseta (konto)\",\n \"displayName-count-one\": \"spansk peseta (konto)\",\n \"displayName-count-other\": \"spanska pesetas (konto)\",\n symbol: \"ESA\"\n },\n ESB: {\n displayName: \"spansk peseta (konvertibelt konto)\",\n \"displayName-count-one\": \"spansk peseta (konvertibelt konto)\",\n \"displayName-count-other\": \"spanska pesetas (konvertibelt konto)\",\n symbol: \"ESB\"\n },\n ESP: {\n displayName: \"spansk peseta\",\n \"displayName-count-one\": \"spansk peseta\",\n \"displayName-count-other\": \"spanska pesetas\",\n symbol: \"ESP\",\n \"symbol-alt-narrow\": \"ESP\"\n },\n ETB: {\n displayName: \"etiopisk birr\",\n \"displayName-count-one\": \"etiopisk birr\",\n \"displayName-count-other\": \"etiopiska birr\",\n symbol: \"ETB\"\n },\n EUR: {\n displayName: \"euro\",\n \"displayName-count-one\": \"euro\",\n \"displayName-count-other\": \"euro\",\n symbol: \"€\",\n \"symbol-alt-narrow\": \"€\"\n },\n FIM: {\n displayName: \"finsk mark\",\n \"displayName-count-one\": \"finsk mark\",\n \"displayName-count-other\": \"finska mark\",\n symbol: \"FIM\"\n },\n FJD: {\n displayName: \"Fijidollar\",\n \"displayName-count-one\": \"Fijidollar\",\n \"displayName-count-other\": \"Fijidollar\",\n symbol: \"FJD\",\n \"symbol-alt-narrow\": \"$\"\n },\n FKP: {\n displayName: \"Falklandspund\",\n \"displayName-count-one\": \"Falklandspund\",\n \"displayName-count-other\": \"Falklandspund\",\n symbol: \"FKP\",\n \"symbol-alt-narrow\": \"£\"\n },\n FRF: {\n displayName: \"fransk franc\",\n \"displayName-count-one\": \"fransk franc\",\n \"displayName-count-other\": \"franska franc\",\n symbol: \"FRF\"\n },\n GBP: {\n displayName: \"brittiskt pund\",\n \"displayName-count-one\": \"brittiskt pund\",\n \"displayName-count-other\": \"brittiska pund\",\n symbol: \"GBP\",\n \"symbol-alt-narrow\": \"£\"\n },\n GEK: {\n displayName: \"georgisk kupon larit\",\n \"displayName-count-one\": \"georgisk kupon larit\",\n \"displayName-count-other\": \"georgiska kupon larit\",\n symbol: \"GEK\"\n },\n GEL: {\n displayName: \"georgisk lari\",\n \"displayName-count-one\": \"georgisk lari\",\n \"displayName-count-other\": \"georgiska lari\",\n symbol: \"GEL\",\n \"symbol-alt-narrow\": \"₾\"\n },\n GHC: {\n displayName: \"ghanansk cedi (1979–2007)\",\n \"displayName-count-one\": \"ghanansk cedi (1979–2007)\",\n \"displayName-count-other\": \"ghananska cedi (1979–2007)\",\n symbol: \"GHC\"\n },\n GHS: {\n displayName: \"ghanansk cedi\",\n \"displayName-count-one\": \"ghanansk cedi\",\n \"displayName-count-other\": \"ghananska cedi\",\n symbol: \"GHS\",\n \"symbol-alt-narrow\": \"GH₵\"\n },\n GIP: {\n displayName: \"gibraltiskt pund\",\n \"displayName-count-one\": \"gibraltiskt pund\",\n \"displayName-count-other\": \"gibraltiska pund\",\n symbol: \"GIP\",\n \"symbol-alt-narrow\": \"£\"\n },\n GMD: {\n displayName: \"gambisk dalasi\",\n \"displayName-count-one\": \"gambisk dalasi\",\n \"displayName-count-other\": \"gambiska dalasi\",\n symbol: \"GMD\"\n },\n GNF: {\n displayName: \"guineansk franc\",\n \"displayName-count-one\": \"guineansk franc\",\n \"displayName-count-other\": \"guineanska franc\",\n symbol: \"GNF\",\n \"symbol-alt-narrow\": \"FG\"\n },\n GNS: {\n displayName: \"guineansk syli\",\n \"displayName-count-one\": \"guineansk syli\",\n \"displayName-count-other\": \"guineanska syli\",\n symbol: \"GNS\"\n },\n GQE: {\n displayName: \"ekvatorialguineansk ekwele\",\n \"displayName-count-one\": \"ekvatorialguineansk ekwele\",\n \"displayName-count-other\": \"ekvatorialguineanska ekweler\",\n symbol: \"GQE\"\n },\n GRD: {\n displayName: \"grekisk drachma\",\n \"displayName-count-one\": \"grekisk drachma\",\n \"displayName-count-other\": \"grekiska drachmer\",\n symbol: \"GRD\"\n },\n GTQ: {\n displayName: \"guatemalansk quetzal\",\n \"displayName-count-one\": \"guatemalansk quetzal\",\n \"displayName-count-other\": \"guatemalanska quetzal\",\n symbol: \"GTQ\",\n \"symbol-alt-narrow\": \"Q\"\n },\n GWE: {\n displayName: \"Portugisiska Guinea-escudo\",\n \"displayName-count-one\": \"Portugisiska Guinea-escudo\",\n \"displayName-count-other\": \"Portugisiska Guinea-escudos\",\n symbol: \"GWE\"\n },\n GWP: {\n displayName: \"Guinea-Bissau-peso\",\n \"displayName-count-one\": \"Guinea-Bissau-peso\",\n \"displayName-count-other\": \"Guinea-Bissau-pesos\",\n symbol: \"GWP\"\n },\n GYD: {\n displayName: \"Guyanadollar\",\n \"displayName-count-one\": \"Guyanadollar\",\n \"displayName-count-other\": \"Guyanadollar\",\n symbol: \"GYD\",\n \"symbol-alt-narrow\": \"$\"\n },\n HKD: {\n displayName: \"Hongkongdollar\",\n \"displayName-count-one\": \"Hongkongdollar\",\n \"displayName-count-other\": \"Hongkongdollar\",\n symbol: \"HKD\",\n \"symbol-alt-narrow\": \"$\"\n },\n HNL: {\n displayName: \"honduransk lempira\",\n \"displayName-count-one\": \"honduransk lempira\",\n \"displayName-count-other\": \"honduranska lempira\",\n symbol: \"HNL\",\n \"symbol-alt-narrow\": \"L\"\n },\n HRD: {\n displayName: \"kroatisk dinar\",\n \"displayName-count-one\": \"kroatisk dinar\",\n \"displayName-count-other\": \"kroatiska dinarer\",\n symbol: \"HRD\"\n },\n HRK: {\n displayName: \"kroatisk kuna\",\n \"displayName-count-one\": \"kroatisk kuna\",\n \"displayName-count-other\": \"kroatiska kunor\",\n symbol: \"HRK\",\n \"symbol-alt-narrow\": \"kn\"\n },\n HTG: {\n displayName: \"haitisk gourde\",\n \"displayName-count-one\": \"haitisk gourde\",\n \"displayName-count-other\": \"haitiska gourder\",\n symbol: \"HTG\"\n },\n HUF: {\n displayName: \"ungersk forint\",\n \"displayName-count-one\": \"ungersk forint\",\n \"displayName-count-other\": \"ungerska forinter\",\n symbol: \"HUF\",\n \"symbol-alt-narrow\": \"Ft\"\n },\n IDR: {\n displayName: \"indonesisk rupie\",\n \"displayName-count-one\": \"indonesisk rupie\",\n \"displayName-count-other\": \"indonesiska rupier\",\n symbol: \"IDR\",\n \"symbol-alt-narrow\": \"Rp\"\n },\n IEP: {\n displayName: \"irländskt pund\",\n \"displayName-count-one\": \"irländskt pund\",\n \"displayName-count-other\": \"irländska pund\",\n symbol: \"IE£\"\n },\n ILP: {\n displayName: \"israeliskt pund\",\n \"displayName-count-one\": \"israeliskt pund\",\n \"displayName-count-other\": \"israeliska pund\",\n symbol: \"ILP\"\n },\n ILR: {\n displayName: \"israelisk shekel (1980–1985)\",\n \"displayName-count-one\": \"israelisk shekel (1980–1985)\",\n \"displayName-count-other\": \"israeliska shekel (1980–1985)\",\n symbol: \"ILR\"\n },\n ILS: {\n displayName: \"israelisk ny shekel\",\n \"displayName-count-one\": \"israelisk ny shekel\",\n \"displayName-count-other\": \"israeliska nya shekel\",\n symbol: \"₪\",\n \"symbol-alt-narrow\": \"₪\"\n },\n INR: {\n displayName: \"indisk rupie\",\n \"displayName-count-one\": \"indisk rupie\",\n \"displayName-count-other\": \"indiska rupier\",\n symbol: \"INR\",\n \"symbol-alt-narrow\": \"₹\"\n },\n IQD: {\n displayName: \"irakisk dinar\",\n \"displayName-count-one\": \"irakisk dinar\",\n \"displayName-count-other\": \"irakiska dinarer\",\n symbol: \"IQD\"\n },\n IRR: {\n displayName: \"iransk rial\",\n \"displayName-count-one\": \"iransk rial\",\n \"displayName-count-other\": \"iranska rial\",\n symbol: \"IRR\"\n },\n ISJ: {\n displayName: \"isländsk gammal krona\",\n \"displayName-count-one\": \"isländsk gammal krona\",\n \"displayName-count-other\": \"isländska kronor (1874–1981)\",\n symbol: \"ISJ\"\n },\n ISK: {\n displayName: \"isländsk krona\",\n \"displayName-count-one\": \"isländsk krona\",\n \"displayName-count-other\": \"isländska kronor\",\n symbol: \"Ikr\",\n \"symbol-alt-narrow\": \"kr\"\n },\n ITL: {\n displayName: \"italiensk lire\",\n \"displayName-count-one\": \"italiensk lire\",\n \"displayName-count-other\": \"italienska lire\",\n symbol: \"ITL\"\n },\n JMD: {\n displayName: \"jamaicansk dollar\",\n \"displayName-count-one\": \"Jamaica-dollar\",\n \"displayName-count-other\": \"jamaicansk dollar\",\n symbol: \"JM$\",\n \"symbol-alt-narrow\": \"$\"\n },\n JOD: {\n displayName: \"jordansk dinar\",\n \"displayName-count-one\": \"jordansk dinar\",\n \"displayName-count-other\": \"jordanska dinarer\",\n symbol: \"JOD\"\n },\n JPY: {\n displayName: \"japansk yen\",\n \"displayName-count-one\": \"japansk yen\",\n \"displayName-count-other\": \"japanska yen\",\n symbol: \"JPY\",\n \"symbol-alt-narrow\": \"¥\"\n },\n KES: {\n displayName: \"kenyansk shilling\",\n \"displayName-count-one\": \"kenyansk shilling\",\n \"displayName-count-other\": \"kenyanska shilling\",\n symbol: \"KES\"\n },\n KGS: {\n displayName: \"kirgizisk som\",\n \"displayName-count-one\": \"kirgizisk som\",\n \"displayName-count-other\": \"kirgiziska somer\",\n symbol: \"KGS\"\n },\n KHR: {\n displayName: \"kambodjansk riel\",\n \"displayName-count-one\": \"kambodjansk riel\",\n \"displayName-count-other\": \"kambodjanska riel\",\n symbol: \"KHR\",\n \"symbol-alt-narrow\": \"៛\"\n },\n KMF: {\n displayName: \"komorisk franc\",\n \"displayName-count-one\": \"komorisk franc\",\n \"displayName-count-other\": \"komoriska franc\",\n symbol: \"KMF\",\n \"symbol-alt-narrow\": \"CF\"\n },\n KPW: {\n displayName: \"nordkoreansk won\",\n \"displayName-count-one\": \"nordkoreansk won\",\n \"displayName-count-other\": \"nordkoreanska won\",\n symbol: \"KPW\",\n \"symbol-alt-narrow\": \"₩\"\n },\n KRH: {\n displayName: \"sydkoreansk hwan (1953–1962)\",\n \"displayName-count-one\": \"sydkoreansk hwan (1953–1962)\",\n \"displayName-count-other\": \"sydkoreanska hwan (1953–1962)\",\n symbol: \"KRH\"\n },\n KRO: {\n displayName: \"sydkoreansk won (1945–1953)\",\n \"displayName-count-one\": \"sydkoreansk won (1945–1953)\",\n \"displayName-count-other\": \"sydkoreanska won (1945–1953)\",\n symbol: \"KRO\"\n },\n KRW: {\n displayName: \"sydkoreansk won\",\n \"displayName-count-one\": \"sydkoreansk won\",\n \"displayName-count-other\": \"sydkoreanska won\",\n symbol: \"KRW\",\n \"symbol-alt-narrow\": \"₩\"\n },\n KWD: {\n displayName: \"kuwaitisk dinar\",\n \"displayName-count-one\": \"kuwaitisk dinar\",\n \"displayName-count-other\": \"kuwaitiska dinarer\",\n symbol: \"KWD\"\n },\n KYD: {\n displayName: \"caymansk dollar\",\n \"displayName-count-one\": \"caymansk dollar\",\n \"displayName-count-other\": \"caymansk dollar\",\n symbol: \"KYD\",\n \"symbol-alt-narrow\": \"$\"\n },\n KZT: {\n displayName: \"kazakisk tenge\",\n \"displayName-count-one\": \"kazakisk tenge\",\n \"displayName-count-other\": \"kazakiska tenge\",\n symbol: \"KZT\",\n \"symbol-alt-narrow\": \"₸\"\n },\n LAK: {\n displayName: \"laotisk kip\",\n \"displayName-count-one\": \"laotisk kip\",\n \"displayName-count-other\": \"laotiska kip\",\n symbol: \"LAK\",\n \"symbol-alt-narrow\": \"₭\"\n },\n LBP: {\n displayName: \"libanesiskt pund\",\n \"displayName-count-one\": \"libanesiskt pund\",\n \"displayName-count-other\": \"libanesiska pund\",\n symbol: \"LBP\",\n \"symbol-alt-narrow\": \"L£\"\n },\n LKR: {\n displayName: \"srilankesisk rupie\",\n \"displayName-count-one\": \"srilankesisk rupie\",\n \"displayName-count-other\": \"srilankesiska rupier\",\n symbol: \"LKR\",\n \"symbol-alt-narrow\": \"Rs\"\n },\n LRD: {\n displayName: \"liberiansk dollar\",\n \"displayName-count-one\": \"liberiansk dollar\",\n \"displayName-count-other\": \"liberianska dollar\",\n symbol: \"LRD\",\n \"symbol-alt-narrow\": \"$\"\n },\n LSL: {\n displayName: \"lesothisk loti\",\n \"displayName-count-one\": \"lesothisk loti\",\n \"displayName-count-other\": \"lesothiska lotier\",\n symbol: \"LSL\"\n },\n LTL: {\n displayName: \"litauisk litas\",\n \"displayName-count-one\": \"litauisk litas\",\n \"displayName-count-other\": \"litauiska litai\",\n symbol: \"LTL\",\n \"symbol-alt-narrow\": \"Lt\"\n },\n LTT: {\n displayName: \"litauisk talonas\",\n \"displayName-count-one\": \"litauisk talonas\",\n \"displayName-count-other\": \"litauiska talonas\",\n symbol: \"LTT\"\n },\n LUC: {\n displayName: \"luxemburgsk franc (konvertibel)\",\n \"displayName-count-one\": \"luxemburgsk franc (konvertibel)\",\n \"displayName-count-other\": \"luxemburgska franc (konvertibla)\",\n symbol: \"LUC\"\n },\n LUF: {\n displayName: \"luxemburgsk franc\",\n \"displayName-count-one\": \"luxemburgsk franc\",\n \"displayName-count-other\": \"luxemburgska franc\",\n symbol: \"LUF\"\n },\n LUL: {\n displayName: \"luxemburgsk franc (finansiell)\",\n \"displayName-count-one\": \"luxemburgsk franc (finansiell)\",\n \"displayName-count-other\": \"luxemburgska franc (finansiella)\",\n symbol: \"LUL\"\n },\n LVL: {\n displayName: \"lettisk lats\",\n \"displayName-count-one\": \"lettisk lats\",\n \"displayName-count-other\": \"lettiska lati\",\n symbol: \"LVL\",\n \"symbol-alt-narrow\": \"Ls\"\n },\n LVR: {\n displayName: \"lettisk rubel\",\n \"displayName-count-one\": \"lettisk rubel\",\n \"displayName-count-other\": \"lettiska rubel\",\n symbol: \"LVR\"\n },\n LYD: {\n displayName: \"libysk dinar\",\n \"displayName-count-one\": \"libysk dinar\",\n \"displayName-count-other\": \"libyska dinarer\",\n symbol: \"LYD\"\n },\n MAD: {\n displayName: \"marockansk dirham\",\n \"displayName-count-one\": \"marockansk dirham\",\n \"displayName-count-other\": \"marockanska dirhamer\",\n symbol: \"MAD\"\n },\n MAF: {\n displayName: \"marockansk franc\",\n \"displayName-count-one\": \"marockansk franc\",\n \"displayName-count-other\": \"marockanska franc\",\n symbol: \"MAF\"\n },\n MCF: {\n displayName: \"monegaskisk franc (–2001)\",\n \"displayName-count-one\": \"monegaskisk franc (–2001)\",\n \"displayName-count-other\": \"monegaskiska franc (–2001)\",\n symbol: \"MCF\"\n },\n MDC: {\n displayName: \"moldavisk cupon (1992–1993)\",\n \"displayName-count-one\": \"moldavisk cupon (1992–1993)\",\n \"displayName-count-other\": \"moldaviska cupon (1992–1993)\",\n symbol: \"MDC\"\n },\n MDL: {\n displayName: \"moldavisk leu\",\n \"displayName-count-one\": \"moldavisk leu\",\n \"displayName-count-other\": \"moldaviska lei\",\n symbol: \"MDL\"\n },\n MGA: {\n displayName: \"madagaskisk ariary\",\n \"displayName-count-one\": \"madagaskisk ariary\",\n \"displayName-count-other\": \"madagaskiska ariary\",\n symbol: \"MGA\",\n \"symbol-alt-narrow\": \"Ar\"\n },\n MGF: {\n displayName: \"madagaskisk franc\",\n \"displayName-count-one\": \"madagaskisk franc\",\n \"displayName-count-other\": \"madagaskiska franc\",\n symbol: \"MGF\"\n },\n MKD: {\n displayName: \"makedonisk denar\",\n \"displayName-count-one\": \"makedonisk denar\",\n \"displayName-count-other\": \"makedoniska denarer\",\n symbol: \"MKD\"\n },\n MKN: {\n displayName: \"makedonisk denar (1992–1993)\",\n \"displayName-count-one\": \"makedonisk denar (1992–1993)\",\n \"displayName-count-other\": \"makedoniska denarer (1992–1993)\",\n symbol: \"MKN\"\n },\n MLF: {\n displayName: \"malisk franc\",\n \"displayName-count-one\": \"malisk franc\",\n \"displayName-count-other\": \"maliska franc\",\n symbol: \"MLF\"\n },\n MMK: {\n displayName: \"myanmarisk kyat\",\n \"displayName-count-one\": \"myanmarisk kyat\",\n \"displayName-count-other\": \"myanmariska kyat\",\n symbol: \"MMK\",\n \"symbol-alt-narrow\": \"K\"\n },\n MNT: {\n displayName: \"mongolisk tögrög\",\n \"displayName-count-one\": \"mongolisk tögrög\",\n \"displayName-count-other\": \"mongoliska tögrög\",\n symbol: \"MNT\",\n \"symbol-alt-narrow\": \"₮\"\n },\n MOP: {\n displayName: \"makanesisk pataca\",\n \"displayName-count-one\": \"makanesisk pataca\",\n \"displayName-count-other\": \"makanesiska pataca\",\n symbol: \"MOP\"\n },\n MRO: {\n displayName: \"mauretansk ouguiya (1973–2017)\",\n \"displayName-count-one\": \"mauretansk ouguiya (1973–2017)\",\n \"displayName-count-other\": \"mauretanska ouguiya (1973–2017)\",\n symbol: \"MRO\"\n },\n MRU: {\n displayName: \"mauretansk ouguiya\",\n \"displayName-count-one\": \"mauretansk ouguiya\",\n \"displayName-count-other\": \"mauretanska ouguiya\",\n symbol: \"MRU\"\n },\n MTL: {\n displayName: \"maltesisk lire\",\n \"displayName-count-one\": \"maltesisk lire\",\n \"displayName-count-other\": \"maltesiska lire\",\n symbol: \"MTL\"\n },\n MTP: {\n displayName: \"maltesiskt pund\",\n \"displayName-count-one\": \"maltesiskt pund\",\n \"displayName-count-other\": \"maltesiska pund\",\n symbol: \"MTP\"\n },\n MUR: {\n displayName: \"mauritisk rupie\",\n \"displayName-count-one\": \"mauritisk rupie\",\n \"displayName-count-other\": \"mauritiska rupier\",\n symbol: \"MUR\",\n \"symbol-alt-narrow\": \"Rs\"\n },\n MVP: {\n displayName: \"maldivisk rupie\",\n \"displayName-count-one\": \"maldivisk rupie\",\n \"displayName-count-other\": \"maldiviska rupier\",\n symbol: \"MVP\"\n },\n MVR: {\n displayName: \"maldivisk rufiyaa\",\n \"displayName-count-one\": \"maldivisk rufiyaa\",\n \"displayName-count-other\": \"maldiviska rufiyer\",\n symbol: \"MVR\"\n },\n MWK: {\n displayName: \"malawisk kwacha\",\n \"displayName-count-one\": \"malawisk kwacha\",\n \"displayName-count-other\": \"malawiska kwacha\",\n symbol: \"MWK\"\n },\n MXN: {\n displayName: \"mexikansk peso\",\n \"displayName-count-one\": \"mexikansk peso\",\n \"displayName-count-other\": \"mexikanska pesos\",\n symbol: \"MX$\",\n \"symbol-alt-narrow\": \"$\"\n },\n MXP: {\n displayName: \"mexikansk silverpeso (1861–1992)\",\n \"displayName-count-one\": \"mexikansk silverpeso (1861–1992)\",\n \"displayName-count-other\": \"mexikanska silverpesos (1861–1992)\",\n symbol: \"MXP\"\n },\n MXV: {\n displayName: \"mexikansk unidad de inversion\",\n \"displayName-count-one\": \"mexikansk unidad de inversion\",\n \"displayName-count-other\": \"mexikanska unidad de inversion\",\n symbol: \"MXV\"\n },\n MYR: {\n displayName: \"malaysisk ringgit\",\n \"displayName-count-one\": \"malaysisk ringgit\",\n \"displayName-count-other\": \"malaysiska ringgiter\",\n symbol: \"MYR\",\n \"symbol-alt-narrow\": \"RM\"\n },\n MZE: {\n displayName: \"moçambikisk escudo\",\n \"displayName-count-one\": \"moçambikisk escudo (1914–1980)\",\n \"displayName-count-other\": \"moçambikiska escudos\",\n symbol: \"MZE\"\n },\n MZM: {\n displayName: \"gammal moçambikisk metical\",\n \"displayName-count-one\": \"moçambikisk metical (1980–2006)\",\n \"displayName-count-other\": \"gammla moçambikiska metical\",\n symbol: \"MZM\"\n },\n MZN: {\n displayName: \"moçambikisk metical\",\n \"displayName-count-one\": \"moçambikisk metical\",\n \"displayName-count-other\": \"moçambikiska metical\",\n symbol: \"MZN\"\n },\n NAD: {\n displayName: \"namibisk dollar\",\n \"displayName-count-one\": \"namibisk dollar\",\n \"displayName-count-other\": \"namibiska dollar\",\n symbol: \"NAD\",\n \"symbol-alt-narrow\": \"$\"\n },\n NGN: {\n displayName: \"nigeriansk naira\",\n \"displayName-count-one\": \"nigeriansk naira\",\n \"displayName-count-other\": \"nigerianska naira\",\n symbol: \"NGN\",\n \"symbol-alt-narrow\": \"₦\"\n },\n NIC: {\n displayName: \"nicaraguansk córdoba (1998–1991)\",\n \"displayName-count-one\": \"nicaraguansk córdoba (1998–1991)\",\n \"displayName-count-other\": \"nicaraguanska córdobas (1988–1991)\",\n symbol: \"NIC\"\n },\n NIO: {\n displayName: \"nicaraguansk córdoba\",\n \"displayName-count-one\": \"nicaraguansk córdoba\",\n \"displayName-count-other\": \"nicaraguanska córdobas\",\n symbol: \"NIO\",\n \"symbol-alt-narrow\": \"C$\"\n },\n NLG: {\n displayName: \"nederländsk gulden\",\n \"displayName-count-one\": \"nederländsk gulden\",\n \"displayName-count-other\": \"nederländska gulden\",\n symbol: \"NLG\"\n },\n NOK: {\n displayName: \"norsk krona\",\n \"displayName-count-one\": \"norsk krona\",\n \"displayName-count-other\": \"norska kronor\",\n symbol: \"Nkr\",\n \"symbol-alt-narrow\": \"kr\"\n },\n NPR: {\n displayName: \"nepalesisk rupie\",\n \"displayName-count-one\": \"nepalesisk rupie\",\n \"displayName-count-other\": \"nepalesiska rupier\",\n symbol: \"NPR\",\n \"symbol-alt-narrow\": \"Rs\"\n },\n NZD: {\n displayName: \"nyzeeländsk dollar\",\n \"displayName-count-one\": \"nyzeeländsk dollar\",\n \"displayName-count-other\": \"nyzeeländska dollar\",\n symbol: \"NZD\",\n \"symbol-alt-narrow\": \"$\"\n },\n OMR: {\n displayName: \"omansk rial\",\n \"displayName-count-one\": \"omansk rial\",\n \"displayName-count-other\": \"omanska rial\",\n symbol: \"OMR\"\n },\n PAB: {\n displayName: \"panamansk balboa\",\n \"displayName-count-one\": \"panamansk balboa\",\n \"displayName-count-other\": \"panamanska balboa\",\n symbol: \"PAB\"\n },\n PEI: {\n displayName: \"peruansk inti\",\n \"displayName-count-one\": \"peruansk inti\",\n \"displayName-count-other\": \"peruanska intier\",\n symbol: \"PEI\"\n },\n PEN: {\n displayName: \"peruansk sol\",\n \"displayName-count-one\": \"peruansk sol\",\n \"displayName-count-other\": \"peruanska sol\",\n symbol: \"PEN\"\n },\n PES: {\n displayName: \"peruansk sol (1863–1965)\",\n \"displayName-count-one\": \"peruansk sol (1863–1965)\",\n \"displayName-count-other\": \"peruanska sol (1863–1965)\",\n symbol: \"PES\"\n },\n PGK: {\n displayName: \"papuansk kina\",\n \"displayName-count-one\": \"papuansk kina\",\n \"displayName-count-other\": \"papuanska kinor\",\n symbol: \"PGK\"\n },\n PHP: {\n displayName: \"filippinsk peso\",\n \"displayName-count-one\": \"filippinsk peso\",\n \"displayName-count-other\": \"filippinska pesos\",\n symbol: \"PHP\",\n \"symbol-alt-narrow\": \"₱\"\n },\n PKR: {\n displayName: \"pakistansk rupie\",\n \"displayName-count-one\": \"pakistansk rupie\",\n \"displayName-count-other\": \"pakistanska rupier\",\n symbol: \"PKR\",\n \"symbol-alt-narrow\": \"Rs\"\n },\n PLN: {\n displayName: \"polsk zloty\",\n \"displayName-count-one\": \"polsk zloty\",\n \"displayName-count-other\": \"polska zloty\",\n symbol: \"PLN\",\n \"symbol-alt-narrow\": \"zł\"\n },\n PLZ: {\n displayName: \"polsk zloty (1950–1995)\",\n \"displayName-count-one\": \"polsk zloty (1950–1995)\",\n \"displayName-count-other\": \"polska zloty (1950–1995)\",\n symbol: \"PLZ\"\n },\n PTE: {\n displayName: \"portugisisk escudo\",\n \"displayName-count-one\": \"portugisisk escudo\",\n \"displayName-count-other\": \"portugisiska escudos\",\n symbol: \"PTE\"\n },\n PYG: {\n displayName: \"paraguayansk guarani\",\n \"displayName-count-one\": \"paraguayansk guarani\",\n \"displayName-count-other\": \"paraguayska guarani\",\n symbol: \"PYG\",\n \"symbol-alt-narrow\": \"₲\"\n },\n QAR: {\n displayName: \"qatarisk rial\",\n \"displayName-count-one\": \"qatarisk rial\",\n \"displayName-count-other\": \"qatariska rial\",\n symbol: \"QAR\"\n },\n RHD: {\n displayName: \"rhodesisk dollar\",\n \"displayName-count-one\": \"rhodesisk dollar\",\n \"displayName-count-other\": \"rhodesiska dollar\",\n symbol: \"RHD\"\n },\n ROL: {\n displayName: \"rumänsk leu (1952–2005)\",\n \"displayName-count-one\": \"rumänsk leu (1952–2005)\",\n \"displayName-count-other\": \"rumänska leu (1952–2005)\",\n symbol: \"ROL\"\n },\n RON: {\n displayName: \"rumänsk leu\",\n \"displayName-count-one\": \"rumänsk leu\",\n \"displayName-count-other\": \"rumänska lei\",\n symbol: \"RON\",\n \"symbol-alt-narrow\": \"L\"\n },\n RSD: {\n displayName: \"serbisk dinar\",\n \"displayName-count-one\": \"serbisk dinar\",\n \"displayName-count-other\": \"serbiska dinarer\",\n symbol: \"RSD\"\n },\n RUB: {\n displayName: \"rysk rubel\",\n \"displayName-count-one\": \"rysk rubel\",\n \"displayName-count-other\": \"ryska rubel\",\n symbol: \"RUB\",\n \"symbol-alt-narrow\": \"₽\"\n },\n RUR: {\n displayName: \"rysk rubel (1991–1998)\",\n \"displayName-count-one\": \"rysk rubel (1991–1998)\",\n \"displayName-count-other\": \"ryska rubel (1991–1998)\",\n symbol: \"RUR\"\n },\n RWF: {\n displayName: \"rwandisk franc\",\n \"displayName-count-one\": \"rwandisk franc\",\n \"displayName-count-other\": \"rwandiska franc\",\n symbol: \"RWF\",\n \"symbol-alt-narrow\": \"RF\"\n },\n SAR: {\n displayName: \"saudisk riyal\",\n \"displayName-count-one\": \"saudisk riyal\",\n \"displayName-count-other\": \"saudiska riyal\",\n symbol: \"SAR\"\n },\n SBD: {\n displayName: \"Salomondollar\",\n \"displayName-count-one\": \"Salomondollar\",\n \"displayName-count-other\": \"Salomondollar\",\n symbol: \"SBD\",\n \"symbol-alt-narrow\": \"$\"\n },\n SCR: {\n displayName: \"seychellisk rupie\",\n \"displayName-count-one\": \"seychellisk rupie\",\n \"displayName-count-other\": \"seychelliska rupier\",\n symbol: \"SCR\"\n },\n SDD: {\n displayName: \"sudansk dinar (1992–2007)\",\n \"displayName-count-one\": \"sudansk dinar (1992–2007)\",\n \"displayName-count-other\": \"sudanska dinarer (1992–2007)\",\n symbol: \"SDD\"\n },\n SDG: {\n displayName: \"sudanesiskt pund\",\n \"displayName-count-one\": \"sudanesiskt pund\",\n \"displayName-count-other\": \"sudanesiska pund\",\n symbol: \"SDG\"\n },\n SDP: {\n displayName: \"sudanskt pund (1916–1992)\",\n \"displayName-count-one\": \"sudanskt pund (1916–1992)\",\n \"displayName-count-other\": \"sudanska pund (1916–1992)\",\n symbol: \"SDP\"\n },\n SEK: {\n displayName: \"svensk krona\",\n \"displayName-count-one\": \"svensk krona\",\n \"displayName-count-other\": \"svenska kronor\",\n symbol: \"kr\",\n \"symbol-alt-narrow\": \"kr\"\n },\n SGD: {\n displayName: \"singaporiansk dollar\",\n \"displayName-count-one\": \"singaporiansk dollar\",\n \"displayName-count-other\": \"singaporianska dollar\",\n symbol: \"SGD\",\n \"symbol-alt-narrow\": \"$\"\n },\n SHP: {\n displayName: \"sankthelenskt pund\",\n \"displayName-count-one\": \"sankthelenskt pund\",\n \"displayName-count-other\": \"sankthelenskt pund\",\n symbol: \"SHP\",\n \"symbol-alt-narrow\": \"£\"\n },\n SIT: {\n displayName: \"slovensk tolar\",\n \"displayName-count-one\": \"slovensk tolar\",\n \"displayName-count-other\": \"slovenska tolar\",\n symbol: \"SIT\"\n },\n SKK: {\n displayName: \"slovakisk koruna\",\n \"displayName-count-one\": \"slovakisk krona\",\n \"displayName-count-other\": \"slovakiska korunor\",\n symbol: \"SKK\"\n },\n SLE: {\n displayName: \"SLE\",\n symbol: \"SLE\"\n },\n SLL: {\n displayName: \"sierraleonsk leone\",\n \"displayName-count-one\": \"sierraleonsk leone\",\n \"displayName-count-other\": \"sierraleonska leoner\",\n symbol: \"SLL\"\n },\n SOS: {\n displayName: \"somalisk shilling\",\n \"displayName-count-one\": \"somalisk shilling\",\n \"displayName-count-other\": \"somaliska shilling\",\n symbol: \"SOS\"\n },\n SRD: {\n displayName: \"surinamesisk dollar\",\n \"displayName-count-one\": \"surinamesisk dollar\",\n \"displayName-count-other\": \"surinamesiska dollar\",\n symbol: \"SRD\",\n \"symbol-alt-narrow\": \"$\"\n },\n SRG: {\n displayName: \"surinamesisk gulden\",\n \"displayName-count-one\": \"surinamesisk gulden\",\n \"displayName-count-other\": \"surinamesiska gulden\",\n symbol: \"SRG\"\n },\n SSP: {\n displayName: \"sydsudanesiskt pund\",\n \"displayName-count-one\": \"sydsudanesiskt pund\",\n \"displayName-count-other\": \"sydsudanesiska pund\",\n symbol: \"SSP\",\n \"symbol-alt-narrow\": \"£\"\n },\n STD: {\n displayName: \"saotomeansk dobra (1977–2017)\",\n \"displayName-count-one\": \"saotomeansk dobra (1977–2017)\",\n \"displayName-count-other\": \"saotomeanska dobra (1977–2017)\",\n symbol: \"STD\"\n },\n STN: {\n displayName: \"saotomeansk dobra\",\n \"displayName-count-one\": \"saotomeansk dobra\",\n \"displayName-count-other\": \"saotomeanska dobra\",\n symbol: \"STN\",\n \"symbol-alt-narrow\": \"Db\"\n },\n SUR: {\n displayName: \"sovjetisk rubel\",\n \"displayName-count-one\": \"sovjetisk rubel\",\n \"displayName-count-other\": \"sovjetiska rubler\",\n symbol: \"SUR\"\n },\n SVC: {\n displayName: \"salvadoransk colón\",\n \"displayName-count-one\": \"salvadoransk colón\",\n \"displayName-count-other\": \"salvadoranska colón\",\n symbol: \"SVC\"\n },\n SYP: {\n displayName: \"syriskt pund\",\n \"displayName-count-one\": \"syriskt pund\",\n \"displayName-count-other\": \"syriska pund\",\n symbol: \"SYP\",\n \"symbol-alt-narrow\": \"£\"\n },\n SZL: {\n displayName: \"swaziländsk lilangeni\",\n \"displayName-count-one\": \"swaziländsk lilangeni\",\n \"displayName-count-other\": \"swaziländska lilangeni\",\n symbol: \"SZL\"\n },\n THB: {\n displayName: \"thailändsk baht\",\n \"displayName-count-one\": \"thailändsk baht\",\n \"displayName-count-other\": \"thailändska baht\",\n symbol: \"THB\",\n \"symbol-alt-narrow\": \"฿\"\n },\n TJR: {\n displayName: \"tadzjikisk rubel\",\n \"displayName-count-one\": \"tadzjikisk rubel\",\n \"displayName-count-other\": \"tadzjikiska rubler\",\n symbol: \"TJR\"\n },\n TJS: {\n displayName: \"tadzjikisk somoni\",\n \"displayName-count-one\": \"tadzjikisk somoni\",\n \"displayName-count-other\": \"tadzjikiska somoni\",\n symbol: \"TJS\"\n },\n TMM: {\n displayName: \"turkmenistansk manat (1993–2009)\",\n \"displayName-count-one\": \"turkmenistansk manat (1993–2009)\",\n \"displayName-count-other\": \"turkmenistanska manat (1993–2009)\",\n symbol: \"TMM\"\n },\n TMT: {\n displayName: \"turkmenistansk manat\",\n \"displayName-count-one\": \"turkmenistansk manat\",\n \"displayName-count-other\": \"turkmenistanska manat\",\n symbol: \"TMT\"\n },\n TND: {\n displayName: \"tunisisk dinar\",\n \"displayName-count-one\": \"tunisisk dinar\",\n \"displayName-count-other\": \"tunisiska dinarer\",\n symbol: \"TND\"\n },\n TOP: {\n displayName: \"tongansk paʻanga\",\n \"displayName-count-one\": \"tongansk paʻanga\",\n \"displayName-count-other\": \"tonganska paʻanga\",\n symbol: \"TOP\",\n \"symbol-alt-narrow\": \"T$\"\n },\n TPE: {\n displayName: \"östtimoresisk escudo\",\n \"displayName-count-one\": \"östtimoresisk escudo\",\n \"displayName-count-other\": \"östtimoresiska escudos\",\n symbol: \"TPE\"\n },\n TRL: {\n displayName: \"turkisk lire (1922–2005)\",\n \"displayName-count-one\": \"turkisk lire (1922–2005)\",\n \"displayName-count-other\": \"turkiska lire (1922–2005)\",\n symbol: \"TRL\"\n },\n TRY: {\n displayName: \"turkisk lira\",\n \"displayName-count-one\": \"turkisk lira\",\n \"displayName-count-other\": \"turkiska lira\",\n symbol: \"TRY\",\n \"symbol-alt-narrow\": \"₺\",\n \"symbol-alt-variant\": \"TL\"\n },\n TTD: {\n displayName: \"Trinidaddollar\",\n \"displayName-count-one\": \"Trinidaddollar\",\n \"displayName-count-other\": \"Trinidaddollar\",\n symbol: \"TTD\",\n \"symbol-alt-narrow\": \"$\"\n },\n TWD: {\n displayName: \"taiwanesisk dollar\",\n \"displayName-count-one\": \"taiwanesisk dollar\",\n \"displayName-count-other\": \"taiwanesisk dollar\",\n symbol: \"TWD\",\n \"symbol-alt-narrow\": \"NT$\"\n },\n TZS: {\n displayName: \"tanzanisk shilling\",\n \"displayName-count-one\": \"tanzanisk shilling\",\n \"displayName-count-other\": \"tanzaniska shilling\",\n symbol: \"TZS\"\n },\n UAH: {\n displayName: \"ukrainsk hryvnia\",\n \"displayName-count-one\": \"ukrainsk hryvnia\",\n \"displayName-count-other\": \"ukrainska hryvnia\",\n symbol: \"UAH\",\n \"symbol-alt-narrow\": \"₴\"\n },\n UAK: {\n displayName: \"ukrainsk karbovanetz\",\n \"displayName-count-one\": \"ukrainsk karbovanetz (1992–1996)\",\n \"displayName-count-other\": \"ukrainska karbovanetz (1992–1996)\",\n symbol: \"UAK\"\n },\n UGS: {\n displayName: \"ugandisk shilling (1966–1987)\",\n \"displayName-count-one\": \"ugandisk shilling (1966–1987)\",\n \"displayName-count-other\": \"ugandiska shilling (1966–1987)\",\n symbol: \"UGS\"\n },\n UGX: {\n displayName: \"ugandisk shilling\",\n \"displayName-count-one\": \"ugandisk shilling\",\n \"displayName-count-other\": \"ugandiska shilling\",\n symbol: \"UGX\"\n },\n USD: {\n displayName: \"amerikansk dollar\",\n \"displayName-count-one\": \"amerikansk dollar\",\n \"displayName-count-other\": \"amerikansk dollar\",\n symbol: \"US$\",\n \"symbol-alt-narrow\": \"$\"\n },\n USN: {\n displayName: \"US-dollar (nästa dag)\",\n \"displayName-count-one\": \"US-dollar (nästa dag)\",\n \"displayName-count-other\": \"US-dollar (nästa dag)\",\n symbol: \"USN\"\n },\n USS: {\n displayName: \"US-dollar (samma dag)\",\n \"displayName-count-one\": \"US-dollar (samma dag)\",\n \"displayName-count-other\": \"US-dollar (samma dag)\",\n symbol: \"USS\"\n },\n UYI: {\n displayName: \"uruguayansk peso en unidades indexadas\",\n \"displayName-count-one\": \"uruguayansk peso en unidades indexadas\",\n \"displayName-count-other\": \"uruguayanska pesos en unidades indexadas\",\n symbol: \"UYI\"\n },\n UYP: {\n displayName: \"uruguayansk peso (1975–1993)\",\n \"displayName-count-one\": \"uruguayansk peso (1975–1993)\",\n \"displayName-count-other\": \"uruguayanska pesos (1975–1993)\",\n symbol: \"UYP\"\n },\n UYU: {\n displayName: \"uruguayansk peso\",\n \"displayName-count-one\": \"uruguayansk peso\",\n \"displayName-count-other\": \"uruguayanska pesos\",\n symbol: \"UYU\",\n \"symbol-alt-narrow\": \"$\"\n },\n UYW: {\n displayName: \"uruguayansk indexenhet för nominell lön\",\n \"displayName-count-one\": \"uruguayansk indexenhet för nominell lön\",\n \"displayName-count-other\": \"uruguayansk indexenhet för nominell lön\",\n symbol: \"UYW\"\n },\n UZS: {\n displayName: \"uzbekisk sum\",\n \"displayName-count-one\": \"uzbekisk sum\",\n \"displayName-count-other\": \"uzbekiska sum\",\n symbol: \"UZS\"\n },\n VEB: {\n displayName: \"venezuelansk bolivar (1871–2008)\",\n \"displayName-count-one\": \"venezuelansk bolivar (1871–2008)\",\n \"displayName-count-other\": \"venezuelanska bolivar (1871–2008)\",\n symbol: \"VEB\"\n },\n VED: {\n displayName: \"VED\",\n symbol: \"VED\"\n },\n VEF: {\n displayName: \"venezuelansk bolívar (2008–2018)\",\n \"displayName-count-one\": \"venezuelansk bolívar (2008–2018)\",\n \"displayName-count-other\": \"venezuelanska bolívar (2008–2018)\",\n symbol: \"VEF\",\n \"symbol-alt-narrow\": \"Bs\"\n },\n VES: {\n displayName: \"venezuelansk bolívar\",\n \"displayName-count-one\": \"venezuelansk bolívar\",\n \"displayName-count-other\": \"venezuelanska bolívar\",\n symbol: \"VES\"\n },\n VND: {\n displayName: \"vietnamesisk dong\",\n \"displayName-count-one\": \"vietnamesisk dong\",\n \"displayName-count-other\": \"vietnamesiska dong\",\n symbol: \"VND\",\n \"symbol-alt-narrow\": \"₫\"\n },\n VNN: {\n displayName: \"vietnamesisk dong (1978–1985)\",\n \"displayName-count-one\": \"vietnamesisk dong (1978–1985)\",\n \"displayName-count-other\": \"vietnamesiska dong (1978–1985)\",\n symbol: \"VNN\"\n },\n VUV: {\n displayName: \"vanuatisk vatu\",\n \"displayName-count-one\": \"vanuatisk vatu\",\n \"displayName-count-other\": \"vanuatiska vatu\",\n symbol: \"VUV\"\n },\n WST: {\n displayName: \"västsamoansk tala\",\n \"displayName-count-one\": \"västsamoansk tala\",\n \"displayName-count-other\": \"västsamoanska tala\",\n symbol: \"WST\"\n },\n XAF: {\n displayName: \"centralafrikansk franc\",\n \"displayName-count-one\": \"centralafrikansk franc\",\n \"displayName-count-other\": \"centralafrikanska franc\",\n symbol: \"FCFA\"\n },\n XAG: {\n displayName: \"silver\",\n \"displayName-count-one\": \"uns silver\",\n \"displayName-count-other\": \"silveruns\",\n symbol: \"XAG\"\n },\n XAU: {\n displayName: \"guld\",\n \"displayName-count-one\": \"uns guld\",\n \"displayName-count-other\": \"gulduns\",\n symbol: \"XAU\"\n },\n XBA: {\n displayName: \"europeisk kompositenhet\",\n \"displayName-count-one\": \"europeisk kompositenhet\",\n \"displayName-count-other\": \"europeiska kompositenheter\",\n symbol: \"XBA\"\n },\n XBB: {\n displayName: \"europeisk monetär enhet\",\n \"displayName-count-one\": \"europeisk monetär enhet\",\n \"displayName-count-other\": \"europeiska monetära enheter\",\n symbol: \"XBB\"\n },\n XBC: {\n displayName: \"europeisk kontoenhet (XBC)\",\n \"displayName-count-one\": \"europeisk kontoenhet (XBC)\",\n \"displayName-count-other\": \"europeiska kontoenheter (XBC)\",\n symbol: \"XBC\"\n },\n XBD: {\n displayName: \"europeisk kontoenhet (XBD)\",\n \"displayName-count-one\": \"europeisk kontoenhet (XBD)\",\n \"displayName-count-other\": \"europeiska kontoenheter (XBD)\",\n symbol: \"XBD\"\n },\n XCD: {\n displayName: \"östkaribisk dollar\",\n \"displayName-count-one\": \"östkaribisk dollar\",\n \"displayName-count-other\": \"östkaribiska dollar\",\n symbol: \"EC$\",\n \"symbol-alt-narrow\": \"$\"\n },\n XDR: {\n displayName: \"IMF särskild dragningsrätt\",\n \"displayName-count-one\": \"IMF särskild dragningsrätt\",\n \"displayName-count-other\": \"IMF särskilda dragningsrätter\",\n symbol: \"XDR\"\n },\n XEU: {\n displayName: \"europeisk valutaenhet\",\n \"displayName-count-one\": \"europeisk valutaenhet\",\n \"displayName-count-other\": \"europeiska valutaenheter\",\n symbol: \"XEU\"\n },\n XFO: {\n displayName: \"fransk guldfranc\",\n \"displayName-count-one\": \"fransk guldfranc\",\n \"displayName-count-other\": \"franska guldfranc\",\n symbol: \"XFO\"\n },\n XFU: {\n displayName: \"internationella järnvägsunionens franc\",\n \"displayName-count-one\": \"internationella järnvägsunionens franc\",\n \"displayName-count-other\": \"internationella järnvägsunionens franc\",\n symbol: \"XFU\"\n },\n XOF: {\n displayName: \"västafrikansk franc\",\n \"displayName-count-one\": \"västafrikansk franc\",\n \"displayName-count-other\": \"västafrikanska franc\",\n symbol: \"F CFA\"\n },\n XPD: {\n displayName: \"palladium\",\n \"displayName-count-one\": \"uns palladium\",\n \"displayName-count-other\": \"palladium\",\n symbol: \"XPD\"\n },\n XPF: {\n displayName: \"CFP-franc\",\n \"displayName-count-one\": \"CFP-franc\",\n \"displayName-count-other\": \"CFP-franc\",\n symbol: \"CFPF\"\n },\n XPT: {\n displayName: \"platina\",\n \"displayName-count-one\": \"uns platina\",\n \"displayName-count-other\": \"platina\",\n symbol: \"XPT\"\n },\n XRE: {\n displayName: \"RINET-fond\",\n \"displayName-count-one\": \"RINET-fond\",\n \"displayName-count-other\": \"RINET-fond\",\n symbol: \"XRE\"\n },\n XSU: {\n displayName: \"latinamerikansk sucre\",\n \"displayName-count-one\": \"latinamerikansk sucre\",\n \"displayName-count-other\": \"latinamerikanska sucre\",\n symbol: \"XSU\"\n },\n XTS: {\n displayName: \"testvalutaenhet\",\n \"displayName-count-one\": \"testvalutaenhet\",\n \"displayName-count-other\": \"testvalutaenheter\",\n symbol: \"XTS\"\n },\n XUA: {\n displayName: \"afrikansk kontoenhet\",\n \"displayName-count-one\": \"afrikansk kontoenhet\",\n \"displayName-count-other\": \"afrikanska kontoenheter\",\n symbol: \"XUA\"\n },\n XXX: {\n displayName: \"okänd valuta\",\n \"displayName-count-one\": \"(okänd valutaenhet)\",\n \"displayName-count-other\": \"(okända valutaenheter)\",\n symbol: \"¤\"\n },\n YDD: {\n displayName: \"jemenitisk dinar\",\n \"displayName-count-one\": \"jemenitisk dinar\",\n \"displayName-count-other\": \"jemenitiska dinarer\",\n symbol: \"YDD\"\n },\n YER: {\n displayName: \"jemenitisk rial\",\n \"displayName-count-one\": \"jemenitisk rial\",\n \"displayName-count-other\": \"jemenitiska rial\",\n symbol: \"YER\"\n },\n YUD: {\n displayName: \"jugoslavisk dinar (1966–1990)\",\n \"displayName-count-one\": \"jugoslavisk dinar (1966–1990)\",\n \"displayName-count-other\": \"jugoslaviska dinarer (1966–1990)\",\n symbol: \"YUD\"\n },\n YUM: {\n displayName: \"jugoslavisk dinar (1994–2002)\",\n \"displayName-count-one\": \"jugoslavisk dinar (1994–2002)\",\n \"displayName-count-other\": \"jugoslaviska dinarer (1994–2002)\",\n symbol: \"YUM\"\n },\n YUN: {\n displayName: \"jugoslavisk dinar (1990–1992)\",\n \"displayName-count-one\": \"jugoslavisk dinar (1990–1992)\",\n \"displayName-count-other\": \"jugoslaviska dinarer (1990–1992)\",\n symbol: \"YUN\"\n },\n YUR: {\n displayName: \"jugoslavisk dinar (1992–1993)\",\n \"displayName-count-one\": \"jugoslavisk dinar (1992–1993)\",\n \"displayName-count-other\": \"jugoslaviska dinarer (1992–1993)\",\n symbol: \"YUR\"\n },\n ZAL: {\n displayName: \"sydafrikansk rand (finansiell)\",\n \"displayName-count-one\": \"sydafrikansk rand (finansiell)\",\n \"displayName-count-other\": \"sydafrikanska rand (finansiella)\",\n symbol: \"ZAL\"\n },\n ZAR: {\n displayName: \"sydafrikansk rand\",\n \"displayName-count-one\": \"sydafrikansk rand\",\n \"displayName-count-other\": \"sydafrikanska rand\",\n symbol: \"ZAR\",\n \"symbol-alt-narrow\": \"R\"\n },\n ZMK: {\n displayName: \"zambisk kwacha (1968–2012)\",\n \"displayName-count-one\": \"zambisk kwacha (1968–2012)\",\n \"displayName-count-other\": \"zambiska kwacha (1968–2012)\",\n symbol: \"ZMK\"\n },\n ZMW: {\n displayName: \"zambisk kwacha\",\n \"displayName-count-one\": \"zambisk kwacha\",\n \"displayName-count-other\": \"zambiska kwacha\",\n symbol: \"ZMW\",\n \"symbol-alt-narrow\": \"ZK\"\n },\n ZRN: {\n displayName: \"zairisk ny zaire\",\n \"displayName-count-one\": \"zaïrisk ny zaïre\",\n \"displayName-count-other\": \"zaïriska nya zaïre\",\n symbol: \"ZRN\"\n },\n ZRZ: {\n displayName: \"zairisk zaire\",\n \"displayName-count-one\": \"zaïrisk zaïre\",\n \"displayName-count-other\": \"zaïriska zaïre\",\n symbol: \"ZRZ\"\n },\n ZWD: {\n displayName: \"Zimbabwe-dollar\",\n \"displayName-count-one\": \"Zimbabwe-dollar\",\n \"displayName-count-other\": \"Zimbabwe-dollar\",\n symbol: \"ZWD\"\n },\n ZWL: {\n displayName: \"Zimbabwe-dollar (2009)\",\n \"displayName-count-one\": \"Zimbabwe-dollar (2009)\",\n \"displayName-count-other\": \"Zimbabwe-dollar (2009)\",\n symbol: \"ZWL\"\n },\n ZWR: {\n displayName: \"Zimbabwe-dollar (2008)\",\n \"displayName-count-one\": \"Zimbabwe-dollar (2008)\",\n \"displayName-count-other\": \"Zimbabwe-dollar (2008)\",\n symbol: \"ZWR\"\n }\n },\n localeCurrency: \"SEK\"\n },\n calendar: {\n patterns: {\n d: \"y-MM-dd\",\n D: \"EEEE d MMMM y\",\n m: \"d MMM\",\n M: \"d MMMM\",\n y: \"MMM y\",\n Y: \"MMMM y\",\n F: \"EEEE d MMMM y HH:mm:ss\",\n g: \"y-MM-dd HH:mm\",\n G: \"y-MM-dd HH:mm:ss\",\n t: \"HH:mm\",\n T: \"HH:mm:ss\",\n s: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\n u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\"\n },\n dateTimeFormats: {\n full: \"{1} {0}\",\n long: \"{1} {0}\",\n medium: \"{1} {0}\",\n short: \"{1} {0}\",\n availableFormats: {\n Bh: \"h B\",\n Bhm: \"h:mm B\",\n Bhms: \"h:mm:ss B\",\n d: \"d\",\n E: \"ccc\",\n EBhm: \"E h:mm B\",\n EBhms: \"E h:mm:ss B\",\n Ed: \"E d\",\n Ehm: \"E h:mm a\",\n EHm: \"E HH:mm\",\n Ehms: \"E h:mm:ss a\",\n EHms: \"E HH:mm:ss\",\n Gy: \"y G\",\n GyMd: \"y-MM-dd GGGGG\",\n GyMMM: \"MMM y G\",\n GyMMMd: \"d MMM y G\",\n GyMMMEd: \"E d MMM y G\",\n h: \"h a\",\n H: \"HH\",\n hm: \"h:mm a\",\n Hm: \"HH:mm\",\n hms: \"h:mm:ss a\",\n Hms: \"HH:mm:ss\",\n hmsv: \"h:mm:ss a v\",\n Hmsv: \"HH:mm:ss v\",\n hmv: \"h:mm a v\",\n Hmv: \"HH:mm v\",\n M: \"L\",\n Md: \"d/M\",\n MEd: \"E d/M\",\n MMd: \"d/M\",\n MMdd: \"dd/MM\",\n MMM: \"LLL\",\n MMMd: \"d MMM\",\n MMMEd: \"E d MMM\",\n MMMMd: \"d MMMM\",\n MMMMEd: \"E d MMMM\",\n \"MMMMW-count-one\": \"'vecka' W 'i' MMMM\",\n \"MMMMW-count-other\": \"'vecka' W 'i' MMMM\",\n ms: \"mm:ss\",\n y: \"y\",\n yM: \"y-MM\",\n yMd: \"y-MM-dd\",\n yMEd: \"E, y-MM-dd\",\n yMM: \"y-MM\",\n yMMM: \"MMM y\",\n yMMMd: \"d MMM y\",\n yMMMEd: \"E d MMM y\",\n yMMMM: \"MMMM y\",\n yQQQ: \"QQQ y\",\n yQQQQ: \"QQQQ y\",\n \"yw-count-one\": \"'vecka' w, Y\",\n \"yw-count-other\": \"'vecka' w, Y\"\n }\n },\n timeFormats: {\n full: \"HH:mm:ss zzzz\",\n \"full-alt-variant\": \"'kl'. HH.mm.ss zzzz\",\n long: \"HH:mm:ss z\",\n \"long-alt-variant\": \"HH.mm.ss z\",\n medium: \"HH:mm:ss\",\n \"medium-alt-variant\": \"HH.mm.ss\",\n short: \"HH:mm\",\n \"short-alt-variant\": \"HH.mm\"\n },\n dateFormats: {\n full: \"EEEE d MMMM y\",\n long: \"d MMMM y\",\n medium: \"d MMM y\",\n short: \"y-MM-dd\"\n },\n days: {\n format: {\n abbreviated: [\"sön\", \"mån\", \"tis\", \"ons\", \"tors\", \"fre\", \"lör\"],\n narrow: [\"S\", \"M\", \"T\", \"O\", \"T\", \"F\", \"L\"],\n short: [\"sö\", \"må\", \"ti\", \"on\", \"to\", \"fr\", \"lö\"],\n wide: [\"söndag\", \"måndag\", \"tisdag\", \"onsdag\", \"torsdag\", \"fredag\", \"lördag\"]\n },\n \"stand-alone\": {\n abbreviated: [\"sön\", \"mån\", \"tis\", \"ons\", \"tors\", \"fre\", \"lör\"],\n narrow: [\"S\", \"M\", \"T\", \"O\", \"T\", \"F\", \"L\"],\n short: [\"sö\", \"må\", \"ti\", \"on\", \"to\", \"fr\", \"lö\"],\n wide: [\"söndag\", \"måndag\", \"tisdag\", \"onsdag\", \"torsdag\", \"fredag\", \"lördag\"]\n }\n },\n months: {\n format: {\n abbreviated: [\"jan.\", \"feb.\", \"mars\", \"apr.\", \"maj\", \"juni\", \"juli\", \"aug.\", \"sep.\", \"okt.\", \"nov.\", \"dec.\"],\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n wide: [\"januari\", \"februari\", \"mars\", \"april\", \"maj\", \"juni\", \"juli\", \"augusti\", \"september\", \"oktober\", \"november\", \"december\"]\n },\n \"stand-alone\": {\n abbreviated: [\"jan.\", \"feb.\", \"mars\", \"apr.\", \"maj\", \"juni\", \"juli\", \"aug.\", \"sep.\", \"okt.\", \"nov.\", \"dec.\"],\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n wide: [\"januari\", \"februari\", \"mars\", \"april\", \"maj\", \"juni\", \"juli\", \"augusti\", \"september\", \"oktober\", \"november\", \"december\"]\n }\n },\n quarters: {\n format: {\n abbreviated: [\"K1\", \"K2\", \"K3\", \"K4\"],\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n wide: [\"1:a kvartalet\", \"2:a kvartalet\", \"3:e kvartalet\", \"4:e kvartalet\"]\n },\n \"stand-alone\": {\n abbreviated: [\"K1\", \"K2\", \"K3\", \"K4\"],\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n wide: [\"1:a kvartalet\", \"2:a kvartalet\", \"3:e kvartalet\", \"4:e kvartalet\"]\n }\n },\n dayPeriods: {\n format: {\n abbreviated: {\n midnight: \"midnatt\",\n am: \"fm\",\n pm: \"em\",\n morning1: \"på morg.\",\n morning2: \"på förm.\",\n afternoon1: \"på efterm.\",\n evening1: \"på kvällen\",\n night1: \"på natten\"\n },\n narrow: {\n midnight: \"midn.\",\n am: \"fm\",\n pm: \"em\",\n morning1: \"på morg.\",\n morning2: \"på förm.\",\n afternoon1: \"på efterm.\",\n evening1: \"på kvällen\",\n night1: \"på natten\"\n },\n wide: {\n midnight: \"midnatt\",\n am: \"fm\",\n pm: \"em\",\n morning1: \"på morgonen\",\n morning2: \"på förmiddagen\",\n afternoon1: \"på eftermiddagen\",\n evening1: \"på kvällen\",\n night1: \"på natten\"\n }\n },\n \"stand-alone\": {\n abbreviated: {\n midnight: \"midnatt\",\n am: \"f.m.\",\n pm: \"e.m.\",\n morning1: \"morgon\",\n morning2: \"förm.\",\n afternoon1: \"efterm.\",\n evening1: \"kväll\",\n night1: \"natt\"\n },\n narrow: {\n midnight: \"midn.\",\n am: \"fm\",\n pm: \"em\",\n morning1: \"morg.\",\n morning2: \"förm.\",\n afternoon1: \"efterm.\",\n evening1: \"kväll\",\n night1: \"natt\"\n },\n wide: {\n midnight: \"midnatt\",\n am: \"förmiddag\",\n pm: \"eftermiddag\",\n morning1: \"morgon\",\n morning2: \"förmiddag\",\n afternoon1: \"eftermiddag\",\n evening1: \"kväll\",\n night1: \"natt\"\n }\n }\n },\n eras: {\n format: {\n wide: {\n \"0\": \"före Kristus\",\n \"1\": \"efter Kristus\",\n \"0-alt-variant\": \"före västerländsk tideräkning\",\n \"1-alt-variant\": \"västerländsk tideräkning\"\n },\n abbreviated: {\n \"0\": \"f.Kr.\",\n \"1\": \"e.Kr.\",\n \"0-alt-variant\": \"f.v.t.\",\n \"1-alt-variant\": \"v.t.\"\n },\n narrow: {\n \"0\": \"f.Kr.\",\n \"1\": \"e.Kr.\",\n \"0-alt-variant\": \"f.v.t.\",\n \"1-alt-variant\": \"v.t.\"\n }\n }\n },\n gmtFormat: \"GMT{0}\",\n gmtZeroFormat: \"GMT\",\n dateFields: {\n era: {\n wide: \"era\",\n short: \"era\",\n narrow: \"era\"\n },\n year: {\n wide: \"år\",\n short: \"år\",\n narrow: \"år\"\n },\n quarter: {\n wide: \"kvartal\",\n short: \"kv.\",\n narrow: \"kv.\"\n },\n month: {\n wide: \"månad\",\n short: \"m\",\n narrow: \"mån\"\n },\n week: {\n wide: \"vecka\",\n short: \"v\",\n narrow: \"v\"\n },\n weekOfMonth: {\n wide: \"vecka i månaden\",\n short: \"vk. i mån.\",\n narrow: \"vk.i mån.\"\n },\n day: {\n wide: \"dag\",\n short: \"dag\",\n narrow: \"dag\"\n },\n dayOfYear: {\n wide: \"dag under året\",\n short: \"dag under året\",\n narrow: \"dag under året\"\n },\n weekday: {\n wide: \"veckodag\",\n short: \"veckodag\",\n narrow: \"veckodag\"\n },\n weekdayOfMonth: {\n wide: \"veckodag i månad\",\n short: \"veckodag i mån.\",\n narrow: \"veckodag i mån.\"\n },\n dayperiod: {\n short: \"fm/em\",\n wide: \"fm/em\",\n narrow: \"fm/em\"\n },\n hour: {\n wide: \"timme\",\n short: \"tim\",\n narrow: \"h\"\n },\n minute: {\n wide: \"minut\",\n short: \"min\",\n narrow: \"m\"\n },\n second: {\n wide: \"sekund\",\n short: \"sek\",\n narrow: \"s\"\n },\n zone: {\n wide: \"tidszon\",\n short: \"tidszon\",\n narrow: \"tidszon\"\n },\n millisecond: {\n narrow: \"ms\",\n short: \"ms\",\n wide: \"millisekund\"\n }\n }\n },\n firstDay: 1,\n weekendRange: {\n start: 6,\n end: 0\n },\n likelySubtags: {\n sv: \"sv-Latn-SE\"\n },\n currencyData: {\n SEK: {\n _rounding: \"0\",\n _digits: \"2\",\n _cashRounding: \"0\",\n _cashDigits: \"0\"\n }\n }\n});","/**-----------------------------------------------------------------------------------------\n* Copyright © 2024 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nvar setData = require('@progress/kendo-angular-intl').setData;\nsetData({\n name: \"en\",\n identity: {\n language: \"en\"\n },\n territory: \"US\",\n numbers: {\n symbols: {\n decimal: \".\",\n group: \",\",\n list: \";\",\n percentSign: \"%\",\n plusSign: \"+\",\n minusSign: \"-\",\n exponential: \"E\",\n superscriptingExponent: \"×\",\n perMille: \"‰\",\n infinity: \"∞\",\n nan: \"NaN\",\n timeSeparator: \":\",\n approximatelySign: \"~\"\n },\n decimal: {\n patterns: [\"n\"],\n groupSize: [3]\n },\n scientific: {\n patterns: [\"nEn\"],\n groupSize: []\n },\n percent: {\n patterns: [\"n%\"],\n groupSize: [3]\n },\n currency: {\n patterns: [\"$n\"],\n groupSize: [3],\n \"unitPattern-count-one\": \"n $\",\n \"unitPattern-count-other\": \"n $\"\n },\n currencies: {\n ADP: {\n displayName: \"Andorran Peseta\",\n \"displayName-count-one\": \"Andorran peseta\",\n \"displayName-count-other\": \"Andorran pesetas\",\n symbol: \"ADP\"\n },\n AED: {\n displayName: \"United Arab Emirates Dirham\",\n \"displayName-count-one\": \"UAE dirham\",\n \"displayName-count-other\": \"UAE dirhams\",\n symbol: \"AED\"\n },\n AFA: {\n displayName: \"Afghan Afghani (1927–2002)\",\n \"displayName-count-one\": \"Afghan afghani (1927–2002)\",\n \"displayName-count-other\": \"Afghan afghanis (1927–2002)\",\n symbol: \"AFA\"\n },\n AFN: {\n displayName: \"Afghan Afghani\",\n \"displayName-count-one\": \"Afghan Afghani\",\n \"displayName-count-other\": \"Afghan Afghanis\",\n symbol: \"AFN\",\n \"symbol-alt-narrow\": \"؋\"\n },\n ALK: {\n displayName: \"Albanian Lek (1946–1965)\",\n \"displayName-count-one\": \"Albanian lek (1946–1965)\",\n \"displayName-count-other\": \"Albanian lekë (1946–1965)\",\n symbol: \"ALK\"\n },\n ALL: {\n displayName: \"Albanian Lek\",\n \"displayName-count-one\": \"Albanian lek\",\n \"displayName-count-other\": \"Albanian lekë\",\n symbol: \"ALL\"\n },\n AMD: {\n displayName: \"Armenian Dram\",\n \"displayName-count-one\": \"Armenian dram\",\n \"displayName-count-other\": \"Armenian drams\",\n symbol: \"AMD\",\n \"symbol-alt-narrow\": \"֏\"\n },\n ANG: {\n displayName: \"Netherlands Antillean Guilder\",\n \"displayName-count-one\": \"Netherlands Antillean guilder\",\n \"displayName-count-other\": \"Netherlands Antillean guilders\",\n symbol: \"ANG\"\n },\n AOA: {\n displayName: \"Angolan Kwanza\",\n \"displayName-count-one\": \"Angolan kwanza\",\n \"displayName-count-other\": \"Angolan kwanzas\",\n symbol: \"AOA\",\n \"symbol-alt-narrow\": \"Kz\"\n },\n AOK: {\n displayName: \"Angolan Kwanza (1977–1991)\",\n \"displayName-count-one\": \"Angolan kwanza (1977–1991)\",\n \"displayName-count-other\": \"Angolan kwanzas (1977–1991)\",\n symbol: \"AOK\"\n },\n AON: {\n displayName: \"Angolan New Kwanza (1990–2000)\",\n \"displayName-count-one\": \"Angolan new kwanza (1990–2000)\",\n \"displayName-count-other\": \"Angolan new kwanzas (1990–2000)\",\n symbol: \"AON\"\n },\n AOR: {\n displayName: \"Angolan Readjusted Kwanza (1995–1999)\",\n \"displayName-count-one\": \"Angolan readjusted kwanza (1995–1999)\",\n \"displayName-count-other\": \"Angolan readjusted kwanzas (1995–1999)\",\n symbol: \"AOR\"\n },\n ARA: {\n displayName: \"Argentine Austral\",\n \"displayName-count-one\": \"Argentine austral\",\n \"displayName-count-other\": \"Argentine australs\",\n symbol: \"ARA\"\n },\n ARL: {\n displayName: \"Argentine Peso Ley (1970–1983)\",\n \"displayName-count-one\": \"Argentine peso ley (1970–1983)\",\n \"displayName-count-other\": \"Argentine pesos ley (1970–1983)\",\n symbol: \"ARL\"\n },\n ARM: {\n displayName: \"Argentine Peso (1881–1970)\",\n \"displayName-count-one\": \"Argentine peso (1881–1970)\",\n \"displayName-count-other\": \"Argentine pesos (1881–1970)\",\n symbol: \"ARM\"\n },\n ARP: {\n displayName: \"Argentine Peso (1983–1985)\",\n \"displayName-count-one\": \"Argentine peso (1983–1985)\",\n \"displayName-count-other\": \"Argentine pesos (1983–1985)\",\n symbol: \"ARP\"\n },\n ARS: {\n displayName: \"Argentine Peso\",\n \"displayName-count-one\": \"Argentine peso\",\n \"displayName-count-other\": \"Argentine pesos\",\n symbol: \"ARS\",\n \"symbol-alt-narrow\": \"$\"\n },\n ATS: {\n displayName: \"Austrian Schilling\",\n \"displayName-count-one\": \"Austrian schilling\",\n \"displayName-count-other\": \"Austrian schillings\",\n symbol: \"ATS\"\n },\n AUD: {\n displayName: \"Australian Dollar\",\n \"displayName-count-one\": \"Australian dollar\",\n \"displayName-count-other\": \"Australian dollars\",\n symbol: \"A$\",\n \"symbol-alt-narrow\": \"$\"\n },\n AWG: {\n displayName: \"Aruban Florin\",\n \"displayName-count-one\": \"Aruban florin\",\n \"displayName-count-other\": \"Aruban florin\",\n symbol: \"AWG\"\n },\n AZM: {\n displayName: \"Azerbaijani Manat (1993–2006)\",\n \"displayName-count-one\": \"Azerbaijani manat (1993–2006)\",\n \"displayName-count-other\": \"Azerbaijani manats (1993–2006)\",\n symbol: \"AZM\"\n },\n AZN: {\n displayName: \"Azerbaijani Manat\",\n \"displayName-count-one\": \"Azerbaijani manat\",\n \"displayName-count-other\": \"Azerbaijani manats\",\n symbol: \"AZN\",\n \"symbol-alt-narrow\": \"₼\"\n },\n BAD: {\n displayName: \"Bosnia-Herzegovina Dinar (1992–1994)\",\n \"displayName-count-one\": \"Bosnia-Herzegovina dinar (1992–1994)\",\n \"displayName-count-other\": \"Bosnia-Herzegovina dinars (1992–1994)\",\n symbol: \"BAD\"\n },\n BAM: {\n displayName: \"Bosnia-Herzegovina Convertible Mark\",\n \"displayName-count-one\": \"Bosnia-Herzegovina convertible mark\",\n \"displayName-count-other\": \"Bosnia-Herzegovina convertible marks\",\n symbol: \"BAM\",\n \"symbol-alt-narrow\": \"KM\"\n },\n BAN: {\n displayName: \"Bosnia-Herzegovina New Dinar (1994–1997)\",\n \"displayName-count-one\": \"Bosnia-Herzegovina new dinar (1994–1997)\",\n \"displayName-count-other\": \"Bosnia-Herzegovina new dinars (1994–1997)\",\n symbol: \"BAN\"\n },\n BBD: {\n displayName: \"Barbadian Dollar\",\n \"displayName-count-one\": \"Barbadian dollar\",\n \"displayName-count-other\": \"Barbadian dollars\",\n symbol: \"BBD\",\n \"symbol-alt-narrow\": \"$\"\n },\n BDT: {\n displayName: \"Bangladeshi Taka\",\n \"displayName-count-one\": \"Bangladeshi taka\",\n \"displayName-count-other\": \"Bangladeshi takas\",\n symbol: \"BDT\",\n \"symbol-alt-narrow\": \"৳\"\n },\n BEC: {\n displayName: \"Belgian Franc (convertible)\",\n \"displayName-count-one\": \"Belgian franc (convertible)\",\n \"displayName-count-other\": \"Belgian francs (convertible)\",\n symbol: \"BEC\"\n },\n BEF: {\n displayName: \"Belgian Franc\",\n \"displayName-count-one\": \"Belgian franc\",\n \"displayName-count-other\": \"Belgian francs\",\n symbol: \"BEF\"\n },\n BEL: {\n displayName: \"Belgian Franc (financial)\",\n \"displayName-count-one\": \"Belgian franc (financial)\",\n \"displayName-count-other\": \"Belgian francs (financial)\",\n symbol: \"BEL\"\n },\n BGL: {\n displayName: \"Bulgarian Hard Lev\",\n \"displayName-count-one\": \"Bulgarian hard lev\",\n \"displayName-count-other\": \"Bulgarian hard leva\",\n symbol: \"BGL\"\n },\n BGM: {\n displayName: \"Bulgarian Socialist Lev\",\n \"displayName-count-one\": \"Bulgarian socialist lev\",\n \"displayName-count-other\": \"Bulgarian socialist leva\",\n symbol: \"BGM\"\n },\n BGN: {\n displayName: \"Bulgarian Lev\",\n \"displayName-count-one\": \"Bulgarian lev\",\n \"displayName-count-other\": \"Bulgarian leva\",\n symbol: \"BGN\"\n },\n BGO: {\n displayName: \"Bulgarian Lev (1879–1952)\",\n \"displayName-count-one\": \"Bulgarian lev (1879–1952)\",\n \"displayName-count-other\": \"Bulgarian leva (1879–1952)\",\n symbol: \"BGO\"\n },\n BHD: {\n displayName: \"Bahraini Dinar\",\n \"displayName-count-one\": \"Bahraini dinar\",\n \"displayName-count-other\": \"Bahraini dinars\",\n symbol: \"BHD\"\n },\n BIF: {\n displayName: \"Burundian Franc\",\n \"displayName-count-one\": \"Burundian franc\",\n \"displayName-count-other\": \"Burundian francs\",\n symbol: \"BIF\"\n },\n BMD: {\n displayName: \"Bermudan Dollar\",\n \"displayName-count-one\": \"Bermudan dollar\",\n \"displayName-count-other\": \"Bermudan dollars\",\n symbol: \"BMD\",\n \"symbol-alt-narrow\": \"$\"\n },\n BND: {\n displayName: \"Brunei Dollar\",\n \"displayName-count-one\": \"Brunei dollar\",\n \"displayName-count-other\": \"Brunei dollars\",\n symbol: \"BND\",\n \"symbol-alt-narrow\": \"$\"\n },\n BOB: {\n displayName: \"Bolivian Boliviano\",\n \"displayName-count-one\": \"Bolivian boliviano\",\n \"displayName-count-other\": \"Bolivian bolivianos\",\n symbol: \"BOB\",\n \"symbol-alt-narrow\": \"Bs\"\n },\n BOL: {\n displayName: \"Bolivian Boliviano (1863–1963)\",\n \"displayName-count-one\": \"Bolivian boliviano (1863–1963)\",\n \"displayName-count-other\": \"Bolivian bolivianos (1863–1963)\",\n symbol: \"BOL\"\n },\n BOP: {\n displayName: \"Bolivian Peso\",\n \"displayName-count-one\": \"Bolivian peso\",\n \"displayName-count-other\": \"Bolivian pesos\",\n symbol: \"BOP\"\n },\n BOV: {\n displayName: \"Bolivian Mvdol\",\n \"displayName-count-one\": \"Bolivian mvdol\",\n \"displayName-count-other\": \"Bolivian mvdols\",\n symbol: \"BOV\"\n },\n BRB: {\n displayName: \"Brazilian New Cruzeiro (1967–1986)\",\n \"displayName-count-one\": \"Brazilian new cruzeiro (1967–1986)\",\n \"displayName-count-other\": \"Brazilian new cruzeiros (1967–1986)\",\n symbol: \"BRB\"\n },\n BRC: {\n displayName: \"Brazilian Cruzado (1986–1989)\",\n \"displayName-count-one\": \"Brazilian cruzado (1986–1989)\",\n \"displayName-count-other\": \"Brazilian cruzados (1986–1989)\",\n symbol: \"BRC\"\n },\n BRE: {\n displayName: \"Brazilian Cruzeiro (1990–1993)\",\n \"displayName-count-one\": \"Brazilian cruzeiro (1990–1993)\",\n \"displayName-count-other\": \"Brazilian cruzeiros (1990–1993)\",\n symbol: \"BRE\"\n },\n BRL: {\n displayName: \"Brazilian Real\",\n \"displayName-count-one\": \"Brazilian real\",\n \"displayName-count-other\": \"Brazilian reals\",\n symbol: \"R$\",\n \"symbol-alt-narrow\": \"R$\"\n },\n BRN: {\n displayName: \"Brazilian New Cruzado (1989–1990)\",\n \"displayName-count-one\": \"Brazilian new cruzado (1989–1990)\",\n \"displayName-count-other\": \"Brazilian new cruzados (1989–1990)\",\n symbol: \"BRN\"\n },\n BRR: {\n displayName: \"Brazilian Cruzeiro (1993–1994)\",\n \"displayName-count-one\": \"Brazilian cruzeiro (1993–1994)\",\n \"displayName-count-other\": \"Brazilian cruzeiros (1993–1994)\",\n symbol: \"BRR\"\n },\n BRZ: {\n displayName: \"Brazilian Cruzeiro (1942–1967)\",\n \"displayName-count-one\": \"Brazilian cruzeiro (1942–1967)\",\n \"displayName-count-other\": \"Brazilian cruzeiros (1942–1967)\",\n symbol: \"BRZ\"\n },\n BSD: {\n displayName: \"Bahamian Dollar\",\n \"displayName-count-one\": \"Bahamian dollar\",\n \"displayName-count-other\": \"Bahamian dollars\",\n symbol: \"BSD\",\n \"symbol-alt-narrow\": \"$\"\n },\n BTN: {\n displayName: \"Bhutanese Ngultrum\",\n \"displayName-count-one\": \"Bhutanese ngultrum\",\n \"displayName-count-other\": \"Bhutanese ngultrums\",\n symbol: \"BTN\"\n },\n BUK: {\n displayName: \"Burmese Kyat\",\n \"displayName-count-one\": \"Burmese kyat\",\n \"displayName-count-other\": \"Burmese kyats\",\n symbol: \"BUK\"\n },\n BWP: {\n displayName: \"Botswanan Pula\",\n \"displayName-count-one\": \"Botswanan pula\",\n \"displayName-count-other\": \"Botswanan pulas\",\n symbol: \"BWP\",\n \"symbol-alt-narrow\": \"P\"\n },\n BYB: {\n displayName: \"Belarusian Ruble (1994–1999)\",\n \"displayName-count-one\": \"Belarusian ruble (1994–1999)\",\n \"displayName-count-other\": \"Belarusian rubles (1994–1999)\",\n symbol: \"BYB\"\n },\n BYN: {\n displayName: \"Belarusian Ruble\",\n \"displayName-count-one\": \"Belarusian ruble\",\n \"displayName-count-other\": \"Belarusian rubles\",\n symbol: \"BYN\"\n },\n BYR: {\n displayName: \"Belarusian Ruble (2000–2016)\",\n \"displayName-count-one\": \"Belarusian ruble (2000–2016)\",\n \"displayName-count-other\": \"Belarusian rubles (2000–2016)\",\n symbol: \"BYR\"\n },\n BZD: {\n displayName: \"Belize Dollar\",\n \"displayName-count-one\": \"Belize dollar\",\n \"displayName-count-other\": \"Belize dollars\",\n symbol: \"BZD\",\n \"symbol-alt-narrow\": \"$\"\n },\n CAD: {\n displayName: \"Canadian Dollar\",\n \"displayName-count-one\": \"Canadian dollar\",\n \"displayName-count-other\": \"Canadian dollars\",\n symbol: \"CA$\",\n \"symbol-alt-narrow\": \"$\"\n },\n CDF: {\n displayName: \"Congolese Franc\",\n \"displayName-count-one\": \"Congolese franc\",\n \"displayName-count-other\": \"Congolese francs\",\n symbol: \"CDF\"\n },\n CHE: {\n displayName: \"WIR Euro\",\n \"displayName-count-one\": \"WIR euro\",\n \"displayName-count-other\": \"WIR euros\",\n symbol: \"CHE\"\n },\n CHF: {\n displayName: \"Swiss Franc\",\n \"displayName-count-one\": \"Swiss franc\",\n \"displayName-count-other\": \"Swiss francs\",\n symbol: \"CHF\"\n },\n CHW: {\n displayName: \"WIR Franc\",\n \"displayName-count-one\": \"WIR franc\",\n \"displayName-count-other\": \"WIR francs\",\n symbol: \"CHW\"\n },\n CLE: {\n displayName: \"Chilean Escudo\",\n \"displayName-count-one\": \"Chilean escudo\",\n \"displayName-count-other\": \"Chilean escudos\",\n symbol: \"CLE\"\n },\n CLF: {\n displayName: \"Chilean Unit of Account (UF)\",\n \"displayName-count-one\": \"Chilean unit of account (UF)\",\n \"displayName-count-other\": \"Chilean units of account (UF)\",\n symbol: \"CLF\"\n },\n CLP: {\n displayName: \"Chilean Peso\",\n \"displayName-count-one\": \"Chilean peso\",\n \"displayName-count-other\": \"Chilean pesos\",\n symbol: \"CLP\",\n \"symbol-alt-narrow\": \"$\"\n },\n CNH: {\n displayName: \"Chinese Yuan (offshore)\",\n \"displayName-count-one\": \"Chinese yuan (offshore)\",\n \"displayName-count-other\": \"Chinese yuan (offshore)\",\n symbol: \"CNH\"\n },\n CNX: {\n displayName: \"Chinese People’s Bank Dollar\",\n \"displayName-count-one\": \"Chinese People’s Bank dollar\",\n \"displayName-count-other\": \"Chinese People’s Bank dollars\",\n symbol: \"CNX\"\n },\n CNY: {\n displayName: \"Chinese Yuan\",\n \"displayName-count-one\": \"Chinese yuan\",\n \"displayName-count-other\": \"Chinese yuan\",\n symbol: \"CN¥\",\n \"symbol-alt-narrow\": \"¥\"\n },\n COP: {\n displayName: \"Colombian Peso\",\n \"displayName-count-one\": \"Colombian peso\",\n \"displayName-count-other\": \"Colombian pesos\",\n symbol: \"COP\",\n \"symbol-alt-narrow\": \"$\"\n },\n COU: {\n displayName: \"Colombian Real Value Unit\",\n \"displayName-count-one\": \"Colombian real value unit\",\n \"displayName-count-other\": \"Colombian real value units\",\n symbol: \"COU\"\n },\n CRC: {\n displayName: \"Costa Rican Colón\",\n \"displayName-count-one\": \"Costa Rican colón\",\n \"displayName-count-other\": \"Costa Rican colóns\",\n symbol: \"CRC\",\n \"symbol-alt-narrow\": \"₡\"\n },\n CSD: {\n displayName: \"Serbian Dinar (2002–2006)\",\n \"displayName-count-one\": \"Serbian dinar (2002–2006)\",\n \"displayName-count-other\": \"Serbian dinars (2002–2006)\",\n symbol: \"CSD\"\n },\n CSK: {\n displayName: \"Czechoslovak Hard Koruna\",\n \"displayName-count-one\": \"Czechoslovak hard koruna\",\n \"displayName-count-other\": \"Czechoslovak hard korunas\",\n symbol: \"CSK\"\n },\n CUC: {\n displayName: \"Cuban Convertible Peso\",\n \"displayName-count-one\": \"Cuban convertible peso\",\n \"displayName-count-other\": \"Cuban convertible pesos\",\n symbol: \"CUC\",\n \"symbol-alt-narrow\": \"$\"\n },\n CUP: {\n displayName: \"Cuban Peso\",\n \"displayName-count-one\": \"Cuban peso\",\n \"displayName-count-other\": \"Cuban pesos\",\n symbol: \"CUP\",\n \"symbol-alt-narrow\": \"$\"\n },\n CVE: {\n displayName: \"Cape Verdean Escudo\",\n \"displayName-count-one\": \"Cape Verdean escudo\",\n \"displayName-count-other\": \"Cape Verdean escudos\",\n symbol: \"CVE\"\n },\n CYP: {\n displayName: \"Cypriot Pound\",\n \"displayName-count-one\": \"Cypriot pound\",\n \"displayName-count-other\": \"Cypriot pounds\",\n symbol: \"CYP\"\n },\n CZK: {\n displayName: \"Czech Koruna\",\n \"displayName-count-one\": \"Czech koruna\",\n \"displayName-count-other\": \"Czech korunas\",\n symbol: \"CZK\",\n \"symbol-alt-narrow\": \"Kč\"\n },\n DDM: {\n displayName: \"East German Mark\",\n \"displayName-count-one\": \"East German mark\",\n \"displayName-count-other\": \"East German marks\",\n symbol: \"DDM\"\n },\n DEM: {\n displayName: \"German Mark\",\n \"displayName-count-one\": \"German mark\",\n \"displayName-count-other\": \"German marks\",\n symbol: \"DEM\"\n },\n DJF: {\n displayName: \"Djiboutian Franc\",\n \"displayName-count-one\": \"Djiboutian franc\",\n \"displayName-count-other\": \"Djiboutian francs\",\n symbol: \"DJF\"\n },\n DKK: {\n displayName: \"Danish Krone\",\n \"displayName-count-one\": \"Danish krone\",\n \"displayName-count-other\": \"Danish kroner\",\n symbol: \"DKK\",\n \"symbol-alt-narrow\": \"kr\"\n },\n DOP: {\n displayName: \"Dominican Peso\",\n \"displayName-count-one\": \"Dominican peso\",\n \"displayName-count-other\": \"Dominican pesos\",\n symbol: \"DOP\",\n \"symbol-alt-narrow\": \"$\"\n },\n DZD: {\n displayName: \"Algerian Dinar\",\n \"displayName-count-one\": \"Algerian dinar\",\n \"displayName-count-other\": \"Algerian dinars\",\n symbol: \"DZD\"\n },\n ECS: {\n displayName: \"Ecuadorian Sucre\",\n \"displayName-count-one\": \"Ecuadorian sucre\",\n \"displayName-count-other\": \"Ecuadorian sucres\",\n symbol: \"ECS\"\n },\n ECV: {\n displayName: \"Ecuadorian Unit of Constant Value\",\n \"displayName-count-one\": \"Ecuadorian unit of constant value\",\n \"displayName-count-other\": \"Ecuadorian units of constant value\",\n symbol: \"ECV\"\n },\n EEK: {\n displayName: \"Estonian Kroon\",\n \"displayName-count-one\": \"Estonian kroon\",\n \"displayName-count-other\": \"Estonian kroons\",\n symbol: \"EEK\"\n },\n EGP: {\n displayName: \"Egyptian Pound\",\n \"displayName-count-one\": \"Egyptian pound\",\n \"displayName-count-other\": \"Egyptian pounds\",\n symbol: \"EGP\",\n \"symbol-alt-narrow\": \"E£\"\n },\n ERN: {\n displayName: \"Eritrean Nakfa\",\n \"displayName-count-one\": \"Eritrean nakfa\",\n \"displayName-count-other\": \"Eritrean nakfas\",\n symbol: \"ERN\"\n },\n ESA: {\n displayName: \"Spanish Peseta (A account)\",\n \"displayName-count-one\": \"Spanish peseta (A account)\",\n \"displayName-count-other\": \"Spanish pesetas (A account)\",\n symbol: \"ESA\"\n },\n ESB: {\n displayName: \"Spanish Peseta (convertible account)\",\n \"displayName-count-one\": \"Spanish peseta (convertible account)\",\n \"displayName-count-other\": \"Spanish pesetas (convertible account)\",\n symbol: \"ESB\"\n },\n ESP: {\n displayName: \"Spanish Peseta\",\n \"displayName-count-one\": \"Spanish peseta\",\n \"displayName-count-other\": \"Spanish pesetas\",\n symbol: \"ESP\",\n \"symbol-alt-narrow\": \"₧\"\n },\n ETB: {\n displayName: \"Ethiopian Birr\",\n \"displayName-count-one\": \"Ethiopian birr\",\n \"displayName-count-other\": \"Ethiopian birrs\",\n symbol: \"ETB\"\n },\n EUR: {\n displayName: \"Euro\",\n \"displayName-count-one\": \"euro\",\n \"displayName-count-other\": \"euros\",\n symbol: \"€\",\n \"symbol-alt-narrow\": \"€\"\n },\n FIM: {\n displayName: \"Finnish Markka\",\n \"displayName-count-one\": \"Finnish markka\",\n \"displayName-count-other\": \"Finnish markkas\",\n symbol: \"FIM\"\n },\n FJD: {\n displayName: \"Fijian Dollar\",\n \"displayName-count-one\": \"Fijian dollar\",\n \"displayName-count-other\": \"Fijian dollars\",\n symbol: \"FJD\",\n \"symbol-alt-narrow\": \"$\"\n },\n FKP: {\n displayName: \"Falkland Islands Pound\",\n \"displayName-count-one\": \"Falkland Islands pound\",\n \"displayName-count-other\": \"Falkland Islands pounds\",\n symbol: \"FKP\",\n \"symbol-alt-narrow\": \"£\"\n },\n FRF: {\n displayName: \"French Franc\",\n \"displayName-count-one\": \"French franc\",\n \"displayName-count-other\": \"French francs\",\n symbol: \"FRF\"\n },\n GBP: {\n displayName: \"British Pound\",\n \"displayName-count-one\": \"British pound\",\n \"displayName-count-other\": \"British pounds\",\n symbol: \"£\",\n \"symbol-alt-narrow\": \"£\"\n },\n GEK: {\n displayName: \"Georgian Kupon Larit\",\n \"displayName-count-one\": \"Georgian kupon larit\",\n \"displayName-count-other\": \"Georgian kupon larits\",\n symbol: \"GEK\"\n },\n GEL: {\n displayName: \"Georgian Lari\",\n \"displayName-count-one\": \"Georgian lari\",\n \"displayName-count-other\": \"Georgian laris\",\n symbol: \"GEL\",\n \"symbol-alt-narrow\": \"₾\"\n },\n GHC: {\n displayName: \"Ghanaian Cedi (1979–2007)\",\n \"displayName-count-one\": \"Ghanaian cedi (1979–2007)\",\n \"displayName-count-other\": \"Ghanaian cedis (1979–2007)\",\n symbol: \"GHC\"\n },\n GHS: {\n displayName: \"Ghanaian Cedi\",\n \"displayName-count-one\": \"Ghanaian cedi\",\n \"displayName-count-other\": \"Ghanaian cedis\",\n symbol: \"GHS\",\n \"symbol-alt-narrow\": \"GH₵\"\n },\n GIP: {\n displayName: \"Gibraltar Pound\",\n \"displayName-count-one\": \"Gibraltar pound\",\n \"displayName-count-other\": \"Gibraltar pounds\",\n symbol: \"GIP\",\n \"symbol-alt-narrow\": \"£\"\n },\n GMD: {\n displayName: \"Gambian Dalasi\",\n \"displayName-count-one\": \"Gambian dalasi\",\n \"displayName-count-other\": \"Gambian dalasis\",\n symbol: \"GMD\"\n },\n GNF: {\n displayName: \"Guinean Franc\",\n \"displayName-count-one\": \"Guinean franc\",\n \"displayName-count-other\": \"Guinean francs\",\n symbol: \"GNF\",\n \"symbol-alt-narrow\": \"FG\"\n },\n GNS: {\n displayName: \"Guinean Syli\",\n \"displayName-count-one\": \"Guinean syli\",\n \"displayName-count-other\": \"Guinean sylis\",\n symbol: \"GNS\"\n },\n GQE: {\n displayName: \"Equatorial Guinean Ekwele\",\n \"displayName-count-one\": \"Equatorial Guinean ekwele\",\n \"displayName-count-other\": \"Equatorial Guinean ekwele\",\n symbol: \"GQE\"\n },\n GRD: {\n displayName: \"Greek Drachma\",\n \"displayName-count-one\": \"Greek drachma\",\n \"displayName-count-other\": \"Greek drachmas\",\n symbol: \"GRD\"\n },\n GTQ: {\n displayName: \"Guatemalan Quetzal\",\n \"displayName-count-one\": \"Guatemalan quetzal\",\n \"displayName-count-other\": \"Guatemalan quetzals\",\n symbol: \"GTQ\",\n \"symbol-alt-narrow\": \"Q\"\n },\n GWE: {\n displayName: \"Portuguese Guinea Escudo\",\n \"displayName-count-one\": \"Portuguese Guinea escudo\",\n \"displayName-count-other\": \"Portuguese Guinea escudos\",\n symbol: \"GWE\"\n },\n GWP: {\n displayName: \"Guinea-Bissau Peso\",\n \"displayName-count-one\": \"Guinea-Bissau peso\",\n \"displayName-count-other\": \"Guinea-Bissau pesos\",\n symbol: \"GWP\"\n },\n GYD: {\n displayName: \"Guyanaese Dollar\",\n \"displayName-count-one\": \"Guyanaese dollar\",\n \"displayName-count-other\": \"Guyanaese dollars\",\n symbol: \"GYD\",\n \"symbol-alt-narrow\": \"$\"\n },\n HKD: {\n displayName: \"Hong Kong Dollar\",\n \"displayName-count-one\": \"Hong Kong dollar\",\n \"displayName-count-other\": \"Hong Kong dollars\",\n symbol: \"HK$\",\n \"symbol-alt-narrow\": \"$\"\n },\n HNL: {\n displayName: \"Honduran Lempira\",\n \"displayName-count-one\": \"Honduran lempira\",\n \"displayName-count-other\": \"Honduran lempiras\",\n symbol: \"HNL\",\n \"symbol-alt-narrow\": \"L\"\n },\n HRD: {\n displayName: \"Croatian Dinar\",\n \"displayName-count-one\": \"Croatian dinar\",\n \"displayName-count-other\": \"Croatian dinars\",\n symbol: \"HRD\"\n },\n HRK: {\n displayName: \"Croatian Kuna\",\n \"displayName-count-one\": \"Croatian kuna\",\n \"displayName-count-other\": \"Croatian kunas\",\n symbol: \"HRK\",\n \"symbol-alt-narrow\": \"kn\"\n },\n HTG: {\n displayName: \"Haitian Gourde\",\n \"displayName-count-one\": \"Haitian gourde\",\n \"displayName-count-other\": \"Haitian gourdes\",\n symbol: \"HTG\"\n },\n HUF: {\n displayName: \"Hungarian Forint\",\n \"displayName-count-one\": \"Hungarian forint\",\n \"displayName-count-other\": \"Hungarian forints\",\n symbol: \"HUF\",\n \"symbol-alt-narrow\": \"Ft\"\n },\n IDR: {\n displayName: \"Indonesian Rupiah\",\n \"displayName-count-one\": \"Indonesian rupiah\",\n \"displayName-count-other\": \"Indonesian rupiahs\",\n symbol: \"IDR\",\n \"symbol-alt-narrow\": \"Rp\"\n },\n IEP: {\n displayName: \"Irish Pound\",\n \"displayName-count-one\": \"Irish pound\",\n \"displayName-count-other\": \"Irish pounds\",\n symbol: \"IEP\"\n },\n ILP: {\n displayName: \"Israeli Pound\",\n \"displayName-count-one\": \"Israeli pound\",\n \"displayName-count-other\": \"Israeli pounds\",\n symbol: \"ILP\"\n },\n ILR: {\n displayName: \"Israeli Shekel (1980–1985)\",\n \"displayName-count-one\": \"Israeli shekel (1980–1985)\",\n \"displayName-count-other\": \"Israeli shekels (1980–1985)\",\n symbol: \"ILR\"\n },\n ILS: {\n displayName: \"Israeli New Shekel\",\n \"displayName-count-one\": \"Israeli new shekel\",\n \"displayName-count-other\": \"Israeli new shekels\",\n symbol: \"₪\",\n \"symbol-alt-narrow\": \"₪\"\n },\n INR: {\n displayName: \"Indian Rupee\",\n \"displayName-count-one\": \"Indian rupee\",\n \"displayName-count-other\": \"Indian rupees\",\n symbol: \"₹\",\n \"symbol-alt-narrow\": \"₹\"\n },\n IQD: {\n displayName: \"Iraqi Dinar\",\n \"displayName-count-one\": \"Iraqi dinar\",\n \"displayName-count-other\": \"Iraqi dinars\",\n symbol: \"IQD\"\n },\n IRR: {\n displayName: \"Iranian Rial\",\n \"displayName-count-one\": \"Iranian rial\",\n \"displayName-count-other\": \"Iranian rials\",\n symbol: \"IRR\"\n },\n ISJ: {\n displayName: \"Icelandic Króna (1918–1981)\",\n \"displayName-count-one\": \"Icelandic króna (1918–1981)\",\n \"displayName-count-other\": \"Icelandic krónur (1918–1981)\",\n symbol: \"ISJ\"\n },\n ISK: {\n displayName: \"Icelandic Króna\",\n \"displayName-count-one\": \"Icelandic króna\",\n \"displayName-count-other\": \"Icelandic krónur\",\n symbol: \"ISK\",\n \"symbol-alt-narrow\": \"kr\"\n },\n ITL: {\n displayName: \"Italian Lira\",\n \"displayName-count-one\": \"Italian lira\",\n \"displayName-count-other\": \"Italian liras\",\n symbol: \"ITL\"\n },\n JMD: {\n displayName: \"Jamaican Dollar\",\n \"displayName-count-one\": \"Jamaican dollar\",\n \"displayName-count-other\": \"Jamaican dollars\",\n symbol: \"JMD\",\n \"symbol-alt-narrow\": \"$\"\n },\n JOD: {\n displayName: \"Jordanian Dinar\",\n \"displayName-count-one\": \"Jordanian dinar\",\n \"displayName-count-other\": \"Jordanian dinars\",\n symbol: \"JOD\"\n },\n JPY: {\n displayName: \"Japanese Yen\",\n \"displayName-count-one\": \"Japanese yen\",\n \"displayName-count-other\": \"Japanese yen\",\n symbol: \"¥\",\n \"symbol-alt-narrow\": \"¥\"\n },\n KES: {\n displayName: \"Kenyan Shilling\",\n \"displayName-count-one\": \"Kenyan shilling\",\n \"displayName-count-other\": \"Kenyan shillings\",\n symbol: \"KES\"\n },\n KGS: {\n displayName: \"Kyrgystani Som\",\n \"displayName-count-one\": \"Kyrgystani som\",\n \"displayName-count-other\": \"Kyrgystani soms\",\n symbol: \"KGS\"\n },\n KHR: {\n displayName: \"Cambodian Riel\",\n \"displayName-count-one\": \"Cambodian riel\",\n \"displayName-count-other\": \"Cambodian riels\",\n symbol: \"KHR\",\n \"symbol-alt-narrow\": \"៛\"\n },\n KMF: {\n displayName: \"Comorian Franc\",\n \"displayName-count-one\": \"Comorian franc\",\n \"displayName-count-other\": \"Comorian francs\",\n symbol: \"KMF\",\n \"symbol-alt-narrow\": \"CF\"\n },\n KPW: {\n displayName: \"North Korean Won\",\n \"displayName-count-one\": \"North Korean won\",\n \"displayName-count-other\": \"North Korean won\",\n symbol: \"KPW\",\n \"symbol-alt-narrow\": \"₩\"\n },\n KRH: {\n displayName: \"South Korean Hwan (1953–1962)\",\n \"displayName-count-one\": \"South Korean hwan (1953–1962)\",\n \"displayName-count-other\": \"South Korean hwan (1953–1962)\",\n symbol: \"KRH\"\n },\n KRO: {\n displayName: \"South Korean Won (1945–1953)\",\n \"displayName-count-one\": \"South Korean won (1945–1953)\",\n \"displayName-count-other\": \"South Korean won (1945–1953)\",\n symbol: \"KRO\"\n },\n KRW: {\n displayName: \"South Korean Won\",\n \"displayName-count-one\": \"South Korean won\",\n \"displayName-count-other\": \"South Korean won\",\n symbol: \"₩\",\n \"symbol-alt-narrow\": \"₩\"\n },\n KWD: {\n displayName: \"Kuwaiti Dinar\",\n \"displayName-count-one\": \"Kuwaiti dinar\",\n \"displayName-count-other\": \"Kuwaiti dinars\",\n symbol: \"KWD\"\n },\n KYD: {\n displayName: \"Cayman Islands Dollar\",\n \"displayName-count-one\": \"Cayman Islands dollar\",\n \"displayName-count-other\": \"Cayman Islands dollars\",\n symbol: \"KYD\",\n \"symbol-alt-narrow\": \"$\"\n },\n KZT: {\n displayName: \"Kazakhstani Tenge\",\n \"displayName-count-one\": \"Kazakhstani tenge\",\n \"displayName-count-other\": \"Kazakhstani tenges\",\n symbol: \"KZT\",\n \"symbol-alt-narrow\": \"₸\"\n },\n LAK: {\n displayName: \"Laotian Kip\",\n \"displayName-count-one\": \"Laotian kip\",\n \"displayName-count-other\": \"Laotian kips\",\n symbol: \"LAK\",\n \"symbol-alt-narrow\": \"₭\"\n },\n LBP: {\n displayName: \"Lebanese Pound\",\n \"displayName-count-one\": \"Lebanese pound\",\n \"displayName-count-other\": \"Lebanese pounds\",\n symbol: \"LBP\",\n \"symbol-alt-narrow\": \"L£\"\n },\n LKR: {\n displayName: \"Sri Lankan Rupee\",\n \"displayName-count-one\": \"Sri Lankan rupee\",\n \"displayName-count-other\": \"Sri Lankan rupees\",\n symbol: \"LKR\",\n \"symbol-alt-narrow\": \"Rs\"\n },\n LRD: {\n displayName: \"Liberian Dollar\",\n \"displayName-count-one\": \"Liberian dollar\",\n \"displayName-count-other\": \"Liberian dollars\",\n symbol: \"LRD\",\n \"symbol-alt-narrow\": \"$\"\n },\n LSL: {\n displayName: \"Lesotho Loti\",\n \"displayName-count-one\": \"Lesotho loti\",\n \"displayName-count-other\": \"Lesotho lotis\",\n symbol: \"LSL\"\n },\n LTL: {\n displayName: \"Lithuanian Litas\",\n \"displayName-count-one\": \"Lithuanian litas\",\n \"displayName-count-other\": \"Lithuanian litai\",\n symbol: \"LTL\",\n \"symbol-alt-narrow\": \"Lt\"\n },\n LTT: {\n displayName: \"Lithuanian Talonas\",\n \"displayName-count-one\": \"Lithuanian talonas\",\n \"displayName-count-other\": \"Lithuanian talonases\",\n symbol: \"LTT\"\n },\n LUC: {\n displayName: \"Luxembourgian Convertible Franc\",\n \"displayName-count-one\": \"Luxembourgian convertible franc\",\n \"displayName-count-other\": \"Luxembourgian convertible francs\",\n symbol: \"LUC\"\n },\n LUF: {\n displayName: \"Luxembourgian Franc\",\n \"displayName-count-one\": \"Luxembourgian franc\",\n \"displayName-count-other\": \"Luxembourgian francs\",\n symbol: \"LUF\"\n },\n LUL: {\n displayName: \"Luxembourg Financial Franc\",\n \"displayName-count-one\": \"Luxembourg financial franc\",\n \"displayName-count-other\": \"Luxembourg financial francs\",\n symbol: \"LUL\"\n },\n LVL: {\n displayName: \"Latvian Lats\",\n \"displayName-count-one\": \"Latvian lats\",\n \"displayName-count-other\": \"Latvian lati\",\n symbol: \"LVL\",\n \"symbol-alt-narrow\": \"Ls\"\n },\n LVR: {\n displayName: \"Latvian Ruble\",\n \"displayName-count-one\": \"Latvian ruble\",\n \"displayName-count-other\": \"Latvian rubles\",\n symbol: \"LVR\"\n },\n LYD: {\n displayName: \"Libyan Dinar\",\n \"displayName-count-one\": \"Libyan dinar\",\n \"displayName-count-other\": \"Libyan dinars\",\n symbol: \"LYD\"\n },\n MAD: {\n displayName: \"Moroccan Dirham\",\n \"displayName-count-one\": \"Moroccan dirham\",\n \"displayName-count-other\": \"Moroccan dirhams\",\n symbol: \"MAD\"\n },\n MAF: {\n displayName: \"Moroccan Franc\",\n \"displayName-count-one\": \"Moroccan franc\",\n \"displayName-count-other\": \"Moroccan francs\",\n symbol: \"MAF\"\n },\n MCF: {\n displayName: \"Monegasque Franc\",\n \"displayName-count-one\": \"Monegasque franc\",\n \"displayName-count-other\": \"Monegasque francs\",\n symbol: \"MCF\"\n },\n MDC: {\n displayName: \"Moldovan Cupon\",\n \"displayName-count-one\": \"Moldovan cupon\",\n \"displayName-count-other\": \"Moldovan cupon\",\n symbol: \"MDC\"\n },\n MDL: {\n displayName: \"Moldovan Leu\",\n \"displayName-count-one\": \"Moldovan leu\",\n \"displayName-count-other\": \"Moldovan lei\",\n symbol: \"MDL\"\n },\n MGA: {\n displayName: \"Malagasy Ariary\",\n \"displayName-count-one\": \"Malagasy ariary\",\n \"displayName-count-other\": \"Malagasy ariaries\",\n symbol: \"MGA\",\n \"symbol-alt-narrow\": \"Ar\"\n },\n MGF: {\n displayName: \"Malagasy Franc\",\n \"displayName-count-one\": \"Malagasy franc\",\n \"displayName-count-other\": \"Malagasy francs\",\n symbol: \"MGF\"\n },\n MKD: {\n displayName: \"Macedonian Denar\",\n \"displayName-count-one\": \"Macedonian denar\",\n \"displayName-count-other\": \"Macedonian denari\",\n symbol: \"MKD\"\n },\n MKN: {\n displayName: \"Macedonian Denar (1992–1993)\",\n \"displayName-count-one\": \"Macedonian denar (1992–1993)\",\n \"displayName-count-other\": \"Macedonian denari (1992–1993)\",\n symbol: \"MKN\"\n },\n MLF: {\n displayName: \"Malian Franc\",\n \"displayName-count-one\": \"Malian franc\",\n \"displayName-count-other\": \"Malian francs\",\n symbol: \"MLF\"\n },\n MMK: {\n displayName: \"Myanmar Kyat\",\n \"displayName-count-one\": \"Myanmar kyat\",\n \"displayName-count-other\": \"Myanmar kyats\",\n symbol: \"MMK\",\n \"symbol-alt-narrow\": \"K\"\n },\n MNT: {\n displayName: \"Mongolian Tugrik\",\n \"displayName-count-one\": \"Mongolian tugrik\",\n \"displayName-count-other\": \"Mongolian tugriks\",\n symbol: \"MNT\",\n \"symbol-alt-narrow\": \"₮\"\n },\n MOP: {\n displayName: \"Macanese Pataca\",\n \"displayName-count-one\": \"Macanese pataca\",\n \"displayName-count-other\": \"Macanese patacas\",\n symbol: \"MOP\"\n },\n MRO: {\n displayName: \"Mauritanian Ouguiya (1973–2017)\",\n \"displayName-count-one\": \"Mauritanian ouguiya (1973–2017)\",\n \"displayName-count-other\": \"Mauritanian ouguiyas (1973–2017)\",\n symbol: \"MRO\"\n },\n MRU: {\n displayName: \"Mauritanian Ouguiya\",\n \"displayName-count-one\": \"Mauritanian ouguiya\",\n \"displayName-count-other\": \"Mauritanian ouguiyas\",\n symbol: \"MRU\"\n },\n MTL: {\n displayName: \"Maltese Lira\",\n \"displayName-count-one\": \"Maltese lira\",\n \"displayName-count-other\": \"Maltese lira\",\n symbol: \"MTL\"\n },\n MTP: {\n displayName: \"Maltese Pound\",\n \"displayName-count-one\": \"Maltese pound\",\n \"displayName-count-other\": \"Maltese pounds\",\n symbol: \"MTP\"\n },\n MUR: {\n displayName: \"Mauritian Rupee\",\n \"displayName-count-one\": \"Mauritian rupee\",\n \"displayName-count-other\": \"Mauritian rupees\",\n symbol: \"MUR\",\n \"symbol-alt-narrow\": \"Rs\"\n },\n MVP: {\n displayName: \"Maldivian Rupee (1947–1981)\",\n \"displayName-count-one\": \"Maldivian rupee (1947–1981)\",\n \"displayName-count-other\": \"Maldivian rupees (1947–1981)\",\n symbol: \"MVP\"\n },\n MVR: {\n displayName: \"Maldivian Rufiyaa\",\n \"displayName-count-one\": \"Maldivian rufiyaa\",\n \"displayName-count-other\": \"Maldivian rufiyaas\",\n symbol: \"MVR\"\n },\n MWK: {\n displayName: \"Malawian Kwacha\",\n \"displayName-count-one\": \"Malawian kwacha\",\n \"displayName-count-other\": \"Malawian kwachas\",\n symbol: \"MWK\"\n },\n MXN: {\n displayName: \"Mexican Peso\",\n \"displayName-count-one\": \"Mexican peso\",\n \"displayName-count-other\": \"Mexican pesos\",\n symbol: \"MX$\",\n \"symbol-alt-narrow\": \"$\"\n },\n MXP: {\n displayName: \"Mexican Silver Peso (1861–1992)\",\n \"displayName-count-one\": \"Mexican silver peso (1861–1992)\",\n \"displayName-count-other\": \"Mexican silver pesos (1861–1992)\",\n symbol: \"MXP\"\n },\n MXV: {\n displayName: \"Mexican Investment Unit\",\n \"displayName-count-one\": \"Mexican investment unit\",\n \"displayName-count-other\": \"Mexican investment units\",\n symbol: \"MXV\"\n },\n MYR: {\n displayName: \"Malaysian Ringgit\",\n \"displayName-count-one\": \"Malaysian ringgit\",\n \"displayName-count-other\": \"Malaysian ringgits\",\n symbol: \"MYR\",\n \"symbol-alt-narrow\": \"RM\"\n },\n MZE: {\n displayName: \"Mozambican Escudo\",\n \"displayName-count-one\": \"Mozambican escudo\",\n \"displayName-count-other\": \"Mozambican escudos\",\n symbol: \"MZE\"\n },\n MZM: {\n displayName: \"Mozambican Metical (1980–2006)\",\n \"displayName-count-one\": \"Mozambican metical (1980–2006)\",\n \"displayName-count-other\": \"Mozambican meticals (1980–2006)\",\n symbol: \"MZM\"\n },\n MZN: {\n displayName: \"Mozambican Metical\",\n \"displayName-count-one\": \"Mozambican metical\",\n \"displayName-count-other\": \"Mozambican meticals\",\n symbol: \"MZN\"\n },\n NAD: {\n displayName: \"Namibian Dollar\",\n \"displayName-count-one\": \"Namibian dollar\",\n \"displayName-count-other\": \"Namibian dollars\",\n symbol: \"NAD\",\n \"symbol-alt-narrow\": \"$\"\n },\n NGN: {\n displayName: \"Nigerian Naira\",\n \"displayName-count-one\": \"Nigerian naira\",\n \"displayName-count-other\": \"Nigerian nairas\",\n symbol: \"NGN\",\n \"symbol-alt-narrow\": \"₦\"\n },\n NIC: {\n displayName: \"Nicaraguan Córdoba (1988–1991)\",\n \"displayName-count-one\": \"Nicaraguan córdoba (1988–1991)\",\n \"displayName-count-other\": \"Nicaraguan córdobas (1988–1991)\",\n symbol: \"NIC\"\n },\n NIO: {\n displayName: \"Nicaraguan Córdoba\",\n \"displayName-count-one\": \"Nicaraguan córdoba\",\n \"displayName-count-other\": \"Nicaraguan córdobas\",\n symbol: \"NIO\",\n \"symbol-alt-narrow\": \"C$\"\n },\n NLG: {\n displayName: \"Dutch Guilder\",\n \"displayName-count-one\": \"Dutch guilder\",\n \"displayName-count-other\": \"Dutch guilders\",\n symbol: \"NLG\"\n },\n NOK: {\n displayName: \"Norwegian Krone\",\n \"displayName-count-one\": \"Norwegian krone\",\n \"displayName-count-other\": \"Norwegian kroner\",\n symbol: \"NOK\",\n \"symbol-alt-narrow\": \"kr\"\n },\n NPR: {\n displayName: \"Nepalese Rupee\",\n \"displayName-count-one\": \"Nepalese rupee\",\n \"displayName-count-other\": \"Nepalese rupees\",\n symbol: \"NPR\",\n \"symbol-alt-narrow\": \"Rs\"\n },\n NZD: {\n displayName: \"New Zealand Dollar\",\n \"displayName-count-one\": \"New Zealand dollar\",\n \"displayName-count-other\": \"New Zealand dollars\",\n symbol: \"NZ$\",\n \"symbol-alt-narrow\": \"$\"\n },\n OMR: {\n displayName: \"Omani Rial\",\n \"displayName-count-one\": \"Omani rial\",\n \"displayName-count-other\": \"Omani rials\",\n symbol: \"OMR\"\n },\n PAB: {\n displayName: \"Panamanian Balboa\",\n \"displayName-count-one\": \"Panamanian balboa\",\n \"displayName-count-other\": \"Panamanian balboas\",\n symbol: \"PAB\"\n },\n PEI: {\n displayName: \"Peruvian Inti\",\n \"displayName-count-one\": \"Peruvian inti\",\n \"displayName-count-other\": \"Peruvian intis\",\n symbol: \"PEI\"\n },\n PEN: {\n displayName: \"Peruvian Sol\",\n \"displayName-count-one\": \"Peruvian sol\",\n \"displayName-count-other\": \"Peruvian soles\",\n symbol: \"PEN\"\n },\n PES: {\n displayName: \"Peruvian Sol (1863–1965)\",\n \"displayName-count-one\": \"Peruvian sol (1863–1965)\",\n \"displayName-count-other\": \"Peruvian soles (1863–1965)\",\n symbol: \"PES\"\n },\n PGK: {\n displayName: \"Papua New Guinean Kina\",\n \"displayName-count-one\": \"Papua New Guinean kina\",\n \"displayName-count-other\": \"Papua New Guinean kina\",\n symbol: \"PGK\"\n },\n PHP: {\n displayName: \"Philippine Peso\",\n \"displayName-count-one\": \"Philippine peso\",\n \"displayName-count-other\": \"Philippine pesos\",\n symbol: \"₱\",\n \"symbol-alt-narrow\": \"₱\"\n },\n PKR: {\n displayName: \"Pakistani Rupee\",\n \"displayName-count-one\": \"Pakistani rupee\",\n \"displayName-count-other\": \"Pakistani rupees\",\n symbol: \"PKR\",\n \"symbol-alt-narrow\": \"Rs\"\n },\n PLN: {\n displayName: \"Polish Zloty\",\n \"displayName-count-one\": \"Polish zloty\",\n \"displayName-count-other\": \"Polish zlotys\",\n symbol: \"PLN\",\n \"symbol-alt-narrow\": \"zł\"\n },\n PLZ: {\n displayName: \"Polish Zloty (1950–1995)\",\n \"displayName-count-one\": \"Polish zloty (PLZ)\",\n \"displayName-count-other\": \"Polish zlotys (PLZ)\",\n symbol: \"PLZ\"\n },\n PTE: {\n displayName: \"Portuguese Escudo\",\n \"displayName-count-one\": \"Portuguese escudo\",\n \"displayName-count-other\": \"Portuguese escudos\",\n symbol: \"PTE\"\n },\n PYG: {\n displayName: \"Paraguayan Guarani\",\n \"displayName-count-one\": \"Paraguayan guarani\",\n \"displayName-count-other\": \"Paraguayan guaranis\",\n symbol: \"PYG\",\n \"symbol-alt-narrow\": \"₲\"\n },\n QAR: {\n displayName: \"Qatari Rial\",\n \"displayName-count-one\": \"Qatari rial\",\n \"displayName-count-other\": \"Qatari rials\",\n symbol: \"QAR\"\n },\n RHD: {\n displayName: \"Rhodesian Dollar\",\n \"displayName-count-one\": \"Rhodesian dollar\",\n \"displayName-count-other\": \"Rhodesian dollars\",\n symbol: \"RHD\"\n },\n ROL: {\n displayName: \"Romanian Leu (1952–2006)\",\n \"displayName-count-one\": \"Romanian leu (1952–2006)\",\n \"displayName-count-other\": \"Romanian Lei (1952–2006)\",\n symbol: \"ROL\"\n },\n RON: {\n displayName: \"Romanian Leu\",\n \"displayName-count-one\": \"Romanian leu\",\n \"displayName-count-other\": \"Romanian lei\",\n symbol: \"RON\",\n \"symbol-alt-narrow\": \"lei\"\n },\n RSD: {\n displayName: \"Serbian Dinar\",\n \"displayName-count-one\": \"Serbian dinar\",\n \"displayName-count-other\": \"Serbian dinars\",\n symbol: \"RSD\"\n },\n RUB: {\n displayName: \"Russian Ruble\",\n \"displayName-count-one\": \"Russian ruble\",\n \"displayName-count-other\": \"Russian rubles\",\n symbol: \"RUB\",\n \"symbol-alt-narrow\": \"₽\"\n },\n RUR: {\n displayName: \"Russian Ruble (1991–1998)\",\n \"displayName-count-one\": \"Russian ruble (1991–1998)\",\n \"displayName-count-other\": \"Russian rubles (1991–1998)\",\n symbol: \"RUR\"\n },\n RWF: {\n displayName: \"Rwandan Franc\",\n \"displayName-count-one\": \"Rwandan franc\",\n \"displayName-count-other\": \"Rwandan francs\",\n symbol: \"RWF\",\n \"symbol-alt-narrow\": \"RF\"\n },\n SAR: {\n displayName: \"Saudi Riyal\",\n \"displayName-count-one\": \"Saudi riyal\",\n \"displayName-count-other\": \"Saudi riyals\",\n symbol: \"SAR\"\n },\n SBD: {\n displayName: \"Solomon Islands Dollar\",\n \"displayName-count-one\": \"Solomon Islands dollar\",\n \"displayName-count-other\": \"Solomon Islands dollars\",\n symbol: \"SBD\",\n \"symbol-alt-narrow\": \"$\"\n },\n SCR: {\n displayName: \"Seychellois Rupee\",\n \"displayName-count-one\": \"Seychellois rupee\",\n \"displayName-count-other\": \"Seychellois rupees\",\n symbol: \"SCR\"\n },\n SDD: {\n displayName: \"Sudanese Dinar (1992–2007)\",\n \"displayName-count-one\": \"Sudanese dinar (1992–2007)\",\n \"displayName-count-other\": \"Sudanese dinars (1992–2007)\",\n symbol: \"SDD\"\n },\n SDG: {\n displayName: \"Sudanese Pound\",\n \"displayName-count-one\": \"Sudanese pound\",\n \"displayName-count-other\": \"Sudanese pounds\",\n symbol: \"SDG\"\n },\n SDP: {\n displayName: \"Sudanese Pound (1957–1998)\",\n \"displayName-count-one\": \"Sudanese pound (1957–1998)\",\n \"displayName-count-other\": \"Sudanese pounds (1957–1998)\",\n symbol: \"SDP\"\n },\n SEK: {\n displayName: \"Swedish Krona\",\n \"displayName-count-one\": \"Swedish krona\",\n \"displayName-count-other\": \"Swedish kronor\",\n symbol: \"SEK\",\n \"symbol-alt-narrow\": \"kr\"\n },\n SGD: {\n displayName: \"Singapore Dollar\",\n \"displayName-count-one\": \"Singapore dollar\",\n \"displayName-count-other\": \"Singapore dollars\",\n symbol: \"SGD\",\n \"symbol-alt-narrow\": \"$\"\n },\n SHP: {\n displayName: \"St. Helena Pound\",\n \"displayName-count-one\": \"St. Helena pound\",\n \"displayName-count-other\": \"St. Helena pounds\",\n symbol: \"SHP\",\n \"symbol-alt-narrow\": \"£\"\n },\n SIT: {\n displayName: \"Slovenian Tolar\",\n \"displayName-count-one\": \"Slovenian tolar\",\n \"displayName-count-other\": \"Slovenian tolars\",\n symbol: \"SIT\"\n },\n SKK: {\n displayName: \"Slovak Koruna\",\n \"displayName-count-one\": \"Slovak koruna\",\n \"displayName-count-other\": \"Slovak korunas\",\n symbol: \"SKK\"\n },\n SLE: {\n displayName: \"Sierra Leonean New Leone\",\n \"displayName-count-one\": \"Sierra Leonean new leone\",\n \"displayName-count-other\": \"Sierra Leonean new leones\",\n symbol: \"SLE\"\n },\n SLL: {\n displayName: \"Sierra Leonean Leone\",\n \"displayName-count-one\": \"Sierra Leonean leone\",\n \"displayName-count-other\": \"Sierra Leonean leones\",\n symbol: \"SLL\"\n },\n SOS: {\n displayName: \"Somali Shilling\",\n \"displayName-count-one\": \"Somali shilling\",\n \"displayName-count-other\": \"Somali shillings\",\n symbol: \"SOS\"\n },\n SRD: {\n displayName: \"Surinamese Dollar\",\n \"displayName-count-one\": \"Surinamese dollar\",\n \"displayName-count-other\": \"Surinamese dollars\",\n symbol: \"SRD\",\n \"symbol-alt-narrow\": \"$\"\n },\n SRG: {\n displayName: \"Surinamese Guilder\",\n \"displayName-count-one\": \"Surinamese guilder\",\n \"displayName-count-other\": \"Surinamese guilders\",\n symbol: \"SRG\"\n },\n SSP: {\n displayName: \"South Sudanese Pound\",\n \"displayName-count-one\": \"South Sudanese pound\",\n \"displayName-count-other\": \"South Sudanese pounds\",\n symbol: \"SSP\",\n \"symbol-alt-narrow\": \"£\"\n },\n STD: {\n displayName: \"São Tomé & Príncipe Dobra (1977–2017)\",\n \"displayName-count-one\": \"São Tomé & Príncipe dobra (1977–2017)\",\n \"displayName-count-other\": \"São Tomé & Príncipe dobras (1977–2017)\",\n symbol: \"STD\"\n },\n STN: {\n displayName: \"São Tomé & Príncipe Dobra\",\n \"displayName-count-one\": \"São Tomé & Príncipe dobra\",\n \"displayName-count-other\": \"São Tomé & Príncipe dobras\",\n symbol: \"STN\",\n \"symbol-alt-narrow\": \"Db\"\n },\n SUR: {\n displayName: \"Soviet Rouble\",\n \"displayName-count-one\": \"Soviet rouble\",\n \"displayName-count-other\": \"Soviet roubles\",\n symbol: \"SUR\"\n },\n SVC: {\n displayName: \"Salvadoran Colón\",\n \"displayName-count-one\": \"Salvadoran colón\",\n \"displayName-count-other\": \"Salvadoran colones\",\n symbol: \"SVC\"\n },\n SYP: {\n displayName: \"Syrian Pound\",\n \"displayName-count-one\": \"Syrian pound\",\n \"displayName-count-other\": \"Syrian pounds\",\n symbol: \"SYP\",\n \"symbol-alt-narrow\": \"£\"\n },\n SZL: {\n displayName: \"Swazi Lilangeni\",\n \"displayName-count-one\": \"Swazi lilangeni\",\n \"displayName-count-other\": \"Swazi emalangeni\",\n symbol: \"SZL\"\n },\n THB: {\n displayName: \"Thai Baht\",\n \"displayName-count-one\": \"Thai baht\",\n \"displayName-count-other\": \"Thai baht\",\n symbol: \"THB\",\n \"symbol-alt-narrow\": \"฿\"\n },\n TJR: {\n displayName: \"Tajikistani Ruble\",\n \"displayName-count-one\": \"Tajikistani ruble\",\n \"displayName-count-other\": \"Tajikistani rubles\",\n symbol: \"TJR\"\n },\n TJS: {\n displayName: \"Tajikistani Somoni\",\n \"displayName-count-one\": \"Tajikistani somoni\",\n \"displayName-count-other\": \"Tajikistani somonis\",\n symbol: \"TJS\"\n },\n TMM: {\n displayName: \"Turkmenistani Manat (1993–2009)\",\n \"displayName-count-one\": \"Turkmenistani manat (1993–2009)\",\n \"displayName-count-other\": \"Turkmenistani manat (1993–2009)\",\n symbol: \"TMM\"\n },\n TMT: {\n displayName: \"Turkmenistani Manat\",\n \"displayName-count-one\": \"Turkmenistani manat\",\n \"displayName-count-other\": \"Turkmenistani manat\",\n symbol: \"TMT\"\n },\n TND: {\n displayName: \"Tunisian Dinar\",\n \"displayName-count-one\": \"Tunisian dinar\",\n \"displayName-count-other\": \"Tunisian dinars\",\n symbol: \"TND\"\n },\n TOP: {\n displayName: \"Tongan Paʻanga\",\n \"displayName-count-one\": \"Tongan paʻanga\",\n \"displayName-count-other\": \"Tongan paʻanga\",\n symbol: \"TOP\",\n \"symbol-alt-narrow\": \"T$\"\n },\n TPE: {\n displayName: \"Timorese Escudo\",\n \"displayName-count-one\": \"Timorese escudo\",\n \"displayName-count-other\": \"Timorese escudos\",\n symbol: \"TPE\"\n },\n TRL: {\n displayName: \"Turkish Lira (1922–2005)\",\n \"displayName-count-one\": \"Turkish lira (1922–2005)\",\n \"displayName-count-other\": \"Turkish Lira (1922–2005)\",\n symbol: \"TRL\"\n },\n TRY: {\n displayName: \"Turkish Lira\",\n \"displayName-count-one\": \"Turkish lira\",\n \"displayName-count-other\": \"Turkish Lira\",\n symbol: \"TRY\",\n \"symbol-alt-narrow\": \"₺\",\n \"symbol-alt-variant\": \"TL\"\n },\n TTD: {\n displayName: \"Trinidad & Tobago Dollar\",\n \"displayName-count-one\": \"Trinidad & Tobago dollar\",\n \"displayName-count-other\": \"Trinidad & Tobago dollars\",\n symbol: \"TTD\",\n \"symbol-alt-narrow\": \"$\"\n },\n TWD: {\n displayName: \"New Taiwan Dollar\",\n \"displayName-count-one\": \"New Taiwan dollar\",\n \"displayName-count-other\": \"New Taiwan dollars\",\n symbol: \"NT$\",\n \"symbol-alt-narrow\": \"$\"\n },\n TZS: {\n displayName: \"Tanzanian Shilling\",\n \"displayName-count-one\": \"Tanzanian shilling\",\n \"displayName-count-other\": \"Tanzanian shillings\",\n symbol: \"TZS\"\n },\n UAH: {\n displayName: \"Ukrainian Hryvnia\",\n \"displayName-count-one\": \"Ukrainian hryvnia\",\n \"displayName-count-other\": \"Ukrainian hryvnias\",\n symbol: \"UAH\",\n \"symbol-alt-narrow\": \"₴\"\n },\n UAK: {\n displayName: \"Ukrainian Karbovanets\",\n \"displayName-count-one\": \"Ukrainian karbovanets\",\n \"displayName-count-other\": \"Ukrainian karbovantsiv\",\n symbol: \"UAK\"\n },\n UGS: {\n displayName: \"Ugandan Shilling (1966–1987)\",\n \"displayName-count-one\": \"Ugandan shilling (1966–1987)\",\n \"displayName-count-other\": \"Ugandan shillings (1966–1987)\",\n symbol: \"UGS\"\n },\n UGX: {\n displayName: \"Ugandan Shilling\",\n \"displayName-count-one\": \"Ugandan shilling\",\n \"displayName-count-other\": \"Ugandan shillings\",\n symbol: \"UGX\"\n },\n USD: {\n displayName: \"US Dollar\",\n \"displayName-count-one\": \"US dollar\",\n \"displayName-count-other\": \"US dollars\",\n symbol: \"$\",\n \"symbol-alt-narrow\": \"$\"\n },\n USN: {\n displayName: \"US Dollar (Next day)\",\n \"displayName-count-one\": \"US dollar (next day)\",\n \"displayName-count-other\": \"US dollars (next day)\",\n symbol: \"USN\"\n },\n USS: {\n displayName: \"US Dollar (Same day)\",\n \"displayName-count-one\": \"US dollar (same day)\",\n \"displayName-count-other\": \"US dollars (same day)\",\n symbol: \"USS\"\n },\n UYI: {\n displayName: \"Uruguayan Peso (Indexed Units)\",\n \"displayName-count-one\": \"Uruguayan peso (indexed units)\",\n \"displayName-count-other\": \"Uruguayan pesos (indexed units)\",\n symbol: \"UYI\"\n },\n UYP: {\n displayName: \"Uruguayan Peso (1975–1993)\",\n \"displayName-count-one\": \"Uruguayan peso (1975–1993)\",\n \"displayName-count-other\": \"Uruguayan pesos (1975–1993)\",\n symbol: \"UYP\"\n },\n UYU: {\n displayName: \"Uruguayan Peso\",\n \"displayName-count-one\": \"Uruguayan peso\",\n \"displayName-count-other\": \"Uruguayan pesos\",\n symbol: \"UYU\",\n \"symbol-alt-narrow\": \"$\"\n },\n UYW: {\n displayName: \"Uruguayan Nominal Wage Index Unit\",\n \"displayName-count-one\": \"Uruguayan nominal wage index unit\",\n \"displayName-count-other\": \"Uruguayan nominal wage index units\",\n symbol: \"UYW\"\n },\n UZS: {\n displayName: \"Uzbekistani Som\",\n \"displayName-count-one\": \"Uzbekistani som\",\n \"displayName-count-other\": \"Uzbekistani som\",\n symbol: \"UZS\"\n },\n VEB: {\n displayName: \"Venezuelan Bolívar (1871–2008)\",\n \"displayName-count-one\": \"Venezuelan bolívar (1871–2008)\",\n \"displayName-count-other\": \"Venezuelan bolívars (1871–2008)\",\n symbol: \"VEB\"\n },\n VED: {\n displayName: \"Bolívar Soberano\",\n \"displayName-count-one\": \"Bolívar Soberano\",\n \"displayName-count-other\": \"Bolívar Soberanos\",\n symbol: \"VED\"\n },\n VEF: {\n displayName: \"Venezuelan Bolívar (2008–2018)\",\n \"displayName-count-one\": \"Venezuelan bolívar (2008–2018)\",\n \"displayName-count-other\": \"Venezuelan bolívars (2008–2018)\",\n symbol: \"VEF\",\n \"symbol-alt-narrow\": \"Bs\"\n },\n VES: {\n displayName: \"Venezuelan Bolívar\",\n \"displayName-count-one\": \"Venezuelan bolívar\",\n \"displayName-count-other\": \"Venezuelan bolívars\",\n symbol: \"VES\"\n },\n VND: {\n displayName: \"Vietnamese Dong\",\n \"displayName-count-one\": \"Vietnamese dong\",\n \"displayName-count-other\": \"Vietnamese dong\",\n symbol: \"₫\",\n \"symbol-alt-narrow\": \"₫\"\n },\n VNN: {\n displayName: \"Vietnamese Dong (1978–1985)\",\n \"displayName-count-one\": \"Vietnamese dong (1978–1985)\",\n \"displayName-count-other\": \"Vietnamese dong (1978–1985)\",\n symbol: \"VNN\"\n },\n VUV: {\n displayName: \"Vanuatu Vatu\",\n \"displayName-count-one\": \"Vanuatu vatu\",\n \"displayName-count-other\": \"Vanuatu vatus\",\n symbol: \"VUV\"\n },\n WST: {\n displayName: \"Samoan Tala\",\n \"displayName-count-one\": \"Samoan tala\",\n \"displayName-count-other\": \"Samoan tala\",\n symbol: \"WST\"\n },\n XAF: {\n displayName: \"Central African CFA Franc\",\n \"displayName-count-one\": \"Central African CFA franc\",\n \"displayName-count-other\": \"Central African CFA francs\",\n symbol: \"FCFA\"\n },\n XAG: {\n displayName: \"Silver\",\n \"displayName-count-one\": \"troy ounce of silver\",\n \"displayName-count-other\": \"troy ounces of silver\",\n symbol: \"XAG\"\n },\n XAU: {\n displayName: \"Gold\",\n \"displayName-count-one\": \"troy ounce of gold\",\n \"displayName-count-other\": \"troy ounces of gold\",\n symbol: \"XAU\"\n },\n XBA: {\n displayName: \"European Composite Unit\",\n \"displayName-count-one\": \"European composite unit\",\n \"displayName-count-other\": \"European composite units\",\n symbol: \"XBA\"\n },\n XBB: {\n displayName: \"European Monetary Unit\",\n \"displayName-count-one\": \"European monetary unit\",\n \"displayName-count-other\": \"European monetary units\",\n symbol: \"XBB\"\n },\n XBC: {\n displayName: \"European Unit of Account (XBC)\",\n \"displayName-count-one\": \"European unit of account (XBC)\",\n \"displayName-count-other\": \"European units of account (XBC)\",\n symbol: \"XBC\"\n },\n XBD: {\n displayName: \"European Unit of Account (XBD)\",\n \"displayName-count-one\": \"European unit of account (XBD)\",\n \"displayName-count-other\": \"European units of account (XBD)\",\n symbol: \"XBD\"\n },\n XCD: {\n displayName: \"East Caribbean Dollar\",\n \"displayName-count-one\": \"East Caribbean dollar\",\n \"displayName-count-other\": \"East Caribbean dollars\",\n symbol: \"EC$\",\n \"symbol-alt-narrow\": \"$\"\n },\n XDR: {\n displayName: \"Special Drawing Rights\",\n \"displayName-count-one\": \"special drawing rights\",\n \"displayName-count-other\": \"special drawing rights\",\n symbol: \"XDR\"\n },\n XEU: {\n displayName: \"European Currency Unit\",\n \"displayName-count-one\": \"European currency unit\",\n \"displayName-count-other\": \"European currency units\",\n symbol: \"XEU\"\n },\n XFO: {\n displayName: \"French Gold Franc\",\n \"displayName-count-one\": \"French gold franc\",\n \"displayName-count-other\": \"French gold francs\",\n symbol: \"XFO\"\n },\n XFU: {\n displayName: \"French UIC-Franc\",\n \"displayName-count-one\": \"French UIC-franc\",\n \"displayName-count-other\": \"French UIC-francs\",\n symbol: \"XFU\"\n },\n XOF: {\n displayName: \"West African CFA Franc\",\n \"displayName-count-one\": \"West African CFA franc\",\n \"displayName-count-other\": \"West African CFA francs\",\n symbol: \"F CFA\"\n },\n XPD: {\n displayName: \"Palladium\",\n \"displayName-count-one\": \"troy ounce of palladium\",\n \"displayName-count-other\": \"troy ounces of palladium\",\n symbol: \"XPD\"\n },\n XPF: {\n displayName: \"CFP Franc\",\n \"displayName-count-one\": \"CFP franc\",\n \"displayName-count-other\": \"CFP francs\",\n symbol: \"CFPF\"\n },\n XPT: {\n displayName: \"Platinum\",\n \"displayName-count-one\": \"troy ounce of platinum\",\n \"displayName-count-other\": \"troy ounces of platinum\",\n symbol: \"XPT\"\n },\n XRE: {\n displayName: \"RINET Funds\",\n \"displayName-count-one\": \"RINET Funds unit\",\n \"displayName-count-other\": \"RINET Funds units\",\n symbol: \"XRE\"\n },\n XSU: {\n displayName: \"Sucre\",\n \"displayName-count-one\": \"Sucre\",\n \"displayName-count-other\": \"Sucres\",\n symbol: \"XSU\"\n },\n XTS: {\n displayName: \"Testing Currency Code\",\n \"displayName-count-one\": \"Testing Currency unit\",\n \"displayName-count-other\": \"Testing Currency units\",\n symbol: \"XTS\"\n },\n XUA: {\n displayName: \"ADB Unit of Account\",\n \"displayName-count-one\": \"ADB unit of account\",\n \"displayName-count-other\": \"ADB units of account\",\n symbol: \"XUA\"\n },\n XXX: {\n displayName: \"Unknown Currency\",\n \"displayName-count-one\": \"(unknown unit of currency)\",\n \"displayName-count-other\": \"(unknown currency)\",\n symbol: \"¤\"\n },\n YDD: {\n displayName: \"Yemeni Dinar\",\n \"displayName-count-one\": \"Yemeni dinar\",\n \"displayName-count-other\": \"Yemeni dinars\",\n symbol: \"YDD\"\n },\n YER: {\n displayName: \"Yemeni Rial\",\n \"displayName-count-one\": \"Yemeni rial\",\n \"displayName-count-other\": \"Yemeni rials\",\n symbol: \"YER\"\n },\n YUD: {\n displayName: \"Yugoslavian Hard Dinar (1966–1990)\",\n \"displayName-count-one\": \"Yugoslavian hard dinar (1966–1990)\",\n \"displayName-count-other\": \"Yugoslavian hard dinars (1966–1990)\",\n symbol: \"YUD\"\n },\n YUM: {\n displayName: \"Yugoslavian New Dinar (1994–2002)\",\n \"displayName-count-one\": \"Yugoslavian new dinar (1994–2002)\",\n \"displayName-count-other\": \"Yugoslavian new dinars (1994–2002)\",\n symbol: \"YUM\"\n },\n YUN: {\n displayName: \"Yugoslavian Convertible Dinar (1990–1992)\",\n \"displayName-count-one\": \"Yugoslavian convertible dinar (1990–1992)\",\n \"displayName-count-other\": \"Yugoslavian convertible dinars (1990–1992)\",\n symbol: \"YUN\"\n },\n YUR: {\n displayName: \"Yugoslavian Reformed Dinar (1992–1993)\",\n \"displayName-count-one\": \"Yugoslavian reformed dinar (1992–1993)\",\n \"displayName-count-other\": \"Yugoslavian reformed dinars (1992–1993)\",\n symbol: \"YUR\"\n },\n ZAL: {\n displayName: \"South African Rand (financial)\",\n \"displayName-count-one\": \"South African rand (financial)\",\n \"displayName-count-other\": \"South African rands (financial)\",\n symbol: \"ZAL\"\n },\n ZAR: {\n displayName: \"South African Rand\",\n \"displayName-count-one\": \"South African rand\",\n \"displayName-count-other\": \"South African rand\",\n symbol: \"ZAR\",\n \"symbol-alt-narrow\": \"R\"\n },\n ZMK: {\n displayName: \"Zambian Kwacha (1968–2012)\",\n \"displayName-count-one\": \"Zambian kwacha (1968–2012)\",\n \"displayName-count-other\": \"Zambian kwachas (1968–2012)\",\n symbol: \"ZMK\"\n },\n ZMW: {\n displayName: \"Zambian Kwacha\",\n \"displayName-count-one\": \"Zambian kwacha\",\n \"displayName-count-other\": \"Zambian kwachas\",\n symbol: \"ZMW\",\n \"symbol-alt-narrow\": \"ZK\"\n },\n ZRN: {\n displayName: \"Zairean New Zaire (1993–1998)\",\n \"displayName-count-one\": \"Zairean new zaire (1993–1998)\",\n \"displayName-count-other\": \"Zairean new zaires (1993–1998)\",\n symbol: \"ZRN\"\n },\n ZRZ: {\n displayName: \"Zairean Zaire (1971–1993)\",\n \"displayName-count-one\": \"Zairean zaire (1971–1993)\",\n \"displayName-count-other\": \"Zairean zaires (1971–1993)\",\n symbol: \"ZRZ\"\n },\n ZWD: {\n displayName: \"Zimbabwean Dollar (1980–2008)\",\n \"displayName-count-one\": \"Zimbabwean dollar (1980–2008)\",\n \"displayName-count-other\": \"Zimbabwean dollars (1980–2008)\",\n symbol: \"ZWD\"\n },\n ZWL: {\n displayName: \"Zimbabwean Dollar (2009)\",\n \"displayName-count-one\": \"Zimbabwean dollar (2009)\",\n \"displayName-count-other\": \"Zimbabwean dollars (2009)\",\n symbol: \"ZWL\"\n },\n ZWR: {\n displayName: \"Zimbabwean Dollar (2008)\",\n \"displayName-count-one\": \"Zimbabwean dollar (2008)\",\n \"displayName-count-other\": \"Zimbabwean dollars (2008)\",\n symbol: \"ZWR\"\n }\n },\n localeCurrency: \"USD\",\n accounting: {\n patterns: [\"$n\", \"($n)\"],\n groupSize: [3]\n }\n },\n calendar: {\n gmtFormat: \"GMT{0}\",\n gmtZeroFormat: \"GMT\",\n patterns: {\n d: \"M/d/y\",\n D: \"EEEE, MMMM d, y\",\n m: \"MMM d\",\n M: \"MMMM d\",\n y: \"MMM y\",\n Y: \"MMMM y\",\n F: \"EEEE, MMMM d, y h:mm:ss a\",\n g: \"M/d/y h:mm a\",\n G: \"M/d/y h:mm:ss a\",\n t: \"h:mm a\",\n T: \"h:mm:ss a\",\n s: \"yyyy'-'MM'-'dd'T'HH':'mm':'ss\",\n u: \"yyyy'-'MM'-'dd HH':'mm':'ss'Z'\"\n },\n dateTimeFormats: {\n full: \"{1} 'at' {0}\",\n long: \"{1} 'at' {0}\",\n medium: \"{1}, {0}\",\n short: \"{1}, {0}\",\n availableFormats: {\n Bh: \"h B\",\n Bhm: \"h:mm B\",\n Bhms: \"h:mm:ss B\",\n d: \"d\",\n E: \"ccc\",\n EBhm: \"E h:mm B\",\n EBhms: \"E h:mm:ss B\",\n Ed: \"d E\",\n Ehm: \"E h:mm a\",\n EHm: \"E HH:mm\",\n Ehms: \"E h:mm:ss a\",\n EHms: \"E HH:mm:ss\",\n Gy: \"y G\",\n GyMd: \"M/d/y GGGGG\",\n GyMMM: \"MMM y G\",\n GyMMMd: \"MMM d, y G\",\n GyMMMEd: \"E, MMM d, y G\",\n h: \"h a\",\n H: \"HH\",\n hm: \"h:mm a\",\n Hm: \"HH:mm\",\n hms: \"h:mm:ss a\",\n Hms: \"HH:mm:ss\",\n hmsv: \"h:mm:ss a v\",\n Hmsv: \"HH:mm:ss v\",\n hmv: \"h:mm a v\",\n Hmv: \"HH:mm v\",\n M: \"L\",\n Md: \"M/d\",\n MEd: \"E, M/d\",\n MMM: \"LLL\",\n MMMd: \"MMM d\",\n MMMEd: \"E, MMM d\",\n MMMMd: \"MMMM d\",\n \"MMMMW-count-one\": \"'week' W 'of' MMMM\",\n \"MMMMW-count-other\": \"'week' W 'of' MMMM\",\n ms: \"mm:ss\",\n y: \"y\",\n yM: \"M/y\",\n yMd: \"M/d/y\",\n yMEd: \"E, M/d/y\",\n yMMM: \"MMM y\",\n yMMMd: \"MMM d, y\",\n yMMMEd: \"E, MMM d, y\",\n yMMMM: \"MMMM y\",\n yQQQ: \"QQQ y\",\n yQQQQ: \"QQQQ y\",\n \"yw-count-one\": \"'week' w 'of' Y\",\n \"yw-count-other\": \"'week' w 'of' Y\"\n }\n },\n timeFormats: {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\"\n },\n dateFormats: {\n full: \"EEEE, MMMM d, y\",\n long: \"MMMM d, y\",\n medium: \"MMM d, y\",\n short: \"M/d/yy\"\n },\n days: {\n format: {\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n wide: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n },\n \"stand-alone\": {\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n wide: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"]\n }\n },\n months: {\n format: {\n abbreviated: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n wide: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\n },\n \"stand-alone\": {\n abbreviated: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n wide: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"]\n }\n },\n quarters: {\n format: {\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"]\n },\n \"stand-alone\": {\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"]\n }\n },\n dayPeriods: {\n format: {\n abbreviated: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"in the morning\",\n afternoon1: \"in the afternoon\",\n evening1: \"in the evening\",\n night1: \"at night\"\n },\n narrow: {\n midnight: \"mi\",\n am: \"a\",\n \"am-alt-variant\": \"am\",\n noon: \"n\",\n pm: \"p\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"in the morning\",\n afternoon1: \"in the afternoon\",\n evening1: \"in the evening\",\n night1: \"at night\"\n },\n wide: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"in the morning\",\n afternoon1: \"in the afternoon\",\n evening1: \"in the evening\",\n night1: \"at night\"\n }\n },\n \"stand-alone\": {\n abbreviated: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"morning\",\n afternoon1: \"afternoon\",\n evening1: \"evening\",\n night1: \"night\"\n },\n narrow: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"morning\",\n afternoon1: \"afternoon\",\n evening1: \"evening\",\n night1: \"night\"\n },\n wide: {\n midnight: \"midnight\",\n am: \"AM\",\n \"am-alt-variant\": \"am\",\n noon: \"noon\",\n pm: \"PM\",\n \"pm-alt-variant\": \"pm\",\n morning1: \"morning\",\n afternoon1: \"afternoon\",\n evening1: \"evening\",\n night1: \"night\"\n }\n }\n },\n eras: {\n format: {\n wide: {\n \"0\": \"Before Christ\",\n \"1\": \"Anno Domini\",\n \"0-alt-variant\": \"Before Common Era\",\n \"1-alt-variant\": \"Common Era\"\n },\n abbreviated: {\n \"0\": \"BC\",\n \"1\": \"AD\",\n \"0-alt-variant\": \"BCE\",\n \"1-alt-variant\": \"CE\"\n },\n narrow: {\n \"0\": \"B\",\n \"1\": \"A\",\n \"0-alt-variant\": \"BCE\",\n \"1-alt-variant\": \"CE\"\n }\n }\n },\n dateFields: {\n era: {\n wide: \"era\",\n short: \"era\",\n narrow: \"era\"\n },\n year: {\n wide: \"year\",\n short: \"yr.\",\n narrow: \"yr.\"\n },\n quarter: {\n wide: \"quarter\",\n short: \"qtr.\",\n narrow: \"qtr.\"\n },\n month: {\n wide: \"month\",\n short: \"mo.\",\n narrow: \"mo.\"\n },\n week: {\n wide: \"week\",\n short: \"wk.\",\n narrow: \"wk.\"\n },\n weekOfMonth: {\n wide: \"week of month\",\n short: \"wk. of mo.\",\n narrow: \"wk. of mo.\"\n },\n day: {\n wide: \"day\",\n short: \"day\",\n narrow: \"day\"\n },\n dayOfYear: {\n wide: \"day of year\",\n short: \"day of yr.\",\n narrow: \"day of yr.\"\n },\n weekday: {\n wide: \"day of the week\",\n short: \"day of wk.\",\n narrow: \"day of wk.\"\n },\n weekdayOfMonth: {\n wide: \"weekday of the month\",\n short: \"wkday. of mo.\",\n narrow: \"wkday. of mo.\"\n },\n dayperiod: {\n short: \"AM/PM\",\n wide: \"AM/PM\",\n narrow: \"AM/PM\"\n },\n hour: {\n wide: \"hour\",\n short: \"hr.\",\n narrow: \"hr.\"\n },\n minute: {\n wide: \"minute\",\n short: \"min.\",\n narrow: \"min.\"\n },\n second: {\n wide: \"second\",\n short: \"sec.\",\n narrow: \"sec.\"\n },\n zone: {\n wide: \"time zone\",\n short: \"zone\",\n narrow: \"zone\"\n },\n millisecond: {\n narrow: \"ms\",\n short: \"ms\",\n wide: \"millisecond\"\n }\n }\n },\n firstDay: 0,\n weekendRange: {\n start: 6,\n end: 0\n },\n likelySubtags: {\n en: \"en-Latn-US\"\n }\n});","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-page-not-found',\r\n template: `
Requested page was not found
`\r\n})\r\nexport class PageNotFoundComponent { }\r\n\r\n","import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\r\nimport { PortalUser, UserService } from './portal/user/portal-user.service';\r\nimport { Subscription } from 'rxjs';\r\nimport { UserInterfaceService } from './services/user-interface.service';\r\n\r\n@Component({\r\n templateUrl: './no-usage-right.component.html',\r\n styleUrls: ['./no-usage-right.component.scss']\r\n})\r\nexport class NoUsageRightComponent implements OnInit, OnDestroy {\r\n // Selectable users for showing admins contact list.\r\n public portalUsers: PortalUser[] = [];\r\n public showAdmins: boolean = false;\r\n public mobile: boolean = false;\r\n private subscriptions: ArrayRequested page requires administrator rights
`\r\n})\r\nexport class NoAdminRightComponent { }\r\n","import { Component, OnInit, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\r\n\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-landing',\r\n templateUrl: './app-landing.component.html',\r\n styleUrls: ['./app-landing.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AppLandingComponent implements OnInit {\r\n\r\n constructor(\r\n private router: Router,\r\n private cdRef: ChangeDetectorRef) { }\r\n\r\n /**\r\n * Function that redirects to desired component.\r\n */\r\n ngOnInit() {\r\n this.router.navigate([`Tasks`]);\r\n }\r\n\r\n}\r\n","Access to requested page not allowed.
`\r\n})\r\nexport class ForbiddenComponent { }\r\n","import { Component, OnInit, ChangeDetectionStrategy, OnDestroy, ChangeDetectorRef } from '@angular/core';\r\nimport { Router, ActivatedRoute, Params } from '@angular/router';\r\nimport { ProductRoleService } from './services/product-role.service';\r\nimport { Subscription, forkJoin, Subject, combineLatest, of } from 'rxjs';\r\n\r\nimport { AppComponentService } from './services/app-component.service';\r\nimport { WorksiteBasicinfoService } from './worksites/worksite/details/basicinfo/worksite-basicinfo.service';\r\nimport { PlanBasicinfoService } from './plans/plan/details/basicinfo/plan-basicinfo.service';\r\nimport { InvoicingProposalBasicinfoService } from './invoicing-proposals/invoicing-proposal/details/basicinfo/invoicing-proposal-basicinfo.service';\r\nimport { TenderingBasicinfoService } from './tenderings/tendering/details/basicinfo/tendering-basicinfo.service';\r\nimport { CollectionInvoicingProposalBasicinfoService } from './invoicing-proposals/collection-invoicing-proposal/details/basicinfo/collection-invoicing-proposal-basicinfo.service';\r\nimport { EndCustomerInvoiceBasicInformationService } from './end-customer-invoices/end-customer-invoice/details/basicinfo/end-customer-invoice-basicinfo.service';\r\n\r\n@Component({\r\n selector: 'app-open-target',\r\n templateUrl: './open-target.component.html',\r\n styleUrls: ['./open-target.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class OpenTargetComponent implements OnInit, OnDestroy {\r\n\r\n public searchId: string = '';\r\n public searchReady: boolean = false;\r\n private accessToInvoicingProposals: boolean = false;\r\n private accessToEndCustomerInvoice: boolean = false;\r\n private accessToCollectionInvoicingProposals: boolean = false;\r\n private accessToTenderings: boolean = false;\r\n public subscriptions: Array\r\n {{ 'error.login.info1' | blah }}\r\n
\r\n {{ 'error.login.info2' | blah }}\r\n