From ad56b1f8de4339f7dc98329f3240b4620137acaa Mon Sep 17 00:00:00 2001 From: Derek Thomson Date: Fri, 13 Feb 2026 20:08:26 -0500 Subject: [PATCH] change submission button --- editions/free/src/css/editorleftpanel.css | 17 ++++++++++++ src/build/bundles/app.bundle.js | 33 +++++++++++++++-------- src/build/bundles/app.bundle.js.map | 2 +- src/editor/ui/UI.js | 33 +++++++++++++++-------- 4 files changed, 62 insertions(+), 23 deletions(-) diff --git a/editions/free/src/css/editorleftpanel.css b/editions/free/src/css/editorleftpanel.css index 28165e5e..75ab1664 100644 --- a/editions/free/src/css/editorleftpanel.css +++ b/editions/free/src/css/editorleftpanel.css @@ -55,6 +55,23 @@ background-size: 100%; } +.submit-assignment-label { + border: none; + background: #5DB27E; + border: 3px solid white; + color: white; + display: inline-flex; + align-items: center; + justify-content: center; + width: max-content; + height: max-content; + padding: ${css_vh(0.6)} ${css_vh(1.8)}; + border-radius: 100vh; + box-shadow: #0000004d 3px 3px 1px; + font-family: Verdana; + font-size: ${css_vh(2.8)}; +} + .scrollbar { position: absolute; display: inline-block; diff --git a/src/build/bundles/app.bundle.js b/src/build/bundles/app.bundle.js index de4372b8..743b6e6a 100644 --- a/src/build/bundles/app.bundle.js +++ b/src/build/bundles/app.bundle.js @@ -72091,18 +72091,29 @@ var UI = function () { }; // move to project if (window.canSubmit) { - // Submit assignment button - var submitButton = (0, _lib.newHTML)("button", "submit-assignment-btn", menu); - submitButton.setAttribute("id", "submitAssignment"); - submitButton.onclick = function () { - window.submitAssignment(); - text.textContent = _Localization2.default.localize('SUBMIT_ASSIGNMENT_AGAIN'); - }; + if (window.isSubmitted) { + // Submitted label + var submittedLabel = (0, _lib.newHTML)("span", "submit-assignment-label", menu); + submittedLabel.setAttribute("id", "submitAssignment"); + submittedLabel.textContent = "Submitted"; + } else { + // Submit assignment button + var submitButton = (0, _lib.newHTML)("button", "submit-assignment-btn", menu); + submitButton.setAttribute("id", "submitAssignment"); + submitButton.onclick = function () { + window.submitAssignment(); + // Replace button with label + var submittedLabel = document.createElement("span"); + submittedLabel.className = "submit-assignment-label"; + submittedLabel.setAttribute("id", "submitAssignment"); + submittedLabel.textContent = "Submitted"; + submitButton.parentNode.replaceChild(submittedLabel, submitButton); + }; - (0, _lib.newHTML)('div', 'submit-assignment-icon', submitButton); - var text = (0, _lib.newHTML)('span', 'submit-assignment-text', submitButton); - var locKey = window.isSubmitted ? 'SUBMIT_ASSIGNMENT_AGAIN' : 'SUBMIT_ASSIGNMENT'; - text.textContent = _Localization2.default.localize(locKey); + (0, _lib.newHTML)('div', 'submit-assignment-icon', submitButton); + var text = (0, _lib.newHTML)('span', 'submit-assignment-text', submitButton); + text.textContent = "Turn in"; + } } UI.layoutLibrary(sl); } diff --git a/src/build/bundles/app.bundle.js.map b/src/build/bundles/app.bundle.js.map index 7c0a5375..d951e5ad 100644 --- a/src/build/bundles/app.bundle.js.map +++ b/src/build/bundles/app.bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@babel/polyfill/lib/index.js","webpack:///./node_modules/@babel/polyfill/lib/noConflict.js","webpack:///./node_modules/@babel/polyfill/node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/@firebase/app/dist/esm/index.esm2017.js","webpack:///./node_modules/@firebase/component/dist/esm/index.esm2017.js","webpack:///./node_modules/@firebase/database/dist/index.esm2017.js","webpack:///./node_modules/@firebase/logger/dist/esm/index.esm2017.js","webpack:///./node_modules/@firebase/util/dist/index.esm2017.js","webpack:///./node_modules/asn1.js/lib/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/api.js","webpack:///./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///./node_modules/asn1.js/lib/asn1/base/index.js","webpack:///./node_modules/asn1.js/lib/asn1/base/node.js","webpack:///./node_modules/asn1.js/lib/asn1/base/reporter.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/der.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/bn.js/lib/bn.js","webpack:///./node_modules/brorand/index.js","webpack:///./node_modules/browserify-aes/aes.js","webpack:///./node_modules/browserify-aes/authCipher.js","webpack:///./node_modules/browserify-aes/browser.js","webpack:///./node_modules/browserify-aes/decrypter.js","webpack:///./node_modules/browserify-aes/encrypter.js","webpack:///./node_modules/browserify-aes/ghash.js","webpack:///./node_modules/browserify-aes/incr32.js","webpack:///./node_modules/browserify-aes/modes/cbc.js","webpack:///./node_modules/browserify-aes/modes/cfb.js","webpack:///./node_modules/browserify-aes/modes/cfb1.js","webpack:///./node_modules/browserify-aes/modes/cfb8.js","webpack:///./node_modules/browserify-aes/modes/ctr.js","webpack:///./node_modules/browserify-aes/modes/ecb.js","webpack:///./node_modules/browserify-aes/modes/index.js","webpack:///./node_modules/browserify-aes/modes/ofb.js","webpack:///./node_modules/browserify-aes/streamCipher.js","webpack:///./node_modules/browserify-cipher/browser.js","webpack:///./node_modules/browserify-des/index.js","webpack:///./node_modules/browserify-des/modes.js","webpack:///./node_modules/browserify-rsa/index.js","webpack:///./node_modules/browserify-sign/algos.js","webpack:///./node_modules/browserify-sign/browser/index.js","webpack:///./node_modules/browserify-sign/browser/sign.js","webpack:///./node_modules/browserify-sign/browser/verify.js","webpack:///./node_modules/buffer-xor/index.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/cipher-base/index.js","webpack:///./node_modules/core-js/es6/index.js","webpack:///./node_modules/core-js/fn/array/flat-map.js","webpack:///./node_modules/core-js/fn/array/includes.js","webpack:///./node_modules/core-js/fn/object/entries.js","webpack:///./node_modules/core-js/fn/object/get-own-property-descriptors.js","webpack:///./node_modules/core-js/fn/object/values.js","webpack:///./node_modules/core-js/fn/promise/finally.js","webpack:///./node_modules/core-js/fn/string/pad-end.js","webpack:///./node_modules/core-js/fn/string/pad-start.js","webpack:///./node_modules/core-js/fn/string/trim-end.js","webpack:///./node_modules/core-js/fn/string/trim-start.js","webpack:///./node_modules/core-js/fn/symbol/async-iterator.js","webpack:///./node_modules/core-js/library/fn/global.js","webpack:///./node_modules/core-js/library/modules/_a-function.js","webpack:///./node_modules/core-js/library/modules/_an-object.js","webpack:///./node_modules/core-js/library/modules/_core.js","webpack:///./node_modules/core-js/library/modules/_ctx.js","webpack:///./node_modules/core-js/library/modules/_descriptors.js","webpack:///./node_modules/core-js/library/modules/_dom-create.js","webpack:///./node_modules/core-js/library/modules/_export.js","webpack:///./node_modules/core-js/library/modules/_fails.js","webpack:///./node_modules/core-js/library/modules/_global.js","webpack:///./node_modules/core-js/library/modules/_has.js","webpack:///./node_modules/core-js/library/modules/_hide.js","webpack:///./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/library/modules/_is-object.js","webpack:///./node_modules/core-js/library/modules/_object-dp.js","webpack:///./node_modules/core-js/library/modules/_property-desc.js","webpack:///./node_modules/core-js/library/modules/_to-primitive.js","webpack:///./node_modules/core-js/library/modules/es7.global.js","webpack:///./node_modules/core-js/modules/_a-function.js","webpack:///./node_modules/core-js/modules/_a-number-value.js","webpack:///./node_modules/core-js/modules/_add-to-unscopables.js","webpack:///./node_modules/core-js/modules/_advance-string-index.js","webpack:///./node_modules/core-js/modules/_an-instance.js","webpack:///./node_modules/core-js/modules/_an-object.js","webpack:///./node_modules/core-js/modules/_array-copy-within.js","webpack:///./node_modules/core-js/modules/_array-fill.js","webpack:///./node_modules/core-js/modules/_array-includes.js","webpack:///./node_modules/core-js/modules/_array-methods.js","webpack:///./node_modules/core-js/modules/_array-reduce.js","webpack:///./node_modules/core-js/modules/_array-species-constructor.js","webpack:///./node_modules/core-js/modules/_array-species-create.js","webpack:///./node_modules/core-js/modules/_bind.js","webpack:///./node_modules/core-js/modules/_classof.js","webpack:///./node_modules/core-js/modules/_cof.js","webpack:///./node_modules/core-js/modules/_collection-strong.js","webpack:///./node_modules/core-js/modules/_collection-weak.js","webpack:///./node_modules/core-js/modules/_collection.js","webpack:///./node_modules/core-js/modules/_core.js","webpack:///./node_modules/core-js/modules/_create-property.js","webpack:///./node_modules/core-js/modules/_ctx.js","webpack:///./node_modules/core-js/modules/_date-to-iso-string.js","webpack:///./node_modules/core-js/modules/_date-to-primitive.js","webpack:///./node_modules/core-js/modules/_defined.js","webpack:///./node_modules/core-js/modules/_descriptors.js","webpack:///./node_modules/core-js/modules/_dom-create.js","webpack:///./node_modules/core-js/modules/_enum-bug-keys.js","webpack:///./node_modules/core-js/modules/_enum-keys.js","webpack:///./node_modules/core-js/modules/_export.js","webpack:///./node_modules/core-js/modules/_fails-is-regexp.js","webpack:///./node_modules/core-js/modules/_fails.js","webpack:///./node_modules/core-js/modules/_fix-re-wks.js","webpack:///./node_modules/core-js/modules/_flags.js","webpack:///./node_modules/core-js/modules/_flatten-into-array.js","webpack:///./node_modules/core-js/modules/_for-of.js","webpack:///./node_modules/core-js/modules/_function-to-string.js","webpack:///./node_modules/core-js/modules/_global.js","webpack:///./node_modules/core-js/modules/_has.js","webpack:///./node_modules/core-js/modules/_hide.js","webpack:///./node_modules/core-js/modules/_html.js","webpack:///./node_modules/core-js/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/modules/_inherit-if-required.js","webpack:///./node_modules/core-js/modules/_invoke.js","webpack:///./node_modules/core-js/modules/_iobject.js","webpack:///./node_modules/core-js/modules/_is-array-iter.js","webpack:///./node_modules/core-js/modules/_is-array.js","webpack:///./node_modules/core-js/modules/_is-integer.js","webpack:///./node_modules/core-js/modules/_is-object.js","webpack:///./node_modules/core-js/modules/_is-regexp.js","webpack:///./node_modules/core-js/modules/_iter-call.js","webpack:///./node_modules/core-js/modules/_iter-create.js","webpack:///./node_modules/core-js/modules/_iter-define.js","webpack:///./node_modules/core-js/modules/_iter-detect.js","webpack:///./node_modules/core-js/modules/_iter-step.js","webpack:///./node_modules/core-js/modules/_iterators.js","webpack:///./node_modules/core-js/modules/_library.js","webpack:///./node_modules/core-js/modules/_math-expm1.js","webpack:///./node_modules/core-js/modules/_math-fround.js","webpack:///./node_modules/core-js/modules/_math-log1p.js","webpack:///./node_modules/core-js/modules/_math-sign.js","webpack:///./node_modules/core-js/modules/_meta.js","webpack:///./node_modules/core-js/modules/_microtask.js","webpack:///./node_modules/core-js/modules/_new-promise-capability.js","webpack:///./node_modules/core-js/modules/_object-assign.js","webpack:///./node_modules/core-js/modules/_object-create.js","webpack:///./node_modules/core-js/modules/_object-dp.js","webpack:///./node_modules/core-js/modules/_object-dps.js","webpack:///./node_modules/core-js/modules/_object-gopd.js","webpack:///./node_modules/core-js/modules/_object-gopn-ext.js","webpack:///./node_modules/core-js/modules/_object-gopn.js","webpack:///./node_modules/core-js/modules/_object-gops.js","webpack:///./node_modules/core-js/modules/_object-gpo.js","webpack:///./node_modules/core-js/modules/_object-keys-internal.js","webpack:///./node_modules/core-js/modules/_object-keys.js","webpack:///./node_modules/core-js/modules/_object-pie.js","webpack:///./node_modules/core-js/modules/_object-sap.js","webpack:///./node_modules/core-js/modules/_object-to-array.js","webpack:///./node_modules/core-js/modules/_own-keys.js","webpack:///./node_modules/core-js/modules/_parse-float.js","webpack:///./node_modules/core-js/modules/_parse-int.js","webpack:///./node_modules/core-js/modules/_perform.js","webpack:///./node_modules/core-js/modules/_promise-resolve.js","webpack:///./node_modules/core-js/modules/_property-desc.js","webpack:///./node_modules/core-js/modules/_redefine-all.js","webpack:///./node_modules/core-js/modules/_redefine.js","webpack:///./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack:///./node_modules/core-js/modules/_regexp-exec.js","webpack:///./node_modules/core-js/modules/_same-value.js","webpack:///./node_modules/core-js/modules/_set-proto.js","webpack:///./node_modules/core-js/modules/_set-species.js","webpack:///./node_modules/core-js/modules/_set-to-string-tag.js","webpack:///./node_modules/core-js/modules/_shared-key.js","webpack:///./node_modules/core-js/modules/_shared.js","webpack:///./node_modules/core-js/modules/_species-constructor.js","webpack:///./node_modules/core-js/modules/_strict-method.js","webpack:///./node_modules/core-js/modules/_string-at.js","webpack:///./node_modules/core-js/modules/_string-context.js","webpack:///./node_modules/core-js/modules/_string-html.js","webpack:///./node_modules/core-js/modules/_string-pad.js","webpack:///./node_modules/core-js/modules/_string-repeat.js","webpack:///./node_modules/core-js/modules/_string-trim.js","webpack:///./node_modules/core-js/modules/_string-ws.js","webpack:///./node_modules/core-js/modules/_task.js","webpack:///./node_modules/core-js/modules/_to-absolute-index.js","webpack:///./node_modules/core-js/modules/_to-index.js","webpack:///./node_modules/core-js/modules/_to-integer.js","webpack:///./node_modules/core-js/modules/_to-iobject.js","webpack:///./node_modules/core-js/modules/_to-length.js","webpack:///./node_modules/core-js/modules/_to-object.js","webpack:///./node_modules/core-js/modules/_to-primitive.js","webpack:///./node_modules/core-js/modules/_typed-array.js","webpack:///./node_modules/core-js/modules/_typed-buffer.js","webpack:///./node_modules/core-js/modules/_typed.js","webpack:///./node_modules/core-js/modules/_uid.js","webpack:///./node_modules/core-js/modules/_user-agent.js","webpack:///./node_modules/core-js/modules/_validate-collection.js","webpack:///./node_modules/core-js/modules/_wks-define.js","webpack:///./node_modules/core-js/modules/_wks-ext.js","webpack:///./node_modules/core-js/modules/_wks.js","webpack:///./node_modules/core-js/modules/core.get-iterator-method.js","webpack:///./node_modules/core-js/modules/es6.array.copy-within.js","webpack:///./node_modules/core-js/modules/es6.array.every.js","webpack:///./node_modules/core-js/modules/es6.array.fill.js","webpack:///./node_modules/core-js/modules/es6.array.filter.js","webpack:///./node_modules/core-js/modules/es6.array.find-index.js","webpack:///./node_modules/core-js/modules/es6.array.find.js","webpack:///./node_modules/core-js/modules/es6.array.for-each.js","webpack:///./node_modules/core-js/modules/es6.array.from.js","webpack:///./node_modules/core-js/modules/es6.array.index-of.js","webpack:///./node_modules/core-js/modules/es6.array.is-array.js","webpack:///./node_modules/core-js/modules/es6.array.iterator.js","webpack:///./node_modules/core-js/modules/es6.array.join.js","webpack:///./node_modules/core-js/modules/es6.array.last-index-of.js","webpack:///./node_modules/core-js/modules/es6.array.map.js","webpack:///./node_modules/core-js/modules/es6.array.of.js","webpack:///./node_modules/core-js/modules/es6.array.reduce-right.js","webpack:///./node_modules/core-js/modules/es6.array.reduce.js","webpack:///./node_modules/core-js/modules/es6.array.slice.js","webpack:///./node_modules/core-js/modules/es6.array.some.js","webpack:///./node_modules/core-js/modules/es6.array.sort.js","webpack:///./node_modules/core-js/modules/es6.array.species.js","webpack:///./node_modules/core-js/modules/es6.date.now.js","webpack:///./node_modules/core-js/modules/es6.date.to-iso-string.js","webpack:///./node_modules/core-js/modules/es6.date.to-json.js","webpack:///./node_modules/core-js/modules/es6.date.to-primitive.js","webpack:///./node_modules/core-js/modules/es6.date.to-string.js","webpack:///./node_modules/core-js/modules/es6.function.bind.js","webpack:///./node_modules/core-js/modules/es6.function.has-instance.js","webpack:///./node_modules/core-js/modules/es6.function.name.js","webpack:///./node_modules/core-js/modules/es6.map.js","webpack:///./node_modules/core-js/modules/es6.math.acosh.js","webpack:///./node_modules/core-js/modules/es6.math.asinh.js","webpack:///./node_modules/core-js/modules/es6.math.atanh.js","webpack:///./node_modules/core-js/modules/es6.math.cbrt.js","webpack:///./node_modules/core-js/modules/es6.math.clz32.js","webpack:///./node_modules/core-js/modules/es6.math.cosh.js","webpack:///./node_modules/core-js/modules/es6.math.expm1.js","webpack:///./node_modules/core-js/modules/es6.math.fround.js","webpack:///./node_modules/core-js/modules/es6.math.hypot.js","webpack:///./node_modules/core-js/modules/es6.math.imul.js","webpack:///./node_modules/core-js/modules/es6.math.log10.js","webpack:///./node_modules/core-js/modules/es6.math.log1p.js","webpack:///./node_modules/core-js/modules/es6.math.log2.js","webpack:///./node_modules/core-js/modules/es6.math.sign.js","webpack:///./node_modules/core-js/modules/es6.math.sinh.js","webpack:///./node_modules/core-js/modules/es6.math.tanh.js","webpack:///./node_modules/core-js/modules/es6.math.trunc.js","webpack:///./node_modules/core-js/modules/es6.number.constructor.js","webpack:///./node_modules/core-js/modules/es6.number.epsilon.js","webpack:///./node_modules/core-js/modules/es6.number.is-finite.js","webpack:///./node_modules/core-js/modules/es6.number.is-integer.js","webpack:///./node_modules/core-js/modules/es6.number.is-nan.js","webpack:///./node_modules/core-js/modules/es6.number.is-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.min-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.parse-float.js","webpack:///./node_modules/core-js/modules/es6.number.parse-int.js","webpack:///./node_modules/core-js/modules/es6.number.to-fixed.js","webpack:///./node_modules/core-js/modules/es6.number.to-precision.js","webpack:///./node_modules/core-js/modules/es6.object.assign.js","webpack:///./node_modules/core-js/modules/es6.object.create.js","webpack:///./node_modules/core-js/modules/es6.object.define-properties.js","webpack:///./node_modules/core-js/modules/es6.object.define-property.js","webpack:///./node_modules/core-js/modules/es6.object.freeze.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-names.js","webpack:///./node_modules/core-js/modules/es6.object.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.object.is-frozen.js","webpack:///./node_modules/core-js/modules/es6.object.is-sealed.js","webpack:///./node_modules/core-js/modules/es6.object.is.js","webpack:///./node_modules/core-js/modules/es6.object.keys.js","webpack:///./node_modules/core-js/modules/es6.object.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.object.seal.js","webpack:///./node_modules/core-js/modules/es6.object.set-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.to-string.js","webpack:///./node_modules/core-js/modules/es6.parse-float.js","webpack:///./node_modules/core-js/modules/es6.parse-int.js","webpack:///./node_modules/core-js/modules/es6.promise.js","webpack:///./node_modules/core-js/modules/es6.reflect.apply.js","webpack:///./node_modules/core-js/modules/es6.reflect.construct.js","webpack:///./node_modules/core-js/modules/es6.reflect.define-property.js","webpack:///./node_modules/core-js/modules/es6.reflect.delete-property.js","webpack:///./node_modules/core-js/modules/es6.reflect.enumerate.js","webpack:///./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.reflect.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.reflect.get.js","webpack:///./node_modules/core-js/modules/es6.reflect.has.js","webpack:///./node_modules/core-js/modules/es6.reflect.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.reflect.own-keys.js","webpack:///./node_modules/core-js/modules/es6.reflect.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.reflect.set-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.reflect.set.js","webpack:///./node_modules/core-js/modules/es6.regexp.constructor.js","webpack:///./node_modules/core-js/modules/es6.regexp.exec.js","webpack:///./node_modules/core-js/modules/es6.regexp.flags.js","webpack:///./node_modules/core-js/modules/es6.regexp.match.js","webpack:///./node_modules/core-js/modules/es6.regexp.replace.js","webpack:///./node_modules/core-js/modules/es6.regexp.search.js","webpack:///./node_modules/core-js/modules/es6.regexp.split.js","webpack:///./node_modules/core-js/modules/es6.regexp.to-string.js","webpack:///./node_modules/core-js/modules/es6.set.js","webpack:///./node_modules/core-js/modules/es6.string.anchor.js","webpack:///./node_modules/core-js/modules/es6.string.big.js","webpack:///./node_modules/core-js/modules/es6.string.blink.js","webpack:///./node_modules/core-js/modules/es6.string.bold.js","webpack:///./node_modules/core-js/modules/es6.string.code-point-at.js","webpack:///./node_modules/core-js/modules/es6.string.ends-with.js","webpack:///./node_modules/core-js/modules/es6.string.fixed.js","webpack:///./node_modules/core-js/modules/es6.string.fontcolor.js","webpack:///./node_modules/core-js/modules/es6.string.fontsize.js","webpack:///./node_modules/core-js/modules/es6.string.from-code-point.js","webpack:///./node_modules/core-js/modules/es6.string.includes.js","webpack:///./node_modules/core-js/modules/es6.string.italics.js","webpack:///./node_modules/core-js/modules/es6.string.iterator.js","webpack:///./node_modules/core-js/modules/es6.string.link.js","webpack:///./node_modules/core-js/modules/es6.string.raw.js","webpack:///./node_modules/core-js/modules/es6.string.repeat.js","webpack:///./node_modules/core-js/modules/es6.string.small.js","webpack:///./node_modules/core-js/modules/es6.string.starts-with.js","webpack:///./node_modules/core-js/modules/es6.string.strike.js","webpack:///./node_modules/core-js/modules/es6.string.sub.js","webpack:///./node_modules/core-js/modules/es6.string.sup.js","webpack:///./node_modules/core-js/modules/es6.string.trim.js","webpack:///./node_modules/core-js/modules/es6.symbol.js","webpack:///./node_modules/core-js/modules/es6.typed.array-buffer.js","webpack:///./node_modules/core-js/modules/es6.typed.data-view.js","webpack:///./node_modules/core-js/modules/es6.typed.float32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.float64-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int16-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int8-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint16-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint8-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","webpack:///./node_modules/core-js/modules/es6.weak-map.js","webpack:///./node_modules/core-js/modules/es6.weak-set.js","webpack:///./node_modules/core-js/modules/es7.array.flat-map.js","webpack:///./node_modules/core-js/modules/es7.array.includes.js","webpack:///./node_modules/core-js/modules/es7.object.entries.js","webpack:///./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/modules/es7.object.values.js","webpack:///./node_modules/core-js/modules/es7.promise.finally.js","webpack:///./node_modules/core-js/modules/es7.string.pad-end.js","webpack:///./node_modules/core-js/modules/es7.string.pad-start.js","webpack:///./node_modules/core-js/modules/es7.string.trim-left.js","webpack:///./node_modules/core-js/modules/es7.string.trim-right.js","webpack:///./node_modules/core-js/modules/es7.symbol.async-iterator.js","webpack:///./node_modules/core-js/modules/web.dom.iterable.js","webpack:///./node_modules/core-js/modules/web.immediate.js","webpack:///./node_modules/core-js/modules/web.timers.js","webpack:///./node_modules/core-js/web/index.js","webpack:///./node_modules/core-util-is/lib/util.js","webpack:///./node_modules/create-ecdh/browser.js","webpack:///./node_modules/create-hash/browser.js","webpack:///./node_modules/create-hash/md5.js","webpack:///./node_modules/create-hmac/browser.js","webpack:///./node_modules/create-hmac/legacy.js","webpack:///./node_modules/crypto-browserify/index.js","webpack:///./node_modules/des.js/lib/des.js","webpack:///./node_modules/des.js/lib/des/cbc.js","webpack:///./node_modules/des.js/lib/des/cipher.js","webpack:///./node_modules/des.js/lib/des/des.js","webpack:///./node_modules/des.js/lib/des/ede.js","webpack:///./node_modules/des.js/lib/des/utils.js","webpack:///./node_modules/diffie-hellman/browser.js","webpack:///./node_modules/diffie-hellman/lib/dh.js","webpack:///./node_modules/diffie-hellman/lib/generatePrime.js","webpack:///./node_modules/elliptic/lib/elliptic.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///./node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/key.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/signature.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack:///./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///./node_modules/elliptic/lib/elliptic/utils.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/evp_bytestokey/index.js","webpack:///./node_modules/intl-messageformat/index.js-exposed","webpack:///./node_modules/sql.js/dist/sql-wasm.wasm","webpack:///./node_modules/firebase/app/dist/esm/index.esm.js","webpack:///./node_modules/firebase/database/dist/esm/index.esm.js","webpack:///./node_modules/hash-base/index.js","webpack:///./node_modules/hash.js/lib/hash.js","webpack:///./node_modules/hash.js/lib/hash/common.js","webpack:///./node_modules/hash.js/lib/hash/hmac.js","webpack:///./node_modules/hash.js/lib/hash/ripemd.js","webpack:///./node_modules/hash.js/lib/hash/sha.js","webpack:///./node_modules/hash.js/lib/hash/sha/1.js","webpack:///./node_modules/hash.js/lib/hash/sha/224.js","webpack:///./node_modules/hash.js/lib/hash/sha/256.js","webpack:///./node_modules/hash.js/lib/hash/sha/384.js","webpack:///./node_modules/hash.js/lib/hash/sha/512.js","webpack:///./node_modules/hash.js/lib/hash/sha/common.js","webpack:///./node_modules/hash.js/lib/hash/utils.js","webpack:///./node_modules/hmac-drbg/lib/hmac-drbg.js","webpack:///./node_modules/idb/build/index.js","webpack:///./node_modules/idb/build/wrap-idb-value.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/intl-messageformat-parser/index.js","webpack:///./node_modules/intl-messageformat-parser/lib/parser.js","webpack:///./node_modules/intl-messageformat/dist/locale-data/ca.js","webpack:///./node_modules/intl-messageformat/dist/locale-data/de.js","webpack:///./node_modules/intl-messageformat/dist/locale-data/en.js","webpack:///./node_modules/intl-messageformat/dist/locale-data/es.js","webpack:///./node_modules/intl-messageformat/dist/locale-data/fr.js","webpack:///./node_modules/intl-messageformat/dist/locale-data/it.js","webpack:///./node_modules/intl-messageformat/dist/locale-data/ja.js","webpack:///./node_modules/intl-messageformat/dist/locale-data/nl.js","webpack:///./node_modules/intl-messageformat/dist/locale-data/pt.js","webpack:///./node_modules/intl-messageformat/dist/locale-data/sv.js","webpack:///./node_modules/intl-messageformat/dist/locale-data/th.js","webpack:///./node_modules/intl-messageformat/dist/locale-data/zh.js","webpack:///./node_modules/intl-messageformat/lib/compiler.js","webpack:///./node_modules/intl-messageformat/lib/core.js","webpack:///./node_modules/intl-messageformat/lib/en.js","webpack:///./node_modules/intl-messageformat/lib/es5.js","webpack:///./node_modules/intl-messageformat/lib/main.js","webpack:///./node_modules/intl-messageformat/lib/utils.js","webpack:///./node_modules/intl/index.js","webpack:///./node_modules/intl/lib/core.js","webpack:///./node_modules/intl/locale-data/jsonp/ca.js","webpack:///./node_modules/intl/locale-data/jsonp/de.js","webpack:///./node_modules/intl/locale-data/jsonp/en.js","webpack:///./node_modules/intl/locale-data/jsonp/es.js","webpack:///./node_modules/intl/locale-data/jsonp/fr.js","webpack:///./node_modules/intl/locale-data/jsonp/it.js","webpack:///./node_modules/intl/locale-data/jsonp/ja.js","webpack:///./node_modules/intl/locale-data/jsonp/nl.js","webpack:///./node_modules/intl/locale-data/jsonp/pt.js","webpack:///./node_modules/intl/locale-data/jsonp/sv.js","webpack:///./node_modules/intl/locale-data/jsonp/th.js","webpack:///./node_modules/intl/locale-data/jsonp/zh.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/md5.js/index.js","webpack:///./node_modules/miller-rabin/lib/mr.js","webpack:///./node_modules/minimalistic-assert/index.js","webpack:///./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack:///./node_modules/parse-asn1/asn1.js","webpack:///./node_modules/parse-asn1/certificate.js","webpack:///./node_modules/parse-asn1/fixProc.js","webpack:///./node_modules/parse-asn1/index.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/pbkdf2/browser.js","webpack:///./node_modules/pbkdf2/lib/async.js","webpack:///./node_modules/pbkdf2/lib/default-encoding.js","webpack:///./node_modules/pbkdf2/lib/precondition.js","webpack:///./node_modules/pbkdf2/lib/sync-browser.js","webpack:///./node_modules/process-nextick-args/index.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/public-encrypt/browser.js","webpack:///./node_modules/public-encrypt/mgf.js","webpack:///./node_modules/public-encrypt/privateDecrypt.js","webpack:///./node_modules/public-encrypt/publicEncrypt.js","webpack:///./node_modules/public-encrypt/withPublic.js","webpack:///./node_modules/public-encrypt/xor.js","webpack:///./node_modules/randombytes/browser.js","webpack:///./node_modules/randomfill/browser.js","webpack:///./node_modules/readable-stream/duplex-browser.js","webpack:///./node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack:///./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/readable-stream/passthrough.js","webpack:///./node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/readable-stream/transform.js","webpack:///./node_modules/readable-stream/writable-browser.js","webpack:///./node_modules/ripemd160/index.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/sha.js/hash.js","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/sha.js/sha.js","webpack:///./node_modules/sha.js/sha1.js","webpack:///./node_modules/sha.js/sha224.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/sha.js/sha384.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/snapsvg/Gruntfile.js","webpack:///./node_modules/sql.js/dist/sql-wasm.js","webpack:///./node_modules/stream-browserify/index.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/intl-messageformat/index.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/util-deprecate/browser.js","webpack:///./node_modules/vm-browserify/index.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/module.js","webpack:///./src/editor/ScratchJr.js","webpack:///./src/editor/blocks/Block.js","webpack:///./src/editor/blocks/BlockArg.js","webpack:///./src/editor/blocks/BlockSpecs.js","webpack:///./src/editor/blocks/Menu.js","webpack:///./src/editor/engine/Page.js","webpack:///./src/editor/engine/Prims.js","webpack:///./src/editor/engine/Runtime.js","webpack:///./src/editor/engine/Sprite.js","webpack:///./src/editor/engine/Stage.js","webpack:///./src/editor/engine/Thread.js","webpack:///./src/editor/ui/Alert.js","webpack:///./src/editor/ui/Grid.js","webpack:///./src/editor/ui/Library.js","webpack:///./src/editor/ui/Palette.js","webpack:///./src/editor/ui/Project.js","webpack:///./src/editor/ui/Record.js","webpack:///./src/editor/ui/Scripts.js","webpack:///./src/editor/ui/ScriptsPane.js","webpack:///./src/editor/ui/Scroll.js","webpack:///./src/editor/ui/Thumbs.js","webpack:///./src/editor/ui/UI.js","webpack:///./src/editor/ui/Undo.js","webpack:///./src/entry/app.js","webpack:///./src/entry/editor.js","webpack:///./src/entry/gettingstarted.js","webpack:///./src/entry/home.js","webpack:///./src/entry/inapp.js","webpack:///./src/entry/index.js","webpack:///./src/entry/setupRealtime.js","webpack:///./src/geom/Matrix.js","webpack:///./src/geom/Rectangle.js","webpack:///./src/geom/Vector.js","webpack:///./src/lobby/Home.js","webpack:///./src/lobby/Lobby.js","webpack:///./src/lobby/Samples.js","webpack:///./src/painteditor/Camera.js","webpack:///./src/painteditor/Ghost.js","webpack:///./src/painteditor/Layer.js","webpack:///./src/painteditor/Paint.js","webpack:///./src/painteditor/PaintAction.js","webpack:///./src/painteditor/PaintUndo.js","webpack:///./src/painteditor/Path.js","webpack:///./src/painteditor/SVGImage.js","webpack:///./src/painteditor/SVGTools.js","webpack:///./src/painteditor/Transform.js","webpack:///./src/tablet/Android.js","webpack:///./src/tablet/IO.js","webpack:///./src/tablet/MediaLib.js","webpack:///./src/tablet/OS.js","webpack:///./src/tablet/Web.js","webpack:///./src/tablet/WebDB.js","webpack:///./src/tablet/WebVideo.js","webpack:///./src/tablet/iOS.js","webpack:///./src/utils/Cookie.js","webpack:///./src/utils/DrawPath.js","webpack:///./src/utils/Events.js","webpack:///./src/utils/InitialOptions.js","webpack:///./src/utils/Localization.js","webpack:///./src/utils/SVG2Canvas.js","webpack:///./src/utils/ScratchAudio.js","webpack:///./src/utils/Sound.js","webpack:///./src/utils/lib.js","webpack:///./locale-data/complete.js (ignored)","webpack:///util (ignored)","webpack:///util (ignored)?50fc","webpack:///buffer (ignored)","webpack:///crypto (ignored)","webpack:///./lib/locales (ignored)"],"names":["workingCanvas","document","createElement","workingCanvas2","activeFocus","undefined","changed","storyStarted","runtime","stage","inFullscreen","keypad","textForm","editfirst","stagecolor","defaultSprite","layerTop","layerAboveBottom","dragginLayer","currentProject","editmode","isDebugging","time","userStart","onHold","shaking","stopShaking","version","autoSaveEnabled","autoSaveSetInterval","onBackButtonCallback","ScratchJr","v","window","Settings","stageColor","body","scrollTop","Date","urlvars","OS","hascamera","log","BlockSpecs","initBlocks","Project","loadIcon","src","getTime","loadCount","mode","init","setProgress","ScratchAudio","Library","Paint","Record","Prims","Runtime","Undo","editorEvents","load","Events","autoSaveInterval","setInterval","saving","UI","infoBoxOpen","saveProject","Alert","close","ongesturestart","setEventHandler","unfocus","onmousedown","onmouseup","evt","Palette","helpballoon","parentNode","removeChild","forms","editable","target","field","activetextbox","typing","projectname","myproject","activeElement","tagName","toLowerCase","blur","clearSelection","firstTime","firstClick","editDone","Menu","closeMyOpenMenu","currentPage","currentSpriteName","owner","e","preventDefault","len","arguments","length","res","i","console","dialogOpen","recordError","clearInterval","onDone","isEditable","error","prepareToSave","saveStory","analyticsEvent","projectTitle","sampleName","Localization","localizeSampleName","IO","uniqueProjectName","name","jsonData","newName","metadata","createProject","mtime","toString","md5","stopStripsFromTop","flippage","cleanassets","doNext","switchPage","location","href","getGotoLink","params","URLSearchParams","studentAssignmentID","append","itemID","gallery","isOff","inactive","className","updatePageControls","Grid","updateCursor","getSprite","select","unselect","updateThumb","startGreenFlagThreads","resetSprites","startCurrentPageStrips","list","page","div","childElementCount","spr","childNodes","id","startScriptsFor","sc","topblocks","getBlocksType","j","b","addRunScript","stopPropagation","stopStrips","stopThreads","resetPage","push","fakeEvent","createEvent","initTouchEvent","quitFullScreen","enterFullScreen","type","ids","style","display","displayStatus","background","pop","str","getActiveScript","getBlocks","frame","ti","onkeypress","handleKeyPress","onsubmit","submitOverride","key","keyCode","which","input","maxLength","onfocus","handleTextFieldFocus","onblur","handleTextFieldBlur","isText","textClicked","numberClicked","pt","getScreenPt","w","offsetWidth","h","offsetHeight","dx","x","scaleMultiplier","textAlign","left","top","y","isAndroid","AndroidInterface","scratchjr_setsoftkeyboardscrolllocation","devicePixelRatio","value","argValue","scratchjr_forceShowKeyboard","focus","oldvalue","textContent","substring","setValue","daddy","action","where","who","record","storyStart","scrollLeft","scratchjr_forceHideKeyboard","eatEvent","pad","keyboardAddKey","p","c","keym","mk","numEditKey","delta","numEditDone","Number","min","setMinusKey","setSpaceKey","needsToScroll","onkeydown","handleKeyDown","look","innerWidth","transition","duration","onComplete","ScriptsPane","scroll","refresh","fillValueWithKey","numEditDelete","t","sndFX","val","closeNumberEdit","resetScroll","validateNumber","ba","parseFloat","str2","replace","svgName","width","height","getAsset","svgDataUrl","svgBase64","split","dataurl","getThumbnail","atob","pngBase64","setmedianame","saveAndFlip","callbackReference","newActiveFocus","newChanged","newStoryStarted","newStage","newEditmode","newTime","newUserStart","newOnHold","newShaking","newStopShaking","Block","spec","isPalette","scale","pointerEvents","setBlockshapeFromSpecs","blockshape","getWidth","getHeight","addShadow","appendChild","position","webkitTransform","addHighlight","drawBlock","isCaret","createArgument","blocktype","aStart","anEnd","isReporter","icon","image","yellowStart","redEnd","redEndLong","cShape","prev","next","inside","indexOf","arg","repeatCounter","originalCount","threads","inpalette","max","shadowimg","hrubberband","vrubberband","done","shadow","opacity","paletteBlockShadowOpacity","visibility","ctx","getContext","img","complete","onload","drawImage","shine","cnv","clearRect","me","drawBlockType","icnv","blockicon","drawIcon","argType","updateIcon","dy","Math","round","drawMyIcon","BlockArg","update","bt","op","specs","defs","getArgValue","bbx","moveBlock","notchSize","myn","you","yourn","isConnectedAfterFirst","connectLast","setMyDock","findLast","theend","last","dockn","myprops","connections","n","getMyDockNum","thefirst","findFirst","connectBlock","yourtail","getMyDock","mylast","lastone","striplast","redrawShape","scaleAndRatio","block","addNumArg","isSampleLocalizedKey","isSampleOrStarter","localize","addTextArg","JSON","stringify","numperrow","getIconFrom","addImageMenu","closePictureMenu","speeds","menuCloseSpeeds","pageIcon","zoom","setAttribute","num","addLabel","addNumArgument","addTextArgument","textfieldimg","numfieldimg","margin","padding","font","blockArgFont","lsize","isNaN","fcn","drawChoice","button","addPressButton","pressDropDown","getImageFrom","pressbuttonSmall","pressbutton","openDropDown","mu","openMenu","dpr","pages","canvas","mainctx","fillStyle","fillRect","bkg","imgw","naturalWidth","imgh","naturalHeight","stampSpriteAt","ictx","beginPath","arc","PI","closePath","fill","strokeStyle","stroke","loadassets","fontwhite","fontpink","fontdarkgray","fontblack","fontyellow","fontdarkgreen","fontpurple","fontblue","fontred","fontorange","fontcolors","fontsizes","getshapes","sendshapes","Object","loadGraphics","setupBlocksSpecs","palettes","setupPalettesDef","categories","setupCategories","edition","canvasMask","projectThumb","requestFromServer","setBalloon","balloon","mic","yellowStartH","yellowCmd","yellowCmdH","redEndH","orangeCmd","orangeCmdH","limeCmd","limeCmdH","pinkCmd","pinkCmdH","redEndLongH","cShapeH","blueCmd","blueCmdH","caretrepeat","cmdS","startS","endS","endLongS","repeatS","url","ext","Array","categoryStartColor","categoryMotionColor","categoryLooksColor","categorySoundColor","categoryFlowColor","categoryStopColor","CHARACTER_NAME","COLOR","SOUND_NAME","PAGE","newLoadCount","size","color","parse","dh","rows","scaledWidth","zIndex","active","addImageToDropDown","cs","micon","iconSize","scaledIconSize","handleTouchStart","onmouseover","highlightdot","onmouseout","unhighlightdot","newOpenMenu","addEventListener","event","innerHeight","setStageScaleAndPosition","scriptsElem","dc","offsetTop","Page","data","container","pagesdiv","textstartat","sprites","emptyPage","loadPageData","lastSprite","mediaCount","setBackground","checkBkgDone","clearBackground","recreateObject","checkCount","layers","obj","substractCount","createCat","show","activate","hide","MediaLib","keys","path","duplicateBkg","fileName","getFilenameWithExt","duplicateAsset","isPng","substr","setBackgroundImage","svg","getmedia","nextStep","base64","getImageDataURL","setSVG","getImagesInSVG","btoa","xmlDoc","DOMParser","parseFromString","extxml","importNode","documentElement","nodeName","originalImg","cloneNode","getMediaLoadRatio","showstate","thumbnail","setPageThumb","tb","pq","Thumbs","pageMouseDown","w0","h0","rect","save","globalCompositeOperation","restore","shown","outline","drawSpriteImage","sw","sh","cx","cy","translate","rotate","angle","DEGTOR","flip","mtx","getMatrixFor","pos","Vector","floor","transformPoint","screenLeft","screenTop","sx","Matrix","a","d","rx","multiply","spritelist","getSprites","encodeSprite","layerid","textAttr","defaultScale","speed","dirx","diry","homex","homey","xcoor","ycoor","fontsize","Sprite","sprAttr","mascotData","pageAdded","updateSprite","updateSprites","updatePages","setCurrentSprite","spriteInView","cname","sounds","homescale","homeshown","spriteAdded","cid","sid","sprite","unescape","gotImage","setCostume","tinterval","hopList","table","Done","missing","Ignore","onflag","onmessage","onclick","ontouch","OnTouch","onchat","repeat","Repeat","forward","Forward","back","Back","up","Up","down","Down","Left","right","Right","home","Home","setspeed","SetSpeed","message","Message","setcolor","SetColor","bigger","Bigger","smaller","Smaller","wait","Wait","caretcmd","caretstart","caretend","gotopage","GotoPage","endstack","DoNextBlock","stopall","StopAll","stopmine","StopMine","forever","Forever","hop","Hop","Show","Hide","playsnd","playSound","playusersnd","grow","Grow","shrink","Shrink","same","Same","say","Say","strip","oldblock","unhighlight","isRunning","waitTimer","thisblock","threadsRunning","stop","yield","getSoundName","audio","snd","projectSounds","play","clear","s","count","openBalloon","setTime","closeBalloon","showTime","gotoPage","firstBlock","stack","goHome","pow","hopTo","vector","setPos","distance","abs","moveAtSpeed","render","angleStep","finalAngle","turning","setHeading","noScaleFor","changeSizeBy","setScaleTo","touchingAny","pair","receivers","msg","findReceivers","applyToAllStrips","newthreads","restartThread","called","thread","intervalId","rt","tickTask","updateRunStopButtons","activeThreads","step","endCase","runPrim","endPrim","duplicate","token","noh","highlight","thing","newThread","Thread","wasRunning","stopping","attr","whenDone","createSprite","createText","borderOn","code","Scripts","sound","loadProjectSound","ondragstart","displaySprite","doRender","drawBorder","SVG2Canvas","drawInCanvas","readOnly","svgerror","watermark","SVGTools","getWatermark","border","drawMyImage","iw","ih","ix","iy","box","getBoxWithEffects","other","dragthumbnail","box2","intersects","verifyHit","ctx2","intersection","stamp","pixels","getImageData","getAlpha","node","wrap","updateBubble","wrapText","wrapChar","setTransform","transform","getScale","mins","maxs","Rectangle","label","curve","bimg","currentZoom","offset","drawBalloon","h2","w2","side2","side1","concat","deltax","deltay","fontSize","fontFamily","textSpriteFont","homeflip","setTextBox","activateInput","recalculateText","sform","textsprite","getBox","styles","ci","setMenuTextColor","formsize","getBoundingClientRect","setTimeout","offsetLeft","form","noChars","deleteText","contractText","deactivateInput","splice","unfocusText","handleWrite","onkeyup","handleKeyUp","WINDOW_INNER_HEIGHT","isTablet","getSVGimage","XMLSerializer","serializeToString","measureText","textBaseline","fillText","shake","cb","isiOS","getSpriteData","getTextBoxData","getEncodableBlocks","encodeStrip","scripts","Stage","webkitTextSizeAdjust","mouseDown","initialPoint","deltaPoint","stageScale","prototype","setPage","isOn","deactivate","setPageSprites","loadPageThreads","el","thumb","overpage","join","stg","pageid","newp","catid","indx","getPagesID","removePageBlocks","removePage","refreshPage","setViewPage","gotoblocks","pageindex","detachBlock","getStagePt","checkShaking","removeSprite","hitobj","whoIsIt","sprname","mouseDownOnSprite","hitRect","clearEvents","holdit","startShaking","setEvents","pixel","fuzzy","getTargetPoint","mc","mouseMove","mouseUp","onmousemove","removeRunScript","dragged","threshold","diff","dist","startSpriteDrag","timeoutEvent","clearTimeout","wrapDelta","clickOnElement","moveElementBy","removeCharacter","updatePageBlocks","stopThreadSprite","removeFromPage","updateScriptsPageBlocks","th","updateBlock","clickOnText","clickOnSprite","mask","deselect","stopMine","draw","DrawPath","hidden","grid","setScaleAndPosition","drawLines","createNumbering","createCursor","createYcursor","createXcursor","lineWidth","moveTo","lineTo","row","N","column","numj","py","gc","mouseDownOnCursor","globalAlpha","strokeRect","setCursorsValues","numX","numY","xc","xstate","yc","ystate","mystate","selectedOne","nativeJr","clickThumb","libFrame","getElementById","minHeight","topbar","actions","ascontainer","as","myname","layoutHeader","inner","libType","closeSpriteSelection","closeBkgSelection","clean","createScrollPanel","addThumbnails","ontouchmove","onresize","editResource","cancelPick","buttons","paintme","okbut","cancelbut","addEmptyThumb","json","cond","items","values","order","query","displayAssets","addHR","displayLibAssets","backgrounds","dw","qty","asset_info","fromEntries","map","k","addAssetThumbChoose","selectAsset","key2","addLocalThumbChoose","parent","aa","parseAssetData","byme","fieldname","altmd5","drawMe","pngPath","getFilename","sizew","sizeh","currentCtx","hr","removeFromAssetList","clickMe","clearAllSelections","pt2","unSelect","selectThisAsset","ic","getAttribute","removeAssetFromLib","callback","results","assetThumbnailUnique","isUnique","remove","trace","deleteobject","thumbID","thumbType","editBackground","editCostume","open","sname","addSprite","analyticsName","updateBkg","pt1","sqrt","blockscale","numcat","betweenblocks","blockdy","timeoutid","dxblocks","blockdx","createCategorySelectors","paletteMouseDown","pc","sel","leftPx","widthPx","createSelector","pal","spt","ths","removeSound","startDrag","prepareForDrag","dropBlockFromPalette","draggingBlock","showHelp","sprdata","getData","recreateStrip","selectCategory","help","blockDesc","openPaletteBalloon","closeHelpBalloon","paletteBalloonFont","flowCaret","dragmousex","dragmousey","getBlockNamed","cancelAll","mx","my","dragcanvas","duplicateBlock","dragDiv","dragList","prepareCaret","pxWidth","pxHeight","index","officon","onicon","clickOnCategory","first","currentSel","newb","newScaledBlock","lift","addPagesBlocks","addSoundsBlocks","addBlockSound","available","drawRecordSound","old","recordSound","appear","overlapElemBy","overlapsWith","box1","area","boxi","element","getLandingPlace","blockDropped","deleteBlocks","newHelpballoon","interval","projectbarsize","mediaCountBase","delayLoad","startLoad","layout","getObject","dataRecieved","parseProjectData","loadData","doneProjectLoad","loadwait","isgift","setProjectIsGift","liftCurtain","needsScroll","fullscreenMode","notifyEditorDoneLoading","bd","modalOuter","modalMiddle","modal","addFeedback","drawBlind","cover","topcover","cover2","li","perc","getStarted","loadTask","f","setLoadPage","resetPages","beginTimer","getPage","loadme","errorMessage","reloadDebug","write","recreate","bkgid","recreatePage","callBack","waitUntilSaved","thumbnailMD5","projectID","database","result","pdata","thispdata","thumbnailUnique","getProject","getThumbnailPNG","getMD5","getmd5","savePNG","filename","saveDone","encodePage","hasargs","loops","carets","pagecount","drawSprites","pcnv","bgimg","firstElementChild","drawPNGInCanvas","drawSVGinCanvas","png","srccnv","drawLayer","maskBorders","toDataURL","drawLoadedImage","newMetadata","newMediaCount","newLoadIcon","isRecording","isPlaying","timeLimit","playTimeLimit","buttonsAreEnabled","volumeIndex","volumes","saveSoundAndClose","sv","si","ctrol","lib","stopSnd","playSnd","newToggleClicky","saveSoundandClose","prefix","enabled","querySelector","filter","newState","newStateStr","attrclass","toggleButtonUI","killRecorder","stopPlayingSound","doRecord","stopRecording","sndrecord","startRecording","startedRecording","poll","volume","updateVolume","soundname","startPlaying","startplay","timeOutPlay","timeout","parseInt","flashStopButton","stopplay","volumeCheckStopped","recordUIoff","recordstop","closeContinueSave","recorddisappear","registerProjectSound","tearDownRecorder","loadFromLocal","closeContinueRemove","disappear","newAvailable","srcElement","editArg","firstChild","WebKitCSSMatrix","getComputedStyle","prepareToDrag","dropBlock","runBlock","dragBackground","piece","snapToPlace","sendToBack","drag","snapCshape","snapBlock","findClosest","isValid","snapToDock","allowInside","insideCShape","docknum","choice","place","bestxy","getDockDxDy","thisxy","allblocks","yourdocks","resolveDocks","magnitude","choices","item","b1","n1","b2","n2","d1","d2","x1","y1","x2","y2","layoutStrip","layoutCshape","layoutNextBlock","maxh","oldh","cblock","adjustPos","adjustCinside","adjustCheight","redrawRepeat","findingGroup","gettopblocks","blocks","getCaretType","newCaret","before","after","cleanCarets","stopThreadBlock","recreateBlock","Scroll","currentsc","scriptsMouseDown","pickBlock","findGroup","sy","lpt","origin","startx","m41","starty","m42","move3D","blockFeedback","script","limit","ycor","removeCaret","insertCaret","getHittedThumb","quickHighlight","quickRestore","removeLibCaret","firstblock","adjustCanvas","fitToScreen","addBlockToScripts","bounceBack","setDragBackgroundEvents","dragMove","dragEnd","fcnmove","fcnup","cfcn","ofcn","hasHorizontal","hasVertical","arrowDistance","aleft","aright","aup","adown","contents","addArrows","getContent","getObjects","larrow","rarrow","scrolldown","scrollup","scrollright","scrollleft","bc","valx","valy","getAdjustment","needleft","needright","needup","needdown","ow","oh","minx","maxwidth","miny","maxheight","moveBlocks","touches","caret","pthumbs","pageThumbnail","highlighPage","unhighlighPage","ep","getType","deletePage","clickOnPage","prepareToDragPage","dropPage","draggingPage","clickPage","startPageShaking","mstyle","layoutPages","getPagePos","thispage","kid","pagename","myprev","mynext","positionMe","getPageOrder","elem","beforewho","oldpos","oldpage","repositionThumb","oldlist","renumberPageBlocks","stopPageShaking","cc","clickOnEmptyPage","costumes","spriteThumbnail","highlighSprite","unhighlighSprite","resetSpriteLibrary","updateSpriteThumb","selectThisSprite","drop","dragging","click","startCharShaking","stopCharShaking","spritename","getObjectFor","removePagesCaret","copySprite","setActiveScript","reset","projectNameTextInput","info","okclicky","EMAILSHARE","AIRDROPSHARE","topSection","middleSection","BottomSection","fullscreenControls","createFormForText","setupKeypad","setupEditableField","aspectRatioAdjustment","aspect","addProjectInfo","leftPanel","stageArea","rightPanel","sl","menu","canSubmit","submitButton","submitAssignment","text","locKey","isSubmitted","layoutLibrary","bp","setup","createScripts","infobox","isSandbox","canSave","nameField","addEditableName","staticinfo","title","showInfoBox","hideInfoBox","pgFrame","pgCloseButton","parentalGateClose","pgProblem","pgChoiceA","pgChoiceB","pgChoiceC","problems","problemChoice","random","theProblem","pgExplain","success","shareButtons","parentsSection","shareLoadingGif","shareType","saveAndShare","handleTextFieldSave","compressProject","fullName","emailSubject","PROJECT_NAME","shareName","sendSjrToShareDialog","pname","submitChange","autocomplete","autocorrect","bottom","handleNamePress","dontHide","finishTextFieldSave","setfield","reloadPage","e2","ctime","formatTime","unixtime","date","year","getFullYear","month","getMonth","day","getDate","hour","getHours","getMinutes","sec","getSeconds","spriteThumbsActions","sb","sbthumb","ns","scrollSpritesWheel","scrollSpritesPanel","deltaY","catkey","numSprites","scrollHeight","updateSpriteScroll","achild","putInPaintEditor","startDragThumb","startSpriteScroll","ignoreEvent","spriteClicked","prepareToScroll","stopScroll","spriteScolling","outerDiv","createTopBarClicky","addText","addBackground","switchGrid","toggleRun","resetAllSprites","fullScreen","setShowGrid","runStrips","toggle","nextpage","prevpage","nextPage","prevPage","fullscreenScaleMultiplier","rp","ndiv","addt","changebkg","tf","activetb","ta","clicky","openFontSizeMenu","col","topLevelColor","createColorMenu","createTextSizeMenu","swatchlist","spal","colour","sf","setSplashColor","splash","addImageUrl","splashshade","setTextColor","sizes","textuisize","fs","setTextSize","setMenuTextSize","backgroundColor","mycolor","ckid","setColor","setFontSize","buffer","tryCounter","prevStep","getUndo","timeStamp","smartRecreate","cmd","recreateAllScripts","redoChangeBkg","redoScripts","copyPage","nextStep2","sprnames","setSprite","pageobj","lastspritename","lastsprite","projectsounds","loadPage","updateImages","doneLoading","press","tunOffButton","tunOnButton","kclass","db","handler","hasOwn","_scratchJrEventHandlers","existingHandler","removeEventListener","loadSettings","settingsRoot","entryFunction","root","scratchJrPage","search","get","setupTimeTracking","setActive","initDB","shouldCreateNewProject","waitForInterface","assets","registerLibraryAssets","indexMain","homeMain","scratchJrVersion","editorMain","gettingStartedMain","includeLocales","loadMediaLib","InitialOptions","initWithSettings","initialOptions","Camera","appinit","getsettings","gettingStartedCloseMe","videoObj","poster","scratchjr_getgettingstartedvideopath","homeGoBack","homeStrings","Lobby","inappAbout","inappInterfaceGuide","inappPaintEditorGuide","inappBlocksGuide","inappPrivacyPolicy","innerHTML","interfaceKeyHeaderNode","interfaceKeyDescriptionNode","interfaceKeys","interfaceDescriptions","currentButton","switchHelp","descriptionId","innerText","sndFXWithVolume","paintKeyHeaderNode","paintKeyDescriptionNode","paintKeys","paintDescriptions","blockDescriptionKeys","elements","querySelectorAll","forEach","alreadyStartedQuestions","indexGettingstarted","indexGohome","allQuestionsAnswered","indexLoadStart","indexNewSession","indexMoreApps","indexGoSettings","indexInfo","startQuestionsIfNotAlreadyStarted","indexAskRemainingQuestions","showSplash","askpermission","hidesplash","addTouchListener","indexHideSplash","indexSetAnalyticsPrefs","prefs","getCurrentVals","setAnalyticsPref","showLogo","showGear","notifySplashDone","nextQuestionKey","nextUnansweredQuestion","indexShowQuestion","hideLogo","hideGear","indexAskPlace","indexSetPlace","usageText","parentElement","indexHidePlaceQuestion","optionSelected","indexSelectOption","optionType","optionTypeForKey","options","optionsForKey","instructionText","localizeOptional","instructionForKey","instructionElem","createTextNode","optionsListElem","optionNum","option","optionElem","imgElem","translatedOption","setfile","parentalGate","setupRealtime","getFirebaseRef","userID","isLocal","FIREBASE_URL","refPath","firebaseApp","databaseURL","nodeRef","navigateToUrl","snapshot","pathname","userData","cos","sin","scalex","scaley","m2","zero","m","r","x0","y0","percent","overlapElem","isEmpty","isEqual","extentsw","extentsh","v1","v2","v3","v4","seg1","seg2","seg3","denom","numera","numerb","mua","mub","px","scrollvalue","performingAction","gotoEditor","holding","mytarget","getMouseTarget","actionTarget","initialPt","handleMove","scrolltop","performAction","getAction","createNewProject","removeProjThumb","getNextName","pn","getfile","gotScrollsState","displayProjects","emptyProjectThumbnail","addProjectLink","busy","mt","insertThumbnail","txt","bow","ribbonHorizontal","ribbonVertical","pageX","pageY","changedTouches","clientX","clientY","errorTimer","host","addSound","uiSounds","settingsPageDisabled","setSubMenu","notifyDoneLoading","changePage","selectButton","loadProjects","loadSamples","loadGuide","Samples","languageButtons","languageButton","l","supportedLocales","selected","currentLocale","newLocale","Cookie","set","selectSubButton","loadLink","cls","css","css2","iframe","errorLoading","wc","ht","toUpperCase","newBusy","playHowTo","files","addLink","displayThumb","loadMe","useStoryStarters","backgroundImage","xmlrequest","XMLHttpRequest","transferFailed","onreadystatechange","readyState","responseText","send","view","feedTarget","canvasFits","scaleToFit","viewbox","rounded","workspaceWidth","workspaceHeight","expandBy","crop","getLayerMask","mw","mh","startfeed","cameraToolsOn","finalctx","choosecamera","snapShot","cameraToolsOff","stopfeed","captureimage","mainCanvas","mainCanvasRect","isgroup","Layer","groupStartsAt","drawLayers","localindex","drawHole","startat","endat","drawElementHole","lineCap","strokevalues","miterLimit","linejoin","processXMLnode","SVGImage","addCameraFill","PaintUndo","Ghost","drawOffscreen","maskCanvas","maskData","linemask","maskColor","group","clearLayer","g","createGroup","hightlightElem","space","hasGhost","getKid","mfill","PaintAction","outsideArea","allTools","getPtColor","getHitObject","hitSomething","notHitted","dogohst","setGhostTo","rpos","createSVGRect","matches","getIntersectionList","svgHitHelper","paths","getElementsByTagName","pathData","Snap","isPointInside","setDashBorder","getActualHit","isStencil","targ","findUnderMe","contains","hittedSingleObject","e1","drawInContext","getHex","attributeTable","drawattr","attributePenTable","shape","createElementNS","xmlns","ang","Transform","getRotationAngle","applyRotation","dash","drawElements","drawElement","getRGB","nostroke","isCloseDPath","rot","extract","rotateFromCenter","renderPathTips","rgb","isTip","exclude","svgHit","findHit","lw","newMaskData","targetOffscreen","offscreen","onTopOfBy","getRelated","nl","factor","drawInOffscreen","overlap","overlapBox","touched","verifyCollision","checkThis","getArea","imageid","String","getImage","clip","getPathMask","overlapBoxBy","contatctPoints","Path","getPathCrossing","dt","test","addFromBelow","newlist","ordering","isTransparent","endDotColor","renderPath","getBoxCenter","xmlnslink","fillcolor","pensizes","strokewidth","spriteId","currentName","costumeScale","isBkg","currentMd5","paintFrame","saveMD5","svgdata","maxZoom","minZoom","onTouchPinchStart","gestureStart","onMousePinchStart","onTouchMoveScroll","onTouchEndScroll","setCanvasTransform","setSplash","setSplashShade","cscale","clearWorkspace","initBkg","initSprite","detectGesture","ondevicemotion","backToProject","ignore","cmdForGesture","pinchStart","currentshape","stopAction","skipmodes","scaleStartsAt","updatePinchCenter","zoomPt","pinchcenter","clearDragAndDrop","gestureChange","gestureEnd","zoomScale","updateZoomScale","selector","showDots","setZoomTo","ontouchstart","dragGroup","quitEditMode","clearDragGroup","savePageImage","saveSprite","changePageSprite","doAction","tools","selectButtonFromDiv","selectPenSize","getClass","state","getCoorx","getCoory","indent","edge","leftPalette","workspaceContainer","workspace","rightPalette","colorPalette","createSVGeditor","checkMark","nameOfcostume","nameFocus","nameBlur","handleKeyRelease","submitNameChange","setSelectionRange","validate","leftpal","setupEditPalette","createSizeSelector","section","but","setMode","ps","setSize","drawPenSizeInColor","rightpal","addSidePalette","camera","fc","scratchjr_has_multiple_cameras","captureContainer","capture","closeCameraMode","captureContainerParent","setAttributeNS","drawGrid","initSwatchList","spalContainer","selectSwatch","setSwatchColor","updateStrokes","create","xform","getTranslateTransform","selxform","layer","getGridPath","addChild","gridsize","setUpCanvasArea","spriteform","loadBackground","fixed","cmds","arrayToString","loadChar","getBkg","loadBkg","createBkgFromXML","flat","skipUnwantedElements","doAbsolute","reassingIds","loadCharacter","loadSprite","createCharFromXML","setTranslate","translateTo","worthsaving","saveBackground","setMedia","changeBackground","mobj","checkDuplicateBkg","addToBkgLib","setmedia","setBkgRecord","pngmd5","keylist","stmt","saveShape","addOrModifySprite","getLoadType","modifySpriteName","checkDuplicate","addToLib","setCostumeRecord","modifySprite","removeAttribute","adjustShapePosition","maxpix","ratio","setAbsolutePath","getComponents","newMode","newCurrentZoom","newInitialPoint","newDeltaPoint","currentShape","startAngle","mindist","onTouchMove","onTouchEnd","onTouchCancel","onMouseMove","onMouseUp","hitDot","cmdForMouseDown","erot","getRotation","rotateFromPoint","isCreator","removeShape","othertools","stopDrag","cmdForMouseUp","updateAll","cmdForMouseMove","cmdForClick","oldshape","fingerDown","getValidHold","startHold","findTarget","bringToFront","selectTarget","addPolyline","getClosestPath","maxDistance","addEllipse","addRect","addTriangle","selectedDotColor","onBackground","moveObject","startDragShape","eleminateTranslates","appendForMove","startRotateShape","rotateFromMouse","makeAgroup","getCombinedMatrices","center","point","atan2","setRotate","new_x","new_y","shiftKey","ry","movePointByDrag","reshape","newstate","playSnapSound","newcx","newcy","pl","makeRectangle","notValidBox","makeEllipse","process","getCommands","checkBackgroundCrop","fingerUp","enterEditMode","mtimage","removeClip","cleanup","startFeed","cloneSVGelement","backToSelect","paintRegion","getPaintType","setData","paint","justPaint","isCompoundPath","getTransformedBox","union","getPenWidthForm","getDotColor","deleteDot","rectMouseUp","vl","ellipseMouseUp","findWho","setStrokeSizeAndColor","addDot","correspondingUseElement","namespaceURI","createSVGPoint","screenMatrix","getScreenCTM","globalPoint","matrixTransform","inverse","newTarget","selectMouseDown","triMouseDown","rectMouseDown","pathMouseDown","ellipseMouseDown","grabMouseDown","cloneMouseDown","selectMouseMove","rotateMouseMove","triMouseMove","rectMouseMove","pathMouseMove","ellipseMouseMove","grabMouseMove","paintBucketMouseMove","cloneMouseMove","fingerMove","selectMouseUp","rotateMouseUp","triMouseUp","pathMouseUp","grabMouseUp","paintBucketMouseUp","ignoreEvt","scissorsMouseUp","cameraMouseUp","selectClick","triClick","rectClick","pathClick","ellipseClick","paintBucketClick","cloneMouseUp","undo","redo","updateActiveUndo","toObject","dontStartStories","getCanvas","svg2string","runUndo","newBuffer","newIndex","lineDotColor","curveDotColor","dotsize","idotsize","plist","getPolyPoints","firstpoint","addPoints","smoothPoints","unshift","deletePoints","bezier","drawBezier","points","pp","numberOfItems","getItem","ax","ay","nj","it","fillWithPoints","here","l2","mp","mid","l1","dot","pointslist","addPath","getBezier","lastcxy","lastpoint","lineSeg","startpt","curveSeg","l3","beforev","afterv","bisect","sum","norm","perp","neg","kappa","lx","c2","getControlPoint","c1","getRectangularD","getStylingFrom","getCommandList","getAbsoluteCommand","endp","match","ptlist","skipNext","thisCommand","shapetype","kind","skipCmd","ptbefore","ptafter","moveToCmd","cmd1","cmd2","imported","adaptPath","lastpt","pts","shift","nextpt","thisPt","startAt","diffend","applyToCmds","combineAll","eliminateAll","getPointsForFirst","getPathDotsElem","lastdot","iscurve","curveoptions","getDotPoint","farilyclose","cp","getDot","highlightDot","unhighlightDot","getDotsCoodinates","valid","getDattribute","rotatePointsOf","getDotPos","arr","matrix","grab","radius","skip","isbez","newpt","addPoint","commands","drawWithLineMask","drawCommand","mycmds","getSVGcommands","getPointsAndCmds","newCmd","getHitIndex","prevcmd","inLine","C","A","B","K","list1","mustdelteboth","getHitPointIndex","np","hideDots","getPathBorder","closestdot","getClosestDotTo","range","getPointIndex","current","getStartPoint","getAnchorpoints","cslist","diffstart","isEnd","mtlist","reverse","char","charAt","ocmds","iscropped","createFromBkg","someOverlaps","bringElementsToFront","cropped","strechEdges","withinBounds","isClockWise","getContactPoints","cantcrop","endsSameSide","createStencil","isimage","onTopOf","makeAcut","attr2","getComplement","cutBoard","ptsincontact","seam1","seam2","hitpoints","updateContactPoints","isValidSegment","findEdge","atEdge","addtoend","moveToEdge","addtostart","eraser","lineIntersect","goin","goout","epathdata","chopSection","newpath","edata","slice","joinIn","joinOut","getShapeFromPoints","fromPointsToPath","getNextCmd","endpt","getFromPoints","myseamin","myseamout","elist","hitout","hitin","seamin1","updateContact","res1","extendSearch","seamout1","res2","start","end","hp","getTurnType","limitpoints","getMinMaxPoints","findGreaterThanIndex","triangleAreaDir","lastmin","maxx","maxy","lastcmd","breakRelationship","makeCompoundPath","family","findPlace","getMatchPathIndex","mypoints","yourpoints","countMatchingPoints","findIntersecting","containsImage","anyCrossing","filled","sort","insideMe","processCompoundPath","includesBox","objlist","getAllPoints","seg","getBezierPoints","cleanBezier","p1x","p2x","p3x","p4x","p1y","p2y","p3y","p4y","xl","yl","curvePoints","dir","yourdir","createImageFromFeed","isbkg","pathmask","getCopy","maskattr","clippath","clipPathUnits","vl1","borderattr","vl2","keepmt","pathborder","newcnv","newctx","drame","getClonedImage","html5img","renderImage","imgdata","createSVGTransform","getPenAttributes","onlyKeys","getPenAttr","getPolyAttr","header","rename","corner","serializer","comment","createComment","calculateViewBox","outsideBounds","getMinMax","isSaving","getPathBox","getPolygon","polygonArea","poly","unitvector","pt4","pt3","xlist","ylist","pbox","getOnePathBox","allpoints","acurve","copy","getCount","getClonedElement","elems","getFlatten","removeDuplicates","cloneImage","getClone","hasScaleMatrix","getScaleMatrix","applyMatrix","removeExtras","changeShape","setObjectWaterMark","fillWithColor","hsb","brightness","baseVal","gradientTransform","tl","getList","newPoint","line","updateRotationCenter","trnsf","removeItem","createSVGMatrix","mtom","appendItem","insertItemBefore","to_rad","isIdentity","scaleIndex","getIndex","newtl","setMatrix","getModifiedCmd","imgdelta","cmtx","SVGMatrix","mediacounter","Android","database_stmt","database_query","ft","io_cleanassets","file","io_getmedialen","processdata","io_getmediadata","off","oldstr","getmediadone","newlen","getmediadata","io_getsettings","io_getmediadone","io_setmedia","io_setmedianame","io_getmd5","io_remove","io_getfile","io_setfile","io_registersound","io_playsound","io_stopsound","recordsound_recordstart","recordsound_recordstop","recordsound_volume","recordsound_startplay","recordsound_stopplay","recordsound_recordclose","scratchjr_cameracheck","scratchjr_startfeed","scratchjr_stopfeed","scratchjr_choosecamera","scratchjr_captureimage","projectData","createZipForProject","emailBody","sendSjrUsingShareDialog","folder","deviceName","category","preferredPlace","setAnalyticsPlacePref","collectLibraryAssets","lastSavedProjectHash","zipFileName","request","status","destw","desth","gotit","loadInnerImages","images","getImages","imageCount","svgimg","readToLad","getExtension","getObjectinDB","isGift","addValue","deleted","projectHash","lastIndexOf","projectReference","finished","projectFromDB","projectMetadata","assetLibraryVersion","collectAsset","assetType","pageReference","spriteReference","illegalRe","controlRe","reservedRe","windowsReservedRe","windowsTrailingRe","useOne","nameAndNumber","splitName","lastPart","giftProjectNameParts","existingProjects","newNumber","existingProjectName","existingProjectNameParts","number","samples","legacySprites","parsedResult","localizeMediaNames","generateKeys","bg","legacySpr","tabletInterface","Web","registerSound","stopSound","soundDone","b64data","loadProjectFromSjr","err","desc","newPath","newCamera","navigator","mediaDevices","getUserMedia","audioStream","recorderAudioContext","AudioContext","audioStreamSource","createMediaStreamSource","audioAnalyser","createAnalyser","connect","audioRecorder","MediaRecorder","latestAudioChunks","audioBlob","File","setButtonsEnabled","uploadAudio","latestAudioURL","URL","createObjectURL","reader","FileReader","audioContext","decodeAudioData","audioBuffer","audioBuffers","readAsArrayBuffer","bufferLength","frequencyBinCount","audioVolumeBuffer","Uint8Array","setupMediaRecording","audioRecorderAvailable","videoRecorderAvailable","webVideo","audioSources","calculateVolumeLevel","audioData","average","executeStatementFromJSON","saveDB","executeQueryFromJSON","readProjectFile","content","saveToProjectFiles","encoding","startsWith","fetch","response","arrayBuffer","onSoundEnd","createBufferSource","destination","getByteFrequencyData","WebVideo","imgDataURL","rawImgData","processimage","getDBString","latestThumbnail","getStringDBAndThumbnail","binaryData","export","blob","Blob","Response","headers","revokeObjectURL","downloadDB","Promise","resolve","reject","fileInput","uint8Array","Error","uploadFileToUint8Array","inputString","encoder","TextEncoder","encode","crypto","subtle","digest","hashBuffer","hashArray","from","base64String","fromCharCode","apply","hashString","dbData","loadScratchJrProject","showUploadDB","isArray","uploadedBinaryData","binaryDataToUTF16String","UTF8StringToUTF16String","getInitialDBString","initPromise","locateFile","sqlWasm","SQL","sharedProgramID","baseKey","alert","dbDataString","UTF16StringToBinaryData","Database","initTables","runMigrations","displayProjectFiles","imageType","endsWith","exec","statement","prepare","lastRowId","md5sToDelete","isThumbnail","placeholders","clearThumbnails","fileMD5","currentContents","queryResult","utf8","then","hashHex","bytes","padStart","chunkSize","stringChunks","subarray","string","charCodeAt","UTF16StringToUTF8String","utf16String","utf8Bytes","charCode","utf8String","codePoint","byte1","byte2","byte3","byte4","run","visibilityState","saveTimeout","stringData","dbHash","localStorage","saveScratchJrProject","setItem","includes","VideoCapture","videoElement","errorHandler","constraints","video","beginStartRecord","bind","onError","getId","currentStream","audioTracks","getAudioTracks","videoTracks","getVideoTracks","pause","srcObject","debugLog","stream","isRecordingPermitted","stopRecord","inOnError","cameraRect","isMirrored","shapeData","cameraPickerDiv","videoStyle","maskImg","layoutDiv","videoCaptureElement","startRecord","callbacks","iOS","method","args","call","tablet","postMessage","callbackFn","expires","toGMTString","cookie","cookies","pathx","pathy","drawSection","absoluteMove","relativeMove","quadraticCurveTo","c2x","c2y","bezierCurveTo","fcnstart","fcnend","updatefcn","fcnclick","lastZoomScale","frameDiv","atstart","atend","atdrag","atclick","athold","itIsAClick","performMouseUpAction","newDragged","newDragthumbnail","newDragmousex","newDragmousey","newTimeoutEvent","newDragcanvas","newScaleStartsAt","settingsSection","currentVals","answeredThisSession","usageCookie","question","hasCookieSet","everyTime","questionKey","fieldKey","find","settingsSectionParam","initKeyFromCookie","valForKeyAndField","valuesKey","dependsOn","prevSelection","isAnswered","Intl","require","localizationMessages","sampleKeyPrefix","defaultLocale","queryLang","searchParams","localizationLanguage","userLanguage","language","localizationLanguageParts","desiredLocale","localeKey","supportedLocale","parts","localizationRoot","localizationCookie","determineLocaleFromBrowser","topLevel","formatting","IntlMessageFormat","format","keyOrRawText","startp","qcurveoptions","aqcurve","drawElementMask","spriteOutlineColor","drawElementOutline","drawWaterMark","drawObjectWaterMark","skipFill","drawText","targetPathId","targetPathElement","drawLine","drawRect","drawEllipse","drawCircle","drawStraightLines","drawPolyline","drawTip","lastCmd","firstCmd","toLocaleUpperCase","firstdata","splitNumericArgs","lastdata","dispatchDrawCmd","absolute","getAbsoluteCommands","ct","cmddata","dispatchAbsouluteCmd","newlastcxy","absoulteMove","absoluteLine","relativeLine","absoluteHLine","relativeHLine","absoluteVLine","relativeVLine","absoluteCurve","relativeCurve","absoluteSmooth","relativeSmooth","absoluteQCurve","relativeQCurve","absoluteQSmooth","relativeQSmooth","setAbsoluteMove","setRelativeMove","setAbsoluteLine","setRelativeLine","setAbsoluteHLine","setRelativeHLine","setAbsoluteVLine","setRelativeVLine","setAbsoluteCurve","setRelativeCurve","setAbsoluteSmooth","setRelativeSmooth","setAbsoluteQCurve","setRelativeQCurve","setAbsoluteQSmooth","setRelativeQSmooth","setClosePath","defaultSounds","audio_sndfxwithvolume","dict","Sound","playing","self","absoluteURL","libInit","preprocess","preprocessAndLoad","preprocessAndLoadCss","rl","newDiv","newImage","newCanvas","newHTML","newP","hit3DRect","hitTest","setCanvasSize","setCanvasSizeScaledToWindowDocumentHeight","localx","globalx","localy","globaly","setProps","CSSTransition","CSSTransition3D","drawThumbnail","drawScaled","fitInRect","getFit","getDocumentHeight","getDocumentWidth","getStringSize","writeText","gn","newForm","newTextInput","getUrlVars","getIdFor","getIdForCamera","rgb2hsb","rgbToHex","rgbaToHex","rgbToString","findKeyframesRule","colorToRGBA","css_vh","css_vw","mTime","WINDOW_INNER_WIDTH","isWeb","ASSET_BASE_URL","expression","eval","xmlhttp","baseUrl","cssData","head","styleSheet","cssText","reload","multiplier","scaledHeight","gx","clientLeft","transformScale","m11","clientWidth","transformX","gy","ly","clientTop","m22","clientHeight","transformY","object","props","webkitTransition","transitionDene","transitionDone","wi","he","imgWidth","imgHeight","boxWidth","boxHeight","srcw","srch","vars","hash","hashes","hue","sat","red","grn","blu","hex","rule","ss","styleSheets","cssRules","rules","CSSRule","WEBKIT_KEYFRAMES_RULE","mod"],"mappings":";QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;AClFa;;AAEb,mBAAO,CAAC,sEAAc;;AAEtB,qCAAqC,mBAAO,CAAC,8EAA2B;;AAExE,sCAAsC,uCAAuC,kBAAkB;;AAE/F;AACA;AACA;;AAEA,yC;;;;;;;;;;;;ACZa;;AAEb,mBAAO,CAAC,wDAAa;;AAErB,mBAAO,CAAC,8EAA2B;;AAEnC,mBAAO,CAAC,8EAA2B;;AAEnC,mBAAO,CAAC,kFAA6B;;AAErC,mBAAO,CAAC,8EAA2B;;AAEnC,mBAAO,CAAC,oFAA8B;;AAEtC,mBAAO,CAAC,gFAA4B;;AAEpC,mBAAO,CAAC,4FAAkC;;AAE1C,mBAAO,CAAC,wHAAgD;;AAExD,mBAAO,CAAC,4EAA0B;;AAElC,mBAAO,CAAC,8EAA2B;;AAEnC,mBAAO,CAAC,gFAA4B;;AAEpC,mBAAO,CAAC,wDAAa;;AAErB,mBAAO,CAAC,+GAA6B,E;;;;;;;;;;;AC5BrC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa;AACb,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;AAEA;AACA;AACA,wCAAwC,WAAW;AACnD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;AACA;AACA;AACA;AACA,EAAE,KAA0B,oBAAoB,SAAE;AAClD;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC3uBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoE;AACuB;AACkF;AAC9H;AAClB;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gBAAgB,GAAG,gBAAgB;AAC7D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,uDAAM;;AAEzB;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,eAAe,uCAAuC,SAAS;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,cAAc;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,SAAS;AAClE;AACA,uEAAuE,SAAS;AAChF,0EAA0E,SAAS;AACnF,sEAAsE,SAAS;AAC/E;AACA,6EAA6E,SAAS;AACtF;AACA;AACA,iGAAiG,sBAAsB;AACvH,oGAAoG,sBAAsB;AAC1H,oGAAoG,sBAAsB;AAC1H,2GAA2G,sBAAsB;AACjI;AACA,0BAA0B,2DAAY;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,uCAAuC;AACvC;AACA;AACA;AACA;AACA,wCAAwC,6DAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kFAAkF,sBAAsB;AACxG;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA,qBAAqB;AACrB;AACA,kCAAkC,kEAAkE;AACpG;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,0BAA0B,0EAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gEAAS;AACrB,YAAY,gEAAS;AACrB;AACA;AACA;AACA,sFAAsF,gBAAgB;AACtG;AACA;AACA,0BAA0B,sEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gCAAgC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,gBAAgB;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,kBAAkB,QAAQ;AAC7E;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA,2BAA2B,6DAAS,IAAI,QAAQ,mBAAmB,mBAAmB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,0EAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oEAAa;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kDAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,4DAAa;AACtC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,4DAAa;AACtC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS,GAAG,kBAAkB;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,cAAc;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,kCAAkC;AACjD,6BAA6B,oFAA6B,iBAAiB,2CAA2C;AACtH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,2EAAoB;AACjC;AACA;AACA;AACA,mBAAmB,gFAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oFAA6B;AACxC;AACA,oBAAoB,0CAA0C;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,6DAAS;AACpC,2BAA2B,6DAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAE2R;;;;;;;;;;;;;;ACn6B3R;AAAA;AAAA;AAAA;AAAA;AAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,uDAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,UAAU;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,eAAe,gBAAgB,UAAU;AAC1F;AACA;AACA,yCAAyC,UAAU;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,yCAAyC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,eAAe,aAAa,EAAE;AAC9B;AACA;AACA,2BAA2B,UAAU,GAAG,qBAAqB;AAC7D;AACA;AACA,qCAAqC,UAAU;AAC/C;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,iCAAiC,EAAE;AAC/D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2G;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,eAAe,oCAAoC,UAAU;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEmD;;;;;;;;;;;;;;ACvZnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAwH;AACxE;AACwT;AACpT;;AAEpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,gEAAS;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,+DAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,+DAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,uDAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA,sBAAsB,wEAAiB;AACvC,qBAAqB,mDAAI;AACzB;AACA;AACA,WAAW,qDAAM;AACjB;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gEAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA,6BAA6B,yDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,6BAA6B;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,gEAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,gEAAS;AACpF;AACA;AACA;AACA;AACA,eAAe,gEAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA,eAAe,gEAAS;AACxB;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAM,iDAAiD;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,GAAG;AACtB;AACA;AACA;AACA,mBAAmB,GAAG;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,KAAK;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2HAA2H,iBAAiB;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,cAAc;AAC/E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,6BAA6B;AAC7B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,eAAe;AACpC;AACA,kBAAkB,SAAS,EAAE,UAAU,GAAG,MAAM;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAM;AACV,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,+DAAQ;AACrB;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAQ;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gEAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gEAAS;AACjC;AACA;AACA;AACA,2BAA2B,mEAAY;AACvC;AACA;AACA;AACA;AACA;AACA,uBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gEAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0EAA0E;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,gBAAgB;AACjE;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sCAAsC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gEAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gEAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gEAAS;AACzB;AACA;AACA;AACA;AACA,kDAAkD,iBAAiB,GAAG,YAAY,GAAG,iBAAiB,GAAG,OAAO;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE,eAAe;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,GAAG,QAAQ,GAAG;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+DAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gEAAS;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,qBAAqB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,aAAa,eAAe,EAAE,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,aAAa,qBAAqB,EAAE,EAAE;AACxE;AACA;AACA;AACA,yBAAyB,aAAa,2BAA2B,EAAE,EAAE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qCAAqC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,aAAa,eAAe,EAAE,EAAE;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C,+CAA+C;AAC/C;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,iCAAiC;AACjC,mDAAmD;AACnD,qDAAqD;AACrD,gDAAgD;AAChD,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,oBAAoB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,sEAAe;AAC5B;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yBAAyB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,yBAAyB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6BAA6B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA;AACA,4CAA4C,iCAAiC;AAC7E;AACA;AACA;AACA;AACA;AACA,uBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6CAA6C;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,0BAA0B;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wBAAwB;AAC/C,gCAAgC,mEAAY;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,mEAAY;AAC9C;AACA;AACA;AACA;AACA,kCAAkC,mEAAY;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,iDAAiD;AACjD;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,gEAAS;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kBAAkB,gEAAS;AAC3B,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sDAAsD,+DAAQ;AAC9D;AACA,6BAA6B,8DAAO;AACpC;AACA;AACA;AACA;AACA,+DAA+D,UAAU;AACzE,uBAAuB,UAAU;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,SAAS,EAAE;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,8DAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,SAAS,EAAE;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oEAAa;AAC5C,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,+BAA+B;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,wCAAwC,gEAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gEAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6DAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,8DAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D;AACA;AACA,uBAAuB,kCAAkC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kCAAkC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kCAAkC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gEAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sEAAe;AAC3B;AACA;AACA,iBAAiB,oEAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8DAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,qEAAc;AAC5B;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA,wCAAwC,+DAAQ;AAChD;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA,IAAI,6DAAM;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA,8BAA8B,8BAA8B,GAAG,8BAA8B;AAC7F;AACA;AACA;AACA,0BAA0B,8DAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+DAAQ;AACvB;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAG;AAC9B,0BAA0B,8DAAO;AACjC,YAAY,6DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAG;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoF,8BAA8B,GAAG,8BAA8B;AACnJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,+DAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,YAAY;AACZ;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,6DAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA,wDAAwD,gEAAS;AACjE;AACA;AACA;AACA;AACA,yBAAyB,gEAAS;AAClC;AACA,oCAAoC,gEAAS;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,gEAAS;AAChC;AACA,kCAAkC,gEAAS;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,iBAAiB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,8DAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kEAAW;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,+DAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,+DAAQ;AACrC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAM;AAClB;AACA;AACA;AACA,YAAY,6DAAM;AAClB,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,qEAAc;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,aAAa;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6DAAM;AACtB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,mBAAmB,gCAAgC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,8DAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qEAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,qEAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,IAAI,6DAAM;AACV,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,qEAAc;AAC5B;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6DAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6DAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,uBAAuB,qCAAqC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,qBAAqB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT,uBAAuB,0BAA0B;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,6DAAM;AAClB;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA,IAAI,6DAAM;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,aAAa,iBAAiB;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,8DAAO;AACjC,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,+DAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kEAAW;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,mEAAY;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uBAAuB;AACtC;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,uBAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,kEAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kEAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kEAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kEAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kEAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kEAAW;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mCAAmC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,gEAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT,8BAA8B;AAC9B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,0DAAG;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,0DAAG;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,yCAAyC,gEAAS;AAClD;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,gDAAgD;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,QAAQ,8DAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,+DAAQ;AACpB;AACA,8BAA8B,8DAAO;AACrC,YAAY,6DAAM;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA,oEAAoE,MAAM;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,kBAAkB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,+DAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,qBAAqB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA,gBAAgB,6DAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,6DAAM;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,cAAc,YAAY;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mCAAmC;AAC3D;AACA;AACA;AACA;AACA,mBAAmB,QAAQ;AAC3B;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gEAAS;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAQ;AACrC,oFAAoF,EAAE;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAQ;AACrC,uFAAuF,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAQ;AACrC,wFAAwF,EAAE;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAQ;AACrC,8GAA8G,EAAE;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uDAAQ;AACrC,4FAA4F,EAAE;AAC9F;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yEAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,yEAAkB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,yEAAkB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,yEAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,UAAU,yEAAkB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,sHAAsH;AAC9H,QAAQ,mIAAmI;AAC3I;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA,aAAa,yEAAkB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,yEAAkB;AAC5B;AACA;AACA,yBAAyB,uDAAQ;AACjC;AACA,qDAAqD,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,yEAAkB;AAC5B;AACA;AACA,yBAAyB,uDAAQ;AACjC,mHAAmH,EAAE;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uDAAQ;AACjC,4FAA4F,EAAE;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,2IAA2I;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,uDAAQ;AACjC,0EAA0E,EAAE;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yEAAkB;AAC9B,uDAAuD,EAAE;AACzD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6DAAM;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,YAAY;AAC3E,IAAI,gBAAgB,GAAG,cAAc,GAAG,iBAAiB,GAAG;AAC5D,gBAAgB,GAAG,kBAAkB,GAAG,mBAAmB;AAC3D,IAAI,mBAAmB,GAAG,iBAAiB,IAAI,sBAAsB;AACrE,IAAI,mBAAmB,MAAM,cAAc;AAC3C,0BAA0B,YAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kGAAkG;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kGAAkG;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kGAAkG;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kGAAkG;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,IAAI,wFAAwF;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,wFAAwF;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,wFAAwF;AAC5F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,kGAAkG;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yEAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,KAAK,GAAG,KAAK;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,sBAAsB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,eAAe,MAAM,mBAAmB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,QAAQ,GAAG,eAAe;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,gCAAgC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,gCAAgC;AACtD;AACA;AACA;AACA,qBAAqB,gCAAgC;AACrD;AACA;AACA;AACA;AACA;AACA,2BAA2B,4DAAM;AACjC,eAAe,kEAAY;AAC3B;AACA,KAAK;AACL;AACA,yBAAyB,wFAAiC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D,SAAS,yEAAkB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,0EAAmB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,yEAAkB;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,yEAAkB;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,yDAAa;AAC/B,IAAI,wEAAkB,KAAK,6DAAS,0BAA0B,0BAA0B;AACxF;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI,qEAAe;AACnB;AACA,IAAI,qEAAe;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qBAAqB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,yEAAkB;AAC5B;AACA;AACA;AACA;AACA;AACA,yBAAyB,uDAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,EAAE;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,gBAAgB;AAC3C;AACA;AACA;AACA,8BAA8B,UAAU;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAE24B;;;;;;;;;;;;;;;ACrnb34B;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,IAAI,KAAK,cAAc;AACnD;AACA;AACA,sFAAsF,QAAQ;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,IAAI;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAE4D;;;;;;;;;;;;;;ACzN5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,kBAAkB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,8BAA8B;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,YAAY,+IAA+I;AAC5M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD;AACA,wCAAwC,KAAK;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,QAAQ,4EAA4E;AACvH;AACA;AACA;AACA;AACA;AACA,0CAA0C,QAAQ,yEAAyE,KAAK,GAAG;;AAEnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,8BAA8B;AAC9B;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,EAAE;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mC;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA,SAAS,EAAE;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,MAAM;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,aAAa,GAAG,KAAK;AACjD;AACA;AACA;AACA,+BAA+B,iBAAiB,IAAI,QAAQ,IAAI,SAAS;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,IAAI;AACvD,KAAK;AACL;AACA,mBAAmB,MAAM,IAAI;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY,EAAE;AACd;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,YAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,yBAAyB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,uBAAuB,oBAAoB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,SAAS;AACjD;AACA,6BAA6B;AAC7B;AACA;AACA;AACA,uBAAuB,OAAO;AAC9B,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,2BAA2B;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,OAAO,WAAW,QAAQ;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA,mDAAmD;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD;AAChD,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,EAAE;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAE49B;;;;;;;;;;;;;;AC9jE59B;;AAEA,cAAc,mBAAO,CAAC,6CAAO;;AAE7B,cAAc,mBAAO,CAAC,0DAAY;AAClC,YAAY,mBAAO,CAAC,kEAAa;AACjC,iBAAiB,mBAAO,CAAC,4EAAkB;AAC3C,gBAAgB,mBAAO,CAAC,0EAAiB;AACzC,gBAAgB,mBAAO,CAAC,0EAAiB;;;;;;;;;;;;ACRzC,WAAW,mBAAO,CAAC,mDAAS;AAC5B,eAAe,mBAAO,CAAC,6DAAU;;AAEjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,mBAAO,CAAC,iDAAI;AACxB,4CAA4C;AAC5C,iCAAiC;AACjC,QAAQ;AACR;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;AC5DA,eAAe,mBAAO,CAAC,6DAAU;AACjC,eAAe,mBAAO,CAAC,8DAAS;AAChC,aAAa,mBAAO,CAAC,8CAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACnHA;;AAEA,gBAAgB,mBAAO,CAAC,oEAAY;AACpC,qBAAqB,mBAAO,CAAC,gEAAU;AACvC,qBAAqB,mBAAO,CAAC,gEAAU;AACvC,YAAY,mBAAO,CAAC,4DAAQ;;;;;;;;;;;;ACL5B,eAAe,mBAAO,CAAC,8DAAS;AAChC,oBAAoB,mBAAO,CAAC,8DAAS;AACrC,oBAAoB,mBAAO,CAAC,8DAAS;AACrC,aAAa,mBAAO,CAAC,wEAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB;AAChB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACznBA,eAAe,mBAAO,CAAC,6DAAU;;AAEjC;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,UAAU;AACV;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxHA,gBAAgB,mBAAO,CAAC,wEAAc;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzCA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,gBAAgB,mBAAO,CAAC,+DAAO;;;;;;;;;;;;AClB/B,eAAe,mBAAO,CAAC,6DAAU;;AAEjC,WAAW,mBAAO,CAAC,sDAAY;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;AACA;AACA;;AAEA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACnUA;;AAEA,eAAe,mBAAO,CAAC,8DAAO;AAC9B,eAAe,mBAAO,CAAC,8DAAO;;;;;;;;;;;;ACH9B,eAAe,mBAAO,CAAC,6DAAU;AACjC,aAAa,mBAAO,CAAC,8CAAQ;;AAE7B,iBAAiB,mBAAO,CAAC,8DAAO;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;AChDA,eAAe,mBAAO,CAAC,6DAAU;AACjC,aAAa,mBAAO,CAAC,8CAAQ;;AAE7B,WAAW,mBAAO,CAAC,sDAAY;AAC/B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,YAAY;AAC1C;;AAEA;AACA;AACA;;AAEA,iDAAiD,OAAO;AACxD;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA,GAAG;AACH;AACA,mBAAmB,eAAe;AAClC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA,gBAAgB,eAAe;AAC/B;AACA;;AAEA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB,YAAY;AAC/B;;AAEA;AACA,8BAA8B,QAAQ;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,WAAW,iBAAiB;AAC5B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;;;;;;;;;;ACtSA;;AAEA,eAAe,mBAAO,CAAC,8DAAO;AAC9B,eAAe,mBAAO,CAAC,8DAAO;;;;;;;;;;;;ACH9B,eAAe,mBAAO,CAAC,6DAAU;;AAEjC,iBAAiB,mBAAO,CAAC,8DAAO;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;;;;;;;;;;;;;ACpBY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,UAAU;AACpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACvJA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAa,mBAAO,CAAC,eAAQ;AAC7B,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,QAAQ;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;AACP;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;;AAEA;AACA;AACA;AACA,sCAAsC,YAAY;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,OAAO;AACP;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,uBAAuB,SAAS;AAChC;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,4BAA4B;AAC7C;AACA;;AAEA,iBAAiB,aAAa;AAC9B;AACA;;AAEA;AACA;AACA,KAAK;AACL,iBAAiB,aAAa;AAC9B;AACA;;AAEA;AACA;;AAEA,YAAY,eAAe;AAC3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,qBAAqB,gBAAgB;AACrC;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,gBAAgB;AACnC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,mBAAmB,cAAc;AACjC;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA,mBAAmB,cAAc;AACjC;AACA;;AAEA;AACA,YAAY,cAAc;AAC1B;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAmB,iBAAiB;AACpC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA,UAAU,6BAA6B;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,YAAY,cAAc;AAC1B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;AACA;AACA,UAAU,6BAA6B;AACvC;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAY,cAAc;AAC1B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,SAAS;AAC5B;AACA;AACA;AACA;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,oBAAoB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,WAAW;AAC/D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA,mBAAmB,OAAO;AAC1B;;AAEA;AACA;;AAEA,qBAAqB,OAAO;AAC5B;AACA;;AAEA,uBAAuB,OAAO;AAC9B;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,GAAG;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB,WAAW;AAC9B;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,WAAW;AAC9B;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;;AAEA,kCAAkC;AAClC,sCAAsC;AACtC;;AAEA;AACA,qBAAqB,OAAO;AAC5B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;;AAEA;AACA,6BAA6B,cAAc;AAC3C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,QAAQ;AACvC;AACA;;AAEA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mBAAmB,+CAA+C;AAClE;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,qBAAqB,sCAAsC;AAC3D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,yBAAyB;AACnC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,cAAc;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB,QAAQ;AAC/B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAiC,QAAQ;AACzC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,6BAA6B,mCAAmC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,6BAA6B,mCAAmC;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,6BAA6B,mCAAmC;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,gCAAgC;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iCAAiC,QAAQ;AACzC;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAmB,YAAY;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,kBAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B,QAAQ;AACpC;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,MAA6B;;;;;;;;;;;;;ACl2GhC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA,iBAAiB,mBAAO,CAAC,eAAQ;AACjC;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;AChEA;AACA;AACA;AACA;;AAEA,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,aAAa;AAC9B;AACA;;AAEA,mBAAmB,YAAY;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,aAAa;AAC/B;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACnOA,UAAU,mBAAO,CAAC,mDAAO;AACzB,aAAa,mBAAO,CAAC,wDAAa;AAClC,gBAAgB,mBAAO,CAAC,wDAAa;AACrC,eAAe,mBAAO,CAAC,6DAAU;AACjC,YAAY,mBAAO,CAAC,uDAAS;AAC7B,UAAU,mBAAO,CAAC,sDAAY;AAC9B,aAAa,mBAAO,CAAC,yDAAU;;AAE/B;AACA;AACA;;AAEA;AACA,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpHA,cAAc,mBAAO,CAAC,+DAAa;AACnC,gBAAgB,mBAAO,CAAC,+DAAa;AACrC,YAAY,mBAAO,CAAC,wEAAmB;;AAEvC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZA,iBAAiB,mBAAO,CAAC,iEAAc;AACvC,aAAa,mBAAO,CAAC,wDAAa;AAClC,YAAY,mBAAO,CAAC,6DAAS;AAC7B,mBAAmB,mBAAO,CAAC,qEAAgB;AAC3C,gBAAgB,mBAAO,CAAC,wDAAa;AACrC,UAAU,mBAAO,CAAC,mDAAO;AACzB,WAAW,mBAAO,CAAC,8DAAgB;AACnC,eAAe,mBAAO,CAAC,6DAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;AC3HA,YAAY,mBAAO,CAAC,6DAAS;AAC7B,iBAAiB,mBAAO,CAAC,iEAAc;AACvC,aAAa,mBAAO,CAAC,wDAAa;AAClC,mBAAmB,mBAAO,CAAC,qEAAgB;AAC3C,gBAAgB,mBAAO,CAAC,wDAAa;AACrC,UAAU,mBAAO,CAAC,mDAAO;AACzB,WAAW,mBAAO,CAAC,8DAAgB;AACnC,eAAe,mBAAO,CAAC,6DAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACjHA,aAAa,mBAAO,CAAC,wDAAa;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA,UAAU,mBAAO,CAAC,sDAAY;;AAE9B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;AChBA,aAAa,mBAAO,CAAC,wDAAa;AAClC,UAAU,mBAAO,CAAC,sDAAY;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;AChCA,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACzCA,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;ACxBA,UAAU,mBAAO,CAAC,sDAAY;AAC9B,aAAa,mBAAO,CAAC,wDAAa;AAClC,aAAa,mBAAO,CAAC,0DAAW;;AAEhC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACNA;AACA,OAAO,mBAAO,CAAC,yDAAO;AACtB,OAAO,mBAAO,CAAC,yDAAO;AACtB,OAAO,mBAAO,CAAC,yDAAO;AACtB,QAAQ,mBAAO,CAAC,2DAAQ;AACxB,QAAQ,mBAAO,CAAC,2DAAQ;AACxB,OAAO,mBAAO,CAAC,yDAAO;AACtB,OAAO,mBAAO,CAAC,yDAAO;AACtB,OAAO,mBAAO,CAAC,yDAAO;AACtB;;AAEA,YAAY,mBAAO,CAAC,kEAAa;;AAEjC;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;ACjBA,wDAAU,mBAAO,CAAC,sDAAY;;AAE9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACfA,UAAU,mBAAO,CAAC,mDAAO;AACzB,aAAa,mBAAO,CAAC,wDAAa;AAClC,gBAAgB,mBAAO,CAAC,wDAAa;AACrC,eAAe,mBAAO,CAAC,6DAAU;;AAEjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;AC1BA,UAAU,mBAAO,CAAC,8DAAgB;AAClC,UAAU,mBAAO,CAAC,wEAAwB;AAC1C,eAAe,mBAAO,CAAC,0EAAsB;AAC7C,eAAe,mBAAO,CAAC,oEAAsB;AAC7C,WAAW,mBAAO,CAAC,8DAAgB;;AAEnC;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,uCAAuC,gCAAgC;;AAEvE;AACA;;AAEA;AACA;AACA;AACA,uCAAuC,+CAA+C;;AAEtF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClEA,iBAAiB,mBAAO,CAAC,wDAAa;AACtC,UAAU,mBAAO,CAAC,gDAAQ;AAC1B,eAAe,mBAAO,CAAC,6DAAU;AACjC,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvBA,uDAAS,mBAAO,CAAC,6CAAO;AACxB,kBAAkB,mBAAO,CAAC,0DAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvCA,iBAAiB,mBAAO,CAAC,yFAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACApD,+DAAiB,mBAAO,CAAC,0DAAa;AACtC,aAAa,mBAAO,CAAC,yDAAQ;AAC7B,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,8DAAQ;AAC3B,aAAa,mBAAO,CAAC,kEAAU;;AAE/B,iBAAiB,mBAAO,CAAC,iFAAmB;AAC5C;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1FA;AACA,iBAAiB,mBAAO,CAAC,0DAAa;AACtC,UAAU,mBAAO,CAAC,8DAAgB;AAClC,SAAS,mBAAO,CAAC,yDAAU;AAC3B,SAAS,mBAAO,CAAC,6CAAO;AACxB,gBAAgB,mBAAO,CAAC,sDAAY;AACpC,aAAa,mBAAO,CAAC,yEAAe;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;AChJA;AACA,SAAS,mBAAO,CAAC,6CAAO;AACxB,SAAS,mBAAO,CAAC,yDAAU;AAC3B,gBAAgB,mBAAO,CAAC,sDAAY;AACpC,aAAa,mBAAO,CAAC,yEAAe;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;AClFA;AACA;AACA;;AAEA,iBAAiB,YAAY;AAC7B;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEY;;AAEZ,aAAa,mBAAO,CAAC,oDAAW;AAChC,cAAc,mBAAO,CAAC,gDAAS;AAC/B,cAAc,mBAAO,CAAC,gDAAS;;AAE/B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,mDAAmD;AACxE;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,uCAAuC,SAAS;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;AACA,aAAa,iBAAiB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,EAAE;AAClD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,wBAAwB,QAAQ;AAChC;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,cAAc;AACjC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA,GAAG;AACH;AACA,eAAe,SAAS;AACxB;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,eAAe,iBAAiB;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,YAAY;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;AC5vDA,aAAa,mBAAO,CAAC,wDAAa;AAClC,gBAAgB,mBA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,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC,qBAAqB;AACrB,0BAA0B;AAC1B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;;;;;;;;;;;;AC/Ia;AACb,kBAAkB,mBAAO,CAAC,wEAAiB;AAC3C,cAAc,mBAAO,CAAC,wDAAS;AAC/B,eAAe,mBAAO,CAAC,kEAAc;AACrC,eAAe,mBAAO,CAAC,kEAAc;AACrC,iBAAiB,mBAAO,CAAC,sEAAgB;AACzC,YAAY,mBAAO,CAAC,4DAAW;AAC/B,wBAAwB,mBAAO,CAAC,0EAAkB;AAClD,WAAW,mBAAO,CAAC,sDAAQ;AAC3B,eAAe,mBAAO,CAAC,sFAAwB;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,qBAAqB;AACrB,0BAA0B;AAC1B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;;;;;ACpFa;AACb,aAAa,mBAAO,CAAC,4DAAW;AAChC,cAAc,mBAAO,CAAC,4DAAW;AACjC,eAAe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A;AACA;AACA;AACA,6BAA6B,SAAS,qBAAqB;AAC3D,iCAAiC,aAAa;AAC9C;AACA,GAAG,YAAY;AACf;AACA;;;;;;;;;;;;ACrBA;AACA,UAAU;AACV;;;;;;;;;;;;ACFA;;;;;;;;;;;;ACAA;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;ACTD;AACA,WAAW,mBAAO,CAAC,kEAAc;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACJA,WAAW,mBAAO,CAAC,sDAAQ;AAC3B,eAAe,mBAAO,CAAC,kEAAc;AACrC,UAAU,mBAAO,CAAC,sDAAQ;AAC1B,cAAc,mBAAO,CAAC,kEAAc;AACpC;AACA;AACA;AACA;AACA,cAAc,mBAAO,CAAC,0DAAU;AAChC,iDAAiD;AACjD,CAAC;AACD;AACA,qBAAqB;AACrB;AACA,SAAS;AACT,GAAG,EAAE;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpDA,aAAa,mBAAO,CAAC,4DAAW;AAChC,gBAAgB,mBAAO,CAAC,wDAAS;AACjC;AACA;AACA;AACA,aAAa,mBAAO,CAAC,sDAAQ;;AAE7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,uCAAuC,sBAAsB,EAAE;AAC/D;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AAC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AACA;AACA;AACA;AACA,QAAQ,MAAM;AACd;AACA;;;;;;;;;;;;ACXA,cAAc,mBAAO,CAAC,4DAAW;AACjC,cAAc,mBAAO,CAAC,8DAAY;AAClC,YAAY,mBAAO,CAAC,0DAAU;AAC9B,aAAa,mBAAO,CAAC,kEAAc;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;AC7BA;AACA;;;;;;;;;;;;ACDA,UAAU,mBAAO,CAAC,sDAAQ;AAC1B,aAAa,mBAAO,CAAC,4DAAW;AAChC,WAAW,mBAAO,CAAC,wDAAS;AAC5B,UAAU,mBAAO,CAAC,oEAAe;AACjC,aAAa,mBAAO,CAAC,4DAAW;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAO,CAAC,sDAAQ;AACtB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnFA,gBAAgB,mBAAO,CAAC,oEAAe;AACvC;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACNA;AACA,gBAAgB,mBAAO,CAAC,oEAAe;AACvC,eAAe,mBAAO,CAAC,kEAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACLA;AACA,cAAc,mBAAO,CAAC,8DAAY;AAClC,cAAc,mBAAO,CAAC,8DAAY;AAClC;AACA;AACA;;;;;;;;;;;;ACLA;AACA,gBAAgB,mBAAO,CAAC,oEAAe;AACvC;AACA;AACA,2DAA2D;AAC3D;;;;;;;;;;;;ACLA;AACA,cAAc,mBAAO,CAAC,8DAAY;AAClC;AACA;AACA;;;;;;;;;;;;ACJA;AACA,eAAe,mBAAO,CAAC,kEAAc;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACXa;AACb,IAAI,mBAAO,CAAC,sEAAgB;AAC5B,gBAAgB,mBAAO,CAAC,8DAAY;AACpC,eAAe,mBAAO,CAAC,4DAAW;AAClC,cAAc,mBAAO,CAAC,0DAAU;AAChC,gBAAgB,mBAAO,CAAC,4DAAW;AACnC,eAAe,mBAAO,CAAC,0DAAU;AACjC,gBAAgB,mBAAO,CAAC,wEAAiB;AACzC,YAAY,mBAAO,CAAC,sDAAQ;AAC5B,mBAAmB,mBAAO,CAAC,sEAAgB;AAC3C,qBAAqB,mBAAO,CAAC,0EAAkB;AAC/C,aAAa,mBAAO,CAAC,wDAAS;AAC9B,oBAAoB,mBAAO,CAAC,wEAAiB;AAC7C,kBAAkB,mBAAO,CAAC,oEAAe;AACzC,iBAAiB,mBAAO,CAAC,kEAAc;AACvC,gBAAgB,mBAAO,CAAC,gEAAa;AACrC,wBAAwB,mBAAO,CAAC,kFAAsB;AACtD,oBAAoB,mBAAO,CAAC,wEAAiB;AAC7C,YAAY,mBAAO,CAAC,sDAAQ;AAC5B,gBAAgB,mBAAO,CAAC,8DAAY;AACpC,iBAAiB,mBAAO,CAAC,kEAAc;AACvC,iBAAiB,mBAAO,CAAC,kEAAc;AACvC,oBAAoB,mBAAO,CAAC,0EAAkB;AAC9C,eAAe,mBAAO,CAAC,0EAAkB;AACzC,uBAAuB,mBAAO,CAAC,oEAAe;AAC9C,aAAa,mBAAO,CAAC,sEAAgB;AACrC,kBAAkB,mBAAO,CAAC,8FAA4B;AACtD,YAAY,mBAAO,CAAC,sDAAQ;AAC5B,YAAY,mBAAO,CAAC,sDAAQ;AAC5B,0BAA0B,mBAAO,CAAC,0EAAkB;AACpD,4BAA4B,mBAAO,CAAC,4EAAmB;AACvD,2BAA2B,mBAAO,CAAC,sFAAwB;AAC3D,uBAAuB,mBAAO,CAAC,kFAAsB;AACrD,kBAAkB,mBAAO,CAAC,kEAAc;AACxC,oBAAoB,mBAAO,CAAC,sEAAgB;AAC5C,mBAAmB,mBAAO,CAAC,sEAAgB;AAC3C,kBAAkB,mBAAO,CAAC,oEAAe;AACzC,wBAAwB,mBAAO,CAAC,kFAAsB;AACtD,YAAY,mBAAO,CAAC,kEAAc;AAClC,cAAc,mBAAO,CAAC,sEAAgB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA,4BAA4B;AAC5B,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,mBAAmB,0BAA0B,EAAE,EAAE;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,gCAAgC;AACzF;AACA,OAAO;AACP;AACA;AACA,6EAA6E,YAAY;AACzF;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yDAAyD,6CAA6C,EAAE;;AAExG;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,mDAAmD;AACnD;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,oCAAoC;AACpC;AACA,KAAK;AACL,wEAAwE;AACxE;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,8DAA8D;AAC9D;AACA,KAAK;AACL,wEAAwE;AACxE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH,yBAAyB,sBAAsB,EAAE,EAAE;AACnD;AACA;AACA;AACA;;AAEA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,sBAAsB,0BAA0B;AAChD,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL,yBAAyB;AACzB,KAAK;AACL,uBAAuB;AACvB,2BAA2B;AAC3B,0BAA0B;AAC1B,2BAA2B;AAC3B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,aAAa;AACvC,OAAO;AACP;;AAEA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL,uDAAuD,6BAA6B,EAAE;AACtF;AACA;AACA,KAAK;;AAEL;;AAEA;;AAEA;;AAEA,uDAAuD,YAAY;;AAEnE;;AAEA;;AAEA;AACA;AACA,KAAK,UAAU,gBAAgB;;AAE/B;AACA;AACA,KAAK;AACL;AACA,KAAK,WAAW,kCAAkC;;AAElD;AACA;AACA;AACA,CAAC,oCAAoC;;;;;;;;;;;;;AC/dxB;AACb,aAAa,mBAAO,CAAC,4DAAW;AAChC,kBAAkB,mBAAO,CAAC,sEAAgB;AAC1C,cAAc,mBAAO,CAAC,8DAAY;AAClC,aAAa,mBAAO,CAAC,0DAAU;AAC/B,WAAW,mBAAO,CAAC,wDAAS;AAC5B,kBAAkB,mBAAO,CAAC,wEAAiB;AAC3C,YAAY,mBAAO,CAAC,0DAAU;AAC9B,iBAAiB,mBAAO,CAAC,sEAAgB;AACzC,gBAAgB,mBAAO,CAAC,oEAAe;AACvC,eAAe,mBAAO,CAAC,kEAAc;AACrC,cAAc,mBAAO,CAAC,gEAAa;AACnC,WAAW,mBAAO,CAAC,sEAAgB;AACnC,SAAS,mBAAO,CAAC,kEAAc;AAC/B,gBAAgB,mBAAO,CAAC,oEAAe;AACvC,qBAAqB,mBAAO,CAAC,kFAAsB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA,QAAQ,UAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA;AACA,QAAQ,WAAW;AACnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB,mBAAmB,uBAAuB,EAAE,EAAE;AACvE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAW;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA,GAAG;AACH,yBAAyB;AACzB,GAAG;AACH,uBAAuB;AACvB,0BAA0B;AAC1B,0BAA0B;AAC1B;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,iDAAiD,iBAAiB;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AA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;AACrD,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,eAAe,uCAAuC;AACtD;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA,uBAAuB,0BAA0B;AACjD;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH,kBAAkB,yBAAyB,KAAK;AAChD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,wBAAwB;AACxB,gBAAgB;AAChB,oBAAoB;AACpB,wBAAwB;AACxB,gBAAgB;AAChB,oBAAoB;AACpB;AACA,uBAAuB,mBAAO,CAAC,wEAAiB;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0DAA0D,oBAAoB;AAC9E,mBAAO,CAAC,kFAAsB;AAC9B,mBAAO,CAAC,sEAAgB;AACxB,UAAU,mBAAO,CAAC,wDAAS;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,gDAAgD,mBAAO,CAAC,sEAAgB;AACxE;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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AC,kEAAc;AAC1E;AACA,OAAO,mBAAO,CAAC,0DAAU;AACzB,CAAC;;;;;;;;;;;;;ACJY;;AAEb,eAAe,mBAAO,CAAC,kEAAc;AACrC,eAAe,mBAAO,CAAC,kEAAc;AACrC,yBAAyB,mBAAO,CAAC,wFAAyB;AAC1D,iBAAiB,mBAAO,CAAC,wFAAyB;;AAElD;AACA,mBAAO,CAAC,oEAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACvCY;;AAEb,eAAe,mBAAO,CAAC,kEAAc;AACrC,eAAe,mBAAO,CAAC,kEAAc;AACrC,eAAe,mBAAO,CAAC,kEAAc;AACrC,gBAAgB,mBAAO,CAAC,oEAAe;AACvC,yBAAyB,mBAAO,CAAC,wFAAyB;AAC1D,iBAAiB,mBAAO,CAAC,wFAAyB;AAClD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mBAAO,CAAC,oEAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,CAAC;;;;;;;;;;;;;ACrHY;;AAEb,eAAe,mBAAO,CAAC,kEAAc;AACrC,gBAAgB,mBAAO,CAAC,oEAAe;AACvC,iBAAiB,mBAAO,CAAC,wFAAyB;;AAElD;AACA,mBAAO,CAAC,oEAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;AC9BY;;AAEb,eAAe,mBAAO,CAAC,kEAAc;AACrC,eAAe,mBAAO,CAAC,kEAAc;AACrC,yBAAyB,mBAAO,CAAC,sFAAwB;AACzD,yBAAyB,mBAAO,CAAC,wFAAyB;AAC1D,eAAe,mBAAO,CAAC,kEAAc;AACrC,qBAAqB,mBAAO,CAAC,wFAAyB;AACtD,iBAAiB,mBAAO,CAAC,sEAAgB;AACzC,YAAY,mBAAO,CAAC,0DAAU;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,yBAAyB,EAAE;;AAEhE;AACA,mBAAO,CAAC,oEAAe;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;AACnF;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB,mBAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACrI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ACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB,sBAAsB,uBAAuB,WAAW,IAAI;AAC5D,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA,KAAK;AACL;AACA,sBAAsB,mCAAmC;AACzD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,gCAAgC;AAChG;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA,EAAE,mBAAO,CAAC,sEAAgB;AAC1B,EAAE,mBAAO,CAAC,oEAAe;AACzB;;AAEA,sBAAsB,mBAAO,CAAC,8DAAY;AAC1C;AACA;;AAEA;AACA;AACA;AACA;;AAEA,0DAA0D,kBAAkB;;AAE5E;AACA;AACA;AACA,oBAAoB,uBAAuB;;AAE3C,oDAAoD,6BAA6B;;AAEjF;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,0BAA0B,eAAe,EAAE;AAC3C,0BAA0B,gBAAgB;AAC1C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,8CAA8C,YAAY,EAAE;;AAE5D;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD,OAAO,QAAQ,iCAAiC;AA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,CAAC;;;;;;;;;;;;;ACNY;AACb;AACA,mBAAO,CAAC,sEAAgB;AACxB;AACA;AACA;AACA,CAAC;;;;;;;;;;;;ACND,mBAAO,CAAC,oEAAe;;;;;;;;;;;;ACAvB,iBAAiB,mBAAO,CAAC,kFAAsB;AAC/C,cAAc,mBAAO,CAAC,sEAAgB;AACtC,eAAe,mBAAO,CAAC,gEAAa;AACpC,aAAa,mBAAO,CAAC,4DAAW;AAChC,WAAW,mBAAO,CAAC,wDAAS;AAC5B,gBAAgB,mBAAO,CAAC,kEAAc;AACtC,UAAU,mBAAO,CAAC,sDAAQ;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oDAAoD,wBAAwB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACzDA,cAAc,mBAAO,CAAC,4DAAW;AACjC,YAAY,mBAAO,CAAC,wDAAS;AAC7B;AACA;AACA;AACA,CAAC;;;;;;;;;;;;ACLD;AACA,aAAa,mBAAO,CAAC,4DAAW;AAChC,cAAc,mBAAO,CAAC,4DAAW;AACjC,gBAAgB,mBAAO,CAAC,oEAAe;AACvC;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;ACnBD,mBAAO,CAAC,2EAAuB;AAC/B,mBAAO,CAAC,iFAA0B;AAClC,mBAAO,CAAC,uFAA6B;AACrC,iBAAiB,mBAAO,CAAC,iEAAkB;;;;;;;;;;;;ACH3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;;;;;;;;;;;;AC1GA,6DAAe,mBAAO,CAAC,yDAAU;AACjC,SAAS,mBAAO,CAAC,6CAAO;;AAExB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;;;;;;;;AC3HY;AACZ,eAAe,mBAAO,CAAC,6DAAU;AACjC,UAAU,mBAAO,CAAC,8CAAQ;AAC1B,gBAAgB,mBAAO,CAAC,oDAAW;AACnC,UAAU,mBAAO,CAAC,8CAAQ;AAC1B,WAAW,mBAAO,CAAC,wDAAa;;AAEhC;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;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qBAAqB;AACxC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,kBAAkB,SAAS;AAC3B;AACA;AACA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;;;;;;;;;;;;AC/PA,kEAAoB,mBAAO,CAAC,+EAAqB;AACjD,aAAa,mBAAO,CAAC,wEAAmB;;AAExC,SAAS,mBAAO,CAAC,yDAAU;;AAE3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACzCA,uDAAS,mBAAO,CAAC,6CAAO;AACxB,kBAAkB,mBAAO,CAAC,2DAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,mBAAO,CAAC,2EAAiB;AACtC,kBAAkB,mBAAO,CAAC,0DAAa;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;;;;;;;;;;;ACnKA,kBAAkB,mBAAO,CAAC,0DAAa;AACvC;AACA;AACA;AACA,SAAS,mBAAO,CAAC,6CAAO;AACxB;AACA,kBAAkB,mBAAO,CAAC,2DAAc;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,WAAW;AACnC;AACA,mBAAmB,yBAAyB;AAC5C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;ACxGa;;AAEb;;AAEA,mBAAmB,mBAAO,CAAC,6DAAiB;AAC5C,iBAAiB,mBAAO,CAAC,uEAAkB;AAC3C,gBAAgB,mBAAO,CAAC,gDAAS;AACjC,iBAAiB,mBAAO,CAAC,6EAAkB;AAC3C,kBAAkB,mBAAO,CAAC,yEAAmB;;AAE7C;AACA,cAAc,mBAAO,CAAC,uEAAe;AACrC,iBAAiB,mBAAO,CAAC,6EAAkB;;;;;;;;;;;;;ACZ9B;;AAEb,SAAS,mBAAO,CAAC,6CAAO;AACxB,YAAY,mBAAO,CAAC,+DAAU;AAC9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,8BAA8B,QAAQ;AACtC;AACA,mBAAmB,wBAAwB;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,QAAQ;AAC3B;;AAEA;AACA;AACA,qBAAqB,SAAS;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,SAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,WAAW;AAC5B,mBAAmB,UAAU;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,OAAO;AACxB;AACA;AACA;;;;;;;;;;;;;ACrXa;;AAEb,YAAY,mBAAO,CAAC,+DAAU;AAC9B,SAAS,mBAAO,CAAC,6CAAO;AACxB,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,kEAAQ;;AAE3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;AC/aa;;AAEb;;AAEA,aAAa,mBAAO,CAAC,kEAAQ;AAC7B,cAAc,mBAAO,CAAC,oEAAS;AAC/B,aAAa,mBAAO,CAAC,kEAAQ;AAC7B,gBAAgB,mBAAO,CAAC,wEAAW;;;;;;;;;;;;;ACPtB;;AAEb,SAAS,mBAAO,CAAC,6CAAO;AACxB,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,kEAAQ;;AAE3B,YAAY,mBAAO,CAAC,+DAAU;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAe;AACf,uCAAuC;AACvC,eAAe;;AAEf,qBAAqB,iBAAiB;AACtC;;AAEA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;ACjLa;;AAEb,YAAY,mBAAO,CAAC,+DAAU;AAC9B,SAAS,mBAAO,CAAC,6CAAO;AACxB,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,kEAAQ;;AAE3B;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK,eAAe;AACpB,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,SAAS;AAC1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACx6Ba;;AAEb;;AAEA,WAAW,mBAAO,CAAC,mDAAS;AAC5B,YAAY,mBAAO,CAAC,oEAAS;AAC7B,YAAY,mBAAO,CAAC,8DAAS;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,QAAQ,mBAAO,CAAC,8FAAyB;AACzC,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;AC7MY;;AAEb,SAAS,mBAAO,CAAC,6CAAO;AACxB,eAAe,mBAAO,CAAC,4DAAW;AAClC,YAAY,mBAAO,CAAC,+DAAU;AAC9B,aAAa,mBAAO,CAAC,iEAAW;AAChC,WAAW,mBAAO,CAAC,gDAAS;AAC5B;;AAEA,cAAc,mBAAO,CAAC,6DAAO;AAC7B,gBAAgB,mBAAO,CAAC,yEAAa;;AAErC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA,oBAAoB,MAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B,2CAA2C;AACrE;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,OAAO;AACxB;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChPa;;AAEb,SAAS,mBAAO,CAAC,6CAAO;AACxB,YAAY,mBAAO,CAAC,+DAAU;AAC9B;;AAEA;AACA;AACA;AACA;;AAEA,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA,YAAY;AACZ;AACA,YAAY;AACZ;AACA,YAAY;;AAEZ,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACrHa;;AAEb,SAAS,mBAAO,CAAC,6CAAO;;AAExB,YAAY,mBAAO,CAAC,+DAAU;AAC9B;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,cAAc;AAC9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrIa;;AAEb,WAAW,mBAAO,CAAC,mDAAS;AAC5B,aAAa,mBAAO,CAAC,iEAAW;AAChC,YAAY,mBAAO,CAAC,+DAAU;AAC9B;AACA;AACA,cAAc,mBAAO,CAAC,gEAAO;AAC7B,gBAAgB,mBAAO,CAAC,4EAAa;;AAErC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,UAAU,aAAa;AACvB,UAAU,qBAAqB;AAC/B,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iCAAiC;AAC9D;;AAEA;AACA,UAAU,MAAM;AAChB,UAAU,uBAAuB;AACjC,UAAU,2BAA2B;AACrC,YAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;ACrHa;;AAEb,YAAY,mBAAO,CAAC,+DAAU;AAC9B;AACA;AACA;;AAEA;AACA,UAAU,MAAM;AAChB,UAAU,OAAO;AACjB;AACA,UAAU,YAAY;AACtB,UAAU,MAAM;AAChB,UAAU,YAAY;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,WAAW;AACxC;;AAEA;AACA;AACA;AACA,6BAA6B,iBAAiB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;;AC9Fa;;AAEb,SAAS,mBAAO,CAAC,6CAAO;AACxB,YAAY,mBAAO,CAAC,+DAAU;AAC9B;AACA;AACA;;AAEA;AACA,UAAU,MAAM;AAChB,UAAU,oBAAoB;AAC9B,UAAU,mBAAmB;AAC7B,UAAU,gBAAgB;AAC1B,UAAU,aAAa;AACvB,UAAU,aAAa;AACvB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC3wBa;;AAEb;AACA,SAAS,mBAAO,CAAC,6CAAO;AACxB,gBAAgB,mBAAO,CAAC,wEAAqB;AAC7C,eAAe,mBAAO,CAAC,wFAA2B;;AAElD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,WAAW;AAC9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,SAAS;AAC5B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;A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AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,gBAAgB;AACnC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,OAAO;AACxB;;AAEA;AACA;AACA;AACA,mBAAmB,oBAAoB;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,oBAAoB;AACnC;AACA;;AAEA;AACA;;;;;;;;;;;;;AC3Fa;;AAEb,YAAY,mBAAO,CAAC,yDAAS;AAC7B,aAAa,mBAAO,CAAC,wEAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B,oBAAoB;AAC9C;;AAEA,aAAa,gBAAgB;AAC7B;AACA;;AAEA;AACA,aAAa,gBAAgB;AAC7B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AC9Ca;;AAEb,YAAY,mBAAO,CAAC,yDAAS;AAC7B,aAAa,mBAAO,CAAC,2DAAU;;AAE/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACjJa;;AAEb,eAAe,mBAAO,CAAC,yDAAS;AAChC,iBAAiB,mBAAO,CAAC,6DAAW;AACpC,iBAAiB,mBAAO,CAAC,6DAAW;AACpC,iBAAiB,mBAAO,CAAC,6DAAW;AACpC,iBAAiB,mBAAO,CAAC,6DAAW;;;;;;;;;;;;;ACNvB;;AAEb,YAAY,mBAAO,CAAC,0DAAU;AAC9B,aAAa,mBAAO,CAAC,4DAAW;AAChC,gBAAgB,mBAAO,CAAC,+DAAU;;AAElC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;;AAEA,OAAO,cAAc;AACrB;;AAEA;AACA;AACA;AACA;AACA;;AAEA,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzEa;;AAEb,YAAY,mBAAO,CAAC,0DAAU;AAC9B,aAAa,mBAAO,CAAC,yDAAO;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC5Ba;;AAEb,YAAY,mBAAO,CAAC,0DAAU;AAC9B,aAAa,mBAAO,CAAC,4DAAW;AAChC,gBAAgB,mBAAO,CAAC,+DAAU;AAClC,aAAa,mBAAO,CAAC,wEAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA,QAAQ,cAAc;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACxGa;;AAEb,YAAY,mBAAO,CAAC,0DAAU;;AAE9B,aAAa,mBAAO,CAAC,yDAAO;;AAE5B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClCa;;AAEb,YAAY,mBAAO,CAAC,0DAAU;AAC9B,aAAa,mBAAO,CAAC,4DAAW;AAChC,aAAa,mBAAO,CAAC,wEAAqB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,QAAQ;AACzB;AACA,QAAQ,cAAc;AACtB,8CAA8C;AAC9C;AACA,0BAA0B;AAC1B;AACA,gDAAgD;AAChD;AACA,0BAA0B;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,cAAc;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC;AACnC,mCAAmC;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC;AACnC,mCAAmC;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACzUa;;AAEb,YAAY,mBAAO,CAAC,0DAAU;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;AChDa;;AAEb,aAAa,mBAAO,CAAC,wEAAqB;AAC1C,eAAe,mBAAO,CAAC,6DAAU;;AAEjC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA,GAAG;AACH,eAAe,gBAAgB;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,4BAA4B,gBAAgB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACrRa;;AAEb,WAAW,mBAAO,CAAC,mDAAS;AAC5B,YAAY,mBAAO,CAAC,wFAA2B;AAC/C,aAAa,mBAAO,CAAC,wEAAqB;;AAE1C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;;AAEA;AACA;AACA,wCAAwC;AACxC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChHA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAmE;AACN;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yCAAyC,KAAK;AAC9E;AACA,wBAAwB,4DAAI;AAC5B;AACA;AACA,oBAAoB,4DAAI,sDAAsD,4DAAI;AAClF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,sBAAsB,EAAE;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,UAAU,KAAK;AACxC;AACA;AACA;AACA,WAAW,4DAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAAY;AACZ;AACA;AACA;AACA,CAAC;;AAE2B;;;;;;;;;;;;;ACvF5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,sBAAsB,EAAE;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEqG;;;;;;;;;;;;ACxLrG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA;AACA,QAAQ,WAAW;;AAEnB;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA,QAAQ,WAAW;;AAEnB;AACA;AACA,QAAQ,UAAU;;AAElB;AACA;;;;;;;;;;;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1Ba;;AAEb,2BAA2B,mBAAO,CAAC,4EAAc;AACjD;;;;;;;;;;;;;ACHa;;AAEb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,0BAA0B;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,0DAA0D;;AAE1D,uBAAuB;;AAEvB,kCAAkC,wBAAwB;AAC1D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA,mDAAmD,cAAc;AACjE;;AAEA,wDAAwD,cAAc;AACtE;AACA;AACA;;AAEA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,kCAAkC;AAClC,kBAAkB,0CAA0C,qCAAqC,KAAK;AACtG,mBAAmB;AACnB,kBAAkB,2BAA2B,oBAAoB,KAAK;AACtE;AACA;AACA,mBAAmB,oDAAoD;AACvE,oBAAoB;AACpB,mBAAmB,2BAA2B,oBAAoB,KAAK;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,mBAAmB,8DAA8D;AACjF;AACA,mBAAmB,0DAA0D;AAC7E;AACA,mBAAmB,0DAA0D;AAC7E;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,mBAAmB,8DAA8D;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,mBAAmB,4EAA4E;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,mBAAmB,8DAA8D;AACjF;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,mBAAmB,oDAAoD;AACvE;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,mBAAmB,gEAAgE;AACnF;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,mBAAmB,2CAA2C;AAC9D;AACA,mBAAmB,oEAAoE;AACvF,mBAAmB,mDAAmD;AACtE;AACA,mBAAmB,sDAAsD;AACzE;AACA,mBAAmB,8DAA8D;AACjF;AACA,mBAAmB,oDAAoD;AACvE;AACA,mBAAmB,sDAAsD;AACzE;AACA;AACA,SAAS;AACT,wBAAwB;AACxB,mBAAmB,4BAA4B,8CAA8C,4BAA4B;AACzH;AACA,mBAAmB,8DAA8D;AACjF,8BAA8B,aAAa,EAAE;AAC7C;AACA,mBAAmB,0DAA0D;AAC7E,8BAA8B,cAAc,EAAE;AAC9C,sBAAsB;AACtB,mBAAmB,6BAA6B,wBAAwB,KAAK;AAC7E,8BAA8B,iBAAiB,EAAE;AACjD,sBAAsB;AACtB,mBAAmB,6BAA6B,wBAAwB,KAAK;AAC7E,8BAA8B,iBAAiB,EAAE;AACjD;AACA,mBAAmB,0DAA0D;AAC7E;AACA;AACA,aAAa;AACb,mCAAmC,uBAAuB,EAAE;;AAE5D;AACA;AACA;AACA,gCAAgC,oCAAoC;AACpE;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU,0CAA0C;AACpD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0BAA0B,YAAY;AACtC;AACA;AACA,kCAAkC,gBAAgB;AAClD;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yCAAyC,QAAQ;;AAEjD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;AACA,4BAA4B,oDAAoD;;AAEhF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D,yBAAyB,EAAE;AAC1F,+DAA+D,yBAAyB,EAAE;AAC1F,+DAA+D,yBAAyB,EAAE;AAC1F,+DAA+D,yBAAyB,EAAE;AAC1F;;AAEA;AACA;;AAEA,mBAAmB,qBAAqB;AACxC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sCAAsC,kBAAkB;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,0CAA0C,kBAAkB;AAC5D;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,kBAAkB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,4CAA4C,mBAAmB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA,gDAAgD,mBAAmB;AACnE;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,0CAA0C,kBAAkB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA,kDAAkD,mBAAmB;AACrE;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,mBAAmB;AACvD;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,mBAAmB;AACvD;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,mBAAmB;AACvD;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,oCAAoC,mBAAmB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,wCAAwC,mBAAmB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,0CAA0C,mBAAmB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,4CAA4C,mBAAmB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,8CAA8C,mBAAmB;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA,kBAAkB,2CAA2C;AAC7D;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;AC50CD,mCAAmC,oDAAoD,oCAAoC,6DAA6D,+BAA+B;AACvN,mCAAmC,qCAAqC;AACxE,mCAAmC,iDAAiD;AACpF,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;;;;;;;;;;;;ACLxE,mCAAmC,oDAAoD,oCAAoC,qBAAqB,+BAA+B;AAC/K,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;;;;;;;;;;;;ACLxE,mCAAmC,oDAAoD,sGAAsG,2FAA2F,+BAA+B;AACvT,mCAAmC,sCAAsC;AACzE,mCAAmC,0CAA0C;AAC7E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,qCAAqC;AACxE,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,qCAAqC;AACxE,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yDAAyD,qBAAqB,eAAe;AAChI,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,qCAAqC;AACxE,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,qCAAqC;AACxE,mCAAmC,yCAAyC;AAC5E,mCAAmC,qCAAqC;AACxE,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,qCAAqC;AACxE,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yDAAyD,qBAAqB,eAAe;AAChI,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,qCAAqC;AACxE,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;;;;;;;;;;;;AC1G5E,mCAAmC,oDAAoD,qBAAqB,2BAA2B;AACvI,mCAAmC,sCAAsC;AACzE,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,qCAAqC;AACxE,mCAAmC,yCAAyC;AAC5E,mCAAmC,qCAAqC;AACxE,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,qCAAqC;AACxE,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,qCAAqC;AACxE,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;AAC5E,mCAAmC,yCAAyC;;;;;;;;;;;;ACzB5E,mCAAmC,oDAAoD,iCAAiC,gCAAgC;AACxJ,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;;;;;;;;;;;;AC7CxE,mCAAmC,oDAAoD,oCAAoC,wDAAwD,+BAA+B;AAClN,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;;;;;;;;;;;;ACFxE,mCAAmC,oDAAoD,qBAAqB,eAAe;;;;;;;;;;;;ACA3H,mCAAmC,oDAAoD,oCAAoC,qBAAqB,+BAA+B;AAC/K,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;;;;;;;;;;;;ACNxE,mCAAmC,oDAAoD,8CAA8C,qBAAqB,2CAA2C;AACrM,mCAAmC,wCAAwC;AAC3E,mCAAmC,2EAA2E,oCAAoC,qBAAqB,+BAA+B;AACtM,mCAAmC,wCAAwC;AAC3E,mCAAmC,wCAAwC;AAC3E,mCAAmC,wCAAwC;AAC3E,mCAAmC,wCAAwC;AAC3E,mCAAmC,wCAAwC;AAC3E,mCAAmC,wCAAwC;;;;;;;;;;;;ACR3E,mCAAmC,oDAAoD,sGAAsG,gEAAgE,+BAA+B;AAC5R,mCAAmC,qCAAqC;AACxE,mCAAmC,qCAAqC;;;;;;;;;;;;ACFxE,mCAAmC,oDAAoD,qBAAqB,eAAe;;;;;;;;;;;;ACA3H,mCAAmC,oDAAoD,qBAAqB,eAAe;AAC3H,mCAAmC,uCAAuC;AAC1E,mCAAmC,+CAA+C;AAClF,mCAAmC,+CAA+C;AAClF,mCAAmC,+CAA+C;AAClF,mCAAmC,yDAAyD,qBAAqB,eAAe;AAChI,mCAAmC,+CAA+C;AAClF,mCAAmC,kDAAkD;;;;;;;;;;;;;ACPrF;AACA;AACA;AACA;AACA;;AAEA;;AAEa;AACb;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,sCAAsC,SAAS;AAC/C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,qCAAqC,SAAS;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;AC9MA;AACA;AACA;AACA;AACA;;AAEA;;AAEa;AACb,kBAAkB,mBAAO,CAAC,+DAAS,eAAe,mBAAO,CAAC,2DAAO,oBAAoB,mBAAO,CAAC,qEAAY,iCAAiC,mBAAO,CAAC,oFAA2B;AAC7K;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gDAAgD,oCAAoC;;AAEpF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,2DAA2D,iCAAiC;AAC5F,4DAA4D;AAC5D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,EAAE;;AAEF;AACA,oDAAoD,oDAAoD;;AAExG;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qCAAqC,SAAS;AAC9C;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA,0BAA0B;AAC1B;;AAEA;AACA,oDAAoD,UAAU;;AAE9D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qCAAqC,SAAS;AAC9C;;AAEA;AACA;AACA;AACA,uDAAuD;AACvD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACrQA;AACa;AACb,sBAAsB,oDAAoD,sGAAsG,2FAA2F;;;;;;;;;;;;;;ACF3Q;AACA;AACA;AACA;AACA;;AAEA;;AAEa;AACb,kBAAkB,mBAAO,CAAC,+DAAS;;AAEnC;AACA;;AAEA;AACA,SAAS,kCAAkC,SAAS,EAAE;AACtD,eAAe,cAAc;AAC7B,CAAC;;AAED;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;AC9CA;;AAEa;AACb,iBAAiB,mBAAO,CAAC,6DAAQ,cAAc,mBAAO,CAAC,yDAAM;;AAE7D;AACA;;AAEA;;;;;;;;;;;;;;ACRA;AACA;AACA;AACA;AACA;;AAEA;;AAEa;AACb;AACA;;AAEA;AACA;AACA;;AAEA,qCAAqC,SAAS;AAC9C;AACA,sBAAsB,UAAU;;AAEhC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;AC7BA;AACA,sBAAsB,mBAAO,CAAC,sDAAe;;AAE7C;AACA;AACA,mBAAO,CAAC,kCAA2B;;AAEnC;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;ACdA,8CAAa;;AAEb;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,KAAK;AACL;;AAEA,qBAAqB,oBAAoB;AACzC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;AACA;;AAEA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,+CAA+C,+BAA+B;AAC9E;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,GAAG;AACH;;AAEA,uDAAuD,kCAAkC;AACzF;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,6CAA6C,gBAAgB;;AAE7D;AACA,GAAG;AACH;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,sDAAsD,kBAAkB;AACxE;AACA,KAAK;AACL;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oFAAoF;AACpF;;AAEA;AACA;AACA;AACA;AACA;;AAEA,mDAAmD,SAAS;AAC5D;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gFAAgF,sEAAsE;AACtJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC,2BAA2B;;AAE/D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,mBAAmB,QAAQ;AAC3B;AACA,KAAK;AACL;AACA,mCAAmC;AACnC;AACA;;AAEA;AACA;AACA,4BAA4B,SAAS;AACrC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uCAAuC;AACpE,SAAS;;AAET;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,wCAAwC;AACxC,wCAAwC;AACxC,qBAAqB,EAAE,UAAU,EAAE,EAAE,IAAI;;AAEzC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,yBAAyB,IAAI,4BAA4B,EAAE,OAAO,IAAI;;AAEtE,wCAAwC;AACxC,oBAAoB,EAAE;;AAEtB,wCAAwC;AACxC,wCAAwC;AACxC,uBAAuB,EAAE,KAAK,EAAE;;AAEhC,wCAAwC;AACxC;AACA,2BAA2B,IAAI,aAAa,EAAE;;AAE9C,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;;AAEA;AACA,0CAA0C,IAAI;;AAE9C;AACA,gCAAgC,IAAI;;AAEpC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;AACA;;AAEA,wCAAwC;AACxC,wCAAwC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC;;AAEA;AACA,iEAAiE,IAAI;;AAErE;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uCAAuC,SAAS;AAChD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAyC,WAAW;AACpD,qGAAqG;AACrG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,8BAA8B,EAAE;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sCAAsC,IAAI,MAAM;;AAEhD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,sCAAsC,kBAAkB;;AAExD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,+DAA+D;AAC/D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,0EAA0E;AAC1E,8DAA8D;AAC9D;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;;AAGA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE;AACnE,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE;AACrE,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,0CAA0C;AAClF,kCAAkC,8CAA8C;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,gCAAgC;AAC3E,sCAAsC,oCAAoC;AAC1E;AACA;AACA;AACA;AACA;AACA,+CAA+C,qCAAqC;AACpF,0CAA0C,0CAA0C;AACpF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,6BAA6B;AAC7B;AACA;AACA,+CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,+CAA+C;AAC3G,sDAAsD,mDAAmD;AACzG;AACA;AACA,+DAA+D,+CAA+C;AAC9G,0DAA0D,mDAAmD;AAC7G;AACA;AACA;AACA;AACA;AACA,2DAA2D,0CAA0C;AACrG,sDAAsD,8CAA8C;AACpG;AACA;AACA;AACA;AACA;AACA,uDAAuD,mDAAmD;AAC1G,kDAAkD,uDAAuD;AACzG,uDAAuD,4CAA4C;AACnG,kDAAkD,gDAAgD;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,kDAAkD;AAC9F,sCAAsC,sDAAsD;AAC5F;AACA;AACA;AACA;AACA;AACA,gDAAgD,oDAAoD;AACpG,0CAA0C,wDAAwD;AAClG;AACA;AACA;AACA;AACA;AACA,oDAAoD,wDAAwD;AAC5G,8CAA8C,wDAAwD;AACtG;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,sCAAsC;AAC7F,kDAAkD,0CAA0C;AAC5F;AACA;AACA;AACA;AACA;AACA,4DAA4D,0CAA0C;AACtG,sDAAsD,+CAA+C;AACrG;AACA;AACA;AACA,uEAAuE;AACvE,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA,mCAAmC,0CAA0C;AAC7E,8BAA8B,gDAAgD;AAC9E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,yCAAyC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,2CAA2C,SAAS;AACpD,sFAAsF;AACtF;;AAEA,2BAA2B;AAC3B;AACA,CAAC;;AAED;;AAEA;AACA,gCAAgC,IAAI,GAAG,IAAI,MAAM,IAAI,cAAc,IAAI,OAAO,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,OAAO,IAAI,QAAQ,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,WAAW,IAAI;AACrK;AACA;AACA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;;AAEA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAa,MAAM;AACnB,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,4EAA4E;AAC5E,sDAAsD,KAAK;AAC3D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB,IAAI;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,KAAK;;AAE1B;AACA;AACA;AACA;AACA,qBAAqB,QAAQ;;AAE7B;AACA;AACA;AACA;AACA,qBAAqB,MAAM;;AAE3B;AACA;AACA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA,qBAAqB,QAAQ;;AAE7B;AACA;AACA;AACA;AACA,qBAAqB,IAAI;AACzB;AACA;AACA;AACA;AACA;AACA,qBAAqB,IAAI;;AAEzB;AACA;AACA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA,qBAAqB,QAAQ;AAC7B;AACA;AACA;AACA,qBAAqB,QAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,KAAK;;AAE1B;AACA;AACA;AACA;AACA,qBAAqB,KAAK;AAC1B;AACA;AACA,oCAAoC;AACpC;AACA,qBAAqB,KAAK;;AAE1B;AACA;AACA;AACA,qBAAqB,OAAO;;AAE5B;AACA;AACA;AACA,qBAAqB,OAAO;AAC5B;AACA;AACA;AACA,qBAAqB,OAAO;;AAE5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,aAAa;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,+BAA+B;AAC9C,mBAAmB,+BAA+B;AAClD;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,yDAAyD,EAAE,oDAAoD,EAAE;AACjH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC;AAClC,+BAA+B,iBAAiB;AAChD,SAAS,uFAAuF,iBAAiB,yCAAyC,iBAAiB;AAC3K;AACA;;AAEA;AACA,kCAAkC,WAAW,WAAW,UAAU,EAAE;;AAEpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA,KAAK;;;AAGL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,kDAAkD;;AAElD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yBAAyB;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,iEAAiE;AACjE;;AAEA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,iEAAiE;AACjE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY,aAAa;AAC7C;AACA;AACA;AACA;AACA,iBAAiB,OAAO,WAAW,eAAe;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,eAAe;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wEAAwE;AACxE,6BAA6B;AAC7B;AACA,yEAAyE;AACzE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;;;AAGA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;;AAEA;AACA,mDAAmD;;AAEnD;AACA;;AAEA;AACA,mDAAmD,mBAAmB;AACtE;AACA,8CAA8C,qBAAqB;;AAEnE;AACA,mDAAmD;AACnD,aAAa;AACb;AACA,+CAA+C,8CAA8C;;AAE7F;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,uCAAuC;;AAEvC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;;AAEA;AACA,wCAAwC;AACxC;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,kBAAkB;AACrC;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,2CAA2C,SAAS;AACpD,sFAAsF;AACtF;;AAEA,2BAA2B;AAC3B;AACA,CAAC;;AAED;AACA,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;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AAe,mBAAO,CAAC,oDAAW;AAClC,aAAa,mBAAO,CAAC,wDAAa;;AAElC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,iBAAiB,QAAQ;;AAEzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;ACjJA,SAAS,mBAAO,CAAC,6CAAO;AACxB,cAAc,mBAAO,CAAC,gDAAS;;AAE/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,cAAc;AAC/B;;AAEA;;AAEA;AACA,QAAQ,OAAO;AACf;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,OAAO;AAC1B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,cAAc;AAC/B;;AAEA;;AAEA,QAAQ,OAAO;AACf;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,OAAO;AAC1B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;AClHA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;ACVa;;AAEb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA,GAAG;AACH,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzDA;AACA;AACY;;AAEZ,WAAW,mBAAO,CAAC,mDAAS;;AAE5B,sBAAsB,mBAAO,CAAC,+DAAe;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;;ACzHD;AACA;;AAEY;;AAEZ,UAAU,mBAAO,CAAC,mDAAS;;AAE3B;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;;;;;;;;;;;ACxFA;AACA;AACA;AACA;AACA,UAAU,mBAAO,CAAC,8DAAgB;AAClC,cAAc,mBAAO,CAAC,gEAAgB;AACtC,aAAa,mBAAO,CAAC,wDAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9BA,WAAW,mBAAO,CAAC,iDAAQ;AAC3B,YAAY,mBAAO,CAAC,0DAAc;AAClC,cAAc,mBAAO,CAAC,uDAAW;AACjC,cAAc,mBAAO,CAAC,gEAAgB;AACtC,aAAa,mBAAO,CAAC,gDAAQ;AAC7B,aAAa,mBAAO,CAAC,wDAAa;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC1GA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,QAAQ;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,MAAM;AAChB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oCAAoC,8BAA8B;AAClE;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU,oBAAoB;AAC9B;AACA;;AAEA;AACA,UAAU,UAAU;AACpB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB,YAAY;AAC7B;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,sBAAsB;AACrD;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,QAAQ;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,eAAe;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC7SA,iBAAiB,mBAAO,CAAC,uDAAa;AACtC,qBAAqB,mBAAO,CAAC,6DAAY;;;;;;;;;;;;ACDzC,6EAAsB,mBAAO,CAAC,iEAAgB;AAC9C,sBAAsB,mBAAO,CAAC,yEAAoB;AAClD,WAAW,mBAAO,CAAC,yDAAQ;AAC3B,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,GAAG;AACH;;;;;;;;;;;;;ACnGA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;;;;;;;;;;;;;ACTA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,8DAA8D;AAC9D;AACA;AACA;;;;;;;;;;;;;AC3BA,UAAU,mBAAO,CAAC,0DAAiB;AACnC,gBAAgB,mBAAO,CAAC,oDAAW;AACnC,UAAU,mBAAO,CAAC,8CAAQ;;AAE1B,sBAAsB,mBAAO,CAAC,iEAAgB;AAC9C,sBAAsB,mBAAO,CAAC,yEAAoB;AAClD,aAAa,mBAAO,CAAC,wDAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,iBAAiB,eAAe;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;;AAEA;AACA;;AAEA,mBAAmB,gBAAgB;AACnC;AACA,qBAAqB,UAAU;AAC/B;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;;ACvGA,+CAAa;;AAEb;AACA;AACA;AACA;AACA,oBAAoB;AACpB,CAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;;;;;;;;;;;;;AC3CA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;;;;;;ACvLtC,wBAAwB,mBAAO,CAAC,uEAAiB;AACjD,yBAAyB,mBAAO,CAAC,yEAAkB;;AAEnD;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;ACTA,iBAAiB,mBAAO,CAAC,0DAAa;AACtC,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA,gBAAgB,mBAAO,CAAC,sDAAY;AACpC,UAAU,mBAAO,CAAC,mDAAO;AACzB,UAAU,mBAAO,CAAC,mDAAO;AACzB,SAAS,mBAAO,CAAC,6CAAO;AACxB,UAAU,mBAAO,CAAC,8DAAgB;AAClC,iBAAiB,mBAAO,CAAC,0DAAa;AACtC,iBAAiB,mBAAO,CAAC,iEAAc;AACvC,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxGA,gBAAgB,mBAAO,CAAC,sDAAY;AACpC,kBAAkB,mBAAO,CAAC,0DAAa;AACvC,iBAAiB,mBAAO,CAAC,0DAAa;AACtC,UAAU,mBAAO,CAAC,mDAAO;AACzB,UAAU,mBAAO,CAAC,mDAAO;AACzB,SAAS,mBAAO,CAAC,6CAAO;AACxB,iBAAiB,mBAAO,CAAC,iEAAc;AACvC,UAAU,mBAAO,CAAC,8DAAgB;AAClC,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvFA,SAAS,mBAAO,CAAC,6CAAO;AACxB,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACPA,uDAAY;;AAEZ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,aAAa,mBAAO,CAAC,wDAAa;AAClC;;AAEA;AACA;AACA,CAAC;AACD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,iBAAiB;AACjB,2BAA2B;AAC3B;AACA,6BAA6B,kBAAkB;AAC/C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;;;;;;;;;;;;;ACjDA,uDAAY;;AAEZ;AACA;AACA;AACA,iBAAiB,mBAAO,CAAC,wDAAa;AACtC,kBAAkB,mBAAO,CAAC,0DAAa;AACvC;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kDAAkD;AAClD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;;;;;;;;;;;;AC3GA,iBAAiB,mBAAO,CAAC,qFAAyB;;;;;;;;;;;;;ACAlD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,0EAAsB;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;AAEA;AACA,WAAW,mBAAO,CAAC,6DAAc;AACjC,gBAAgB,mBAAO,CAAC,6DAAU;AAClC;;AAEA,eAAe,mBAAO,CAAC,kFAAoB;AAC3C,eAAe,mBAAO,CAAC,kFAAoB;;AAE3C;;AAEA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA,E;;;;;;;;;;;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA,gBAAgB,mBAAO,CAAC,oFAAqB;;AAE7C;AACA,WAAW,mBAAO,CAAC,6DAAc;AACjC,gBAAgB,mBAAO,CAAC,6DAAU;AAClC;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,E;;;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,0EAAsB;AACxC;;AAEA;;AAEA;AACA,cAAc,mBAAO,CAAC,gDAAS;AAC/B;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,SAAS,mBAAO,CAAC,+CAAQ;;AAEzB;AACA;AACA;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,wGAA2B;AAChD;;AAEA;;AAEA,aAAa,mBAAO,CAAC,wDAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,mBAAO,CAAC,6DAAc;AACjC,gBAAgB,mBAAO,CAAC,6DAAU;AAClC;;AAEA;AACA,gBAAgB,mBAAO,CAAC,aAAM;AAC9B;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA,iBAAiB,mBAAO,CAAC,wGAA+B;AACxD,kBAAkB,mBAAO,CAAC,kGAA4B;AACtD;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yEAAyE,6EAA6E;AACtJ;;AAEA;AACA,qBAAqB,mBAAO,CAAC,8EAAkB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,0FAA0F;;AAE3I;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC,mBAAO,CAAC,4EAAiB;AACjE;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,8EAAkB;;AAE/C;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,kGAAkG;AAClG,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,4FAA4F;AAC5F,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,gDAAgD;;AAEhD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,mBAAO,CAAC,4EAAiB;AAC/D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4CAA4C;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,SAAS;AAC5B;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA,4EAA4E;;AAE5E;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,iBAAiB,yBAAyB;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mDAAmD;AACnD;AACA,mDAAmD,iEAAiE;AACpH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA,uCAAuC;AACvC,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA;AACA,C;;;;;;;;;;;;;AC1/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,YAAY;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,mBAAO,CAAC,8EAAkB;;AAEvC;AACA,WAAW,mBAAO,CAAC,6DAAc;AACjC,gBAAgB,mBAAO,CAAC,6DAAU;AAClC;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,C;;;;;;;;;;;;ACrNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEa;;AAEb;;AAEA,UAAU,mBAAO,CAAC,0EAAsB;AACxC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,WAAW,mBAAO,CAAC,6DAAc;AACjC,gBAAgB,mBAAO,CAAC,6DAAU;AAClC;;AAEA;AACA;AACA,aAAa,mBAAO,CAAC,gEAAgB;AACrC;AACA;;AAEA;AACA,aAAa,mBAAO,CAAC,wGAA2B;AAChD;;AAEA;;AAEA,aAAa,mBAAO,CAAC,wDAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,kBAAkB,mBAAO,CAAC,kGAA4B;;AAEtD;;AAEA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,8EAAkB;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,0FAA0F;;AAE3I;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL,GAAG;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,mBAAO,CAAC,8EAAkB;;AAE/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iCAAiC;;AAEjC;;AAEA,2CAA2C;AAC3C;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mDAAmD;AACnD;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,oDAAoD;AACpD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,E;;;;;;;;;;;;;AC9qBa;;AAEb,iDAAiD,0CAA0C,0DAA0D,EAAE;;AAEvJ,aAAa,mBAAO,CAAC,wDAAa;AAClC,WAAW,mBAAO,CAAC,aAAM;;AAEzB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB,gDAAgD;AAChD;AACA;AACA;;AAEA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA,4BAA4B,sBAAsB;AAClD;AACA;AACA,C;;;;;;;;;;;;AC9Ea;;AAEb;;AAEA,UAAU,mBAAO,CAAC,0EAAsB;AACxC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,E;;;;;;;;;;;ACzEA,iBAAiB,mBAAO,CAAC,+CAAQ;;;;;;;;;;;;ACAjC,iBAAiB,mBAAO,CAAC,sEAAY;;;;;;;;;;;;ACArC,2BAA2B,mBAAO,CAAC,yFAA2B;AAC9D;AACA;AACA,mBAAmB,mBAAO,CAAC,yFAA2B;AACtD,iBAAiB,mBAAO,CAAC,qFAAyB;AAClD,oBAAoB,mBAAO,CAAC,2FAA4B;AACxD,sBAAsB,mBAAO,CAAC,+FAA8B;;;;;;;;;;;;ACN5D,iBAAiB,mBAAO,CAAC,sEAAY;;;;;;;;;;;;ACArC,iBAAiB,mBAAO,CAAC,yFAA2B;;;;;;;;;;;;;ACAxC;AACZ,aAAa,mBAAO,CAAC,8CAAQ;AAC7B,eAAe,mBAAO,CAAC,6DAAU;AACjC,eAAe,mBAAO,CAAC,oDAAW;;AAElC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,iBAAiB,QAAQ;;AAEzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK,OAAO;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;AClKA;AACA,aAAa,mBAAO,CAAC,8CAAQ;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7DA;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0CAA0C,sBAAsB,EAAE;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,CAAC;;;;;;;;;;;;;ACzLD,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,sBAAsB,iBAAiB;AACvC;AACA;;AAEA,mBAAmB,eAAe;AAClC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;AChFA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,cAAc,mBAAO,CAAC,2CAAO;AAC7B,eAAe,mBAAO,CAAC,6CAAQ;AAC/B,iBAAiB,mBAAO,CAAC,iDAAU;AACnC,iBAAiB,mBAAO,CAAC,iDAAU;AACnC,iBAAiB,mBAAO,CAAC,iDAAU;AACnC,iBAAiB,mBAAO,CAAC,iDAAU;;;;;;;;;;;;ACdnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,6CAAQ;AAC3B,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,6CAAQ;AAC3B,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,6DAAU;AACjC,aAAa,mBAAO,CAAC,iDAAU;AAC/B,WAAW,mBAAO,CAAC,6CAAQ;AAC3B,aAAa,mBAAO,CAAC,wDAAa;;AAElC;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,6CAAQ;AAC3B,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB,QAAQ,QAAQ;;AAEhB,iBAAiB,QAAQ;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACtIA,eAAe,mBAAO,CAAC,6DAAU;AACjC,aAAa,mBAAO,CAAC,iDAAU;AAC/B,WAAW,mBAAO,CAAC,6CAAQ;AAC3B,aAAa,mBAAO,CAAC,wDAAa;;AAElC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACxDA,eAAe,mBAAO,CAAC,6DAAU;AACjC,WAAW,mBAAO,CAAC,6CAAQ;AAC3B,aAAa,mBAAO,CAAC,wDAAa;;AAElC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA,QAAQ,SAAS;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,SAAS;AAC1B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;;;;;;ACnQA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,E;;;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,MAAM,iDAAiD,EAAE;AACzD,kCAAkC,gBAAgB,iBAAiB,2BAA2B,MAAM,sBAAsB,MAAM,4BAA4B,MAAM,gCAAgC,wBAAwB,YAAY,oBAAoB,MAAM,oFAAoF,MAAM,eAAe,gBAAgB,iBAAiB,IAAI,MAAM,6BAA6B,wBAAwB,sBAAsB,eAAe,IAAI;AAClf,QAAQ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,mEAAmE,gBAAgB,MAAM,OAAO,oEAAoE,sBAAsB,gBAAgB,IAAI,IAAI,WAAW,uEAAuE,mBAAmB,mBAAmB;;;AAG/a;AACA;AACA,KAAK,EAAE;;AAEP;AACA,CAAC;;AAED;AACA;AACA,IAAI,IAAyD;AAC7D;AACA;AACA;AACA;AACA,KAAK,EAKJ;;;;;;;;;;;;;ACjMD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAAS,mBAAO,CAAC,+CAAQ;AACzB,eAAe,mBAAO,CAAC,6DAAU;;AAEjC;AACA,kBAAkB,mBAAO,CAAC,uFAA6B;AACvD,kBAAkB,mBAAO,CAAC,uFAA6B;AACvD,gBAAgB,mBAAO,CAAC,mFAA2B;AACnD,mBAAmB,mBAAO,CAAC,iFAA8B;AACzD,qBAAqB,mBAAO,CAAC,qFAAgC;;AAE7D;AACA;;;;AAIA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;;;;;;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEa;;AAEb;;AAEA,aAAa,mBAAO,CAAC,wDAAa;AAClC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,sCAAsC,sCAAsC;AACzG;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,C;;;;;;;;;;;;ACvSA;;AAEa;;AAEb,wBAAwB,mBAAO,CAAC,iEAAY;;AAE5C;AACA;AACA,mBAAO,CAAC,sBAAe;;AAEvB;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACdA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,mBAAO,CAAC,iEAAc;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC7DA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClEA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,eAAe;AACvC;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;;AAEA;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;;;;;;;;;;;ACpJA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;ACrBA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;AAaA,IAAIA,gBAAgBC,SAASC,aAAT,CAAuB,QAAvB,CAApB;AACA,IAAIC,iBAAiBF,SAASC,aAAT,CAAuB,QAAvB,CAArB;AACA,IAAIE,cAAcC,SAAlB;AACA,IAAIC,UAAU,KAAd;AACA;AACA;AACA;AACA,IAAIC,eAAe,KAAnB;AACA,IAAIC,UAAUH,SAAd;AACA,IAAII,QAAQJ,SAAZ;AACA,IAAIK,eAAe,KAAnB;AACA,IAAIC,SAASN,SAAb;AACA,IAAIO,WAAWP,SAAf;AACA,IAAIQ,YAAY,KAAhB;AACA,IAAIC,mBAAJ;AACA,IAAIC,sBAAJ;;AAEA;AACA;AACA;;AAEA;AACA,IAAIC,WAAW,EAAf;AACA,IAAIC,mBAAmB,CAAvB;AACA,IAAIC,eAAe,IAAnB;;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","file":"app.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"http://localhost:8000/scratchjr_assets/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/entry/app.js\");\n","\"use strict\";\n\nrequire(\"./noConflict\");\n\nvar _global = _interopRequireDefault(require(\"core-js/library/fn/global\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nif (_global[\"default\"]._babelPolyfill && typeof console !== \"undefined\" && console.warn) {\n console.warn(\"@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended \" + \"and may have consequences if different versions of the polyfills are applied sequentially. \" + \"If you do need to load the polyfill more than once, use @babel/polyfill/noConflict \" + \"instead to bypass the warning.\");\n}\n\n_global[\"default\"]._babelPolyfill = true;","\"use strict\";\n\nrequire(\"core-js/es6\");\n\nrequire(\"core-js/fn/array/includes\");\n\nrequire(\"core-js/fn/array/flat-map\");\n\nrequire(\"core-js/fn/string/pad-start\");\n\nrequire(\"core-js/fn/string/pad-end\");\n\nrequire(\"core-js/fn/string/trim-start\");\n\nrequire(\"core-js/fn/string/trim-end\");\n\nrequire(\"core-js/fn/symbol/async-iterator\");\n\nrequire(\"core-js/fn/object/get-own-property-descriptors\");\n\nrequire(\"core-js/fn/object/values\");\n\nrequire(\"core-js/fn/object/entries\");\n\nrequire(\"core-js/fn/promise/finally\");\n\nrequire(\"core-js/web\");\n\nrequire(\"regenerator-runtime/runtime\");","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","import { Component, ComponentContainer } from '@firebase/component';\nimport { Logger, setUserLogHandler, setLogLevel as setLogLevel$1 } from '@firebase/logger';\nimport { ErrorFactory, getDefaultAppConfig, deepEqual, FirebaseError, base64urlEncodeWithoutPadding, isIndexedDBAvailable, validateIndexedDBOpenable } from '@firebase/util';\nexport { FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PlatformLoggerServiceImpl {\r\n constructor(container) {\r\n this.container = container;\r\n }\r\n // In initial implementation, this will be called by installations on\r\n // auth token refresh, and installations will send this string.\r\n getPlatformInfoString() {\r\n const providers = this.container.getProviders();\r\n // Loop through providers and get library/version pairs from any that are\r\n // version components.\r\n return providers\r\n .map(provider => {\r\n if (isVersionServiceProvider(provider)) {\r\n const service = provider.getImmediate();\r\n return `${service.library}/${service.version}`;\r\n }\r\n else {\r\n return null;\r\n }\r\n })\r\n .filter(logString => logString)\r\n .join(' ');\r\n }\r\n}\r\n/**\r\n *\r\n * @param provider check if this provider provides a VersionService\r\n *\r\n * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider\r\n * provides VersionService. The provider is not necessarily a 'app-version'\r\n * provider.\r\n */\r\nfunction isVersionServiceProvider(provider) {\r\n const component = provider.getComponent();\r\n return (component === null || component === void 0 ? void 0 : component.type) === \"VERSION\" /* ComponentType.VERSION */;\r\n}\n\nconst name$o = \"@firebase/app\";\nconst version$1 = \"0.9.7\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logger = new Logger('@firebase/app');\n\nconst name$n = \"@firebase/app-compat\";\n\nconst name$m = \"@firebase/analytics-compat\";\n\nconst name$l = \"@firebase/analytics\";\n\nconst name$k = \"@firebase/app-check-compat\";\n\nconst name$j = \"@firebase/app-check\";\n\nconst name$i = \"@firebase/auth\";\n\nconst name$h = \"@firebase/auth-compat\";\n\nconst name$g = \"@firebase/database\";\n\nconst name$f = \"@firebase/database-compat\";\n\nconst name$e = \"@firebase/functions\";\n\nconst name$d = \"@firebase/functions-compat\";\n\nconst name$c = \"@firebase/installations\";\n\nconst name$b = \"@firebase/installations-compat\";\n\nconst name$a = \"@firebase/messaging\";\n\nconst name$9 = \"@firebase/messaging-compat\";\n\nconst name$8 = \"@firebase/performance\";\n\nconst name$7 = \"@firebase/performance-compat\";\n\nconst name$6 = \"@firebase/remote-config\";\n\nconst name$5 = \"@firebase/remote-config-compat\";\n\nconst name$4 = \"@firebase/storage\";\n\nconst name$3 = \"@firebase/storage-compat\";\n\nconst name$2 = \"@firebase/firestore\";\n\nconst name$1 = \"@firebase/firestore-compat\";\n\nconst name = \"firebase\";\nconst version = \"9.19.1\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The default app name\r\n *\r\n * @internal\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\r\nconst PLATFORM_LOG_STRING = {\r\n [name$o]: 'fire-core',\r\n [name$n]: 'fire-core-compat',\r\n [name$l]: 'fire-analytics',\r\n [name$m]: 'fire-analytics-compat',\r\n [name$j]: 'fire-app-check',\r\n [name$k]: 'fire-app-check-compat',\r\n [name$i]: 'fire-auth',\r\n [name$h]: 'fire-auth-compat',\r\n [name$g]: 'fire-rtdb',\r\n [name$f]: 'fire-rtdb-compat',\r\n [name$e]: 'fire-fn',\r\n [name$d]: 'fire-fn-compat',\r\n [name$c]: 'fire-iid',\r\n [name$b]: 'fire-iid-compat',\r\n [name$a]: 'fire-fcm',\r\n [name$9]: 'fire-fcm-compat',\r\n [name$8]: 'fire-perf',\r\n [name$7]: 'fire-perf-compat',\r\n [name$6]: 'fire-rc',\r\n [name$5]: 'fire-rc-compat',\r\n [name$4]: 'fire-gcs',\r\n [name$3]: 'fire-gcs-compat',\r\n [name$2]: 'fire-fst',\r\n [name$1]: 'fire-fst-compat',\r\n 'fire-js': 'fire-js',\r\n [name]: 'fire-js-all'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @internal\r\n */\r\nconst _apps = new Map();\r\n/**\r\n * Registered components.\r\n *\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst _components = new Map();\r\n/**\r\n * @param component - the component being added to this app's container\r\n *\r\n * @internal\r\n */\r\nfunction _addComponent(app, component) {\r\n try {\r\n app.container.addComponent(component);\r\n }\r\n catch (e) {\r\n logger.debug(`Component ${component.name} failed to register with FirebaseApp ${app.name}`, e);\r\n }\r\n}\r\n/**\r\n *\r\n * @internal\r\n */\r\nfunction _addOrOverwriteComponent(app, component) {\r\n app.container.addOrOverwriteComponent(component);\r\n}\r\n/**\r\n *\r\n * @param component - the component to register\r\n * @returns whether or not the component is registered successfully\r\n *\r\n * @internal\r\n */\r\nfunction _registerComponent(component) {\r\n const componentName = component.name;\r\n if (_components.has(componentName)) {\r\n logger.debug(`There were multiple attempts to register component ${componentName}.`);\r\n return false;\r\n }\r\n _components.set(componentName, component);\r\n // add the component to existing app instances\r\n for (const app of _apps.values()) {\r\n _addComponent(app, component);\r\n }\r\n return true;\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n *\r\n * @returns the provider for the service with the matching name\r\n *\r\n * @internal\r\n */\r\nfunction _getProvider(app, name) {\r\n const heartbeatController = app.container\r\n .getProvider('heartbeat')\r\n .getImmediate({ optional: true });\r\n if (heartbeatController) {\r\n void heartbeatController.triggerHeartbeat();\r\n }\r\n return app.container.getProvider(name);\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n * @param instanceIdentifier - service instance identifier in case the service supports multiple instances\r\n *\r\n * @internal\r\n */\r\nfunction _removeServiceInstance(app, name, instanceIdentifier = DEFAULT_ENTRY_NAME) {\r\n _getProvider(app, name).clearInstance(instanceIdentifier);\r\n}\r\n/**\r\n * Test only\r\n *\r\n * @internal\r\n */\r\nfunction _clearComponents() {\r\n _components.clear();\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERRORS = {\r\n [\"no-app\" /* AppError.NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\r\n 'call Firebase App.initializeApp()',\r\n [\"bad-app-name\" /* AppError.BAD_APP_NAME */]: \"Illegal App name: '{$appName}\",\r\n [\"duplicate-app\" /* AppError.DUPLICATE_APP */]: \"Firebase App named '{$appName}' already exists with different options or config\",\r\n [\"app-deleted\" /* AppError.APP_DELETED */]: \"Firebase App named '{$appName}' already deleted\",\r\n [\"no-options\" /* AppError.NO_OPTIONS */]: 'Need to provide options, when not being deployed to hosting via source.',\r\n [\"invalid-app-argument\" /* AppError.INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\r\n 'Firebase App instance.',\r\n [\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */]: 'First argument to `onLog` must be null or a function.',\r\n [\"idb-open\" /* AppError.IDB_OPEN */]: 'Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-get\" /* AppError.IDB_GET */]: 'Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-set\" /* AppError.IDB_WRITE */]: 'Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-delete\" /* AppError.IDB_DELETE */]: 'Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.'\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory('app', 'Firebase', ERRORS);\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FirebaseAppImpl {\r\n constructor(options, config, container) {\r\n this._isDeleted = false;\r\n this._options = Object.assign({}, options);\r\n this._config = Object.assign({}, config);\r\n this._name = config.name;\r\n this._automaticDataCollectionEnabled =\r\n config.automaticDataCollectionEnabled;\r\n this._container = container;\r\n this.container.addComponent(new Component('app', () => this, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n }\r\n get automaticDataCollectionEnabled() {\r\n this.checkDestroyed();\r\n return this._automaticDataCollectionEnabled;\r\n }\r\n set automaticDataCollectionEnabled(val) {\r\n this.checkDestroyed();\r\n this._automaticDataCollectionEnabled = val;\r\n }\r\n get name() {\r\n this.checkDestroyed();\r\n return this._name;\r\n }\r\n get options() {\r\n this.checkDestroyed();\r\n return this._options;\r\n }\r\n get config() {\r\n this.checkDestroyed();\r\n return this._config;\r\n }\r\n get container() {\r\n return this._container;\r\n }\r\n get isDeleted() {\r\n return this._isDeleted;\r\n }\r\n set isDeleted(val) {\r\n this._isDeleted = val;\r\n }\r\n /**\r\n * This function will throw an Error if the App has already been deleted -\r\n * use before performing API actions on the App.\r\n */\r\n checkDestroyed() {\r\n if (this.isDeleted) {\r\n throw ERROR_FACTORY.create(\"app-deleted\" /* AppError.APP_DELETED */, { appName: this._name });\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The current SDK version.\r\n *\r\n * @public\r\n */\r\nconst SDK_VERSION = version;\r\nfunction initializeApp(_options, rawConfig = {}) {\r\n let options = _options;\r\n if (typeof rawConfig !== 'object') {\r\n const name = rawConfig;\r\n rawConfig = { name };\r\n }\r\n const config = Object.assign({ name: DEFAULT_ENTRY_NAME, automaticDataCollectionEnabled: false }, rawConfig);\r\n const name = config.name;\r\n if (typeof name !== 'string' || !name) {\r\n throw ERROR_FACTORY.create(\"bad-app-name\" /* AppError.BAD_APP_NAME */, {\r\n appName: String(name)\r\n });\r\n }\r\n options || (options = getDefaultAppConfig());\r\n if (!options) {\r\n throw ERROR_FACTORY.create(\"no-options\" /* AppError.NO_OPTIONS */);\r\n }\r\n const existingApp = _apps.get(name);\r\n if (existingApp) {\r\n // return the existing app if options and config deep equal the ones in the existing app.\r\n if (deepEqual(options, existingApp.options) &&\r\n deepEqual(config, existingApp.config)) {\r\n return existingApp;\r\n }\r\n else {\r\n throw ERROR_FACTORY.create(\"duplicate-app\" /* AppError.DUPLICATE_APP */, { appName: name });\r\n }\r\n }\r\n const container = new ComponentContainer(name);\r\n for (const component of _components.values()) {\r\n container.addComponent(component);\r\n }\r\n const newApp = new FirebaseAppImpl(options, config, container);\r\n _apps.set(name, newApp);\r\n return newApp;\r\n}\r\n/**\r\n * Retrieves a {@link @firebase/app#FirebaseApp} instance.\r\n *\r\n * When called with no arguments, the default app is returned. When an app name\r\n * is provided, the app corresponding to that name is returned.\r\n *\r\n * An exception is thrown if the app being retrieved has not yet been\r\n * initialized.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return the default app\r\n * const app = getApp();\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return a named app\r\n * const otherApp = getApp(\"otherApp\");\r\n * ```\r\n *\r\n * @param name - Optional name of the app to return. If no name is\r\n * provided, the default is `\"[DEFAULT]\"`.\r\n *\r\n * @returns The app corresponding to the provided app name.\r\n * If no app name is provided, the default app is returned.\r\n *\r\n * @public\r\n */\r\nfunction getApp(name = DEFAULT_ENTRY_NAME) {\r\n const app = _apps.get(name);\r\n if (!app && name === DEFAULT_ENTRY_NAME) {\r\n return initializeApp();\r\n }\r\n if (!app) {\r\n throw ERROR_FACTORY.create(\"no-app\" /* AppError.NO_APP */, { appName: name });\r\n }\r\n return app;\r\n}\r\n/**\r\n * A (read-only) array of all initialized apps.\r\n * @public\r\n */\r\nfunction getApps() {\r\n return Array.from(_apps.values());\r\n}\r\n/**\r\n * Renders this app unusable and frees the resources of all associated\r\n * services.\r\n *\r\n * @example\r\n * ```javascript\r\n * deleteApp(app)\r\n * .then(function() {\r\n * console.log(\"App deleted successfully\");\r\n * })\r\n * .catch(function(error) {\r\n * console.log(\"Error deleting app:\", error);\r\n * });\r\n * ```\r\n *\r\n * @public\r\n */\r\nasync function deleteApp(app) {\r\n const name = app.name;\r\n if (_apps.has(name)) {\r\n _apps.delete(name);\r\n await Promise.all(app.container\r\n .getProviders()\r\n .map(provider => provider.delete()));\r\n app.isDeleted = true;\r\n }\r\n}\r\n/**\r\n * Registers a library's name and version for platform logging purposes.\r\n * @param library - Name of 1p or 3p library (e.g. firestore, angularfire)\r\n * @param version - Current version of that library.\r\n * @param variant - Bundle variant, e.g., node, rn, etc.\r\n *\r\n * @public\r\n */\r\nfunction registerVersion(libraryKeyOrName, version, variant) {\r\n var _a;\r\n // TODO: We can use this check to whitelist strings when/if we set up\r\n // a good whitelist system.\r\n let library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName;\r\n if (variant) {\r\n library += `-${variant}`;\r\n }\r\n const libraryMismatch = library.match(/\\s|\\//);\r\n const versionMismatch = version.match(/\\s|\\//);\r\n if (libraryMismatch || versionMismatch) {\r\n const warning = [\r\n `Unable to register library \"${library}\" with version \"${version}\":`\r\n ];\r\n if (libraryMismatch) {\r\n warning.push(`library name \"${library}\" contains illegal characters (whitespace or \"/\")`);\r\n }\r\n if (libraryMismatch && versionMismatch) {\r\n warning.push('and');\r\n }\r\n if (versionMismatch) {\r\n warning.push(`version name \"${version}\" contains illegal characters (whitespace or \"/\")`);\r\n }\r\n logger.warn(warning.join(' '));\r\n return;\r\n }\r\n _registerComponent(new Component(`${library}-version`, () => ({ library, version }), \"VERSION\" /* ComponentType.VERSION */));\r\n}\r\n/**\r\n * Sets log handler for all Firebase SDKs.\r\n * @param logCallback - An optional custom log handler that executes user code whenever\r\n * the Firebase SDK makes a logging call.\r\n *\r\n * @public\r\n */\r\nfunction onLog(logCallback, options) {\r\n if (logCallback !== null && typeof logCallback !== 'function') {\r\n throw ERROR_FACTORY.create(\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */);\r\n }\r\n setUserLogHandler(logCallback, options);\r\n}\r\n/**\r\n * Sets log level for all Firebase SDKs.\r\n *\r\n * All of the log types above the current log level are captured (i.e. if\r\n * you set the log level to `info`, errors are logged, but `debug` and\r\n * `verbose` logs are not).\r\n *\r\n * @public\r\n */\r\nfunction setLogLevel(logLevel) {\r\n setLogLevel$1(logLevel);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DB_NAME = 'firebase-heartbeat-database';\r\nconst DB_VERSION = 1;\r\nconst STORE_NAME = 'firebase-heartbeat-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDB(DB_NAME, DB_VERSION, {\r\n upgrade: (db, oldVersion) => {\r\n // We don't use 'break' in this switch statement, the fall-through\r\n // behavior is what we want, because if there are multiple versions between\r\n // the old version and the current version, we want ALL the migrations\r\n // that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (oldVersion) {\r\n case 0:\r\n db.createObjectStore(STORE_NAME);\r\n }\r\n }\r\n }).catch(e => {\r\n throw ERROR_FACTORY.create(\"idb-open\" /* AppError.IDB_OPEN */, {\r\n originalErrorMessage: e.message\r\n });\r\n });\r\n }\r\n return dbPromise;\r\n}\r\nasync function readHeartbeatsFromIndexedDB(app) {\r\n try {\r\n const db = await getDbPromise();\r\n return db\r\n .transaction(STORE_NAME)\r\n .objectStore(STORE_NAME)\r\n .get(computeKey(app));\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n logger.warn(e.message);\r\n }\r\n else {\r\n const idbGetError = ERROR_FACTORY.create(\"idb-get\" /* AppError.IDB_GET */, {\r\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n logger.warn(idbGetError.message);\r\n }\r\n }\r\n}\r\nasync function writeHeartbeatsToIndexedDB(app, heartbeatObject) {\r\n try {\r\n const db = await getDbPromise();\r\n const tx = db.transaction(STORE_NAME, 'readwrite');\r\n const objectStore = tx.objectStore(STORE_NAME);\r\n await objectStore.put(heartbeatObject, computeKey(app));\r\n return tx.done;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n logger.warn(e.message);\r\n }\r\n else {\r\n const idbGetError = ERROR_FACTORY.create(\"idb-set\" /* AppError.IDB_WRITE */, {\r\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n logger.warn(idbGetError.message);\r\n }\r\n }\r\n}\r\nfunction computeKey(app) {\r\n return `${app.name}!${app.options.appId}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst MAX_HEADER_BYTES = 1024;\r\n// 30 days\r\nconst STORED_HEARTBEAT_RETENTION_MAX_MILLIS = 30 * 24 * 60 * 60 * 1000;\r\nclass HeartbeatServiceImpl {\r\n constructor(container) {\r\n this.container = container;\r\n /**\r\n * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate\r\n * the header string.\r\n * Stores one record per date. This will be consolidated into the standard\r\n * format of one record per user agent string before being sent as a header.\r\n * Populated from indexedDB when the controller is instantiated and should\r\n * be kept in sync with indexedDB.\r\n * Leave public for easier testing.\r\n */\r\n this._heartbeatsCache = null;\r\n const app = this.container.getProvider('app').getImmediate();\r\n this._storage = new HeartbeatStorageImpl(app);\r\n this._heartbeatsCachePromise = this._storage.read().then(result => {\r\n this._heartbeatsCache = result;\r\n return result;\r\n });\r\n }\r\n /**\r\n * Called to report a heartbeat. The function will generate\r\n * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it\r\n * to IndexedDB.\r\n * Note that we only store one heartbeat per day. So if a heartbeat for today is\r\n * already logged, subsequent calls to this function in the same day will be ignored.\r\n */\r\n async triggerHeartbeat() {\r\n const platformLogger = this.container\r\n .getProvider('platform-logger')\r\n .getImmediate();\r\n // This is the \"Firebase user agent\" string from the platform logger\r\n // service, not the browser user agent.\r\n const agent = platformLogger.getPlatformInfoString();\r\n const date = getUTCDateString();\r\n if (this._heartbeatsCache === null) {\r\n this._heartbeatsCache = await this._heartbeatsCachePromise;\r\n }\r\n // Do not store a heartbeat if one is already stored for this day\r\n // or if a header has already been sent today.\r\n if (this._heartbeatsCache.lastSentHeartbeatDate === date ||\r\n this._heartbeatsCache.heartbeats.some(singleDateHeartbeat => singleDateHeartbeat.date === date)) {\r\n return;\r\n }\r\n else {\r\n // There is no entry for this date. Create one.\r\n this._heartbeatsCache.heartbeats.push({ date, agent });\r\n }\r\n // Remove entries older than 30 days.\r\n this._heartbeatsCache.heartbeats = this._heartbeatsCache.heartbeats.filter(singleDateHeartbeat => {\r\n const hbTimestamp = new Date(singleDateHeartbeat.date).valueOf();\r\n const now = Date.now();\r\n return now - hbTimestamp <= STORED_HEARTBEAT_RETENTION_MAX_MILLIS;\r\n });\r\n return this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n /**\r\n * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly.\r\n * It also clears all heartbeats from memory as well as in IndexedDB.\r\n *\r\n * NOTE: Consuming product SDKs should not send the header if this method\r\n * returns an empty string.\r\n */\r\n async getHeartbeatsHeader() {\r\n if (this._heartbeatsCache === null) {\r\n await this._heartbeatsCachePromise;\r\n }\r\n // If it's still null or the array is empty, there is no data to send.\r\n if (this._heartbeatsCache === null ||\r\n this._heartbeatsCache.heartbeats.length === 0) {\r\n return '';\r\n }\r\n const date = getUTCDateString();\r\n // Extract as many heartbeats from the cache as will fit under the size limit.\r\n const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(this._heartbeatsCache.heartbeats);\r\n const headerString = base64urlEncodeWithoutPadding(JSON.stringify({ version: 2, heartbeats: heartbeatsToSend }));\r\n // Store last sent date to prevent another being logged/sent for the same day.\r\n this._heartbeatsCache.lastSentHeartbeatDate = date;\r\n if (unsentEntries.length > 0) {\r\n // Store any unsent entries if they exist.\r\n this._heartbeatsCache.heartbeats = unsentEntries;\r\n // This seems more likely than emptying the array (below) to lead to some odd state\r\n // since the cache isn't empty and this will be called again on the next request,\r\n // and is probably safest if we await it.\r\n await this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n else {\r\n this._heartbeatsCache.heartbeats = [];\r\n // Do not wait for this, to reduce latency.\r\n void this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n return headerString;\r\n }\r\n}\r\nfunction getUTCDateString() {\r\n const today = new Date();\r\n // Returns date format 'YYYY-MM-DD'\r\n return today.toISOString().substring(0, 10);\r\n}\r\nfunction extractHeartbeatsForHeader(heartbeatsCache, maxSize = MAX_HEADER_BYTES) {\r\n // Heartbeats grouped by user agent in the standard format to be sent in\r\n // the header.\r\n const heartbeatsToSend = [];\r\n // Single date format heartbeats that are not sent.\r\n let unsentEntries = heartbeatsCache.slice();\r\n for (const singleDateHeartbeat of heartbeatsCache) {\r\n // Look for an existing entry with the same user agent.\r\n const heartbeatEntry = heartbeatsToSend.find(hb => hb.agent === singleDateHeartbeat.agent);\r\n if (!heartbeatEntry) {\r\n // If no entry for this user agent exists, create one.\r\n heartbeatsToSend.push({\r\n agent: singleDateHeartbeat.agent,\r\n dates: [singleDateHeartbeat.date]\r\n });\r\n if (countBytes(heartbeatsToSend) > maxSize) {\r\n // If the header would exceed max size, remove the added heartbeat\r\n // entry and stop adding to the header.\r\n heartbeatsToSend.pop();\r\n break;\r\n }\r\n }\r\n else {\r\n heartbeatEntry.dates.push(singleDateHeartbeat.date);\r\n // If the header would exceed max size, remove the added date\r\n // and stop adding to the header.\r\n if (countBytes(heartbeatsToSend) > maxSize) {\r\n heartbeatEntry.dates.pop();\r\n break;\r\n }\r\n }\r\n // Pop unsent entry from queue. (Skipped if adding the entry exceeded\r\n // quota and the loop breaks early.)\r\n unsentEntries = unsentEntries.slice(1);\r\n }\r\n return {\r\n heartbeatsToSend,\r\n unsentEntries\r\n };\r\n}\r\nclass HeartbeatStorageImpl {\r\n constructor(app) {\r\n this.app = app;\r\n this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck();\r\n }\r\n async runIndexedDBEnvironmentCheck() {\r\n if (!isIndexedDBAvailable()) {\r\n return false;\r\n }\r\n else {\r\n return validateIndexedDBOpenable()\r\n .then(() => true)\r\n .catch(() => false);\r\n }\r\n }\r\n /**\r\n * Read all heartbeats.\r\n */\r\n async read() {\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return { heartbeats: [] };\r\n }\r\n else {\r\n const idbHeartbeatObject = await readHeartbeatsFromIndexedDB(this.app);\r\n return idbHeartbeatObject || { heartbeats: [] };\r\n }\r\n }\r\n // overwrite the storage with the provided heartbeats\r\n async overwrite(heartbeatsObject) {\r\n var _a;\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return;\r\n }\r\n else {\r\n const existingHeartbeatsObject = await this.read();\r\n return writeHeartbeatsToIndexedDB(this.app, {\r\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n heartbeats: heartbeatsObject.heartbeats\r\n });\r\n }\r\n }\r\n // add heartbeats\r\n async add(heartbeatsObject) {\r\n var _a;\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return;\r\n }\r\n else {\r\n const existingHeartbeatsObject = await this.read();\r\n return writeHeartbeatsToIndexedDB(this.app, {\r\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n heartbeats: [\r\n ...existingHeartbeatsObject.heartbeats,\r\n ...heartbeatsObject.heartbeats\r\n ]\r\n });\r\n }\r\n }\r\n}\r\n/**\r\n * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped\r\n * in a platform logging header JSON object, stringified, and converted\r\n * to base 64.\r\n */\r\nfunction countBytes(heartbeatsCache) {\r\n // base64 has a restricted set of characters, all of which should be 1 byte.\r\n return base64urlEncodeWithoutPadding(\r\n // heartbeatsCache wrapper properties\r\n JSON.stringify({ version: 2, heartbeats: heartbeatsCache })).length;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerCoreComponents(variant) {\r\n _registerComponent(new Component('platform-logger', container => new PlatformLoggerServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n _registerComponent(new Component('heartbeat', container => new HeartbeatServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n // Register `app` package.\r\n registerVersion(name$o, version$1, variant);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name$o, version$1, 'esm2017');\r\n // Register platform SDK identifier (no version).\r\n registerVersion('fire-js', '');\r\n}\n\n/**\r\n * Firebase App\r\n *\r\n * @remarks This package coordinates the communication between the different Firebase components\r\n * @packageDocumentation\r\n */\r\nregisterCoreComponents('');\n\nexport { SDK_VERSION, DEFAULT_ENTRY_NAME as _DEFAULT_ENTRY_NAME, _addComponent, _addOrOverwriteComponent, _apps, _clearComponents, _components, _getProvider, _registerComponent, _removeServiceInstance, deleteApp, getApp, getApps, initializeApp, onLog, registerVersion, setLogLevel };\n\n","import { Deferred } from '@firebase/util';\n\n/**\r\n * Component for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass Component {\r\n /**\r\n *\r\n * @param name The public service name, e.g. app, auth, firestore, database\r\n * @param instanceFactory Service factory responsible for creating the public interface\r\n * @param type whether the service provided by the component is public or private\r\n */\r\n constructor(name, instanceFactory, type) {\r\n this.name = name;\r\n this.instanceFactory = instanceFactory;\r\n this.type = type;\r\n this.multipleInstances = false;\r\n /**\r\n * Properties to be added to the service namespace\r\n */\r\n this.serviceProps = {};\r\n this.instantiationMode = \"LAZY\" /* InstantiationMode.LAZY */;\r\n this.onInstanceCreated = null;\r\n }\r\n setInstantiationMode(mode) {\r\n this.instantiationMode = mode;\r\n return this;\r\n }\r\n setMultipleInstances(multipleInstances) {\r\n this.multipleInstances = multipleInstances;\r\n return this;\r\n }\r\n setServiceProps(props) {\r\n this.serviceProps = props;\r\n return this;\r\n }\r\n setInstanceCreatedCallback(callback) {\r\n this.onInstanceCreated = callback;\r\n return this;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\r\n * NameServiceMapping[T] is an alias for the type of the instance\r\n */\r\nclass Provider {\r\n constructor(name, container) {\r\n this.name = name;\r\n this.container = container;\r\n this.component = null;\r\n this.instances = new Map();\r\n this.instancesDeferred = new Map();\r\n this.instancesOptions = new Map();\r\n this.onInitCallbacks = new Map();\r\n }\r\n /**\r\n * @param identifier A provider can provide mulitple instances of a service\r\n * if this.component.multipleInstances is true.\r\n */\r\n get(identifier) {\r\n // if multipleInstances is not supported, use the default name\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n if (!this.instancesDeferred.has(normalizedIdentifier)) {\r\n const deferred = new Deferred();\r\n this.instancesDeferred.set(normalizedIdentifier, deferred);\r\n if (this.isInitialized(normalizedIdentifier) ||\r\n this.shouldAutoInitialize()) {\r\n // initialize the service if it can be auto-initialized\r\n try {\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n if (instance) {\r\n deferred.resolve(instance);\r\n }\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception during get(), it should not cause\r\n // a fatal error. We just return the unresolved promise in this case.\r\n }\r\n }\r\n }\r\n return this.instancesDeferred.get(normalizedIdentifier).promise;\r\n }\r\n getImmediate(options) {\r\n var _a;\r\n // if multipleInstances is not supported, use the default name\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(options === null || options === void 0 ? void 0 : options.identifier);\r\n const optional = (_a = options === null || options === void 0 ? void 0 : options.optional) !== null && _a !== void 0 ? _a : false;\r\n if (this.isInitialized(normalizedIdentifier) ||\r\n this.shouldAutoInitialize()) {\r\n try {\r\n return this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n }\r\n catch (e) {\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n }\r\n else {\r\n // In case a component is not initialized and should/can not be auto-initialized at the moment, return null if the optional flag is set, or throw\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw Error(`Service ${this.name} is not available`);\r\n }\r\n }\r\n }\r\n getComponent() {\r\n return this.component;\r\n }\r\n setComponent(component) {\r\n if (component.name !== this.name) {\r\n throw Error(`Mismatching Component ${component.name} for Provider ${this.name}.`);\r\n }\r\n if (this.component) {\r\n throw Error(`Component for ${this.name} has already been provided`);\r\n }\r\n this.component = component;\r\n // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)\r\n if (!this.shouldAutoInitialize()) {\r\n return;\r\n }\r\n // if the service is eager, initialize the default instance\r\n if (isComponentEager(component)) {\r\n try {\r\n this.getOrInitializeService({ instanceIdentifier: DEFAULT_ENTRY_NAME });\r\n }\r\n catch (e) {\r\n // when the instance factory for an eager Component throws an exception during the eager\r\n // initialization, it should not cause a fatal error.\r\n // TODO: Investigate if we need to make it configurable, because some component may want to cause\r\n // a fatal error in this case?\r\n }\r\n }\r\n // Create service instances for the pending promises and resolve them\r\n // NOTE: if this.multipleInstances is false, only the default instance will be created\r\n // and all promises with resolve with it regardless of the identifier.\r\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n try {\r\n // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n instanceDeferred.resolve(instance);\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception, it should not cause\r\n // a fatal error. We just leave the promise unresolved.\r\n }\r\n }\r\n }\r\n clearInstance(identifier = DEFAULT_ENTRY_NAME) {\r\n this.instancesDeferred.delete(identifier);\r\n this.instancesOptions.delete(identifier);\r\n this.instances.delete(identifier);\r\n }\r\n // app.delete() will call this method on every provider to delete the services\r\n // TODO: should we mark the provider as deleted?\r\n async delete() {\r\n const services = Array.from(this.instances.values());\r\n await Promise.all([\r\n ...services\r\n .filter(service => 'INTERNAL' in service) // legacy services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(service => service.INTERNAL.delete()),\r\n ...services\r\n .filter(service => '_delete' in service) // modularized services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(service => service._delete())\r\n ]);\r\n }\r\n isComponentSet() {\r\n return this.component != null;\r\n }\r\n isInitialized(identifier = DEFAULT_ENTRY_NAME) {\r\n return this.instances.has(identifier);\r\n }\r\n getOptions(identifier = DEFAULT_ENTRY_NAME) {\r\n return this.instancesOptions.get(identifier) || {};\r\n }\r\n initialize(opts = {}) {\r\n const { options = {} } = opts;\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(opts.instanceIdentifier);\r\n if (this.isInitialized(normalizedIdentifier)) {\r\n throw Error(`${this.name}(${normalizedIdentifier}) has already been initialized`);\r\n }\r\n if (!this.isComponentSet()) {\r\n throw Error(`Component ${this.name} has not been registered yet`);\r\n }\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier,\r\n options\r\n });\r\n // resolve any pending promise waiting for the service instance\r\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n const normalizedDeferredIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n if (normalizedIdentifier === normalizedDeferredIdentifier) {\r\n instanceDeferred.resolve(instance);\r\n }\r\n }\r\n return instance;\r\n }\r\n /**\r\n *\r\n * @param callback - a function that will be invoked after the provider has been initialized by calling provider.initialize().\r\n * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.\r\n *\r\n * @param identifier An optional instance identifier\r\n * @returns a function to unregister the callback\r\n */\r\n onInit(callback, identifier) {\r\n var _a;\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n const existingCallbacks = (_a = this.onInitCallbacks.get(normalizedIdentifier)) !== null && _a !== void 0 ? _a : new Set();\r\n existingCallbacks.add(callback);\r\n this.onInitCallbacks.set(normalizedIdentifier, existingCallbacks);\r\n const existingInstance = this.instances.get(normalizedIdentifier);\r\n if (existingInstance) {\r\n callback(existingInstance, normalizedIdentifier);\r\n }\r\n return () => {\r\n existingCallbacks.delete(callback);\r\n };\r\n }\r\n /**\r\n * Invoke onInit callbacks synchronously\r\n * @param instance the service instance`\r\n */\r\n invokeOnInitCallbacks(instance, identifier) {\r\n const callbacks = this.onInitCallbacks.get(identifier);\r\n if (!callbacks) {\r\n return;\r\n }\r\n for (const callback of callbacks) {\r\n try {\r\n callback(instance, identifier);\r\n }\r\n catch (_a) {\r\n // ignore errors in the onInit callback\r\n }\r\n }\r\n }\r\n getOrInitializeService({ instanceIdentifier, options = {} }) {\r\n let instance = this.instances.get(instanceIdentifier);\r\n if (!instance && this.component) {\r\n instance = this.component.instanceFactory(this.container, {\r\n instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),\r\n options\r\n });\r\n this.instances.set(instanceIdentifier, instance);\r\n this.instancesOptions.set(instanceIdentifier, options);\r\n /**\r\n * Invoke onInit listeners.\r\n * Note this.component.onInstanceCreated is different, which is used by the component creator,\r\n * while onInit listeners are registered by consumers of the provider.\r\n */\r\n this.invokeOnInitCallbacks(instance, instanceIdentifier);\r\n /**\r\n * Order is important\r\n * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which\r\n * makes `isInitialized()` return true.\r\n */\r\n if (this.component.onInstanceCreated) {\r\n try {\r\n this.component.onInstanceCreated(this.container, instanceIdentifier, instance);\r\n }\r\n catch (_a) {\r\n // ignore errors in the onInstanceCreatedCallback\r\n }\r\n }\r\n }\r\n return instance || null;\r\n }\r\n normalizeInstanceIdentifier(identifier = DEFAULT_ENTRY_NAME) {\r\n if (this.component) {\r\n return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\r\n }\r\n else {\r\n return identifier; // assume multiple instances are supported before the component is provided.\r\n }\r\n }\r\n shouldAutoInitialize() {\r\n return (!!this.component &&\r\n this.component.instantiationMode !== \"EXPLICIT\" /* InstantiationMode.EXPLICIT */);\r\n }\r\n}\r\n// undefined should be passed to the service factory for the default instance\r\nfunction normalizeIdentifierForFactory(identifier) {\r\n return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\r\n}\r\nfunction isComponentEager(component) {\r\n return component.instantiationMode === \"EAGER\" /* InstantiationMode.EAGER */;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass ComponentContainer {\r\n constructor(name) {\r\n this.name = name;\r\n this.providers = new Map();\r\n }\r\n /**\r\n *\r\n * @param component Component being added\r\n * @param overwrite When a component with the same name has already been registered,\r\n * if overwrite is true: overwrite the existing component with the new component and create a new\r\n * provider with the new component. It can be useful in tests where you want to use different mocks\r\n * for different tests.\r\n * if overwrite is false: throw an exception\r\n */\r\n addComponent(component) {\r\n const provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n throw new Error(`Component ${component.name} has already been registered with ${this.name}`);\r\n }\r\n provider.setComponent(component);\r\n }\r\n addOrOverwriteComponent(component) {\r\n const provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n // delete the existing provider from the container, so we can register the new component\r\n this.providers.delete(component.name);\r\n }\r\n this.addComponent(component);\r\n }\r\n /**\r\n * getProvider provides a type safe interface where it can only be called with a field name\r\n * present in NameServiceMapping interface.\r\n *\r\n * Firebase SDKs providing services should extend NameServiceMapping interface to register\r\n * themselves.\r\n */\r\n getProvider(name) {\r\n if (this.providers.has(name)) {\r\n return this.providers.get(name);\r\n }\r\n // create a Provider for a service that hasn't registered with Firebase\r\n const provider = new Provider(name, this);\r\n this.providers.set(name, provider);\r\n return provider;\r\n }\r\n getProviders() {\r\n return Array.from(this.providers.values());\r\n }\r\n}\n\nexport { Component, ComponentContainer, Provider };\n\n","import { _getProvider, getApp, SDK_VERSION as SDK_VERSION$1, _registerComponent, registerVersion } from '@firebase/app';\nimport { Component } from '@firebase/component';\nimport { stringify, jsonEval, contains, assert, isNodeSdk, stringToByteArray, Sha1, base64, deepCopy, base64Encode, isMobileCordova, stringLength, Deferred, safeGet, isAdmin, isValidFormat, isEmpty, isReactNative, assertionError, map, querystring, errorPrefix, getModularInstance, getDefaultEmulatorHostnameAndPort, createMockUserToken } from '@firebase/util';\nimport { Logger, LogLevel } from '@firebase/logger';\n\nconst name = \"@firebase/database\";\nconst version = \"0.14.4\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** The semver (www.semver.org) version of the SDK. */\r\nlet SDK_VERSION = '';\r\n/**\r\n * SDK_VERSION should be set before any database instance is created\r\n * @internal\r\n */\r\nfunction setSDKVersion(version) {\r\n SDK_VERSION = version;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Wraps a DOM Storage object and:\r\n * - automatically encode objects as JSON strings before storing them to allow us to store arbitrary types.\r\n * - prefixes names with \"firebase:\" to avoid collisions with app data.\r\n *\r\n * We automatically (see storage.js) create two such wrappers, one for sessionStorage,\r\n * and one for localStorage.\r\n *\r\n */\r\nclass DOMStorageWrapper {\r\n /**\r\n * @param domStorage_ - The underlying storage object (e.g. localStorage or sessionStorage)\r\n */\r\n constructor(domStorage_) {\r\n this.domStorage_ = domStorage_;\r\n // Use a prefix to avoid collisions with other stuff saved by the app.\r\n this.prefix_ = 'firebase:';\r\n }\r\n /**\r\n * @param key - The key to save the value under\r\n * @param value - The value being stored, or null to remove the key.\r\n */\r\n set(key, value) {\r\n if (value == null) {\r\n this.domStorage_.removeItem(this.prefixedName_(key));\r\n }\r\n else {\r\n this.domStorage_.setItem(this.prefixedName_(key), stringify(value));\r\n }\r\n }\r\n /**\r\n * @returns The value that was stored under this key, or null\r\n */\r\n get(key) {\r\n const storedVal = this.domStorage_.getItem(this.prefixedName_(key));\r\n if (storedVal == null) {\r\n return null;\r\n }\r\n else {\r\n return jsonEval(storedVal);\r\n }\r\n }\r\n remove(key) {\r\n this.domStorage_.removeItem(this.prefixedName_(key));\r\n }\r\n prefixedName_(name) {\r\n return this.prefix_ + name;\r\n }\r\n toString() {\r\n return this.domStorage_.toString();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An in-memory storage implementation that matches the API of DOMStorageWrapper\r\n * (TODO: create interface for both to implement).\r\n */\r\nclass MemoryStorage {\r\n constructor() {\r\n this.cache_ = {};\r\n this.isInMemoryStorage = true;\r\n }\r\n set(key, value) {\r\n if (value == null) {\r\n delete this.cache_[key];\r\n }\r\n else {\r\n this.cache_[key] = value;\r\n }\r\n }\r\n get(key) {\r\n if (contains(this.cache_, key)) {\r\n return this.cache_[key];\r\n }\r\n return null;\r\n }\r\n remove(key) {\r\n delete this.cache_[key];\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Helper to create a DOMStorageWrapper or else fall back to MemoryStorage.\r\n * TODO: Once MemoryStorage and DOMStorageWrapper have a shared interface this method annotation should change\r\n * to reflect this type\r\n *\r\n * @param domStorageName - Name of the underlying storage object\r\n * (e.g. 'localStorage' or 'sessionStorage').\r\n * @returns Turning off type information until a common interface is defined.\r\n */\r\nconst createStoragefor = function (domStorageName) {\r\n try {\r\n // NOTE: just accessing \"localStorage\" or \"window['localStorage']\" may throw a security exception,\r\n // so it must be inside the try/catch.\r\n if (typeof window !== 'undefined' &&\r\n typeof window[domStorageName] !== 'undefined') {\r\n // Need to test cache. Just because it's here doesn't mean it works\r\n const domStorage = window[domStorageName];\r\n domStorage.setItem('firebase:sentinel', 'cache');\r\n domStorage.removeItem('firebase:sentinel');\r\n return new DOMStorageWrapper(domStorage);\r\n }\r\n }\r\n catch (e) { }\r\n // Failed to create wrapper. Just return in-memory storage.\r\n // TODO: log?\r\n return new MemoryStorage();\r\n};\r\n/** A storage object that lasts across sessions */\r\nconst PersistentStorage = createStoragefor('localStorage');\r\n/** A storage object that only lasts one session */\r\nconst SessionStorage = createStoragefor('sessionStorage');\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logClient = new Logger('@firebase/database');\r\n/**\r\n * Returns a locally-unique ID (generated by just incrementing up from 0 each time its called).\r\n */\r\nconst LUIDGenerator = (function () {\r\n let id = 1;\r\n return function () {\r\n return id++;\r\n };\r\n})();\r\n/**\r\n * Sha1 hash of the input string\r\n * @param str - The string to hash\r\n * @returns {!string} The resulting hash\r\n */\r\nconst sha1 = function (str) {\r\n const utf8Bytes = stringToByteArray(str);\r\n const sha1 = new Sha1();\r\n sha1.update(utf8Bytes);\r\n const sha1Bytes = sha1.digest();\r\n return base64.encodeByteArray(sha1Bytes);\r\n};\r\nconst buildLogMessage_ = function (...varArgs) {\r\n let message = '';\r\n for (let i = 0; i < varArgs.length; i++) {\r\n const arg = varArgs[i];\r\n if (Array.isArray(arg) ||\r\n (arg &&\r\n typeof arg === 'object' &&\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n typeof arg.length === 'number')) {\r\n message += buildLogMessage_.apply(null, arg);\r\n }\r\n else if (typeof arg === 'object') {\r\n message += stringify(arg);\r\n }\r\n else {\r\n message += arg;\r\n }\r\n message += ' ';\r\n }\r\n return message;\r\n};\r\n/**\r\n * Use this for all debug messages in Firebase.\r\n */\r\nlet logger = null;\r\n/**\r\n * Flag to check for log availability on first log message\r\n */\r\nlet firstLog_ = true;\r\n/**\r\n * The implementation of Firebase.enableLogging (defined here to break dependencies)\r\n * @param logger_ - A flag to turn on logging, or a custom logger\r\n * @param persistent - Whether or not to persist logging settings across refreshes\r\n */\r\nconst enableLogging$1 = function (logger_, persistent) {\r\n assert(!persistent || logger_ === true || logger_ === false, \"Can't turn on custom loggers persistently.\");\r\n if (logger_ === true) {\r\n logClient.logLevel = LogLevel.VERBOSE;\r\n logger = logClient.log.bind(logClient);\r\n if (persistent) {\r\n SessionStorage.set('logging_enabled', true);\r\n }\r\n }\r\n else if (typeof logger_ === 'function') {\r\n logger = logger_;\r\n }\r\n else {\r\n logger = null;\r\n SessionStorage.remove('logging_enabled');\r\n }\r\n};\r\nconst log = function (...varArgs) {\r\n if (firstLog_ === true) {\r\n firstLog_ = false;\r\n if (logger === null && SessionStorage.get('logging_enabled') === true) {\r\n enableLogging$1(true);\r\n }\r\n }\r\n if (logger) {\r\n const message = buildLogMessage_.apply(null, varArgs);\r\n logger(message);\r\n }\r\n};\r\nconst logWrapper = function (prefix) {\r\n return function (...varArgs) {\r\n log(prefix, ...varArgs);\r\n };\r\n};\r\nconst error = function (...varArgs) {\r\n const message = 'FIREBASE INTERNAL ERROR: ' + buildLogMessage_(...varArgs);\r\n logClient.error(message);\r\n};\r\nconst fatal = function (...varArgs) {\r\n const message = `FIREBASE FATAL ERROR: ${buildLogMessage_(...varArgs)}`;\r\n logClient.error(message);\r\n throw new Error(message);\r\n};\r\nconst warn = function (...varArgs) {\r\n const message = 'FIREBASE WARNING: ' + buildLogMessage_(...varArgs);\r\n logClient.warn(message);\r\n};\r\n/**\r\n * Logs a warning if the containing page uses https. Called when a call to new Firebase\r\n * does not use https.\r\n */\r\nconst warnIfPageIsSecure = function () {\r\n // Be very careful accessing browser globals. Who knows what may or may not exist.\r\n if (typeof window !== 'undefined' &&\r\n window.location &&\r\n window.location.protocol &&\r\n window.location.protocol.indexOf('https:') !== -1) {\r\n warn('Insecure Firebase access from a secure page. ' +\r\n 'Please use https in calls to new Firebase().');\r\n }\r\n};\r\n/**\r\n * Returns true if data is NaN, or +/- Infinity.\r\n */\r\nconst isInvalidJSONNumber = function (data) {\r\n return (typeof data === 'number' &&\r\n (data !== data || // NaN\r\n data === Number.POSITIVE_INFINITY ||\r\n data === Number.NEGATIVE_INFINITY));\r\n};\r\nconst executeWhenDOMReady = function (fn) {\r\n if (isNodeSdk() || document.readyState === 'complete') {\r\n fn();\r\n }\r\n else {\r\n // Modeled after jQuery. Try DOMContentLoaded and onreadystatechange (which\r\n // fire before onload), but fall back to onload.\r\n let called = false;\r\n const wrappedFn = function () {\r\n if (!document.body) {\r\n setTimeout(wrappedFn, Math.floor(10));\r\n return;\r\n }\r\n if (!called) {\r\n called = true;\r\n fn();\r\n }\r\n };\r\n if (document.addEventListener) {\r\n document.addEventListener('DOMContentLoaded', wrappedFn, false);\r\n // fallback to onload.\r\n window.addEventListener('load', wrappedFn, false);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }\r\n else if (document.attachEvent) {\r\n // IE.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n document.attachEvent('onreadystatechange', () => {\r\n if (document.readyState === 'complete') {\r\n wrappedFn();\r\n }\r\n });\r\n // fallback to onload.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n window.attachEvent('onload', wrappedFn);\r\n // jQuery has an extra hack for IE that we could employ (based on\r\n // http://javascript.nwbox.com/IEContentLoaded/) But it looks really old.\r\n // I'm hoping we don't need it.\r\n }\r\n }\r\n};\r\n/**\r\n * Minimum key name. Invalid for actual data, used as a marker to sort before any valid names\r\n */\r\nconst MIN_NAME = '[MIN_NAME]';\r\n/**\r\n * Maximum key name. Invalid for actual data, used as a marker to sort above any valid names\r\n */\r\nconst MAX_NAME = '[MAX_NAME]';\r\n/**\r\n * Compares valid Firebase key names, plus min and max name\r\n */\r\nconst nameCompare = function (a, b) {\r\n if (a === b) {\r\n return 0;\r\n }\r\n else if (a === MIN_NAME || b === MAX_NAME) {\r\n return -1;\r\n }\r\n else if (b === MIN_NAME || a === MAX_NAME) {\r\n return 1;\r\n }\r\n else {\r\n const aAsInt = tryParseInt(a), bAsInt = tryParseInt(b);\r\n if (aAsInt !== null) {\r\n if (bAsInt !== null) {\r\n return aAsInt - bAsInt === 0 ? a.length - b.length : aAsInt - bAsInt;\r\n }\r\n else {\r\n return -1;\r\n }\r\n }\r\n else if (bAsInt !== null) {\r\n return 1;\r\n }\r\n else {\r\n return a < b ? -1 : 1;\r\n }\r\n }\r\n};\r\n/**\r\n * @returns {!number} comparison result.\r\n */\r\nconst stringCompare = function (a, b) {\r\n if (a === b) {\r\n return 0;\r\n }\r\n else if (a < b) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n};\r\nconst requireKey = function (key, obj) {\r\n if (obj && key in obj) {\r\n return obj[key];\r\n }\r\n else {\r\n throw new Error('Missing required key (' + key + ') in object: ' + stringify(obj));\r\n }\r\n};\r\nconst ObjectToUniqueKey = function (obj) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return stringify(obj);\r\n }\r\n const keys = [];\r\n // eslint-disable-next-line guard-for-in\r\n for (const k in obj) {\r\n keys.push(k);\r\n }\r\n // Export as json, but with the keys sorted.\r\n keys.sort();\r\n let key = '{';\r\n for (let i = 0; i < keys.length; i++) {\r\n if (i !== 0) {\r\n key += ',';\r\n }\r\n key += stringify(keys[i]);\r\n key += ':';\r\n key += ObjectToUniqueKey(obj[keys[i]]);\r\n }\r\n key += '}';\r\n return key;\r\n};\r\n/**\r\n * Splits a string into a number of smaller segments of maximum size\r\n * @param str - The string\r\n * @param segsize - The maximum number of chars in the string.\r\n * @returns The string, split into appropriately-sized chunks\r\n */\r\nconst splitStringBySize = function (str, segsize) {\r\n const len = str.length;\r\n if (len <= segsize) {\r\n return [str];\r\n }\r\n const dataSegs = [];\r\n for (let c = 0; c < len; c += segsize) {\r\n if (c + segsize > len) {\r\n dataSegs.push(str.substring(c, len));\r\n }\r\n else {\r\n dataSegs.push(str.substring(c, c + segsize));\r\n }\r\n }\r\n return dataSegs;\r\n};\r\n/**\r\n * Apply a function to each (key, value) pair in an object or\r\n * apply a function to each (index, value) pair in an array\r\n * @param obj - The object or array to iterate over\r\n * @param fn - The function to apply\r\n */\r\nfunction each(obj, fn) {\r\n for (const key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n fn(key, obj[key]);\r\n }\r\n }\r\n}\r\n/**\r\n * Borrowed from http://hg.secondlife.com/llsd/src/tip/js/typedarray.js (MIT License)\r\n * I made one modification at the end and removed the NaN / Infinity\r\n * handling (since it seemed broken [caused an overflow] and we don't need it). See MJL comments.\r\n * @param v - A double\r\n *\r\n */\r\nconst doubleToIEEE754String = function (v) {\r\n assert(!isInvalidJSONNumber(v), 'Invalid JSON number'); // MJL\r\n const ebits = 11, fbits = 52;\r\n const bias = (1 << (ebits - 1)) - 1;\r\n let s, e, f, ln, i;\r\n // Compute sign, exponent, fraction\r\n // Skip NaN / Infinity handling --MJL.\r\n if (v === 0) {\r\n e = 0;\r\n f = 0;\r\n s = 1 / v === -Infinity ? 1 : 0;\r\n }\r\n else {\r\n s = v < 0;\r\n v = Math.abs(v);\r\n if (v >= Math.pow(2, 1 - bias)) {\r\n // Normalized\r\n ln = Math.min(Math.floor(Math.log(v) / Math.LN2), bias);\r\n e = ln + bias;\r\n f = Math.round(v * Math.pow(2, fbits - ln) - Math.pow(2, fbits));\r\n }\r\n else {\r\n // Denormalized\r\n e = 0;\r\n f = Math.round(v / Math.pow(2, 1 - bias - fbits));\r\n }\r\n }\r\n // Pack sign, exponent, fraction\r\n const bits = [];\r\n for (i = fbits; i; i -= 1) {\r\n bits.push(f % 2 ? 1 : 0);\r\n f = Math.floor(f / 2);\r\n }\r\n for (i = ebits; i; i -= 1) {\r\n bits.push(e % 2 ? 1 : 0);\r\n e = Math.floor(e / 2);\r\n }\r\n bits.push(s ? 1 : 0);\r\n bits.reverse();\r\n const str = bits.join('');\r\n // Return the data as a hex string. --MJL\r\n let hexByteString = '';\r\n for (i = 0; i < 64; i += 8) {\r\n let hexByte = parseInt(str.substr(i, 8), 2).toString(16);\r\n if (hexByte.length === 1) {\r\n hexByte = '0' + hexByte;\r\n }\r\n hexByteString = hexByteString + hexByte;\r\n }\r\n return hexByteString.toLowerCase();\r\n};\r\n/**\r\n * Used to detect if we're in a Chrome content script (which executes in an\r\n * isolated environment where long-polling doesn't work).\r\n */\r\nconst isChromeExtensionContentScript = function () {\r\n return !!(typeof window === 'object' &&\r\n window['chrome'] &&\r\n window['chrome']['extension'] &&\r\n !/^chrome/.test(window.location.href));\r\n};\r\n/**\r\n * Used to detect if we're in a Windows 8 Store app.\r\n */\r\nconst isWindowsStoreApp = function () {\r\n // Check for the presence of a couple WinRT globals\r\n return typeof Windows === 'object' && typeof Windows.UI === 'object';\r\n};\r\n/**\r\n * Converts a server error code to a Javascript Error\r\n */\r\nfunction errorForServerCode(code, query) {\r\n let reason = 'Unknown Error';\r\n if (code === 'too_big') {\r\n reason =\r\n 'The data requested exceeds the maximum size ' +\r\n 'that can be accessed with a single request.';\r\n }\r\n else if (code === 'permission_denied') {\r\n reason = \"Client doesn't have permission to access the desired data.\";\r\n }\r\n else if (code === 'unavailable') {\r\n reason = 'The service is unavailable';\r\n }\r\n const error = new Error(code + ' at ' + query._path.toString() + ': ' + reason);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error.code = code.toUpperCase();\r\n return error;\r\n}\r\n/**\r\n * Used to test for integer-looking strings\r\n */\r\nconst INTEGER_REGEXP_ = new RegExp('^-?(0*)\\\\d{1,10}$');\r\n/**\r\n * For use in keys, the minimum possible 32-bit integer.\r\n */\r\nconst INTEGER_32_MIN = -2147483648;\r\n/**\r\n * For use in kyes, the maximum possible 32-bit integer.\r\n */\r\nconst INTEGER_32_MAX = 2147483647;\r\n/**\r\n * If the string contains a 32-bit integer, return it. Else return null.\r\n */\r\nconst tryParseInt = function (str) {\r\n if (INTEGER_REGEXP_.test(str)) {\r\n const intVal = Number(str);\r\n if (intVal >= INTEGER_32_MIN && intVal <= INTEGER_32_MAX) {\r\n return intVal;\r\n }\r\n }\r\n return null;\r\n};\r\n/**\r\n * Helper to run some code but catch any exceptions and re-throw them later.\r\n * Useful for preventing user callbacks from breaking internal code.\r\n *\r\n * Re-throwing the exception from a setTimeout is a little evil, but it's very\r\n * convenient (we don't have to try to figure out when is a safe point to\r\n * re-throw it), and the behavior seems reasonable:\r\n *\r\n * * If you aren't pausing on exceptions, you get an error in the console with\r\n * the correct stack trace.\r\n * * If you're pausing on all exceptions, the debugger will pause on your\r\n * exception and then again when we rethrow it.\r\n * * If you're only pausing on uncaught exceptions, the debugger will only pause\r\n * on us re-throwing it.\r\n *\r\n * @param fn - The code to guard.\r\n */\r\nconst exceptionGuard = function (fn) {\r\n try {\r\n fn();\r\n }\r\n catch (e) {\r\n // Re-throw exception when it's safe.\r\n setTimeout(() => {\r\n // It used to be that \"throw e\" would result in a good console error with\r\n // relevant context, but as of Chrome 39, you just get the firebase.js\r\n // file/line number where we re-throw it, which is useless. So we log\r\n // e.stack explicitly.\r\n const stack = e.stack || '';\r\n warn('Exception was thrown by user callback.', stack);\r\n throw e;\r\n }, Math.floor(0));\r\n }\r\n};\r\n/**\r\n * @returns {boolean} true if we think we're currently being crawled.\r\n */\r\nconst beingCrawled = function () {\r\n const userAgent = (typeof window === 'object' &&\r\n window['navigator'] &&\r\n window['navigator']['userAgent']) ||\r\n '';\r\n // For now we whitelist the most popular crawlers. We should refine this to be the set of crawlers we\r\n // believe to support JavaScript/AJAX rendering.\r\n // NOTE: Google Webmaster Tools doesn't really belong, but their \"This is how a visitor to your website\r\n // would have seen the page\" is flaky if we don't treat it as a crawler.\r\n return (userAgent.search(/googlebot|google webmaster tools|bingbot|yahoo! slurp|baiduspider|yandexbot|duckduckbot/i) >= 0);\r\n};\r\n/**\r\n * Same as setTimeout() except on Node.JS it will /not/ prevent the process from exiting.\r\n *\r\n * It is removed with clearTimeout() as normal.\r\n *\r\n * @param fn - Function to run.\r\n * @param time - Milliseconds to wait before running.\r\n * @returns The setTimeout() return value.\r\n */\r\nconst setTimeoutNonBlocking = function (fn, time) {\r\n const timeout = setTimeout(fn, time);\r\n // Note: at the time of this comment, unrefTimer is under the unstable set of APIs. Run with --unstable to enable the API.\r\n if (typeof timeout === 'number' &&\r\n // @ts-ignore Is only defined in Deno environments.\r\n typeof Deno !== 'undefined' &&\r\n // @ts-ignore Deno and unrefTimer are only defined in Deno environments.\r\n Deno['unrefTimer']) {\r\n // @ts-ignore Deno and unrefTimer are only defined in Deno environments.\r\n Deno.unrefTimer(timeout);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }\r\n else if (typeof timeout === 'object' && timeout['unref']) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n timeout['unref']();\r\n }\r\n return timeout;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Abstraction around AppCheck's token fetching capabilities.\r\n */\r\nclass AppCheckTokenProvider {\r\n constructor(appName_, appCheckProvider) {\r\n this.appName_ = appName_;\r\n this.appCheckProvider = appCheckProvider;\r\n this.appCheck = appCheckProvider === null || appCheckProvider === void 0 ? void 0 : appCheckProvider.getImmediate({ optional: true });\r\n if (!this.appCheck) {\r\n appCheckProvider === null || appCheckProvider === void 0 ? void 0 : appCheckProvider.get().then(appCheck => (this.appCheck = appCheck));\r\n }\r\n }\r\n getToken(forceRefresh) {\r\n if (!this.appCheck) {\r\n return new Promise((resolve, reject) => {\r\n // Support delayed initialization of FirebaseAppCheck. This allows our\r\n // customers to initialize the RTDB SDK before initializing Firebase\r\n // AppCheck and ensures that all requests are authenticated if a token\r\n // becomes available before the timoeout below expires.\r\n setTimeout(() => {\r\n if (this.appCheck) {\r\n this.getToken(forceRefresh).then(resolve, reject);\r\n }\r\n else {\r\n resolve(null);\r\n }\r\n }, 0);\r\n });\r\n }\r\n return this.appCheck.getToken(forceRefresh);\r\n }\r\n addTokenChangeListener(listener) {\r\n var _a;\r\n (_a = this.appCheckProvider) === null || _a === void 0 ? void 0 : _a.get().then(appCheck => appCheck.addTokenListener(listener));\r\n }\r\n notifyForInvalidToken() {\r\n warn(`Provided AppCheck credentials for the app named \"${this.appName_}\" ` +\r\n 'are invalid. This usually indicates your app was not initialized correctly.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Abstraction around FirebaseApp's token fetching capabilities.\r\n */\r\nclass FirebaseAuthTokenProvider {\r\n constructor(appName_, firebaseOptions_, authProvider_) {\r\n this.appName_ = appName_;\r\n this.firebaseOptions_ = firebaseOptions_;\r\n this.authProvider_ = authProvider_;\r\n this.auth_ = null;\r\n this.auth_ = authProvider_.getImmediate({ optional: true });\r\n if (!this.auth_) {\r\n authProvider_.onInit(auth => (this.auth_ = auth));\r\n }\r\n }\r\n getToken(forceRefresh) {\r\n if (!this.auth_) {\r\n return new Promise((resolve, reject) => {\r\n // Support delayed initialization of FirebaseAuth. This allows our\r\n // customers to initialize the RTDB SDK before initializing Firebase\r\n // Auth and ensures that all requests are authenticated if a token\r\n // becomes available before the timoeout below expires.\r\n setTimeout(() => {\r\n if (this.auth_) {\r\n this.getToken(forceRefresh).then(resolve, reject);\r\n }\r\n else {\r\n resolve(null);\r\n }\r\n }, 0);\r\n });\r\n }\r\n return this.auth_.getToken(forceRefresh).catch(error => {\r\n // TODO: Need to figure out all the cases this is raised and whether\r\n // this makes sense.\r\n if (error && error.code === 'auth/token-not-initialized') {\r\n log('Got auth/token-not-initialized error. Treating as null token.');\r\n return null;\r\n }\r\n else {\r\n return Promise.reject(error);\r\n }\r\n });\r\n }\r\n addTokenChangeListener(listener) {\r\n // TODO: We might want to wrap the listener and call it with no args to\r\n // avoid a leaky abstraction, but that makes removing the listener harder.\r\n if (this.auth_) {\r\n this.auth_.addAuthTokenListener(listener);\r\n }\r\n else {\r\n this.authProvider_\r\n .get()\r\n .then(auth => auth.addAuthTokenListener(listener));\r\n }\r\n }\r\n removeTokenChangeListener(listener) {\r\n this.authProvider_\r\n .get()\r\n .then(auth => auth.removeAuthTokenListener(listener));\r\n }\r\n notifyForInvalidToken() {\r\n let errorMessage = 'Provided authentication credentials for the app named \"' +\r\n this.appName_ +\r\n '\" are invalid. This usually indicates your app was not ' +\r\n 'initialized correctly. ';\r\n if ('credential' in this.firebaseOptions_) {\r\n errorMessage +=\r\n 'Make sure the \"credential\" property provided to initializeApp() ' +\r\n 'is authorized to access the specified \"databaseURL\" and is from the correct ' +\r\n 'project.';\r\n }\r\n else if ('serviceAccount' in this.firebaseOptions_) {\r\n errorMessage +=\r\n 'Make sure the \"serviceAccount\" property provided to initializeApp() ' +\r\n 'is authorized to access the specified \"databaseURL\" and is from the correct ' +\r\n 'project.';\r\n }\r\n else {\r\n errorMessage +=\r\n 'Make sure the \"apiKey\" and \"databaseURL\" properties provided to ' +\r\n 'initializeApp() match the values provided for your app at ' +\r\n 'https://console.firebase.google.com/.';\r\n }\r\n warn(errorMessage);\r\n }\r\n}\r\n/* AuthTokenProvider that supplies a constant token. Used by Admin SDK or mockUserToken with emulators. */\r\nclass EmulatorTokenProvider {\r\n constructor(accessToken) {\r\n this.accessToken = accessToken;\r\n }\r\n getToken(forceRefresh) {\r\n return Promise.resolve({\r\n accessToken: this.accessToken\r\n });\r\n }\r\n addTokenChangeListener(listener) {\r\n // Invoke the listener immediately to match the behavior in Firebase Auth\r\n // (see packages/auth/src/auth.js#L1807)\r\n listener(this.accessToken);\r\n }\r\n removeTokenChangeListener(listener) { }\r\n notifyForInvalidToken() { }\r\n}\r\n/** A string that is treated as an admin access token by the RTDB emulator. Used by Admin SDK. */\r\nEmulatorTokenProvider.OWNER = 'owner';\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PROTOCOL_VERSION = '5';\r\nconst VERSION_PARAM = 'v';\r\nconst TRANSPORT_SESSION_PARAM = 's';\r\nconst REFERER_PARAM = 'r';\r\nconst FORGE_REF = 'f';\r\n// Matches console.firebase.google.com, firebase-console-*.corp.google.com and\r\n// firebase.corp.google.com\r\nconst FORGE_DOMAIN_RE = /(console\\.firebase|firebase-console-\\w+\\.corp|firebase\\.corp)\\.google\\.com/;\r\nconst LAST_SESSION_PARAM = 'ls';\r\nconst APPLICATION_ID_PARAM = 'p';\r\nconst APP_CHECK_TOKEN_PARAM = 'ac';\r\nconst WEBSOCKET = 'websocket';\r\nconst LONG_POLLING = 'long_polling';\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A class that holds metadata about a Repo object\r\n */\r\nclass RepoInfo {\r\n /**\r\n * @param host - Hostname portion of the url for the repo\r\n * @param secure - Whether or not this repo is accessed over ssl\r\n * @param namespace - The namespace represented by the repo\r\n * @param webSocketOnly - Whether to prefer websockets over all other transports (used by Nest).\r\n * @param nodeAdmin - Whether this instance uses Admin SDK credentials\r\n * @param persistenceKey - Override the default session persistence storage key\r\n */\r\n constructor(host, secure, namespace, webSocketOnly, nodeAdmin = false, persistenceKey = '', includeNamespaceInQueryParams = false, isUsingEmulator = false) {\r\n this.secure = secure;\r\n this.namespace = namespace;\r\n this.webSocketOnly = webSocketOnly;\r\n this.nodeAdmin = nodeAdmin;\r\n this.persistenceKey = persistenceKey;\r\n this.includeNamespaceInQueryParams = includeNamespaceInQueryParams;\r\n this.isUsingEmulator = isUsingEmulator;\r\n this._host = host.toLowerCase();\r\n this._domain = this._host.substr(this._host.indexOf('.') + 1);\r\n this.internalHost =\r\n PersistentStorage.get('host:' + host) || this._host;\r\n }\r\n isCacheableHost() {\r\n return this.internalHost.substr(0, 2) === 's-';\r\n }\r\n isCustomHost() {\r\n return (this._domain !== 'firebaseio.com' &&\r\n this._domain !== 'firebaseio-demo.com');\r\n }\r\n get host() {\r\n return this._host;\r\n }\r\n set host(newHost) {\r\n if (newHost !== this.internalHost) {\r\n this.internalHost = newHost;\r\n if (this.isCacheableHost()) {\r\n PersistentStorage.set('host:' + this._host, this.internalHost);\r\n }\r\n }\r\n }\r\n toString() {\r\n let str = this.toURLString();\r\n if (this.persistenceKey) {\r\n str += '<' + this.persistenceKey + '>';\r\n }\r\n return str;\r\n }\r\n toURLString() {\r\n const protocol = this.secure ? 'https://' : 'http://';\r\n const query = this.includeNamespaceInQueryParams\r\n ? `?ns=${this.namespace}`\r\n : '';\r\n return `${protocol}${this.host}/${query}`;\r\n }\r\n}\r\nfunction repoInfoNeedsQueryParam(repoInfo) {\r\n return (repoInfo.host !== repoInfo.internalHost ||\r\n repoInfo.isCustomHost() ||\r\n repoInfo.includeNamespaceInQueryParams);\r\n}\r\n/**\r\n * Returns the websocket URL for this repo\r\n * @param repoInfo - RepoInfo object\r\n * @param type - of connection\r\n * @param params - list\r\n * @returns The URL for this repo\r\n */\r\nfunction repoInfoConnectionURL(repoInfo, type, params) {\r\n assert(typeof type === 'string', 'typeof type must == string');\r\n assert(typeof params === 'object', 'typeof params must == object');\r\n let connURL;\r\n if (type === WEBSOCKET) {\r\n connURL =\r\n (repoInfo.secure ? 'wss://' : 'ws://') + repoInfo.internalHost + '/.ws?';\r\n }\r\n else if (type === LONG_POLLING) {\r\n connURL =\r\n (repoInfo.secure ? 'https://' : 'http://') +\r\n repoInfo.internalHost +\r\n '/.lp?';\r\n }\r\n else {\r\n throw new Error('Unknown connection type: ' + type);\r\n }\r\n if (repoInfoNeedsQueryParam(repoInfo)) {\r\n params['ns'] = repoInfo.namespace;\r\n }\r\n const pairs = [];\r\n each(params, (key, value) => {\r\n pairs.push(key + '=' + value);\r\n });\r\n return connURL + pairs.join('&');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Tracks a collection of stats.\r\n */\r\nclass StatsCollection {\r\n constructor() {\r\n this.counters_ = {};\r\n }\r\n incrementCounter(name, amount = 1) {\r\n if (!contains(this.counters_, name)) {\r\n this.counters_[name] = 0;\r\n }\r\n this.counters_[name] += amount;\r\n }\r\n get() {\r\n return deepCopy(this.counters_);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst collections = {};\r\nconst reporters = {};\r\nfunction statsManagerGetCollection(repoInfo) {\r\n const hashString = repoInfo.toString();\r\n if (!collections[hashString]) {\r\n collections[hashString] = new StatsCollection();\r\n }\r\n return collections[hashString];\r\n}\r\nfunction statsManagerGetOrCreateReporter(repoInfo, creatorFunction) {\r\n const hashString = repoInfo.toString();\r\n if (!reporters[hashString]) {\r\n reporters[hashString] = creatorFunction();\r\n }\r\n return reporters[hashString];\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class ensures the packets from the server arrive in order\r\n * This class takes data from the server and ensures it gets passed into the callbacks in order.\r\n */\r\nclass PacketReceiver {\r\n /**\r\n * @param onMessage_\r\n */\r\n constructor(onMessage_) {\r\n this.onMessage_ = onMessage_;\r\n this.pendingResponses = [];\r\n this.currentResponseNum = 0;\r\n this.closeAfterResponse = -1;\r\n this.onClose = null;\r\n }\r\n closeAfter(responseNum, callback) {\r\n this.closeAfterResponse = responseNum;\r\n this.onClose = callback;\r\n if (this.closeAfterResponse < this.currentResponseNum) {\r\n this.onClose();\r\n this.onClose = null;\r\n }\r\n }\r\n /**\r\n * Each message from the server comes with a response number, and an array of data. The responseNumber\r\n * allows us to ensure that we process them in the right order, since we can't be guaranteed that all\r\n * browsers will respond in the same order as the requests we sent\r\n */\r\n handleResponse(requestNum, data) {\r\n this.pendingResponses[requestNum] = data;\r\n while (this.pendingResponses[this.currentResponseNum]) {\r\n const toProcess = this.pendingResponses[this.currentResponseNum];\r\n delete this.pendingResponses[this.currentResponseNum];\r\n for (let i = 0; i < toProcess.length; ++i) {\r\n if (toProcess[i]) {\r\n exceptionGuard(() => {\r\n this.onMessage_(toProcess[i]);\r\n });\r\n }\r\n }\r\n if (this.currentResponseNum === this.closeAfterResponse) {\r\n if (this.onClose) {\r\n this.onClose();\r\n this.onClose = null;\r\n }\r\n break;\r\n }\r\n this.currentResponseNum++;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// URL query parameters associated with longpolling\r\nconst FIREBASE_LONGPOLL_START_PARAM = 'start';\r\nconst FIREBASE_LONGPOLL_CLOSE_COMMAND = 'close';\r\nconst FIREBASE_LONGPOLL_COMMAND_CB_NAME = 'pLPCommand';\r\nconst FIREBASE_LONGPOLL_DATA_CB_NAME = 'pRTLPCB';\r\nconst FIREBASE_LONGPOLL_ID_PARAM = 'id';\r\nconst FIREBASE_LONGPOLL_PW_PARAM = 'pw';\r\nconst FIREBASE_LONGPOLL_SERIAL_PARAM = 'ser';\r\nconst FIREBASE_LONGPOLL_CALLBACK_ID_PARAM = 'cb';\r\nconst FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM = 'seg';\r\nconst FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET = 'ts';\r\nconst FIREBASE_LONGPOLL_DATA_PARAM = 'd';\r\nconst FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM = 'dframe';\r\n//Data size constants.\r\n//TODO: Perf: the maximum length actually differs from browser to browser.\r\n// We should check what browser we're on and set accordingly.\r\nconst MAX_URL_DATA_SIZE = 1870;\r\nconst SEG_HEADER_SIZE = 30; //ie: &seg=8299234&ts=982389123&d=\r\nconst MAX_PAYLOAD_SIZE = MAX_URL_DATA_SIZE - SEG_HEADER_SIZE;\r\n/**\r\n * Keepalive period\r\n * send a fresh request at minimum every 25 seconds. Opera has a maximum request\r\n * length of 30 seconds that we can't exceed.\r\n */\r\nconst KEEPALIVE_REQUEST_INTERVAL = 25000;\r\n/**\r\n * How long to wait before aborting a long-polling connection attempt.\r\n */\r\nconst LP_CONNECT_TIMEOUT = 30000;\r\n/**\r\n * This class manages a single long-polling connection.\r\n */\r\nclass BrowserPollConnection {\r\n /**\r\n * @param connId An identifier for this connection, used for logging\r\n * @param repoInfo The info for the endpoint to send data to.\r\n * @param applicationId The Firebase App ID for this project.\r\n * @param appCheckToken The AppCheck token for this client.\r\n * @param authToken The AuthToken to use for this connection.\r\n * @param transportSessionId Optional transportSessionid if we are\r\n * reconnecting for an existing transport session\r\n * @param lastSessionId Optional lastSessionId if the PersistentConnection has\r\n * already created a connection previously\r\n */\r\n constructor(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {\r\n this.connId = connId;\r\n this.repoInfo = repoInfo;\r\n this.applicationId = applicationId;\r\n this.appCheckToken = appCheckToken;\r\n this.authToken = authToken;\r\n this.transportSessionId = transportSessionId;\r\n this.lastSessionId = lastSessionId;\r\n this.bytesSent = 0;\r\n this.bytesReceived = 0;\r\n this.everConnected_ = false;\r\n this.log_ = logWrapper(connId);\r\n this.stats_ = statsManagerGetCollection(repoInfo);\r\n this.urlFn = (params) => {\r\n // Always add the token if we have one.\r\n if (this.appCheckToken) {\r\n params[APP_CHECK_TOKEN_PARAM] = this.appCheckToken;\r\n }\r\n return repoInfoConnectionURL(repoInfo, LONG_POLLING, params);\r\n };\r\n }\r\n /**\r\n * @param onMessage - Callback when messages arrive\r\n * @param onDisconnect - Callback with connection lost.\r\n */\r\n open(onMessage, onDisconnect) {\r\n this.curSegmentNum = 0;\r\n this.onDisconnect_ = onDisconnect;\r\n this.myPacketOrderer = new PacketReceiver(onMessage);\r\n this.isClosed_ = false;\r\n this.connectTimeoutTimer_ = setTimeout(() => {\r\n this.log_('Timed out trying to connect.');\r\n // Make sure we clear the host cache\r\n this.onClosed_();\r\n this.connectTimeoutTimer_ = null;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(LP_CONNECT_TIMEOUT));\r\n // Ensure we delay the creation of the iframe until the DOM is loaded.\r\n executeWhenDOMReady(() => {\r\n if (this.isClosed_) {\r\n return;\r\n }\r\n //Set up a callback that gets triggered once a connection is set up.\r\n this.scriptTagHolder = new FirebaseIFrameScriptHolder((...args) => {\r\n const [command, arg1, arg2, arg3, arg4] = args;\r\n this.incrementIncomingBytes_(args);\r\n if (!this.scriptTagHolder) {\r\n return; // we closed the connection.\r\n }\r\n if (this.connectTimeoutTimer_) {\r\n clearTimeout(this.connectTimeoutTimer_);\r\n this.connectTimeoutTimer_ = null;\r\n }\r\n this.everConnected_ = true;\r\n if (command === FIREBASE_LONGPOLL_START_PARAM) {\r\n this.id = arg1;\r\n this.password = arg2;\r\n }\r\n else if (command === FIREBASE_LONGPOLL_CLOSE_COMMAND) {\r\n // Don't clear the host cache. We got a response from the server, so we know it's reachable\r\n if (arg1) {\r\n // We aren't expecting any more data (other than what the server's already in the process of sending us\r\n // through our already open polls), so don't send any more.\r\n this.scriptTagHolder.sendNewPolls = false;\r\n // arg1 in this case is the last response number sent by the server. We should try to receive\r\n // all of the responses up to this one before closing\r\n this.myPacketOrderer.closeAfter(arg1, () => {\r\n this.onClosed_();\r\n });\r\n }\r\n else {\r\n this.onClosed_();\r\n }\r\n }\r\n else {\r\n throw new Error('Unrecognized command received: ' + command);\r\n }\r\n }, (...args) => {\r\n const [pN, data] = args;\r\n this.incrementIncomingBytes_(args);\r\n this.myPacketOrderer.handleResponse(pN, data);\r\n }, () => {\r\n this.onClosed_();\r\n }, this.urlFn);\r\n //Send the initial request to connect. The serial number is simply to keep the browser from pulling previous results\r\n //from cache.\r\n const urlParams = {};\r\n urlParams[FIREBASE_LONGPOLL_START_PARAM] = 't';\r\n urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = Math.floor(Math.random() * 100000000);\r\n if (this.scriptTagHolder.uniqueCallbackIdentifier) {\r\n urlParams[FIREBASE_LONGPOLL_CALLBACK_ID_PARAM] =\r\n this.scriptTagHolder.uniqueCallbackIdentifier;\r\n }\r\n urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n if (this.transportSessionId) {\r\n urlParams[TRANSPORT_SESSION_PARAM] = this.transportSessionId;\r\n }\r\n if (this.lastSessionId) {\r\n urlParams[LAST_SESSION_PARAM] = this.lastSessionId;\r\n }\r\n if (this.applicationId) {\r\n urlParams[APPLICATION_ID_PARAM] = this.applicationId;\r\n }\r\n if (this.appCheckToken) {\r\n urlParams[APP_CHECK_TOKEN_PARAM] = this.appCheckToken;\r\n }\r\n if (typeof location !== 'undefined' &&\r\n location.hostname &&\r\n FORGE_DOMAIN_RE.test(location.hostname)) {\r\n urlParams[REFERER_PARAM] = FORGE_REF;\r\n }\r\n const connectURL = this.urlFn(urlParams);\r\n this.log_('Connecting via long-poll to ' + connectURL);\r\n this.scriptTagHolder.addTag(connectURL, () => {\r\n /* do nothing */\r\n });\r\n });\r\n }\r\n /**\r\n * Call this when a handshake has completed successfully and we want to consider the connection established\r\n */\r\n start() {\r\n this.scriptTagHolder.startLongPoll(this.id, this.password);\r\n this.addDisconnectPingFrame(this.id, this.password);\r\n }\r\n /**\r\n * Forces long polling to be considered as a potential transport\r\n */\r\n static forceAllow() {\r\n BrowserPollConnection.forceAllow_ = true;\r\n }\r\n /**\r\n * Forces longpolling to not be considered as a potential transport\r\n */\r\n static forceDisallow() {\r\n BrowserPollConnection.forceDisallow_ = true;\r\n }\r\n // Static method, use string literal so it can be accessed in a generic way\r\n static isAvailable() {\r\n if (isNodeSdk()) {\r\n return false;\r\n }\r\n else if (BrowserPollConnection.forceAllow_) {\r\n return true;\r\n }\r\n else {\r\n // NOTE: In React-Native there's normally no 'document', but if you debug a React-Native app in\r\n // the Chrome debugger, 'document' is defined, but document.createElement is null (2015/06/08).\r\n return (!BrowserPollConnection.forceDisallow_ &&\r\n typeof document !== 'undefined' &&\r\n document.createElement != null &&\r\n !isChromeExtensionContentScript() &&\r\n !isWindowsStoreApp());\r\n }\r\n }\r\n /**\r\n * No-op for polling\r\n */\r\n markConnectionHealthy() { }\r\n /**\r\n * Stops polling and cleans up the iframe\r\n */\r\n shutdown_() {\r\n this.isClosed_ = true;\r\n if (this.scriptTagHolder) {\r\n this.scriptTagHolder.close();\r\n this.scriptTagHolder = null;\r\n }\r\n //remove the disconnect frame, which will trigger an XHR call to the server to tell it we're leaving.\r\n if (this.myDisconnFrame) {\r\n document.body.removeChild(this.myDisconnFrame);\r\n this.myDisconnFrame = null;\r\n }\r\n if (this.connectTimeoutTimer_) {\r\n clearTimeout(this.connectTimeoutTimer_);\r\n this.connectTimeoutTimer_ = null;\r\n }\r\n }\r\n /**\r\n * Triggered when this transport is closed\r\n */\r\n onClosed_() {\r\n if (!this.isClosed_) {\r\n this.log_('Longpoll is closing itself');\r\n this.shutdown_();\r\n if (this.onDisconnect_) {\r\n this.onDisconnect_(this.everConnected_);\r\n this.onDisconnect_ = null;\r\n }\r\n }\r\n }\r\n /**\r\n * External-facing close handler. RealTime has requested we shut down. Kill our connection and tell the server\r\n * that we've left.\r\n */\r\n close() {\r\n if (!this.isClosed_) {\r\n this.log_('Longpoll is being closed.');\r\n this.shutdown_();\r\n }\r\n }\r\n /**\r\n * Send the JSON object down to the server. It will need to be stringified, base64 encoded, and then\r\n * broken into chunks (since URLs have a small maximum length).\r\n * @param data - The JSON data to transmit.\r\n */\r\n send(data) {\r\n const dataStr = stringify(data);\r\n this.bytesSent += dataStr.length;\r\n this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n //first, lets get the base64-encoded data\r\n const base64data = base64Encode(dataStr);\r\n //We can only fit a certain amount in each URL, so we need to split this request\r\n //up into multiple pieces if it doesn't fit in one request.\r\n const dataSegs = splitStringBySize(base64data, MAX_PAYLOAD_SIZE);\r\n //Enqueue each segment for transmission. We assign each chunk a sequential ID and a total number\r\n //of segments so that we can reassemble the packet on the server.\r\n for (let i = 0; i < dataSegs.length; i++) {\r\n this.scriptTagHolder.enqueueSegment(this.curSegmentNum, dataSegs.length, dataSegs[i]);\r\n this.curSegmentNum++;\r\n }\r\n }\r\n /**\r\n * This is how we notify the server that we're leaving.\r\n * We aren't able to send requests with DHTML on a window close event, but we can\r\n * trigger XHR requests in some browsers (everything but Opera basically).\r\n */\r\n addDisconnectPingFrame(id, pw) {\r\n if (isNodeSdk()) {\r\n return;\r\n }\r\n this.myDisconnFrame = document.createElement('iframe');\r\n const urlParams = {};\r\n urlParams[FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM] = 't';\r\n urlParams[FIREBASE_LONGPOLL_ID_PARAM] = id;\r\n urlParams[FIREBASE_LONGPOLL_PW_PARAM] = pw;\r\n this.myDisconnFrame.src = this.urlFn(urlParams);\r\n this.myDisconnFrame.style.display = 'none';\r\n document.body.appendChild(this.myDisconnFrame);\r\n }\r\n /**\r\n * Used to track the bytes received by this client\r\n */\r\n incrementIncomingBytes_(args) {\r\n // TODO: This is an annoying perf hit just to track the number of incoming bytes. Maybe it should be opt-in.\r\n const bytesReceived = stringify(args).length;\r\n this.bytesReceived += bytesReceived;\r\n this.stats_.incrementCounter('bytes_received', bytesReceived);\r\n }\r\n}\r\n/*********************************************************************************************\r\n * A wrapper around an iframe that is used as a long-polling script holder.\r\n *********************************************************************************************/\r\nclass FirebaseIFrameScriptHolder {\r\n /**\r\n * @param commandCB - The callback to be called when control commands are recevied from the server.\r\n * @param onMessageCB - The callback to be triggered when responses arrive from the server.\r\n * @param onDisconnect - The callback to be triggered when this tag holder is closed\r\n * @param urlFn - A function that provides the URL of the endpoint to send data to.\r\n */\r\n constructor(commandCB, onMessageCB, onDisconnect, urlFn) {\r\n this.onDisconnect = onDisconnect;\r\n this.urlFn = urlFn;\r\n //We maintain a count of all of the outstanding requests, because if we have too many active at once it can cause\r\n //problems in some browsers.\r\n this.outstandingRequests = new Set();\r\n //A queue of the pending segments waiting for transmission to the server.\r\n this.pendingSegs = [];\r\n //A serial number. We use this for two things:\r\n // 1) A way to ensure the browser doesn't cache responses to polls\r\n // 2) A way to make the server aware when long-polls arrive in a different order than we started them. The\r\n // server needs to release both polls in this case or it will cause problems in Opera since Opera can only execute\r\n // JSONP code in the order it was added to the iframe.\r\n this.currentSerial = Math.floor(Math.random() * 100000000);\r\n // This gets set to false when we're \"closing down\" the connection (e.g. we're switching transports but there's still\r\n // incoming data from the server that we're waiting for).\r\n this.sendNewPolls = true;\r\n if (!isNodeSdk()) {\r\n //Each script holder registers a couple of uniquely named callbacks with the window. These are called from the\r\n //iframes where we put the long-polling script tags. We have two callbacks:\r\n // 1) Command Callback - Triggered for control issues, like starting a connection.\r\n // 2) Message Callback - Triggered when new data arrives.\r\n this.uniqueCallbackIdentifier = LUIDGenerator();\r\n window[FIREBASE_LONGPOLL_COMMAND_CB_NAME + this.uniqueCallbackIdentifier] = commandCB;\r\n window[FIREBASE_LONGPOLL_DATA_CB_NAME + this.uniqueCallbackIdentifier] =\r\n onMessageCB;\r\n //Create an iframe for us to add script tags to.\r\n this.myIFrame = FirebaseIFrameScriptHolder.createIFrame_();\r\n // Set the iframe's contents.\r\n let script = '';\r\n // if we set a javascript url, it's IE and we need to set the document domain. The javascript url is sufficient\r\n // for ie9, but ie8 needs to do it again in the document itself.\r\n if (this.myIFrame.src &&\r\n this.myIFrame.src.substr(0, 'javascript:'.length) === 'javascript:') {\r\n const currentDomain = document.domain;\r\n script = '';\r\n }\r\n const iframeContents = '' + script + '';\r\n try {\r\n this.myIFrame.doc.open();\r\n this.myIFrame.doc.write(iframeContents);\r\n this.myIFrame.doc.close();\r\n }\r\n catch (e) {\r\n log('frame writing exception');\r\n if (e.stack) {\r\n log(e.stack);\r\n }\r\n log(e);\r\n }\r\n }\r\n else {\r\n this.commandCB = commandCB;\r\n this.onMessageCB = onMessageCB;\r\n }\r\n }\r\n /**\r\n * Each browser has its own funny way to handle iframes. Here we mush them all together into one object that I can\r\n * actually use.\r\n */\r\n static createIFrame_() {\r\n const iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n // This is necessary in order to initialize the document inside the iframe\r\n if (document.body) {\r\n document.body.appendChild(iframe);\r\n try {\r\n // If document.domain has been modified in IE, this will throw an error, and we need to set the\r\n // domain of the iframe's document manually. We can do this via a javascript: url as the src attribute\r\n // Also note that we must do this *after* the iframe has been appended to the page. Otherwise it doesn't work.\r\n const a = iframe.contentWindow.document;\r\n if (!a) {\r\n // Apologies for the log-spam, I need to do something to keep closure from optimizing out the assignment above.\r\n log('No IE domain setting required');\r\n }\r\n }\r\n catch (e) {\r\n const domain = document.domain;\r\n iframe.src =\r\n \"javascript:void((function(){document.open();document.domain='\" +\r\n domain +\r\n \"';document.close();})())\";\r\n }\r\n }\r\n else {\r\n // LongPollConnection attempts to delay initialization until the document is ready, so hopefully this\r\n // never gets hit.\r\n throw 'Document body has not initialized. Wait to initialize Firebase until after the document is ready.';\r\n }\r\n // Get the document of the iframe in a browser-specific way.\r\n if (iframe.contentDocument) {\r\n iframe.doc = iframe.contentDocument; // Firefox, Opera, Safari\r\n }\r\n else if (iframe.contentWindow) {\r\n iframe.doc = iframe.contentWindow.document; // Internet Explorer\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }\r\n else if (iframe.document) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n iframe.doc = iframe.document; //others?\r\n }\r\n return iframe;\r\n }\r\n /**\r\n * Cancel all outstanding queries and remove the frame.\r\n */\r\n close() {\r\n //Mark this iframe as dead, so no new requests are sent.\r\n this.alive = false;\r\n if (this.myIFrame) {\r\n //We have to actually remove all of the html inside this iframe before removing it from the\r\n //window, or IE will continue loading and executing the script tags we've already added, which\r\n //can lead to some errors being thrown. Setting textContent seems to be the safest way to do this.\r\n this.myIFrame.doc.body.textContent = '';\r\n setTimeout(() => {\r\n if (this.myIFrame !== null) {\r\n document.body.removeChild(this.myIFrame);\r\n this.myIFrame = null;\r\n }\r\n }, Math.floor(0));\r\n }\r\n // Protect from being called recursively.\r\n const onDisconnect = this.onDisconnect;\r\n if (onDisconnect) {\r\n this.onDisconnect = null;\r\n onDisconnect();\r\n }\r\n }\r\n /**\r\n * Actually start the long-polling session by adding the first script tag(s) to the iframe.\r\n * @param id - The ID of this connection\r\n * @param pw - The password for this connection\r\n */\r\n startLongPoll(id, pw) {\r\n this.myID = id;\r\n this.myPW = pw;\r\n this.alive = true;\r\n //send the initial request. If there are requests queued, make sure that we transmit as many as we are currently able to.\r\n while (this.newRequest_()) { }\r\n }\r\n /**\r\n * This is called any time someone might want a script tag to be added. It adds a script tag when there aren't\r\n * too many outstanding requests and we are still alive.\r\n *\r\n * If there are outstanding packet segments to send, it sends one. If there aren't, it sends a long-poll anyways if\r\n * needed.\r\n */\r\n newRequest_() {\r\n // We keep one outstanding request open all the time to receive data, but if we need to send data\r\n // (pendingSegs.length > 0) then we create a new request to send the data. The server will automatically\r\n // close the old request.\r\n if (this.alive &&\r\n this.sendNewPolls &&\r\n this.outstandingRequests.size < (this.pendingSegs.length > 0 ? 2 : 1)) {\r\n //construct our url\r\n this.currentSerial++;\r\n const urlParams = {};\r\n urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\r\n urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\r\n urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = this.currentSerial;\r\n let theURL = this.urlFn(urlParams);\r\n //Now add as much data as we can.\r\n let curDataString = '';\r\n let i = 0;\r\n while (this.pendingSegs.length > 0) {\r\n //first, lets see if the next segment will fit.\r\n const nextSeg = this.pendingSegs[0];\r\n if (nextSeg.d.length +\r\n SEG_HEADER_SIZE +\r\n curDataString.length <=\r\n MAX_URL_DATA_SIZE) {\r\n //great, the segment will fit. Lets append it.\r\n const theSeg = this.pendingSegs.shift();\r\n curDataString =\r\n curDataString +\r\n '&' +\r\n FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM +\r\n i +\r\n '=' +\r\n theSeg.seg +\r\n '&' +\r\n FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET +\r\n i +\r\n '=' +\r\n theSeg.ts +\r\n '&' +\r\n FIREBASE_LONGPOLL_DATA_PARAM +\r\n i +\r\n '=' +\r\n theSeg.d;\r\n i++;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n theURL = theURL + curDataString;\r\n this.addLongPollTag_(theURL, this.currentSerial);\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n /**\r\n * Queue a packet for transmission to the server.\r\n * @param segnum - A sequential id for this packet segment used for reassembly\r\n * @param totalsegs - The total number of segments in this packet\r\n * @param data - The data for this segment.\r\n */\r\n enqueueSegment(segnum, totalsegs, data) {\r\n //add this to the queue of segments to send.\r\n this.pendingSegs.push({ seg: segnum, ts: totalsegs, d: data });\r\n //send the data immediately if there isn't already data being transmitted, unless\r\n //startLongPoll hasn't been called yet.\r\n if (this.alive) {\r\n this.newRequest_();\r\n }\r\n }\r\n /**\r\n * Add a script tag for a regular long-poll request.\r\n * @param url - The URL of the script tag.\r\n * @param serial - The serial number of the request.\r\n */\r\n addLongPollTag_(url, serial) {\r\n //remember that we sent this request.\r\n this.outstandingRequests.add(serial);\r\n const doNewRequest = () => {\r\n this.outstandingRequests.delete(serial);\r\n this.newRequest_();\r\n };\r\n // If this request doesn't return on its own accord (by the server sending us some data), we'll\r\n // create a new one after the KEEPALIVE interval to make sure we always keep a fresh request open.\r\n const keepaliveTimeout = setTimeout(doNewRequest, Math.floor(KEEPALIVE_REQUEST_INTERVAL));\r\n const readyStateCB = () => {\r\n // Request completed. Cancel the keepalive.\r\n clearTimeout(keepaliveTimeout);\r\n // Trigger a new request so we can continue receiving data.\r\n doNewRequest();\r\n };\r\n this.addTag(url, readyStateCB);\r\n }\r\n /**\r\n * Add an arbitrary script tag to the iframe.\r\n * @param url - The URL for the script tag source.\r\n * @param loadCB - A callback to be triggered once the script has loaded.\r\n */\r\n addTag(url, loadCB) {\r\n if (isNodeSdk()) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.doNodeLongPoll(url, loadCB);\r\n }\r\n else {\r\n setTimeout(() => {\r\n try {\r\n // if we're already closed, don't add this poll\r\n if (!this.sendNewPolls) {\r\n return;\r\n }\r\n const newScript = this.myIFrame.doc.createElement('script');\r\n newScript.type = 'text/javascript';\r\n newScript.async = true;\r\n newScript.src = url;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n newScript.onload = newScript.onreadystatechange =\r\n function () {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const rstate = newScript.readyState;\r\n if (!rstate || rstate === 'loaded' || rstate === 'complete') {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n newScript.onload = newScript.onreadystatechange = null;\r\n if (newScript.parentNode) {\r\n newScript.parentNode.removeChild(newScript);\r\n }\r\n loadCB();\r\n }\r\n };\r\n newScript.onerror = () => {\r\n log('Long-poll script failed to load: ' + url);\r\n this.sendNewPolls = false;\r\n this.close();\r\n };\r\n this.myIFrame.doc.body.appendChild(newScript);\r\n }\r\n catch (e) {\r\n // TODO: we should make this error visible somehow\r\n }\r\n }, Math.floor(1));\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst WEBSOCKET_MAX_FRAME_SIZE = 16384;\r\nconst WEBSOCKET_KEEPALIVE_INTERVAL = 45000;\r\nlet WebSocketImpl = null;\r\nif (typeof MozWebSocket !== 'undefined') {\r\n WebSocketImpl = MozWebSocket;\r\n}\r\nelse if (typeof WebSocket !== 'undefined') {\r\n WebSocketImpl = WebSocket;\r\n}\r\n/**\r\n * Create a new websocket connection with the given callbacks.\r\n */\r\nclass WebSocketConnection {\r\n /**\r\n * @param connId identifier for this transport\r\n * @param repoInfo The info for the websocket endpoint.\r\n * @param applicationId The Firebase App ID for this project.\r\n * @param appCheckToken The App Check Token for this client.\r\n * @param authToken The Auth Token for this client.\r\n * @param transportSessionId Optional transportSessionId if this is connecting\r\n * to an existing transport session\r\n * @param lastSessionId Optional lastSessionId if there was a previous\r\n * connection\r\n */\r\n constructor(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {\r\n this.connId = connId;\r\n this.applicationId = applicationId;\r\n this.appCheckToken = appCheckToken;\r\n this.authToken = authToken;\r\n this.keepaliveTimer = null;\r\n this.frames = null;\r\n this.totalFrames = 0;\r\n this.bytesSent = 0;\r\n this.bytesReceived = 0;\r\n this.log_ = logWrapper(this.connId);\r\n this.stats_ = statsManagerGetCollection(repoInfo);\r\n this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId);\r\n this.nodeAdmin = repoInfo.nodeAdmin;\r\n }\r\n /**\r\n * @param repoInfo - The info for the websocket endpoint.\r\n * @param transportSessionId - Optional transportSessionId if this is connecting to an existing transport\r\n * session\r\n * @param lastSessionId - Optional lastSessionId if there was a previous connection\r\n * @returns connection url\r\n */\r\n static connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId) {\r\n const urlParams = {};\r\n urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n if (!isNodeSdk() &&\r\n typeof location !== 'undefined' &&\r\n location.hostname &&\r\n FORGE_DOMAIN_RE.test(location.hostname)) {\r\n urlParams[REFERER_PARAM] = FORGE_REF;\r\n }\r\n if (transportSessionId) {\r\n urlParams[TRANSPORT_SESSION_PARAM] = transportSessionId;\r\n }\r\n if (lastSessionId) {\r\n urlParams[LAST_SESSION_PARAM] = lastSessionId;\r\n }\r\n if (appCheckToken) {\r\n urlParams[APP_CHECK_TOKEN_PARAM] = appCheckToken;\r\n }\r\n if (applicationId) {\r\n urlParams[APPLICATION_ID_PARAM] = applicationId;\r\n }\r\n return repoInfoConnectionURL(repoInfo, WEBSOCKET, urlParams);\r\n }\r\n /**\r\n * @param onMessage - Callback when messages arrive\r\n * @param onDisconnect - Callback with connection lost.\r\n */\r\n open(onMessage, onDisconnect) {\r\n this.onDisconnect = onDisconnect;\r\n this.onMessage = onMessage;\r\n this.log_('Websocket connecting to ' + this.connURL);\r\n this.everConnected_ = false;\r\n // Assume failure until proven otherwise.\r\n PersistentStorage.set('previous_websocket_failure', true);\r\n try {\r\n let options;\r\n if (isNodeSdk()) {\r\n const device = this.nodeAdmin ? 'AdminNode' : 'Node';\r\n // UA Format: Firebase////\r\n options = {\r\n headers: {\r\n 'User-Agent': `Firebase/${PROTOCOL_VERSION}/${SDK_VERSION}/${process.platform}/${device}`,\r\n 'X-Firebase-GMPID': this.applicationId || ''\r\n }\r\n };\r\n // If using Node with admin creds, AppCheck-related checks are unnecessary.\r\n // Note that we send the credentials here even if they aren't admin credentials, which is\r\n // not a problem.\r\n // Note that this header is just used to bypass appcheck, and the token should still be sent\r\n // through the websocket connection once it is established.\r\n if (this.authToken) {\r\n options.headers['Authorization'] = `Bearer ${this.authToken}`;\r\n }\r\n if (this.appCheckToken) {\r\n options.headers['X-Firebase-AppCheck'] = this.appCheckToken;\r\n }\r\n // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.\r\n const env = process['env'];\r\n const proxy = this.connURL.indexOf('wss://') === 0\r\n ? env['HTTPS_PROXY'] || env['https_proxy']\r\n : env['HTTP_PROXY'] || env['http_proxy'];\r\n if (proxy) {\r\n options['proxy'] = { origin: proxy };\r\n }\r\n }\r\n this.mySock = new WebSocketImpl(this.connURL, [], options);\r\n }\r\n catch (e) {\r\n this.log_('Error instantiating WebSocket.');\r\n const error = e.message || e.data;\r\n if (error) {\r\n this.log_(error);\r\n }\r\n this.onClosed_();\r\n return;\r\n }\r\n this.mySock.onopen = () => {\r\n this.log_('Websocket connected.');\r\n this.everConnected_ = true;\r\n };\r\n this.mySock.onclose = () => {\r\n this.log_('Websocket connection was disconnected.');\r\n this.mySock = null;\r\n this.onClosed_();\r\n };\r\n this.mySock.onmessage = m => {\r\n this.handleIncomingFrame(m);\r\n };\r\n this.mySock.onerror = e => {\r\n this.log_('WebSocket error. Closing connection.');\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const error = e.message || e.data;\r\n if (error) {\r\n this.log_(error);\r\n }\r\n this.onClosed_();\r\n };\r\n }\r\n /**\r\n * No-op for websockets, we don't need to do anything once the connection is confirmed as open\r\n */\r\n start() { }\r\n static forceDisallow() {\r\n WebSocketConnection.forceDisallow_ = true;\r\n }\r\n static isAvailable() {\r\n let isOldAndroid = false;\r\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\r\n const oldAndroidRegex = /Android ([0-9]{0,}\\.[0-9]{0,})/;\r\n const oldAndroidMatch = navigator.userAgent.match(oldAndroidRegex);\r\n if (oldAndroidMatch && oldAndroidMatch.length > 1) {\r\n if (parseFloat(oldAndroidMatch[1]) < 4.4) {\r\n isOldAndroid = true;\r\n }\r\n }\r\n }\r\n return (!isOldAndroid &&\r\n WebSocketImpl !== null &&\r\n !WebSocketConnection.forceDisallow_);\r\n }\r\n /**\r\n * Returns true if we previously failed to connect with this transport.\r\n */\r\n static previouslyFailed() {\r\n // If our persistent storage is actually only in-memory storage,\r\n // we default to assuming that it previously failed to be safe.\r\n return (PersistentStorage.isInMemoryStorage ||\r\n PersistentStorage.get('previous_websocket_failure') === true);\r\n }\r\n markConnectionHealthy() {\r\n PersistentStorage.remove('previous_websocket_failure');\r\n }\r\n appendFrame_(data) {\r\n this.frames.push(data);\r\n if (this.frames.length === this.totalFrames) {\r\n const fullMess = this.frames.join('');\r\n this.frames = null;\r\n const jsonMess = jsonEval(fullMess);\r\n //handle the message\r\n this.onMessage(jsonMess);\r\n }\r\n }\r\n /**\r\n * @param frameCount - The number of frames we are expecting from the server\r\n */\r\n handleNewFrameCount_(frameCount) {\r\n this.totalFrames = frameCount;\r\n this.frames = [];\r\n }\r\n /**\r\n * Attempts to parse a frame count out of some text. If it can't, assumes a value of 1\r\n * @returns Any remaining data to be process, or null if there is none\r\n */\r\n extractFrameCount_(data) {\r\n assert(this.frames === null, 'We already have a frame buffer');\r\n // TODO: The server is only supposed to send up to 9999 frames (i.e. length <= 4), but that isn't being enforced\r\n // currently. So allowing larger frame counts (length <= 6). See https://app.asana.com/0/search/8688598998380/8237608042508\r\n if (data.length <= 6) {\r\n const frameCount = Number(data);\r\n if (!isNaN(frameCount)) {\r\n this.handleNewFrameCount_(frameCount);\r\n return null;\r\n }\r\n }\r\n this.handleNewFrameCount_(1);\r\n return data;\r\n }\r\n /**\r\n * Process a websocket frame that has arrived from the server.\r\n * @param mess - The frame data\r\n */\r\n handleIncomingFrame(mess) {\r\n if (this.mySock === null) {\r\n return; // Chrome apparently delivers incoming packets even after we .close() the connection sometimes.\r\n }\r\n const data = mess['data'];\r\n this.bytesReceived += data.length;\r\n this.stats_.incrementCounter('bytes_received', data.length);\r\n this.resetKeepAlive();\r\n if (this.frames !== null) {\r\n // we're buffering\r\n this.appendFrame_(data);\r\n }\r\n else {\r\n // try to parse out a frame count, otherwise, assume 1 and process it\r\n const remainingData = this.extractFrameCount_(data);\r\n if (remainingData !== null) {\r\n this.appendFrame_(remainingData);\r\n }\r\n }\r\n }\r\n /**\r\n * Send a message to the server\r\n * @param data - The JSON object to transmit\r\n */\r\n send(data) {\r\n this.resetKeepAlive();\r\n const dataStr = stringify(data);\r\n this.bytesSent += dataStr.length;\r\n this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n //We can only fit a certain amount in each websocket frame, so we need to split this request\r\n //up into multiple pieces if it doesn't fit in one request.\r\n const dataSegs = splitStringBySize(dataStr, WEBSOCKET_MAX_FRAME_SIZE);\r\n //Send the length header\r\n if (dataSegs.length > 1) {\r\n this.sendString_(String(dataSegs.length));\r\n }\r\n //Send the actual data in segments.\r\n for (let i = 0; i < dataSegs.length; i++) {\r\n this.sendString_(dataSegs[i]);\r\n }\r\n }\r\n shutdown_() {\r\n this.isClosed_ = true;\r\n if (this.keepaliveTimer) {\r\n clearInterval(this.keepaliveTimer);\r\n this.keepaliveTimer = null;\r\n }\r\n if (this.mySock) {\r\n this.mySock.close();\r\n this.mySock = null;\r\n }\r\n }\r\n onClosed_() {\r\n if (!this.isClosed_) {\r\n this.log_('WebSocket is closing itself');\r\n this.shutdown_();\r\n // since this is an internal close, trigger the close listener\r\n if (this.onDisconnect) {\r\n this.onDisconnect(this.everConnected_);\r\n this.onDisconnect = null;\r\n }\r\n }\r\n }\r\n /**\r\n * External-facing close handler.\r\n * Close the websocket and kill the connection.\r\n */\r\n close() {\r\n if (!this.isClosed_) {\r\n this.log_('WebSocket is being closed');\r\n this.shutdown_();\r\n }\r\n }\r\n /**\r\n * Kill the current keepalive timer and start a new one, to ensure that it always fires N seconds after\r\n * the last activity.\r\n */\r\n resetKeepAlive() {\r\n clearInterval(this.keepaliveTimer);\r\n this.keepaliveTimer = setInterval(() => {\r\n //If there has been no websocket activity for a while, send a no-op\r\n if (this.mySock) {\r\n this.sendString_('0');\r\n }\r\n this.resetKeepAlive();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(WEBSOCKET_KEEPALIVE_INTERVAL));\r\n }\r\n /**\r\n * Send a string over the websocket.\r\n *\r\n * @param str - String to send.\r\n */\r\n sendString_(str) {\r\n // Firefox seems to sometimes throw exceptions (NS_ERROR_UNEXPECTED) from websocket .send()\r\n // calls for some unknown reason. We treat these as an error and disconnect.\r\n // See https://app.asana.com/0/58926111402292/68021340250410\r\n try {\r\n this.mySock.send(str);\r\n }\r\n catch (e) {\r\n this.log_('Exception thrown from WebSocket.send():', e.message || e.data, 'Closing connection.');\r\n setTimeout(this.onClosed_.bind(this), 0);\r\n }\r\n }\r\n}\r\n/**\r\n * Number of response before we consider the connection \"healthy.\"\r\n */\r\nWebSocketConnection.responsesRequiredToBeHealthy = 2;\r\n/**\r\n * Time to wait for the connection te become healthy before giving up.\r\n */\r\nWebSocketConnection.healthyTimeout = 30000;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Currently simplistic, this class manages what transport a Connection should use at various stages of its\r\n * lifecycle.\r\n *\r\n * It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if\r\n * they are available.\r\n */\r\nclass TransportManager {\r\n /**\r\n * @param repoInfo - Metadata around the namespace we're connecting to\r\n */\r\n constructor(repoInfo) {\r\n this.initTransports_(repoInfo);\r\n }\r\n static get ALL_TRANSPORTS() {\r\n return [BrowserPollConnection, WebSocketConnection];\r\n }\r\n /**\r\n * Returns whether transport has been selected to ensure WebSocketConnection or BrowserPollConnection are not called after\r\n * TransportManager has already set up transports_\r\n */\r\n static get IS_TRANSPORT_INITIALIZED() {\r\n return this.globalTransportInitialized_;\r\n }\r\n initTransports_(repoInfo) {\r\n const isWebSocketsAvailable = WebSocketConnection && WebSocketConnection['isAvailable']();\r\n let isSkipPollConnection = isWebSocketsAvailable && !WebSocketConnection.previouslyFailed();\r\n if (repoInfo.webSocketOnly) {\r\n if (!isWebSocketsAvailable) {\r\n warn(\"wss:// URL used, but browser isn't known to support websockets. Trying anyway.\");\r\n }\r\n isSkipPollConnection = true;\r\n }\r\n if (isSkipPollConnection) {\r\n this.transports_ = [WebSocketConnection];\r\n }\r\n else {\r\n const transports = (this.transports_ = []);\r\n for (const transport of TransportManager.ALL_TRANSPORTS) {\r\n if (transport && transport['isAvailable']()) {\r\n transports.push(transport);\r\n }\r\n }\r\n TransportManager.globalTransportInitialized_ = true;\r\n }\r\n }\r\n /**\r\n * @returns The constructor for the initial transport to use\r\n */\r\n initialTransport() {\r\n if (this.transports_.length > 0) {\r\n return this.transports_[0];\r\n }\r\n else {\r\n throw new Error('No transports available');\r\n }\r\n }\r\n /**\r\n * @returns The constructor for the next transport, or null\r\n */\r\n upgradeTransport() {\r\n if (this.transports_.length > 1) {\r\n return this.transports_[1];\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n}\r\n// Keeps track of whether the TransportManager has already chosen a transport to use\r\nTransportManager.globalTransportInitialized_ = false;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Abort upgrade attempt if it takes longer than 60s.\r\nconst UPGRADE_TIMEOUT = 60000;\r\n// For some transports (WebSockets), we need to \"validate\" the transport by exchanging a few requests and responses.\r\n// If we haven't sent enough requests within 5s, we'll start sending noop ping requests.\r\nconst DELAY_BEFORE_SENDING_EXTRA_REQUESTS = 5000;\r\n// If the initial data sent triggers a lot of bandwidth (i.e. it's a large put or a listen for a large amount of data)\r\n// then we may not be able to exchange our ping/pong requests within the healthy timeout. So if we reach the timeout\r\n// but we've sent/received enough bytes, we don't cancel the connection.\r\nconst BYTES_SENT_HEALTHY_OVERRIDE = 10 * 1024;\r\nconst BYTES_RECEIVED_HEALTHY_OVERRIDE = 100 * 1024;\r\nconst MESSAGE_TYPE = 't';\r\nconst MESSAGE_DATA = 'd';\r\nconst CONTROL_SHUTDOWN = 's';\r\nconst CONTROL_RESET = 'r';\r\nconst CONTROL_ERROR = 'e';\r\nconst CONTROL_PONG = 'o';\r\nconst SWITCH_ACK = 'a';\r\nconst END_TRANSMISSION = 'n';\r\nconst PING = 'p';\r\nconst SERVER_HELLO = 'h';\r\n/**\r\n * Creates a new real-time connection to the server using whichever method works\r\n * best in the current browser.\r\n */\r\nclass Connection {\r\n /**\r\n * @param id - an id for this connection\r\n * @param repoInfo_ - the info for the endpoint to connect to\r\n * @param applicationId_ - the Firebase App ID for this project\r\n * @param appCheckToken_ - The App Check Token for this device.\r\n * @param authToken_ - The auth token for this session.\r\n * @param onMessage_ - the callback to be triggered when a server-push message arrives\r\n * @param onReady_ - the callback to be triggered when this connection is ready to send messages.\r\n * @param onDisconnect_ - the callback to be triggered when a connection was lost\r\n * @param onKill_ - the callback to be triggered when this connection has permanently shut down.\r\n * @param lastSessionId - last session id in persistent connection. is used to clean up old session in real-time server\r\n */\r\n constructor(id, repoInfo_, applicationId_, appCheckToken_, authToken_, onMessage_, onReady_, onDisconnect_, onKill_, lastSessionId) {\r\n this.id = id;\r\n this.repoInfo_ = repoInfo_;\r\n this.applicationId_ = applicationId_;\r\n this.appCheckToken_ = appCheckToken_;\r\n this.authToken_ = authToken_;\r\n this.onMessage_ = onMessage_;\r\n this.onReady_ = onReady_;\r\n this.onDisconnect_ = onDisconnect_;\r\n this.onKill_ = onKill_;\r\n this.lastSessionId = lastSessionId;\r\n this.connectionCount = 0;\r\n this.pendingDataMessages = [];\r\n this.state_ = 0 /* RealtimeState.CONNECTING */;\r\n this.log_ = logWrapper('c:' + this.id + ':');\r\n this.transportManager_ = new TransportManager(repoInfo_);\r\n this.log_('Connection created');\r\n this.start_();\r\n }\r\n /**\r\n * Starts a connection attempt\r\n */\r\n start_() {\r\n const conn = this.transportManager_.initialTransport();\r\n this.conn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, null, this.lastSessionId);\r\n // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n // can consider the transport healthy.\r\n this.primaryResponsesRequired_ = conn['responsesRequiredToBeHealthy'] || 0;\r\n const onMessageReceived = this.connReceiver_(this.conn_);\r\n const onConnectionLost = this.disconnReceiver_(this.conn_);\r\n this.tx_ = this.conn_;\r\n this.rx_ = this.conn_;\r\n this.secondaryConn_ = null;\r\n this.isHealthy_ = false;\r\n /*\r\n * Firefox doesn't like when code from one iframe tries to create another iframe by way of the parent frame.\r\n * This can occur in the case of a redirect, i.e. we guessed wrong on what server to connect to and received a reset.\r\n * Somehow, setTimeout seems to make this ok. That doesn't make sense from a security perspective, since you should\r\n * still have the context of your originating frame.\r\n */\r\n setTimeout(() => {\r\n // this.conn_ gets set to null in some of the tests. Check to make sure it still exists before using it\r\n this.conn_ && this.conn_.open(onMessageReceived, onConnectionLost);\r\n }, Math.floor(0));\r\n const healthyTimeoutMS = conn['healthyTimeout'] || 0;\r\n if (healthyTimeoutMS > 0) {\r\n this.healthyTimeout_ = setTimeoutNonBlocking(() => {\r\n this.healthyTimeout_ = null;\r\n if (!this.isHealthy_) {\r\n if (this.conn_ &&\r\n this.conn_.bytesReceived > BYTES_RECEIVED_HEALTHY_OVERRIDE) {\r\n this.log_('Connection exceeded healthy timeout but has received ' +\r\n this.conn_.bytesReceived +\r\n ' bytes. Marking connection healthy.');\r\n this.isHealthy_ = true;\r\n this.conn_.markConnectionHealthy();\r\n }\r\n else if (this.conn_ &&\r\n this.conn_.bytesSent > BYTES_SENT_HEALTHY_OVERRIDE) {\r\n this.log_('Connection exceeded healthy timeout but has sent ' +\r\n this.conn_.bytesSent +\r\n ' bytes. Leaving connection alive.');\r\n // NOTE: We don't want to mark it healthy, since we have no guarantee that the bytes have made it to\r\n // the server.\r\n }\r\n else {\r\n this.log_('Closing unhealthy connection after timeout.');\r\n this.close();\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(healthyTimeoutMS));\r\n }\r\n }\r\n nextTransportId_() {\r\n return 'c:' + this.id + ':' + this.connectionCount++;\r\n }\r\n disconnReceiver_(conn) {\r\n return everConnected => {\r\n if (conn === this.conn_) {\r\n this.onConnectionLost_(everConnected);\r\n }\r\n else if (conn === this.secondaryConn_) {\r\n this.log_('Secondary connection lost.');\r\n this.onSecondaryConnectionLost_();\r\n }\r\n else {\r\n this.log_('closing an old connection');\r\n }\r\n };\r\n }\r\n connReceiver_(conn) {\r\n return (message) => {\r\n if (this.state_ !== 2 /* RealtimeState.DISCONNECTED */) {\r\n if (conn === this.rx_) {\r\n this.onPrimaryMessageReceived_(message);\r\n }\r\n else if (conn === this.secondaryConn_) {\r\n this.onSecondaryMessageReceived_(message);\r\n }\r\n else {\r\n this.log_('message on old connection');\r\n }\r\n }\r\n };\r\n }\r\n /**\r\n * @param dataMsg - An arbitrary data message to be sent to the server\r\n */\r\n sendRequest(dataMsg) {\r\n // wrap in a data message envelope and send it on\r\n const msg = { t: 'd', d: dataMsg };\r\n this.sendData_(msg);\r\n }\r\n tryCleanupConnection() {\r\n if (this.tx_ === this.secondaryConn_ && this.rx_ === this.secondaryConn_) {\r\n this.log_('cleaning up and promoting a connection: ' + this.secondaryConn_.connId);\r\n this.conn_ = this.secondaryConn_;\r\n this.secondaryConn_ = null;\r\n // the server will shutdown the old connection\r\n }\r\n }\r\n onSecondaryControl_(controlData) {\r\n if (MESSAGE_TYPE in controlData) {\r\n const cmd = controlData[MESSAGE_TYPE];\r\n if (cmd === SWITCH_ACK) {\r\n this.upgradeIfSecondaryHealthy_();\r\n }\r\n else if (cmd === CONTROL_RESET) {\r\n // Most likely the session wasn't valid. Abandon the switch attempt\r\n this.log_('Got a reset on secondary, closing it');\r\n this.secondaryConn_.close();\r\n // If we were already using this connection for something, than we need to fully close\r\n if (this.tx_ === this.secondaryConn_ ||\r\n this.rx_ === this.secondaryConn_) {\r\n this.close();\r\n }\r\n }\r\n else if (cmd === CONTROL_PONG) {\r\n this.log_('got pong on secondary.');\r\n this.secondaryResponsesRequired_--;\r\n this.upgradeIfSecondaryHealthy_();\r\n }\r\n }\r\n }\r\n onSecondaryMessageReceived_(parsedData) {\r\n const layer = requireKey('t', parsedData);\r\n const data = requireKey('d', parsedData);\r\n if (layer === 'c') {\r\n this.onSecondaryControl_(data);\r\n }\r\n else if (layer === 'd') {\r\n // got a data message, but we're still second connection. Need to buffer it up\r\n this.pendingDataMessages.push(data);\r\n }\r\n else {\r\n throw new Error('Unknown protocol layer: ' + layer);\r\n }\r\n }\r\n upgradeIfSecondaryHealthy_() {\r\n if (this.secondaryResponsesRequired_ <= 0) {\r\n this.log_('Secondary connection is healthy.');\r\n this.isHealthy_ = true;\r\n this.secondaryConn_.markConnectionHealthy();\r\n this.proceedWithUpgrade_();\r\n }\r\n else {\r\n // Send a ping to make sure the connection is healthy.\r\n this.log_('sending ping on secondary.');\r\n this.secondaryConn_.send({ t: 'c', d: { t: PING, d: {} } });\r\n }\r\n }\r\n proceedWithUpgrade_() {\r\n // tell this connection to consider itself open\r\n this.secondaryConn_.start();\r\n // send ack\r\n this.log_('sending client ack on secondary');\r\n this.secondaryConn_.send({ t: 'c', d: { t: SWITCH_ACK, d: {} } });\r\n // send end packet on primary transport, switch to sending on this one\r\n // can receive on this one, buffer responses until end received on primary transport\r\n this.log_('Ending transmission on primary');\r\n this.conn_.send({ t: 'c', d: { t: END_TRANSMISSION, d: {} } });\r\n this.tx_ = this.secondaryConn_;\r\n this.tryCleanupConnection();\r\n }\r\n onPrimaryMessageReceived_(parsedData) {\r\n // Must refer to parsedData properties in quotes, so closure doesn't touch them.\r\n const layer = requireKey('t', parsedData);\r\n const data = requireKey('d', parsedData);\r\n if (layer === 'c') {\r\n this.onControl_(data);\r\n }\r\n else if (layer === 'd') {\r\n this.onDataMessage_(data);\r\n }\r\n }\r\n onDataMessage_(message) {\r\n this.onPrimaryResponse_();\r\n // We don't do anything with data messages, just kick them up a level\r\n this.onMessage_(message);\r\n }\r\n onPrimaryResponse_() {\r\n if (!this.isHealthy_) {\r\n this.primaryResponsesRequired_--;\r\n if (this.primaryResponsesRequired_ <= 0) {\r\n this.log_('Primary connection is healthy.');\r\n this.isHealthy_ = true;\r\n this.conn_.markConnectionHealthy();\r\n }\r\n }\r\n }\r\n onControl_(controlData) {\r\n const cmd = requireKey(MESSAGE_TYPE, controlData);\r\n if (MESSAGE_DATA in controlData) {\r\n const payload = controlData[MESSAGE_DATA];\r\n if (cmd === SERVER_HELLO) {\r\n const handshakePayload = Object.assign({}, payload);\r\n if (this.repoInfo_.isUsingEmulator) {\r\n // Upon connecting, the emulator will pass the hostname that it's aware of, but we prefer the user's set hostname via `connectDatabaseEmulator` over what the emulator passes.\r\n handshakePayload.h = this.repoInfo_.host;\r\n }\r\n this.onHandshake_(handshakePayload);\r\n }\r\n else if (cmd === END_TRANSMISSION) {\r\n this.log_('recvd end transmission on primary');\r\n this.rx_ = this.secondaryConn_;\r\n for (let i = 0; i < this.pendingDataMessages.length; ++i) {\r\n this.onDataMessage_(this.pendingDataMessages[i]);\r\n }\r\n this.pendingDataMessages = [];\r\n this.tryCleanupConnection();\r\n }\r\n else if (cmd === CONTROL_SHUTDOWN) {\r\n // This was previously the 'onKill' callback passed to the lower-level connection\r\n // payload in this case is the reason for the shutdown. Generally a human-readable error\r\n this.onConnectionShutdown_(payload);\r\n }\r\n else if (cmd === CONTROL_RESET) {\r\n // payload in this case is the host we should contact\r\n this.onReset_(payload);\r\n }\r\n else if (cmd === CONTROL_ERROR) {\r\n error('Server Error: ' + payload);\r\n }\r\n else if (cmd === CONTROL_PONG) {\r\n this.log_('got pong on primary.');\r\n this.onPrimaryResponse_();\r\n this.sendPingOnPrimaryIfNecessary_();\r\n }\r\n else {\r\n error('Unknown control packet command: ' + cmd);\r\n }\r\n }\r\n }\r\n /**\r\n * @param handshake - The handshake data returned from the server\r\n */\r\n onHandshake_(handshake) {\r\n const timestamp = handshake.ts;\r\n const version = handshake.v;\r\n const host = handshake.h;\r\n this.sessionId = handshake.s;\r\n this.repoInfo_.host = host;\r\n // if we've already closed the connection, then don't bother trying to progress further\r\n if (this.state_ === 0 /* RealtimeState.CONNECTING */) {\r\n this.conn_.start();\r\n this.onConnectionEstablished_(this.conn_, timestamp);\r\n if (PROTOCOL_VERSION !== version) {\r\n warn('Protocol version mismatch detected');\r\n }\r\n // TODO: do we want to upgrade? when? maybe a delay?\r\n this.tryStartUpgrade_();\r\n }\r\n }\r\n tryStartUpgrade_() {\r\n const conn = this.transportManager_.upgradeTransport();\r\n if (conn) {\r\n this.startUpgrade_(conn);\r\n }\r\n }\r\n startUpgrade_(conn) {\r\n this.secondaryConn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, this.sessionId);\r\n // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n // can consider the transport healthy.\r\n this.secondaryResponsesRequired_ =\r\n conn['responsesRequiredToBeHealthy'] || 0;\r\n const onMessage = this.connReceiver_(this.secondaryConn_);\r\n const onDisconnect = this.disconnReceiver_(this.secondaryConn_);\r\n this.secondaryConn_.open(onMessage, onDisconnect);\r\n // If we haven't successfully upgraded after UPGRADE_TIMEOUT, give up and kill the secondary.\r\n setTimeoutNonBlocking(() => {\r\n if (this.secondaryConn_) {\r\n this.log_('Timed out trying to upgrade.');\r\n this.secondaryConn_.close();\r\n }\r\n }, Math.floor(UPGRADE_TIMEOUT));\r\n }\r\n onReset_(host) {\r\n this.log_('Reset packet received. New host: ' + host);\r\n this.repoInfo_.host = host;\r\n // TODO: if we're already \"connected\", we need to trigger a disconnect at the next layer up.\r\n // We don't currently support resets after the connection has already been established\r\n if (this.state_ === 1 /* RealtimeState.CONNECTED */) {\r\n this.close();\r\n }\r\n else {\r\n // Close whatever connections we have open and start again.\r\n this.closeConnections_();\r\n this.start_();\r\n }\r\n }\r\n onConnectionEstablished_(conn, timestamp) {\r\n this.log_('Realtime connection established.');\r\n this.conn_ = conn;\r\n this.state_ = 1 /* RealtimeState.CONNECTED */;\r\n if (this.onReady_) {\r\n this.onReady_(timestamp, this.sessionId);\r\n this.onReady_ = null;\r\n }\r\n // If after 5 seconds we haven't sent enough requests to the server to get the connection healthy,\r\n // send some pings.\r\n if (this.primaryResponsesRequired_ === 0) {\r\n this.log_('Primary connection is healthy.');\r\n this.isHealthy_ = true;\r\n }\r\n else {\r\n setTimeoutNonBlocking(() => {\r\n this.sendPingOnPrimaryIfNecessary_();\r\n }, Math.floor(DELAY_BEFORE_SENDING_EXTRA_REQUESTS));\r\n }\r\n }\r\n sendPingOnPrimaryIfNecessary_() {\r\n // If the connection isn't considered healthy yet, we'll send a noop ping packet request.\r\n if (!this.isHealthy_ && this.state_ === 1 /* RealtimeState.CONNECTED */) {\r\n this.log_('sending ping on primary.');\r\n this.sendData_({ t: 'c', d: { t: PING, d: {} } });\r\n }\r\n }\r\n onSecondaryConnectionLost_() {\r\n const conn = this.secondaryConn_;\r\n this.secondaryConn_ = null;\r\n if (this.tx_ === conn || this.rx_ === conn) {\r\n // we are relying on this connection already in some capacity. Therefore, a failure is real\r\n this.close();\r\n }\r\n }\r\n /**\r\n * @param everConnected - Whether or not the connection ever reached a server. Used to determine if\r\n * we should flush the host cache\r\n */\r\n onConnectionLost_(everConnected) {\r\n this.conn_ = null;\r\n // NOTE: IF you're seeing a Firefox error for this line, I think it might be because it's getting\r\n // called on window close and RealtimeState.CONNECTING is no longer defined. Just a guess.\r\n if (!everConnected && this.state_ === 0 /* RealtimeState.CONNECTING */) {\r\n this.log_('Realtime connection failed.');\r\n // Since we failed to connect at all, clear any cached entry for this namespace in case the machine went away\r\n if (this.repoInfo_.isCacheableHost()) {\r\n PersistentStorage.remove('host:' + this.repoInfo_.host);\r\n // reset the internal host to what we would show the user, i.e. .firebaseio.com\r\n this.repoInfo_.internalHost = this.repoInfo_.host;\r\n }\r\n }\r\n else if (this.state_ === 1 /* RealtimeState.CONNECTED */) {\r\n this.log_('Realtime connection lost.');\r\n }\r\n this.close();\r\n }\r\n onConnectionShutdown_(reason) {\r\n this.log_('Connection shutdown command received. Shutting down...');\r\n if (this.onKill_) {\r\n this.onKill_(reason);\r\n this.onKill_ = null;\r\n }\r\n // We intentionally don't want to fire onDisconnect (kill is a different case),\r\n // so clear the callback.\r\n this.onDisconnect_ = null;\r\n this.close();\r\n }\r\n sendData_(data) {\r\n if (this.state_ !== 1 /* RealtimeState.CONNECTED */) {\r\n throw 'Connection is not connected';\r\n }\r\n else {\r\n this.tx_.send(data);\r\n }\r\n }\r\n /**\r\n * Cleans up this connection, calling the appropriate callbacks\r\n */\r\n close() {\r\n if (this.state_ !== 2 /* RealtimeState.DISCONNECTED */) {\r\n this.log_('Closing realtime connection.');\r\n this.state_ = 2 /* RealtimeState.DISCONNECTED */;\r\n this.closeConnections_();\r\n if (this.onDisconnect_) {\r\n this.onDisconnect_();\r\n this.onDisconnect_ = null;\r\n }\r\n }\r\n }\r\n closeConnections_() {\r\n this.log_('Shutting down all connections');\r\n if (this.conn_) {\r\n this.conn_.close();\r\n this.conn_ = null;\r\n }\r\n if (this.secondaryConn_) {\r\n this.secondaryConn_.close();\r\n this.secondaryConn_ = null;\r\n }\r\n if (this.healthyTimeout_) {\r\n clearTimeout(this.healthyTimeout_);\r\n this.healthyTimeout_ = null;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface defining the set of actions that can be performed against the Firebase server\r\n * (basically corresponds to our wire protocol).\r\n *\r\n * @interface\r\n */\r\nclass ServerActions {\r\n put(pathString, data, onComplete, hash) { }\r\n merge(pathString, data, onComplete, hash) { }\r\n /**\r\n * Refreshes the auth token for the current connection.\r\n * @param token - The authentication token\r\n */\r\n refreshAuthToken(token) { }\r\n /**\r\n * Refreshes the app check token for the current connection.\r\n * @param token The app check token\r\n */\r\n refreshAppCheckToken(token) { }\r\n onDisconnectPut(pathString, data, onComplete) { }\r\n onDisconnectMerge(pathString, data, onComplete) { }\r\n onDisconnectCancel(pathString, onComplete) { }\r\n reportStats(stats) { }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Base class to be used if you want to emit events. Call the constructor with\r\n * the set of allowed event names.\r\n */\r\nclass EventEmitter {\r\n constructor(allowedEvents_) {\r\n this.allowedEvents_ = allowedEvents_;\r\n this.listeners_ = {};\r\n assert(Array.isArray(allowedEvents_) && allowedEvents_.length > 0, 'Requires a non-empty array');\r\n }\r\n /**\r\n * To be called by derived classes to trigger events.\r\n */\r\n trigger(eventType, ...varArgs) {\r\n if (Array.isArray(this.listeners_[eventType])) {\r\n // Clone the list, since callbacks could add/remove listeners.\r\n const listeners = [...this.listeners_[eventType]];\r\n for (let i = 0; i < listeners.length; i++) {\r\n listeners[i].callback.apply(listeners[i].context, varArgs);\r\n }\r\n }\r\n }\r\n on(eventType, callback, context) {\r\n this.validateEventType_(eventType);\r\n this.listeners_[eventType] = this.listeners_[eventType] || [];\r\n this.listeners_[eventType].push({ callback, context });\r\n const eventData = this.getInitialEvent(eventType);\r\n if (eventData) {\r\n callback.apply(context, eventData);\r\n }\r\n }\r\n off(eventType, callback, context) {\r\n this.validateEventType_(eventType);\r\n const listeners = this.listeners_[eventType] || [];\r\n for (let i = 0; i < listeners.length; i++) {\r\n if (listeners[i].callback === callback &&\r\n (!context || context === listeners[i].context)) {\r\n listeners.splice(i, 1);\r\n return;\r\n }\r\n }\r\n }\r\n validateEventType_(eventType) {\r\n assert(this.allowedEvents_.find(et => {\r\n return et === eventType;\r\n }), 'Unknown event: ' + eventType);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Monitors online state (as reported by window.online/offline events).\r\n *\r\n * The expectation is that this could have many false positives (thinks we are online\r\n * when we're not), but no false negatives. So we can safely use it to determine when\r\n * we definitely cannot reach the internet.\r\n */\r\nclass OnlineMonitor extends EventEmitter {\r\n constructor() {\r\n super(['online']);\r\n this.online_ = true;\r\n // We've had repeated complaints that Cordova apps can get stuck \"offline\", e.g.\r\n // https://forum.ionicframework.com/t/firebase-connection-is-lost-and-never-come-back/43810\r\n // It would seem that the 'online' event does not always fire consistently. So we disable it\r\n // for Cordova.\r\n if (typeof window !== 'undefined' &&\r\n typeof window.addEventListener !== 'undefined' &&\r\n !isMobileCordova()) {\r\n window.addEventListener('online', () => {\r\n if (!this.online_) {\r\n this.online_ = true;\r\n this.trigger('online', true);\r\n }\r\n }, false);\r\n window.addEventListener('offline', () => {\r\n if (this.online_) {\r\n this.online_ = false;\r\n this.trigger('online', false);\r\n }\r\n }, false);\r\n }\r\n }\r\n static getInstance() {\r\n return new OnlineMonitor();\r\n }\r\n getInitialEvent(eventType) {\r\n assert(eventType === 'online', 'Unknown event type: ' + eventType);\r\n return [this.online_];\r\n }\r\n currentlyOnline() {\r\n return this.online_;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Maximum key depth. */\r\nconst MAX_PATH_DEPTH = 32;\r\n/** Maximum number of (UTF8) bytes in a Firebase path. */\r\nconst MAX_PATH_LENGTH_BYTES = 768;\r\n/**\r\n * An immutable object representing a parsed path. It's immutable so that you\r\n * can pass them around to other functions without worrying about them changing\r\n * it.\r\n */\r\nclass Path {\r\n /**\r\n * @param pathOrString - Path string to parse, or another path, or the raw\r\n * tokens array\r\n */\r\n constructor(pathOrString, pieceNum) {\r\n if (pieceNum === void 0) {\r\n this.pieces_ = pathOrString.split('/');\r\n // Remove empty pieces.\r\n let copyTo = 0;\r\n for (let i = 0; i < this.pieces_.length; i++) {\r\n if (this.pieces_[i].length > 0) {\r\n this.pieces_[copyTo] = this.pieces_[i];\r\n copyTo++;\r\n }\r\n }\r\n this.pieces_.length = copyTo;\r\n this.pieceNum_ = 0;\r\n }\r\n else {\r\n this.pieces_ = pathOrString;\r\n this.pieceNum_ = pieceNum;\r\n }\r\n }\r\n toString() {\r\n let pathString = '';\r\n for (let i = this.pieceNum_; i < this.pieces_.length; i++) {\r\n if (this.pieces_[i] !== '') {\r\n pathString += '/' + this.pieces_[i];\r\n }\r\n }\r\n return pathString || '/';\r\n }\r\n}\r\nfunction newEmptyPath() {\r\n return new Path('');\r\n}\r\nfunction pathGetFront(path) {\r\n if (path.pieceNum_ >= path.pieces_.length) {\r\n return null;\r\n }\r\n return path.pieces_[path.pieceNum_];\r\n}\r\n/**\r\n * @returns The number of segments in this path\r\n */\r\nfunction pathGetLength(path) {\r\n return path.pieces_.length - path.pieceNum_;\r\n}\r\nfunction pathPopFront(path) {\r\n let pieceNum = path.pieceNum_;\r\n if (pieceNum < path.pieces_.length) {\r\n pieceNum++;\r\n }\r\n return new Path(path.pieces_, pieceNum);\r\n}\r\nfunction pathGetBack(path) {\r\n if (path.pieceNum_ < path.pieces_.length) {\r\n return path.pieces_[path.pieces_.length - 1];\r\n }\r\n return null;\r\n}\r\nfunction pathToUrlEncodedString(path) {\r\n let pathString = '';\r\n for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\r\n if (path.pieces_[i] !== '') {\r\n pathString += '/' + encodeURIComponent(String(path.pieces_[i]));\r\n }\r\n }\r\n return pathString || '/';\r\n}\r\n/**\r\n * Shallow copy of the parts of the path.\r\n *\r\n */\r\nfunction pathSlice(path, begin = 0) {\r\n return path.pieces_.slice(path.pieceNum_ + begin);\r\n}\r\nfunction pathParent(path) {\r\n if (path.pieceNum_ >= path.pieces_.length) {\r\n return null;\r\n }\r\n const pieces = [];\r\n for (let i = path.pieceNum_; i < path.pieces_.length - 1; i++) {\r\n pieces.push(path.pieces_[i]);\r\n }\r\n return new Path(pieces, 0);\r\n}\r\nfunction pathChild(path, childPathObj) {\r\n const pieces = [];\r\n for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\r\n pieces.push(path.pieces_[i]);\r\n }\r\n if (childPathObj instanceof Path) {\r\n for (let i = childPathObj.pieceNum_; i < childPathObj.pieces_.length; i++) {\r\n pieces.push(childPathObj.pieces_[i]);\r\n }\r\n }\r\n else {\r\n const childPieces = childPathObj.split('/');\r\n for (let i = 0; i < childPieces.length; i++) {\r\n if (childPieces[i].length > 0) {\r\n pieces.push(childPieces[i]);\r\n }\r\n }\r\n }\r\n return new Path(pieces, 0);\r\n}\r\n/**\r\n * @returns True if there are no segments in this path\r\n */\r\nfunction pathIsEmpty(path) {\r\n return path.pieceNum_ >= path.pieces_.length;\r\n}\r\n/**\r\n * @returns The path from outerPath to innerPath\r\n */\r\nfunction newRelativePath(outerPath, innerPath) {\r\n const outer = pathGetFront(outerPath), inner = pathGetFront(innerPath);\r\n if (outer === null) {\r\n return innerPath;\r\n }\r\n else if (outer === inner) {\r\n return newRelativePath(pathPopFront(outerPath), pathPopFront(innerPath));\r\n }\r\n else {\r\n throw new Error('INTERNAL ERROR: innerPath (' +\r\n innerPath +\r\n ') is not within ' +\r\n 'outerPath (' +\r\n outerPath +\r\n ')');\r\n }\r\n}\r\n/**\r\n * @returns -1, 0, 1 if left is less, equal, or greater than the right.\r\n */\r\nfunction pathCompare(left, right) {\r\n const leftKeys = pathSlice(left, 0);\r\n const rightKeys = pathSlice(right, 0);\r\n for (let i = 0; i < leftKeys.length && i < rightKeys.length; i++) {\r\n const cmp = nameCompare(leftKeys[i], rightKeys[i]);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n }\r\n if (leftKeys.length === rightKeys.length) {\r\n return 0;\r\n }\r\n return leftKeys.length < rightKeys.length ? -1 : 1;\r\n}\r\n/**\r\n * @returns true if paths are the same.\r\n */\r\nfunction pathEquals(path, other) {\r\n if (pathGetLength(path) !== pathGetLength(other)) {\r\n return false;\r\n }\r\n for (let i = path.pieceNum_, j = other.pieceNum_; i <= path.pieces_.length; i++, j++) {\r\n if (path.pieces_[i] !== other.pieces_[j]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * @returns True if this path is a parent of (or the same as) other\r\n */\r\nfunction pathContains(path, other) {\r\n let i = path.pieceNum_;\r\n let j = other.pieceNum_;\r\n if (pathGetLength(path) > pathGetLength(other)) {\r\n return false;\r\n }\r\n while (i < path.pieces_.length) {\r\n if (path.pieces_[i] !== other.pieces_[j]) {\r\n return false;\r\n }\r\n ++i;\r\n ++j;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Dynamic (mutable) path used to count path lengths.\r\n *\r\n * This class is used to efficiently check paths for valid\r\n * length (in UTF8 bytes) and depth (used in path validation).\r\n *\r\n * Throws Error exception if path is ever invalid.\r\n *\r\n * The definition of a path always begins with '/'.\r\n */\r\nclass ValidationPath {\r\n /**\r\n * @param path - Initial Path.\r\n * @param errorPrefix_ - Prefix for any error messages.\r\n */\r\n constructor(path, errorPrefix_) {\r\n this.errorPrefix_ = errorPrefix_;\r\n this.parts_ = pathSlice(path, 0);\r\n /** Initialize to number of '/' chars needed in path. */\r\n this.byteLength_ = Math.max(1, this.parts_.length);\r\n for (let i = 0; i < this.parts_.length; i++) {\r\n this.byteLength_ += stringLength(this.parts_[i]);\r\n }\r\n validationPathCheckValid(this);\r\n }\r\n}\r\nfunction validationPathPush(validationPath, child) {\r\n // Count the needed '/'\r\n if (validationPath.parts_.length > 0) {\r\n validationPath.byteLength_ += 1;\r\n }\r\n validationPath.parts_.push(child);\r\n validationPath.byteLength_ += stringLength(child);\r\n validationPathCheckValid(validationPath);\r\n}\r\nfunction validationPathPop(validationPath) {\r\n const last = validationPath.parts_.pop();\r\n validationPath.byteLength_ -= stringLength(last);\r\n // Un-count the previous '/'\r\n if (validationPath.parts_.length > 0) {\r\n validationPath.byteLength_ -= 1;\r\n }\r\n}\r\nfunction validationPathCheckValid(validationPath) {\r\n if (validationPath.byteLength_ > MAX_PATH_LENGTH_BYTES) {\r\n throw new Error(validationPath.errorPrefix_ +\r\n 'has a key path longer than ' +\r\n MAX_PATH_LENGTH_BYTES +\r\n ' bytes (' +\r\n validationPath.byteLength_ +\r\n ').');\r\n }\r\n if (validationPath.parts_.length > MAX_PATH_DEPTH) {\r\n throw new Error(validationPath.errorPrefix_ +\r\n 'path specified exceeds the maximum depth that can be written (' +\r\n MAX_PATH_DEPTH +\r\n ') or object contains a cycle ' +\r\n validationPathToErrorString(validationPath));\r\n }\r\n}\r\n/**\r\n * String for use in error messages - uses '.' notation for path.\r\n */\r\nfunction validationPathToErrorString(validationPath) {\r\n if (validationPath.parts_.length === 0) {\r\n return '';\r\n }\r\n return \"in property '\" + validationPath.parts_.join('.') + \"'\";\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass VisibilityMonitor extends EventEmitter {\r\n constructor() {\r\n super(['visible']);\r\n let hidden;\r\n let visibilityChange;\r\n if (typeof document !== 'undefined' &&\r\n typeof document.addEventListener !== 'undefined') {\r\n if (typeof document['hidden'] !== 'undefined') {\r\n // Opera 12.10 and Firefox 18 and later support\r\n visibilityChange = 'visibilitychange';\r\n hidden = 'hidden';\r\n }\r\n else if (typeof document['mozHidden'] !== 'undefined') {\r\n visibilityChange = 'mozvisibilitychange';\r\n hidden = 'mozHidden';\r\n }\r\n else if (typeof document['msHidden'] !== 'undefined') {\r\n visibilityChange = 'msvisibilitychange';\r\n hidden = 'msHidden';\r\n }\r\n else if (typeof document['webkitHidden'] !== 'undefined') {\r\n visibilityChange = 'webkitvisibilitychange';\r\n hidden = 'webkitHidden';\r\n }\r\n }\r\n // Initially, we always assume we are visible. This ensures that in browsers\r\n // without page visibility support or in cases where we are never visible\r\n // (e.g. chrome extension), we act as if we are visible, i.e. don't delay\r\n // reconnects\r\n this.visible_ = true;\r\n if (visibilityChange) {\r\n document.addEventListener(visibilityChange, () => {\r\n const visible = !document[hidden];\r\n if (visible !== this.visible_) {\r\n this.visible_ = visible;\r\n this.trigger('visible', visible);\r\n }\r\n }, false);\r\n }\r\n }\r\n static getInstance() {\r\n return new VisibilityMonitor();\r\n }\r\n getInitialEvent(eventType) {\r\n assert(eventType === 'visible', 'Unknown event type: ' + eventType);\r\n return [this.visible_];\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst RECONNECT_MIN_DELAY = 1000;\r\nconst RECONNECT_MAX_DELAY_DEFAULT = 60 * 5 * 1000; // 5 minutes in milliseconds (Case: 1858)\r\nconst RECONNECT_MAX_DELAY_FOR_ADMINS = 30 * 1000; // 30 seconds for admin clients (likely to be a backend server)\r\nconst RECONNECT_DELAY_MULTIPLIER = 1.3;\r\nconst RECONNECT_DELAY_RESET_TIMEOUT = 30000; // Reset delay back to MIN_DELAY after being connected for 30sec.\r\nconst SERVER_KILL_INTERRUPT_REASON = 'server_kill';\r\n// If auth fails repeatedly, we'll assume something is wrong and log a warning / back off.\r\nconst INVALID_TOKEN_THRESHOLD = 3;\r\n/**\r\n * Firebase connection. Abstracts wire protocol and handles reconnecting.\r\n *\r\n * NOTE: All JSON objects sent to the realtime connection must have property names enclosed\r\n * in quotes to make sure the closure compiler does not minify them.\r\n */\r\nclass PersistentConnection extends ServerActions {\r\n /**\r\n * @param repoInfo_ - Data about the namespace we are connecting to\r\n * @param applicationId_ - The Firebase App ID for this project\r\n * @param onDataUpdate_ - A callback for new data from the server\r\n */\r\n constructor(repoInfo_, applicationId_, onDataUpdate_, onConnectStatus_, onServerInfoUpdate_, authTokenProvider_, appCheckTokenProvider_, authOverride_) {\r\n super();\r\n this.repoInfo_ = repoInfo_;\r\n this.applicationId_ = applicationId_;\r\n this.onDataUpdate_ = onDataUpdate_;\r\n this.onConnectStatus_ = onConnectStatus_;\r\n this.onServerInfoUpdate_ = onServerInfoUpdate_;\r\n this.authTokenProvider_ = authTokenProvider_;\r\n this.appCheckTokenProvider_ = appCheckTokenProvider_;\r\n this.authOverride_ = authOverride_;\r\n // Used for diagnostic logging.\r\n this.id = PersistentConnection.nextPersistentConnectionId_++;\r\n this.log_ = logWrapper('p:' + this.id + ':');\r\n this.interruptReasons_ = {};\r\n this.listens = new Map();\r\n this.outstandingPuts_ = [];\r\n this.outstandingGets_ = [];\r\n this.outstandingPutCount_ = 0;\r\n this.outstandingGetCount_ = 0;\r\n this.onDisconnectRequestQueue_ = [];\r\n this.connected_ = false;\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_DEFAULT;\r\n this.securityDebugCallback_ = null;\r\n this.lastSessionId = null;\r\n this.establishConnectionTimer_ = null;\r\n this.visible_ = false;\r\n // Before we get connected, we keep a queue of pending messages to send.\r\n this.requestCBHash_ = {};\r\n this.requestNumber_ = 0;\r\n this.realtime_ = null;\r\n this.authToken_ = null;\r\n this.appCheckToken_ = null;\r\n this.forceTokenRefresh_ = false;\r\n this.invalidAuthTokenCount_ = 0;\r\n this.invalidAppCheckTokenCount_ = 0;\r\n this.firstConnection_ = true;\r\n this.lastConnectionAttemptTime_ = null;\r\n this.lastConnectionEstablishedTime_ = null;\r\n if (authOverride_ && !isNodeSdk()) {\r\n throw new Error('Auth override specified in options, but not supported on non Node.js platforms');\r\n }\r\n VisibilityMonitor.getInstance().on('visible', this.onVisible_, this);\r\n if (repoInfo_.host.indexOf('fblocal') === -1) {\r\n OnlineMonitor.getInstance().on('online', this.onOnline_, this);\r\n }\r\n }\r\n sendRequest(action, body, onResponse) {\r\n const curReqNum = ++this.requestNumber_;\r\n const msg = { r: curReqNum, a: action, b: body };\r\n this.log_(stringify(msg));\r\n assert(this.connected_, \"sendRequest call when we're not connected not allowed.\");\r\n this.realtime_.sendRequest(msg);\r\n if (onResponse) {\r\n this.requestCBHash_[curReqNum] = onResponse;\r\n }\r\n }\r\n get(query) {\r\n this.initConnection_();\r\n const deferred = new Deferred();\r\n const request = {\r\n p: query._path.toString(),\r\n q: query._queryObject\r\n };\r\n const outstandingGet = {\r\n action: 'g',\r\n request,\r\n onComplete: (message) => {\r\n const payload = message['d'];\r\n if (message['s'] === 'ok') {\r\n deferred.resolve(payload);\r\n }\r\n else {\r\n deferred.reject(payload);\r\n }\r\n }\r\n };\r\n this.outstandingGets_.push(outstandingGet);\r\n this.outstandingGetCount_++;\r\n const index = this.outstandingGets_.length - 1;\r\n if (this.connected_) {\r\n this.sendGet_(index);\r\n }\r\n return deferred.promise;\r\n }\r\n listen(query, currentHashFn, tag, onComplete) {\r\n this.initConnection_();\r\n const queryId = query._queryIdentifier;\r\n const pathString = query._path.toString();\r\n this.log_('Listen called for ' + pathString + ' ' + queryId);\r\n if (!this.listens.has(pathString)) {\r\n this.listens.set(pathString, new Map());\r\n }\r\n assert(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'listen() called for non-default but complete query');\r\n assert(!this.listens.get(pathString).has(queryId), `listen() called twice for same path/queryId.`);\r\n const listenSpec = {\r\n onComplete,\r\n hashFn: currentHashFn,\r\n query,\r\n tag\r\n };\r\n this.listens.get(pathString).set(queryId, listenSpec);\r\n if (this.connected_) {\r\n this.sendListen_(listenSpec);\r\n }\r\n }\r\n sendGet_(index) {\r\n const get = this.outstandingGets_[index];\r\n this.sendRequest('g', get.request, (message) => {\r\n delete this.outstandingGets_[index];\r\n this.outstandingGetCount_--;\r\n if (this.outstandingGetCount_ === 0) {\r\n this.outstandingGets_ = [];\r\n }\r\n if (get.onComplete) {\r\n get.onComplete(message);\r\n }\r\n });\r\n }\r\n sendListen_(listenSpec) {\r\n const query = listenSpec.query;\r\n const pathString = query._path.toString();\r\n const queryId = query._queryIdentifier;\r\n this.log_('Listen on ' + pathString + ' for ' + queryId);\r\n const req = { /*path*/ p: pathString };\r\n const action = 'q';\r\n // Only bother to send query if it's non-default.\r\n if (listenSpec.tag) {\r\n req['q'] = query._queryObject;\r\n req['t'] = listenSpec.tag;\r\n }\r\n req[ /*hash*/'h'] = listenSpec.hashFn();\r\n this.sendRequest(action, req, (message) => {\r\n const payload = message[ /*data*/'d'];\r\n const status = message[ /*status*/'s'];\r\n // print warnings in any case...\r\n PersistentConnection.warnOnListenWarnings_(payload, query);\r\n const currentListenSpec = this.listens.get(pathString) &&\r\n this.listens.get(pathString).get(queryId);\r\n // only trigger actions if the listen hasn't been removed and readded\r\n if (currentListenSpec === listenSpec) {\r\n this.log_('listen response', message);\r\n if (status !== 'ok') {\r\n this.removeListen_(pathString, queryId);\r\n }\r\n if (listenSpec.onComplete) {\r\n listenSpec.onComplete(status, payload);\r\n }\r\n }\r\n });\r\n }\r\n static warnOnListenWarnings_(payload, query) {\r\n if (payload && typeof payload === 'object' && contains(payload, 'w')) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const warnings = safeGet(payload, 'w');\r\n if (Array.isArray(warnings) && ~warnings.indexOf('no_index')) {\r\n const indexSpec = '\".indexOn\": \"' + query._queryParams.getIndex().toString() + '\"';\r\n const indexPath = query._path.toString();\r\n warn(`Using an unspecified index. Your data will be downloaded and ` +\r\n `filtered on the client. Consider adding ${indexSpec} at ` +\r\n `${indexPath} to your security rules for better performance.`);\r\n }\r\n }\r\n }\r\n refreshAuthToken(token) {\r\n this.authToken_ = token;\r\n this.log_('Auth token refreshed');\r\n if (this.authToken_) {\r\n this.tryAuth();\r\n }\r\n else {\r\n //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete\r\n //the credential so we dont become authenticated next time we connect.\r\n if (this.connected_) {\r\n this.sendRequest('unauth', {}, () => { });\r\n }\r\n }\r\n this.reduceReconnectDelayIfAdminCredential_(token);\r\n }\r\n reduceReconnectDelayIfAdminCredential_(credential) {\r\n // NOTE: This isn't intended to be bulletproof (a malicious developer can always just modify the client).\r\n // Additionally, we don't bother resetting the max delay back to the default if auth fails / expires.\r\n const isFirebaseSecret = credential && credential.length === 40;\r\n if (isFirebaseSecret || isAdmin(credential)) {\r\n this.log_('Admin auth credential detected. Reducing max reconnect time.');\r\n this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n }\r\n }\r\n refreshAppCheckToken(token) {\r\n this.appCheckToken_ = token;\r\n this.log_('App check token refreshed');\r\n if (this.appCheckToken_) {\r\n this.tryAppCheck();\r\n }\r\n else {\r\n //If we're connected we want to let the server know to unauthenticate us.\r\n //If we're not connected, simply delete the credential so we dont become\r\n // authenticated next time we connect.\r\n if (this.connected_) {\r\n this.sendRequest('unappeck', {}, () => { });\r\n }\r\n }\r\n }\r\n /**\r\n * Attempts to authenticate with the given credentials. If the authentication attempt fails, it's triggered like\r\n * a auth revoked (the connection is closed).\r\n */\r\n tryAuth() {\r\n if (this.connected_ && this.authToken_) {\r\n const token = this.authToken_;\r\n const authMethod = isValidFormat(token) ? 'auth' : 'gauth';\r\n const requestData = { cred: token };\r\n if (this.authOverride_ === null) {\r\n requestData['noauth'] = true;\r\n }\r\n else if (typeof this.authOverride_ === 'object') {\r\n requestData['authvar'] = this.authOverride_;\r\n }\r\n this.sendRequest(authMethod, requestData, (res) => {\r\n const status = res[ /*status*/'s'];\r\n const data = res[ /*data*/'d'] || 'error';\r\n if (this.authToken_ === token) {\r\n if (status === 'ok') {\r\n this.invalidAuthTokenCount_ = 0;\r\n }\r\n else {\r\n // Triggers reconnect and force refresh for auth token\r\n this.onAuthRevoked_(status, data);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Attempts to authenticate with the given token. If the authentication\r\n * attempt fails, it's triggered like the token was revoked (the connection is\r\n * closed).\r\n */\r\n tryAppCheck() {\r\n if (this.connected_ && this.appCheckToken_) {\r\n this.sendRequest('appcheck', { 'token': this.appCheckToken_ }, (res) => {\r\n const status = res[ /*status*/'s'];\r\n const data = res[ /*data*/'d'] || 'error';\r\n if (status === 'ok') {\r\n this.invalidAppCheckTokenCount_ = 0;\r\n }\r\n else {\r\n this.onAppCheckRevoked_(status, data);\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * @inheritDoc\r\n */\r\n unlisten(query, tag) {\r\n const pathString = query._path.toString();\r\n const queryId = query._queryIdentifier;\r\n this.log_('Unlisten called for ' + pathString + ' ' + queryId);\r\n assert(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'unlisten() called for non-default but complete query');\r\n const listen = this.removeListen_(pathString, queryId);\r\n if (listen && this.connected_) {\r\n this.sendUnlisten_(pathString, queryId, query._queryObject, tag);\r\n }\r\n }\r\n sendUnlisten_(pathString, queryId, queryObj, tag) {\r\n this.log_('Unlisten on ' + pathString + ' for ' + queryId);\r\n const req = { /*path*/ p: pathString };\r\n const action = 'n';\r\n // Only bother sending queryId if it's non-default.\r\n if (tag) {\r\n req['q'] = queryObj;\r\n req['t'] = tag;\r\n }\r\n this.sendRequest(action, req);\r\n }\r\n onDisconnectPut(pathString, data, onComplete) {\r\n this.initConnection_();\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('o', pathString, data, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString,\r\n action: 'o',\r\n data,\r\n onComplete\r\n });\r\n }\r\n }\r\n onDisconnectMerge(pathString, data, onComplete) {\r\n this.initConnection_();\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('om', pathString, data, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString,\r\n action: 'om',\r\n data,\r\n onComplete\r\n });\r\n }\r\n }\r\n onDisconnectCancel(pathString, onComplete) {\r\n this.initConnection_();\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('oc', pathString, null, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString,\r\n action: 'oc',\r\n data: null,\r\n onComplete\r\n });\r\n }\r\n }\r\n sendOnDisconnect_(action, pathString, data, onComplete) {\r\n const request = { /*path*/ p: pathString, /*data*/ d: data };\r\n this.log_('onDisconnect ' + action, request);\r\n this.sendRequest(action, request, (response) => {\r\n if (onComplete) {\r\n setTimeout(() => {\r\n onComplete(response[ /*status*/'s'], response[ /* data */'d']);\r\n }, Math.floor(0));\r\n }\r\n });\r\n }\r\n put(pathString, data, onComplete, hash) {\r\n this.putInternal('p', pathString, data, onComplete, hash);\r\n }\r\n merge(pathString, data, onComplete, hash) {\r\n this.putInternal('m', pathString, data, onComplete, hash);\r\n }\r\n putInternal(action, pathString, data, onComplete, hash) {\r\n this.initConnection_();\r\n const request = {\r\n /*path*/ p: pathString,\r\n /*data*/ d: data\r\n };\r\n if (hash !== undefined) {\r\n request[ /*hash*/'h'] = hash;\r\n }\r\n // TODO: Only keep track of the most recent put for a given path?\r\n this.outstandingPuts_.push({\r\n action,\r\n request,\r\n onComplete\r\n });\r\n this.outstandingPutCount_++;\r\n const index = this.outstandingPuts_.length - 1;\r\n if (this.connected_) {\r\n this.sendPut_(index);\r\n }\r\n else {\r\n this.log_('Buffering put: ' + pathString);\r\n }\r\n }\r\n sendPut_(index) {\r\n const action = this.outstandingPuts_[index].action;\r\n const request = this.outstandingPuts_[index].request;\r\n const onComplete = this.outstandingPuts_[index].onComplete;\r\n this.outstandingPuts_[index].queued = this.connected_;\r\n this.sendRequest(action, request, (message) => {\r\n this.log_(action + ' response', message);\r\n delete this.outstandingPuts_[index];\r\n this.outstandingPutCount_--;\r\n // Clean up array occasionally.\r\n if (this.outstandingPutCount_ === 0) {\r\n this.outstandingPuts_ = [];\r\n }\r\n if (onComplete) {\r\n onComplete(message[ /*status*/'s'], message[ /* data */'d']);\r\n }\r\n });\r\n }\r\n reportStats(stats) {\r\n // If we're not connected, we just drop the stats.\r\n if (this.connected_) {\r\n const request = { /*counters*/ c: stats };\r\n this.log_('reportStats', request);\r\n this.sendRequest(/*stats*/ 's', request, result => {\r\n const status = result[ /*status*/'s'];\r\n if (status !== 'ok') {\r\n const errorReason = result[ /* data */'d'];\r\n this.log_('reportStats', 'Error sending stats: ' + errorReason);\r\n }\r\n });\r\n }\r\n }\r\n onDataMessage_(message) {\r\n if ('r' in message) {\r\n // this is a response\r\n this.log_('from server: ' + stringify(message));\r\n const reqNum = message['r'];\r\n const onResponse = this.requestCBHash_[reqNum];\r\n if (onResponse) {\r\n delete this.requestCBHash_[reqNum];\r\n onResponse(message[ /*body*/'b']);\r\n }\r\n }\r\n else if ('error' in message) {\r\n throw 'A server-side error has occurred: ' + message['error'];\r\n }\r\n else if ('a' in message) {\r\n // a and b are action and body, respectively\r\n this.onDataPush_(message['a'], message['b']);\r\n }\r\n }\r\n onDataPush_(action, body) {\r\n this.log_('handleServerMessage', action, body);\r\n if (action === 'd') {\r\n this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n /*isMerge*/ false, body['t']);\r\n }\r\n else if (action === 'm') {\r\n this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n /*isMerge=*/ true, body['t']);\r\n }\r\n else if (action === 'c') {\r\n this.onListenRevoked_(body[ /*path*/'p'], body[ /*query*/'q']);\r\n }\r\n else if (action === 'ac') {\r\n this.onAuthRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n }\r\n else if (action === 'apc') {\r\n this.onAppCheckRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n }\r\n else if (action === 'sd') {\r\n this.onSecurityDebugPacket_(body);\r\n }\r\n else {\r\n error('Unrecognized action received from server: ' +\r\n stringify(action) +\r\n '\\nAre you using the latest client?');\r\n }\r\n }\r\n onReady_(timestamp, sessionId) {\r\n this.log_('connection ready');\r\n this.connected_ = true;\r\n this.lastConnectionEstablishedTime_ = new Date().getTime();\r\n this.handleTimestamp_(timestamp);\r\n this.lastSessionId = sessionId;\r\n if (this.firstConnection_) {\r\n this.sendConnectStats_();\r\n }\r\n this.restoreState_();\r\n this.firstConnection_ = false;\r\n this.onConnectStatus_(true);\r\n }\r\n scheduleConnect_(timeout) {\r\n assert(!this.realtime_, \"Scheduling a connect when we're already connected/ing?\");\r\n if (this.establishConnectionTimer_) {\r\n clearTimeout(this.establishConnectionTimer_);\r\n }\r\n // NOTE: Even when timeout is 0, it's important to do a setTimeout to work around an infuriating \"Security Error\" in\r\n // Firefox when trying to write to our long-polling iframe in some scenarios (e.g. Forge or our unit tests).\r\n this.establishConnectionTimer_ = setTimeout(() => {\r\n this.establishConnectionTimer_ = null;\r\n this.establishConnection_();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(timeout));\r\n }\r\n initConnection_() {\r\n if (!this.realtime_ && this.firstConnection_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n onVisible_(visible) {\r\n // NOTE: Tabbing away and back to a window will defeat our reconnect backoff, but I think that's fine.\r\n if (visible &&\r\n !this.visible_ &&\r\n this.reconnectDelay_ === this.maxReconnectDelay_) {\r\n this.log_('Window became visible. Reducing delay.');\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n this.visible_ = visible;\r\n }\r\n onOnline_(online) {\r\n if (online) {\r\n this.log_('Browser went online.');\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n else {\r\n this.log_('Browser went offline. Killing connection.');\r\n if (this.realtime_) {\r\n this.realtime_.close();\r\n }\r\n }\r\n }\r\n onRealtimeDisconnect_() {\r\n this.log_('data client disconnected');\r\n this.connected_ = false;\r\n this.realtime_ = null;\r\n // Since we don't know if our sent transactions succeeded or not, we need to cancel them.\r\n this.cancelSentTransactions_();\r\n // Clear out the pending requests.\r\n this.requestCBHash_ = {};\r\n if (this.shouldReconnect_()) {\r\n if (!this.visible_) {\r\n this.log_(\"Window isn't visible. Delaying reconnect.\");\r\n this.reconnectDelay_ = this.maxReconnectDelay_;\r\n this.lastConnectionAttemptTime_ = new Date().getTime();\r\n }\r\n else if (this.lastConnectionEstablishedTime_) {\r\n // If we've been connected long enough, reset reconnect delay to minimum.\r\n const timeSinceLastConnectSucceeded = new Date().getTime() - this.lastConnectionEstablishedTime_;\r\n if (timeSinceLastConnectSucceeded > RECONNECT_DELAY_RESET_TIMEOUT) {\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n }\r\n this.lastConnectionEstablishedTime_ = null;\r\n }\r\n const timeSinceLastConnectAttempt = new Date().getTime() - this.lastConnectionAttemptTime_;\r\n let reconnectDelay = Math.max(0, this.reconnectDelay_ - timeSinceLastConnectAttempt);\r\n reconnectDelay = Math.random() * reconnectDelay;\r\n this.log_('Trying to reconnect in ' + reconnectDelay + 'ms');\r\n this.scheduleConnect_(reconnectDelay);\r\n // Adjust reconnect delay for next time.\r\n this.reconnectDelay_ = Math.min(this.maxReconnectDelay_, this.reconnectDelay_ * RECONNECT_DELAY_MULTIPLIER);\r\n }\r\n this.onConnectStatus_(false);\r\n }\r\n async establishConnection_() {\r\n if (this.shouldReconnect_()) {\r\n this.log_('Making a connection attempt');\r\n this.lastConnectionAttemptTime_ = new Date().getTime();\r\n this.lastConnectionEstablishedTime_ = null;\r\n const onDataMessage = this.onDataMessage_.bind(this);\r\n const onReady = this.onReady_.bind(this);\r\n const onDisconnect = this.onRealtimeDisconnect_.bind(this);\r\n const connId = this.id + ':' + PersistentConnection.nextConnectionId_++;\r\n const lastSessionId = this.lastSessionId;\r\n let canceled = false;\r\n let connection = null;\r\n const closeFn = function () {\r\n if (connection) {\r\n connection.close();\r\n }\r\n else {\r\n canceled = true;\r\n onDisconnect();\r\n }\r\n };\r\n const sendRequestFn = function (msg) {\r\n assert(connection, \"sendRequest call when we're not connected not allowed.\");\r\n connection.sendRequest(msg);\r\n };\r\n this.realtime_ = {\r\n close: closeFn,\r\n sendRequest: sendRequestFn\r\n };\r\n const forceRefresh = this.forceTokenRefresh_;\r\n this.forceTokenRefresh_ = false;\r\n try {\r\n // First fetch auth and app check token, and establish connection after\r\n // fetching the token was successful\r\n const [authToken, appCheckToken] = await Promise.all([\r\n this.authTokenProvider_.getToken(forceRefresh),\r\n this.appCheckTokenProvider_.getToken(forceRefresh)\r\n ]);\r\n if (!canceled) {\r\n log('getToken() completed. Creating connection.');\r\n this.authToken_ = authToken && authToken.accessToken;\r\n this.appCheckToken_ = appCheckToken && appCheckToken.token;\r\n connection = new Connection(connId, this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, onDataMessage, onReady, onDisconnect, \r\n /* onKill= */ reason => {\r\n warn(reason + ' (' + this.repoInfo_.toString() + ')');\r\n this.interrupt(SERVER_KILL_INTERRUPT_REASON);\r\n }, lastSessionId);\r\n }\r\n else {\r\n log('getToken() completed but was canceled');\r\n }\r\n }\r\n catch (error) {\r\n this.log_('Failed to get token: ' + error);\r\n if (!canceled) {\r\n if (this.repoInfo_.nodeAdmin) {\r\n // This may be a critical error for the Admin Node.js SDK, so log a warning.\r\n // But getToken() may also just have temporarily failed, so we still want to\r\n // continue retrying.\r\n warn(error);\r\n }\r\n closeFn();\r\n }\r\n }\r\n }\r\n }\r\n interrupt(reason) {\r\n log('Interrupting connection for reason: ' + reason);\r\n this.interruptReasons_[reason] = true;\r\n if (this.realtime_) {\r\n this.realtime_.close();\r\n }\r\n else {\r\n if (this.establishConnectionTimer_) {\r\n clearTimeout(this.establishConnectionTimer_);\r\n this.establishConnectionTimer_ = null;\r\n }\r\n if (this.connected_) {\r\n this.onRealtimeDisconnect_();\r\n }\r\n }\r\n }\r\n resume(reason) {\r\n log('Resuming connection for reason: ' + reason);\r\n delete this.interruptReasons_[reason];\r\n if (isEmpty(this.interruptReasons_)) {\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n }\r\n handleTimestamp_(timestamp) {\r\n const delta = timestamp - new Date().getTime();\r\n this.onServerInfoUpdate_({ serverTimeOffset: delta });\r\n }\r\n cancelSentTransactions_() {\r\n for (let i = 0; i < this.outstandingPuts_.length; i++) {\r\n const put = this.outstandingPuts_[i];\r\n if (put && /*hash*/ 'h' in put.request && put.queued) {\r\n if (put.onComplete) {\r\n put.onComplete('disconnect');\r\n }\r\n delete this.outstandingPuts_[i];\r\n this.outstandingPutCount_--;\r\n }\r\n }\r\n // Clean up array occasionally.\r\n if (this.outstandingPutCount_ === 0) {\r\n this.outstandingPuts_ = [];\r\n }\r\n }\r\n onListenRevoked_(pathString, query) {\r\n // Remove the listen and manufacture a \"permission_denied\" error for the failed listen.\r\n let queryId;\r\n if (!query) {\r\n queryId = 'default';\r\n }\r\n else {\r\n queryId = query.map(q => ObjectToUniqueKey(q)).join('$');\r\n }\r\n const listen = this.removeListen_(pathString, queryId);\r\n if (listen && listen.onComplete) {\r\n listen.onComplete('permission_denied');\r\n }\r\n }\r\n removeListen_(pathString, queryId) {\r\n const normalizedPathString = new Path(pathString).toString(); // normalize path.\r\n let listen;\r\n if (this.listens.has(normalizedPathString)) {\r\n const map = this.listens.get(normalizedPathString);\r\n listen = map.get(queryId);\r\n map.delete(queryId);\r\n if (map.size === 0) {\r\n this.listens.delete(normalizedPathString);\r\n }\r\n }\r\n else {\r\n // all listens for this path has already been removed\r\n listen = undefined;\r\n }\r\n return listen;\r\n }\r\n onAuthRevoked_(statusCode, explanation) {\r\n log('Auth token revoked: ' + statusCode + '/' + explanation);\r\n this.authToken_ = null;\r\n this.forceTokenRefresh_ = true;\r\n this.realtime_.close();\r\n if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n // We'll wait a couple times before logging the warning / increasing the\r\n // retry period since oauth tokens will report as \"invalid\" if they're\r\n // just expired. Plus there may be transient issues that resolve themselves.\r\n this.invalidAuthTokenCount_++;\r\n if (this.invalidAuthTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\r\n // Set a long reconnect delay because recovery is unlikely\r\n this.reconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n // Notify the auth token provider that the token is invalid, which will log\r\n // a warning\r\n this.authTokenProvider_.notifyForInvalidToken();\r\n }\r\n }\r\n }\r\n onAppCheckRevoked_(statusCode, explanation) {\r\n log('App check token revoked: ' + statusCode + '/' + explanation);\r\n this.appCheckToken_ = null;\r\n this.forceTokenRefresh_ = true;\r\n // Note: We don't close the connection as the developer may not have\r\n // enforcement enabled. The backend closes connections with enforcements.\r\n if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n // We'll wait a couple times before logging the warning / increasing the\r\n // retry period since oauth tokens will report as \"invalid\" if they're\r\n // just expired. Plus there may be transient issues that resolve themselves.\r\n this.invalidAppCheckTokenCount_++;\r\n if (this.invalidAppCheckTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\r\n this.appCheckTokenProvider_.notifyForInvalidToken();\r\n }\r\n }\r\n }\r\n onSecurityDebugPacket_(body) {\r\n if (this.securityDebugCallback_) {\r\n this.securityDebugCallback_(body);\r\n }\r\n else {\r\n if ('msg' in body) {\r\n console.log('FIREBASE: ' + body['msg'].replace('\\n', '\\nFIREBASE: '));\r\n }\r\n }\r\n }\r\n restoreState_() {\r\n //Re-authenticate ourselves if we have a credential stored.\r\n this.tryAuth();\r\n this.tryAppCheck();\r\n // Puts depend on having received the corresponding data update from the server before they complete, so we must\r\n // make sure to send listens before puts.\r\n for (const queries of this.listens.values()) {\r\n for (const listenSpec of queries.values()) {\r\n this.sendListen_(listenSpec);\r\n }\r\n }\r\n for (let i = 0; i < this.outstandingPuts_.length; i++) {\r\n if (this.outstandingPuts_[i]) {\r\n this.sendPut_(i);\r\n }\r\n }\r\n while (this.onDisconnectRequestQueue_.length) {\r\n const request = this.onDisconnectRequestQueue_.shift();\r\n this.sendOnDisconnect_(request.action, request.pathString, request.data, request.onComplete);\r\n }\r\n for (let i = 0; i < this.outstandingGets_.length; i++) {\r\n if (this.outstandingGets_[i]) {\r\n this.sendGet_(i);\r\n }\r\n }\r\n }\r\n /**\r\n * Sends client stats for first connection\r\n */\r\n sendConnectStats_() {\r\n const stats = {};\r\n let clientName = 'js';\r\n if (isNodeSdk()) {\r\n if (this.repoInfo_.nodeAdmin) {\r\n clientName = 'admin_node';\r\n }\r\n else {\r\n clientName = 'node';\r\n }\r\n }\r\n stats['sdk.' + clientName + '.' + SDK_VERSION.replace(/\\./g, '-')] = 1;\r\n if (isMobileCordova()) {\r\n stats['framework.cordova'] = 1;\r\n }\r\n else if (isReactNative()) {\r\n stats['framework.reactnative'] = 1;\r\n }\r\n this.reportStats(stats);\r\n }\r\n shouldReconnect_() {\r\n const online = OnlineMonitor.getInstance().currentlyOnline();\r\n return isEmpty(this.interruptReasons_) && online;\r\n }\r\n}\r\nPersistentConnection.nextPersistentConnectionId_ = 0;\r\n/**\r\n * Counter for number of connections created. Mainly used for tagging in the logs\r\n */\r\nPersistentConnection.nextConnectionId_ = 0;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass NamedNode {\r\n constructor(name, node) {\r\n this.name = name;\r\n this.node = node;\r\n }\r\n static Wrap(name, node) {\r\n return new NamedNode(name, node);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Index {\r\n /**\r\n * @returns A standalone comparison function for\r\n * this index\r\n */\r\n getCompare() {\r\n return this.compare.bind(this);\r\n }\r\n /**\r\n * Given a before and after value for a node, determine if the indexed value has changed. Even if they are different,\r\n * it's possible that the changes are isolated to parts of the snapshot that are not indexed.\r\n *\r\n *\r\n * @returns True if the portion of the snapshot being indexed changed between oldNode and newNode\r\n */\r\n indexedValueChanged(oldNode, newNode) {\r\n const oldWrapped = new NamedNode(MIN_NAME, oldNode);\r\n const newWrapped = new NamedNode(MIN_NAME, newNode);\r\n return this.compare(oldWrapped, newWrapped) !== 0;\r\n }\r\n /**\r\n * @returns a node wrapper that will sort equal to or less than\r\n * any other node wrapper, using this index\r\n */\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet __EMPTY_NODE;\r\nclass KeyIndex extends Index {\r\n static get __EMPTY_NODE() {\r\n return __EMPTY_NODE;\r\n }\r\n static set __EMPTY_NODE(val) {\r\n __EMPTY_NODE = val;\r\n }\r\n compare(a, b) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n isDefinedOn(node) {\r\n // We could probably return true here (since every node has a key), but it's never called\r\n // so just leaving unimplemented for now.\r\n throw assertionError('KeyIndex.isDefinedOn not expected to be called.');\r\n }\r\n indexedValueChanged(oldNode, newNode) {\r\n return false; // The key for a node never changes.\r\n }\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n maxPost() {\r\n // TODO: This should really be created once and cached in a static property, but\r\n // NamedNode isn't defined yet, so I can't use it in a static. Bleh.\r\n return new NamedNode(MAX_NAME, __EMPTY_NODE);\r\n }\r\n makePost(indexValue, name) {\r\n assert(typeof indexValue === 'string', 'KeyIndex indexValue must always be a string.');\r\n // We just use empty node, but it'll never be compared, since our comparator only looks at name.\r\n return new NamedNode(indexValue, __EMPTY_NODE);\r\n }\r\n /**\r\n * @returns String representation for inclusion in a query spec\r\n */\r\n toString() {\r\n return '.key';\r\n }\r\n}\r\nconst KEY_INDEX = new KeyIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An iterator over an LLRBNode.\r\n */\r\nclass SortedMapIterator {\r\n /**\r\n * @param node - Node to iterate.\r\n * @param isReverse_ - Whether or not to iterate in reverse\r\n */\r\n constructor(node, startKey, comparator, isReverse_, resultGenerator_ = null) {\r\n this.isReverse_ = isReverse_;\r\n this.resultGenerator_ = resultGenerator_;\r\n this.nodeStack_ = [];\r\n let cmp = 1;\r\n while (!node.isEmpty()) {\r\n node = node;\r\n cmp = startKey ? comparator(node.key, startKey) : 1;\r\n // flip the comparison if we're going in reverse\r\n if (isReverse_) {\r\n cmp *= -1;\r\n }\r\n if (cmp < 0) {\r\n // This node is less than our start key. ignore it\r\n if (this.isReverse_) {\r\n node = node.left;\r\n }\r\n else {\r\n node = node.right;\r\n }\r\n }\r\n else if (cmp === 0) {\r\n // This node is exactly equal to our start key. Push it on the stack, but stop iterating;\r\n this.nodeStack_.push(node);\r\n break;\r\n }\r\n else {\r\n // This node is greater than our start key, add it to the stack and move to the next one\r\n this.nodeStack_.push(node);\r\n if (this.isReverse_) {\r\n node = node.right;\r\n }\r\n else {\r\n node = node.left;\r\n }\r\n }\r\n }\r\n }\r\n getNext() {\r\n if (this.nodeStack_.length === 0) {\r\n return null;\r\n }\r\n let node = this.nodeStack_.pop();\r\n let result;\r\n if (this.resultGenerator_) {\r\n result = this.resultGenerator_(node.key, node.value);\r\n }\r\n else {\r\n result = { key: node.key, value: node.value };\r\n }\r\n if (this.isReverse_) {\r\n node = node.left;\r\n while (!node.isEmpty()) {\r\n this.nodeStack_.push(node);\r\n node = node.right;\r\n }\r\n }\r\n else {\r\n node = node.right;\r\n while (!node.isEmpty()) {\r\n this.nodeStack_.push(node);\r\n node = node.left;\r\n }\r\n }\r\n return result;\r\n }\r\n hasNext() {\r\n return this.nodeStack_.length > 0;\r\n }\r\n peek() {\r\n if (this.nodeStack_.length === 0) {\r\n return null;\r\n }\r\n const node = this.nodeStack_[this.nodeStack_.length - 1];\r\n if (this.resultGenerator_) {\r\n return this.resultGenerator_(node.key, node.value);\r\n }\r\n else {\r\n return { key: node.key, value: node.value };\r\n }\r\n }\r\n}\r\n/**\r\n * Represents a node in a Left-leaning Red-Black tree.\r\n */\r\nclass LLRBNode {\r\n /**\r\n * @param key - Key associated with this node.\r\n * @param value - Value associated with this node.\r\n * @param color - Whether this node is red.\r\n * @param left - Left child.\r\n * @param right - Right child.\r\n */\r\n constructor(key, value, color, left, right) {\r\n this.key = key;\r\n this.value = value;\r\n this.color = color != null ? color : LLRBNode.RED;\r\n this.left =\r\n left != null ? left : SortedMap.EMPTY_NODE;\r\n this.right =\r\n right != null ? right : SortedMap.EMPTY_NODE;\r\n }\r\n /**\r\n * Returns a copy of the current node, optionally replacing pieces of it.\r\n *\r\n * @param key - New key for the node, or null.\r\n * @param value - New value for the node, or null.\r\n * @param color - New color for the node, or null.\r\n * @param left - New left child for the node, or null.\r\n * @param right - New right child for the node, or null.\r\n * @returns The node copy.\r\n */\r\n copy(key, value, color, left, right) {\r\n return new LLRBNode(key != null ? key : this.key, value != null ? value : this.value, color != null ? color : this.color, left != null ? left : this.left, right != null ? right : this.right);\r\n }\r\n /**\r\n * @returns The total number of nodes in the tree.\r\n */\r\n count() {\r\n return this.left.count() + 1 + this.right.count();\r\n }\r\n /**\r\n * @returns True if the tree is empty.\r\n */\r\n isEmpty() {\r\n return false;\r\n }\r\n /**\r\n * Traverses the tree in key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns The first truthy value returned by action, or the last falsey\r\n * value returned by action\r\n */\r\n inorderTraversal(action) {\r\n return (this.left.inorderTraversal(action) ||\r\n !!action(this.key, this.value) ||\r\n this.right.inorderTraversal(action));\r\n }\r\n /**\r\n * Traverses the tree in reverse key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns True if traversal was aborted.\r\n */\r\n reverseTraversal(action) {\r\n return (this.right.reverseTraversal(action) ||\r\n action(this.key, this.value) ||\r\n this.left.reverseTraversal(action));\r\n }\r\n /**\r\n * @returns The minimum node in the tree.\r\n */\r\n min_() {\r\n if (this.left.isEmpty()) {\r\n return this;\r\n }\r\n else {\r\n return this.left.min_();\r\n }\r\n }\r\n /**\r\n * @returns The maximum key in the tree.\r\n */\r\n minKey() {\r\n return this.min_().key;\r\n }\r\n /**\r\n * @returns The maximum key in the tree.\r\n */\r\n maxKey() {\r\n if (this.right.isEmpty()) {\r\n return this.key;\r\n }\r\n else {\r\n return this.right.maxKey();\r\n }\r\n }\r\n /**\r\n * @param key - Key to insert.\r\n * @param value - Value to insert.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with the key/value added.\r\n */\r\n insert(key, value, comparator) {\r\n let n = this;\r\n const cmp = comparator(key, n.key);\r\n if (cmp < 0) {\r\n n = n.copy(null, null, null, n.left.insert(key, value, comparator), null);\r\n }\r\n else if (cmp === 0) {\r\n n = n.copy(null, value, null, null, null);\r\n }\r\n else {\r\n n = n.copy(null, null, null, null, n.right.insert(key, value, comparator));\r\n }\r\n return n.fixUp_();\r\n }\r\n /**\r\n * @returns New tree, with the minimum key removed.\r\n */\r\n removeMin_() {\r\n if (this.left.isEmpty()) {\r\n return SortedMap.EMPTY_NODE;\r\n }\r\n let n = this;\r\n if (!n.left.isRed_() && !n.left.left.isRed_()) {\r\n n = n.moveRedLeft_();\r\n }\r\n n = n.copy(null, null, null, n.left.removeMin_(), null);\r\n return n.fixUp_();\r\n }\r\n /**\r\n * @param key - The key of the item to remove.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with the specified item removed.\r\n */\r\n remove(key, comparator) {\r\n let n, smallest;\r\n n = this;\r\n if (comparator(key, n.key) < 0) {\r\n if (!n.left.isEmpty() && !n.left.isRed_() && !n.left.left.isRed_()) {\r\n n = n.moveRedLeft_();\r\n }\r\n n = n.copy(null, null, null, n.left.remove(key, comparator), null);\r\n }\r\n else {\r\n if (n.left.isRed_()) {\r\n n = n.rotateRight_();\r\n }\r\n if (!n.right.isEmpty() && !n.right.isRed_() && !n.right.left.isRed_()) {\r\n n = n.moveRedRight_();\r\n }\r\n if (comparator(key, n.key) === 0) {\r\n if (n.right.isEmpty()) {\r\n return SortedMap.EMPTY_NODE;\r\n }\r\n else {\r\n smallest = n.right.min_();\r\n n = n.copy(smallest.key, smallest.value, null, null, n.right.removeMin_());\r\n }\r\n }\r\n n = n.copy(null, null, null, null, n.right.remove(key, comparator));\r\n }\r\n return n.fixUp_();\r\n }\r\n /**\r\n * @returns Whether this is a RED node.\r\n */\r\n isRed_() {\r\n return this.color;\r\n }\r\n /**\r\n * @returns New tree after performing any needed rotations.\r\n */\r\n fixUp_() {\r\n let n = this;\r\n if (n.right.isRed_() && !n.left.isRed_()) {\r\n n = n.rotateLeft_();\r\n }\r\n if (n.left.isRed_() && n.left.left.isRed_()) {\r\n n = n.rotateRight_();\r\n }\r\n if (n.left.isRed_() && n.right.isRed_()) {\r\n n = n.colorFlip_();\r\n }\r\n return n;\r\n }\r\n /**\r\n * @returns New tree, after moveRedLeft.\r\n */\r\n moveRedLeft_() {\r\n let n = this.colorFlip_();\r\n if (n.right.left.isRed_()) {\r\n n = n.copy(null, null, null, null, n.right.rotateRight_());\r\n n = n.rotateLeft_();\r\n n = n.colorFlip_();\r\n }\r\n return n;\r\n }\r\n /**\r\n * @returns New tree, after moveRedRight.\r\n */\r\n moveRedRight_() {\r\n let n = this.colorFlip_();\r\n if (n.left.left.isRed_()) {\r\n n = n.rotateRight_();\r\n n = n.colorFlip_();\r\n }\r\n return n;\r\n }\r\n /**\r\n * @returns New tree, after rotateLeft.\r\n */\r\n rotateLeft_() {\r\n const nl = this.copy(null, null, LLRBNode.RED, null, this.right.left);\r\n return this.right.copy(null, null, this.color, nl, null);\r\n }\r\n /**\r\n * @returns New tree, after rotateRight.\r\n */\r\n rotateRight_() {\r\n const nr = this.copy(null, null, LLRBNode.RED, this.left.right, null);\r\n return this.left.copy(null, null, this.color, null, nr);\r\n }\r\n /**\r\n * @returns Newt ree, after colorFlip.\r\n */\r\n colorFlip_() {\r\n const left = this.left.copy(null, null, !this.left.color, null, null);\r\n const right = this.right.copy(null, null, !this.right.color, null, null);\r\n return this.copy(null, null, !this.color, left, right);\r\n }\r\n /**\r\n * For testing.\r\n *\r\n * @returns True if all is well.\r\n */\r\n checkMaxDepth_() {\r\n const blackDepth = this.check_();\r\n return Math.pow(2.0, blackDepth) <= this.count() + 1;\r\n }\r\n check_() {\r\n if (this.isRed_() && this.left.isRed_()) {\r\n throw new Error('Red node has red child(' + this.key + ',' + this.value + ')');\r\n }\r\n if (this.right.isRed_()) {\r\n throw new Error('Right child of (' + this.key + ',' + this.value + ') is red');\r\n }\r\n const blackDepth = this.left.check_();\r\n if (blackDepth !== this.right.check_()) {\r\n throw new Error('Black depths differ');\r\n }\r\n else {\r\n return blackDepth + (this.isRed_() ? 0 : 1);\r\n }\r\n }\r\n}\r\nLLRBNode.RED = true;\r\nLLRBNode.BLACK = false;\r\n/**\r\n * Represents an empty node (a leaf node in the Red-Black Tree).\r\n */\r\nclass LLRBEmptyNode {\r\n /**\r\n * Returns a copy of the current node.\r\n *\r\n * @returns The node copy.\r\n */\r\n copy(key, value, color, left, right) {\r\n return this;\r\n }\r\n /**\r\n * Returns a copy of the tree, with the specified key/value added.\r\n *\r\n * @param key - Key to be added.\r\n * @param value - Value to be added.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with item added.\r\n */\r\n insert(key, value, comparator) {\r\n return new LLRBNode(key, value, null);\r\n }\r\n /**\r\n * Returns a copy of the tree, with the specified key removed.\r\n *\r\n * @param key - The key to remove.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with item removed.\r\n */\r\n remove(key, comparator) {\r\n return this;\r\n }\r\n /**\r\n * @returns The total number of nodes in the tree.\r\n */\r\n count() {\r\n return 0;\r\n }\r\n /**\r\n * @returns True if the tree is empty.\r\n */\r\n isEmpty() {\r\n return true;\r\n }\r\n /**\r\n * Traverses the tree in key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns True if traversal was aborted.\r\n */\r\n inorderTraversal(action) {\r\n return false;\r\n }\r\n /**\r\n * Traverses the tree in reverse key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns True if traversal was aborted.\r\n */\r\n reverseTraversal(action) {\r\n return false;\r\n }\r\n minKey() {\r\n return null;\r\n }\r\n maxKey() {\r\n return null;\r\n }\r\n check_() {\r\n return 0;\r\n }\r\n /**\r\n * @returns Whether this node is red.\r\n */\r\n isRed_() {\r\n return false;\r\n }\r\n}\r\n/**\r\n * An immutable sorted map implementation, based on a Left-leaning Red-Black\r\n * tree.\r\n */\r\nclass SortedMap {\r\n /**\r\n * @param comparator_ - Key comparator.\r\n * @param root_ - Optional root node for the map.\r\n */\r\n constructor(comparator_, root_ = SortedMap.EMPTY_NODE) {\r\n this.comparator_ = comparator_;\r\n this.root_ = root_;\r\n }\r\n /**\r\n * Returns a copy of the map, with the specified key/value added or replaced.\r\n * (TODO: We should perhaps rename this method to 'put')\r\n *\r\n * @param key - Key to be added.\r\n * @param value - Value to be added.\r\n * @returns New map, with item added.\r\n */\r\n insert(key, value) {\r\n return new SortedMap(this.comparator_, this.root_\r\n .insert(key, value, this.comparator_)\r\n .copy(null, null, LLRBNode.BLACK, null, null));\r\n }\r\n /**\r\n * Returns a copy of the map, with the specified key removed.\r\n *\r\n * @param key - The key to remove.\r\n * @returns New map, with item removed.\r\n */\r\n remove(key) {\r\n return new SortedMap(this.comparator_, this.root_\r\n .remove(key, this.comparator_)\r\n .copy(null, null, LLRBNode.BLACK, null, null));\r\n }\r\n /**\r\n * Returns the value of the node with the given key, or null.\r\n *\r\n * @param key - The key to look up.\r\n * @returns The value of the node with the given key, or null if the\r\n * key doesn't exist.\r\n */\r\n get(key) {\r\n let cmp;\r\n let node = this.root_;\r\n while (!node.isEmpty()) {\r\n cmp = this.comparator_(key, node.key);\r\n if (cmp === 0) {\r\n return node.value;\r\n }\r\n else if (cmp < 0) {\r\n node = node.left;\r\n }\r\n else if (cmp > 0) {\r\n node = node.right;\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Returns the key of the item *before* the specified key, or null if key is the first item.\r\n * @param key - The key to find the predecessor of\r\n * @returns The predecessor key.\r\n */\r\n getPredecessorKey(key) {\r\n let cmp, node = this.root_, rightParent = null;\r\n while (!node.isEmpty()) {\r\n cmp = this.comparator_(key, node.key);\r\n if (cmp === 0) {\r\n if (!node.left.isEmpty()) {\r\n node = node.left;\r\n while (!node.right.isEmpty()) {\r\n node = node.right;\r\n }\r\n return node.key;\r\n }\r\n else if (rightParent) {\r\n return rightParent.key;\r\n }\r\n else {\r\n return null; // first item.\r\n }\r\n }\r\n else if (cmp < 0) {\r\n node = node.left;\r\n }\r\n else if (cmp > 0) {\r\n rightParent = node;\r\n node = node.right;\r\n }\r\n }\r\n throw new Error('Attempted to find predecessor key for a nonexistent key. What gives?');\r\n }\r\n /**\r\n * @returns True if the map is empty.\r\n */\r\n isEmpty() {\r\n return this.root_.isEmpty();\r\n }\r\n /**\r\n * @returns The total number of nodes in the map.\r\n */\r\n count() {\r\n return this.root_.count();\r\n }\r\n /**\r\n * @returns The minimum key in the map.\r\n */\r\n minKey() {\r\n return this.root_.minKey();\r\n }\r\n /**\r\n * @returns The maximum key in the map.\r\n */\r\n maxKey() {\r\n return this.root_.maxKey();\r\n }\r\n /**\r\n * Traverses the map in key order and calls the specified action function\r\n * for each key/value pair.\r\n *\r\n * @param action - Callback function to be called\r\n * for each key/value pair. If action returns true, traversal is aborted.\r\n * @returns The first truthy value returned by action, or the last falsey\r\n * value returned by action\r\n */\r\n inorderTraversal(action) {\r\n return this.root_.inorderTraversal(action);\r\n }\r\n /**\r\n * Traverses the map in reverse key order and calls the specified action function\r\n * for each key/value pair.\r\n *\r\n * @param action - Callback function to be called\r\n * for each key/value pair. If action returns true, traversal is aborted.\r\n * @returns True if the traversal was aborted.\r\n */\r\n reverseTraversal(action) {\r\n return this.root_.reverseTraversal(action);\r\n }\r\n /**\r\n * Returns an iterator over the SortedMap.\r\n * @returns The iterator.\r\n */\r\n getIterator(resultGenerator) {\r\n return new SortedMapIterator(this.root_, null, this.comparator_, false, resultGenerator);\r\n }\r\n getIteratorFrom(key, resultGenerator) {\r\n return new SortedMapIterator(this.root_, key, this.comparator_, false, resultGenerator);\r\n }\r\n getReverseIteratorFrom(key, resultGenerator) {\r\n return new SortedMapIterator(this.root_, key, this.comparator_, true, resultGenerator);\r\n }\r\n getReverseIterator(resultGenerator) {\r\n return new SortedMapIterator(this.root_, null, this.comparator_, true, resultGenerator);\r\n }\r\n}\r\n/**\r\n * Always use the same empty node, to reduce memory.\r\n */\r\nSortedMap.EMPTY_NODE = new LLRBEmptyNode();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction NAME_ONLY_COMPARATOR(left, right) {\r\n return nameCompare(left.name, right.name);\r\n}\r\nfunction NAME_COMPARATOR(left, right) {\r\n return nameCompare(left, right);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet MAX_NODE$2;\r\nfunction setMaxNode$1(val) {\r\n MAX_NODE$2 = val;\r\n}\r\nconst priorityHashText = function (priority) {\r\n if (typeof priority === 'number') {\r\n return 'number:' + doubleToIEEE754String(priority);\r\n }\r\n else {\r\n return 'string:' + priority;\r\n }\r\n};\r\n/**\r\n * Validates that a priority snapshot Node is valid.\r\n */\r\nconst validatePriorityNode = function (priorityNode) {\r\n if (priorityNode.isLeafNode()) {\r\n const val = priorityNode.val();\r\n assert(typeof val === 'string' ||\r\n typeof val === 'number' ||\r\n (typeof val === 'object' && contains(val, '.sv')), 'Priority must be a string or number.');\r\n }\r\n else {\r\n assert(priorityNode === MAX_NODE$2 || priorityNode.isEmpty(), 'priority of unexpected type.');\r\n }\r\n // Don't call getPriority() on MAX_NODE to avoid hitting assertion.\r\n assert(priorityNode === MAX_NODE$2 || priorityNode.getPriority().isEmpty(), \"Priority nodes can't have a priority of their own.\");\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet __childrenNodeConstructor;\r\n/**\r\n * LeafNode is a class for storing leaf nodes in a DataSnapshot. It\r\n * implements Node and stores the value of the node (a string,\r\n * number, or boolean) accessible via getValue().\r\n */\r\nclass LeafNode {\r\n /**\r\n * @param value_ - The value to store in this leaf node. The object type is\r\n * possible in the event of a deferred value\r\n * @param priorityNode_ - The priority of this node.\r\n */\r\n constructor(value_, priorityNode_ = LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\r\n this.value_ = value_;\r\n this.priorityNode_ = priorityNode_;\r\n this.lazyHash_ = null;\r\n assert(this.value_ !== undefined && this.value_ !== null, \"LeafNode shouldn't be created with null/undefined value.\");\r\n validatePriorityNode(this.priorityNode_);\r\n }\r\n static set __childrenNodeConstructor(val) {\r\n __childrenNodeConstructor = val;\r\n }\r\n static get __childrenNodeConstructor() {\r\n return __childrenNodeConstructor;\r\n }\r\n /** @inheritDoc */\r\n isLeafNode() {\r\n return true;\r\n }\r\n /** @inheritDoc */\r\n getPriority() {\r\n return this.priorityNode_;\r\n }\r\n /** @inheritDoc */\r\n updatePriority(newPriorityNode) {\r\n return new LeafNode(this.value_, newPriorityNode);\r\n }\r\n /** @inheritDoc */\r\n getImmediateChild(childName) {\r\n // Hack to treat priority as a regular child\r\n if (childName === '.priority') {\r\n return this.priorityNode_;\r\n }\r\n else {\r\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n }\r\n }\r\n /** @inheritDoc */\r\n getChild(path) {\r\n if (pathIsEmpty(path)) {\r\n return this;\r\n }\r\n else if (pathGetFront(path) === '.priority') {\r\n return this.priorityNode_;\r\n }\r\n else {\r\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n }\r\n }\r\n hasChild() {\r\n return false;\r\n }\r\n /** @inheritDoc */\r\n getPredecessorChildName(childName, childNode) {\r\n return null;\r\n }\r\n /** @inheritDoc */\r\n updateImmediateChild(childName, newChildNode) {\r\n if (childName === '.priority') {\r\n return this.updatePriority(newChildNode);\r\n }\r\n else if (newChildNode.isEmpty() && childName !== '.priority') {\r\n return this;\r\n }\r\n else {\r\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateImmediateChild(childName, newChildNode).updatePriority(this.priorityNode_);\r\n }\r\n }\r\n /** @inheritDoc */\r\n updateChild(path, newChildNode) {\r\n const front = pathGetFront(path);\r\n if (front === null) {\r\n return newChildNode;\r\n }\r\n else if (newChildNode.isEmpty() && front !== '.priority') {\r\n return this;\r\n }\r\n else {\r\n assert(front !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');\r\n return this.updateImmediateChild(front, LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateChild(pathPopFront(path), newChildNode));\r\n }\r\n }\r\n /** @inheritDoc */\r\n isEmpty() {\r\n return false;\r\n }\r\n /** @inheritDoc */\r\n numChildren() {\r\n return 0;\r\n }\r\n /** @inheritDoc */\r\n forEachChild(index, action) {\r\n return false;\r\n }\r\n val(exportFormat) {\r\n if (exportFormat && !this.getPriority().isEmpty()) {\r\n return {\r\n '.value': this.getValue(),\r\n '.priority': this.getPriority().val()\r\n };\r\n }\r\n else {\r\n return this.getValue();\r\n }\r\n }\r\n /** @inheritDoc */\r\n hash() {\r\n if (this.lazyHash_ === null) {\r\n let toHash = '';\r\n if (!this.priorityNode_.isEmpty()) {\r\n toHash +=\r\n 'priority:' +\r\n priorityHashText(this.priorityNode_.val()) +\r\n ':';\r\n }\r\n const type = typeof this.value_;\r\n toHash += type + ':';\r\n if (type === 'number') {\r\n toHash += doubleToIEEE754String(this.value_);\r\n }\r\n else {\r\n toHash += this.value_;\r\n }\r\n this.lazyHash_ = sha1(toHash);\r\n }\r\n return this.lazyHash_;\r\n }\r\n /**\r\n * Returns the value of the leaf node.\r\n * @returns The value of the node.\r\n */\r\n getValue() {\r\n return this.value_;\r\n }\r\n compareTo(other) {\r\n if (other === LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\r\n return 1;\r\n }\r\n else if (other instanceof LeafNode.__childrenNodeConstructor) {\r\n return -1;\r\n }\r\n else {\r\n assert(other.isLeafNode(), 'Unknown node type');\r\n return this.compareToLeafNode_(other);\r\n }\r\n }\r\n /**\r\n * Comparison specifically for two leaf nodes\r\n */\r\n compareToLeafNode_(otherLeaf) {\r\n const otherLeafType = typeof otherLeaf.value_;\r\n const thisLeafType = typeof this.value_;\r\n const otherIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(otherLeafType);\r\n const thisIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(thisLeafType);\r\n assert(otherIndex >= 0, 'Unknown leaf type: ' + otherLeafType);\r\n assert(thisIndex >= 0, 'Unknown leaf type: ' + thisLeafType);\r\n if (otherIndex === thisIndex) {\r\n // Same type, compare values\r\n if (thisLeafType === 'object') {\r\n // Deferred value nodes are all equal, but we should also never get to this point...\r\n return 0;\r\n }\r\n else {\r\n // Note that this works because true > false, all others are number or string comparisons\r\n if (this.value_ < otherLeaf.value_) {\r\n return -1;\r\n }\r\n else if (this.value_ === otherLeaf.value_) {\r\n return 0;\r\n }\r\n else {\r\n return 1;\r\n }\r\n }\r\n }\r\n else {\r\n return thisIndex - otherIndex;\r\n }\r\n }\r\n withIndex() {\r\n return this;\r\n }\r\n isIndexed() {\r\n return true;\r\n }\r\n equals(other) {\r\n if (other === this) {\r\n return true;\r\n }\r\n else if (other.isLeafNode()) {\r\n const otherLeaf = other;\r\n return (this.value_ === otherLeaf.value_ &&\r\n this.priorityNode_.equals(otherLeaf.priorityNode_));\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n}\r\n/**\r\n * The sort order for comparing leaf nodes of different types. If two leaf nodes have\r\n * the same type, the comparison falls back to their value\r\n */\r\nLeafNode.VALUE_TYPE_ORDER = ['object', 'boolean', 'number', 'string'];\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet nodeFromJSON$1;\r\nlet MAX_NODE$1;\r\nfunction setNodeFromJSON(val) {\r\n nodeFromJSON$1 = val;\r\n}\r\nfunction setMaxNode(val) {\r\n MAX_NODE$1 = val;\r\n}\r\nclass PriorityIndex extends Index {\r\n compare(a, b) {\r\n const aPriority = a.node.getPriority();\r\n const bPriority = b.node.getPriority();\r\n const indexCmp = aPriority.compareTo(bPriority);\r\n if (indexCmp === 0) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n else {\r\n return indexCmp;\r\n }\r\n }\r\n isDefinedOn(node) {\r\n return !node.getPriority().isEmpty();\r\n }\r\n indexedValueChanged(oldNode, newNode) {\r\n return !oldNode.getPriority().equals(newNode.getPriority());\r\n }\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n maxPost() {\r\n return new NamedNode(MAX_NAME, new LeafNode('[PRIORITY-POST]', MAX_NODE$1));\r\n }\r\n makePost(indexValue, name) {\r\n const priorityNode = nodeFromJSON$1(indexValue);\r\n return new NamedNode(name, new LeafNode('[PRIORITY-POST]', priorityNode));\r\n }\r\n /**\r\n * @returns String representation for inclusion in a query spec\r\n */\r\n toString() {\r\n return '.priority';\r\n }\r\n}\r\nconst PRIORITY_INDEX = new PriorityIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_2 = Math.log(2);\r\nclass Base12Num {\r\n constructor(length) {\r\n const logBase2 = (num) => \r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n parseInt((Math.log(num) / LOG_2), 10);\r\n const bitMask = (bits) => parseInt(Array(bits + 1).join('1'), 2);\r\n this.count = logBase2(length + 1);\r\n this.current_ = this.count - 1;\r\n const mask = bitMask(this.count);\r\n this.bits_ = (length + 1) & mask;\r\n }\r\n nextBitIsOne() {\r\n //noinspection JSBitwiseOperatorUsage\r\n const result = !(this.bits_ & (0x1 << this.current_));\r\n this.current_--;\r\n return result;\r\n }\r\n}\r\n/**\r\n * Takes a list of child nodes and constructs a SortedSet using the given comparison\r\n * function\r\n *\r\n * Uses the algorithm described in the paper linked here:\r\n * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1458\r\n *\r\n * @param childList - Unsorted list of children\r\n * @param cmp - The comparison method to be used\r\n * @param keyFn - An optional function to extract K from a node wrapper, if K's\r\n * type is not NamedNode\r\n * @param mapSortFn - An optional override for comparator used by the generated sorted map\r\n */\r\nconst buildChildSet = function (childList, cmp, keyFn, mapSortFn) {\r\n childList.sort(cmp);\r\n const buildBalancedTree = function (low, high) {\r\n const length = high - low;\r\n let namedNode;\r\n let key;\r\n if (length === 0) {\r\n return null;\r\n }\r\n else if (length === 1) {\r\n namedNode = childList[low];\r\n key = keyFn ? keyFn(namedNode) : namedNode;\r\n return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, null, null);\r\n }\r\n else {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const middle = parseInt((length / 2), 10) + low;\r\n const left = buildBalancedTree(low, middle);\r\n const right = buildBalancedTree(middle + 1, high);\r\n namedNode = childList[middle];\r\n key = keyFn ? keyFn(namedNode) : namedNode;\r\n return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, left, right);\r\n }\r\n };\r\n const buildFrom12Array = function (base12) {\r\n let node = null;\r\n let root = null;\r\n let index = childList.length;\r\n const buildPennant = function (chunkSize, color) {\r\n const low = index - chunkSize;\r\n const high = index;\r\n index -= chunkSize;\r\n const childTree = buildBalancedTree(low + 1, high);\r\n const namedNode = childList[low];\r\n const key = keyFn ? keyFn(namedNode) : namedNode;\r\n attachPennant(new LLRBNode(key, namedNode.node, color, null, childTree));\r\n };\r\n const attachPennant = function (pennant) {\r\n if (node) {\r\n node.left = pennant;\r\n node = pennant;\r\n }\r\n else {\r\n root = pennant;\r\n node = pennant;\r\n }\r\n };\r\n for (let i = 0; i < base12.count; ++i) {\r\n const isOne = base12.nextBitIsOne();\r\n // The number of nodes taken in each slice is 2^(arr.length - (i + 1))\r\n const chunkSize = Math.pow(2, base12.count - (i + 1));\r\n if (isOne) {\r\n buildPennant(chunkSize, LLRBNode.BLACK);\r\n }\r\n else {\r\n // current == 2\r\n buildPennant(chunkSize, LLRBNode.BLACK);\r\n buildPennant(chunkSize, LLRBNode.RED);\r\n }\r\n }\r\n return root;\r\n };\r\n const base12 = new Base12Num(childList.length);\r\n const root = buildFrom12Array(base12);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return new SortedMap(mapSortFn || cmp, root);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet _defaultIndexMap;\r\nconst fallbackObject = {};\r\nclass IndexMap {\r\n constructor(indexes_, indexSet_) {\r\n this.indexes_ = indexes_;\r\n this.indexSet_ = indexSet_;\r\n }\r\n /**\r\n * The default IndexMap for nodes without a priority\r\n */\r\n static get Default() {\r\n assert(fallbackObject && PRIORITY_INDEX, 'ChildrenNode.ts has not been loaded');\r\n _defaultIndexMap =\r\n _defaultIndexMap ||\r\n new IndexMap({ '.priority': fallbackObject }, { '.priority': PRIORITY_INDEX });\r\n return _defaultIndexMap;\r\n }\r\n get(indexKey) {\r\n const sortedMap = safeGet(this.indexes_, indexKey);\r\n if (!sortedMap) {\r\n throw new Error('No index defined for ' + indexKey);\r\n }\r\n if (sortedMap instanceof SortedMap) {\r\n return sortedMap;\r\n }\r\n else {\r\n // The index exists, but it falls back to just name comparison. Return null so that the calling code uses the\r\n // regular child map\r\n return null;\r\n }\r\n }\r\n hasIndex(indexDefinition) {\r\n return contains(this.indexSet_, indexDefinition.toString());\r\n }\r\n addIndex(indexDefinition, existingChildren) {\r\n assert(indexDefinition !== KEY_INDEX, \"KeyIndex always exists and isn't meant to be added to the IndexMap.\");\r\n const childList = [];\r\n let sawIndexedValue = false;\r\n const iter = existingChildren.getIterator(NamedNode.Wrap);\r\n let next = iter.getNext();\r\n while (next) {\r\n sawIndexedValue =\r\n sawIndexedValue || indexDefinition.isDefinedOn(next.node);\r\n childList.push(next);\r\n next = iter.getNext();\r\n }\r\n let newIndex;\r\n if (sawIndexedValue) {\r\n newIndex = buildChildSet(childList, indexDefinition.getCompare());\r\n }\r\n else {\r\n newIndex = fallbackObject;\r\n }\r\n const indexName = indexDefinition.toString();\r\n const newIndexSet = Object.assign({}, this.indexSet_);\r\n newIndexSet[indexName] = indexDefinition;\r\n const newIndexes = Object.assign({}, this.indexes_);\r\n newIndexes[indexName] = newIndex;\r\n return new IndexMap(newIndexes, newIndexSet);\r\n }\r\n /**\r\n * Ensure that this node is properly tracked in any indexes that we're maintaining\r\n */\r\n addToIndexes(namedNode, existingChildren) {\r\n const newIndexes = map(this.indexes_, (indexedChildren, indexName) => {\r\n const index = safeGet(this.indexSet_, indexName);\r\n assert(index, 'Missing index implementation for ' + indexName);\r\n if (indexedChildren === fallbackObject) {\r\n // Check to see if we need to index everything\r\n if (index.isDefinedOn(namedNode.node)) {\r\n // We need to build this index\r\n const childList = [];\r\n const iter = existingChildren.getIterator(NamedNode.Wrap);\r\n let next = iter.getNext();\r\n while (next) {\r\n if (next.name !== namedNode.name) {\r\n childList.push(next);\r\n }\r\n next = iter.getNext();\r\n }\r\n childList.push(namedNode);\r\n return buildChildSet(childList, index.getCompare());\r\n }\r\n else {\r\n // No change, this remains a fallback\r\n return fallbackObject;\r\n }\r\n }\r\n else {\r\n const existingSnap = existingChildren.get(namedNode.name);\r\n let newChildren = indexedChildren;\r\n if (existingSnap) {\r\n newChildren = newChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n }\r\n return newChildren.insert(namedNode, namedNode.node);\r\n }\r\n });\r\n return new IndexMap(newIndexes, this.indexSet_);\r\n }\r\n /**\r\n * Create a new IndexMap instance with the given value removed\r\n */\r\n removeFromIndexes(namedNode, existingChildren) {\r\n const newIndexes = map(this.indexes_, (indexedChildren) => {\r\n if (indexedChildren === fallbackObject) {\r\n // This is the fallback. Just return it, nothing to do in this case\r\n return indexedChildren;\r\n }\r\n else {\r\n const existingSnap = existingChildren.get(namedNode.name);\r\n if (existingSnap) {\r\n return indexedChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n }\r\n else {\r\n // No record of this child\r\n return indexedChildren;\r\n }\r\n }\r\n });\r\n return new IndexMap(newIndexes, this.indexSet_);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// TODO: For memory savings, don't store priorityNode_ if it's empty.\r\nlet EMPTY_NODE;\r\n/**\r\n * ChildrenNode is a class for storing internal nodes in a DataSnapshot\r\n * (i.e. nodes with children). It implements Node and stores the\r\n * list of children in the children property, sorted by child name.\r\n */\r\nclass ChildrenNode {\r\n /**\r\n * @param children_ - List of children of this node..\r\n * @param priorityNode_ - The priority of this node (as a snapshot node).\r\n */\r\n constructor(children_, priorityNode_, indexMap_) {\r\n this.children_ = children_;\r\n this.priorityNode_ = priorityNode_;\r\n this.indexMap_ = indexMap_;\r\n this.lazyHash_ = null;\r\n /**\r\n * Note: The only reason we allow null priority is for EMPTY_NODE, since we can't use\r\n * EMPTY_NODE as the priority of EMPTY_NODE. We might want to consider making EMPTY_NODE its own\r\n * class instead of an empty ChildrenNode.\r\n */\r\n if (this.priorityNode_) {\r\n validatePriorityNode(this.priorityNode_);\r\n }\r\n if (this.children_.isEmpty()) {\r\n assert(!this.priorityNode_ || this.priorityNode_.isEmpty(), 'An empty node cannot have a priority');\r\n }\r\n }\r\n static get EMPTY_NODE() {\r\n return (EMPTY_NODE ||\r\n (EMPTY_NODE = new ChildrenNode(new SortedMap(NAME_COMPARATOR), null, IndexMap.Default)));\r\n }\r\n /** @inheritDoc */\r\n isLeafNode() {\r\n return false;\r\n }\r\n /** @inheritDoc */\r\n getPriority() {\r\n return this.priorityNode_ || EMPTY_NODE;\r\n }\r\n /** @inheritDoc */\r\n updatePriority(newPriorityNode) {\r\n if (this.children_.isEmpty()) {\r\n // Don't allow priorities on empty nodes\r\n return this;\r\n }\r\n else {\r\n return new ChildrenNode(this.children_, newPriorityNode, this.indexMap_);\r\n }\r\n }\r\n /** @inheritDoc */\r\n getImmediateChild(childName) {\r\n // Hack to treat priority as a regular child\r\n if (childName === '.priority') {\r\n return this.getPriority();\r\n }\r\n else {\r\n const child = this.children_.get(childName);\r\n return child === null ? EMPTY_NODE : child;\r\n }\r\n }\r\n /** @inheritDoc */\r\n getChild(path) {\r\n const front = pathGetFront(path);\r\n if (front === null) {\r\n return this;\r\n }\r\n return this.getImmediateChild(front).getChild(pathPopFront(path));\r\n }\r\n /** @inheritDoc */\r\n hasChild(childName) {\r\n return this.children_.get(childName) !== null;\r\n }\r\n /** @inheritDoc */\r\n updateImmediateChild(childName, newChildNode) {\r\n assert(newChildNode, 'We should always be passing snapshot nodes');\r\n if (childName === '.priority') {\r\n return this.updatePriority(newChildNode);\r\n }\r\n else {\r\n const namedNode = new NamedNode(childName, newChildNode);\r\n let newChildren, newIndexMap;\r\n if (newChildNode.isEmpty()) {\r\n newChildren = this.children_.remove(childName);\r\n newIndexMap = this.indexMap_.removeFromIndexes(namedNode, this.children_);\r\n }\r\n else {\r\n newChildren = this.children_.insert(childName, newChildNode);\r\n newIndexMap = this.indexMap_.addToIndexes(namedNode, this.children_);\r\n }\r\n const newPriority = newChildren.isEmpty()\r\n ? EMPTY_NODE\r\n : this.priorityNode_;\r\n return new ChildrenNode(newChildren, newPriority, newIndexMap);\r\n }\r\n }\r\n /** @inheritDoc */\r\n updateChild(path, newChildNode) {\r\n const front = pathGetFront(path);\r\n if (front === null) {\r\n return newChildNode;\r\n }\r\n else {\r\n assert(pathGetFront(path) !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');\r\n const newImmediateChild = this.getImmediateChild(front).updateChild(pathPopFront(path), newChildNode);\r\n return this.updateImmediateChild(front, newImmediateChild);\r\n }\r\n }\r\n /** @inheritDoc */\r\n isEmpty() {\r\n return this.children_.isEmpty();\r\n }\r\n /** @inheritDoc */\r\n numChildren() {\r\n return this.children_.count();\r\n }\r\n /** @inheritDoc */\r\n val(exportFormat) {\r\n if (this.isEmpty()) {\r\n return null;\r\n }\r\n const obj = {};\r\n let numKeys = 0, maxKey = 0, allIntegerKeys = true;\r\n this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n obj[key] = childNode.val(exportFormat);\r\n numKeys++;\r\n if (allIntegerKeys && ChildrenNode.INTEGER_REGEXP_.test(key)) {\r\n maxKey = Math.max(maxKey, Number(key));\r\n }\r\n else {\r\n allIntegerKeys = false;\r\n }\r\n });\r\n if (!exportFormat && allIntegerKeys && maxKey < 2 * numKeys) {\r\n // convert to array.\r\n const array = [];\r\n // eslint-disable-next-line guard-for-in\r\n for (const key in obj) {\r\n array[key] = obj[key];\r\n }\r\n return array;\r\n }\r\n else {\r\n if (exportFormat && !this.getPriority().isEmpty()) {\r\n obj['.priority'] = this.getPriority().val();\r\n }\r\n return obj;\r\n }\r\n }\r\n /** @inheritDoc */\r\n hash() {\r\n if (this.lazyHash_ === null) {\r\n let toHash = '';\r\n if (!this.getPriority().isEmpty()) {\r\n toHash +=\r\n 'priority:' +\r\n priorityHashText(this.getPriority().val()) +\r\n ':';\r\n }\r\n this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n const childHash = childNode.hash();\r\n if (childHash !== '') {\r\n toHash += ':' + key + ':' + childHash;\r\n }\r\n });\r\n this.lazyHash_ = toHash === '' ? '' : sha1(toHash);\r\n }\r\n return this.lazyHash_;\r\n }\r\n /** @inheritDoc */\r\n getPredecessorChildName(childName, childNode, index) {\r\n const idx = this.resolveIndex_(index);\r\n if (idx) {\r\n const predecessor = idx.getPredecessorKey(new NamedNode(childName, childNode));\r\n return predecessor ? predecessor.name : null;\r\n }\r\n else {\r\n return this.children_.getPredecessorKey(childName);\r\n }\r\n }\r\n getFirstChildName(indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n const minKey = idx.minKey();\r\n return minKey && minKey.name;\r\n }\r\n else {\r\n return this.children_.minKey();\r\n }\r\n }\r\n getFirstChild(indexDefinition) {\r\n const minKey = this.getFirstChildName(indexDefinition);\r\n if (minKey) {\r\n return new NamedNode(minKey, this.children_.get(minKey));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Given an index, return the key name of the largest value we have, according to that index\r\n */\r\n getLastChildName(indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n const maxKey = idx.maxKey();\r\n return maxKey && maxKey.name;\r\n }\r\n else {\r\n return this.children_.maxKey();\r\n }\r\n }\r\n getLastChild(indexDefinition) {\r\n const maxKey = this.getLastChildName(indexDefinition);\r\n if (maxKey) {\r\n return new NamedNode(maxKey, this.children_.get(maxKey));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n forEachChild(index, action) {\r\n const idx = this.resolveIndex_(index);\r\n if (idx) {\r\n return idx.inorderTraversal(wrappedNode => {\r\n return action(wrappedNode.name, wrappedNode.node);\r\n });\r\n }\r\n else {\r\n return this.children_.inorderTraversal(action);\r\n }\r\n }\r\n getIterator(indexDefinition) {\r\n return this.getIteratorFrom(indexDefinition.minPost(), indexDefinition);\r\n }\r\n getIteratorFrom(startPost, indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n return idx.getIteratorFrom(startPost, key => key);\r\n }\r\n else {\r\n const iterator = this.children_.getIteratorFrom(startPost.name, NamedNode.Wrap);\r\n let next = iterator.peek();\r\n while (next != null && indexDefinition.compare(next, startPost) < 0) {\r\n iterator.getNext();\r\n next = iterator.peek();\r\n }\r\n return iterator;\r\n }\r\n }\r\n getReverseIterator(indexDefinition) {\r\n return this.getReverseIteratorFrom(indexDefinition.maxPost(), indexDefinition);\r\n }\r\n getReverseIteratorFrom(endPost, indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n return idx.getReverseIteratorFrom(endPost, key => {\r\n return key;\r\n });\r\n }\r\n else {\r\n const iterator = this.children_.getReverseIteratorFrom(endPost.name, NamedNode.Wrap);\r\n let next = iterator.peek();\r\n while (next != null && indexDefinition.compare(next, endPost) > 0) {\r\n iterator.getNext();\r\n next = iterator.peek();\r\n }\r\n return iterator;\r\n }\r\n }\r\n compareTo(other) {\r\n if (this.isEmpty()) {\r\n if (other.isEmpty()) {\r\n return 0;\r\n }\r\n else {\r\n return -1;\r\n }\r\n }\r\n else if (other.isLeafNode() || other.isEmpty()) {\r\n return 1;\r\n }\r\n else if (other === MAX_NODE) {\r\n return -1;\r\n }\r\n else {\r\n // Must be another node with children.\r\n return 0;\r\n }\r\n }\r\n withIndex(indexDefinition) {\r\n if (indexDefinition === KEY_INDEX ||\r\n this.indexMap_.hasIndex(indexDefinition)) {\r\n return this;\r\n }\r\n else {\r\n const newIndexMap = this.indexMap_.addIndex(indexDefinition, this.children_);\r\n return new ChildrenNode(this.children_, this.priorityNode_, newIndexMap);\r\n }\r\n }\r\n isIndexed(index) {\r\n return index === KEY_INDEX || this.indexMap_.hasIndex(index);\r\n }\r\n equals(other) {\r\n if (other === this) {\r\n return true;\r\n }\r\n else if (other.isLeafNode()) {\r\n return false;\r\n }\r\n else {\r\n const otherChildrenNode = other;\r\n if (!this.getPriority().equals(otherChildrenNode.getPriority())) {\r\n return false;\r\n }\r\n else if (this.children_.count() === otherChildrenNode.children_.count()) {\r\n const thisIter = this.getIterator(PRIORITY_INDEX);\r\n const otherIter = otherChildrenNode.getIterator(PRIORITY_INDEX);\r\n let thisCurrent = thisIter.getNext();\r\n let otherCurrent = otherIter.getNext();\r\n while (thisCurrent && otherCurrent) {\r\n if (thisCurrent.name !== otherCurrent.name ||\r\n !thisCurrent.node.equals(otherCurrent.node)) {\r\n return false;\r\n }\r\n thisCurrent = thisIter.getNext();\r\n otherCurrent = otherIter.getNext();\r\n }\r\n return thisCurrent === null && otherCurrent === null;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n }\r\n /**\r\n * Returns a SortedMap ordered by index, or null if the default (by-key) ordering can be used\r\n * instead.\r\n *\r\n */\r\n resolveIndex_(indexDefinition) {\r\n if (indexDefinition === KEY_INDEX) {\r\n return null;\r\n }\r\n else {\r\n return this.indexMap_.get(indexDefinition.toString());\r\n }\r\n }\r\n}\r\nChildrenNode.INTEGER_REGEXP_ = /^(0|[1-9]\\d*)$/;\r\nclass MaxNode extends ChildrenNode {\r\n constructor() {\r\n super(new SortedMap(NAME_COMPARATOR), ChildrenNode.EMPTY_NODE, IndexMap.Default);\r\n }\r\n compareTo(other) {\r\n if (other === this) {\r\n return 0;\r\n }\r\n else {\r\n return 1;\r\n }\r\n }\r\n equals(other) {\r\n // Not that we every compare it, but MAX_NODE is only ever equal to itself\r\n return other === this;\r\n }\r\n getPriority() {\r\n return this;\r\n }\r\n getImmediateChild(childName) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n isEmpty() {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Marker that will sort higher than any other snapshot.\r\n */\r\nconst MAX_NODE = new MaxNode();\r\nObject.defineProperties(NamedNode, {\r\n MIN: {\r\n value: new NamedNode(MIN_NAME, ChildrenNode.EMPTY_NODE)\r\n },\r\n MAX: {\r\n value: new NamedNode(MAX_NAME, MAX_NODE)\r\n }\r\n});\r\n/**\r\n * Reference Extensions\r\n */\r\nKeyIndex.__EMPTY_NODE = ChildrenNode.EMPTY_NODE;\r\nLeafNode.__childrenNodeConstructor = ChildrenNode;\r\nsetMaxNode$1(MAX_NODE);\r\nsetMaxNode(MAX_NODE);\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst USE_HINZE = true;\r\n/**\r\n * Constructs a snapshot node representing the passed JSON and returns it.\r\n * @param json - JSON to create a node for.\r\n * @param priority - Optional priority to use. This will be ignored if the\r\n * passed JSON contains a .priority property.\r\n */\r\nfunction nodeFromJSON(json, priority = null) {\r\n if (json === null) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n if (typeof json === 'object' && '.priority' in json) {\r\n priority = json['.priority'];\r\n }\r\n assert(priority === null ||\r\n typeof priority === 'string' ||\r\n typeof priority === 'number' ||\r\n (typeof priority === 'object' && '.sv' in priority), 'Invalid priority type found: ' + typeof priority);\r\n if (typeof json === 'object' && '.value' in json && json['.value'] !== null) {\r\n json = json['.value'];\r\n }\r\n // Valid leaf nodes include non-objects or server-value wrapper objects\r\n if (typeof json !== 'object' || '.sv' in json) {\r\n const jsonLeaf = json;\r\n return new LeafNode(jsonLeaf, nodeFromJSON(priority));\r\n }\r\n if (!(json instanceof Array) && USE_HINZE) {\r\n const children = [];\r\n let childrenHavePriority = false;\r\n const hinzeJsonObj = json;\r\n each(hinzeJsonObj, (key, child) => {\r\n if (key.substring(0, 1) !== '.') {\r\n // Ignore metadata nodes\r\n const childNode = nodeFromJSON(child);\r\n if (!childNode.isEmpty()) {\r\n childrenHavePriority =\r\n childrenHavePriority || !childNode.getPriority().isEmpty();\r\n children.push(new NamedNode(key, childNode));\r\n }\r\n }\r\n });\r\n if (children.length === 0) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n const childSet = buildChildSet(children, NAME_ONLY_COMPARATOR, namedNode => namedNode.name, NAME_COMPARATOR);\r\n if (childrenHavePriority) {\r\n const sortedChildSet = buildChildSet(children, PRIORITY_INDEX.getCompare());\r\n return new ChildrenNode(childSet, nodeFromJSON(priority), new IndexMap({ '.priority': sortedChildSet }, { '.priority': PRIORITY_INDEX }));\r\n }\r\n else {\r\n return new ChildrenNode(childSet, nodeFromJSON(priority), IndexMap.Default);\r\n }\r\n }\r\n else {\r\n let node = ChildrenNode.EMPTY_NODE;\r\n each(json, (key, childData) => {\r\n if (contains(json, key)) {\r\n if (key.substring(0, 1) !== '.') {\r\n // ignore metadata nodes.\r\n const childNode = nodeFromJSON(childData);\r\n if (childNode.isLeafNode() || !childNode.isEmpty()) {\r\n node = node.updateImmediateChild(key, childNode);\r\n }\r\n }\r\n }\r\n });\r\n return node.updatePriority(nodeFromJSON(priority));\r\n }\r\n}\r\nsetNodeFromJSON(nodeFromJSON);\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PathIndex extends Index {\r\n constructor(indexPath_) {\r\n super();\r\n this.indexPath_ = indexPath_;\r\n assert(!pathIsEmpty(indexPath_) && pathGetFront(indexPath_) !== '.priority', \"Can't create PathIndex with empty path or .priority key\");\r\n }\r\n extractChild(snap) {\r\n return snap.getChild(this.indexPath_);\r\n }\r\n isDefinedOn(node) {\r\n return !node.getChild(this.indexPath_).isEmpty();\r\n }\r\n compare(a, b) {\r\n const aChild = this.extractChild(a.node);\r\n const bChild = this.extractChild(b.node);\r\n const indexCmp = aChild.compareTo(bChild);\r\n if (indexCmp === 0) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n else {\r\n return indexCmp;\r\n }\r\n }\r\n makePost(indexValue, name) {\r\n const valueNode = nodeFromJSON(indexValue);\r\n const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, valueNode);\r\n return new NamedNode(name, node);\r\n }\r\n maxPost() {\r\n const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, MAX_NODE);\r\n return new NamedNode(MAX_NAME, node);\r\n }\r\n toString() {\r\n return pathSlice(this.indexPath_, 0).join('/');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ValueIndex extends Index {\r\n compare(a, b) {\r\n const indexCmp = a.node.compareTo(b.node);\r\n if (indexCmp === 0) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n else {\r\n return indexCmp;\r\n }\r\n }\r\n isDefinedOn(node) {\r\n return true;\r\n }\r\n indexedValueChanged(oldNode, newNode) {\r\n return !oldNode.equals(newNode);\r\n }\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n maxPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MAX;\r\n }\r\n makePost(indexValue, name) {\r\n const valueNode = nodeFromJSON(indexValue);\r\n return new NamedNode(name, valueNode);\r\n }\r\n /**\r\n * @returns String representation for inclusion in a query spec\r\n */\r\n toString() {\r\n return '.value';\r\n }\r\n}\r\nconst VALUE_INDEX = new ValueIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction changeValue(snapshotNode) {\r\n return { type: \"value\" /* ChangeType.VALUE */, snapshotNode };\r\n}\r\nfunction changeChildAdded(childName, snapshotNode) {\r\n return { type: \"child_added\" /* ChangeType.CHILD_ADDED */, snapshotNode, childName };\r\n}\r\nfunction changeChildRemoved(childName, snapshotNode) {\r\n return { type: \"child_removed\" /* ChangeType.CHILD_REMOVED */, snapshotNode, childName };\r\n}\r\nfunction changeChildChanged(childName, snapshotNode, oldSnap) {\r\n return {\r\n type: \"child_changed\" /* ChangeType.CHILD_CHANGED */,\r\n snapshotNode,\r\n childName,\r\n oldSnap\r\n };\r\n}\r\nfunction changeChildMoved(childName, snapshotNode) {\r\n return { type: \"child_moved\" /* ChangeType.CHILD_MOVED */, snapshotNode, childName };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Doesn't really filter nodes but applies an index to the node and keeps track of any changes\r\n */\r\nclass IndexedFilter {\r\n constructor(index_) {\r\n this.index_ = index_;\r\n }\r\n updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n assert(snap.isIndexed(this.index_), 'A node must be indexed if only a child is updated');\r\n const oldChild = snap.getImmediateChild(key);\r\n // Check if anything actually changed.\r\n if (oldChild.getChild(affectedPath).equals(newChild.getChild(affectedPath))) {\r\n // There's an edge case where a child can enter or leave the view because affectedPath was set to null.\r\n // In this case, affectedPath will appear null in both the old and new snapshots. So we need\r\n // to avoid treating these cases as \"nothing changed.\"\r\n if (oldChild.isEmpty() === newChild.isEmpty()) {\r\n // Nothing changed.\r\n // This assert should be valid, but it's expensive (can dominate perf testing) so don't actually do it.\r\n //assert(oldChild.equals(newChild), 'Old and new snapshots should be equal.');\r\n return snap;\r\n }\r\n }\r\n if (optChangeAccumulator != null) {\r\n if (newChild.isEmpty()) {\r\n if (snap.hasChild(key)) {\r\n optChangeAccumulator.trackChildChange(changeChildRemoved(key, oldChild));\r\n }\r\n else {\r\n assert(snap.isLeafNode(), 'A child remove without an old child only makes sense on a leaf node');\r\n }\r\n }\r\n else if (oldChild.isEmpty()) {\r\n optChangeAccumulator.trackChildChange(changeChildAdded(key, newChild));\r\n }\r\n else {\r\n optChangeAccumulator.trackChildChange(changeChildChanged(key, newChild, oldChild));\r\n }\r\n }\r\n if (snap.isLeafNode() && newChild.isEmpty()) {\r\n return snap;\r\n }\r\n else {\r\n // Make sure the node is indexed\r\n return snap.updateImmediateChild(key, newChild).withIndex(this.index_);\r\n }\r\n }\r\n updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n if (optChangeAccumulator != null) {\r\n if (!oldSnap.isLeafNode()) {\r\n oldSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n if (!newSnap.hasChild(key)) {\r\n optChangeAccumulator.trackChildChange(changeChildRemoved(key, childNode));\r\n }\r\n });\r\n }\r\n if (!newSnap.isLeafNode()) {\r\n newSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n if (oldSnap.hasChild(key)) {\r\n const oldChild = oldSnap.getImmediateChild(key);\r\n if (!oldChild.equals(childNode)) {\r\n optChangeAccumulator.trackChildChange(changeChildChanged(key, childNode, oldChild));\r\n }\r\n }\r\n else {\r\n optChangeAccumulator.trackChildChange(changeChildAdded(key, childNode));\r\n }\r\n });\r\n }\r\n }\r\n return newSnap.withIndex(this.index_);\r\n }\r\n updatePriority(oldSnap, newPriority) {\r\n if (oldSnap.isEmpty()) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n else {\r\n return oldSnap.updatePriority(newPriority);\r\n }\r\n }\r\n filtersNodes() {\r\n return false;\r\n }\r\n getIndexedFilter() {\r\n return this;\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Filters nodes by range and uses an IndexFilter to track any changes after filtering the node\r\n */\r\nclass RangedFilter {\r\n constructor(params) {\r\n this.indexedFilter_ = new IndexedFilter(params.getIndex());\r\n this.index_ = params.getIndex();\r\n this.startPost_ = RangedFilter.getStartPost_(params);\r\n this.endPost_ = RangedFilter.getEndPost_(params);\r\n this.startIsInclusive_ = !params.startAfterSet_;\r\n this.endIsInclusive_ = !params.endBeforeSet_;\r\n }\r\n getStartPost() {\r\n return this.startPost_;\r\n }\r\n getEndPost() {\r\n return this.endPost_;\r\n }\r\n matches(node) {\r\n const isWithinStart = this.startIsInclusive_\r\n ? this.index_.compare(this.getStartPost(), node) <= 0\r\n : this.index_.compare(this.getStartPost(), node) < 0;\r\n const isWithinEnd = this.endIsInclusive_\r\n ? this.index_.compare(node, this.getEndPost()) <= 0\r\n : this.index_.compare(node, this.getEndPost()) < 0;\r\n return isWithinStart && isWithinEnd;\r\n }\r\n updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n if (!this.matches(new NamedNode(key, newChild))) {\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n return this.indexedFilter_.updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n }\r\n updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n if (newSnap.isLeafNode()) {\r\n // Make sure we have a children node with the correct index, not a leaf node;\r\n newSnap = ChildrenNode.EMPTY_NODE;\r\n }\r\n let filtered = newSnap.withIndex(this.index_);\r\n // Don't support priorities on queries\r\n filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n const self = this;\r\n newSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n if (!self.matches(new NamedNode(key, childNode))) {\r\n filtered = filtered.updateImmediateChild(key, ChildrenNode.EMPTY_NODE);\r\n }\r\n });\r\n return this.indexedFilter_.updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n }\r\n updatePriority(oldSnap, newPriority) {\r\n // Don't support priorities on queries\r\n return oldSnap;\r\n }\r\n filtersNodes() {\r\n return true;\r\n }\r\n getIndexedFilter() {\r\n return this.indexedFilter_;\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n static getStartPost_(params) {\r\n if (params.hasStart()) {\r\n const startName = params.getIndexStartName();\r\n return params.getIndex().makePost(params.getIndexStartValue(), startName);\r\n }\r\n else {\r\n return params.getIndex().minPost();\r\n }\r\n }\r\n static getEndPost_(params) {\r\n if (params.hasEnd()) {\r\n const endName = params.getIndexEndName();\r\n return params.getIndex().makePost(params.getIndexEndValue(), endName);\r\n }\r\n else {\r\n return params.getIndex().maxPost();\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Applies a limit and a range to a node and uses RangedFilter to do the heavy lifting where possible\r\n */\r\nclass LimitedFilter {\r\n constructor(params) {\r\n this.withinDirectionalStart = (node) => this.reverse_ ? this.withinEndPost(node) : this.withinStartPost(node);\r\n this.withinDirectionalEnd = (node) => this.reverse_ ? this.withinStartPost(node) : this.withinEndPost(node);\r\n this.withinStartPost = (node) => {\r\n const compareRes = this.index_.compare(this.rangedFilter_.getStartPost(), node);\r\n return this.startIsInclusive_ ? compareRes <= 0 : compareRes < 0;\r\n };\r\n this.withinEndPost = (node) => {\r\n const compareRes = this.index_.compare(node, this.rangedFilter_.getEndPost());\r\n return this.endIsInclusive_ ? compareRes <= 0 : compareRes < 0;\r\n };\r\n this.rangedFilter_ = new RangedFilter(params);\r\n this.index_ = params.getIndex();\r\n this.limit_ = params.getLimit();\r\n this.reverse_ = !params.isViewFromLeft();\r\n this.startIsInclusive_ = !params.startAfterSet_;\r\n this.endIsInclusive_ = !params.endBeforeSet_;\r\n }\r\n updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n if (!this.rangedFilter_.matches(new NamedNode(key, newChild))) {\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n if (snap.getImmediateChild(key).equals(newChild)) {\r\n // No change\r\n return snap;\r\n }\r\n else if (snap.numChildren() < this.limit_) {\r\n return this.rangedFilter_\r\n .getIndexedFilter()\r\n .updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n }\r\n else {\r\n return this.fullLimitUpdateChild_(snap, key, newChild, source, optChangeAccumulator);\r\n }\r\n }\r\n updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n let filtered;\r\n if (newSnap.isLeafNode() || newSnap.isEmpty()) {\r\n // Make sure we have a children node with the correct index, not a leaf node;\r\n filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n }\r\n else {\r\n if (this.limit_ * 2 < newSnap.numChildren() &&\r\n newSnap.isIndexed(this.index_)) {\r\n // Easier to build up a snapshot, since what we're given has more than twice the elements we want\r\n filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n // anchor to the startPost, endPost, or last element as appropriate\r\n let iterator;\r\n if (this.reverse_) {\r\n iterator = newSnap.getReverseIteratorFrom(this.rangedFilter_.getEndPost(), this.index_);\r\n }\r\n else {\r\n iterator = newSnap.getIteratorFrom(this.rangedFilter_.getStartPost(), this.index_);\r\n }\r\n let count = 0;\r\n while (iterator.hasNext() && count < this.limit_) {\r\n const next = iterator.getNext();\r\n if (!this.withinDirectionalStart(next)) {\r\n // if we have not reached the start, skip to the next element\r\n continue;\r\n }\r\n else if (!this.withinDirectionalEnd(next)) {\r\n // if we have reached the end, stop adding elements\r\n break;\r\n }\r\n else {\r\n filtered = filtered.updateImmediateChild(next.name, next.node);\r\n count++;\r\n }\r\n }\r\n }\r\n else {\r\n // The snap contains less than twice the limit. Faster to delete from the snap than build up a new one\r\n filtered = newSnap.withIndex(this.index_);\r\n // Don't support priorities on queries\r\n filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n let iterator;\r\n if (this.reverse_) {\r\n iterator = filtered.getReverseIterator(this.index_);\r\n }\r\n else {\r\n iterator = filtered.getIterator(this.index_);\r\n }\r\n let count = 0;\r\n while (iterator.hasNext()) {\r\n const next = iterator.getNext();\r\n const inRange = count < this.limit_ &&\r\n this.withinDirectionalStart(next) &&\r\n this.withinDirectionalEnd(next);\r\n if (inRange) {\r\n count++;\r\n }\r\n else {\r\n filtered = filtered.updateImmediateChild(next.name, ChildrenNode.EMPTY_NODE);\r\n }\r\n }\r\n }\r\n }\r\n return this.rangedFilter_\r\n .getIndexedFilter()\r\n .updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n }\r\n updatePriority(oldSnap, newPriority) {\r\n // Don't support priorities on queries\r\n return oldSnap;\r\n }\r\n filtersNodes() {\r\n return true;\r\n }\r\n getIndexedFilter() {\r\n return this.rangedFilter_.getIndexedFilter();\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n fullLimitUpdateChild_(snap, childKey, childSnap, source, changeAccumulator) {\r\n // TODO: rename all cache stuff etc to general snap terminology\r\n let cmp;\r\n if (this.reverse_) {\r\n const indexCmp = this.index_.getCompare();\r\n cmp = (a, b) => indexCmp(b, a);\r\n }\r\n else {\r\n cmp = this.index_.getCompare();\r\n }\r\n const oldEventCache = snap;\r\n assert(oldEventCache.numChildren() === this.limit_, '');\r\n const newChildNamedNode = new NamedNode(childKey, childSnap);\r\n const windowBoundary = this.reverse_\r\n ? oldEventCache.getFirstChild(this.index_)\r\n : oldEventCache.getLastChild(this.index_);\r\n const inRange = this.rangedFilter_.matches(newChildNamedNode);\r\n if (oldEventCache.hasChild(childKey)) {\r\n const oldChildSnap = oldEventCache.getImmediateChild(childKey);\r\n let nextChild = source.getChildAfterChild(this.index_, windowBoundary, this.reverse_);\r\n while (nextChild != null &&\r\n (nextChild.name === childKey || oldEventCache.hasChild(nextChild.name))) {\r\n // There is a weird edge case where a node is updated as part of a merge in the write tree, but hasn't\r\n // been applied to the limited filter yet. Ignore this next child which will be updated later in\r\n // the limited filter...\r\n nextChild = source.getChildAfterChild(this.index_, nextChild, this.reverse_);\r\n }\r\n const compareNext = nextChild == null ? 1 : cmp(nextChild, newChildNamedNode);\r\n const remainsInWindow = inRange && !childSnap.isEmpty() && compareNext >= 0;\r\n if (remainsInWindow) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildChanged(childKey, childSnap, oldChildSnap));\r\n }\r\n return oldEventCache.updateImmediateChild(childKey, childSnap);\r\n }\r\n else {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildRemoved(childKey, oldChildSnap));\r\n }\r\n const newEventCache = oldEventCache.updateImmediateChild(childKey, ChildrenNode.EMPTY_NODE);\r\n const nextChildInRange = nextChild != null && this.rangedFilter_.matches(nextChild);\r\n if (nextChildInRange) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildAdded(nextChild.name, nextChild.node));\r\n }\r\n return newEventCache.updateImmediateChild(nextChild.name, nextChild.node);\r\n }\r\n else {\r\n return newEventCache;\r\n }\r\n }\r\n }\r\n else if (childSnap.isEmpty()) {\r\n // we're deleting a node, but it was not in the window, so ignore it\r\n return snap;\r\n }\r\n else if (inRange) {\r\n if (cmp(windowBoundary, newChildNamedNode) >= 0) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildRemoved(windowBoundary.name, windowBoundary.node));\r\n changeAccumulator.trackChildChange(changeChildAdded(childKey, childSnap));\r\n }\r\n return oldEventCache\r\n .updateImmediateChild(childKey, childSnap)\r\n .updateImmediateChild(windowBoundary.name, ChildrenNode.EMPTY_NODE);\r\n }\r\n else {\r\n return snap;\r\n }\r\n }\r\n else {\r\n return snap;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class is an immutable-from-the-public-api struct containing a set of query parameters defining a\r\n * range to be returned for a particular location. It is assumed that validation of parameters is done at the\r\n * user-facing API level, so it is not done here.\r\n *\r\n * @internal\r\n */\r\nclass QueryParams {\r\n constructor() {\r\n this.limitSet_ = false;\r\n this.startSet_ = false;\r\n this.startNameSet_ = false;\r\n this.startAfterSet_ = false; // can only be true if startSet_ is true\r\n this.endSet_ = false;\r\n this.endNameSet_ = false;\r\n this.endBeforeSet_ = false; // can only be true if endSet_ is true\r\n this.limit_ = 0;\r\n this.viewFrom_ = '';\r\n this.indexStartValue_ = null;\r\n this.indexStartName_ = '';\r\n this.indexEndValue_ = null;\r\n this.indexEndName_ = '';\r\n this.index_ = PRIORITY_INDEX;\r\n }\r\n hasStart() {\r\n return this.startSet_;\r\n }\r\n /**\r\n * @returns True if it would return from left.\r\n */\r\n isViewFromLeft() {\r\n if (this.viewFrom_ === '') {\r\n // limit(), rather than limitToFirst or limitToLast was called.\r\n // This means that only one of startSet_ and endSet_ is true. Use them\r\n // to calculate which side of the view to anchor to. If neither is set,\r\n // anchor to the end.\r\n return this.startSet_;\r\n }\r\n else {\r\n return this.viewFrom_ === \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\r\n }\r\n }\r\n /**\r\n * Only valid to call if hasStart() returns true\r\n */\r\n getIndexStartValue() {\r\n assert(this.startSet_, 'Only valid if start has been set');\r\n return this.indexStartValue_;\r\n }\r\n /**\r\n * Only valid to call if hasStart() returns true.\r\n * Returns the starting key name for the range defined by these query parameters\r\n */\r\n getIndexStartName() {\r\n assert(this.startSet_, 'Only valid if start has been set');\r\n if (this.startNameSet_) {\r\n return this.indexStartName_;\r\n }\r\n else {\r\n return MIN_NAME;\r\n }\r\n }\r\n hasEnd() {\r\n return this.endSet_;\r\n }\r\n /**\r\n * Only valid to call if hasEnd() returns true.\r\n */\r\n getIndexEndValue() {\r\n assert(this.endSet_, 'Only valid if end has been set');\r\n return this.indexEndValue_;\r\n }\r\n /**\r\n * Only valid to call if hasEnd() returns true.\r\n * Returns the end key name for the range defined by these query parameters\r\n */\r\n getIndexEndName() {\r\n assert(this.endSet_, 'Only valid if end has been set');\r\n if (this.endNameSet_) {\r\n return this.indexEndName_;\r\n }\r\n else {\r\n return MAX_NAME;\r\n }\r\n }\r\n hasLimit() {\r\n return this.limitSet_;\r\n }\r\n /**\r\n * @returns True if a limit has been set and it has been explicitly anchored\r\n */\r\n hasAnchoredLimit() {\r\n return this.limitSet_ && this.viewFrom_ !== '';\r\n }\r\n /**\r\n * Only valid to call if hasLimit() returns true\r\n */\r\n getLimit() {\r\n assert(this.limitSet_, 'Only valid if limit has been set');\r\n return this.limit_;\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n loadsAllData() {\r\n return !(this.startSet_ || this.endSet_ || this.limitSet_);\r\n }\r\n isDefault() {\r\n return this.loadsAllData() && this.index_ === PRIORITY_INDEX;\r\n }\r\n copy() {\r\n const copy = new QueryParams();\r\n copy.limitSet_ = this.limitSet_;\r\n copy.limit_ = this.limit_;\r\n copy.startSet_ = this.startSet_;\r\n copy.startAfterSet_ = this.startAfterSet_;\r\n copy.indexStartValue_ = this.indexStartValue_;\r\n copy.startNameSet_ = this.startNameSet_;\r\n copy.indexStartName_ = this.indexStartName_;\r\n copy.endSet_ = this.endSet_;\r\n copy.endBeforeSet_ = this.endBeforeSet_;\r\n copy.indexEndValue_ = this.indexEndValue_;\r\n copy.endNameSet_ = this.endNameSet_;\r\n copy.indexEndName_ = this.indexEndName_;\r\n copy.index_ = this.index_;\r\n copy.viewFrom_ = this.viewFrom_;\r\n return copy;\r\n }\r\n}\r\nfunction queryParamsGetNodeFilter(queryParams) {\r\n if (queryParams.loadsAllData()) {\r\n return new IndexedFilter(queryParams.getIndex());\r\n }\r\n else if (queryParams.hasLimit()) {\r\n return new LimitedFilter(queryParams);\r\n }\r\n else {\r\n return new RangedFilter(queryParams);\r\n }\r\n}\r\nfunction queryParamsLimitToFirst(queryParams, newLimit) {\r\n const newParams = queryParams.copy();\r\n newParams.limitSet_ = true;\r\n newParams.limit_ = newLimit;\r\n newParams.viewFrom_ = \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\r\n return newParams;\r\n}\r\nfunction queryParamsLimitToLast(queryParams, newLimit) {\r\n const newParams = queryParams.copy();\r\n newParams.limitSet_ = true;\r\n newParams.limit_ = newLimit;\r\n newParams.viewFrom_ = \"r\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT */;\r\n return newParams;\r\n}\r\nfunction queryParamsStartAt(queryParams, indexValue, key) {\r\n const newParams = queryParams.copy();\r\n newParams.startSet_ = true;\r\n if (indexValue === undefined) {\r\n indexValue = null;\r\n }\r\n newParams.indexStartValue_ = indexValue;\r\n if (key != null) {\r\n newParams.startNameSet_ = true;\r\n newParams.indexStartName_ = key;\r\n }\r\n else {\r\n newParams.startNameSet_ = false;\r\n newParams.indexStartName_ = '';\r\n }\r\n return newParams;\r\n}\r\nfunction queryParamsStartAfter(queryParams, indexValue, key) {\r\n let params;\r\n if (queryParams.index_ === KEY_INDEX || !!key) {\r\n params = queryParamsStartAt(queryParams, indexValue, key);\r\n }\r\n else {\r\n params = queryParamsStartAt(queryParams, indexValue, MAX_NAME);\r\n }\r\n params.startAfterSet_ = true;\r\n return params;\r\n}\r\nfunction queryParamsEndAt(queryParams, indexValue, key) {\r\n const newParams = queryParams.copy();\r\n newParams.endSet_ = true;\r\n if (indexValue === undefined) {\r\n indexValue = null;\r\n }\r\n newParams.indexEndValue_ = indexValue;\r\n if (key !== undefined) {\r\n newParams.endNameSet_ = true;\r\n newParams.indexEndName_ = key;\r\n }\r\n else {\r\n newParams.endNameSet_ = false;\r\n newParams.indexEndName_ = '';\r\n }\r\n return newParams;\r\n}\r\nfunction queryParamsEndBefore(queryParams, indexValue, key) {\r\n let params;\r\n if (queryParams.index_ === KEY_INDEX || !!key) {\r\n params = queryParamsEndAt(queryParams, indexValue, key);\r\n }\r\n else {\r\n params = queryParamsEndAt(queryParams, indexValue, MIN_NAME);\r\n }\r\n params.endBeforeSet_ = true;\r\n return params;\r\n}\r\nfunction queryParamsOrderBy(queryParams, index) {\r\n const newParams = queryParams.copy();\r\n newParams.index_ = index;\r\n return newParams;\r\n}\r\n/**\r\n * Returns a set of REST query string parameters representing this query.\r\n *\r\n * @returns query string parameters\r\n */\r\nfunction queryParamsToRestQueryStringParameters(queryParams) {\r\n const qs = {};\r\n if (queryParams.isDefault()) {\r\n return qs;\r\n }\r\n let orderBy;\r\n if (queryParams.index_ === PRIORITY_INDEX) {\r\n orderBy = \"$priority\" /* REST_QUERY_CONSTANTS.PRIORITY_INDEX */;\r\n }\r\n else if (queryParams.index_ === VALUE_INDEX) {\r\n orderBy = \"$value\" /* REST_QUERY_CONSTANTS.VALUE_INDEX */;\r\n }\r\n else if (queryParams.index_ === KEY_INDEX) {\r\n orderBy = \"$key\" /* REST_QUERY_CONSTANTS.KEY_INDEX */;\r\n }\r\n else {\r\n assert(queryParams.index_ instanceof PathIndex, 'Unrecognized index type!');\r\n orderBy = queryParams.index_.toString();\r\n }\r\n qs[\"orderBy\" /* REST_QUERY_CONSTANTS.ORDER_BY */] = stringify(orderBy);\r\n if (queryParams.startSet_) {\r\n const startParam = queryParams.startAfterSet_\r\n ? \"startAfter\" /* REST_QUERY_CONSTANTS.START_AFTER */\r\n : \"startAt\" /* REST_QUERY_CONSTANTS.START_AT */;\r\n qs[startParam] = stringify(queryParams.indexStartValue_);\r\n if (queryParams.startNameSet_) {\r\n qs[startParam] += ',' + stringify(queryParams.indexStartName_);\r\n }\r\n }\r\n if (queryParams.endSet_) {\r\n const endParam = queryParams.endBeforeSet_\r\n ? \"endBefore\" /* REST_QUERY_CONSTANTS.END_BEFORE */\r\n : \"endAt\" /* REST_QUERY_CONSTANTS.END_AT */;\r\n qs[endParam] = stringify(queryParams.indexEndValue_);\r\n if (queryParams.endNameSet_) {\r\n qs[endParam] += ',' + stringify(queryParams.indexEndName_);\r\n }\r\n }\r\n if (queryParams.limitSet_) {\r\n if (queryParams.isViewFromLeft()) {\r\n qs[\"limitToFirst\" /* REST_QUERY_CONSTANTS.LIMIT_TO_FIRST */] = queryParams.limit_;\r\n }\r\n else {\r\n qs[\"limitToLast\" /* REST_QUERY_CONSTANTS.LIMIT_TO_LAST */] = queryParams.limit_;\r\n }\r\n }\r\n return qs;\r\n}\r\nfunction queryParamsGetQueryObject(queryParams) {\r\n const obj = {};\r\n if (queryParams.startSet_) {\r\n obj[\"sp\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_VALUE */] =\r\n queryParams.indexStartValue_;\r\n if (queryParams.startNameSet_) {\r\n obj[\"sn\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_NAME */] =\r\n queryParams.indexStartName_;\r\n }\r\n obj[\"sin\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_IS_INCLUSIVE */] =\r\n !queryParams.startAfterSet_;\r\n }\r\n if (queryParams.endSet_) {\r\n obj[\"ep\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_VALUE */] = queryParams.indexEndValue_;\r\n if (queryParams.endNameSet_) {\r\n obj[\"en\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_NAME */] = queryParams.indexEndName_;\r\n }\r\n obj[\"ein\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_IS_INCLUSIVE */] =\r\n !queryParams.endBeforeSet_;\r\n }\r\n if (queryParams.limitSet_) {\r\n obj[\"l\" /* WIRE_PROTOCOL_CONSTANTS.LIMIT */] = queryParams.limit_;\r\n let viewFrom = queryParams.viewFrom_;\r\n if (viewFrom === '') {\r\n if (queryParams.isViewFromLeft()) {\r\n viewFrom = \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\r\n }\r\n else {\r\n viewFrom = \"r\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT */;\r\n }\r\n }\r\n obj[\"vf\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM */] = viewFrom;\r\n }\r\n // For now, priority index is the default, so we only specify if it's some other index\r\n if (queryParams.index_ !== PRIORITY_INDEX) {\r\n obj[\"i\" /* WIRE_PROTOCOL_CONSTANTS.INDEX */] = queryParams.index_.toString();\r\n }\r\n return obj;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of ServerActions that communicates with the server via REST requests.\r\n * This is mostly useful for compatibility with crawlers, where we don't want to spin up a full\r\n * persistent connection (using WebSockets or long-polling)\r\n */\r\nclass ReadonlyRestClient extends ServerActions {\r\n /**\r\n * @param repoInfo_ - Data about the namespace we are connecting to\r\n * @param onDataUpdate_ - A callback for new data from the server\r\n */\r\n constructor(repoInfo_, onDataUpdate_, authTokenProvider_, appCheckTokenProvider_) {\r\n super();\r\n this.repoInfo_ = repoInfo_;\r\n this.onDataUpdate_ = onDataUpdate_;\r\n this.authTokenProvider_ = authTokenProvider_;\r\n this.appCheckTokenProvider_ = appCheckTokenProvider_;\r\n /** @private {function(...[*])} */\r\n this.log_ = logWrapper('p:rest:');\r\n /**\r\n * We don't actually need to track listens, except to prevent us calling an onComplete for a listen\r\n * that's been removed. :-/\r\n */\r\n this.listens_ = {};\r\n }\r\n reportStats(stats) {\r\n throw new Error('Method not implemented.');\r\n }\r\n static getListenId_(query, tag) {\r\n if (tag !== undefined) {\r\n return 'tag$' + tag;\r\n }\r\n else {\r\n assert(query._queryParams.isDefault(), \"should have a tag if it's not a default query.\");\r\n return query._path.toString();\r\n }\r\n }\r\n /** @inheritDoc */\r\n listen(query, currentHashFn, tag, onComplete) {\r\n const pathString = query._path.toString();\r\n this.log_('Listen called for ' + pathString + ' ' + query._queryIdentifier);\r\n // Mark this listener so we can tell if it's removed.\r\n const listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n const thisListen = {};\r\n this.listens_[listenId] = thisListen;\r\n const queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);\r\n this.restRequest_(pathString + '.json', queryStringParameters, (error, result) => {\r\n let data = result;\r\n if (error === 404) {\r\n data = null;\r\n error = null;\r\n }\r\n if (error === null) {\r\n this.onDataUpdate_(pathString, data, /*isMerge=*/ false, tag);\r\n }\r\n if (safeGet(this.listens_, listenId) === thisListen) {\r\n let status;\r\n if (!error) {\r\n status = 'ok';\r\n }\r\n else if (error === 401) {\r\n status = 'permission_denied';\r\n }\r\n else {\r\n status = 'rest_error:' + error;\r\n }\r\n onComplete(status, null);\r\n }\r\n });\r\n }\r\n /** @inheritDoc */\r\n unlisten(query, tag) {\r\n const listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n delete this.listens_[listenId];\r\n }\r\n get(query) {\r\n const queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);\r\n const pathString = query._path.toString();\r\n const deferred = new Deferred();\r\n this.restRequest_(pathString + '.json', queryStringParameters, (error, result) => {\r\n let data = result;\r\n if (error === 404) {\r\n data = null;\r\n error = null;\r\n }\r\n if (error === null) {\r\n this.onDataUpdate_(pathString, data, \r\n /*isMerge=*/ false, \r\n /*tag=*/ null);\r\n deferred.resolve(data);\r\n }\r\n else {\r\n deferred.reject(new Error(data));\r\n }\r\n });\r\n return deferred.promise;\r\n }\r\n /** @inheritDoc */\r\n refreshAuthToken(token) {\r\n // no-op since we just always call getToken.\r\n }\r\n /**\r\n * Performs a REST request to the given path, with the provided query string parameters,\r\n * and any auth credentials we have.\r\n */\r\n restRequest_(pathString, queryStringParameters = {}, callback) {\r\n queryStringParameters['format'] = 'export';\r\n return Promise.all([\r\n this.authTokenProvider_.getToken(/*forceRefresh=*/ false),\r\n this.appCheckTokenProvider_.getToken(/*forceRefresh=*/ false)\r\n ]).then(([authToken, appCheckToken]) => {\r\n if (authToken && authToken.accessToken) {\r\n queryStringParameters['auth'] = authToken.accessToken;\r\n }\r\n if (appCheckToken && appCheckToken.token) {\r\n queryStringParameters['ac'] = appCheckToken.token;\r\n }\r\n const url = (this.repoInfo_.secure ? 'https://' : 'http://') +\r\n this.repoInfo_.host +\r\n pathString +\r\n '?' +\r\n 'ns=' +\r\n this.repoInfo_.namespace +\r\n querystring(queryStringParameters);\r\n this.log_('Sending REST request for ' + url);\r\n const xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange = () => {\r\n if (callback && xhr.readyState === 4) {\r\n this.log_('REST Response for ' + url + ' received. status:', xhr.status, 'response:', xhr.responseText);\r\n let res = null;\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n try {\r\n res = jsonEval(xhr.responseText);\r\n }\r\n catch (e) {\r\n warn('Failed to parse JSON response for ' +\r\n url +\r\n ': ' +\r\n xhr.responseText);\r\n }\r\n callback(null, res);\r\n }\r\n else {\r\n // 401 and 404 are expected.\r\n if (xhr.status !== 401 && xhr.status !== 404) {\r\n warn('Got unsuccessful REST response for ' +\r\n url +\r\n ' Status: ' +\r\n xhr.status);\r\n }\r\n callback(xhr.status);\r\n }\r\n callback = null;\r\n }\r\n };\r\n xhr.open('GET', url, /*asynchronous=*/ true);\r\n xhr.send();\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Mutable object which basically just stores a reference to the \"latest\" immutable snapshot.\r\n */\r\nclass SnapshotHolder {\r\n constructor() {\r\n this.rootNode_ = ChildrenNode.EMPTY_NODE;\r\n }\r\n getNode(path) {\r\n return this.rootNode_.getChild(path);\r\n }\r\n updateSnapshot(path, newSnapshotNode) {\r\n this.rootNode_ = this.rootNode_.updateChild(path, newSnapshotNode);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newSparseSnapshotTree() {\r\n return {\r\n value: null,\r\n children: new Map()\r\n };\r\n}\r\n/**\r\n * Stores the given node at the specified path. If there is already a node\r\n * at a shallower path, it merges the new data into that snapshot node.\r\n *\r\n * @param path - Path to look up snapshot for.\r\n * @param data - The new data, or null.\r\n */\r\nfunction sparseSnapshotTreeRemember(sparseSnapshotTree, path, data) {\r\n if (pathIsEmpty(path)) {\r\n sparseSnapshotTree.value = data;\r\n sparseSnapshotTree.children.clear();\r\n }\r\n else if (sparseSnapshotTree.value !== null) {\r\n sparseSnapshotTree.value = sparseSnapshotTree.value.updateChild(path, data);\r\n }\r\n else {\r\n const childKey = pathGetFront(path);\r\n if (!sparseSnapshotTree.children.has(childKey)) {\r\n sparseSnapshotTree.children.set(childKey, newSparseSnapshotTree());\r\n }\r\n const child = sparseSnapshotTree.children.get(childKey);\r\n path = pathPopFront(path);\r\n sparseSnapshotTreeRemember(child, path, data);\r\n }\r\n}\r\n/**\r\n * Purge the data at path from the cache.\r\n *\r\n * @param path - Path to look up snapshot for.\r\n * @returns True if this node should now be removed.\r\n */\r\nfunction sparseSnapshotTreeForget(sparseSnapshotTree, path) {\r\n if (pathIsEmpty(path)) {\r\n sparseSnapshotTree.value = null;\r\n sparseSnapshotTree.children.clear();\r\n return true;\r\n }\r\n else {\r\n if (sparseSnapshotTree.value !== null) {\r\n if (sparseSnapshotTree.value.isLeafNode()) {\r\n // We're trying to forget a node that doesn't exist\r\n return false;\r\n }\r\n else {\r\n const value = sparseSnapshotTree.value;\r\n sparseSnapshotTree.value = null;\r\n value.forEachChild(PRIORITY_INDEX, (key, tree) => {\r\n sparseSnapshotTreeRemember(sparseSnapshotTree, new Path(key), tree);\r\n });\r\n return sparseSnapshotTreeForget(sparseSnapshotTree, path);\r\n }\r\n }\r\n else if (sparseSnapshotTree.children.size > 0) {\r\n const childKey = pathGetFront(path);\r\n path = pathPopFront(path);\r\n if (sparseSnapshotTree.children.has(childKey)) {\r\n const safeToRemove = sparseSnapshotTreeForget(sparseSnapshotTree.children.get(childKey), path);\r\n if (safeToRemove) {\r\n sparseSnapshotTree.children.delete(childKey);\r\n }\r\n }\r\n return sparseSnapshotTree.children.size === 0;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n}\r\n/**\r\n * Recursively iterates through all of the stored tree and calls the\r\n * callback on each one.\r\n *\r\n * @param prefixPath - Path to look up node for.\r\n * @param func - The function to invoke for each tree.\r\n */\r\nfunction sparseSnapshotTreeForEachTree(sparseSnapshotTree, prefixPath, func) {\r\n if (sparseSnapshotTree.value !== null) {\r\n func(prefixPath, sparseSnapshotTree.value);\r\n }\r\n else {\r\n sparseSnapshotTreeForEachChild(sparseSnapshotTree, (key, tree) => {\r\n const path = new Path(prefixPath.toString() + '/' + key);\r\n sparseSnapshotTreeForEachTree(tree, path, func);\r\n });\r\n }\r\n}\r\n/**\r\n * Iterates through each immediate child and triggers the callback.\r\n * Only seems to be used in tests.\r\n *\r\n * @param func - The function to invoke for each child.\r\n */\r\nfunction sparseSnapshotTreeForEachChild(sparseSnapshotTree, func) {\r\n sparseSnapshotTree.children.forEach((tree, key) => {\r\n func(key, tree);\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns the delta from the previous call to get stats.\r\n *\r\n * @param collection_ - The collection to \"listen\" to.\r\n */\r\nclass StatsListener {\r\n constructor(collection_) {\r\n this.collection_ = collection_;\r\n this.last_ = null;\r\n }\r\n get() {\r\n const newStats = this.collection_.get();\r\n const delta = Object.assign({}, newStats);\r\n if (this.last_) {\r\n each(this.last_, (stat, value) => {\r\n delta[stat] = delta[stat] - value;\r\n });\r\n }\r\n this.last_ = newStats;\r\n return delta;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Assuming some apps may have a short amount of time on page, and a bulk of firebase operations probably\r\n// happen on page load, we try to report our first set of stats pretty quickly, but we wait at least 10\r\n// seconds to try to ensure the Firebase connection is established / settled.\r\nconst FIRST_STATS_MIN_TIME = 10 * 1000;\r\nconst FIRST_STATS_MAX_TIME = 30 * 1000;\r\n// We'll continue to report stats on average every 5 minutes.\r\nconst REPORT_STATS_INTERVAL = 5 * 60 * 1000;\r\nclass StatsReporter {\r\n constructor(collection, server_) {\r\n this.server_ = server_;\r\n this.statsToReport_ = {};\r\n this.statsListener_ = new StatsListener(collection);\r\n const timeout = FIRST_STATS_MIN_TIME +\r\n (FIRST_STATS_MAX_TIME - FIRST_STATS_MIN_TIME) * Math.random();\r\n setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(timeout));\r\n }\r\n reportStats_() {\r\n const stats = this.statsListener_.get();\r\n const reportedStats = {};\r\n let haveStatsToReport = false;\r\n each(stats, (stat, value) => {\r\n if (value > 0 && contains(this.statsToReport_, stat)) {\r\n reportedStats[stat] = value;\r\n haveStatsToReport = true;\r\n }\r\n });\r\n if (haveStatsToReport) {\r\n this.server_.reportStats(reportedStats);\r\n }\r\n // queue our next run.\r\n setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(Math.random() * 2 * REPORT_STATS_INTERVAL));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n *\r\n * @enum\r\n */\r\nvar OperationType;\r\n(function (OperationType) {\r\n OperationType[OperationType[\"OVERWRITE\"] = 0] = \"OVERWRITE\";\r\n OperationType[OperationType[\"MERGE\"] = 1] = \"MERGE\";\r\n OperationType[OperationType[\"ACK_USER_WRITE\"] = 2] = \"ACK_USER_WRITE\";\r\n OperationType[OperationType[\"LISTEN_COMPLETE\"] = 3] = \"LISTEN_COMPLETE\";\r\n})(OperationType || (OperationType = {}));\r\nfunction newOperationSourceUser() {\r\n return {\r\n fromUser: true,\r\n fromServer: false,\r\n queryId: null,\r\n tagged: false\r\n };\r\n}\r\nfunction newOperationSourceServer() {\r\n return {\r\n fromUser: false,\r\n fromServer: true,\r\n queryId: null,\r\n tagged: false\r\n };\r\n}\r\nfunction newOperationSourceServerTaggedQuery(queryId) {\r\n return {\r\n fromUser: false,\r\n fromServer: true,\r\n queryId,\r\n tagged: true\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AckUserWrite {\r\n /**\r\n * @param affectedTree - A tree containing true for each affected path. Affected paths can't overlap.\r\n */\r\n constructor(\r\n /** @inheritDoc */ path, \r\n /** @inheritDoc */ affectedTree, \r\n /** @inheritDoc */ revert) {\r\n this.path = path;\r\n this.affectedTree = affectedTree;\r\n this.revert = revert;\r\n /** @inheritDoc */\r\n this.type = OperationType.ACK_USER_WRITE;\r\n /** @inheritDoc */\r\n this.source = newOperationSourceUser();\r\n }\r\n operationForChild(childName) {\r\n if (!pathIsEmpty(this.path)) {\r\n assert(pathGetFront(this.path) === childName, 'operationForChild called for unrelated child.');\r\n return new AckUserWrite(pathPopFront(this.path), this.affectedTree, this.revert);\r\n }\r\n else if (this.affectedTree.value != null) {\r\n assert(this.affectedTree.children.isEmpty(), 'affectedTree should not have overlapping affected paths.');\r\n // All child locations are affected as well; just return same operation.\r\n return this;\r\n }\r\n else {\r\n const childTree = this.affectedTree.subtree(new Path(childName));\r\n return new AckUserWrite(newEmptyPath(), childTree, this.revert);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ListenComplete {\r\n constructor(source, path) {\r\n this.source = source;\r\n this.path = path;\r\n /** @inheritDoc */\r\n this.type = OperationType.LISTEN_COMPLETE;\r\n }\r\n operationForChild(childName) {\r\n if (pathIsEmpty(this.path)) {\r\n return new ListenComplete(this.source, newEmptyPath());\r\n }\r\n else {\r\n return new ListenComplete(this.source, pathPopFront(this.path));\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Overwrite {\r\n constructor(source, path, snap) {\r\n this.source = source;\r\n this.path = path;\r\n this.snap = snap;\r\n /** @inheritDoc */\r\n this.type = OperationType.OVERWRITE;\r\n }\r\n operationForChild(childName) {\r\n if (pathIsEmpty(this.path)) {\r\n return new Overwrite(this.source, newEmptyPath(), this.snap.getImmediateChild(childName));\r\n }\r\n else {\r\n return new Overwrite(this.source, pathPopFront(this.path), this.snap);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Merge {\r\n constructor(\r\n /** @inheritDoc */ source, \r\n /** @inheritDoc */ path, \r\n /** @inheritDoc */ children) {\r\n this.source = source;\r\n this.path = path;\r\n this.children = children;\r\n /** @inheritDoc */\r\n this.type = OperationType.MERGE;\r\n }\r\n operationForChild(childName) {\r\n if (pathIsEmpty(this.path)) {\r\n const childTree = this.children.subtree(new Path(childName));\r\n if (childTree.isEmpty()) {\r\n // This child is unaffected\r\n return null;\r\n }\r\n else if (childTree.value) {\r\n // We have a snapshot for the child in question. This becomes an overwrite of the child.\r\n return new Overwrite(this.source, newEmptyPath(), childTree.value);\r\n }\r\n else {\r\n // This is a merge at a deeper level\r\n return new Merge(this.source, newEmptyPath(), childTree);\r\n }\r\n }\r\n else {\r\n assert(pathGetFront(this.path) === childName, \"Can't get a merge for a child not on the path of the operation\");\r\n return new Merge(this.source, pathPopFront(this.path), this.children);\r\n }\r\n }\r\n toString() {\r\n return ('Operation(' +\r\n this.path +\r\n ': ' +\r\n this.source.toString() +\r\n ' merge: ' +\r\n this.children.toString() +\r\n ')');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A cache node only stores complete children. Additionally it holds a flag whether the node can be considered fully\r\n * initialized in the sense that we know at one point in time this represented a valid state of the world, e.g.\r\n * initialized with data from the server, or a complete overwrite by the client. The filtered flag also tracks\r\n * whether a node potentially had children removed due to a filter.\r\n */\r\nclass CacheNode {\r\n constructor(node_, fullyInitialized_, filtered_) {\r\n this.node_ = node_;\r\n this.fullyInitialized_ = fullyInitialized_;\r\n this.filtered_ = filtered_;\r\n }\r\n /**\r\n * Returns whether this node was fully initialized with either server data or a complete overwrite by the client\r\n */\r\n isFullyInitialized() {\r\n return this.fullyInitialized_;\r\n }\r\n /**\r\n * Returns whether this node is potentially missing children due to a filter applied to the node\r\n */\r\n isFiltered() {\r\n return this.filtered_;\r\n }\r\n isCompleteForPath(path) {\r\n if (pathIsEmpty(path)) {\r\n return this.isFullyInitialized() && !this.filtered_;\r\n }\r\n const childKey = pathGetFront(path);\r\n return this.isCompleteForChild(childKey);\r\n }\r\n isCompleteForChild(key) {\r\n return ((this.isFullyInitialized() && !this.filtered_) || this.node_.hasChild(key));\r\n }\r\n getNode() {\r\n return this.node_;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An EventGenerator is used to convert \"raw\" changes (Change) as computed by the\r\n * CacheDiffer into actual events (Event) that can be raised. See generateEventsForChanges()\r\n * for details.\r\n *\r\n */\r\nclass EventGenerator {\r\n constructor(query_) {\r\n this.query_ = query_;\r\n this.index_ = this.query_._queryParams.getIndex();\r\n }\r\n}\r\n/**\r\n * Given a set of raw changes (no moved events and prevName not specified yet), and a set of\r\n * EventRegistrations that should be notified of these changes, generate the actual events to be raised.\r\n *\r\n * Notes:\r\n * - child_moved events will be synthesized at this time for any child_changed events that affect\r\n * our index.\r\n * - prevName will be calculated based on the index ordering.\r\n */\r\nfunction eventGeneratorGenerateEventsForChanges(eventGenerator, changes, eventCache, eventRegistrations) {\r\n const events = [];\r\n const moves = [];\r\n changes.forEach(change => {\r\n if (change.type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\r\n eventGenerator.index_.indexedValueChanged(change.oldSnap, change.snapshotNode)) {\r\n moves.push(changeChildMoved(change.childName, change.snapshotNode));\r\n }\r\n });\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_removed\" /* ChangeType.CHILD_REMOVED */, changes, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_added\" /* ChangeType.CHILD_ADDED */, changes, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_moved\" /* ChangeType.CHILD_MOVED */, moves, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_changed\" /* ChangeType.CHILD_CHANGED */, changes, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"value\" /* ChangeType.VALUE */, changes, eventRegistrations, eventCache);\r\n return events;\r\n}\r\n/**\r\n * Given changes of a single change type, generate the corresponding events.\r\n */\r\nfunction eventGeneratorGenerateEventsForType(eventGenerator, events, eventType, changes, registrations, eventCache) {\r\n const filteredChanges = changes.filter(change => change.type === eventType);\r\n filteredChanges.sort((a, b) => eventGeneratorCompareChanges(eventGenerator, a, b));\r\n filteredChanges.forEach(change => {\r\n const materializedChange = eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache);\r\n registrations.forEach(registration => {\r\n if (registration.respondsTo(change.type)) {\r\n events.push(registration.createEvent(materializedChange, eventGenerator.query_));\r\n }\r\n });\r\n });\r\n}\r\nfunction eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache) {\r\n if (change.type === 'value' || change.type === 'child_removed') {\r\n return change;\r\n }\r\n else {\r\n change.prevName = eventCache.getPredecessorChildName(change.childName, change.snapshotNode, eventGenerator.index_);\r\n return change;\r\n }\r\n}\r\nfunction eventGeneratorCompareChanges(eventGenerator, a, b) {\r\n if (a.childName == null || b.childName == null) {\r\n throw assertionError('Should only compare child_ events.');\r\n }\r\n const aWrapped = new NamedNode(a.childName, a.snapshotNode);\r\n const bWrapped = new NamedNode(b.childName, b.snapshotNode);\r\n return eventGenerator.index_.compare(aWrapped, bWrapped);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newViewCache(eventCache, serverCache) {\r\n return { eventCache, serverCache };\r\n}\r\nfunction viewCacheUpdateEventSnap(viewCache, eventSnap, complete, filtered) {\r\n return newViewCache(new CacheNode(eventSnap, complete, filtered), viewCache.serverCache);\r\n}\r\nfunction viewCacheUpdateServerSnap(viewCache, serverSnap, complete, filtered) {\r\n return newViewCache(viewCache.eventCache, new CacheNode(serverSnap, complete, filtered));\r\n}\r\nfunction viewCacheGetCompleteEventSnap(viewCache) {\r\n return viewCache.eventCache.isFullyInitialized()\r\n ? viewCache.eventCache.getNode()\r\n : null;\r\n}\r\nfunction viewCacheGetCompleteServerSnap(viewCache) {\r\n return viewCache.serverCache.isFullyInitialized()\r\n ? viewCache.serverCache.getNode()\r\n : null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet emptyChildrenSingleton;\r\n/**\r\n * Singleton empty children collection.\r\n *\r\n */\r\nconst EmptyChildren = () => {\r\n if (!emptyChildrenSingleton) {\r\n emptyChildrenSingleton = new SortedMap(stringCompare);\r\n }\r\n return emptyChildrenSingleton;\r\n};\r\n/**\r\n * A tree with immutable elements.\r\n */\r\nclass ImmutableTree {\r\n constructor(value, children = EmptyChildren()) {\r\n this.value = value;\r\n this.children = children;\r\n }\r\n static fromObject(obj) {\r\n let tree = new ImmutableTree(null);\r\n each(obj, (childPath, childSnap) => {\r\n tree = tree.set(new Path(childPath), childSnap);\r\n });\r\n return tree;\r\n }\r\n /**\r\n * True if the value is empty and there are no children\r\n */\r\n isEmpty() {\r\n return this.value === null && this.children.isEmpty();\r\n }\r\n /**\r\n * Given a path and predicate, return the first node and the path to that node\r\n * where the predicate returns true.\r\n *\r\n * TODO Do a perf test -- If we're creating a bunch of `{path: value:}`\r\n * objects on the way back out, it may be better to pass down a pathSoFar obj.\r\n *\r\n * @param relativePath - The remainder of the path\r\n * @param predicate - The predicate to satisfy to return a node\r\n */\r\n findRootMostMatchingPathAndValue(relativePath, predicate) {\r\n if (this.value != null && predicate(this.value)) {\r\n return { path: newEmptyPath(), value: this.value };\r\n }\r\n else {\r\n if (pathIsEmpty(relativePath)) {\r\n return null;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front);\r\n if (child !== null) {\r\n const childExistingPathAndValue = child.findRootMostMatchingPathAndValue(pathPopFront(relativePath), predicate);\r\n if (childExistingPathAndValue != null) {\r\n const fullPath = pathChild(new Path(front), childExistingPathAndValue.path);\r\n return { path: fullPath, value: childExistingPathAndValue.value };\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Find, if it exists, the shortest subpath of the given path that points a defined\r\n * value in the tree\r\n */\r\n findRootMostValueAndPath(relativePath) {\r\n return this.findRootMostMatchingPathAndValue(relativePath, () => true);\r\n }\r\n /**\r\n * @returns The subtree at the given path\r\n */\r\n subtree(relativePath) {\r\n if (pathIsEmpty(relativePath)) {\r\n return this;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const childTree = this.children.get(front);\r\n if (childTree !== null) {\r\n return childTree.subtree(pathPopFront(relativePath));\r\n }\r\n else {\r\n return new ImmutableTree(null);\r\n }\r\n }\r\n }\r\n /**\r\n * Sets a value at the specified path.\r\n *\r\n * @param relativePath - Path to set value at.\r\n * @param toSet - Value to set.\r\n * @returns Resulting tree.\r\n */\r\n set(relativePath, toSet) {\r\n if (pathIsEmpty(relativePath)) {\r\n return new ImmutableTree(toSet, this.children);\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front) || new ImmutableTree(null);\r\n const newChild = child.set(pathPopFront(relativePath), toSet);\r\n const newChildren = this.children.insert(front, newChild);\r\n return new ImmutableTree(this.value, newChildren);\r\n }\r\n }\r\n /**\r\n * Removes the value at the specified path.\r\n *\r\n * @param relativePath - Path to value to remove.\r\n * @returns Resulting tree.\r\n */\r\n remove(relativePath) {\r\n if (pathIsEmpty(relativePath)) {\r\n if (this.children.isEmpty()) {\r\n return new ImmutableTree(null);\r\n }\r\n else {\r\n return new ImmutableTree(null, this.children);\r\n }\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front);\r\n if (child) {\r\n const newChild = child.remove(pathPopFront(relativePath));\r\n let newChildren;\r\n if (newChild.isEmpty()) {\r\n newChildren = this.children.remove(front);\r\n }\r\n else {\r\n newChildren = this.children.insert(front, newChild);\r\n }\r\n if (this.value === null && newChildren.isEmpty()) {\r\n return new ImmutableTree(null);\r\n }\r\n else {\r\n return new ImmutableTree(this.value, newChildren);\r\n }\r\n }\r\n else {\r\n return this;\r\n }\r\n }\r\n }\r\n /**\r\n * Gets a value from the tree.\r\n *\r\n * @param relativePath - Path to get value for.\r\n * @returns Value at path, or null.\r\n */\r\n get(relativePath) {\r\n if (pathIsEmpty(relativePath)) {\r\n return this.value;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front);\r\n if (child) {\r\n return child.get(pathPopFront(relativePath));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n /**\r\n * Replace the subtree at the specified path with the given new tree.\r\n *\r\n * @param relativePath - Path to replace subtree for.\r\n * @param newTree - New tree.\r\n * @returns Resulting tree.\r\n */\r\n setTree(relativePath, newTree) {\r\n if (pathIsEmpty(relativePath)) {\r\n return newTree;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front) || new ImmutableTree(null);\r\n const newChild = child.setTree(pathPopFront(relativePath), newTree);\r\n let newChildren;\r\n if (newChild.isEmpty()) {\r\n newChildren = this.children.remove(front);\r\n }\r\n else {\r\n newChildren = this.children.insert(front, newChild);\r\n }\r\n return new ImmutableTree(this.value, newChildren);\r\n }\r\n }\r\n /**\r\n * Performs a depth first fold on this tree. Transforms a tree into a single\r\n * value, given a function that operates on the path to a node, an optional\r\n * current value, and a map of child names to folded subtrees\r\n */\r\n fold(fn) {\r\n return this.fold_(newEmptyPath(), fn);\r\n }\r\n /**\r\n * Recursive helper for public-facing fold() method\r\n */\r\n fold_(pathSoFar, fn) {\r\n const accum = {};\r\n this.children.inorderTraversal((childKey, childTree) => {\r\n accum[childKey] = childTree.fold_(pathChild(pathSoFar, childKey), fn);\r\n });\r\n return fn(pathSoFar, this.value, accum);\r\n }\r\n /**\r\n * Find the first matching value on the given path. Return the result of applying f to it.\r\n */\r\n findOnPath(path, f) {\r\n return this.findOnPath_(path, newEmptyPath(), f);\r\n }\r\n findOnPath_(pathToFollow, pathSoFar, f) {\r\n const result = this.value ? f(pathSoFar, this.value) : false;\r\n if (result) {\r\n return result;\r\n }\r\n else {\r\n if (pathIsEmpty(pathToFollow)) {\r\n return null;\r\n }\r\n else {\r\n const front = pathGetFront(pathToFollow);\r\n const nextChild = this.children.get(front);\r\n if (nextChild) {\r\n return nextChild.findOnPath_(pathPopFront(pathToFollow), pathChild(pathSoFar, front), f);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n foreachOnPath(path, f) {\r\n return this.foreachOnPath_(path, newEmptyPath(), f);\r\n }\r\n foreachOnPath_(pathToFollow, currentRelativePath, f) {\r\n if (pathIsEmpty(pathToFollow)) {\r\n return this;\r\n }\r\n else {\r\n if (this.value) {\r\n f(currentRelativePath, this.value);\r\n }\r\n const front = pathGetFront(pathToFollow);\r\n const nextChild = this.children.get(front);\r\n if (nextChild) {\r\n return nextChild.foreachOnPath_(pathPopFront(pathToFollow), pathChild(currentRelativePath, front), f);\r\n }\r\n else {\r\n return new ImmutableTree(null);\r\n }\r\n }\r\n }\r\n /**\r\n * Calls the given function for each node in the tree that has a value.\r\n *\r\n * @param f - A function to be called with the path from the root of the tree to\r\n * a node, and the value at that node. Called in depth-first order.\r\n */\r\n foreach(f) {\r\n this.foreach_(newEmptyPath(), f);\r\n }\r\n foreach_(currentRelativePath, f) {\r\n this.children.inorderTraversal((childName, childTree) => {\r\n childTree.foreach_(pathChild(currentRelativePath, childName), f);\r\n });\r\n if (this.value) {\r\n f(currentRelativePath, this.value);\r\n }\r\n }\r\n foreachChild(f) {\r\n this.children.inorderTraversal((childName, childTree) => {\r\n if (childTree.value) {\r\n f(childName, childTree.value);\r\n }\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class holds a collection of writes that can be applied to nodes in unison. It abstracts away the logic with\r\n * dealing with priority writes and multiple nested writes. At any given path there is only allowed to be one write\r\n * modifying that path. Any write to an existing path or shadowing an existing path will modify that existing write\r\n * to reflect the write added.\r\n */\r\nclass CompoundWrite {\r\n constructor(writeTree_) {\r\n this.writeTree_ = writeTree_;\r\n }\r\n static empty() {\r\n return new CompoundWrite(new ImmutableTree(null));\r\n }\r\n}\r\nfunction compoundWriteAddWrite(compoundWrite, path, node) {\r\n if (pathIsEmpty(path)) {\r\n return new CompoundWrite(new ImmutableTree(node));\r\n }\r\n else {\r\n const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\r\n if (rootmost != null) {\r\n const rootMostPath = rootmost.path;\r\n let value = rootmost.value;\r\n const relativePath = newRelativePath(rootMostPath, path);\r\n value = value.updateChild(relativePath, node);\r\n return new CompoundWrite(compoundWrite.writeTree_.set(rootMostPath, value));\r\n }\r\n else {\r\n const subtree = new ImmutableTree(node);\r\n const newWriteTree = compoundWrite.writeTree_.setTree(path, subtree);\r\n return new CompoundWrite(newWriteTree);\r\n }\r\n }\r\n}\r\nfunction compoundWriteAddWrites(compoundWrite, path, updates) {\r\n let newWrite = compoundWrite;\r\n each(updates, (childKey, node) => {\r\n newWrite = compoundWriteAddWrite(newWrite, pathChild(path, childKey), node);\r\n });\r\n return newWrite;\r\n}\r\n/**\r\n * Will remove a write at the given path and deeper paths. This will not modify a write at a higher\r\n * location, which must be removed by calling this method with that path.\r\n *\r\n * @param compoundWrite - The CompoundWrite to remove.\r\n * @param path - The path at which a write and all deeper writes should be removed\r\n * @returns The new CompoundWrite with the removed path\r\n */\r\nfunction compoundWriteRemoveWrite(compoundWrite, path) {\r\n if (pathIsEmpty(path)) {\r\n return CompoundWrite.empty();\r\n }\r\n else {\r\n const newWriteTree = compoundWrite.writeTree_.setTree(path, new ImmutableTree(null));\r\n return new CompoundWrite(newWriteTree);\r\n }\r\n}\r\n/**\r\n * Returns whether this CompoundWrite will fully overwrite a node at a given location and can therefore be\r\n * considered \"complete\".\r\n *\r\n * @param compoundWrite - The CompoundWrite to check.\r\n * @param path - The path to check for\r\n * @returns Whether there is a complete write at that path\r\n */\r\nfunction compoundWriteHasCompleteWrite(compoundWrite, path) {\r\n return compoundWriteGetCompleteNode(compoundWrite, path) != null;\r\n}\r\n/**\r\n * Returns a node for a path if and only if the node is a \"complete\" overwrite at that path. This will not aggregate\r\n * writes from deeper paths, but will return child nodes from a more shallow path.\r\n *\r\n * @param compoundWrite - The CompoundWrite to get the node from.\r\n * @param path - The path to get a complete write\r\n * @returns The node if complete at that path, or null otherwise.\r\n */\r\nfunction compoundWriteGetCompleteNode(compoundWrite, path) {\r\n const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\r\n if (rootmost != null) {\r\n return compoundWrite.writeTree_\r\n .get(rootmost.path)\r\n .getChild(newRelativePath(rootmost.path, path));\r\n }\r\n else {\r\n return null;\r\n }\r\n}\r\n/**\r\n * Returns all children that are guaranteed to be a complete overwrite.\r\n *\r\n * @param compoundWrite - The CompoundWrite to get children from.\r\n * @returns A list of all complete children.\r\n */\r\nfunction compoundWriteGetCompleteChildren(compoundWrite) {\r\n const children = [];\r\n const node = compoundWrite.writeTree_.value;\r\n if (node != null) {\r\n // If it's a leaf node, it has no children; so nothing to do.\r\n if (!node.isLeafNode()) {\r\n node.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n children.push(new NamedNode(childName, childNode));\r\n });\r\n }\r\n }\r\n else {\r\n compoundWrite.writeTree_.children.inorderTraversal((childName, childTree) => {\r\n if (childTree.value != null) {\r\n children.push(new NamedNode(childName, childTree.value));\r\n }\r\n });\r\n }\r\n return children;\r\n}\r\nfunction compoundWriteChildCompoundWrite(compoundWrite, path) {\r\n if (pathIsEmpty(path)) {\r\n return compoundWrite;\r\n }\r\n else {\r\n const shadowingNode = compoundWriteGetCompleteNode(compoundWrite, path);\r\n if (shadowingNode != null) {\r\n return new CompoundWrite(new ImmutableTree(shadowingNode));\r\n }\r\n else {\r\n return new CompoundWrite(compoundWrite.writeTree_.subtree(path));\r\n }\r\n }\r\n}\r\n/**\r\n * Returns true if this CompoundWrite is empty and therefore does not modify any nodes.\r\n * @returns Whether this CompoundWrite is empty\r\n */\r\nfunction compoundWriteIsEmpty(compoundWrite) {\r\n return compoundWrite.writeTree_.isEmpty();\r\n}\r\n/**\r\n * Applies this CompoundWrite to a node. The node is returned with all writes from this CompoundWrite applied to the\r\n * node\r\n * @param node - The node to apply this CompoundWrite to\r\n * @returns The node with all writes applied\r\n */\r\nfunction compoundWriteApply(compoundWrite, node) {\r\n return applySubtreeWrite(newEmptyPath(), compoundWrite.writeTree_, node);\r\n}\r\nfunction applySubtreeWrite(relativePath, writeTree, node) {\r\n if (writeTree.value != null) {\r\n // Since there a write is always a leaf, we're done here\r\n return node.updateChild(relativePath, writeTree.value);\r\n }\r\n else {\r\n let priorityWrite = null;\r\n writeTree.children.inorderTraversal((childKey, childTree) => {\r\n if (childKey === '.priority') {\r\n // Apply priorities at the end so we don't update priorities for either empty nodes or forget\r\n // to apply priorities to empty nodes that are later filled\r\n assert(childTree.value !== null, 'Priority writes must always be leaf nodes');\r\n priorityWrite = childTree.value;\r\n }\r\n else {\r\n node = applySubtreeWrite(pathChild(relativePath, childKey), childTree, node);\r\n }\r\n });\r\n // If there was a priority write, we only apply it if the node is not empty\r\n if (!node.getChild(relativePath).isEmpty() && priorityWrite !== null) {\r\n node = node.updateChild(pathChild(relativePath, '.priority'), priorityWrite);\r\n }\r\n return node;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Create a new WriteTreeRef for the given path. For use with a new sync point at the given path.\r\n *\r\n */\r\nfunction writeTreeChildWrites(writeTree, path) {\r\n return newWriteTreeRef(path, writeTree);\r\n}\r\n/**\r\n * Record a new overwrite from user code.\r\n *\r\n * @param visible - This is set to false by some transactions. It should be excluded from event caches\r\n */\r\nfunction writeTreeAddOverwrite(writeTree, path, snap, writeId, visible) {\r\n assert(writeId > writeTree.lastWriteId, 'Stacking an older write on top of newer ones');\r\n if (visible === undefined) {\r\n visible = true;\r\n }\r\n writeTree.allWrites.push({\r\n path,\r\n snap,\r\n writeId,\r\n visible\r\n });\r\n if (visible) {\r\n writeTree.visibleWrites = compoundWriteAddWrite(writeTree.visibleWrites, path, snap);\r\n }\r\n writeTree.lastWriteId = writeId;\r\n}\r\n/**\r\n * Record a new merge from user code.\r\n */\r\nfunction writeTreeAddMerge(writeTree, path, changedChildren, writeId) {\r\n assert(writeId > writeTree.lastWriteId, 'Stacking an older merge on top of newer ones');\r\n writeTree.allWrites.push({\r\n path,\r\n children: changedChildren,\r\n writeId,\r\n visible: true\r\n });\r\n writeTree.visibleWrites = compoundWriteAddWrites(writeTree.visibleWrites, path, changedChildren);\r\n writeTree.lastWriteId = writeId;\r\n}\r\nfunction writeTreeGetWrite(writeTree, writeId) {\r\n for (let i = 0; i < writeTree.allWrites.length; i++) {\r\n const record = writeTree.allWrites[i];\r\n if (record.writeId === writeId) {\r\n return record;\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * Remove a write (either an overwrite or merge) that has been successfully acknowledge by the server. Recalculates\r\n * the tree if necessary. We return true if it may have been visible, meaning views need to reevaluate.\r\n *\r\n * @returns true if the write may have been visible (meaning we'll need to reevaluate / raise\r\n * events as a result).\r\n */\r\nfunction writeTreeRemoveWrite(writeTree, writeId) {\r\n // Note: disabling this check. It could be a transaction that preempted another transaction, and thus was applied\r\n // out of order.\r\n //const validClear = revert || this.allWrites_.length === 0 || writeId <= this.allWrites_[0].writeId;\r\n //assert(validClear, \"Either we don't have this write, or it's the first one in the queue\");\r\n const idx = writeTree.allWrites.findIndex(s => {\r\n return s.writeId === writeId;\r\n });\r\n assert(idx >= 0, 'removeWrite called with nonexistent writeId.');\r\n const writeToRemove = writeTree.allWrites[idx];\r\n writeTree.allWrites.splice(idx, 1);\r\n let removedWriteWasVisible = writeToRemove.visible;\r\n let removedWriteOverlapsWithOtherWrites = false;\r\n let i = writeTree.allWrites.length - 1;\r\n while (removedWriteWasVisible && i >= 0) {\r\n const currentWrite = writeTree.allWrites[i];\r\n if (currentWrite.visible) {\r\n if (i >= idx &&\r\n writeTreeRecordContainsPath_(currentWrite, writeToRemove.path)) {\r\n // The removed write was completely shadowed by a subsequent write.\r\n removedWriteWasVisible = false;\r\n }\r\n else if (pathContains(writeToRemove.path, currentWrite.path)) {\r\n // Either we're covering some writes or they're covering part of us (depending on which came first).\r\n removedWriteOverlapsWithOtherWrites = true;\r\n }\r\n }\r\n i--;\r\n }\r\n if (!removedWriteWasVisible) {\r\n return false;\r\n }\r\n else if (removedWriteOverlapsWithOtherWrites) {\r\n // There's some shadowing going on. Just rebuild the visible writes from scratch.\r\n writeTreeResetTree_(writeTree);\r\n return true;\r\n }\r\n else {\r\n // There's no shadowing. We can safely just remove the write(s) from visibleWrites.\r\n if (writeToRemove.snap) {\r\n writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, writeToRemove.path);\r\n }\r\n else {\r\n const children = writeToRemove.children;\r\n each(children, (childName) => {\r\n writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, pathChild(writeToRemove.path, childName));\r\n });\r\n }\r\n return true;\r\n }\r\n}\r\nfunction writeTreeRecordContainsPath_(writeRecord, path) {\r\n if (writeRecord.snap) {\r\n return pathContains(writeRecord.path, path);\r\n }\r\n else {\r\n for (const childName in writeRecord.children) {\r\n if (writeRecord.children.hasOwnProperty(childName) &&\r\n pathContains(pathChild(writeRecord.path, childName), path)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n/**\r\n * Re-layer the writes and merges into a tree so we can efficiently calculate event snapshots\r\n */\r\nfunction writeTreeResetTree_(writeTree) {\r\n writeTree.visibleWrites = writeTreeLayerTree_(writeTree.allWrites, writeTreeDefaultFilter_, newEmptyPath());\r\n if (writeTree.allWrites.length > 0) {\r\n writeTree.lastWriteId =\r\n writeTree.allWrites[writeTree.allWrites.length - 1].writeId;\r\n }\r\n else {\r\n writeTree.lastWriteId = -1;\r\n }\r\n}\r\n/**\r\n * The default filter used when constructing the tree. Keep everything that's visible.\r\n */\r\nfunction writeTreeDefaultFilter_(write) {\r\n return write.visible;\r\n}\r\n/**\r\n * Static method. Given an array of WriteRecords, a filter for which ones to include, and a path, construct the tree of\r\n * event data at that path.\r\n */\r\nfunction writeTreeLayerTree_(writes, filter, treeRoot) {\r\n let compoundWrite = CompoundWrite.empty();\r\n for (let i = 0; i < writes.length; ++i) {\r\n const write = writes[i];\r\n // Theory, a later set will either:\r\n // a) abort a relevant transaction, so no need to worry about excluding it from calculating that transaction\r\n // b) not be relevant to a transaction (separate branch), so again will not affect the data for that transaction\r\n if (filter(write)) {\r\n const writePath = write.path;\r\n let relativePath;\r\n if (write.snap) {\r\n if (pathContains(treeRoot, writePath)) {\r\n relativePath = newRelativePath(treeRoot, writePath);\r\n compoundWrite = compoundWriteAddWrite(compoundWrite, relativePath, write.snap);\r\n }\r\n else if (pathContains(writePath, treeRoot)) {\r\n relativePath = newRelativePath(writePath, treeRoot);\r\n compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), write.snap.getChild(relativePath));\r\n }\r\n else ;\r\n }\r\n else if (write.children) {\r\n if (pathContains(treeRoot, writePath)) {\r\n relativePath = newRelativePath(treeRoot, writePath);\r\n compoundWrite = compoundWriteAddWrites(compoundWrite, relativePath, write.children);\r\n }\r\n else if (pathContains(writePath, treeRoot)) {\r\n relativePath = newRelativePath(writePath, treeRoot);\r\n if (pathIsEmpty(relativePath)) {\r\n compoundWrite = compoundWriteAddWrites(compoundWrite, newEmptyPath(), write.children);\r\n }\r\n else {\r\n const child = safeGet(write.children, pathGetFront(relativePath));\r\n if (child) {\r\n // There exists a child in this node that matches the root path\r\n const deepNode = child.getChild(pathPopFront(relativePath));\r\n compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), deepNode);\r\n }\r\n }\r\n }\r\n else ;\r\n }\r\n else {\r\n throw assertionError('WriteRecord should have .snap or .children');\r\n }\r\n }\r\n }\r\n return compoundWrite;\r\n}\r\n/**\r\n * Given optional, underlying server data, and an optional set of constraints (exclude some sets, include hidden\r\n * writes), attempt to calculate a complete snapshot for the given path\r\n *\r\n * @param writeIdsToExclude - An optional set to be excluded\r\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\r\n */\r\nfunction writeTreeCalcCompleteEventCache(writeTree, treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n if (!writeIdsToExclude && !includeHiddenWrites) {\r\n const shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);\r\n if (shadowingNode != null) {\r\n return shadowingNode;\r\n }\r\n else {\r\n const subMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n if (compoundWriteIsEmpty(subMerge)) {\r\n return completeServerCache;\r\n }\r\n else if (completeServerCache == null &&\r\n !compoundWriteHasCompleteWrite(subMerge, newEmptyPath())) {\r\n // We wouldn't have a complete snapshot, since there's no underlying data and no complete shadow\r\n return null;\r\n }\r\n else {\r\n const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n return compoundWriteApply(subMerge, layeredCache);\r\n }\r\n }\r\n }\r\n else {\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n if (!includeHiddenWrites && compoundWriteIsEmpty(merge)) {\r\n return completeServerCache;\r\n }\r\n else {\r\n // If the server cache is null, and we don't have a complete cache, we need to return null\r\n if (!includeHiddenWrites &&\r\n completeServerCache == null &&\r\n !compoundWriteHasCompleteWrite(merge, newEmptyPath())) {\r\n return null;\r\n }\r\n else {\r\n const filter = function (write) {\r\n return ((write.visible || includeHiddenWrites) &&\r\n (!writeIdsToExclude ||\r\n !~writeIdsToExclude.indexOf(write.writeId)) &&\r\n (pathContains(write.path, treePath) ||\r\n pathContains(treePath, write.path)));\r\n };\r\n const mergeAtPath = writeTreeLayerTree_(writeTree.allWrites, filter, treePath);\r\n const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n return compoundWriteApply(mergeAtPath, layeredCache);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * With optional, underlying server data, attempt to return a children node of children that we have complete data for.\r\n * Used when creating new views, to pre-fill their complete event children snapshot.\r\n */\r\nfunction writeTreeCalcCompleteEventChildren(writeTree, treePath, completeServerChildren) {\r\n let completeChildren = ChildrenNode.EMPTY_NODE;\r\n const topLevelSet = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);\r\n if (topLevelSet) {\r\n if (!topLevelSet.isLeafNode()) {\r\n // we're shadowing everything. Return the children.\r\n topLevelSet.forEachChild(PRIORITY_INDEX, (childName, childSnap) => {\r\n completeChildren = completeChildren.updateImmediateChild(childName, childSnap);\r\n });\r\n }\r\n return completeChildren;\r\n }\r\n else if (completeServerChildren) {\r\n // Layer any children we have on top of this\r\n // We know we don't have a top-level set, so just enumerate existing children\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n completeServerChildren.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n const node = compoundWriteApply(compoundWriteChildCompoundWrite(merge, new Path(childName)), childNode);\r\n completeChildren = completeChildren.updateImmediateChild(childName, node);\r\n });\r\n // Add any complete children we have from the set\r\n compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\r\n completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n });\r\n return completeChildren;\r\n }\r\n else {\r\n // We don't have anything to layer on top of. Layer on any children we have\r\n // Note that we can return an empty snap if we have a defined delete\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\r\n completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n });\r\n return completeChildren;\r\n }\r\n}\r\n/**\r\n * Given that the underlying server data has updated, determine what, if anything, needs to be\r\n * applied to the event cache.\r\n *\r\n * Possibilities:\r\n *\r\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n *\r\n * 2. Some write is completely shadowing. No events to be raised\r\n *\r\n * 3. Is partially shadowed. Events\r\n *\r\n * Either existingEventSnap or existingServerSnap must exist\r\n */\r\nfunction writeTreeCalcEventCacheAfterServerOverwrite(writeTree, treePath, childPath, existingEventSnap, existingServerSnap) {\r\n assert(existingEventSnap || existingServerSnap, 'Either existingEventSnap or existingServerSnap must exist');\r\n const path = pathChild(treePath, childPath);\r\n if (compoundWriteHasCompleteWrite(writeTree.visibleWrites, path)) {\r\n // At this point we can probably guarantee that we're in case 2, meaning no events\r\n // May need to check visibility while doing the findRootMostValueAndPath call\r\n return null;\r\n }\r\n else {\r\n // No complete shadowing. We're either partially shadowing or not shadowing at all.\r\n const childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);\r\n if (compoundWriteIsEmpty(childMerge)) {\r\n // We're not shadowing at all. Case 1\r\n return existingServerSnap.getChild(childPath);\r\n }\r\n else {\r\n // This could be more efficient if the serverNode + updates doesn't change the eventSnap\r\n // However this is tricky to find out, since user updates don't necessary change the server\r\n // snap, e.g. priority updates on empty nodes, or deep deletes. Another special case is if the server\r\n // adds nodes, but doesn't change any existing writes. It is therefore not enough to\r\n // only check if the updates change the serverNode.\r\n // Maybe check if the merge tree contains these special cases and only do a full overwrite in that case?\r\n return compoundWriteApply(childMerge, existingServerSnap.getChild(childPath));\r\n }\r\n }\r\n}\r\n/**\r\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n * complete child for this ChildKey.\r\n */\r\nfunction writeTreeCalcCompleteChild(writeTree, treePath, childKey, existingServerSnap) {\r\n const path = pathChild(treePath, childKey);\r\n const shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\r\n if (shadowingNode != null) {\r\n return shadowingNode;\r\n }\r\n else {\r\n if (existingServerSnap.isCompleteForChild(childKey)) {\r\n const childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);\r\n return compoundWriteApply(childMerge, existingServerSnap.getNode().getImmediateChild(childKey));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n}\r\n/**\r\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n * a higher path, this will return the child of that write relative to the write and this path.\r\n * Returns null if there is no write at this path.\r\n */\r\nfunction writeTreeShadowingWrite(writeTree, path) {\r\n return compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\r\n}\r\n/**\r\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n * the window, but may now be in the window.\r\n */\r\nfunction writeTreeCalcIndexedSlice(writeTree, treePath, completeServerData, startPost, count, reverse, index) {\r\n let toIterate;\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n const shadowingNode = compoundWriteGetCompleteNode(merge, newEmptyPath());\r\n if (shadowingNode != null) {\r\n toIterate = shadowingNode;\r\n }\r\n else if (completeServerData != null) {\r\n toIterate = compoundWriteApply(merge, completeServerData);\r\n }\r\n else {\r\n // no children to iterate on\r\n return [];\r\n }\r\n toIterate = toIterate.withIndex(index);\r\n if (!toIterate.isEmpty() && !toIterate.isLeafNode()) {\r\n const nodes = [];\r\n const cmp = index.getCompare();\r\n const iter = reverse\r\n ? toIterate.getReverseIteratorFrom(startPost, index)\r\n : toIterate.getIteratorFrom(startPost, index);\r\n let next = iter.getNext();\r\n while (next && nodes.length < count) {\r\n if (cmp(next, startPost) !== 0) {\r\n nodes.push(next);\r\n }\r\n next = iter.getNext();\r\n }\r\n return nodes;\r\n }\r\n else {\r\n return [];\r\n }\r\n}\r\nfunction newWriteTree() {\r\n return {\r\n visibleWrites: CompoundWrite.empty(),\r\n allWrites: [],\r\n lastWriteId: -1\r\n };\r\n}\r\n/**\r\n * If possible, returns a complete event cache, using the underlying server data if possible. In addition, can be used\r\n * to get a cache that includes hidden writes, and excludes arbitrary writes. Note that customizing the returned node\r\n * can lead to a more expensive calculation.\r\n *\r\n * @param writeIdsToExclude - Optional writes to exclude.\r\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\r\n */\r\nfunction writeTreeRefCalcCompleteEventCache(writeTreeRef, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n return writeTreeCalcCompleteEventCache(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites);\r\n}\r\n/**\r\n * If possible, returns a children node containing all of the complete children we have data for. The returned data is a\r\n * mix of the given server data and write data.\r\n *\r\n */\r\nfunction writeTreeRefCalcCompleteEventChildren(writeTreeRef, completeServerChildren) {\r\n return writeTreeCalcCompleteEventChildren(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerChildren);\r\n}\r\n/**\r\n * Given that either the underlying server data has updated or the outstanding writes have updated, determine what,\r\n * if anything, needs to be applied to the event cache.\r\n *\r\n * Possibilities:\r\n *\r\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n *\r\n * 2. Some write is completely shadowing. No events to be raised\r\n *\r\n * 3. Is partially shadowed. Events should be raised\r\n *\r\n * Either existingEventSnap or existingServerSnap must exist, this is validated via an assert\r\n *\r\n *\r\n */\r\nfunction writeTreeRefCalcEventCacheAfterServerOverwrite(writeTreeRef, path, existingEventSnap, existingServerSnap) {\r\n return writeTreeCalcEventCacheAfterServerOverwrite(writeTreeRef.writeTree, writeTreeRef.treePath, path, existingEventSnap, existingServerSnap);\r\n}\r\n/**\r\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n * a higher path, this will return the child of that write relative to the write and this path.\r\n * Returns null if there is no write at this path.\r\n *\r\n */\r\nfunction writeTreeRefShadowingWrite(writeTreeRef, path) {\r\n return writeTreeShadowingWrite(writeTreeRef.writeTree, pathChild(writeTreeRef.treePath, path));\r\n}\r\n/**\r\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n * the window, but may now be in the window\r\n */\r\nfunction writeTreeRefCalcIndexedSlice(writeTreeRef, completeServerData, startPost, count, reverse, index) {\r\n return writeTreeCalcIndexedSlice(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerData, startPost, count, reverse, index);\r\n}\r\n/**\r\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n * complete child for this ChildKey.\r\n */\r\nfunction writeTreeRefCalcCompleteChild(writeTreeRef, childKey, existingServerCache) {\r\n return writeTreeCalcCompleteChild(writeTreeRef.writeTree, writeTreeRef.treePath, childKey, existingServerCache);\r\n}\r\n/**\r\n * Return a WriteTreeRef for a child.\r\n */\r\nfunction writeTreeRefChild(writeTreeRef, childName) {\r\n return newWriteTreeRef(pathChild(writeTreeRef.treePath, childName), writeTreeRef.writeTree);\r\n}\r\nfunction newWriteTreeRef(path, writeTree) {\r\n return {\r\n treePath: path,\r\n writeTree\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ChildChangeAccumulator {\r\n constructor() {\r\n this.changeMap = new Map();\r\n }\r\n trackChildChange(change) {\r\n const type = change.type;\r\n const childKey = change.childName;\r\n assert(type === \"child_added\" /* ChangeType.CHILD_ADDED */ ||\r\n type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ ||\r\n type === \"child_removed\" /* ChangeType.CHILD_REMOVED */, 'Only child changes supported for tracking');\r\n assert(childKey !== '.priority', 'Only non-priority child changes can be tracked.');\r\n const oldChange = this.changeMap.get(childKey);\r\n if (oldChange) {\r\n const oldType = oldChange.type;\r\n if (type === \"child_added\" /* ChangeType.CHILD_ADDED */ &&\r\n oldType === \"child_removed\" /* ChangeType.CHILD_REMOVED */) {\r\n this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.snapshotNode));\r\n }\r\n else if (type === \"child_removed\" /* ChangeType.CHILD_REMOVED */ &&\r\n oldType === \"child_added\" /* ChangeType.CHILD_ADDED */) {\r\n this.changeMap.delete(childKey);\r\n }\r\n else if (type === \"child_removed\" /* ChangeType.CHILD_REMOVED */ &&\r\n oldType === \"child_changed\" /* ChangeType.CHILD_CHANGED */) {\r\n this.changeMap.set(childKey, changeChildRemoved(childKey, oldChange.oldSnap));\r\n }\r\n else if (type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\r\n oldType === \"child_added\" /* ChangeType.CHILD_ADDED */) {\r\n this.changeMap.set(childKey, changeChildAdded(childKey, change.snapshotNode));\r\n }\r\n else if (type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\r\n oldType === \"child_changed\" /* ChangeType.CHILD_CHANGED */) {\r\n this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.oldSnap));\r\n }\r\n else {\r\n throw assertionError('Illegal combination of changes: ' +\r\n change +\r\n ' occurred after ' +\r\n oldChange);\r\n }\r\n }\r\n else {\r\n this.changeMap.set(childKey, change);\r\n }\r\n }\r\n getChanges() {\r\n return Array.from(this.changeMap.values());\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of CompleteChildSource that never returns any additional children\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nclass NoCompleteChildSource_ {\r\n getCompleteChild(childKey) {\r\n return null;\r\n }\r\n getChildAfterChild(index, child, reverse) {\r\n return null;\r\n }\r\n}\r\n/**\r\n * Singleton instance.\r\n */\r\nconst NO_COMPLETE_CHILD_SOURCE = new NoCompleteChildSource_();\r\n/**\r\n * An implementation of CompleteChildSource that uses a WriteTree in addition to any other server data or\r\n * old event caches available to calculate complete children.\r\n */\r\nclass WriteTreeCompleteChildSource {\r\n constructor(writes_, viewCache_, optCompleteServerCache_ = null) {\r\n this.writes_ = writes_;\r\n this.viewCache_ = viewCache_;\r\n this.optCompleteServerCache_ = optCompleteServerCache_;\r\n }\r\n getCompleteChild(childKey) {\r\n const node = this.viewCache_.eventCache;\r\n if (node.isCompleteForChild(childKey)) {\r\n return node.getNode().getImmediateChild(childKey);\r\n }\r\n else {\r\n const serverNode = this.optCompleteServerCache_ != null\r\n ? new CacheNode(this.optCompleteServerCache_, true, false)\r\n : this.viewCache_.serverCache;\r\n return writeTreeRefCalcCompleteChild(this.writes_, childKey, serverNode);\r\n }\r\n }\r\n getChildAfterChild(index, child, reverse) {\r\n const completeServerData = this.optCompleteServerCache_ != null\r\n ? this.optCompleteServerCache_\r\n : viewCacheGetCompleteServerSnap(this.viewCache_);\r\n const nodes = writeTreeRefCalcIndexedSlice(this.writes_, completeServerData, child, 1, reverse, index);\r\n if (nodes.length === 0) {\r\n return null;\r\n }\r\n else {\r\n return nodes[0];\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newViewProcessor(filter) {\r\n return { filter };\r\n}\r\nfunction viewProcessorAssertIndexed(viewProcessor, viewCache) {\r\n assert(viewCache.eventCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Event snap not indexed');\r\n assert(viewCache.serverCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Server snap not indexed');\r\n}\r\nfunction viewProcessorApplyOperation(viewProcessor, oldViewCache, operation, writesCache, completeCache) {\r\n const accumulator = new ChildChangeAccumulator();\r\n let newViewCache, filterServerNode;\r\n if (operation.type === OperationType.OVERWRITE) {\r\n const overwrite = operation;\r\n if (overwrite.source.fromUser) {\r\n newViewCache = viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, accumulator);\r\n }\r\n else {\r\n assert(overwrite.source.fromServer, 'Unknown source.');\r\n // We filter the node if it's a tagged update or the node has been previously filtered and the\r\n // update is not at the root in which case it is ok (and necessary) to mark the node unfiltered\r\n // again\r\n filterServerNode =\r\n overwrite.source.tagged ||\r\n (oldViewCache.serverCache.isFiltered() && !pathIsEmpty(overwrite.path));\r\n newViewCache = viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n }\r\n else if (operation.type === OperationType.MERGE) {\r\n const merge = operation;\r\n if (merge.source.fromUser) {\r\n newViewCache = viewProcessorApplyUserMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, accumulator);\r\n }\r\n else {\r\n assert(merge.source.fromServer, 'Unknown source.');\r\n // We filter the node if it's a tagged update or the node has been previously filtered\r\n filterServerNode =\r\n merge.source.tagged || oldViewCache.serverCache.isFiltered();\r\n newViewCache = viewProcessorApplyServerMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n }\r\n else if (operation.type === OperationType.ACK_USER_WRITE) {\r\n const ackUserWrite = operation;\r\n if (!ackUserWrite.revert) {\r\n newViewCache = viewProcessorAckUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, ackUserWrite.affectedTree, writesCache, completeCache, accumulator);\r\n }\r\n else {\r\n newViewCache = viewProcessorRevertUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, writesCache, completeCache, accumulator);\r\n }\r\n }\r\n else if (operation.type === OperationType.LISTEN_COMPLETE) {\r\n newViewCache = viewProcessorListenComplete(viewProcessor, oldViewCache, operation.path, writesCache, accumulator);\r\n }\r\n else {\r\n throw assertionError('Unknown operation type: ' + operation.type);\r\n }\r\n const changes = accumulator.getChanges();\r\n viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, changes);\r\n return { viewCache: newViewCache, changes };\r\n}\r\nfunction viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, accumulator) {\r\n const eventSnap = newViewCache.eventCache;\r\n if (eventSnap.isFullyInitialized()) {\r\n const isLeafOrEmpty = eventSnap.getNode().isLeafNode() || eventSnap.getNode().isEmpty();\r\n const oldCompleteSnap = viewCacheGetCompleteEventSnap(oldViewCache);\r\n if (accumulator.length > 0 ||\r\n !oldViewCache.eventCache.isFullyInitialized() ||\r\n (isLeafOrEmpty && !eventSnap.getNode().equals(oldCompleteSnap)) ||\r\n !eventSnap.getNode().getPriority().equals(oldCompleteSnap.getPriority())) {\r\n accumulator.push(changeValue(viewCacheGetCompleteEventSnap(newViewCache)));\r\n }\r\n }\r\n}\r\nfunction viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, viewCache, changePath, writesCache, source, accumulator) {\r\n const oldEventSnap = viewCache.eventCache;\r\n if (writeTreeRefShadowingWrite(writesCache, changePath) != null) {\r\n // we have a shadowing write, ignore changes\r\n return viewCache;\r\n }\r\n else {\r\n let newEventCache, serverNode;\r\n if (pathIsEmpty(changePath)) {\r\n // TODO: figure out how this plays with \"sliding ack windows\"\r\n assert(viewCache.serverCache.isFullyInitialized(), 'If change path is empty, we must have complete server data');\r\n if (viewCache.serverCache.isFiltered()) {\r\n // We need to special case this, because we need to only apply writes to complete children, or\r\n // we might end up raising events for incomplete children. If the server data is filtered deep\r\n // writes cannot be guaranteed to be complete\r\n const serverCache = viewCacheGetCompleteServerSnap(viewCache);\r\n const completeChildren = serverCache instanceof ChildrenNode\r\n ? serverCache\r\n : ChildrenNode.EMPTY_NODE;\r\n const completeEventChildren = writeTreeRefCalcCompleteEventChildren(writesCache, completeChildren);\r\n newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeEventChildren, accumulator);\r\n }\r\n else {\r\n const completeNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeNode, accumulator);\r\n }\r\n }\r\n else {\r\n const childKey = pathGetFront(changePath);\r\n if (childKey === '.priority') {\r\n assert(pathGetLength(changePath) === 1, \"Can't have a priority with additional path components\");\r\n const oldEventNode = oldEventSnap.getNode();\r\n serverNode = viewCache.serverCache.getNode();\r\n // we might have overwrites for this priority\r\n const updatedPriority = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventNode, serverNode);\r\n if (updatedPriority != null) {\r\n newEventCache = viewProcessor.filter.updatePriority(oldEventNode, updatedPriority);\r\n }\r\n else {\r\n // priority didn't change, keep old node\r\n newEventCache = oldEventSnap.getNode();\r\n }\r\n }\r\n else {\r\n const childChangePath = pathPopFront(changePath);\r\n // update child\r\n let newEventChild;\r\n if (oldEventSnap.isCompleteForChild(childKey)) {\r\n serverNode = viewCache.serverCache.getNode();\r\n const eventChildUpdate = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventSnap.getNode(), serverNode);\r\n if (eventChildUpdate != null) {\r\n newEventChild = oldEventSnap\r\n .getNode()\r\n .getImmediateChild(childKey)\r\n .updateChild(childChangePath, eventChildUpdate);\r\n }\r\n else {\r\n // Nothing changed, just keep the old child\r\n newEventChild = oldEventSnap.getNode().getImmediateChild(childKey);\r\n }\r\n }\r\n else {\r\n newEventChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);\r\n }\r\n if (newEventChild != null) {\r\n newEventCache = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newEventChild, childChangePath, source, accumulator);\r\n }\r\n else {\r\n // no complete child available or no change\r\n newEventCache = oldEventSnap.getNode();\r\n }\r\n }\r\n }\r\n return viewCacheUpdateEventSnap(viewCache, newEventCache, oldEventSnap.isFullyInitialized() || pathIsEmpty(changePath), viewProcessor.filter.filtersNodes());\r\n }\r\n}\r\nfunction viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, filterServerNode, accumulator) {\r\n const oldServerSnap = oldViewCache.serverCache;\r\n let newServerCache;\r\n const serverFilter = filterServerNode\r\n ? viewProcessor.filter\r\n : viewProcessor.filter.getIndexedFilter();\r\n if (pathIsEmpty(changePath)) {\r\n newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), changedSnap, null);\r\n }\r\n else if (serverFilter.filtersNodes() && !oldServerSnap.isFiltered()) {\r\n // we want to filter the server node, but we didn't filter the server node yet, so simulate a full update\r\n const newServerNode = oldServerSnap\r\n .getNode()\r\n .updateChild(changePath, changedSnap);\r\n newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), newServerNode, null);\r\n }\r\n else {\r\n const childKey = pathGetFront(changePath);\r\n if (!oldServerSnap.isCompleteForPath(changePath) &&\r\n pathGetLength(changePath) > 1) {\r\n // We don't update incomplete nodes with updates intended for other listeners\r\n return oldViewCache;\r\n }\r\n const childChangePath = pathPopFront(changePath);\r\n const childNode = oldServerSnap.getNode().getImmediateChild(childKey);\r\n const newChildNode = childNode.updateChild(childChangePath, changedSnap);\r\n if (childKey === '.priority') {\r\n newServerCache = serverFilter.updatePriority(oldServerSnap.getNode(), newChildNode);\r\n }\r\n else {\r\n newServerCache = serverFilter.updateChild(oldServerSnap.getNode(), childKey, newChildNode, childChangePath, NO_COMPLETE_CHILD_SOURCE, null);\r\n }\r\n }\r\n const newViewCache = viewCacheUpdateServerSnap(oldViewCache, newServerCache, oldServerSnap.isFullyInitialized() || pathIsEmpty(changePath), serverFilter.filtersNodes());\r\n const source = new WriteTreeCompleteChildSource(writesCache, newViewCache, completeCache);\r\n return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, changePath, writesCache, source, accumulator);\r\n}\r\nfunction viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, accumulator) {\r\n const oldEventSnap = oldViewCache.eventCache;\r\n let newViewCache, newEventCache;\r\n const source = new WriteTreeCompleteChildSource(writesCache, oldViewCache, completeCache);\r\n if (pathIsEmpty(changePath)) {\r\n newEventCache = viewProcessor.filter.updateFullNode(oldViewCache.eventCache.getNode(), changedSnap, accumulator);\r\n newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, true, viewProcessor.filter.filtersNodes());\r\n }\r\n else {\r\n const childKey = pathGetFront(changePath);\r\n if (childKey === '.priority') {\r\n newEventCache = viewProcessor.filter.updatePriority(oldViewCache.eventCache.getNode(), changedSnap);\r\n newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, oldEventSnap.isFullyInitialized(), oldEventSnap.isFiltered());\r\n }\r\n else {\r\n const childChangePath = pathPopFront(changePath);\r\n const oldChild = oldEventSnap.getNode().getImmediateChild(childKey);\r\n let newChild;\r\n if (pathIsEmpty(childChangePath)) {\r\n // Child overwrite, we can replace the child\r\n newChild = changedSnap;\r\n }\r\n else {\r\n const childNode = source.getCompleteChild(childKey);\r\n if (childNode != null) {\r\n if (pathGetBack(childChangePath) === '.priority' &&\r\n childNode.getChild(pathParent(childChangePath)).isEmpty()) {\r\n // This is a priority update on an empty node. If this node exists on the server, the\r\n // server will send down the priority in the update, so ignore for now\r\n newChild = childNode;\r\n }\r\n else {\r\n newChild = childNode.updateChild(childChangePath, changedSnap);\r\n }\r\n }\r\n else {\r\n // There is no complete child node available\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n }\r\n if (!oldChild.equals(newChild)) {\r\n const newEventSnap = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newChild, childChangePath, source, accumulator);\r\n newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventSnap, oldEventSnap.isFullyInitialized(), viewProcessor.filter.filtersNodes());\r\n }\r\n else {\r\n newViewCache = oldViewCache;\r\n }\r\n }\r\n }\r\n return newViewCache;\r\n}\r\nfunction viewProcessorCacheHasChild(viewCache, childKey) {\r\n return viewCache.eventCache.isCompleteForChild(childKey);\r\n}\r\nfunction viewProcessorApplyUserMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, accumulator) {\r\n // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n // window leaving room for new items. It's important we process these changes first, so we\r\n // iterate the changes twice, first processing any that affect items currently in view.\r\n // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n // and event snap. I'm not sure if this will result in edge cases when a child is in one but\r\n // not the other.\r\n let curViewCache = viewCache;\r\n changedChildren.foreach((relativePath, childNode) => {\r\n const writePath = pathChild(path, relativePath);\r\n if (viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\r\n curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n }\r\n });\r\n changedChildren.foreach((relativePath, childNode) => {\r\n const writePath = pathChild(path, relativePath);\r\n if (!viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\r\n curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n }\r\n });\r\n return curViewCache;\r\n}\r\nfunction viewProcessorApplyMerge(viewProcessor, node, merge) {\r\n merge.foreach((relativePath, childNode) => {\r\n node = node.updateChild(relativePath, childNode);\r\n });\r\n return node;\r\n}\r\nfunction viewProcessorApplyServerMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, filterServerNode, accumulator) {\r\n // If we don't have a cache yet, this merge was intended for a previously listen in the same location. Ignore it and\r\n // wait for the complete data update coming soon.\r\n if (viewCache.serverCache.getNode().isEmpty() &&\r\n !viewCache.serverCache.isFullyInitialized()) {\r\n return viewCache;\r\n }\r\n // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n // window leaving room for new items. It's important we process these changes first, so we\r\n // iterate the changes twice, first processing any that affect items currently in view.\r\n // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n // and event snap. I'm not sure if this will result in edge cases when a child is in one but\r\n // not the other.\r\n let curViewCache = viewCache;\r\n let viewMergeTree;\r\n if (pathIsEmpty(path)) {\r\n viewMergeTree = changedChildren;\r\n }\r\n else {\r\n viewMergeTree = new ImmutableTree(null).setTree(path, changedChildren);\r\n }\r\n const serverNode = viewCache.serverCache.getNode();\r\n viewMergeTree.children.inorderTraversal((childKey, childTree) => {\r\n if (serverNode.hasChild(childKey)) {\r\n const serverChild = viewCache.serverCache\r\n .getNode()\r\n .getImmediateChild(childKey);\r\n const newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childTree);\r\n curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n }\r\n });\r\n viewMergeTree.children.inorderTraversal((childKey, childMergeTree) => {\r\n const isUnknownDeepMerge = !viewCache.serverCache.isCompleteForChild(childKey) &&\r\n childMergeTree.value === null;\r\n if (!serverNode.hasChild(childKey) && !isUnknownDeepMerge) {\r\n const serverChild = viewCache.serverCache\r\n .getNode()\r\n .getImmediateChild(childKey);\r\n const newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childMergeTree);\r\n curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n }\r\n });\r\n return curViewCache;\r\n}\r\nfunction viewProcessorAckUserWrite(viewProcessor, viewCache, ackPath, affectedTree, writesCache, completeCache, accumulator) {\r\n if (writeTreeRefShadowingWrite(writesCache, ackPath) != null) {\r\n return viewCache;\r\n }\r\n // Only filter server node if it is currently filtered\r\n const filterServerNode = viewCache.serverCache.isFiltered();\r\n // Essentially we'll just get our existing server cache for the affected paths and re-apply it as a server update\r\n // now that it won't be shadowed.\r\n const serverCache = viewCache.serverCache;\r\n if (affectedTree.value != null) {\r\n // This is an overwrite.\r\n if ((pathIsEmpty(ackPath) && serverCache.isFullyInitialized()) ||\r\n serverCache.isCompleteForPath(ackPath)) {\r\n return viewProcessorApplyServerOverwrite(viewProcessor, viewCache, ackPath, serverCache.getNode().getChild(ackPath), writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n else if (pathIsEmpty(ackPath)) {\r\n // This is a goofy edge case where we are acking data at this location but don't have full data. We\r\n // should just re-apply whatever we have in our cache as a merge.\r\n let changedChildren = new ImmutableTree(null);\r\n serverCache.getNode().forEachChild(KEY_INDEX, (name, node) => {\r\n changedChildren = changedChildren.set(new Path(name), node);\r\n });\r\n return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n else {\r\n return viewCache;\r\n }\r\n }\r\n else {\r\n // This is a merge.\r\n let changedChildren = new ImmutableTree(null);\r\n affectedTree.foreach((mergePath, value) => {\r\n const serverCachePath = pathChild(ackPath, mergePath);\r\n if (serverCache.isCompleteForPath(serverCachePath)) {\r\n changedChildren = changedChildren.set(mergePath, serverCache.getNode().getChild(serverCachePath));\r\n }\r\n });\r\n return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n}\r\nfunction viewProcessorListenComplete(viewProcessor, viewCache, path, writesCache, accumulator) {\r\n const oldServerNode = viewCache.serverCache;\r\n const newViewCache = viewCacheUpdateServerSnap(viewCache, oldServerNode.getNode(), oldServerNode.isFullyInitialized() || pathIsEmpty(path), oldServerNode.isFiltered());\r\n return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, path, writesCache, NO_COMPLETE_CHILD_SOURCE, accumulator);\r\n}\r\nfunction viewProcessorRevertUserWrite(viewProcessor, viewCache, path, writesCache, completeServerCache, accumulator) {\r\n let complete;\r\n if (writeTreeRefShadowingWrite(writesCache, path) != null) {\r\n return viewCache;\r\n }\r\n else {\r\n const source = new WriteTreeCompleteChildSource(writesCache, viewCache, completeServerCache);\r\n const oldEventCache = viewCache.eventCache.getNode();\r\n let newEventCache;\r\n if (pathIsEmpty(path) || pathGetFront(path) === '.priority') {\r\n let newNode;\r\n if (viewCache.serverCache.isFullyInitialized()) {\r\n newNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n }\r\n else {\r\n const serverChildren = viewCache.serverCache.getNode();\r\n assert(serverChildren instanceof ChildrenNode, 'serverChildren would be complete if leaf node');\r\n newNode = writeTreeRefCalcCompleteEventChildren(writesCache, serverChildren);\r\n }\r\n newNode = newNode;\r\n newEventCache = viewProcessor.filter.updateFullNode(oldEventCache, newNode, accumulator);\r\n }\r\n else {\r\n const childKey = pathGetFront(path);\r\n let newChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);\r\n if (newChild == null &&\r\n viewCache.serverCache.isCompleteForChild(childKey)) {\r\n newChild = oldEventCache.getImmediateChild(childKey);\r\n }\r\n if (newChild != null) {\r\n newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, newChild, pathPopFront(path), source, accumulator);\r\n }\r\n else if (viewCache.eventCache.getNode().hasChild(childKey)) {\r\n // No complete child available, delete the existing one, if any\r\n newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, ChildrenNode.EMPTY_NODE, pathPopFront(path), source, accumulator);\r\n }\r\n else {\r\n newEventCache = oldEventCache;\r\n }\r\n if (newEventCache.isEmpty() &&\r\n viewCache.serverCache.isFullyInitialized()) {\r\n // We might have reverted all child writes. Maybe the old event was a leaf node\r\n complete = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n if (complete.isLeafNode()) {\r\n newEventCache = viewProcessor.filter.updateFullNode(newEventCache, complete, accumulator);\r\n }\r\n }\r\n }\r\n complete =\r\n viewCache.serverCache.isFullyInitialized() ||\r\n writeTreeRefShadowingWrite(writesCache, newEmptyPath()) != null;\r\n return viewCacheUpdateEventSnap(viewCache, newEventCache, complete, viewProcessor.filter.filtersNodes());\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A view represents a specific location and query that has 1 or more event registrations.\r\n *\r\n * It does several things:\r\n * - Maintains the list of event registrations for this location/query.\r\n * - Maintains a cache of the data visible for this location/query.\r\n * - Applies new operations (via applyOperation), updates the cache, and based on the event\r\n * registrations returns the set of events to be raised.\r\n */\r\nclass View {\r\n constructor(query_, initialViewCache) {\r\n this.query_ = query_;\r\n this.eventRegistrations_ = [];\r\n const params = this.query_._queryParams;\r\n const indexFilter = new IndexedFilter(params.getIndex());\r\n const filter = queryParamsGetNodeFilter(params);\r\n this.processor_ = newViewProcessor(filter);\r\n const initialServerCache = initialViewCache.serverCache;\r\n const initialEventCache = initialViewCache.eventCache;\r\n // Don't filter server node with other filter than index, wait for tagged listen\r\n const serverSnap = indexFilter.updateFullNode(ChildrenNode.EMPTY_NODE, initialServerCache.getNode(), null);\r\n const eventSnap = filter.updateFullNode(ChildrenNode.EMPTY_NODE, initialEventCache.getNode(), null);\r\n const newServerCache = new CacheNode(serverSnap, initialServerCache.isFullyInitialized(), indexFilter.filtersNodes());\r\n const newEventCache = new CacheNode(eventSnap, initialEventCache.isFullyInitialized(), filter.filtersNodes());\r\n this.viewCache_ = newViewCache(newEventCache, newServerCache);\r\n this.eventGenerator_ = new EventGenerator(this.query_);\r\n }\r\n get query() {\r\n return this.query_;\r\n }\r\n}\r\nfunction viewGetServerCache(view) {\r\n return view.viewCache_.serverCache.getNode();\r\n}\r\nfunction viewGetCompleteNode(view) {\r\n return viewCacheGetCompleteEventSnap(view.viewCache_);\r\n}\r\nfunction viewGetCompleteServerCache(view, path) {\r\n const cache = viewCacheGetCompleteServerSnap(view.viewCache_);\r\n if (cache) {\r\n // If this isn't a \"loadsAllData\" view, then cache isn't actually a complete cache and\r\n // we need to see if it contains the child we're interested in.\r\n if (view.query._queryParams.loadsAllData() ||\r\n (!pathIsEmpty(path) &&\r\n !cache.getImmediateChild(pathGetFront(path)).isEmpty())) {\r\n return cache.getChild(path);\r\n }\r\n }\r\n return null;\r\n}\r\nfunction viewIsEmpty(view) {\r\n return view.eventRegistrations_.length === 0;\r\n}\r\nfunction viewAddEventRegistration(view, eventRegistration) {\r\n view.eventRegistrations_.push(eventRegistration);\r\n}\r\n/**\r\n * @param eventRegistration - If null, remove all callbacks.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @returns Cancel events, if cancelError was provided.\r\n */\r\nfunction viewRemoveEventRegistration(view, eventRegistration, cancelError) {\r\n const cancelEvents = [];\r\n if (cancelError) {\r\n assert(eventRegistration == null, 'A cancel should cancel all event registrations.');\r\n const path = view.query._path;\r\n view.eventRegistrations_.forEach(registration => {\r\n const maybeEvent = registration.createCancelEvent(cancelError, path);\r\n if (maybeEvent) {\r\n cancelEvents.push(maybeEvent);\r\n }\r\n });\r\n }\r\n if (eventRegistration) {\r\n let remaining = [];\r\n for (let i = 0; i < view.eventRegistrations_.length; ++i) {\r\n const existing = view.eventRegistrations_[i];\r\n if (!existing.matches(eventRegistration)) {\r\n remaining.push(existing);\r\n }\r\n else if (eventRegistration.hasAnyCallback()) {\r\n // We're removing just this one\r\n remaining = remaining.concat(view.eventRegistrations_.slice(i + 1));\r\n break;\r\n }\r\n }\r\n view.eventRegistrations_ = remaining;\r\n }\r\n else {\r\n view.eventRegistrations_ = [];\r\n }\r\n return cancelEvents;\r\n}\r\n/**\r\n * Applies the given Operation, updates our cache, and returns the appropriate events.\r\n */\r\nfunction viewApplyOperation(view, operation, writesCache, completeServerCache) {\r\n if (operation.type === OperationType.MERGE &&\r\n operation.source.queryId !== null) {\r\n assert(viewCacheGetCompleteServerSnap(view.viewCache_), 'We should always have a full cache before handling merges');\r\n assert(viewCacheGetCompleteEventSnap(view.viewCache_), 'Missing event cache, even though we have a server cache');\r\n }\r\n const oldViewCache = view.viewCache_;\r\n const result = viewProcessorApplyOperation(view.processor_, oldViewCache, operation, writesCache, completeServerCache);\r\n viewProcessorAssertIndexed(view.processor_, result.viewCache);\r\n assert(result.viewCache.serverCache.isFullyInitialized() ||\r\n !oldViewCache.serverCache.isFullyInitialized(), 'Once a server snap is complete, it should never go back');\r\n view.viewCache_ = result.viewCache;\r\n return viewGenerateEventsForChanges_(view, result.changes, result.viewCache.eventCache.getNode(), null);\r\n}\r\nfunction viewGetInitialEvents(view, registration) {\r\n const eventSnap = view.viewCache_.eventCache;\r\n const initialChanges = [];\r\n if (!eventSnap.getNode().isLeafNode()) {\r\n const eventNode = eventSnap.getNode();\r\n eventNode.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n initialChanges.push(changeChildAdded(key, childNode));\r\n });\r\n }\r\n if (eventSnap.isFullyInitialized()) {\r\n initialChanges.push(changeValue(eventSnap.getNode()));\r\n }\r\n return viewGenerateEventsForChanges_(view, initialChanges, eventSnap.getNode(), registration);\r\n}\r\nfunction viewGenerateEventsForChanges_(view, changes, eventCache, eventRegistration) {\r\n const registrations = eventRegistration\r\n ? [eventRegistration]\r\n : view.eventRegistrations_;\r\n return eventGeneratorGenerateEventsForChanges(view.eventGenerator_, changes, eventCache, registrations);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet referenceConstructor$1;\r\n/**\r\n * SyncPoint represents a single location in a SyncTree with 1 or more event registrations, meaning we need to\r\n * maintain 1 or more Views at this location to cache server data and raise appropriate events for server changes\r\n * and user writes (set, transaction, update).\r\n *\r\n * It's responsible for:\r\n * - Maintaining the set of 1 or more views necessary at this location (a SyncPoint with 0 views should be removed).\r\n * - Proxying user / server operations to the views as appropriate (i.e. applyServerOverwrite,\r\n * applyUserOverwrite, etc.)\r\n */\r\nclass SyncPoint {\r\n constructor() {\r\n /**\r\n * The Views being tracked at this location in the tree, stored as a map where the key is a\r\n * queryId and the value is the View for that query.\r\n *\r\n * NOTE: This list will be quite small (usually 1, but perhaps 2 or 3; any more is an odd use case).\r\n */\r\n this.views = new Map();\r\n }\r\n}\r\nfunction syncPointSetReferenceConstructor(val) {\r\n assert(!referenceConstructor$1, '__referenceConstructor has already been defined');\r\n referenceConstructor$1 = val;\r\n}\r\nfunction syncPointGetReferenceConstructor() {\r\n assert(referenceConstructor$1, 'Reference.ts has not been loaded');\r\n return referenceConstructor$1;\r\n}\r\nfunction syncPointIsEmpty(syncPoint) {\r\n return syncPoint.views.size === 0;\r\n}\r\nfunction syncPointApplyOperation(syncPoint, operation, writesCache, optCompleteServerCache) {\r\n const queryId = operation.source.queryId;\r\n if (queryId !== null) {\r\n const view = syncPoint.views.get(queryId);\r\n assert(view != null, 'SyncTree gave us an op for an invalid query.');\r\n return viewApplyOperation(view, operation, writesCache, optCompleteServerCache);\r\n }\r\n else {\r\n let events = [];\r\n for (const view of syncPoint.views.values()) {\r\n events = events.concat(viewApplyOperation(view, operation, writesCache, optCompleteServerCache));\r\n }\r\n return events;\r\n }\r\n}\r\n/**\r\n * Get a view for the specified query.\r\n *\r\n * @param query - The query to return a view for\r\n * @param writesCache\r\n * @param serverCache\r\n * @param serverCacheComplete\r\n * @returns Events to raise.\r\n */\r\nfunction syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete) {\r\n const queryId = query._queryIdentifier;\r\n const view = syncPoint.views.get(queryId);\r\n if (!view) {\r\n // TODO: make writesCache take flag for complete server node\r\n let eventCache = writeTreeRefCalcCompleteEventCache(writesCache, serverCacheComplete ? serverCache : null);\r\n let eventCacheComplete = false;\r\n if (eventCache) {\r\n eventCacheComplete = true;\r\n }\r\n else if (serverCache instanceof ChildrenNode) {\r\n eventCache = writeTreeRefCalcCompleteEventChildren(writesCache, serverCache);\r\n eventCacheComplete = false;\r\n }\r\n else {\r\n eventCache = ChildrenNode.EMPTY_NODE;\r\n eventCacheComplete = false;\r\n }\r\n const viewCache = newViewCache(new CacheNode(eventCache, eventCacheComplete, false), new CacheNode(serverCache, serverCacheComplete, false));\r\n return new View(query, viewCache);\r\n }\r\n return view;\r\n}\r\n/**\r\n * Add an event callback for the specified query.\r\n *\r\n * @param query\r\n * @param eventRegistration\r\n * @param writesCache\r\n * @param serverCache - Complete server cache, if we have it.\r\n * @param serverCacheComplete\r\n * @returns Events to raise.\r\n */\r\nfunction syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete) {\r\n const view = syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete);\r\n if (!syncPoint.views.has(query._queryIdentifier)) {\r\n syncPoint.views.set(query._queryIdentifier, view);\r\n }\r\n // This is guaranteed to exist now, we just created anything that was missing\r\n viewAddEventRegistration(view, eventRegistration);\r\n return viewGetInitialEvents(view, eventRegistration);\r\n}\r\n/**\r\n * Remove event callback(s). Return cancelEvents if a cancelError is specified.\r\n *\r\n * If query is the default query, we'll check all views for the specified eventRegistration.\r\n * If eventRegistration is null, we'll remove all callbacks for the specified view(s).\r\n *\r\n * @param eventRegistration - If null, remove all callbacks.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @returns removed queries and any cancel events\r\n */\r\nfunction syncPointRemoveEventRegistration(syncPoint, query, eventRegistration, cancelError) {\r\n const queryId = query._queryIdentifier;\r\n const removed = [];\r\n let cancelEvents = [];\r\n const hadCompleteView = syncPointHasCompleteView(syncPoint);\r\n if (queryId === 'default') {\r\n // When you do ref.off(...), we search all views for the registration to remove.\r\n for (const [viewQueryId, view] of syncPoint.views.entries()) {\r\n cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));\r\n if (viewIsEmpty(view)) {\r\n syncPoint.views.delete(viewQueryId);\r\n // We'll deal with complete views later.\r\n if (!view.query._queryParams.loadsAllData()) {\r\n removed.push(view.query);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // remove the callback from the specific view.\r\n const view = syncPoint.views.get(queryId);\r\n if (view) {\r\n cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));\r\n if (viewIsEmpty(view)) {\r\n syncPoint.views.delete(queryId);\r\n // We'll deal with complete views later.\r\n if (!view.query._queryParams.loadsAllData()) {\r\n removed.push(view.query);\r\n }\r\n }\r\n }\r\n }\r\n if (hadCompleteView && !syncPointHasCompleteView(syncPoint)) {\r\n // We removed our last complete view.\r\n removed.push(new (syncPointGetReferenceConstructor())(query._repo, query._path));\r\n }\r\n return { removed, events: cancelEvents };\r\n}\r\nfunction syncPointGetQueryViews(syncPoint) {\r\n const result = [];\r\n for (const view of syncPoint.views.values()) {\r\n if (!view.query._queryParams.loadsAllData()) {\r\n result.push(view);\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * @param path - The path to the desired complete snapshot\r\n * @returns A complete cache, if it exists\r\n */\r\nfunction syncPointGetCompleteServerCache(syncPoint, path) {\r\n let serverCache = null;\r\n for (const view of syncPoint.views.values()) {\r\n serverCache = serverCache || viewGetCompleteServerCache(view, path);\r\n }\r\n return serverCache;\r\n}\r\nfunction syncPointViewForQuery(syncPoint, query) {\r\n const params = query._queryParams;\r\n if (params.loadsAllData()) {\r\n return syncPointGetCompleteView(syncPoint);\r\n }\r\n else {\r\n const queryId = query._queryIdentifier;\r\n return syncPoint.views.get(queryId);\r\n }\r\n}\r\nfunction syncPointViewExistsForQuery(syncPoint, query) {\r\n return syncPointViewForQuery(syncPoint, query) != null;\r\n}\r\nfunction syncPointHasCompleteView(syncPoint) {\r\n return syncPointGetCompleteView(syncPoint) != null;\r\n}\r\nfunction syncPointGetCompleteView(syncPoint) {\r\n for (const view of syncPoint.views.values()) {\r\n if (view.query._queryParams.loadsAllData()) {\r\n return view;\r\n }\r\n }\r\n return null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet referenceConstructor;\r\nfunction syncTreeSetReferenceConstructor(val) {\r\n assert(!referenceConstructor, '__referenceConstructor has already been defined');\r\n referenceConstructor = val;\r\n}\r\nfunction syncTreeGetReferenceConstructor() {\r\n assert(referenceConstructor, 'Reference.ts has not been loaded');\r\n return referenceConstructor;\r\n}\r\n/**\r\n * Static tracker for next query tag.\r\n */\r\nlet syncTreeNextQueryTag_ = 1;\r\n/**\r\n * SyncTree is the central class for managing event callback registration, data caching, views\r\n * (query processing), and event generation. There are typically two SyncTree instances for\r\n * each Repo, one for the normal Firebase data, and one for the .info data.\r\n *\r\n * It has a number of responsibilities, including:\r\n * - Tracking all user event callbacks (registered via addEventRegistration() and removeEventRegistration()).\r\n * - Applying and caching data changes for user set(), transaction(), and update() calls\r\n * (applyUserOverwrite(), applyUserMerge()).\r\n * - Applying and caching data changes for server data changes (applyServerOverwrite(),\r\n * applyServerMerge()).\r\n * - Generating user-facing events for server and user changes (all of the apply* methods\r\n * return the set of events that need to be raised as a result).\r\n * - Maintaining the appropriate set of server listens to ensure we are always subscribed\r\n * to the correct set of paths and queries to satisfy the current set of user event\r\n * callbacks (listens are started/stopped using the provided listenProvider).\r\n *\r\n * NOTE: Although SyncTree tracks event callbacks and calculates events to raise, the actual\r\n * events are returned to the caller rather than raised synchronously.\r\n *\r\n */\r\nclass SyncTree {\r\n /**\r\n * @param listenProvider_ - Used by SyncTree to start / stop listening\r\n * to server data.\r\n */\r\n constructor(listenProvider_) {\r\n this.listenProvider_ = listenProvider_;\r\n /**\r\n * Tree of SyncPoints. There's a SyncPoint at any location that has 1 or more views.\r\n */\r\n this.syncPointTree_ = new ImmutableTree(null);\r\n /**\r\n * A tree of all pending user writes (user-initiated set()'s, transaction()'s, update()'s, etc.).\r\n */\r\n this.pendingWriteTree_ = newWriteTree();\r\n this.tagToQueryMap = new Map();\r\n this.queryToTagMap = new Map();\r\n }\r\n}\r\n/**\r\n * Apply the data changes for a user-generated set() or transaction() call.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyUserOverwrite(syncTree, path, newData, writeId, visible) {\r\n // Record pending write.\r\n writeTreeAddOverwrite(syncTree.pendingWriteTree_, path, newData, writeId, visible);\r\n if (!visible) {\r\n return [];\r\n }\r\n else {\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceUser(), path, newData));\r\n }\r\n}\r\n/**\r\n * Apply the data from a user-generated update() call\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyUserMerge(syncTree, path, changedChildren, writeId) {\r\n // Record pending merge.\r\n writeTreeAddMerge(syncTree.pendingWriteTree_, path, changedChildren, writeId);\r\n const changeTree = ImmutableTree.fromObject(changedChildren);\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceUser(), path, changeTree));\r\n}\r\n/**\r\n * Acknowledge a pending user write that was previously registered with applyUserOverwrite() or applyUserMerge().\r\n *\r\n * @param revert - True if the given write failed and needs to be reverted\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeAckUserWrite(syncTree, writeId, revert = false) {\r\n const write = writeTreeGetWrite(syncTree.pendingWriteTree_, writeId);\r\n const needToReevaluate = writeTreeRemoveWrite(syncTree.pendingWriteTree_, writeId);\r\n if (!needToReevaluate) {\r\n return [];\r\n }\r\n else {\r\n let affectedTree = new ImmutableTree(null);\r\n if (write.snap != null) {\r\n // overwrite\r\n affectedTree = affectedTree.set(newEmptyPath(), true);\r\n }\r\n else {\r\n each(write.children, (pathString) => {\r\n affectedTree = affectedTree.set(new Path(pathString), true);\r\n });\r\n }\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new AckUserWrite(write.path, affectedTree, revert));\r\n }\r\n}\r\n/**\r\n * Apply new server data for the specified path..\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyServerOverwrite(syncTree, path, newData) {\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceServer(), path, newData));\r\n}\r\n/**\r\n * Apply new server data to be merged in at the specified path.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyServerMerge(syncTree, path, changedChildren) {\r\n const changeTree = ImmutableTree.fromObject(changedChildren);\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceServer(), path, changeTree));\r\n}\r\n/**\r\n * Apply a listen complete for a query\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyListenComplete(syncTree, path) {\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new ListenComplete(newOperationSourceServer(), path));\r\n}\r\n/**\r\n * Apply a listen complete for a tagged query\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedListenComplete(syncTree, path, tag) {\r\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n if (queryKey) {\r\n const r = syncTreeParseQueryKey_(queryKey);\r\n const queryPath = r.path, queryId = r.queryId;\r\n const relativePath = newRelativePath(queryPath, path);\r\n const op = new ListenComplete(newOperationSourceServerTaggedQuery(queryId), relativePath);\r\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n }\r\n else {\r\n // We've already removed the query. No big deal, ignore the update\r\n return [];\r\n }\r\n}\r\n/**\r\n * Remove event callback(s).\r\n *\r\n * If query is the default query, we'll check all queries for the specified eventRegistration.\r\n * If eventRegistration is null, we'll remove all callbacks for the specified query/queries.\r\n *\r\n * @param eventRegistration - If null, all callbacks are removed.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @param skipListenerDedup - When performing a `get()`, we don't add any new listeners, so no\r\n * deduping needs to take place. This flag allows toggling of that behavior\r\n * @returns Cancel events, if cancelError was provided.\r\n */\r\nfunction syncTreeRemoveEventRegistration(syncTree, query, eventRegistration, cancelError, skipListenerDedup = false) {\r\n // Find the syncPoint first. Then deal with whether or not it has matching listeners\r\n const path = query._path;\r\n const maybeSyncPoint = syncTree.syncPointTree_.get(path);\r\n let cancelEvents = [];\r\n // A removal on a default query affects all queries at that location. A removal on an indexed query, even one without\r\n // other query constraints, does *not* affect all queries at that location. So this check must be for 'default', and\r\n // not loadsAllData().\r\n if (maybeSyncPoint &&\r\n (query._queryIdentifier === 'default' ||\r\n syncPointViewExistsForQuery(maybeSyncPoint, query))) {\r\n const removedAndEvents = syncPointRemoveEventRegistration(maybeSyncPoint, query, eventRegistration, cancelError);\r\n if (syncPointIsEmpty(maybeSyncPoint)) {\r\n syncTree.syncPointTree_ = syncTree.syncPointTree_.remove(path);\r\n }\r\n const removed = removedAndEvents.removed;\r\n cancelEvents = removedAndEvents.events;\r\n if (!skipListenerDedup) {\r\n /**\r\n * We may have just removed one of many listeners and can short-circuit this whole process\r\n * We may also not have removed a default listener, in which case all of the descendant listeners should already be\r\n * properly set up.\r\n */\r\n // Since indexed queries can shadow if they don't have other query constraints, check for loadsAllData(), instead of\r\n // queryId === 'default'\r\n const removingDefault = -1 !==\r\n removed.findIndex(query => {\r\n return query._queryParams.loadsAllData();\r\n });\r\n const covered = syncTree.syncPointTree_.findOnPath(path, (relativePath, parentSyncPoint) => syncPointHasCompleteView(parentSyncPoint));\r\n if (removingDefault && !covered) {\r\n const subtree = syncTree.syncPointTree_.subtree(path);\r\n // There are potentially child listeners. Determine what if any listens we need to send before executing the\r\n // removal\r\n if (!subtree.isEmpty()) {\r\n // We need to fold over our subtree and collect the listeners to send\r\n const newViews = syncTreeCollectDistinctViewsForSubTree_(subtree);\r\n // Ok, we've collected all the listens we need. Set them up.\r\n for (let i = 0; i < newViews.length; ++i) {\r\n const view = newViews[i], newQuery = view.query;\r\n const listener = syncTreeCreateListenerForView_(syncTree, view);\r\n syncTree.listenProvider_.startListening(syncTreeQueryForListening_(newQuery), syncTreeTagForQuery(syncTree, newQuery), listener.hashFn, listener.onComplete);\r\n }\r\n }\r\n // Otherwise there's nothing below us, so nothing we need to start listening on\r\n }\r\n // If we removed anything and we're not covered by a higher up listen, we need to stop listening on this query\r\n // The above block has us covered in terms of making sure we're set up on listens lower in the tree.\r\n // Also, note that if we have a cancelError, it's already been removed at the provider level.\r\n if (!covered && removed.length > 0 && !cancelError) {\r\n // If we removed a default, then we weren't listening on any of the other queries here. Just cancel the one\r\n // default. Otherwise, we need to iterate through and cancel each individual query\r\n if (removingDefault) {\r\n // We don't tag default listeners\r\n const defaultTag = null;\r\n syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(query), defaultTag);\r\n }\r\n else {\r\n removed.forEach((queryToRemove) => {\r\n const tagToRemove = syncTree.queryToTagMap.get(syncTreeMakeQueryKey_(queryToRemove));\r\n syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToRemove), tagToRemove);\r\n });\r\n }\r\n }\r\n }\r\n // Now, clear all of the tags we're tracking for the removed listens\r\n syncTreeRemoveTags_(syncTree, removed);\r\n }\r\n return cancelEvents;\r\n}\r\n/**\r\n * Apply new server data for the specified tagged query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedQueryOverwrite(syncTree, path, snap, tag) {\r\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n if (queryKey != null) {\r\n const r = syncTreeParseQueryKey_(queryKey);\r\n const queryPath = r.path, queryId = r.queryId;\r\n const relativePath = newRelativePath(queryPath, path);\r\n const op = new Overwrite(newOperationSourceServerTaggedQuery(queryId), relativePath, snap);\r\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n }\r\n else {\r\n // Query must have been removed already\r\n return [];\r\n }\r\n}\r\n/**\r\n * Apply server data to be merged in for the specified tagged query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedQueryMerge(syncTree, path, changedChildren, tag) {\r\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n if (queryKey) {\r\n const r = syncTreeParseQueryKey_(queryKey);\r\n const queryPath = r.path, queryId = r.queryId;\r\n const relativePath = newRelativePath(queryPath, path);\r\n const changeTree = ImmutableTree.fromObject(changedChildren);\r\n const op = new Merge(newOperationSourceServerTaggedQuery(queryId), relativePath, changeTree);\r\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n }\r\n else {\r\n // We've already removed the query. No big deal, ignore the update\r\n return [];\r\n }\r\n}\r\n/**\r\n * Add an event callback for the specified query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeAddEventRegistration(syncTree, query, eventRegistration, skipSetupListener = false) {\r\n const path = query._path;\r\n let serverCache = null;\r\n let foundAncestorDefaultView = false;\r\n // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\r\n // Consider optimizing this once there's a better understanding of what actual behavior will be.\r\n syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\r\n const relativePath = newRelativePath(pathToSyncPoint, path);\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(sp, relativePath);\r\n foundAncestorDefaultView =\r\n foundAncestorDefaultView || syncPointHasCompleteView(sp);\r\n });\r\n let syncPoint = syncTree.syncPointTree_.get(path);\r\n if (!syncPoint) {\r\n syncPoint = new SyncPoint();\r\n syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\r\n }\r\n else {\r\n foundAncestorDefaultView =\r\n foundAncestorDefaultView || syncPointHasCompleteView(syncPoint);\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n let serverCacheComplete;\r\n if (serverCache != null) {\r\n serverCacheComplete = true;\r\n }\r\n else {\r\n serverCacheComplete = false;\r\n serverCache = ChildrenNode.EMPTY_NODE;\r\n const subtree = syncTree.syncPointTree_.subtree(path);\r\n subtree.foreachChild((childName, childSyncPoint) => {\r\n const completeCache = syncPointGetCompleteServerCache(childSyncPoint, newEmptyPath());\r\n if (completeCache) {\r\n serverCache = serverCache.updateImmediateChild(childName, completeCache);\r\n }\r\n });\r\n }\r\n const viewAlreadyExists = syncPointViewExistsForQuery(syncPoint, query);\r\n if (!viewAlreadyExists && !query._queryParams.loadsAllData()) {\r\n // We need to track a tag for this query\r\n const queryKey = syncTreeMakeQueryKey_(query);\r\n assert(!syncTree.queryToTagMap.has(queryKey), 'View does not exist, but we have a tag');\r\n const tag = syncTreeGetNextQueryTag_();\r\n syncTree.queryToTagMap.set(queryKey, tag);\r\n syncTree.tagToQueryMap.set(tag, queryKey);\r\n }\r\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, path);\r\n let events = syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete);\r\n if (!viewAlreadyExists && !foundAncestorDefaultView && !skipSetupListener) {\r\n const view = syncPointViewForQuery(syncPoint, query);\r\n events = events.concat(syncTreeSetupListener_(syncTree, query, view));\r\n }\r\n return events;\r\n}\r\n/**\r\n * Returns a complete cache, if we have one, of the data at a particular path. If the location does not have a\r\n * listener above it, we will get a false \"null\". This shouldn't be a problem because transactions will always\r\n * have a listener above, and atomic operations would correctly show a jitter of ->\r\n * as the write is applied locally and then acknowledged at the server.\r\n *\r\n * Note: this method will *include* hidden writes from transaction with applyLocally set to false.\r\n *\r\n * @param path - The path to the data we want\r\n * @param writeIdsToExclude - A specific set to be excluded\r\n */\r\nfunction syncTreeCalcCompleteEventCache(syncTree, path, writeIdsToExclude) {\r\n const includeHiddenSets = true;\r\n const writeTree = syncTree.pendingWriteTree_;\r\n const serverCache = syncTree.syncPointTree_.findOnPath(path, (pathSoFar, syncPoint) => {\r\n const relativePath = newRelativePath(pathSoFar, path);\r\n const serverCache = syncPointGetCompleteServerCache(syncPoint, relativePath);\r\n if (serverCache) {\r\n return serverCache;\r\n }\r\n });\r\n return writeTreeCalcCompleteEventCache(writeTree, path, serverCache, writeIdsToExclude, includeHiddenSets);\r\n}\r\nfunction syncTreeGetServerValue(syncTree, query) {\r\n const path = query._path;\r\n let serverCache = null;\r\n // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\r\n // Consider optimizing this once there's a better understanding of what actual behavior will be.\r\n syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\r\n const relativePath = newRelativePath(pathToSyncPoint, path);\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(sp, relativePath);\r\n });\r\n let syncPoint = syncTree.syncPointTree_.get(path);\r\n if (!syncPoint) {\r\n syncPoint = new SyncPoint();\r\n syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\r\n }\r\n else {\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n const serverCacheComplete = serverCache != null;\r\n const serverCacheNode = serverCacheComplete\r\n ? new CacheNode(serverCache, true, false)\r\n : null;\r\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, query._path);\r\n const view = syncPointGetView(syncPoint, query, writesCache, serverCacheComplete ? serverCacheNode.getNode() : ChildrenNode.EMPTY_NODE, serverCacheComplete);\r\n return viewGetCompleteNode(view);\r\n}\r\n/**\r\n * A helper method that visits all descendant and ancestor SyncPoints, applying the operation.\r\n *\r\n * NOTES:\r\n * - Descendant SyncPoints will be visited first (since we raise events depth-first).\r\n *\r\n * - We call applyOperation() on each SyncPoint passing three things:\r\n * 1. A version of the Operation that has been made relative to the SyncPoint location.\r\n * 2. A WriteTreeRef of any writes we have cached at the SyncPoint location.\r\n * 3. A snapshot Node with cached server data, if we have it.\r\n *\r\n * - We concatenate all of the events returned by each SyncPoint and return the result.\r\n */\r\nfunction syncTreeApplyOperationToSyncPoints_(syncTree, operation) {\r\n return syncTreeApplyOperationHelper_(operation, syncTree.syncPointTree_, \r\n /*serverCache=*/ null, writeTreeChildWrites(syncTree.pendingWriteTree_, newEmptyPath()));\r\n}\r\n/**\r\n * Recursive helper for applyOperationToSyncPoints_\r\n */\r\nfunction syncTreeApplyOperationHelper_(operation, syncPointTree, serverCache, writesCache) {\r\n if (pathIsEmpty(operation.path)) {\r\n return syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache);\r\n }\r\n else {\r\n const syncPoint = syncPointTree.get(newEmptyPath());\r\n // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n if (serverCache == null && syncPoint != null) {\r\n serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n let events = [];\r\n const childName = pathGetFront(operation.path);\r\n const childOperation = operation.operationForChild(childName);\r\n const childTree = syncPointTree.children.get(childName);\r\n if (childTree && childOperation) {\r\n const childServerCache = serverCache\r\n ? serverCache.getImmediateChild(childName)\r\n : null;\r\n const childWritesCache = writeTreeRefChild(writesCache, childName);\r\n events = events.concat(syncTreeApplyOperationHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n }\r\n if (syncPoint) {\r\n events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));\r\n }\r\n return events;\r\n }\r\n}\r\n/**\r\n * Recursive helper for applyOperationToSyncPoints_\r\n */\r\nfunction syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache) {\r\n const syncPoint = syncPointTree.get(newEmptyPath());\r\n // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n if (serverCache == null && syncPoint != null) {\r\n serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n let events = [];\r\n syncPointTree.children.inorderTraversal((childName, childTree) => {\r\n const childServerCache = serverCache\r\n ? serverCache.getImmediateChild(childName)\r\n : null;\r\n const childWritesCache = writeTreeRefChild(writesCache, childName);\r\n const childOperation = operation.operationForChild(childName);\r\n if (childOperation) {\r\n events = events.concat(syncTreeApplyOperationDescendantsHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n }\r\n });\r\n if (syncPoint) {\r\n events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));\r\n }\r\n return events;\r\n}\r\nfunction syncTreeCreateListenerForView_(syncTree, view) {\r\n const query = view.query;\r\n const tag = syncTreeTagForQuery(syncTree, query);\r\n return {\r\n hashFn: () => {\r\n const cache = viewGetServerCache(view) || ChildrenNode.EMPTY_NODE;\r\n return cache.hash();\r\n },\r\n onComplete: (status) => {\r\n if (status === 'ok') {\r\n if (tag) {\r\n return syncTreeApplyTaggedListenComplete(syncTree, query._path, tag);\r\n }\r\n else {\r\n return syncTreeApplyListenComplete(syncTree, query._path);\r\n }\r\n }\r\n else {\r\n // If a listen failed, kill all of the listeners here, not just the one that triggered the error.\r\n // Note that this may need to be scoped to just this listener if we change permissions on filtered children\r\n const error = errorForServerCode(status, query);\r\n return syncTreeRemoveEventRegistration(syncTree, query, \r\n /*eventRegistration*/ null, error);\r\n }\r\n }\r\n };\r\n}\r\n/**\r\n * Return the tag associated with the given query.\r\n */\r\nfunction syncTreeTagForQuery(syncTree, query) {\r\n const queryKey = syncTreeMakeQueryKey_(query);\r\n return syncTree.queryToTagMap.get(queryKey);\r\n}\r\n/**\r\n * Given a query, computes a \"queryKey\" suitable for use in our queryToTagMap_.\r\n */\r\nfunction syncTreeMakeQueryKey_(query) {\r\n return query._path.toString() + '$' + query._queryIdentifier;\r\n}\r\n/**\r\n * Return the query associated with the given tag, if we have one\r\n */\r\nfunction syncTreeQueryKeyForTag_(syncTree, tag) {\r\n return syncTree.tagToQueryMap.get(tag);\r\n}\r\n/**\r\n * Given a queryKey (created by makeQueryKey), parse it back into a path and queryId.\r\n */\r\nfunction syncTreeParseQueryKey_(queryKey) {\r\n const splitIndex = queryKey.indexOf('$');\r\n assert(splitIndex !== -1 && splitIndex < queryKey.length - 1, 'Bad queryKey.');\r\n return {\r\n queryId: queryKey.substr(splitIndex + 1),\r\n path: new Path(queryKey.substr(0, splitIndex))\r\n };\r\n}\r\n/**\r\n * A helper method to apply tagged operations\r\n */\r\nfunction syncTreeApplyTaggedOperation_(syncTree, queryPath, operation) {\r\n const syncPoint = syncTree.syncPointTree_.get(queryPath);\r\n assert(syncPoint, \"Missing sync point for query tag that we're tracking\");\r\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, queryPath);\r\n return syncPointApplyOperation(syncPoint, operation, writesCache, null);\r\n}\r\n/**\r\n * This collapses multiple unfiltered views into a single view, since we only need a single\r\n * listener for them.\r\n */\r\nfunction syncTreeCollectDistinctViewsForSubTree_(subtree) {\r\n return subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\r\n if (maybeChildSyncPoint && syncPointHasCompleteView(maybeChildSyncPoint)) {\r\n const completeView = syncPointGetCompleteView(maybeChildSyncPoint);\r\n return [completeView];\r\n }\r\n else {\r\n // No complete view here, flatten any deeper listens into an array\r\n let views = [];\r\n if (maybeChildSyncPoint) {\r\n views = syncPointGetQueryViews(maybeChildSyncPoint);\r\n }\r\n each(childMap, (_key, childViews) => {\r\n views = views.concat(childViews);\r\n });\r\n return views;\r\n }\r\n });\r\n}\r\n/**\r\n * Normalizes a query to a query we send the server for listening\r\n *\r\n * @returns The normalized query\r\n */\r\nfunction syncTreeQueryForListening_(query) {\r\n if (query._queryParams.loadsAllData() && !query._queryParams.isDefault()) {\r\n // We treat queries that load all data as default queries\r\n // Cast is necessary because ref() technically returns Firebase which is actually fb.api.Firebase which inherits\r\n // from Query\r\n return new (syncTreeGetReferenceConstructor())(query._repo, query._path);\r\n }\r\n else {\r\n return query;\r\n }\r\n}\r\nfunction syncTreeRemoveTags_(syncTree, queries) {\r\n for (let j = 0; j < queries.length; ++j) {\r\n const removedQuery = queries[j];\r\n if (!removedQuery._queryParams.loadsAllData()) {\r\n // We should have a tag for this\r\n const removedQueryKey = syncTreeMakeQueryKey_(removedQuery);\r\n const removedQueryTag = syncTree.queryToTagMap.get(removedQueryKey);\r\n syncTree.queryToTagMap.delete(removedQueryKey);\r\n syncTree.tagToQueryMap.delete(removedQueryTag);\r\n }\r\n }\r\n}\r\n/**\r\n * Static accessor for query tags.\r\n */\r\nfunction syncTreeGetNextQueryTag_() {\r\n return syncTreeNextQueryTag_++;\r\n}\r\n/**\r\n * For a given new listen, manage the de-duplication of outstanding subscriptions.\r\n *\r\n * @returns This method can return events to support synchronous data sources\r\n */\r\nfunction syncTreeSetupListener_(syncTree, query, view) {\r\n const path = query._path;\r\n const tag = syncTreeTagForQuery(syncTree, query);\r\n const listener = syncTreeCreateListenerForView_(syncTree, view);\r\n const events = syncTree.listenProvider_.startListening(syncTreeQueryForListening_(query), tag, listener.hashFn, listener.onComplete);\r\n const subtree = syncTree.syncPointTree_.subtree(path);\r\n // The root of this subtree has our query. We're here because we definitely need to send a listen for that, but we\r\n // may need to shadow other listens as well.\r\n if (tag) {\r\n assert(!syncPointHasCompleteView(subtree.value), \"If we're adding a query, it shouldn't be shadowed\");\r\n }\r\n else {\r\n // Shadow everything at or below this location, this is a default listener.\r\n const queriesToStop = subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\r\n if (!pathIsEmpty(relativePath) &&\r\n maybeChildSyncPoint &&\r\n syncPointHasCompleteView(maybeChildSyncPoint)) {\r\n return [syncPointGetCompleteView(maybeChildSyncPoint).query];\r\n }\r\n else {\r\n // No default listener here, flatten any deeper queries into an array\r\n let queries = [];\r\n if (maybeChildSyncPoint) {\r\n queries = queries.concat(syncPointGetQueryViews(maybeChildSyncPoint).map(view => view.query));\r\n }\r\n each(childMap, (_key, childQueries) => {\r\n queries = queries.concat(childQueries);\r\n });\r\n return queries;\r\n }\r\n });\r\n for (let i = 0; i < queriesToStop.length; ++i) {\r\n const queryToStop = queriesToStop[i];\r\n syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToStop), syncTreeTagForQuery(syncTree, queryToStop));\r\n }\r\n }\r\n return events;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ExistingValueProvider {\r\n constructor(node_) {\r\n this.node_ = node_;\r\n }\r\n getImmediateChild(childName) {\r\n const child = this.node_.getImmediateChild(childName);\r\n return new ExistingValueProvider(child);\r\n }\r\n node() {\r\n return this.node_;\r\n }\r\n}\r\nclass DeferredValueProvider {\r\n constructor(syncTree, path) {\r\n this.syncTree_ = syncTree;\r\n this.path_ = path;\r\n }\r\n getImmediateChild(childName) {\r\n const childPath = pathChild(this.path_, childName);\r\n return new DeferredValueProvider(this.syncTree_, childPath);\r\n }\r\n node() {\r\n return syncTreeCalcCompleteEventCache(this.syncTree_, this.path_);\r\n }\r\n}\r\n/**\r\n * Generate placeholders for deferred values.\r\n */\r\nconst generateWithValues = function (values) {\r\n values = values || {};\r\n values['timestamp'] = values['timestamp'] || new Date().getTime();\r\n return values;\r\n};\r\n/**\r\n * Value to use when firing local events. When writing server values, fire\r\n * local events with an approximate value, otherwise return value as-is.\r\n */\r\nconst resolveDeferredLeafValue = function (value, existingVal, serverValues) {\r\n if (!value || typeof value !== 'object') {\r\n return value;\r\n }\r\n assert('.sv' in value, 'Unexpected leaf node or priority contents');\r\n if (typeof value['.sv'] === 'string') {\r\n return resolveScalarDeferredValue(value['.sv'], existingVal, serverValues);\r\n }\r\n else if (typeof value['.sv'] === 'object') {\r\n return resolveComplexDeferredValue(value['.sv'], existingVal);\r\n }\r\n else {\r\n assert(false, 'Unexpected server value: ' + JSON.stringify(value, null, 2));\r\n }\r\n};\r\nconst resolveScalarDeferredValue = function (op, existing, serverValues) {\r\n switch (op) {\r\n case 'timestamp':\r\n return serverValues['timestamp'];\r\n default:\r\n assert(false, 'Unexpected server value: ' + op);\r\n }\r\n};\r\nconst resolveComplexDeferredValue = function (op, existing, unused) {\r\n if (!op.hasOwnProperty('increment')) {\r\n assert(false, 'Unexpected server value: ' + JSON.stringify(op, null, 2));\r\n }\r\n const delta = op['increment'];\r\n if (typeof delta !== 'number') {\r\n assert(false, 'Unexpected increment value: ' + delta);\r\n }\r\n const existingNode = existing.node();\r\n assert(existingNode !== null && typeof existingNode !== 'undefined', 'Expected ChildrenNode.EMPTY_NODE for nulls');\r\n // Incrementing a non-number sets the value to the incremented amount\r\n if (!existingNode.isLeafNode()) {\r\n return delta;\r\n }\r\n const leaf = existingNode;\r\n const existingVal = leaf.getValue();\r\n if (typeof existingVal !== 'number') {\r\n return delta;\r\n }\r\n // No need to do over/underflow arithmetic here because JS only handles floats under the covers\r\n return existingVal + delta;\r\n};\r\n/**\r\n * Recursively replace all deferred values and priorities in the tree with the\r\n * specified generated replacement values.\r\n * @param path - path to which write is relative\r\n * @param node - new data written at path\r\n * @param syncTree - current data\r\n */\r\nconst resolveDeferredValueTree = function (path, node, syncTree, serverValues) {\r\n return resolveDeferredValue(node, new DeferredValueProvider(syncTree, path), serverValues);\r\n};\r\n/**\r\n * Recursively replace all deferred values and priorities in the node with the\r\n * specified generated replacement values. If there are no server values in the node,\r\n * it'll be returned as-is.\r\n */\r\nconst resolveDeferredValueSnapshot = function (node, existing, serverValues) {\r\n return resolveDeferredValue(node, new ExistingValueProvider(existing), serverValues);\r\n};\r\nfunction resolveDeferredValue(node, existingVal, serverValues) {\r\n const rawPri = node.getPriority().val();\r\n const priority = resolveDeferredLeafValue(rawPri, existingVal.getImmediateChild('.priority'), serverValues);\r\n let newNode;\r\n if (node.isLeafNode()) {\r\n const leafNode = node;\r\n const value = resolveDeferredLeafValue(leafNode.getValue(), existingVal, serverValues);\r\n if (value !== leafNode.getValue() ||\r\n priority !== leafNode.getPriority().val()) {\r\n return new LeafNode(value, nodeFromJSON(priority));\r\n }\r\n else {\r\n return node;\r\n }\r\n }\r\n else {\r\n const childrenNode = node;\r\n newNode = childrenNode;\r\n if (priority !== childrenNode.getPriority().val()) {\r\n newNode = newNode.updatePriority(new LeafNode(priority));\r\n }\r\n childrenNode.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n const newChildNode = resolveDeferredValue(childNode, existingVal.getImmediateChild(childName), serverValues);\r\n if (newChildNode !== childNode) {\r\n newNode = newNode.updateImmediateChild(childName, newChildNode);\r\n }\r\n });\r\n return newNode;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A light-weight tree, traversable by path. Nodes can have both values and children.\r\n * Nodes are not enumerated (by forEachChild) unless they have a value or non-empty\r\n * children.\r\n */\r\nclass Tree {\r\n /**\r\n * @param name - Optional name of the node.\r\n * @param parent - Optional parent node.\r\n * @param node - Optional node to wrap.\r\n */\r\n constructor(name = '', parent = null, node = { children: {}, childCount: 0 }) {\r\n this.name = name;\r\n this.parent = parent;\r\n this.node = node;\r\n }\r\n}\r\n/**\r\n * Returns a sub-Tree for the given path.\r\n *\r\n * @param pathObj - Path to look up.\r\n * @returns Tree for path.\r\n */\r\nfunction treeSubTree(tree, pathObj) {\r\n // TODO: Require pathObj to be Path?\r\n let path = pathObj instanceof Path ? pathObj : new Path(pathObj);\r\n let child = tree, next = pathGetFront(path);\r\n while (next !== null) {\r\n const childNode = safeGet(child.node.children, next) || {\r\n children: {},\r\n childCount: 0\r\n };\r\n child = new Tree(next, child, childNode);\r\n path = pathPopFront(path);\r\n next = pathGetFront(path);\r\n }\r\n return child;\r\n}\r\n/**\r\n * Returns the data associated with this tree node.\r\n *\r\n * @returns The data or null if no data exists.\r\n */\r\nfunction treeGetValue(tree) {\r\n return tree.node.value;\r\n}\r\n/**\r\n * Sets data to this tree node.\r\n *\r\n * @param value - Value to set.\r\n */\r\nfunction treeSetValue(tree, value) {\r\n tree.node.value = value;\r\n treeUpdateParents(tree);\r\n}\r\n/**\r\n * @returns Whether the tree has any children.\r\n */\r\nfunction treeHasChildren(tree) {\r\n return tree.node.childCount > 0;\r\n}\r\n/**\r\n * @returns Whethe rthe tree is empty (no value or children).\r\n */\r\nfunction treeIsEmpty(tree) {\r\n return treeGetValue(tree) === undefined && !treeHasChildren(tree);\r\n}\r\n/**\r\n * Calls action for each child of this tree node.\r\n *\r\n * @param action - Action to be called for each child.\r\n */\r\nfunction treeForEachChild(tree, action) {\r\n each(tree.node.children, (child, childTree) => {\r\n action(new Tree(child, tree, childTree));\r\n });\r\n}\r\n/**\r\n * Does a depth-first traversal of this node's descendants, calling action for each one.\r\n *\r\n * @param action - Action to be called for each child.\r\n * @param includeSelf - Whether to call action on this node as well. Defaults to\r\n * false.\r\n * @param childrenFirst - Whether to call action on children before calling it on\r\n * parent.\r\n */\r\nfunction treeForEachDescendant(tree, action, includeSelf, childrenFirst) {\r\n if (includeSelf && !childrenFirst) {\r\n action(tree);\r\n }\r\n treeForEachChild(tree, child => {\r\n treeForEachDescendant(child, action, true, childrenFirst);\r\n });\r\n if (includeSelf && childrenFirst) {\r\n action(tree);\r\n }\r\n}\r\n/**\r\n * Calls action on each ancestor node.\r\n *\r\n * @param action - Action to be called on each parent; return\r\n * true to abort.\r\n * @param includeSelf - Whether to call action on this node as well.\r\n * @returns true if the action callback returned true.\r\n */\r\nfunction treeForEachAncestor(tree, action, includeSelf) {\r\n let node = includeSelf ? tree : tree.parent;\r\n while (node !== null) {\r\n if (action(node)) {\r\n return true;\r\n }\r\n node = node.parent;\r\n }\r\n return false;\r\n}\r\n/**\r\n * @returns The path of this tree node, as a Path.\r\n */\r\nfunction treeGetPath(tree) {\r\n return new Path(tree.parent === null\r\n ? tree.name\r\n : treeGetPath(tree.parent) + '/' + tree.name);\r\n}\r\n/**\r\n * Adds or removes this child from its parent based on whether it's empty or not.\r\n */\r\nfunction treeUpdateParents(tree) {\r\n if (tree.parent !== null) {\r\n treeUpdateChild(tree.parent, tree.name, tree);\r\n }\r\n}\r\n/**\r\n * Adds or removes the passed child to this tree node, depending on whether it's empty.\r\n *\r\n * @param childName - The name of the child to update.\r\n * @param child - The child to update.\r\n */\r\nfunction treeUpdateChild(tree, childName, child) {\r\n const childEmpty = treeIsEmpty(child);\r\n const childExists = contains(tree.node.children, childName);\r\n if (childEmpty && childExists) {\r\n delete tree.node.children[childName];\r\n tree.node.childCount--;\r\n treeUpdateParents(tree);\r\n }\r\n else if (!childEmpty && !childExists) {\r\n tree.node.children[childName] = child.node;\r\n tree.node.childCount++;\r\n treeUpdateParents(tree);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * True for invalid Firebase keys\r\n */\r\nconst INVALID_KEY_REGEX_ = /[\\[\\].#$\\/\\u0000-\\u001F\\u007F]/;\r\n/**\r\n * True for invalid Firebase paths.\r\n * Allows '/' in paths.\r\n */\r\nconst INVALID_PATH_REGEX_ = /[\\[\\].#$\\u0000-\\u001F\\u007F]/;\r\n/**\r\n * Maximum number of characters to allow in leaf value\r\n */\r\nconst MAX_LEAF_SIZE_ = 10 * 1024 * 1024;\r\nconst isValidKey = function (key) {\r\n return (typeof key === 'string' && key.length !== 0 && !INVALID_KEY_REGEX_.test(key));\r\n};\r\nconst isValidPathString = function (pathString) {\r\n return (typeof pathString === 'string' &&\r\n pathString.length !== 0 &&\r\n !INVALID_PATH_REGEX_.test(pathString));\r\n};\r\nconst isValidRootPathString = function (pathString) {\r\n if (pathString) {\r\n // Allow '/.info/' at the beginning.\r\n pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n }\r\n return isValidPathString(pathString);\r\n};\r\nconst isValidPriority = function (priority) {\r\n return (priority === null ||\r\n typeof priority === 'string' ||\r\n (typeof priority === 'number' && !isInvalidJSONNumber(priority)) ||\r\n (priority &&\r\n typeof priority === 'object' &&\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n contains(priority, '.sv')));\r\n};\r\n/**\r\n * Pre-validate a datum passed as an argument to Firebase function.\r\n */\r\nconst validateFirebaseDataArg = function (fnName, value, path, optional) {\r\n if (optional && value === undefined) {\r\n return;\r\n }\r\n validateFirebaseData(errorPrefix(fnName, 'value'), value, path);\r\n};\r\n/**\r\n * Validate a data object client-side before sending to server.\r\n */\r\nconst validateFirebaseData = function (errorPrefix, data, path_) {\r\n const path = path_ instanceof Path ? new ValidationPath(path_, errorPrefix) : path_;\r\n if (data === undefined) {\r\n throw new Error(errorPrefix + 'contains undefined ' + validationPathToErrorString(path));\r\n }\r\n if (typeof data === 'function') {\r\n throw new Error(errorPrefix +\r\n 'contains a function ' +\r\n validationPathToErrorString(path) +\r\n ' with contents = ' +\r\n data.toString());\r\n }\r\n if (isInvalidJSONNumber(data)) {\r\n throw new Error(errorPrefix +\r\n 'contains ' +\r\n data.toString() +\r\n ' ' +\r\n validationPathToErrorString(path));\r\n }\r\n // Check max leaf size, but try to avoid the utf8 conversion if we can.\r\n if (typeof data === 'string' &&\r\n data.length > MAX_LEAF_SIZE_ / 3 &&\r\n stringLength(data) > MAX_LEAF_SIZE_) {\r\n throw new Error(errorPrefix +\r\n 'contains a string greater than ' +\r\n MAX_LEAF_SIZE_ +\r\n ' utf8 bytes ' +\r\n validationPathToErrorString(path) +\r\n \" ('\" +\r\n data.substring(0, 50) +\r\n \"...')\");\r\n }\r\n // TODO = Perf = Consider combining the recursive validation of keys into NodeFromJSON\r\n // to save extra walking of large objects.\r\n if (data && typeof data === 'object') {\r\n let hasDotValue = false;\r\n let hasActualChild = false;\r\n each(data, (key, value) => {\r\n if (key === '.value') {\r\n hasDotValue = true;\r\n }\r\n else if (key !== '.priority' && key !== '.sv') {\r\n hasActualChild = true;\r\n if (!isValidKey(key)) {\r\n throw new Error(errorPrefix +\r\n ' contains an invalid key (' +\r\n key +\r\n ') ' +\r\n validationPathToErrorString(path) +\r\n '. Keys must be non-empty strings ' +\r\n 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n }\r\n }\r\n validationPathPush(path, key);\r\n validateFirebaseData(errorPrefix, value, path);\r\n validationPathPop(path);\r\n });\r\n if (hasDotValue && hasActualChild) {\r\n throw new Error(errorPrefix +\r\n ' contains \".value\" child ' +\r\n validationPathToErrorString(path) +\r\n ' in addition to actual children.');\r\n }\r\n }\r\n};\r\n/**\r\n * Pre-validate paths passed in the firebase function.\r\n */\r\nconst validateFirebaseMergePaths = function (errorPrefix, mergePaths) {\r\n let i, curPath;\r\n for (i = 0; i < mergePaths.length; i++) {\r\n curPath = mergePaths[i];\r\n const keys = pathSlice(curPath);\r\n for (let j = 0; j < keys.length; j++) {\r\n if (keys[j] === '.priority' && j === keys.length - 1) ;\r\n else if (!isValidKey(keys[j])) {\r\n throw new Error(errorPrefix +\r\n 'contains an invalid key (' +\r\n keys[j] +\r\n ') in path ' +\r\n curPath.toString() +\r\n '. Keys must be non-empty strings ' +\r\n 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n }\r\n }\r\n }\r\n // Check that update keys are not descendants of each other.\r\n // We rely on the property that sorting guarantees that ancestors come\r\n // right before descendants.\r\n mergePaths.sort(pathCompare);\r\n let prevPath = null;\r\n for (i = 0; i < mergePaths.length; i++) {\r\n curPath = mergePaths[i];\r\n if (prevPath !== null && pathContains(prevPath, curPath)) {\r\n throw new Error(errorPrefix +\r\n 'contains a path ' +\r\n prevPath.toString() +\r\n ' that is ancestor of another path ' +\r\n curPath.toString());\r\n }\r\n prevPath = curPath;\r\n }\r\n};\r\n/**\r\n * pre-validate an object passed as an argument to firebase function (\r\n * must be an object - e.g. for firebase.update()).\r\n */\r\nconst validateFirebaseMergeDataArg = function (fnName, data, path, optional) {\r\n if (optional && data === undefined) {\r\n return;\r\n }\r\n const errorPrefix$1 = errorPrefix(fnName, 'values');\r\n if (!(data && typeof data === 'object') || Array.isArray(data)) {\r\n throw new Error(errorPrefix$1 + ' must be an object containing the children to replace.');\r\n }\r\n const mergePaths = [];\r\n each(data, (key, value) => {\r\n const curPath = new Path(key);\r\n validateFirebaseData(errorPrefix$1, value, pathChild(path, curPath));\r\n if (pathGetBack(curPath) === '.priority') {\r\n if (!isValidPriority(value)) {\r\n throw new Error(errorPrefix$1 +\r\n \"contains an invalid value for '\" +\r\n curPath.toString() +\r\n \"', which must be a valid \" +\r\n 'Firebase priority (a string, finite number, server value, or null).');\r\n }\r\n }\r\n mergePaths.push(curPath);\r\n });\r\n validateFirebaseMergePaths(errorPrefix$1, mergePaths);\r\n};\r\nconst validatePriority = function (fnName, priority, optional) {\r\n if (optional && priority === undefined) {\r\n return;\r\n }\r\n if (isInvalidJSONNumber(priority)) {\r\n throw new Error(errorPrefix(fnName, 'priority') +\r\n 'is ' +\r\n priority.toString() +\r\n ', but must be a valid Firebase priority (a string, finite number, ' +\r\n 'server value, or null).');\r\n }\r\n // Special case to allow importing data with a .sv.\r\n if (!isValidPriority(priority)) {\r\n throw new Error(errorPrefix(fnName, 'priority') +\r\n 'must be a valid Firebase priority ' +\r\n '(a string, finite number, server value, or null).');\r\n }\r\n};\r\nconst validateKey = function (fnName, argumentName, key, optional) {\r\n if (optional && key === undefined) {\r\n return;\r\n }\r\n if (!isValidKey(key)) {\r\n throw new Error(errorPrefix(fnName, argumentName) +\r\n 'was an invalid key = \"' +\r\n key +\r\n '\". Firebase keys must be non-empty strings and ' +\r\n 'can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\").');\r\n }\r\n};\r\n/**\r\n * @internal\r\n */\r\nconst validatePathString = function (fnName, argumentName, pathString, optional) {\r\n if (optional && pathString === undefined) {\r\n return;\r\n }\r\n if (!isValidPathString(pathString)) {\r\n throw new Error(errorPrefix(fnName, argumentName) +\r\n 'was an invalid path = \"' +\r\n pathString +\r\n '\". Paths must be non-empty strings and ' +\r\n 'can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\"');\r\n }\r\n};\r\nconst validateRootPathString = function (fnName, argumentName, pathString, optional) {\r\n if (pathString) {\r\n // Allow '/.info/' at the beginning.\r\n pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n }\r\n validatePathString(fnName, argumentName, pathString, optional);\r\n};\r\n/**\r\n * @internal\r\n */\r\nconst validateWritablePath = function (fnName, path) {\r\n if (pathGetFront(path) === '.info') {\r\n throw new Error(fnName + \" failed = Can't modify data under /.info/\");\r\n }\r\n};\r\nconst validateUrl = function (fnName, parsedUrl) {\r\n // TODO = Validate server better.\r\n const pathString = parsedUrl.path.toString();\r\n if (!(typeof parsedUrl.repoInfo.host === 'string') ||\r\n parsedUrl.repoInfo.host.length === 0 ||\r\n (!isValidKey(parsedUrl.repoInfo.namespace) &&\r\n parsedUrl.repoInfo.host.split(':')[0] !== 'localhost') ||\r\n (pathString.length !== 0 && !isValidRootPathString(pathString))) {\r\n throw new Error(errorPrefix(fnName, 'url') +\r\n 'must be a valid firebase URL and ' +\r\n 'the path can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\".');\r\n }\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The event queue serves a few purposes:\r\n * 1. It ensures we maintain event order in the face of event callbacks doing operations that result in more\r\n * events being queued.\r\n * 2. raiseQueuedEvents() handles being called reentrantly nicely. That is, if in the course of raising events,\r\n * raiseQueuedEvents() is called again, the \"inner\" call will pick up raising events where the \"outer\" call\r\n * left off, ensuring that the events are still raised synchronously and in order.\r\n * 3. You can use raiseEventsAtPath and raiseEventsForChangedPath to ensure only relevant previously-queued\r\n * events are raised synchronously.\r\n *\r\n * NOTE: This can all go away if/when we move to async events.\r\n *\r\n */\r\nclass EventQueue {\r\n constructor() {\r\n this.eventLists_ = [];\r\n /**\r\n * Tracks recursion depth of raiseQueuedEvents_, for debugging purposes.\r\n */\r\n this.recursionDepth_ = 0;\r\n }\r\n}\r\n/**\r\n * @param eventDataList - The new events to queue.\r\n */\r\nfunction eventQueueQueueEvents(eventQueue, eventDataList) {\r\n // We group events by path, storing them in a single EventList, to make it easier to skip over them quickly.\r\n let currList = null;\r\n for (let i = 0; i < eventDataList.length; i++) {\r\n const data = eventDataList[i];\r\n const path = data.getPath();\r\n if (currList !== null && !pathEquals(path, currList.path)) {\r\n eventQueue.eventLists_.push(currList);\r\n currList = null;\r\n }\r\n if (currList === null) {\r\n currList = { events: [], path };\r\n }\r\n currList.events.push(data);\r\n }\r\n if (currList) {\r\n eventQueue.eventLists_.push(currList);\r\n }\r\n}\r\n/**\r\n * Queues the specified events and synchronously raises all events (including previously queued ones)\r\n * for the specified path.\r\n *\r\n * It is assumed that the new events are all for the specified path.\r\n *\r\n * @param path - The path to raise events for.\r\n * @param eventDataList - The new events to raise.\r\n */\r\nfunction eventQueueRaiseEventsAtPath(eventQueue, path, eventDataList) {\r\n eventQueueQueueEvents(eventQueue, eventDataList);\r\n eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath => pathEquals(eventPath, path));\r\n}\r\n/**\r\n * Queues the specified events and synchronously raises all events (including previously queued ones) for\r\n * locations related to the specified change path (i.e. all ancestors and descendants).\r\n *\r\n * It is assumed that the new events are all related (ancestor or descendant) to the specified path.\r\n *\r\n * @param changedPath - The path to raise events for.\r\n * @param eventDataList - The events to raise\r\n */\r\nfunction eventQueueRaiseEventsForChangedPath(eventQueue, changedPath, eventDataList) {\r\n eventQueueQueueEvents(eventQueue, eventDataList);\r\n eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath => pathContains(eventPath, changedPath) ||\r\n pathContains(changedPath, eventPath));\r\n}\r\nfunction eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, predicate) {\r\n eventQueue.recursionDepth_++;\r\n let sentAll = true;\r\n for (let i = 0; i < eventQueue.eventLists_.length; i++) {\r\n const eventList = eventQueue.eventLists_[i];\r\n if (eventList) {\r\n const eventPath = eventList.path;\r\n if (predicate(eventPath)) {\r\n eventListRaise(eventQueue.eventLists_[i]);\r\n eventQueue.eventLists_[i] = null;\r\n }\r\n else {\r\n sentAll = false;\r\n }\r\n }\r\n }\r\n if (sentAll) {\r\n eventQueue.eventLists_ = [];\r\n }\r\n eventQueue.recursionDepth_--;\r\n}\r\n/**\r\n * Iterates through the list and raises each event\r\n */\r\nfunction eventListRaise(eventList) {\r\n for (let i = 0; i < eventList.events.length; i++) {\r\n const eventData = eventList.events[i];\r\n if (eventData !== null) {\r\n eventList.events[i] = null;\r\n const eventFn = eventData.getEventRunner();\r\n if (logger) {\r\n log('event: ' + eventData.toString());\r\n }\r\n exceptionGuard(eventFn);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst INTERRUPT_REASON = 'repo_interrupt';\r\n/**\r\n * If a transaction does not succeed after 25 retries, we abort it. Among other\r\n * things this ensure that if there's ever a bug causing a mismatch between\r\n * client / server hashes for some data, we won't retry indefinitely.\r\n */\r\nconst MAX_TRANSACTION_RETRIES = 25;\r\n/**\r\n * A connection to a single data repository.\r\n */\r\nclass Repo {\r\n constructor(repoInfo_, forceRestClient_, authTokenProvider_, appCheckProvider_) {\r\n this.repoInfo_ = repoInfo_;\r\n this.forceRestClient_ = forceRestClient_;\r\n this.authTokenProvider_ = authTokenProvider_;\r\n this.appCheckProvider_ = appCheckProvider_;\r\n this.dataUpdateCount = 0;\r\n this.statsListener_ = null;\r\n this.eventQueue_ = new EventQueue();\r\n this.nextWriteId_ = 1;\r\n this.interceptServerDataCallback_ = null;\r\n /** A list of data pieces and paths to be set when this client disconnects. */\r\n this.onDisconnect_ = newSparseSnapshotTree();\r\n /** Stores queues of outstanding transactions for Firebase locations. */\r\n this.transactionQueueTree_ = new Tree();\r\n // TODO: This should be @private but it's used by test_access.js and internal.js\r\n this.persistentConnection_ = null;\r\n // This key is intentionally not updated if RepoInfo is later changed or replaced\r\n this.key = this.repoInfo_.toURLString();\r\n }\r\n /**\r\n * @returns The URL corresponding to the root of this Firebase.\r\n */\r\n toString() {\r\n return ((this.repoInfo_.secure ? 'https://' : 'http://') + this.repoInfo_.host);\r\n }\r\n}\r\nfunction repoStart(repo, appId, authOverride) {\r\n repo.stats_ = statsManagerGetCollection(repo.repoInfo_);\r\n if (repo.forceRestClient_ || beingCrawled()) {\r\n repo.server_ = new ReadonlyRestClient(repo.repoInfo_, (pathString, data, isMerge, tag) => {\r\n repoOnDataUpdate(repo, pathString, data, isMerge, tag);\r\n }, repo.authTokenProvider_, repo.appCheckProvider_);\r\n // Minor hack: Fire onConnect immediately, since there's no actual connection.\r\n setTimeout(() => repoOnConnectStatus(repo, /* connectStatus= */ true), 0);\r\n }\r\n else {\r\n // Validate authOverride\r\n if (typeof authOverride !== 'undefined' && authOverride !== null) {\r\n if (typeof authOverride !== 'object') {\r\n throw new Error('Only objects are supported for option databaseAuthVariableOverride');\r\n }\r\n try {\r\n stringify(authOverride);\r\n }\r\n catch (e) {\r\n throw new Error('Invalid authOverride provided: ' + e);\r\n }\r\n }\r\n repo.persistentConnection_ = new PersistentConnection(repo.repoInfo_, appId, (pathString, data, isMerge, tag) => {\r\n repoOnDataUpdate(repo, pathString, data, isMerge, tag);\r\n }, (connectStatus) => {\r\n repoOnConnectStatus(repo, connectStatus);\r\n }, (updates) => {\r\n repoOnServerInfoUpdate(repo, updates);\r\n }, repo.authTokenProvider_, repo.appCheckProvider_, authOverride);\r\n repo.server_ = repo.persistentConnection_;\r\n }\r\n repo.authTokenProvider_.addTokenChangeListener(token => {\r\n repo.server_.refreshAuthToken(token);\r\n });\r\n repo.appCheckProvider_.addTokenChangeListener(result => {\r\n repo.server_.refreshAppCheckToken(result.token);\r\n });\r\n // In the case of multiple Repos for the same repoInfo (i.e. there are multiple Firebase.Contexts being used),\r\n // we only want to create one StatsReporter. As such, we'll report stats over the first Repo created.\r\n repo.statsReporter_ = statsManagerGetOrCreateReporter(repo.repoInfo_, () => new StatsReporter(repo.stats_, repo.server_));\r\n // Used for .info.\r\n repo.infoData_ = new SnapshotHolder();\r\n repo.infoSyncTree_ = new SyncTree({\r\n startListening: (query, tag, currentHashFn, onComplete) => {\r\n let infoEvents = [];\r\n const node = repo.infoData_.getNode(query._path);\r\n // This is possibly a hack, but we have different semantics for .info endpoints. We don't raise null events\r\n // on initial data...\r\n if (!node.isEmpty()) {\r\n infoEvents = syncTreeApplyServerOverwrite(repo.infoSyncTree_, query._path, node);\r\n setTimeout(() => {\r\n onComplete('ok');\r\n }, 0);\r\n }\r\n return infoEvents;\r\n },\r\n stopListening: () => { }\r\n });\r\n repoUpdateInfo(repo, 'connected', false);\r\n repo.serverSyncTree_ = new SyncTree({\r\n startListening: (query, tag, currentHashFn, onComplete) => {\r\n repo.server_.listen(query, currentHashFn, tag, (status, data) => {\r\n const events = onComplete(status, data);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, query._path, events);\r\n });\r\n // No synchronous events for network-backed sync trees\r\n return [];\r\n },\r\n stopListening: (query, tag) => {\r\n repo.server_.unlisten(query, tag);\r\n }\r\n });\r\n}\r\n/**\r\n * @returns The time in milliseconds, taking the server offset into account if we have one.\r\n */\r\nfunction repoServerTime(repo) {\r\n const offsetNode = repo.infoData_.getNode(new Path('.info/serverTimeOffset'));\r\n const offset = offsetNode.val() || 0;\r\n return new Date().getTime() + offset;\r\n}\r\n/**\r\n * Generate ServerValues using some variables from the repo object.\r\n */\r\nfunction repoGenerateServerValues(repo) {\r\n return generateWithValues({\r\n timestamp: repoServerTime(repo)\r\n });\r\n}\r\n/**\r\n * Called by realtime when we get new messages from the server.\r\n */\r\nfunction repoOnDataUpdate(repo, pathString, data, isMerge, tag) {\r\n // For testing.\r\n repo.dataUpdateCount++;\r\n const path = new Path(pathString);\r\n data = repo.interceptServerDataCallback_\r\n ? repo.interceptServerDataCallback_(pathString, data)\r\n : data;\r\n let events = [];\r\n if (tag) {\r\n if (isMerge) {\r\n const taggedChildren = map(data, (raw) => nodeFromJSON(raw));\r\n events = syncTreeApplyTaggedQueryMerge(repo.serverSyncTree_, path, taggedChildren, tag);\r\n }\r\n else {\r\n const taggedSnap = nodeFromJSON(data);\r\n events = syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, path, taggedSnap, tag);\r\n }\r\n }\r\n else if (isMerge) {\r\n const changedChildren = map(data, (raw) => nodeFromJSON(raw));\r\n events = syncTreeApplyServerMerge(repo.serverSyncTree_, path, changedChildren);\r\n }\r\n else {\r\n const snap = nodeFromJSON(data);\r\n events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap);\r\n }\r\n let affectedPath = path;\r\n if (events.length > 0) {\r\n // Since we have a listener outstanding for each transaction, receiving any events\r\n // is a proxy for some change having occurred.\r\n affectedPath = repoRerunTransactions(repo, path);\r\n }\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, events);\r\n}\r\nfunction repoOnConnectStatus(repo, connectStatus) {\r\n repoUpdateInfo(repo, 'connected', connectStatus);\r\n if (connectStatus === false) {\r\n repoRunOnDisconnectEvents(repo);\r\n }\r\n}\r\nfunction repoOnServerInfoUpdate(repo, updates) {\r\n each(updates, (key, value) => {\r\n repoUpdateInfo(repo, key, value);\r\n });\r\n}\r\nfunction repoUpdateInfo(repo, pathString, value) {\r\n const path = new Path('/.info/' + pathString);\r\n const newNode = nodeFromJSON(value);\r\n repo.infoData_.updateSnapshot(path, newNode);\r\n const events = syncTreeApplyServerOverwrite(repo.infoSyncTree_, path, newNode);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n}\r\nfunction repoGetNextWriteId(repo) {\r\n return repo.nextWriteId_++;\r\n}\r\n/**\r\n * The purpose of `getValue` is to return the latest known value\r\n * satisfying `query`.\r\n *\r\n * This method will first check for in-memory cached values\r\n * belonging to active listeners. If they are found, such values\r\n * are considered to be the most up-to-date.\r\n *\r\n * If the client is not connected, this method will wait until the\r\n * repo has established a connection and then request the value for `query`.\r\n * If the client is not able to retrieve the query result for another reason,\r\n * it reports an error.\r\n *\r\n * @param query - The query to surface a value for.\r\n */\r\nfunction repoGetValue(repo, query, eventRegistration) {\r\n // Only active queries are cached. There is no persisted cache.\r\n const cached = syncTreeGetServerValue(repo.serverSyncTree_, query);\r\n if (cached != null) {\r\n return Promise.resolve(cached);\r\n }\r\n return repo.server_.get(query).then(payload => {\r\n const node = nodeFromJSON(payload).withIndex(query._queryParams.getIndex());\r\n /**\r\n * Below we simulate the actions of an `onlyOnce` `onValue()` event where:\r\n * Add an event registration,\r\n * Update data at the path,\r\n * Raise any events,\r\n * Cleanup the SyncTree\r\n */\r\n syncTreeAddEventRegistration(repo.serverSyncTree_, query, eventRegistration, true);\r\n let events;\r\n if (query._queryParams.loadsAllData()) {\r\n events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, query._path, node);\r\n }\r\n else {\r\n const tag = syncTreeTagForQuery(repo.serverSyncTree_, query);\r\n events = syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, query._path, node, tag);\r\n }\r\n /*\r\n * We need to raise events in the scenario where `get()` is called at a parent path, and\r\n * while the `get()` is pending, `onValue` is called at a child location. While get() is waiting\r\n * for the data, `onValue` will register a new event. Then, get() will come back, and update the syncTree\r\n * and its corresponding serverCache, including the child location where `onValue` is called. Then,\r\n * `onValue` will receive the event from the server, but look at the syncTree and see that the data received\r\n * from the server is already at the SyncPoint, and so the `onValue` callback will never get fired.\r\n * Calling `eventQueueRaiseEventsForChangedPath()` is the correct way to propagate the events and\r\n * ensure the corresponding child events will get fired.\r\n */\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, query._path, events);\r\n syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, eventRegistration, null, true);\r\n return node;\r\n }, err => {\r\n repoLog(repo, 'get for query ' + stringify(query) + ' failed: ' + err);\r\n return Promise.reject(new Error(err));\r\n });\r\n}\r\nfunction repoSetWithPriority(repo, path, newVal, newPriority, onComplete) {\r\n repoLog(repo, 'set', {\r\n path: path.toString(),\r\n value: newVal,\r\n priority: newPriority\r\n });\r\n // TODO: Optimize this behavior to either (a) store flag to skip resolving where possible and / or\r\n // (b) store unresolved paths on JSON parse\r\n const serverValues = repoGenerateServerValues(repo);\r\n const newNodeUnresolved = nodeFromJSON(newVal, newPriority);\r\n const existing = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path);\r\n const newNode = resolveDeferredValueSnapshot(newNodeUnresolved, existing, serverValues);\r\n const writeId = repoGetNextWriteId(repo);\r\n const events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, writeId, true);\r\n eventQueueQueueEvents(repo.eventQueue_, events);\r\n repo.server_.put(path.toString(), newNodeUnresolved.val(/*export=*/ true), (status, errorReason) => {\r\n const success = status === 'ok';\r\n if (!success) {\r\n warn('set at ' + path + ' failed: ' + status);\r\n }\r\n const clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, clearEvents);\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n const affectedPath = repoAbortTransactions(repo, path);\r\n repoRerunTransactions(repo, affectedPath);\r\n // We queued the events above, so just flush the queue here\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, []);\r\n}\r\nfunction repoUpdate(repo, path, childrenToMerge, onComplete) {\r\n repoLog(repo, 'update', { path: path.toString(), value: childrenToMerge });\r\n // Start with our existing data and merge each child into it.\r\n let empty = true;\r\n const serverValues = repoGenerateServerValues(repo);\r\n const changedChildren = {};\r\n each(childrenToMerge, (changedKey, changedValue) => {\r\n empty = false;\r\n changedChildren[changedKey] = resolveDeferredValueTree(pathChild(path, changedKey), nodeFromJSON(changedValue), repo.serverSyncTree_, serverValues);\r\n });\r\n if (!empty) {\r\n const writeId = repoGetNextWriteId(repo);\r\n const events = syncTreeApplyUserMerge(repo.serverSyncTree_, path, changedChildren, writeId);\r\n eventQueueQueueEvents(repo.eventQueue_, events);\r\n repo.server_.merge(path.toString(), childrenToMerge, (status, errorReason) => {\r\n const success = status === 'ok';\r\n if (!success) {\r\n warn('update at ' + path + ' failed: ' + status);\r\n }\r\n const clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);\r\n const affectedPath = clearEvents.length > 0 ? repoRerunTransactions(repo, path) : path;\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, clearEvents);\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n each(childrenToMerge, (changedPath) => {\r\n const affectedPath = repoAbortTransactions(repo, pathChild(path, changedPath));\r\n repoRerunTransactions(repo, affectedPath);\r\n });\r\n // We queued the events above, so just flush the queue here\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, []);\r\n }\r\n else {\r\n log(\"update() called with empty data. Don't do anything.\");\r\n repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\r\n }\r\n}\r\n/**\r\n * Applies all of the changes stored up in the onDisconnect_ tree.\r\n */\r\nfunction repoRunOnDisconnectEvents(repo) {\r\n repoLog(repo, 'onDisconnectEvents');\r\n const serverValues = repoGenerateServerValues(repo);\r\n const resolvedOnDisconnectTree = newSparseSnapshotTree();\r\n sparseSnapshotTreeForEachTree(repo.onDisconnect_, newEmptyPath(), (path, node) => {\r\n const resolved = resolveDeferredValueTree(path, node, repo.serverSyncTree_, serverValues);\r\n sparseSnapshotTreeRemember(resolvedOnDisconnectTree, path, resolved);\r\n });\r\n let events = [];\r\n sparseSnapshotTreeForEachTree(resolvedOnDisconnectTree, newEmptyPath(), (path, snap) => {\r\n events = events.concat(syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap));\r\n const affectedPath = repoAbortTransactions(repo, path);\r\n repoRerunTransactions(repo, affectedPath);\r\n });\r\n repo.onDisconnect_ = newSparseSnapshotTree();\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, newEmptyPath(), events);\r\n}\r\nfunction repoOnDisconnectCancel(repo, path, onComplete) {\r\n repo.server_.onDisconnectCancel(path.toString(), (status, errorReason) => {\r\n if (status === 'ok') {\r\n sparseSnapshotTreeForget(repo.onDisconnect_, path);\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoOnDisconnectSet(repo, path, value, onComplete) {\r\n const newNode = nodeFromJSON(value);\r\n repo.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), (status, errorReason) => {\r\n if (status === 'ok') {\r\n sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoOnDisconnectSetWithPriority(repo, path, value, priority, onComplete) {\r\n const newNode = nodeFromJSON(value, priority);\r\n repo.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), (status, errorReason) => {\r\n if (status === 'ok') {\r\n sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoOnDisconnectUpdate(repo, path, childrenToMerge, onComplete) {\r\n if (isEmpty(childrenToMerge)) {\r\n log(\"onDisconnect().update() called with empty data. Don't do anything.\");\r\n repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\r\n return;\r\n }\r\n repo.server_.onDisconnectMerge(path.toString(), childrenToMerge, (status, errorReason) => {\r\n if (status === 'ok') {\r\n each(childrenToMerge, (childName, childNode) => {\r\n const newChildNode = nodeFromJSON(childNode);\r\n sparseSnapshotTreeRemember(repo.onDisconnect_, pathChild(path, childName), newChildNode);\r\n });\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoAddEventCallbackForQuery(repo, query, eventRegistration) {\r\n let events;\r\n if (pathGetFront(query._path) === '.info') {\r\n events = syncTreeAddEventRegistration(repo.infoSyncTree_, query, eventRegistration);\r\n }\r\n else {\r\n events = syncTreeAddEventRegistration(repo.serverSyncTree_, query, eventRegistration);\r\n }\r\n eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\r\n}\r\nfunction repoRemoveEventCallbackForQuery(repo, query, eventRegistration) {\r\n // These are guaranteed not to raise events, since we're not passing in a cancelError. However, we can future-proof\r\n // a little bit by handling the return values anyways.\r\n let events;\r\n if (pathGetFront(query._path) === '.info') {\r\n events = syncTreeRemoveEventRegistration(repo.infoSyncTree_, query, eventRegistration);\r\n }\r\n else {\r\n events = syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, eventRegistration);\r\n }\r\n eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\r\n}\r\nfunction repoInterrupt(repo) {\r\n if (repo.persistentConnection_) {\r\n repo.persistentConnection_.interrupt(INTERRUPT_REASON);\r\n }\r\n}\r\nfunction repoResume(repo) {\r\n if (repo.persistentConnection_) {\r\n repo.persistentConnection_.resume(INTERRUPT_REASON);\r\n }\r\n}\r\nfunction repoLog(repo, ...varArgs) {\r\n let prefix = '';\r\n if (repo.persistentConnection_) {\r\n prefix = repo.persistentConnection_.id + ':';\r\n }\r\n log(prefix, ...varArgs);\r\n}\r\nfunction repoCallOnCompleteCallback(repo, callback, status, errorReason) {\r\n if (callback) {\r\n exceptionGuard(() => {\r\n if (status === 'ok') {\r\n callback(null);\r\n }\r\n else {\r\n const code = (status || 'error').toUpperCase();\r\n let message = code;\r\n if (errorReason) {\r\n message += ': ' + errorReason;\r\n }\r\n const error = new Error(message);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error.code = code;\r\n callback(error);\r\n }\r\n });\r\n }\r\n}\r\n/**\r\n * Creates a new transaction, adds it to the transactions we're tracking, and\r\n * sends it to the server if possible.\r\n *\r\n * @param path - Path at which to do transaction.\r\n * @param transactionUpdate - Update callback.\r\n * @param onComplete - Completion callback.\r\n * @param unwatcher - Function that will be called when the transaction no longer\r\n * need data updates for `path`.\r\n * @param applyLocally - Whether or not to make intermediate results visible\r\n */\r\nfunction repoStartTransaction(repo, path, transactionUpdate, onComplete, unwatcher, applyLocally) {\r\n repoLog(repo, 'transaction on ' + path);\r\n // Initialize transaction.\r\n const transaction = {\r\n path,\r\n update: transactionUpdate,\r\n onComplete,\r\n // One of TransactionStatus enums.\r\n status: null,\r\n // Used when combining transactions at different locations to figure out\r\n // which one goes first.\r\n order: LUIDGenerator(),\r\n // Whether to raise local events for this transaction.\r\n applyLocally,\r\n // Count of how many times we've retried the transaction.\r\n retryCount: 0,\r\n // Function to call to clean up our .on() listener.\r\n unwatcher,\r\n // Stores why a transaction was aborted.\r\n abortReason: null,\r\n currentWriteId: null,\r\n currentInputSnapshot: null,\r\n currentOutputSnapshotRaw: null,\r\n currentOutputSnapshotResolved: null\r\n };\r\n // Run transaction initially.\r\n const currentState = repoGetLatestState(repo, path, undefined);\r\n transaction.currentInputSnapshot = currentState;\r\n const newVal = transaction.update(currentState.val());\r\n if (newVal === undefined) {\r\n // Abort transaction.\r\n transaction.unwatcher();\r\n transaction.currentOutputSnapshotRaw = null;\r\n transaction.currentOutputSnapshotResolved = null;\r\n if (transaction.onComplete) {\r\n transaction.onComplete(null, false, transaction.currentInputSnapshot);\r\n }\r\n }\r\n else {\r\n validateFirebaseData('transaction failed: Data returned ', newVal, transaction.path);\r\n // Mark as run and add to our queue.\r\n transaction.status = 0 /* TransactionStatus.RUN */;\r\n const queueNode = treeSubTree(repo.transactionQueueTree_, path);\r\n const nodeQueue = treeGetValue(queueNode) || [];\r\n nodeQueue.push(transaction);\r\n treeSetValue(queueNode, nodeQueue);\r\n // Update visibleData and raise events\r\n // Note: We intentionally raise events after updating all of our\r\n // transaction state, since the user could start new transactions from the\r\n // event callbacks.\r\n let priorityForNode;\r\n if (typeof newVal === 'object' &&\r\n newVal !== null &&\r\n contains(newVal, '.priority')) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n priorityForNode = safeGet(newVal, '.priority');\r\n assert(isValidPriority(priorityForNode), 'Invalid priority returned by transaction. ' +\r\n 'Priority must be a valid string, finite number, server value, or null.');\r\n }\r\n else {\r\n const currentNode = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path) ||\r\n ChildrenNode.EMPTY_NODE;\r\n priorityForNode = currentNode.getPriority().val();\r\n }\r\n const serverValues = repoGenerateServerValues(repo);\r\n const newNodeUnresolved = nodeFromJSON(newVal, priorityForNode);\r\n const newNode = resolveDeferredValueSnapshot(newNodeUnresolved, currentState, serverValues);\r\n transaction.currentOutputSnapshotRaw = newNodeUnresolved;\r\n transaction.currentOutputSnapshotResolved = newNode;\r\n transaction.currentWriteId = repoGetNextWriteId(repo);\r\n const events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, transaction.currentWriteId, transaction.applyLocally);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n }\r\n}\r\n/**\r\n * @param excludeSets - A specific set to exclude\r\n */\r\nfunction repoGetLatestState(repo, path, excludeSets) {\r\n return (syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path, excludeSets) ||\r\n ChildrenNode.EMPTY_NODE);\r\n}\r\n/**\r\n * Sends any already-run transactions that aren't waiting for outstanding\r\n * transactions to complete.\r\n *\r\n * Externally it's called with no arguments, but it calls itself recursively\r\n * with a particular transactionQueueTree node to recurse through the tree.\r\n *\r\n * @param node - transactionQueueTree node to start at.\r\n */\r\nfunction repoSendReadyTransactions(repo, node = repo.transactionQueueTree_) {\r\n // Before recursing, make sure any completed transactions are removed.\r\n if (!node) {\r\n repoPruneCompletedTransactionsBelowNode(repo, node);\r\n }\r\n if (treeGetValue(node)) {\r\n const queue = repoBuildTransactionQueue(repo, node);\r\n assert(queue.length > 0, 'Sending zero length transaction queue');\r\n const allRun = queue.every((transaction) => transaction.status === 0 /* TransactionStatus.RUN */);\r\n // If they're all run (and not sent), we can send them. Else, we must wait.\r\n if (allRun) {\r\n repoSendTransactionQueue(repo, treeGetPath(node), queue);\r\n }\r\n }\r\n else if (treeHasChildren(node)) {\r\n treeForEachChild(node, childNode => {\r\n repoSendReadyTransactions(repo, childNode);\r\n });\r\n }\r\n}\r\n/**\r\n * Given a list of run transactions, send them to the server and then handle\r\n * the result (success or failure).\r\n *\r\n * @param path - The location of the queue.\r\n * @param queue - Queue of transactions under the specified location.\r\n */\r\nfunction repoSendTransactionQueue(repo, path, queue) {\r\n // Mark transactions as sent and increment retry count!\r\n const setsToIgnore = queue.map(txn => {\r\n return txn.currentWriteId;\r\n });\r\n const latestState = repoGetLatestState(repo, path, setsToIgnore);\r\n let snapToSend = latestState;\r\n const latestHash = latestState.hash();\r\n for (let i = 0; i < queue.length; i++) {\r\n const txn = queue[i];\r\n assert(txn.status === 0 /* TransactionStatus.RUN */, 'tryToSendTransactionQueue_: items in queue should all be run.');\r\n txn.status = 1 /* TransactionStatus.SENT */;\r\n txn.retryCount++;\r\n const relativePath = newRelativePath(path, txn.path);\r\n // If we've gotten to this point, the output snapshot must be defined.\r\n snapToSend = snapToSend.updateChild(relativePath /** @type {!Node} */, txn.currentOutputSnapshotRaw);\r\n }\r\n const dataToSend = snapToSend.val(true);\r\n const pathToSend = path;\r\n // Send the put.\r\n repo.server_.put(pathToSend.toString(), dataToSend, (status) => {\r\n repoLog(repo, 'transaction put response', {\r\n path: pathToSend.toString(),\r\n status\r\n });\r\n let events = [];\r\n if (status === 'ok') {\r\n // Queue up the callbacks and fire them after cleaning up all of our\r\n // transaction state, since the callback could trigger more\r\n // transactions or sets.\r\n const callbacks = [];\r\n for (let i = 0; i < queue.length; i++) {\r\n queue[i].status = 2 /* TransactionStatus.COMPLETED */;\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId));\r\n if (queue[i].onComplete) {\r\n // We never unset the output snapshot, and given that this\r\n // transaction is complete, it should be set\r\n callbacks.push(() => queue[i].onComplete(null, true, queue[i].currentOutputSnapshotResolved));\r\n }\r\n queue[i].unwatcher();\r\n }\r\n // Now remove the completed transactions.\r\n repoPruneCompletedTransactionsBelowNode(repo, treeSubTree(repo.transactionQueueTree_, path));\r\n // There may be pending transactions that we can now send.\r\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n // Finally, trigger onComplete callbacks.\r\n for (let i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n }\r\n else {\r\n // transactions are no longer sent. Update their status appropriately.\r\n if (status === 'datastale') {\r\n for (let i = 0; i < queue.length; i++) {\r\n if (queue[i].status === 3 /* TransactionStatus.SENT_NEEDS_ABORT */) {\r\n queue[i].status = 4 /* TransactionStatus.NEEDS_ABORT */;\r\n }\r\n else {\r\n queue[i].status = 0 /* TransactionStatus.RUN */;\r\n }\r\n }\r\n }\r\n else {\r\n warn('transaction at ' + pathToSend.toString() + ' failed: ' + status);\r\n for (let i = 0; i < queue.length; i++) {\r\n queue[i].status = 4 /* TransactionStatus.NEEDS_ABORT */;\r\n queue[i].abortReason = status;\r\n }\r\n }\r\n repoRerunTransactions(repo, path);\r\n }\r\n }, latestHash);\r\n}\r\n/**\r\n * Finds all transactions dependent on the data at changedPath and reruns them.\r\n *\r\n * Should be called any time cached data changes.\r\n *\r\n * Return the highest path that was affected by rerunning transactions. This\r\n * is the path at which events need to be raised for.\r\n *\r\n * @param changedPath - The path in mergedData that changed.\r\n * @returns The rootmost path that was affected by rerunning transactions.\r\n */\r\nfunction repoRerunTransactions(repo, changedPath) {\r\n const rootMostTransactionNode = repoGetAncestorTransactionNode(repo, changedPath);\r\n const path = treeGetPath(rootMostTransactionNode);\r\n const queue = repoBuildTransactionQueue(repo, rootMostTransactionNode);\r\n repoRerunTransactionQueue(repo, queue, path);\r\n return path;\r\n}\r\n/**\r\n * Does all the work of rerunning transactions (as well as cleans up aborted\r\n * transactions and whatnot).\r\n *\r\n * @param queue - The queue of transactions to run.\r\n * @param path - The path the queue is for.\r\n */\r\nfunction repoRerunTransactionQueue(repo, queue, path) {\r\n if (queue.length === 0) {\r\n return; // Nothing to do!\r\n }\r\n // Queue up the callbacks and fire them after cleaning up all of our\r\n // transaction state, since the callback could trigger more transactions or\r\n // sets.\r\n const callbacks = [];\r\n let events = [];\r\n // Ignore all of the sets we're going to re-run.\r\n const txnsToRerun = queue.filter(q => {\r\n return q.status === 0 /* TransactionStatus.RUN */;\r\n });\r\n const setsToIgnore = txnsToRerun.map(q => {\r\n return q.currentWriteId;\r\n });\r\n for (let i = 0; i < queue.length; i++) {\r\n const transaction = queue[i];\r\n const relativePath = newRelativePath(path, transaction.path);\r\n let abortTransaction = false, abortReason;\r\n assert(relativePath !== null, 'rerunTransactionsUnderNode_: relativePath should not be null.');\r\n if (transaction.status === 4 /* TransactionStatus.NEEDS_ABORT */) {\r\n abortTransaction = true;\r\n abortReason = transaction.abortReason;\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n }\r\n else if (transaction.status === 0 /* TransactionStatus.RUN */) {\r\n if (transaction.retryCount >= MAX_TRANSACTION_RETRIES) {\r\n abortTransaction = true;\r\n abortReason = 'maxretry';\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n }\r\n else {\r\n // This code reruns a transaction\r\n const currentNode = repoGetLatestState(repo, transaction.path, setsToIgnore);\r\n transaction.currentInputSnapshot = currentNode;\r\n const newData = queue[i].update(currentNode.val());\r\n if (newData !== undefined) {\r\n validateFirebaseData('transaction failed: Data returned ', newData, transaction.path);\r\n let newDataNode = nodeFromJSON(newData);\r\n const hasExplicitPriority = typeof newData === 'object' &&\r\n newData != null &&\r\n contains(newData, '.priority');\r\n if (!hasExplicitPriority) {\r\n // Keep the old priority if there wasn't a priority explicitly specified.\r\n newDataNode = newDataNode.updatePriority(currentNode.getPriority());\r\n }\r\n const oldWriteId = transaction.currentWriteId;\r\n const serverValues = repoGenerateServerValues(repo);\r\n const newNodeResolved = resolveDeferredValueSnapshot(newDataNode, currentNode, serverValues);\r\n transaction.currentOutputSnapshotRaw = newDataNode;\r\n transaction.currentOutputSnapshotResolved = newNodeResolved;\r\n transaction.currentWriteId = repoGetNextWriteId(repo);\r\n // Mutates setsToIgnore in place\r\n setsToIgnore.splice(setsToIgnore.indexOf(oldWriteId), 1);\r\n events = events.concat(syncTreeApplyUserOverwrite(repo.serverSyncTree_, transaction.path, newNodeResolved, transaction.currentWriteId, transaction.applyLocally));\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, oldWriteId, true));\r\n }\r\n else {\r\n abortTransaction = true;\r\n abortReason = 'nodata';\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n }\r\n }\r\n }\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n events = [];\r\n if (abortTransaction) {\r\n // Abort.\r\n queue[i].status = 2 /* TransactionStatus.COMPLETED */;\r\n // Removing a listener can trigger pruning which can muck with\r\n // mergedData/visibleData (as it prunes data). So defer the unwatcher\r\n // until we're done.\r\n (function (unwatcher) {\r\n setTimeout(unwatcher, Math.floor(0));\r\n })(queue[i].unwatcher);\r\n if (queue[i].onComplete) {\r\n if (abortReason === 'nodata') {\r\n callbacks.push(() => queue[i].onComplete(null, false, queue[i].currentInputSnapshot));\r\n }\r\n else {\r\n callbacks.push(() => queue[i].onComplete(new Error(abortReason), false, null));\r\n }\r\n }\r\n }\r\n }\r\n // Clean up completed transactions.\r\n repoPruneCompletedTransactionsBelowNode(repo, repo.transactionQueueTree_);\r\n // Now fire callbacks, now that we're in a good, known state.\r\n for (let i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n // Try to send the transaction result to the server.\r\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n}\r\n/**\r\n * Returns the rootmost ancestor node of the specified path that has a pending\r\n * transaction on it, or just returns the node for the given path if there are\r\n * no pending transactions on any ancestor.\r\n *\r\n * @param path - The location to start at.\r\n * @returns The rootmost node with a transaction.\r\n */\r\nfunction repoGetAncestorTransactionNode(repo, path) {\r\n let front;\r\n // Start at the root and walk deeper into the tree towards path until we\r\n // find a node with pending transactions.\r\n let transactionNode = repo.transactionQueueTree_;\r\n front = pathGetFront(path);\r\n while (front !== null && treeGetValue(transactionNode) === undefined) {\r\n transactionNode = treeSubTree(transactionNode, front);\r\n path = pathPopFront(path);\r\n front = pathGetFront(path);\r\n }\r\n return transactionNode;\r\n}\r\n/**\r\n * Builds the queue of all transactions at or below the specified\r\n * transactionNode.\r\n *\r\n * @param transactionNode\r\n * @returns The generated queue.\r\n */\r\nfunction repoBuildTransactionQueue(repo, transactionNode) {\r\n // Walk any child transaction queues and aggregate them into a single queue.\r\n const transactionQueue = [];\r\n repoAggregateTransactionQueuesForNode(repo, transactionNode, transactionQueue);\r\n // Sort them by the order the transactions were created.\r\n transactionQueue.sort((a, b) => a.order - b.order);\r\n return transactionQueue;\r\n}\r\nfunction repoAggregateTransactionQueuesForNode(repo, node, queue) {\r\n const nodeQueue = treeGetValue(node);\r\n if (nodeQueue) {\r\n for (let i = 0; i < nodeQueue.length; i++) {\r\n queue.push(nodeQueue[i]);\r\n }\r\n }\r\n treeForEachChild(node, child => {\r\n repoAggregateTransactionQueuesForNode(repo, child, queue);\r\n });\r\n}\r\n/**\r\n * Remove COMPLETED transactions at or below this node in the transactionQueueTree_.\r\n */\r\nfunction repoPruneCompletedTransactionsBelowNode(repo, node) {\r\n const queue = treeGetValue(node);\r\n if (queue) {\r\n let to = 0;\r\n for (let from = 0; from < queue.length; from++) {\r\n if (queue[from].status !== 2 /* TransactionStatus.COMPLETED */) {\r\n queue[to] = queue[from];\r\n to++;\r\n }\r\n }\r\n queue.length = to;\r\n treeSetValue(node, queue.length > 0 ? queue : undefined);\r\n }\r\n treeForEachChild(node, childNode => {\r\n repoPruneCompletedTransactionsBelowNode(repo, childNode);\r\n });\r\n}\r\n/**\r\n * Aborts all transactions on ancestors or descendants of the specified path.\r\n * Called when doing a set() or update() since we consider them incompatible\r\n * with transactions.\r\n *\r\n * @param path - Path for which we want to abort related transactions.\r\n */\r\nfunction repoAbortTransactions(repo, path) {\r\n const affectedPath = treeGetPath(repoGetAncestorTransactionNode(repo, path));\r\n const transactionNode = treeSubTree(repo.transactionQueueTree_, path);\r\n treeForEachAncestor(transactionNode, (node) => {\r\n repoAbortTransactionsOnNode(repo, node);\r\n });\r\n repoAbortTransactionsOnNode(repo, transactionNode);\r\n treeForEachDescendant(transactionNode, (node) => {\r\n repoAbortTransactionsOnNode(repo, node);\r\n });\r\n return affectedPath;\r\n}\r\n/**\r\n * Abort transactions stored in this transaction queue node.\r\n *\r\n * @param node - Node to abort transactions for.\r\n */\r\nfunction repoAbortTransactionsOnNode(repo, node) {\r\n const queue = treeGetValue(node);\r\n if (queue) {\r\n // Queue up the callbacks and fire them after cleaning up all of our\r\n // transaction state, since the callback could trigger more transactions\r\n // or sets.\r\n const callbacks = [];\r\n // Go through queue. Any already-sent transactions must be marked for\r\n // abort, while the unsent ones can be immediately aborted and removed.\r\n let events = [];\r\n let lastSent = -1;\r\n for (let i = 0; i < queue.length; i++) {\r\n if (queue[i].status === 3 /* TransactionStatus.SENT_NEEDS_ABORT */) ;\r\n else if (queue[i].status === 1 /* TransactionStatus.SENT */) {\r\n assert(lastSent === i - 1, 'All SENT items should be at beginning of queue.');\r\n lastSent = i;\r\n // Mark transaction for abort when it comes back.\r\n queue[i].status = 3 /* TransactionStatus.SENT_NEEDS_ABORT */;\r\n queue[i].abortReason = 'set';\r\n }\r\n else {\r\n assert(queue[i].status === 0 /* TransactionStatus.RUN */, 'Unexpected transaction status in abort');\r\n // We can abort it immediately.\r\n queue[i].unwatcher();\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId, true));\r\n if (queue[i].onComplete) {\r\n callbacks.push(queue[i].onComplete.bind(null, new Error('set'), false, null));\r\n }\r\n }\r\n }\r\n if (lastSent === -1) {\r\n // We're not waiting for any sent transactions. We can clear the queue.\r\n treeSetValue(node, undefined);\r\n }\r\n else {\r\n // Remove the transactions we aborted.\r\n queue.length = lastSent + 1;\r\n }\r\n // Now fire the callbacks.\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, treeGetPath(node), events);\r\n for (let i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction decodePath(pathString) {\r\n let pathStringDecoded = '';\r\n const pieces = pathString.split('/');\r\n for (let i = 0; i < pieces.length; i++) {\r\n if (pieces[i].length > 0) {\r\n let piece = pieces[i];\r\n try {\r\n piece = decodeURIComponent(piece.replace(/\\+/g, ' '));\r\n }\r\n catch (e) { }\r\n pathStringDecoded += '/' + piece;\r\n }\r\n }\r\n return pathStringDecoded;\r\n}\r\n/**\r\n * @returns key value hash\r\n */\r\nfunction decodeQuery(queryString) {\r\n const results = {};\r\n if (queryString.charAt(0) === '?') {\r\n queryString = queryString.substring(1);\r\n }\r\n for (const segment of queryString.split('&')) {\r\n if (segment.length === 0) {\r\n continue;\r\n }\r\n const kv = segment.split('=');\r\n if (kv.length === 2) {\r\n results[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);\r\n }\r\n else {\r\n warn(`Invalid query segment '${segment}' in query '${queryString}'`);\r\n }\r\n }\r\n return results;\r\n}\r\nconst parseRepoInfo = function (dataURL, nodeAdmin) {\r\n const parsedUrl = parseDatabaseURL(dataURL), namespace = parsedUrl.namespace;\r\n if (parsedUrl.domain === 'firebase.com') {\r\n fatal(parsedUrl.host +\r\n ' is no longer supported. ' +\r\n 'Please use .firebaseio.com instead');\r\n }\r\n // Catch common error of uninitialized namespace value.\r\n if ((!namespace || namespace === 'undefined') &&\r\n parsedUrl.domain !== 'localhost') {\r\n fatal('Cannot parse Firebase url. Please use https://.firebaseio.com');\r\n }\r\n if (!parsedUrl.secure) {\r\n warnIfPageIsSecure();\r\n }\r\n const webSocketOnly = parsedUrl.scheme === 'ws' || parsedUrl.scheme === 'wss';\r\n return {\r\n repoInfo: new RepoInfo(parsedUrl.host, parsedUrl.secure, namespace, webSocketOnly, nodeAdmin, \r\n /*persistenceKey=*/ '', \r\n /*includeNamespaceInQueryParams=*/ namespace !== parsedUrl.subdomain),\r\n path: new Path(parsedUrl.pathString)\r\n };\r\n};\r\nconst parseDatabaseURL = function (dataURL) {\r\n // Default to empty strings in the event of a malformed string.\r\n let host = '', domain = '', subdomain = '', pathString = '', namespace = '';\r\n // Always default to SSL, unless otherwise specified.\r\n let secure = true, scheme = 'https', port = 443;\r\n // Don't do any validation here. The caller is responsible for validating the result of parsing.\r\n if (typeof dataURL === 'string') {\r\n // Parse scheme.\r\n let colonInd = dataURL.indexOf('//');\r\n if (colonInd >= 0) {\r\n scheme = dataURL.substring(0, colonInd - 1);\r\n dataURL = dataURL.substring(colonInd + 2);\r\n }\r\n // Parse host, path, and query string.\r\n let slashInd = dataURL.indexOf('/');\r\n if (slashInd === -1) {\r\n slashInd = dataURL.length;\r\n }\r\n let questionMarkInd = dataURL.indexOf('?');\r\n if (questionMarkInd === -1) {\r\n questionMarkInd = dataURL.length;\r\n }\r\n host = dataURL.substring(0, Math.min(slashInd, questionMarkInd));\r\n if (slashInd < questionMarkInd) {\r\n // For pathString, questionMarkInd will always come after slashInd\r\n pathString = decodePath(dataURL.substring(slashInd, questionMarkInd));\r\n }\r\n const queryParams = decodeQuery(dataURL.substring(Math.min(dataURL.length, questionMarkInd)));\r\n // If we have a port, use scheme for determining if it's secure.\r\n colonInd = host.indexOf(':');\r\n if (colonInd >= 0) {\r\n secure = scheme === 'https' || scheme === 'wss';\r\n port = parseInt(host.substring(colonInd + 1), 10);\r\n }\r\n else {\r\n colonInd = host.length;\r\n }\r\n const hostWithoutPort = host.slice(0, colonInd);\r\n if (hostWithoutPort.toLowerCase() === 'localhost') {\r\n domain = 'localhost';\r\n }\r\n else if (hostWithoutPort.split('.').length <= 2) {\r\n domain = hostWithoutPort;\r\n }\r\n else {\r\n // Interpret the subdomain of a 3 or more component URL as the namespace name.\r\n const dotInd = host.indexOf('.');\r\n subdomain = host.substring(0, dotInd).toLowerCase();\r\n domain = host.substring(dotInd + 1);\r\n // Normalize namespaces to lowercase to share storage / connection.\r\n namespace = subdomain;\r\n }\r\n // Always treat the value of the `ns` as the namespace name if it is present.\r\n if ('ns' in queryParams) {\r\n namespace = queryParams['ns'];\r\n }\r\n }\r\n return {\r\n host,\r\n port,\r\n domain,\r\n subdomain,\r\n secure,\r\n scheme,\r\n pathString,\r\n namespace\r\n };\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Modeled after base64 web-safe chars, but ordered by ASCII.\r\nconst PUSH_CHARS = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';\r\n/**\r\n * Fancy ID generator that creates 20-character string identifiers with the\r\n * following properties:\r\n *\r\n * 1. They're based on timestamp so that they sort *after* any existing ids.\r\n * 2. They contain 72-bits of random data after the timestamp so that IDs won't\r\n * collide with other clients' IDs.\r\n * 3. They sort *lexicographically* (so the timestamp is converted to characters\r\n * that will sort properly).\r\n * 4. They're monotonically increasing. Even if you generate more than one in\r\n * the same timestamp, the latter ones will sort after the former ones. We do\r\n * this by using the previous random bits but \"incrementing\" them by 1 (only\r\n * in the case of a timestamp collision).\r\n */\r\nconst nextPushId = (function () {\r\n // Timestamp of last push, used to prevent local collisions if you push twice\r\n // in one ms.\r\n let lastPushTime = 0;\r\n // We generate 72-bits of randomness which get turned into 12 characters and\r\n // appended to the timestamp to prevent collisions with other clients. We\r\n // store the last characters we generated because in the event of a collision,\r\n // we'll use those same characters except \"incremented\" by one.\r\n const lastRandChars = [];\r\n return function (now) {\r\n const duplicateTime = now === lastPushTime;\r\n lastPushTime = now;\r\n let i;\r\n const timeStampChars = new Array(8);\r\n for (i = 7; i >= 0; i--) {\r\n timeStampChars[i] = PUSH_CHARS.charAt(now % 64);\r\n // NOTE: Can't use << here because javascript will convert to int and lose\r\n // the upper bits.\r\n now = Math.floor(now / 64);\r\n }\r\n assert(now === 0, 'Cannot push at time == 0');\r\n let id = timeStampChars.join('');\r\n if (!duplicateTime) {\r\n for (i = 0; i < 12; i++) {\r\n lastRandChars[i] = Math.floor(Math.random() * 64);\r\n }\r\n }\r\n else {\r\n // If the timestamp hasn't changed since last push, use the same random\r\n // number, except incremented by 1.\r\n for (i = 11; i >= 0 && lastRandChars[i] === 63; i--) {\r\n lastRandChars[i] = 0;\r\n }\r\n lastRandChars[i]++;\r\n }\r\n for (i = 0; i < 12; i++) {\r\n id += PUSH_CHARS.charAt(lastRandChars[i]);\r\n }\r\n assert(id.length === 20, 'nextPushId: Length should be 20.');\r\n return id;\r\n };\r\n})();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Encapsulates the data needed to raise an event\r\n */\r\nclass DataEvent {\r\n /**\r\n * @param eventType - One of: value, child_added, child_changed, child_moved, child_removed\r\n * @param eventRegistration - The function to call to with the event data. User provided\r\n * @param snapshot - The data backing the event\r\n * @param prevName - Optional, the name of the previous child for child_* events.\r\n */\r\n constructor(eventType, eventRegistration, snapshot, prevName) {\r\n this.eventType = eventType;\r\n this.eventRegistration = eventRegistration;\r\n this.snapshot = snapshot;\r\n this.prevName = prevName;\r\n }\r\n getPath() {\r\n const ref = this.snapshot.ref;\r\n if (this.eventType === 'value') {\r\n return ref._path;\r\n }\r\n else {\r\n return ref.parent._path;\r\n }\r\n }\r\n getEventType() {\r\n return this.eventType;\r\n }\r\n getEventRunner() {\r\n return this.eventRegistration.getEventRunner(this);\r\n }\r\n toString() {\r\n return (this.getPath().toString() +\r\n ':' +\r\n this.eventType +\r\n ':' +\r\n stringify(this.snapshot.exportVal()));\r\n }\r\n}\r\nclass CancelEvent {\r\n constructor(eventRegistration, error, path) {\r\n this.eventRegistration = eventRegistration;\r\n this.error = error;\r\n this.path = path;\r\n }\r\n getPath() {\r\n return this.path;\r\n }\r\n getEventType() {\r\n return 'cancel';\r\n }\r\n getEventRunner() {\r\n return this.eventRegistration.getEventRunner(this);\r\n }\r\n toString() {\r\n return this.path.toString() + ':cancel';\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A wrapper class that converts events from the database@exp SDK to the legacy\r\n * Database SDK. Events are not converted directly as event registration relies\r\n * on reference comparison of the original user callback (see `matches()`) and\r\n * relies on equality of the legacy SDK's `context` object.\r\n */\r\nclass CallbackContext {\r\n constructor(snapshotCallback, cancelCallback) {\r\n this.snapshotCallback = snapshotCallback;\r\n this.cancelCallback = cancelCallback;\r\n }\r\n onValue(expDataSnapshot, previousChildName) {\r\n this.snapshotCallback.call(null, expDataSnapshot, previousChildName);\r\n }\r\n onCancel(error) {\r\n assert(this.hasCancelCallback, 'Raising a cancel event on a listener with no cancel callback');\r\n return this.cancelCallback.call(null, error);\r\n }\r\n get hasCancelCallback() {\r\n return !!this.cancelCallback;\r\n }\r\n matches(other) {\r\n return (this.snapshotCallback === other.snapshotCallback ||\r\n (this.snapshotCallback.userCallback !== undefined &&\r\n this.snapshotCallback.userCallback ===\r\n other.snapshotCallback.userCallback &&\r\n this.snapshotCallback.context === other.snapshotCallback.context));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The `onDisconnect` class allows you to write or clear data when your client\r\n * disconnects from the Database server. These updates occur whether your\r\n * client disconnects cleanly or not, so you can rely on them to clean up data\r\n * even if a connection is dropped or a client crashes.\r\n *\r\n * The `onDisconnect` class is most commonly used to manage presence in\r\n * applications where it is useful to detect how many clients are connected and\r\n * when other clients disconnect. See\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information.\r\n *\r\n * To avoid problems when a connection is dropped before the requests can be\r\n * transferred to the Database server, these functions should be called before\r\n * writing any data.\r\n *\r\n * Note that `onDisconnect` operations are only triggered once. If you want an\r\n * operation to occur each time a disconnect occurs, you'll need to re-establish\r\n * the `onDisconnect` operations each time you reconnect.\r\n */\r\nclass OnDisconnect {\r\n /** @hideconstructor */\r\n constructor(_repo, _path) {\r\n this._repo = _repo;\r\n this._path = _path;\r\n }\r\n /**\r\n * Cancels all previously queued `onDisconnect()` set or update events for this\r\n * location and all children.\r\n *\r\n * If a write has been queued for this location via a `set()` or `update()` at a\r\n * parent location, the write at this location will be canceled, though writes\r\n * to sibling locations will still occur.\r\n *\r\n * @returns Resolves when synchronization to the server is complete.\r\n */\r\n cancel() {\r\n const deferred = new Deferred();\r\n repoOnDisconnectCancel(this._repo, this._path, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Ensures the data at this location is deleted when the client is disconnected\r\n * (due to closing the browser, navigating to a new page, or network issues).\r\n *\r\n * @returns Resolves when synchronization to the server is complete.\r\n */\r\n remove() {\r\n validateWritablePath('OnDisconnect.remove', this._path);\r\n const deferred = new Deferred();\r\n repoOnDisconnectSet(this._repo, this._path, null, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Ensures the data at this location is set to the specified value when the\r\n * client is disconnected (due to closing the browser, navigating to a new page,\r\n * or network issues).\r\n *\r\n * `set()` is especially useful for implementing \"presence\" systems, where a\r\n * value should be changed or cleared when a user disconnects so that they\r\n * appear \"offline\" to other users. See\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information.\r\n *\r\n * Note that `onDisconnect` operations are only triggered once. If you want an\r\n * operation to occur each time a disconnect occurs, you'll need to re-establish\r\n * the `onDisconnect` operations each time.\r\n *\r\n * @param value - The value to be written to this location on disconnect (can\r\n * be an object, array, string, number, boolean, or null).\r\n * @returns Resolves when synchronization to the Database is complete.\r\n */\r\n set(value) {\r\n validateWritablePath('OnDisconnect.set', this._path);\r\n validateFirebaseDataArg('OnDisconnect.set', value, this._path, false);\r\n const deferred = new Deferred();\r\n repoOnDisconnectSet(this._repo, this._path, value, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Ensures the data at this location is set to the specified value and priority\r\n * when the client is disconnected (due to closing the browser, navigating to a\r\n * new page, or network issues).\r\n *\r\n * @param value - The value to be written to this location on disconnect (can\r\n * be an object, array, string, number, boolean, or null).\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when synchronization to the Database is complete.\r\n */\r\n setWithPriority(value, priority) {\r\n validateWritablePath('OnDisconnect.setWithPriority', this._path);\r\n validateFirebaseDataArg('OnDisconnect.setWithPriority', value, this._path, false);\r\n validatePriority('OnDisconnect.setWithPriority', priority, false);\r\n const deferred = new Deferred();\r\n repoOnDisconnectSetWithPriority(this._repo, this._path, value, priority, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Writes multiple values at this location when the client is disconnected (due\r\n * to closing the browser, navigating to a new page, or network issues).\r\n *\r\n * The `values` argument contains multiple property-value pairs that will be\r\n * written to the Database together. Each child property can either be a simple\r\n * property (for example, \"name\") or a relative path (for example, \"name/first\")\r\n * from the current location to the data to update.\r\n *\r\n * As opposed to the `set()` method, `update()` can be use to selectively update\r\n * only the referenced properties at the current location (instead of replacing\r\n * all the child properties at the current location).\r\n *\r\n * @param values - Object containing multiple values.\r\n * @returns Resolves when synchronization to the Database is complete.\r\n */\r\n update(values) {\r\n validateWritablePath('OnDisconnect.update', this._path);\r\n validateFirebaseMergeDataArg('OnDisconnect.update', values, this._path, false);\r\n const deferred = new Deferred();\r\n repoOnDisconnectUpdate(this._repo, this._path, values, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @internal\r\n */\r\nclass QueryImpl {\r\n /**\r\n * @hideconstructor\r\n */\r\n constructor(_repo, _path, _queryParams, _orderByCalled) {\r\n this._repo = _repo;\r\n this._path = _path;\r\n this._queryParams = _queryParams;\r\n this._orderByCalled = _orderByCalled;\r\n }\r\n get key() {\r\n if (pathIsEmpty(this._path)) {\r\n return null;\r\n }\r\n else {\r\n return pathGetBack(this._path);\r\n }\r\n }\r\n get ref() {\r\n return new ReferenceImpl(this._repo, this._path);\r\n }\r\n get _queryIdentifier() {\r\n const obj = queryParamsGetQueryObject(this._queryParams);\r\n const id = ObjectToUniqueKey(obj);\r\n return id === '{}' ? 'default' : id;\r\n }\r\n /**\r\n * An object representation of the query parameters used by this Query.\r\n */\r\n get _queryObject() {\r\n return queryParamsGetQueryObject(this._queryParams);\r\n }\r\n isEqual(other) {\r\n other = getModularInstance(other);\r\n if (!(other instanceof QueryImpl)) {\r\n return false;\r\n }\r\n const sameRepo = this._repo === other._repo;\r\n const samePath = pathEquals(this._path, other._path);\r\n const sameQueryIdentifier = this._queryIdentifier === other._queryIdentifier;\r\n return sameRepo && samePath && sameQueryIdentifier;\r\n }\r\n toJSON() {\r\n return this.toString();\r\n }\r\n toString() {\r\n return this._repo.toString() + pathToUrlEncodedString(this._path);\r\n }\r\n}\r\n/**\r\n * Validates that no other order by call has been made\r\n */\r\nfunction validateNoPreviousOrderByCall(query, fnName) {\r\n if (query._orderByCalled === true) {\r\n throw new Error(fnName + \": You can't combine multiple orderBy calls.\");\r\n }\r\n}\r\n/**\r\n * Validates start/end values for queries.\r\n */\r\nfunction validateQueryEndpoints(params) {\r\n let startNode = null;\r\n let endNode = null;\r\n if (params.hasStart()) {\r\n startNode = params.getIndexStartValue();\r\n }\r\n if (params.hasEnd()) {\r\n endNode = params.getIndexEndValue();\r\n }\r\n if (params.getIndex() === KEY_INDEX) {\r\n const tooManyArgsError = 'Query: When ordering by key, you may only pass one argument to ' +\r\n 'startAt(), endAt(), or equalTo().';\r\n const wrongArgTypeError = 'Query: When ordering by key, the argument passed to startAt(), startAfter(), ' +\r\n 'endAt(), endBefore(), or equalTo() must be a string.';\r\n if (params.hasStart()) {\r\n const startName = params.getIndexStartName();\r\n if (startName !== MIN_NAME) {\r\n throw new Error(tooManyArgsError);\r\n }\r\n else if (typeof startNode !== 'string') {\r\n throw new Error(wrongArgTypeError);\r\n }\r\n }\r\n if (params.hasEnd()) {\r\n const endName = params.getIndexEndName();\r\n if (endName !== MAX_NAME) {\r\n throw new Error(tooManyArgsError);\r\n }\r\n else if (typeof endNode !== 'string') {\r\n throw new Error(wrongArgTypeError);\r\n }\r\n }\r\n }\r\n else if (params.getIndex() === PRIORITY_INDEX) {\r\n if ((startNode != null && !isValidPriority(startNode)) ||\r\n (endNode != null && !isValidPriority(endNode))) {\r\n throw new Error('Query: When ordering by priority, the first argument passed to startAt(), ' +\r\n 'startAfter() endAt(), endBefore(), or equalTo() must be a valid priority value ' +\r\n '(null, a number, or a string).');\r\n }\r\n }\r\n else {\r\n assert(params.getIndex() instanceof PathIndex ||\r\n params.getIndex() === VALUE_INDEX, 'unknown index type.');\r\n if ((startNode != null && typeof startNode === 'object') ||\r\n (endNode != null && typeof endNode === 'object')) {\r\n throw new Error('Query: First argument passed to startAt(), startAfter(), endAt(), endBefore(), or ' +\r\n 'equalTo() cannot be an object.');\r\n }\r\n }\r\n}\r\n/**\r\n * Validates that limit* has been called with the correct combination of parameters\r\n */\r\nfunction validateLimit(params) {\r\n if (params.hasStart() &&\r\n params.hasEnd() &&\r\n params.hasLimit() &&\r\n !params.hasAnchoredLimit()) {\r\n throw new Error(\"Query: Can't combine startAt(), startAfter(), endAt(), endBefore(), and limit(). Use \" +\r\n 'limitToFirst() or limitToLast() instead.');\r\n }\r\n}\r\n/**\r\n * @internal\r\n */\r\nclass ReferenceImpl extends QueryImpl {\r\n /** @hideconstructor */\r\n constructor(repo, path) {\r\n super(repo, path, new QueryParams(), false);\r\n }\r\n get parent() {\r\n const parentPath = pathParent(this._path);\r\n return parentPath === null\r\n ? null\r\n : new ReferenceImpl(this._repo, parentPath);\r\n }\r\n get root() {\r\n let ref = this;\r\n while (ref.parent !== null) {\r\n ref = ref.parent;\r\n }\r\n return ref;\r\n }\r\n}\r\n/**\r\n * A `DataSnapshot` contains data from a Database location.\r\n *\r\n * Any time you read data from the Database, you receive the data as a\r\n * `DataSnapshot`. A `DataSnapshot` is passed to the event callbacks you attach\r\n * with `on()` or `once()`. You can extract the contents of the snapshot as a\r\n * JavaScript object by calling the `val()` method. Alternatively, you can\r\n * traverse into the snapshot by calling `child()` to return child snapshots\r\n * (which you could then call `val()` on).\r\n *\r\n * A `DataSnapshot` is an efficiently generated, immutable copy of the data at\r\n * a Database location. It cannot be modified and will never change (to modify\r\n * data, you always call the `set()` method on a `Reference` directly).\r\n */\r\nclass DataSnapshot {\r\n /**\r\n * @param _node - A SnapshotNode to wrap.\r\n * @param ref - The location this snapshot came from.\r\n * @param _index - The iteration order for this snapshot\r\n * @hideconstructor\r\n */\r\n constructor(_node, \r\n /**\r\n * The location of this DataSnapshot.\r\n */\r\n ref, _index) {\r\n this._node = _node;\r\n this.ref = ref;\r\n this._index = _index;\r\n }\r\n /**\r\n * Gets the priority value of the data in this `DataSnapshot`.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data |Sorting and filtering data}\r\n * ).\r\n */\r\n get priority() {\r\n // typecast here because we never return deferred values or internal priorities (MAX_PRIORITY)\r\n return this._node.getPriority().val();\r\n }\r\n /**\r\n * The key (last part of the path) of the location of this `DataSnapshot`.\r\n *\r\n * The last token in a Database location is considered its key. For example,\r\n * \"ada\" is the key for the /users/ada/ node. Accessing the key on any\r\n * `DataSnapshot` will return the key for the location that generated it.\r\n * However, accessing the key on the root URL of a Database will return\r\n * `null`.\r\n */\r\n get key() {\r\n return this.ref.key;\r\n }\r\n /** Returns the number of child properties of this `DataSnapshot`. */\r\n get size() {\r\n return this._node.numChildren();\r\n }\r\n /**\r\n * Gets another `DataSnapshot` for the location at the specified relative path.\r\n *\r\n * Passing a relative path to the `child()` method of a DataSnapshot returns\r\n * another `DataSnapshot` for the location at the specified relative path. The\r\n * relative path can either be a simple child name (for example, \"ada\") or a\r\n * deeper, slash-separated path (for example, \"ada/name/first\"). If the child\r\n * location has no data, an empty `DataSnapshot` (that is, a `DataSnapshot`\r\n * whose value is `null`) is returned.\r\n *\r\n * @param path - A relative path to the location of child data.\r\n */\r\n child(path) {\r\n const childPath = new Path(path);\r\n const childRef = child(this.ref, path);\r\n return new DataSnapshot(this._node.getChild(childPath), childRef, PRIORITY_INDEX);\r\n }\r\n /**\r\n * Returns true if this `DataSnapshot` contains any data. It is slightly more\r\n * efficient than using `snapshot.val() !== null`.\r\n */\r\n exists() {\r\n return !this._node.isEmpty();\r\n }\r\n /**\r\n * Exports the entire contents of the DataSnapshot as a JavaScript object.\r\n *\r\n * The `exportVal()` method is similar to `val()`, except priority information\r\n * is included (if available), making it suitable for backing up your data.\r\n *\r\n * @returns The DataSnapshot's contents as a JavaScript value (Object,\r\n * Array, string, number, boolean, or `null`).\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n exportVal() {\r\n return this._node.val(true);\r\n }\r\n /**\r\n * Enumerates the top-level children in the `DataSnapshot`.\r\n *\r\n * Because of the way JavaScript objects work, the ordering of data in the\r\n * JavaScript object returned by `val()` is not guaranteed to match the\r\n * ordering on the server nor the ordering of `onChildAdded()` events. That is\r\n * where `forEach()` comes in handy. It guarantees the children of a\r\n * `DataSnapshot` will be iterated in their query order.\r\n *\r\n * If no explicit `orderBy*()` method is used, results are returned\r\n * ordered by key (unless priorities are used, in which case, results are\r\n * returned by priority).\r\n *\r\n * @param action - A function that will be called for each child DataSnapshot.\r\n * The callback can return true to cancel further enumeration.\r\n * @returns true if enumeration was canceled due to your callback returning\r\n * true.\r\n */\r\n forEach(action) {\r\n if (this._node.isLeafNode()) {\r\n return false;\r\n }\r\n const childrenNode = this._node;\r\n // Sanitize the return value to a boolean. ChildrenNode.forEachChild has a weird return type...\r\n return !!childrenNode.forEachChild(this._index, (key, node) => {\r\n return action(new DataSnapshot(node, child(this.ref, key), PRIORITY_INDEX));\r\n });\r\n }\r\n /**\r\n * Returns true if the specified child path has (non-null) data.\r\n *\r\n * @param path - A relative path to the location of a potential child.\r\n * @returns `true` if data exists at the specified child path; else\r\n * `false`.\r\n */\r\n hasChild(path) {\r\n const childPath = new Path(path);\r\n return !this._node.getChild(childPath).isEmpty();\r\n }\r\n /**\r\n * Returns whether or not the `DataSnapshot` has any non-`null` child\r\n * properties.\r\n *\r\n * You can use `hasChildren()` to determine if a `DataSnapshot` has any\r\n * children. If it does, you can enumerate them using `forEach()`. If it\r\n * doesn't, then either this snapshot contains a primitive value (which can be\r\n * retrieved with `val()`) or it is empty (in which case, `val()` will return\r\n * `null`).\r\n *\r\n * @returns true if this snapshot has any children; else false.\r\n */\r\n hasChildren() {\r\n if (this._node.isLeafNode()) {\r\n return false;\r\n }\r\n else {\r\n return !this._node.isEmpty();\r\n }\r\n }\r\n /**\r\n * Returns a JSON-serializable representation of this object.\r\n */\r\n toJSON() {\r\n return this.exportVal();\r\n }\r\n /**\r\n * Extracts a JavaScript value from a `DataSnapshot`.\r\n *\r\n * Depending on the data in a `DataSnapshot`, the `val()` method may return a\r\n * scalar type (string, number, or boolean), an array, or an object. It may\r\n * also return null, indicating that the `DataSnapshot` is empty (contains no\r\n * data).\r\n *\r\n * @returns The DataSnapshot's contents as a JavaScript value (Object,\r\n * Array, string, number, boolean, or `null`).\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n val() {\r\n return this._node.val();\r\n }\r\n}\r\n/**\r\n *\r\n * Returns a `Reference` representing the location in the Database\r\n * corresponding to the provided path. If no path is provided, the `Reference`\r\n * will point to the root of the Database.\r\n *\r\n * @param db - The database instance to obtain a reference for.\r\n * @param path - Optional path representing the location the returned\r\n * `Reference` will point. If not provided, the returned `Reference` will\r\n * point to the root of the Database.\r\n * @returns If a path is provided, a `Reference`\r\n * pointing to the provided path. Otherwise, a `Reference` pointing to the\r\n * root of the Database.\r\n */\r\nfunction ref(db, path) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('ref');\r\n return path !== undefined ? child(db._root, path) : db._root;\r\n}\r\n/**\r\n * Returns a `Reference` representing the location in the Database\r\n * corresponding to the provided Firebase URL.\r\n *\r\n * An exception is thrown if the URL is not a valid Firebase Database URL or it\r\n * has a different domain than the current `Database` instance.\r\n *\r\n * Note that all query parameters (`orderBy`, `limitToLast`, etc.) are ignored\r\n * and are not applied to the returned `Reference`.\r\n *\r\n * @param db - The database instance to obtain a reference for.\r\n * @param url - The Firebase URL at which the returned `Reference` will\r\n * point.\r\n * @returns A `Reference` pointing to the provided\r\n * Firebase URL.\r\n */\r\nfunction refFromURL(db, url) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('refFromURL');\r\n const parsedURL = parseRepoInfo(url, db._repo.repoInfo_.nodeAdmin);\r\n validateUrl('refFromURL', parsedURL);\r\n const repoInfo = parsedURL.repoInfo;\r\n if (!db._repo.repoInfo_.isCustomHost() &&\r\n repoInfo.host !== db._repo.repoInfo_.host) {\r\n fatal('refFromURL' +\r\n ': Host name does not match the current database: ' +\r\n '(found ' +\r\n repoInfo.host +\r\n ' but expected ' +\r\n db._repo.repoInfo_.host +\r\n ')');\r\n }\r\n return ref(db, parsedURL.path.toString());\r\n}\r\n/**\r\n * Gets a `Reference` for the location at the specified relative path.\r\n *\r\n * The relative path can either be a simple child name (for example, \"ada\") or\r\n * a deeper slash-separated path (for example, \"ada/name/first\").\r\n *\r\n * @param parent - The parent location.\r\n * @param path - A relative path from this location to the desired child\r\n * location.\r\n * @returns The specified child location.\r\n */\r\nfunction child(parent, path) {\r\n parent = getModularInstance(parent);\r\n if (pathGetFront(parent._path) === null) {\r\n validateRootPathString('child', 'path', path, false);\r\n }\r\n else {\r\n validatePathString('child', 'path', path, false);\r\n }\r\n return new ReferenceImpl(parent._repo, pathChild(parent._path, path));\r\n}\r\n/**\r\n * Returns an `OnDisconnect` object - see\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information on how to use it.\r\n *\r\n * @param ref - The reference to add OnDisconnect triggers for.\r\n */\r\nfunction onDisconnect(ref) {\r\n ref = getModularInstance(ref);\r\n return new OnDisconnect(ref._repo, ref._path);\r\n}\r\n/**\r\n * Generates a new child location using a unique key and returns its\r\n * `Reference`.\r\n *\r\n * This is the most common pattern for adding data to a collection of items.\r\n *\r\n * If you provide a value to `push()`, the value is written to the\r\n * generated location. If you don't pass a value, nothing is written to the\r\n * database and the child remains empty (but you can use the `Reference`\r\n * elsewhere).\r\n *\r\n * The unique keys generated by `push()` are ordered by the current time, so the\r\n * resulting list of items is chronologically sorted. The keys are also\r\n * designed to be unguessable (they contain 72 random bits of entropy).\r\n *\r\n * See {@link https://firebase.google.com/docs/database/web/lists-of-data#append_to_a_list_of_data | Append to a list of data}.\r\n * See {@link https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html | The 2^120 Ways to Ensure Unique Identifiers}.\r\n *\r\n * @param parent - The parent location.\r\n * @param value - Optional value to be written at the generated location.\r\n * @returns Combined `Promise` and `Reference`; resolves when write is complete,\r\n * but can be used immediately as the `Reference` to the child location.\r\n */\r\nfunction push(parent, value) {\r\n parent = getModularInstance(parent);\r\n validateWritablePath('push', parent._path);\r\n validateFirebaseDataArg('push', value, parent._path, true);\r\n const now = repoServerTime(parent._repo);\r\n const name = nextPushId(now);\r\n // push() returns a ThennableReference whose promise is fulfilled with a\r\n // regular Reference. We use child() to create handles to two different\r\n // references. The first is turned into a ThennableReference below by adding\r\n // then() and catch() methods and is used as the return value of push(). The\r\n // second remains a regular Reference and is used as the fulfilled value of\r\n // the first ThennableReference.\r\n const thennablePushRef = child(parent, name);\r\n const pushRef = child(parent, name);\r\n let promise;\r\n if (value != null) {\r\n promise = set(pushRef, value).then(() => pushRef);\r\n }\r\n else {\r\n promise = Promise.resolve(pushRef);\r\n }\r\n thennablePushRef.then = promise.then.bind(promise);\r\n thennablePushRef.catch = promise.then.bind(promise, undefined);\r\n return thennablePushRef;\r\n}\r\n/**\r\n * Removes the data at this Database location.\r\n *\r\n * Any data at child locations will also be deleted.\r\n *\r\n * The effect of the remove will be visible immediately and the corresponding\r\n * event 'value' will be triggered. Synchronization of the remove to the\r\n * Firebase servers will also be started, and the returned Promise will resolve\r\n * when complete. If provided, the onComplete callback will be called\r\n * asynchronously after synchronization has finished.\r\n *\r\n * @param ref - The location to remove.\r\n * @returns Resolves when remove on server is complete.\r\n */\r\nfunction remove(ref) {\r\n validateWritablePath('remove', ref._path);\r\n return set(ref, null);\r\n}\r\n/**\r\n * Writes data to this Database location.\r\n *\r\n * This will overwrite any data at this location and all child locations.\r\n *\r\n * The effect of the write will be visible immediately, and the corresponding\r\n * events (\"value\", \"child_added\", etc.) will be triggered. Synchronization of\r\n * the data to the Firebase servers will also be started, and the returned\r\n * Promise will resolve when complete. If provided, the `onComplete` callback\r\n * will be called asynchronously after synchronization has finished.\r\n *\r\n * Passing `null` for the new value is equivalent to calling `remove()`; namely,\r\n * all data at this location and all child locations will be deleted.\r\n *\r\n * `set()` will remove any priority stored at this location, so if priority is\r\n * meant to be preserved, you need to use `setWithPriority()` instead.\r\n *\r\n * Note that modifying data with `set()` will cancel any pending transactions\r\n * at that location, so extreme care should be taken if mixing `set()` and\r\n * `transaction()` to modify the same data.\r\n *\r\n * A single `set()` will generate a single \"value\" event at the location where\r\n * the `set()` was performed.\r\n *\r\n * @param ref - The location to write to.\r\n * @param value - The value to be written (string, number, boolean, object,\r\n * array, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction set(ref, value) {\r\n ref = getModularInstance(ref);\r\n validateWritablePath('set', ref._path);\r\n validateFirebaseDataArg('set', value, ref._path, false);\r\n const deferred = new Deferred();\r\n repoSetWithPriority(ref._repo, ref._path, value, \r\n /*priority=*/ null, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Sets a priority for the data at this Database location.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\r\n * ).\r\n *\r\n * @param ref - The location to write to.\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction setPriority(ref, priority) {\r\n ref = getModularInstance(ref);\r\n validateWritablePath('setPriority', ref._path);\r\n validatePriority('setPriority', priority, false);\r\n const deferred = new Deferred();\r\n repoSetWithPriority(ref._repo, pathChild(ref._path, '.priority'), priority, null, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Writes data the Database location. Like `set()` but also specifies the\r\n * priority for that data.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\r\n * ).\r\n *\r\n * @param ref - The location to write to.\r\n * @param value - The value to be written (string, number, boolean, object,\r\n * array, or null).\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction setWithPriority(ref, value, priority) {\r\n validateWritablePath('setWithPriority', ref._path);\r\n validateFirebaseDataArg('setWithPriority', value, ref._path, false);\r\n validatePriority('setWithPriority', priority, false);\r\n if (ref.key === '.length' || ref.key === '.keys') {\r\n throw 'setWithPriority failed: ' + ref.key + ' is a read-only object.';\r\n }\r\n const deferred = new Deferred();\r\n repoSetWithPriority(ref._repo, ref._path, value, priority, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Writes multiple values to the Database at once.\r\n *\r\n * The `values` argument contains multiple property-value pairs that will be\r\n * written to the Database together. Each child property can either be a simple\r\n * property (for example, \"name\") or a relative path (for example,\r\n * \"name/first\") from the current location to the data to update.\r\n *\r\n * As opposed to the `set()` method, `update()` can be use to selectively update\r\n * only the referenced properties at the current location (instead of replacing\r\n * all the child properties at the current location).\r\n *\r\n * The effect of the write will be visible immediately, and the corresponding\r\n * events ('value', 'child_added', etc.) will be triggered. Synchronization of\r\n * the data to the Firebase servers will also be started, and the returned\r\n * Promise will resolve when complete. If provided, the `onComplete` callback\r\n * will be called asynchronously after synchronization has finished.\r\n *\r\n * A single `update()` will generate a single \"value\" event at the location\r\n * where the `update()` was performed, regardless of how many children were\r\n * modified.\r\n *\r\n * Note that modifying data with `update()` will cancel any pending\r\n * transactions at that location, so extreme care should be taken if mixing\r\n * `update()` and `transaction()` to modify the same data.\r\n *\r\n * Passing `null` to `update()` will remove the data at this location.\r\n *\r\n * See\r\n * {@link https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html | Introducing multi-location updates and more}.\r\n *\r\n * @param ref - The location to write to.\r\n * @param values - Object containing multiple values.\r\n * @returns Resolves when update on server is complete.\r\n */\r\nfunction update(ref, values) {\r\n validateFirebaseMergeDataArg('update', values, ref._path, false);\r\n const deferred = new Deferred();\r\n repoUpdate(ref._repo, ref._path, values, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Gets the most up-to-date result for this query.\r\n *\r\n * @param query - The query to run.\r\n * @returns A `Promise` which resolves to the resulting DataSnapshot if a value is\r\n * available, or rejects if the client is unable to return a value (e.g., if the\r\n * server is unreachable and there is nothing cached).\r\n */\r\nfunction get(query) {\r\n query = getModularInstance(query);\r\n const callbackContext = new CallbackContext(() => { });\r\n const container = new ValueEventRegistration(callbackContext);\r\n return repoGetValue(query._repo, query, container).then(node => {\r\n return new DataSnapshot(node, new ReferenceImpl(query._repo, query._path), query._queryParams.getIndex());\r\n });\r\n}\r\n/**\r\n * Represents registration for 'value' events.\r\n */\r\nclass ValueEventRegistration {\r\n constructor(callbackContext) {\r\n this.callbackContext = callbackContext;\r\n }\r\n respondsTo(eventType) {\r\n return eventType === 'value';\r\n }\r\n createEvent(change, query) {\r\n const index = query._queryParams.getIndex();\r\n return new DataEvent('value', this, new DataSnapshot(change.snapshotNode, new ReferenceImpl(query._repo, query._path), index));\r\n }\r\n getEventRunner(eventData) {\r\n if (eventData.getEventType() === 'cancel') {\r\n return () => this.callbackContext.onCancel(eventData.error);\r\n }\r\n else {\r\n return () => this.callbackContext.onValue(eventData.snapshot, null);\r\n }\r\n }\r\n createCancelEvent(error, path) {\r\n if (this.callbackContext.hasCancelCallback) {\r\n return new CancelEvent(this, error, path);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n matches(other) {\r\n if (!(other instanceof ValueEventRegistration)) {\r\n return false;\r\n }\r\n else if (!other.callbackContext || !this.callbackContext) {\r\n // If no callback specified, we consider it to match any callback.\r\n return true;\r\n }\r\n else {\r\n return other.callbackContext.matches(this.callbackContext);\r\n }\r\n }\r\n hasAnyCallback() {\r\n return this.callbackContext !== null;\r\n }\r\n}\r\n/**\r\n * Represents the registration of a child_x event.\r\n */\r\nclass ChildEventRegistration {\r\n constructor(eventType, callbackContext) {\r\n this.eventType = eventType;\r\n this.callbackContext = callbackContext;\r\n }\r\n respondsTo(eventType) {\r\n let eventToCheck = eventType === 'children_added' ? 'child_added' : eventType;\r\n eventToCheck =\r\n eventToCheck === 'children_removed' ? 'child_removed' : eventToCheck;\r\n return this.eventType === eventToCheck;\r\n }\r\n createCancelEvent(error, path) {\r\n if (this.callbackContext.hasCancelCallback) {\r\n return new CancelEvent(this, error, path);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n createEvent(change, query) {\r\n assert(change.childName != null, 'Child events should have a childName.');\r\n const childRef = child(new ReferenceImpl(query._repo, query._path), change.childName);\r\n const index = query._queryParams.getIndex();\r\n return new DataEvent(change.type, this, new DataSnapshot(change.snapshotNode, childRef, index), change.prevName);\r\n }\r\n getEventRunner(eventData) {\r\n if (eventData.getEventType() === 'cancel') {\r\n return () => this.callbackContext.onCancel(eventData.error);\r\n }\r\n else {\r\n return () => this.callbackContext.onValue(eventData.snapshot, eventData.prevName);\r\n }\r\n }\r\n matches(other) {\r\n if (other instanceof ChildEventRegistration) {\r\n return (this.eventType === other.eventType &&\r\n (!this.callbackContext ||\r\n !other.callbackContext ||\r\n this.callbackContext.matches(other.callbackContext)));\r\n }\r\n return false;\r\n }\r\n hasAnyCallback() {\r\n return !!this.callbackContext;\r\n }\r\n}\r\nfunction addEventListener(query, eventType, callback, cancelCallbackOrListenOptions, options) {\r\n let cancelCallback;\r\n if (typeof cancelCallbackOrListenOptions === 'object') {\r\n cancelCallback = undefined;\r\n options = cancelCallbackOrListenOptions;\r\n }\r\n if (typeof cancelCallbackOrListenOptions === 'function') {\r\n cancelCallback = cancelCallbackOrListenOptions;\r\n }\r\n if (options && options.onlyOnce) {\r\n const userCallback = callback;\r\n const onceCallback = (dataSnapshot, previousChildName) => {\r\n repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n userCallback(dataSnapshot, previousChildName);\r\n };\r\n onceCallback.userCallback = callback.userCallback;\r\n onceCallback.context = callback.context;\r\n callback = onceCallback;\r\n }\r\n const callbackContext = new CallbackContext(callback, cancelCallback || undefined);\r\n const container = eventType === 'value'\r\n ? new ValueEventRegistration(callbackContext)\r\n : new ChildEventRegistration(eventType, callbackContext);\r\n repoAddEventCallbackForQuery(query._repo, query, container);\r\n return () => repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n}\r\nfunction onValue(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'value', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildAdded(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_added', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildChanged(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_changed', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildMoved(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_moved', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildRemoved(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_removed', callback, cancelCallbackOrListenOptions, options);\r\n}\r\n/**\r\n * Detaches a callback previously attached with the corresponding `on*()` (`onValue`, `onChildAdded`) listener.\r\n * Note: This is not the recommended way to remove a listener. Instead, please use the returned callback function from\r\n * the respective `on*` callbacks.\r\n *\r\n * Detach a callback previously attached with `on*()`. Calling `off()` on a parent listener\r\n * will not automatically remove listeners registered on child nodes, `off()`\r\n * must also be called on any child listeners to remove the callback.\r\n *\r\n * If a callback is not specified, all callbacks for the specified eventType\r\n * will be removed. Similarly, if no eventType is specified, all callbacks\r\n * for the `Reference` will be removed.\r\n *\r\n * Individual listeners can also be removed by invoking their unsubscribe\r\n * callbacks.\r\n *\r\n * @param query - The query that the listener was registered with.\r\n * @param eventType - One of the following strings: \"value\", \"child_added\",\r\n * \"child_changed\", \"child_removed\", or \"child_moved.\" If omitted, all callbacks\r\n * for the `Reference` will be removed.\r\n * @param callback - The callback function that was passed to `on()` or\r\n * `undefined` to remove all callbacks.\r\n */\r\nfunction off(query, eventType, callback) {\r\n let container = null;\r\n const expCallback = callback ? new CallbackContext(callback) : null;\r\n if (eventType === 'value') {\r\n container = new ValueEventRegistration(expCallback);\r\n }\r\n else if (eventType) {\r\n container = new ChildEventRegistration(eventType, expCallback);\r\n }\r\n repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n}\r\n/**\r\n * A `QueryConstraint` is used to narrow the set of documents returned by a\r\n * Database query. `QueryConstraint`s are created by invoking {@link endAt},\r\n * {@link endBefore}, {@link startAt}, {@link startAfter}, {@link\r\n * limitToFirst}, {@link limitToLast}, {@link orderByChild},\r\n * {@link orderByChild}, {@link orderByKey} , {@link orderByPriority} ,\r\n * {@link orderByValue} or {@link equalTo} and\r\n * can then be passed to {@link query} to create a new query instance that\r\n * also contains this `QueryConstraint`.\r\n */\r\nclass QueryConstraint {\r\n}\r\nclass QueryEndAtConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('endAt', this._value, query._path, true);\r\n const newParams = queryParamsEndAt(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasEnd()) {\r\n throw new Error('endAt: Starting point was already set (by another call to endAt, ' +\r\n 'endBefore or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified ending point.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The ending point is inclusive, so children with exactly the specified value\r\n * will be included in the query. The optional key argument can be used to\r\n * further limit the range of the query. If it is specified, then children that\r\n * have exactly the specified value must also have a key name less than or equal\r\n * to the specified key.\r\n *\r\n * You can read more about `endAt()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to end at. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to end at, among the children with the previously\r\n * specified priority. This argument is only allowed if ordering by child,\r\n * value, or priority.\r\n */\r\nfunction endAt(value, key) {\r\n validateKey('endAt', 'key', key, true);\r\n return new QueryEndAtConstraint(value, key);\r\n}\r\nclass QueryEndBeforeConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('endBefore', this._value, query._path, false);\r\n const newParams = queryParamsEndBefore(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasEnd()) {\r\n throw new Error('endBefore: Starting point was already set (by another call to endAt, ' +\r\n 'endBefore or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified ending point (exclusive).\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The ending point is exclusive. If only a value is provided, children\r\n * with a value less than the specified value will be included in the query.\r\n * If a key is specified, then children must have a value less than or equal\r\n * to the specified value and a key name less than the specified key.\r\n *\r\n * @param value - The value to end before. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to end before, among the children with the\r\n * previously specified priority. This argument is only allowed if ordering by\r\n * child, value, or priority.\r\n */\r\nfunction endBefore(value, key) {\r\n validateKey('endBefore', 'key', key, true);\r\n return new QueryEndBeforeConstraint(value, key);\r\n}\r\nclass QueryStartAtConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('startAt', this._value, query._path, true);\r\n const newParams = queryParamsStartAt(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasStart()) {\r\n throw new Error('startAt: Starting point was already set (by another call to startAt, ' +\r\n 'startBefore or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified starting point.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The starting point is inclusive, so children with exactly the specified value\r\n * will be included in the query. The optional key argument can be used to\r\n * further limit the range of the query. If it is specified, then children that\r\n * have exactly the specified value must also have a key name greater than or\r\n * equal to the specified key.\r\n *\r\n * You can read more about `startAt()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to start at. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start at. This argument is only allowed if\r\n * ordering by child, value, or priority.\r\n */\r\nfunction startAt(value = null, key) {\r\n validateKey('startAt', 'key', key, true);\r\n return new QueryStartAtConstraint(value, key);\r\n}\r\nclass QueryStartAfterConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('startAfter', this._value, query._path, false);\r\n const newParams = queryParamsStartAfter(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasStart()) {\r\n throw new Error('startAfter: Starting point was already set (by another call to startAt, ' +\r\n 'startAfter, or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified starting point (exclusive).\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The starting point is exclusive. If only a value is provided, children\r\n * with a value greater than the specified value will be included in the query.\r\n * If a key is specified, then children must have a value greater than or equal\r\n * to the specified value and a a key name greater than the specified key.\r\n *\r\n * @param value - The value to start after. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start after. This argument is only allowed if\r\n * ordering by child, value, or priority.\r\n */\r\nfunction startAfter(value, key) {\r\n validateKey('startAfter', 'key', key, true);\r\n return new QueryStartAfterConstraint(value, key);\r\n}\r\nclass QueryLimitToFirstConstraint extends QueryConstraint {\r\n constructor(_limit) {\r\n super();\r\n this._limit = _limit;\r\n }\r\n _apply(query) {\r\n if (query._queryParams.hasLimit()) {\r\n throw new Error('limitToFirst: Limit was already set (by another call to limitToFirst ' +\r\n 'or limitToLast).');\r\n }\r\n return new QueryImpl(query._repo, query._path, queryParamsLimitToFirst(query._queryParams, this._limit), query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that if limited to the first specific number\r\n * of children.\r\n *\r\n * The `limitToFirst()` method is used to set a maximum number of children to be\r\n * synced for a given callback. If we set a limit of 100, we will initially only\r\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\r\n * stored in our Database, a `child_added` event will fire for each message.\r\n * However, if we have over 100 messages, we will only receive a `child_added`\r\n * event for the first 100 ordered messages. As items change, we will receive\r\n * `child_removed` events for each item that drops out of the active list so\r\n * that the total number stays at 100.\r\n *\r\n * You can read more about `limitToFirst()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param limit - The maximum number of nodes to include in this query.\r\n */\r\nfunction limitToFirst(limit) {\r\n if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\r\n throw new Error('limitToFirst: First argument must be a positive integer.');\r\n }\r\n return new QueryLimitToFirstConstraint(limit);\r\n}\r\nclass QueryLimitToLastConstraint extends QueryConstraint {\r\n constructor(_limit) {\r\n super();\r\n this._limit = _limit;\r\n }\r\n _apply(query) {\r\n if (query._queryParams.hasLimit()) {\r\n throw new Error('limitToLast: Limit was already set (by another call to limitToFirst ' +\r\n 'or limitToLast).');\r\n }\r\n return new QueryImpl(query._repo, query._path, queryParamsLimitToLast(query._queryParams, this._limit), query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that is limited to return only the last\r\n * specified number of children.\r\n *\r\n * The `limitToLast()` method is used to set a maximum number of children to be\r\n * synced for a given callback. If we set a limit of 100, we will initially only\r\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\r\n * stored in our Database, a `child_added` event will fire for each message.\r\n * However, if we have over 100 messages, we will only receive a `child_added`\r\n * event for the last 100 ordered messages. As items change, we will receive\r\n * `child_removed` events for each item that drops out of the active list so\r\n * that the total number stays at 100.\r\n *\r\n * You can read more about `limitToLast()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param limit - The maximum number of nodes to include in this query.\r\n */\r\nfunction limitToLast(limit) {\r\n if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\r\n throw new Error('limitToLast: First argument must be a positive integer.');\r\n }\r\n return new QueryLimitToLastConstraint(limit);\r\n}\r\nclass QueryOrderByChildConstraint extends QueryConstraint {\r\n constructor(_path) {\r\n super();\r\n this._path = _path;\r\n }\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByChild');\r\n const parsedPath = new Path(this._path);\r\n if (pathIsEmpty(parsedPath)) {\r\n throw new Error('orderByChild: cannot pass in empty path. Use orderByValue() instead.');\r\n }\r\n const index = new PathIndex(parsedPath);\r\n const newParams = queryParamsOrderBy(query._queryParams, index);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by the specified child key.\r\n *\r\n * Queries can only order by one key at a time. Calling `orderByChild()`\r\n * multiple times on the same query is an error.\r\n *\r\n * Firebase queries allow you to order your data by any child key on the fly.\r\n * However, if you know in advance what your indexes will be, you can define\r\n * them via the .indexOn rule in your Security Rules for better performance. See\r\n * the{@link https://firebase.google.com/docs/database/security/indexing-data}\r\n * rule for more information.\r\n *\r\n * You can read more about `orderByChild()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n *\r\n * @param path - The path to order by.\r\n */\r\nfunction orderByChild(path) {\r\n if (path === '$key') {\r\n throw new Error('orderByChild: \"$key\" is invalid. Use orderByKey() instead.');\r\n }\r\n else if (path === '$priority') {\r\n throw new Error('orderByChild: \"$priority\" is invalid. Use orderByPriority() instead.');\r\n }\r\n else if (path === '$value') {\r\n throw new Error('orderByChild: \"$value\" is invalid. Use orderByValue() instead.');\r\n }\r\n validatePathString('orderByChild', 'path', path, false);\r\n return new QueryOrderByChildConstraint(path);\r\n}\r\nclass QueryOrderByKeyConstraint extends QueryConstraint {\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByKey');\r\n const newParams = queryParamsOrderBy(query._queryParams, KEY_INDEX);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by the key.\r\n *\r\n * Sorts the results of a query by their (ascending) key values.\r\n *\r\n * You can read more about `orderByKey()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n */\r\nfunction orderByKey() {\r\n return new QueryOrderByKeyConstraint();\r\n}\r\nclass QueryOrderByPriorityConstraint extends QueryConstraint {\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByPriority');\r\n const newParams = queryParamsOrderBy(query._queryParams, PRIORITY_INDEX);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by priority.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}\r\n * for alternatives to priority.\r\n */\r\nfunction orderByPriority() {\r\n return new QueryOrderByPriorityConstraint();\r\n}\r\nclass QueryOrderByValueConstraint extends QueryConstraint {\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByValue');\r\n const newParams = queryParamsOrderBy(query._queryParams, VALUE_INDEX);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by value.\r\n *\r\n * If the children of a query are all scalar values (string, number, or\r\n * boolean), you can order the results by their (ascending) values.\r\n *\r\n * You can read more about `orderByValue()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n */\r\nfunction orderByValue() {\r\n return new QueryOrderByValueConstraint();\r\n}\r\nclass QueryEqualToValueConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('equalTo', this._value, query._path, false);\r\n if (query._queryParams.hasStart()) {\r\n throw new Error('equalTo: Starting point was already set (by another call to startAt/startAfter or ' +\r\n 'equalTo).');\r\n }\r\n if (query._queryParams.hasEnd()) {\r\n throw new Error('equalTo: Ending point was already set (by another call to endAt/endBefore or ' +\r\n 'equalTo).');\r\n }\r\n return new QueryEndAtConstraint(this._value, this._key)._apply(new QueryStartAtConstraint(this._value, this._key)._apply(query));\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` that includes children that match the specified\r\n * value.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The optional key argument can be used to further limit the range of the\r\n * query. If it is specified, then children that have exactly the specified\r\n * value must also have exactly the specified key as their key name. This can be\r\n * used to filter result sets with many matches for the same value.\r\n *\r\n * You can read more about `equalTo()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to match for. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start at, among the children with the\r\n * previously specified priority. This argument is only allowed if ordering by\r\n * child, value, or priority.\r\n */\r\nfunction equalTo(value, key) {\r\n validateKey('equalTo', 'key', key, true);\r\n return new QueryEqualToValueConstraint(value, key);\r\n}\r\n/**\r\n * Creates a new immutable instance of `Query` that is extended to also include\r\n * additional query constraints.\r\n *\r\n * @param query - The Query instance to use as a base for the new constraints.\r\n * @param queryConstraints - The list of `QueryConstraint`s to apply.\r\n * @throws if any of the provided query constraints cannot be combined with the\r\n * existing or new constraints.\r\n */\r\nfunction query(query, ...queryConstraints) {\r\n let queryImpl = getModularInstance(query);\r\n for (const constraint of queryConstraints) {\r\n queryImpl = constraint._apply(queryImpl);\r\n }\r\n return queryImpl;\r\n}\r\n/**\r\n * Define reference constructor in various modules\r\n *\r\n * We are doing this here to avoid several circular\r\n * dependency issues\r\n */\r\nsyncPointSetReferenceConstructor(ReferenceImpl);\r\nsyncTreeSetReferenceConstructor(ReferenceImpl);\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This variable is also defined in the firebase Node.js Admin SDK. Before\r\n * modifying this definition, consult the definition in:\r\n *\r\n * https://github.com/firebase/firebase-admin-node\r\n *\r\n * and make sure the two are consistent.\r\n */\r\nconst FIREBASE_DATABASE_EMULATOR_HOST_VAR = 'FIREBASE_DATABASE_EMULATOR_HOST';\r\n/**\r\n * Creates and caches `Repo` instances.\r\n */\r\nconst repos = {};\r\n/**\r\n * If true, any new `Repo` will be created to use `ReadonlyRestClient` (for testing purposes).\r\n */\r\nlet useRestClient = false;\r\n/**\r\n * Update an existing `Repo` in place to point to a new host/port.\r\n */\r\nfunction repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider) {\r\n repo.repoInfo_ = new RepoInfo(`${host}:${port}`, \r\n /* secure= */ false, repo.repoInfo_.namespace, repo.repoInfo_.webSocketOnly, repo.repoInfo_.nodeAdmin, repo.repoInfo_.persistenceKey, repo.repoInfo_.includeNamespaceInQueryParams, \r\n /*isUsingEmulator=*/ true);\r\n if (tokenProvider) {\r\n repo.authTokenProvider_ = tokenProvider;\r\n }\r\n}\r\n/**\r\n * This function should only ever be called to CREATE a new database instance.\r\n * @internal\r\n */\r\nfunction repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url, nodeAdmin) {\r\n let dbUrl = url || app.options.databaseURL;\r\n if (dbUrl === undefined) {\r\n if (!app.options.projectId) {\r\n fatal(\"Can't determine Firebase Database URL. Be sure to include \" +\r\n ' a Project ID when calling firebase.initializeApp().');\r\n }\r\n log('Using default host for project ', app.options.projectId);\r\n dbUrl = `${app.options.projectId}-default-rtdb.firebaseio.com`;\r\n }\r\n let parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\r\n let repoInfo = parsedUrl.repoInfo;\r\n let isEmulator;\r\n let dbEmulatorHost = undefined;\r\n if (typeof process !== 'undefined' && process.env) {\r\n dbEmulatorHost = process.env[FIREBASE_DATABASE_EMULATOR_HOST_VAR];\r\n }\r\n if (dbEmulatorHost) {\r\n isEmulator = true;\r\n dbUrl = `http://${dbEmulatorHost}?ns=${repoInfo.namespace}`;\r\n parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\r\n repoInfo = parsedUrl.repoInfo;\r\n }\r\n else {\r\n isEmulator = !parsedUrl.repoInfo.secure;\r\n }\r\n const authTokenProvider = nodeAdmin && isEmulator\r\n ? new EmulatorTokenProvider(EmulatorTokenProvider.OWNER)\r\n : new FirebaseAuthTokenProvider(app.name, app.options, authProvider);\r\n validateUrl('Invalid Firebase Database URL', parsedUrl);\r\n if (!pathIsEmpty(parsedUrl.path)) {\r\n fatal('Database URL must point to the root of a Firebase Database ' +\r\n '(not including a child path).');\r\n }\r\n const repo = repoManagerCreateRepo(repoInfo, app, authTokenProvider, new AppCheckTokenProvider(app.name, appCheckProvider));\r\n return new Database(repo, app);\r\n}\r\n/**\r\n * Remove the repo and make sure it is disconnected.\r\n *\r\n */\r\nfunction repoManagerDeleteRepo(repo, appName) {\r\n const appRepos = repos[appName];\r\n // This should never happen...\r\n if (!appRepos || appRepos[repo.key] !== repo) {\r\n fatal(`Database ${appName}(${repo.repoInfo_}) has already been deleted.`);\r\n }\r\n repoInterrupt(repo);\r\n delete appRepos[repo.key];\r\n}\r\n/**\r\n * Ensures a repo doesn't already exist and then creates one using the\r\n * provided app.\r\n *\r\n * @param repoInfo - The metadata about the Repo\r\n * @returns The Repo object for the specified server / repoName.\r\n */\r\nfunction repoManagerCreateRepo(repoInfo, app, authTokenProvider, appCheckProvider) {\r\n let appRepos = repos[app.name];\r\n if (!appRepos) {\r\n appRepos = {};\r\n repos[app.name] = appRepos;\r\n }\r\n let repo = appRepos[repoInfo.toURLString()];\r\n if (repo) {\r\n fatal('Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.');\r\n }\r\n repo = new Repo(repoInfo, useRestClient, authTokenProvider, appCheckProvider);\r\n appRepos[repoInfo.toURLString()] = repo;\r\n return repo;\r\n}\r\n/**\r\n * Forces us to use ReadonlyRestClient instead of PersistentConnection for new Repos.\r\n */\r\nfunction repoManagerForceRestClient(forceRestClient) {\r\n useRestClient = forceRestClient;\r\n}\r\n/**\r\n * Class representing a Firebase Realtime Database.\r\n */\r\nclass Database {\r\n /** @hideconstructor */\r\n constructor(_repoInternal, \r\n /** The {@link @firebase/app#FirebaseApp} associated with this Realtime Database instance. */\r\n app) {\r\n this._repoInternal = _repoInternal;\r\n this.app = app;\r\n /** Represents a `Database` instance. */\r\n this['type'] = 'database';\r\n /** Track if the instance has been used (root or repo accessed) */\r\n this._instanceStarted = false;\r\n }\r\n get _repo() {\r\n if (!this._instanceStarted) {\r\n repoStart(this._repoInternal, this.app.options.appId, this.app.options['databaseAuthVariableOverride']);\r\n this._instanceStarted = true;\r\n }\r\n return this._repoInternal;\r\n }\r\n get _root() {\r\n if (!this._rootInternal) {\r\n this._rootInternal = new ReferenceImpl(this._repo, newEmptyPath());\r\n }\r\n return this._rootInternal;\r\n }\r\n _delete() {\r\n if (this._rootInternal !== null) {\r\n repoManagerDeleteRepo(this._repo, this.app.name);\r\n this._repoInternal = null;\r\n this._rootInternal = null;\r\n }\r\n return Promise.resolve();\r\n }\r\n _checkNotDeleted(apiName) {\r\n if (this._rootInternal === null) {\r\n fatal('Cannot call ' + apiName + ' on a deleted database.');\r\n }\r\n }\r\n}\r\nfunction checkTransportInit() {\r\n if (TransportManager.IS_TRANSPORT_INITIALIZED) {\r\n warn('Transport has already been initialized. Please call this function before calling ref or setting up a listener');\r\n }\r\n}\r\n/**\r\n * Force the use of websockets instead of longPolling.\r\n */\r\nfunction forceWebSockets() {\r\n checkTransportInit();\r\n BrowserPollConnection.forceDisallow();\r\n}\r\n/**\r\n * Force the use of longPolling instead of websockets. This will be ignored if websocket protocol is used in databaseURL.\r\n */\r\nfunction forceLongPolling() {\r\n checkTransportInit();\r\n WebSocketConnection.forceDisallow();\r\n BrowserPollConnection.forceAllow();\r\n}\r\n/**\r\n * Returns the instance of the Realtime Database SDK that is associated\r\n * with the provided {@link @firebase/app#FirebaseApp}. Initializes a new instance with\r\n * with default settings if no instance exists or if the existing instance uses\r\n * a custom database URL.\r\n *\r\n * @param app - The {@link @firebase/app#FirebaseApp} instance that the returned Realtime\r\n * Database instance is associated with.\r\n * @param url - The URL of the Realtime Database instance to connect to. If not\r\n * provided, the SDK connects to the default instance of the Firebase App.\r\n * @returns The `Database` instance of the provided app.\r\n */\r\nfunction getDatabase(app = getApp(), url) {\r\n const db = _getProvider(app, 'database').getImmediate({\r\n identifier: url\r\n });\r\n if (!db._instanceStarted) {\r\n const emulator = getDefaultEmulatorHostnameAndPort('database');\r\n if (emulator) {\r\n connectDatabaseEmulator(db, ...emulator);\r\n }\r\n }\r\n return db;\r\n}\r\n/**\r\n * Modify the provided instance to communicate with the Realtime Database\r\n * emulator.\r\n *\r\n *

Note: This method must be called before performing any other operation.\r\n *\r\n * @param db - The instance to modify.\r\n * @param host - The emulator host (ex: localhost)\r\n * @param port - The emulator port (ex: 8080)\r\n * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules\r\n */\r\nfunction connectDatabaseEmulator(db, host, port, options = {}) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('useEmulator');\r\n if (db._instanceStarted) {\r\n fatal('Cannot call useEmulator() after instance has already been initialized.');\r\n }\r\n const repo = db._repoInternal;\r\n let tokenProvider = undefined;\r\n if (repo.repoInfo_.nodeAdmin) {\r\n if (options.mockUserToken) {\r\n fatal('mockUserToken is not supported by the Admin SDK. For client access with mock users, please use the \"firebase\" package instead of \"firebase-admin\".');\r\n }\r\n tokenProvider = new EmulatorTokenProvider(EmulatorTokenProvider.OWNER);\r\n }\r\n else if (options.mockUserToken) {\r\n const token = typeof options.mockUserToken === 'string'\r\n ? options.mockUserToken\r\n : createMockUserToken(options.mockUserToken, db.app.options.projectId);\r\n tokenProvider = new EmulatorTokenProvider(token);\r\n }\r\n // Modify the repo to apply emulator settings\r\n repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider);\r\n}\r\n/**\r\n * Disconnects from the server (all Database operations will be completed\r\n * offline).\r\n *\r\n * The client automatically maintains a persistent connection to the Database\r\n * server, which will remain active indefinitely and reconnect when\r\n * disconnected. However, the `goOffline()` and `goOnline()` methods may be used\r\n * to control the client connection in cases where a persistent connection is\r\n * undesirable.\r\n *\r\n * While offline, the client will no longer receive data updates from the\r\n * Database. However, all Database operations performed locally will continue to\r\n * immediately fire events, allowing your application to continue behaving\r\n * normally. Additionally, each operation performed locally will automatically\r\n * be queued and retried upon reconnection to the Database server.\r\n *\r\n * To reconnect to the Database and begin receiving remote events, see\r\n * `goOnline()`.\r\n *\r\n * @param db - The instance to disconnect.\r\n */\r\nfunction goOffline(db) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('goOffline');\r\n repoInterrupt(db._repo);\r\n}\r\n/**\r\n * Reconnects to the server and synchronizes the offline Database state\r\n * with the server state.\r\n *\r\n * This method should be used after disabling the active connection with\r\n * `goOffline()`. Once reconnected, the client will transmit the proper data\r\n * and fire the appropriate events so that your client \"catches up\"\r\n * automatically.\r\n *\r\n * @param db - The instance to reconnect.\r\n */\r\nfunction goOnline(db) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('goOnline');\r\n repoResume(db._repo);\r\n}\r\nfunction enableLogging(logger, persistent) {\r\n enableLogging$1(logger, persistent);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerDatabase(variant) {\r\n setSDKVersion(SDK_VERSION$1);\r\n _registerComponent(new Component('database', (container, { instanceIdentifier: url }) => {\r\n const app = container.getProvider('app').getImmediate();\r\n const authProvider = container.getProvider('auth-internal');\r\n const appCheckProvider = container.getProvider('app-check-internal');\r\n return repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url);\r\n }, \"PUBLIC\" /* ComponentType.PUBLIC */).setMultipleInstances(true));\r\n registerVersion(name, version, variant);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name, version, 'esm2017');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst SERVER_TIMESTAMP = {\r\n '.sv': 'timestamp'\r\n};\r\n/**\r\n * Returns a placeholder value for auto-populating the current timestamp (time\r\n * since the Unix epoch, in milliseconds) as determined by the Firebase\r\n * servers.\r\n */\r\nfunction serverTimestamp() {\r\n return SERVER_TIMESTAMP;\r\n}\r\n/**\r\n * Returns a placeholder value that can be used to atomically increment the\r\n * current database value by the provided delta.\r\n *\r\n * @param delta - the amount to modify the current value atomically.\r\n * @returns A placeholder value for modifying data atomically server-side.\r\n */\r\nfunction increment(delta) {\r\n return {\r\n '.sv': {\r\n 'increment': delta\r\n }\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A type for the resolve value of {@link runTransaction}.\r\n */\r\nclass TransactionResult {\r\n /** @hideconstructor */\r\n constructor(\r\n /** Whether the transaction was successfully committed. */\r\n committed, \r\n /** The resulting data snapshot. */\r\n snapshot) {\r\n this.committed = committed;\r\n this.snapshot = snapshot;\r\n }\r\n /** Returns a JSON-serializable representation of this object. */\r\n toJSON() {\r\n return { committed: this.committed, snapshot: this.snapshot.toJSON() };\r\n }\r\n}\r\n/**\r\n * Atomically modifies the data at this location.\r\n *\r\n * Atomically modify the data at this location. Unlike a normal `set()`, which\r\n * just overwrites the data regardless of its previous value, `runTransaction()` is\r\n * used to modify the existing value to a new value, ensuring there are no\r\n * conflicts with other clients writing to the same location at the same time.\r\n *\r\n * To accomplish this, you pass `runTransaction()` an update function which is\r\n * used to transform the current value into a new value. If another client\r\n * writes to the location before your new value is successfully written, your\r\n * update function will be called again with the new current value, and the\r\n * write will be retried. This will happen repeatedly until your write succeeds\r\n * without conflict or you abort the transaction by not returning a value from\r\n * your update function.\r\n *\r\n * Note: Modifying data with `set()` will cancel any pending transactions at\r\n * that location, so extreme care should be taken if mixing `set()` and\r\n * `runTransaction()` to update the same data.\r\n *\r\n * Note: When using transactions with Security and Firebase Rules in place, be\r\n * aware that a client needs `.read` access in addition to `.write` access in\r\n * order to perform a transaction. This is because the client-side nature of\r\n * transactions requires the client to read the data in order to transactionally\r\n * update it.\r\n *\r\n * @param ref - The location to atomically modify.\r\n * @param transactionUpdate - A developer-supplied function which will be passed\r\n * the current data stored at this location (as a JavaScript object). The\r\n * function should return the new value it would like written (as a JavaScript\r\n * object). If `undefined` is returned (i.e. you return with no arguments) the\r\n * transaction will be aborted and the data at this location will not be\r\n * modified.\r\n * @param options - An options object to configure transactions.\r\n * @returns A `Promise` that can optionally be used instead of the `onComplete`\r\n * callback to handle success and failure.\r\n */\r\nfunction runTransaction(ref, \r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntransactionUpdate, options) {\r\n var _a;\r\n ref = getModularInstance(ref);\r\n validateWritablePath('Reference.transaction', ref._path);\r\n if (ref.key === '.length' || ref.key === '.keys') {\r\n throw ('Reference.transaction failed: ' + ref.key + ' is a read-only object.');\r\n }\r\n const applyLocally = (_a = options === null || options === void 0 ? void 0 : options.applyLocally) !== null && _a !== void 0 ? _a : true;\r\n const deferred = new Deferred();\r\n const promiseComplete = (error, committed, node) => {\r\n let dataSnapshot = null;\r\n if (error) {\r\n deferred.reject(error);\r\n }\r\n else {\r\n dataSnapshot = new DataSnapshot(node, new ReferenceImpl(ref._repo, ref._path), PRIORITY_INDEX);\r\n deferred.resolve(new TransactionResult(committed, dataSnapshot));\r\n }\r\n };\r\n // Add a watch to make sure we get server updates.\r\n const unwatcher = onValue(ref, () => { });\r\n repoStartTransaction(ref._repo, ref._path, transactionUpdate, promiseComplete, unwatcher, applyLocally);\r\n return deferred.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nPersistentConnection;\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nPersistentConnection.prototype.simpleListen = function (pathString, onComplete) {\r\n this.sendRequest('q', { p: pathString }, onComplete);\r\n};\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nPersistentConnection.prototype.echo = function (data, onEcho) {\r\n this.sendRequest('echo', { d: data }, onEcho);\r\n};\r\n// RealTimeConnection properties that we use in tests.\r\nConnection;\r\n/**\r\n * @internal\r\n */\r\nconst hijackHash = function (newHash) {\r\n const oldPut = PersistentConnection.prototype.put;\r\n PersistentConnection.prototype.put = function (pathString, data, onComplete, hash) {\r\n if (hash !== undefined) {\r\n hash = newHash();\r\n }\r\n oldPut.call(this, pathString, data, onComplete, hash);\r\n };\r\n return function () {\r\n PersistentConnection.prototype.put = oldPut;\r\n };\r\n};\r\nRepoInfo;\r\n/**\r\n * Forces the RepoManager to create Repos that use ReadonlyRestClient instead of PersistentConnection.\r\n * @internal\r\n */\r\nconst forceRestClient = function (forceRestClient) {\r\n repoManagerForceRestClient(forceRestClient);\r\n};\n\n/**\r\n * Firebase Realtime Database\r\n *\r\n * @packageDocumentation\r\n */\r\nregisterDatabase();\n\nexport { DataSnapshot, Database, OnDisconnect, QueryConstraint, TransactionResult, QueryImpl as _QueryImpl, QueryParams as _QueryParams, ReferenceImpl as _ReferenceImpl, forceRestClient as _TEST_ACCESS_forceRestClient, hijackHash as _TEST_ACCESS_hijackHash, repoManagerDatabaseFromApp as _repoManagerDatabaseFromApp, setSDKVersion as _setSDKVersion, validatePathString as _validatePathString, validateWritablePath as _validateWritablePath, child, connectDatabaseEmulator, enableLogging, endAt, endBefore, equalTo, forceLongPolling, forceWebSockets, get, getDatabase, goOffline, goOnline, increment, limitToFirst, limitToLast, off, onChildAdded, onChildChanged, onChildMoved, onChildRemoved, onDisconnect, onValue, orderByChild, orderByKey, orderByPriority, orderByValue, push, query, ref, refFromURL, remove, runTransaction, serverTimestamp, set, setPriority, setWithPriority, startAfter, startAt, update };\n\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A container for all of the Logger instances\r\n */\r\nconst instances = [];\r\n/**\r\n * The JS SDK supports 5 log levels and also allows a user the ability to\r\n * silence the logs altogether.\r\n *\r\n * The order is a follows:\r\n * DEBUG < VERBOSE < INFO < WARN < ERROR\r\n *\r\n * All of the log types above the current log level will be captured (i.e. if\r\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\r\n * `VERBOSE` logs will not)\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\r\n LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\r\n LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\r\n LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\r\n LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\r\n LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\r\n})(LogLevel || (LogLevel = {}));\r\nconst levelStringToEnum = {\r\n 'debug': LogLevel.DEBUG,\r\n 'verbose': LogLevel.VERBOSE,\r\n 'info': LogLevel.INFO,\r\n 'warn': LogLevel.WARN,\r\n 'error': LogLevel.ERROR,\r\n 'silent': LogLevel.SILENT\r\n};\r\n/**\r\n * The default log level\r\n */\r\nconst defaultLogLevel = LogLevel.INFO;\r\n/**\r\n * By default, `console.debug` is not displayed in the developer console (in\r\n * chrome). To avoid forcing users to have to opt-in to these logs twice\r\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\r\n * logs to the `console.log` function.\r\n */\r\nconst ConsoleMethod = {\r\n [LogLevel.DEBUG]: 'log',\r\n [LogLevel.VERBOSE]: 'log',\r\n [LogLevel.INFO]: 'info',\r\n [LogLevel.WARN]: 'warn',\r\n [LogLevel.ERROR]: 'error'\r\n};\r\n/**\r\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\r\n * messages on to their corresponding console counterparts (if the log method\r\n * is supported by the current log level)\r\n */\r\nconst defaultLogHandler = (instance, logType, ...args) => {\r\n if (logType < instance.logLevel) {\r\n return;\r\n }\r\n const now = new Date().toISOString();\r\n const method = ConsoleMethod[logType];\r\n if (method) {\r\n console[method](`[${now}] ${instance.name}:`, ...args);\r\n }\r\n else {\r\n throw new Error(`Attempted to log a message with an invalid logType (value: ${logType})`);\r\n }\r\n};\r\nclass Logger {\r\n /**\r\n * Gives you an instance of a Logger to capture messages according to\r\n * Firebase's logging scheme.\r\n *\r\n * @param name The name that the logs will be associated with\r\n */\r\n constructor(name) {\r\n this.name = name;\r\n /**\r\n * The log level of the given Logger instance.\r\n */\r\n this._logLevel = defaultLogLevel;\r\n /**\r\n * The main (internal) log handler for the Logger instance.\r\n * Can be set to a new function in internal package code but not by user.\r\n */\r\n this._logHandler = defaultLogHandler;\r\n /**\r\n * The optional, additional, user-defined log handler for the Logger instance.\r\n */\r\n this._userLogHandler = null;\r\n /**\r\n * Capture the current instance for later use\r\n */\r\n instances.push(this);\r\n }\r\n get logLevel() {\r\n return this._logLevel;\r\n }\r\n set logLevel(val) {\r\n if (!(val in LogLevel)) {\r\n throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\r\n }\r\n this._logLevel = val;\r\n }\r\n // Workaround for setter/getter having to be the same type.\r\n setLogLevel(val) {\r\n this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\r\n }\r\n get logHandler() {\r\n return this._logHandler;\r\n }\r\n set logHandler(val) {\r\n if (typeof val !== 'function') {\r\n throw new TypeError('Value assigned to `logHandler` must be a function');\r\n }\r\n this._logHandler = val;\r\n }\r\n get userLogHandler() {\r\n return this._userLogHandler;\r\n }\r\n set userLogHandler(val) {\r\n this._userLogHandler = val;\r\n }\r\n /**\r\n * The functions below are all based on the `console` interface\r\n */\r\n debug(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\r\n this._logHandler(this, LogLevel.DEBUG, ...args);\r\n }\r\n log(...args) {\r\n this._userLogHandler &&\r\n this._userLogHandler(this, LogLevel.VERBOSE, ...args);\r\n this._logHandler(this, LogLevel.VERBOSE, ...args);\r\n }\r\n info(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\r\n this._logHandler(this, LogLevel.INFO, ...args);\r\n }\r\n warn(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\r\n this._logHandler(this, LogLevel.WARN, ...args);\r\n }\r\n error(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\r\n this._logHandler(this, LogLevel.ERROR, ...args);\r\n }\r\n}\r\nfunction setLogLevel(level) {\r\n instances.forEach(inst => {\r\n inst.setLogLevel(level);\r\n });\r\n}\r\nfunction setUserLogHandler(logCallback, options) {\r\n for (const instance of instances) {\r\n let customLogLevel = null;\r\n if (options && options.level) {\r\n customLogLevel = levelStringToEnum[options.level];\r\n }\r\n if (logCallback === null) {\r\n instance.userLogHandler = null;\r\n }\r\n else {\r\n instance.userLogHandler = (instance, level, ...args) => {\r\n const message = args\r\n .map(arg => {\r\n if (arg == null) {\r\n return null;\r\n }\r\n else if (typeof arg === 'string') {\r\n return arg;\r\n }\r\n else if (typeof arg === 'number' || typeof arg === 'boolean') {\r\n return arg.toString();\r\n }\r\n else if (arg instanceof Error) {\r\n return arg.message;\r\n }\r\n else {\r\n try {\r\n return JSON.stringify(arg);\r\n }\r\n catch (ignored) {\r\n return null;\r\n }\r\n }\r\n })\r\n .filter(arg => arg)\r\n .join(' ');\r\n if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\r\n logCallback({\r\n level: LogLevel[level].toLowerCase(),\r\n message,\r\n args,\r\n type: instance.name\r\n });\r\n }\r\n };\r\n }\r\n }\r\n}\n\nexport { LogLevel, Logger, setLogLevel, setUserLogHandler };\n\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.\r\n */\r\nconst CONSTANTS = {\r\n /**\r\n * @define {boolean} Whether this is the client Node.js SDK.\r\n */\r\n NODE_CLIENT: false,\r\n /**\r\n * @define {boolean} Whether this is the Admin Node.js SDK.\r\n */\r\n NODE_ADMIN: false,\r\n /**\r\n * Firebase SDK Version\r\n */\r\n SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws an error if the provided assertion is falsy\r\n */\r\nconst assert = function (assertion, message) {\r\n if (!assertion) {\r\n throw assertionError(message);\r\n }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n */\r\nconst assertionError = function (message) {\r\n return new Error('Firebase Database (' +\r\n CONSTANTS.SDK_VERSION +\r\n ') INTERNAL ASSERT FAILED: ' +\r\n message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst stringToByteArray$1 = function (str) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if ((c & 0xfc00) === 0xd800 &&\r\n i + 1 < str.length &&\r\n (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\r\n // Surrogate Pair\r\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param bytes Array of numbers representing characters.\r\n * @return Stringification of the array.\r\n */\r\nconst byteArrayToString = function (bytes) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let pos = 0, c = 0;\r\n while (pos < bytes.length) {\r\n const c1 = bytes[pos++];\r\n if (c1 < 128) {\r\n out[c++] = String.fromCharCode(c1);\r\n }\r\n else if (c1 > 191 && c1 < 224) {\r\n const c2 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n }\r\n else if (c1 > 239 && c1 < 365) {\r\n // Surrogate Pair\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n const c4 = bytes[pos++];\r\n const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n 0x10000;\r\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n }\r\n else {\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n }\r\n }\r\n return out.join('');\r\n};\r\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\r\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\r\n// Static lookup maps, lazily populated by init_()\r\nconst base64 = {\r\n /**\r\n * Maps bytes to characters.\r\n */\r\n byteToCharMap_: null,\r\n /**\r\n * Maps characters to bytes.\r\n */\r\n charToByteMap_: null,\r\n /**\r\n * Maps bytes to websafe characters.\r\n * @private\r\n */\r\n byteToCharMapWebSafe_: null,\r\n /**\r\n * Maps websafe characters to bytes.\r\n * @private\r\n */\r\n charToByteMapWebSafe_: null,\r\n /**\r\n * Our default alphabet, shared between\r\n * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n */\r\n ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n /**\r\n * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n */\r\n get ENCODED_VALS() {\r\n return this.ENCODED_VALS_BASE + '+/=';\r\n },\r\n /**\r\n * Our websafe alphabet.\r\n */\r\n get ENCODED_VALS_WEBSAFE() {\r\n return this.ENCODED_VALS_BASE + '-_.';\r\n },\r\n /**\r\n * Whether this browser supports the atob and btoa functions. This extension\r\n * started at Mozilla but is now implemented by many browsers. We use the\r\n * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n * but still allowing the standard per-browser compilations.\r\n *\r\n */\r\n HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n /**\r\n * Base64-encode an array of bytes.\r\n *\r\n * @param input An array of bytes (numbers with\r\n * value in [0, 255]) to encode.\r\n * @param webSafe Boolean indicating we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeByteArray(input, webSafe) {\r\n if (!Array.isArray(input)) {\r\n throw Error('encodeByteArray takes an array as a parameter');\r\n }\r\n this.init_();\r\n const byteToCharMap = webSafe\r\n ? this.byteToCharMapWebSafe_\r\n : this.byteToCharMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length; i += 3) {\r\n const byte1 = input[i];\r\n const haveByte2 = i + 1 < input.length;\r\n const byte2 = haveByte2 ? input[i + 1] : 0;\r\n const haveByte3 = i + 2 < input.length;\r\n const byte3 = haveByte3 ? input[i + 2] : 0;\r\n const outByte1 = byte1 >> 2;\r\n const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n let outByte4 = byte3 & 0x3f;\r\n if (!haveByte3) {\r\n outByte4 = 64;\r\n if (!haveByte2) {\r\n outByte3 = 64;\r\n }\r\n }\r\n output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n }\r\n return output.join('');\r\n },\r\n /**\r\n * Base64-encode a string.\r\n *\r\n * @param input A string to encode.\r\n * @param webSafe If true, we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return btoa(input);\r\n }\r\n return this.encodeByteArray(stringToByteArray$1(input), webSafe);\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * @param input to decode.\r\n * @param webSafe True if we should use the\r\n * alternative alphabet.\r\n * @return string representing the decoded value.\r\n */\r\n decodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return atob(input);\r\n }\r\n return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * In base-64 decoding, groups of four characters are converted into three\r\n * bytes. If the encoder did not apply padding, the input length may not\r\n * be a multiple of 4.\r\n *\r\n * In this case, the last group will have fewer than 4 characters, and\r\n * padding will be inferred. If the group has one or two characters, it decodes\r\n * to one byte. If the group has three characters, it decodes to two bytes.\r\n *\r\n * @param input Input to decode.\r\n * @param webSafe True if we should use the web-safe alphabet.\r\n * @return bytes representing the decoded value.\r\n */\r\n decodeStringToByteArray(input, webSafe) {\r\n this.init_();\r\n const charToByteMap = webSafe\r\n ? this.charToByteMapWebSafe_\r\n : this.charToByteMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length;) {\r\n const byte1 = charToByteMap[input.charAt(i++)];\r\n const haveByte2 = i < input.length;\r\n const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n ++i;\r\n const haveByte3 = i < input.length;\r\n const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n const haveByte4 = i < input.length;\r\n const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n throw new DecodeBase64StringError();\r\n }\r\n const outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n output.push(outByte1);\r\n if (byte3 !== 64) {\r\n const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n output.push(outByte2);\r\n if (byte4 !== 64) {\r\n const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n output.push(outByte3);\r\n }\r\n }\r\n }\r\n return output;\r\n },\r\n /**\r\n * Lazy static initialization function. Called before\r\n * accessing any of the static map variables.\r\n * @private\r\n */\r\n init_() {\r\n if (!this.byteToCharMap_) {\r\n this.byteToCharMap_ = {};\r\n this.charToByteMap_ = {};\r\n this.byteToCharMapWebSafe_ = {};\r\n this.charToByteMapWebSafe_ = {};\r\n // We want quick mappings back and forth, so we precompute two maps.\r\n for (let i = 0; i < this.ENCODED_VALS.length; i++) {\r\n this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n // Be forgiving when decoding and correctly decode both encodings.\r\n if (i >= this.ENCODED_VALS_BASE.length) {\r\n this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n/**\r\n * An error encountered while decoding base64 string.\r\n */\r\nclass DecodeBase64StringError extends Error {\r\n constructor() {\r\n super(...arguments);\r\n this.name = 'DecodeBase64StringError';\r\n }\r\n}\r\n/**\r\n * URL-safe base64 encoding\r\n */\r\nconst base64Encode = function (str) {\r\n const utf8Bytes = stringToByteArray$1(str);\r\n return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 encoding (without \".\" padding in the end).\r\n * e.g. Used in JSON Web Token (JWT) parts.\r\n */\r\nconst base64urlEncodeWithoutPadding = function (str) {\r\n // Use base64url encoding and remove padding in the end (dot characters).\r\n return base64Encode(str).replace(/\\./g, '');\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param str To be decoded\r\n * @return Decoded result, if possible\r\n */\r\nconst base64Decode = function (str) {\r\n try {\r\n return base64.decodeString(str, true);\r\n }\r\n catch (e) {\r\n console.error('base64Decode failed: ', e);\r\n }\r\n return null;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays). Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n *\r\n * Note: we don't merge __proto__ to prevent prototype pollution\r\n */\r\nfunction deepExtend(target, source) {\r\n if (!(source instanceof Object)) {\r\n return source;\r\n }\r\n switch (source.constructor) {\r\n case Date:\r\n // Treat Dates like scalars; if the target date object had any child\r\n // properties - they will be lost!\r\n const dateValue = source;\r\n return new Date(dateValue.getTime());\r\n case Object:\r\n if (target === undefined) {\r\n target = {};\r\n }\r\n break;\r\n case Array:\r\n // Always copy the array source and overwrite the target.\r\n target = [];\r\n break;\r\n default:\r\n // Not a plain Object - treat it as a scalar.\r\n return source;\r\n }\r\n for (const prop in source) {\r\n // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\r\n if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\r\n continue;\r\n }\r\n target[prop] = deepExtend(target[prop], source[prop]);\r\n }\r\n return target;\r\n}\r\nfunction isValidKey(key) {\r\n return key !== '__proto__';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Polyfill for `globalThis` object.\r\n * @returns the `globalThis` object for the given environment.\r\n * @public\r\n */\r\nfunction getGlobal() {\r\n if (typeof self !== 'undefined') {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined') {\r\n return window;\r\n }\r\n if (typeof global !== 'undefined') {\r\n return global;\r\n }\r\n throw new Error('Unable to locate global object.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;\r\n/**\r\n * Attempt to read defaults from a JSON string provided to\r\n * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in\r\n * process(.)env(.)__FIREBASE_DEFAULTS_PATH__\r\n * The dots are in parens because certain compilers (Vite?) cannot\r\n * handle seeing that variable in comments.\r\n * See https://github.com/firebase/firebase-js-sdk/issues/6838\r\n */\r\nconst getDefaultsFromEnvVariable = () => {\r\n if (typeof process === 'undefined' || typeof process.env === 'undefined') {\r\n return;\r\n }\r\n const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\r\n if (defaultsJsonString) {\r\n return JSON.parse(defaultsJsonString);\r\n }\r\n};\r\nconst getDefaultsFromCookie = () => {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n let match;\r\n try {\r\n match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\r\n }\r\n catch (e) {\r\n // Some environments such as Angular Universal SSR have a\r\n // `document` object but error on accessing `document.cookie`.\r\n return;\r\n }\r\n const decoded = match && base64Decode(match[1]);\r\n return decoded && JSON.parse(decoded);\r\n};\r\n/**\r\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\r\n * (1) if such an object exists as a property of `globalThis`\r\n * (2) if such an object was provided on a shell environment variable\r\n * (3) if such an object exists in a cookie\r\n * @public\r\n */\r\nconst getDefaults = () => {\r\n try {\r\n return (getDefaultsFromGlobal() ||\r\n getDefaultsFromEnvVariable() ||\r\n getDefaultsFromCookie());\r\n }\r\n catch (e) {\r\n /**\r\n * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\r\n * to any environment case we have not accounted for. Log to\r\n * info instead of swallowing so we can find these unknown cases\r\n * and add paths for them if needed.\r\n */\r\n console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\r\n return;\r\n }\r\n};\r\n/**\r\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHost = (productName) => { var _a, _b; return (_b = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.emulatorHosts) === null || _b === void 0 ? void 0 : _b[productName]; };\r\n/**\r\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHostnameAndPort = (productName) => {\r\n const host = getDefaultEmulatorHost(productName);\r\n if (!host) {\r\n return undefined;\r\n }\r\n const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\r\n if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\r\n throw new Error(`Invalid host ${host} with no separate hostname and port!`);\r\n }\r\n // eslint-disable-next-line no-restricted-globals\r\n const port = parseInt(host.substring(separatorIndex + 1), 10);\r\n if (host[0] === '[') {\r\n // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\r\n return [host.substring(1, separatorIndex - 1), port];\r\n }\r\n else {\r\n return [host.substring(0, separatorIndex), port];\r\n }\r\n};\r\n/**\r\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\r\n * @public\r\n */\r\nconst getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };\r\n/**\r\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\r\n * prefixed by \"_\")\r\n * @public\r\n */\r\nconst getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Deferred {\r\n constructor() {\r\n this.reject = () => { };\r\n this.resolve = () => { };\r\n this.promise = new Promise((resolve, reject) => {\r\n this.resolve = resolve;\r\n this.reject = reject;\r\n });\r\n }\r\n /**\r\n * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n */\r\n wrapCallback(callback) {\r\n return (error, value) => {\r\n if (error) {\r\n this.reject(error);\r\n }\r\n else {\r\n this.resolve(value);\r\n }\r\n if (typeof callback === 'function') {\r\n // Attaching noop handler just in case developer wasn't expecting\r\n // promises\r\n this.promise.catch(() => { });\r\n // Some of our callbacks don't expect a value and our own tests\r\n // assert that the parameter length is 1\r\n if (callback.length === 1) {\r\n callback(error);\r\n }\r\n else {\r\n callback(error, value);\r\n }\r\n }\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction createMockUserToken(token, projectId) {\r\n if (token.uid) {\r\n throw new Error('The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.');\r\n }\r\n // Unsecured JWTs use \"none\" as the algorithm.\r\n const header = {\r\n alg: 'none',\r\n type: 'JWT'\r\n };\r\n const project = projectId || 'demo-project';\r\n const iat = token.iat || 0;\r\n const sub = token.sub || token.user_id;\r\n if (!sub) {\r\n throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\r\n }\r\n const payload = Object.assign({ \r\n // Set all required fields to decent defaults\r\n iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {\r\n sign_in_provider: 'custom',\r\n identities: {}\r\n } }, token);\r\n // Unsecured JWTs use the empty string as a signature.\r\n const signature = '';\r\n return [\r\n base64urlEncodeWithoutPadding(JSON.stringify(header)),\r\n base64urlEncodeWithoutPadding(JSON.stringify(payload)),\r\n signature\r\n ].join('.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns navigator.userAgent string or '' if it's not defined.\r\n * @return user agent string\r\n */\r\nfunction getUA() {\r\n if (typeof navigator !== 'undefined' &&\r\n typeof navigator['userAgent'] === 'string') {\r\n return navigator['userAgent'];\r\n }\r\n else {\r\n return '';\r\n }\r\n}\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\r\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\r\n * wait for a callback.\r\n */\r\nfunction isMobileCordova() {\r\n return (typeof window !== 'undefined' &&\r\n // @ts-ignore Setting up an broadly applicable index signature for Window\r\n // just to deal with this case would probably be a bad idea.\r\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n}\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return true if Node.js environment is detected or specified.\r\n */\r\n// Node detection logic from: https://github.com/iliakan/detect-node/\r\nfunction isNode() {\r\n var _a;\r\n const forceEnvironment = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.forceEnvironment;\r\n if (forceEnvironment === 'node') {\r\n return true;\r\n }\r\n else if (forceEnvironment === 'browser') {\r\n return false;\r\n }\r\n try {\r\n return (Object.prototype.toString.call(global.process) === '[object process]');\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Detect Browser Environment\r\n */\r\nfunction isBrowser() {\r\n return typeof self === 'object' && self.self === self;\r\n}\r\nfunction isBrowserExtension() {\r\n const runtime = typeof chrome === 'object'\r\n ? chrome.runtime\r\n : typeof browser === 'object'\r\n ? browser.runtime\r\n : undefined;\r\n return typeof runtime === 'object' && runtime.id !== undefined;\r\n}\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return true if ReactNative environment is detected.\r\n */\r\nfunction isReactNative() {\r\n return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n}\r\n/** Detects Electron apps. */\r\nfunction isElectron() {\r\n return getUA().indexOf('Electron/') >= 0;\r\n}\r\n/** Detects Internet Explorer. */\r\nfunction isIE() {\r\n const ua = getUA();\r\n return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\r\n}\r\n/** Detects Universal Windows Platform apps. */\r\nfunction isUWP() {\r\n return getUA().indexOf('MSAppHost/') >= 0;\r\n}\r\n/**\r\n * Detect whether the current SDK build is the Node version.\r\n *\r\n * @return true if it's the Node SDK build.\r\n */\r\nfunction isNodeSdk() {\r\n return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n}\r\n/** Returns true if we are running in Safari. */\r\nfunction isSafari() {\r\n return (!isNode() &&\r\n navigator.userAgent.includes('Safari') &&\r\n !navigator.userAgent.includes('Chrome'));\r\n}\r\n/**\r\n * This method checks if indexedDB is supported by current browser/service worker context\r\n * @return true if indexedDB is supported by current browser/service worker context\r\n */\r\nfunction isIndexedDBAvailable() {\r\n try {\r\n return typeof indexedDB === 'object';\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\r\n * if errors occur during the database open operation.\r\n *\r\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\r\n * private browsing)\r\n */\r\nfunction validateIndexedDBOpenable() {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n let preExist = true;\r\n const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';\r\n const request = self.indexedDB.open(DB_CHECK_NAME);\r\n request.onsuccess = () => {\r\n request.result.close();\r\n // delete database only when it doesn't pre-exist\r\n if (!preExist) {\r\n self.indexedDB.deleteDatabase(DB_CHECK_NAME);\r\n }\r\n resolve(true);\r\n };\r\n request.onupgradeneeded = () => {\r\n preExist = false;\r\n };\r\n request.onerror = () => {\r\n var _a;\r\n reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');\r\n };\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n });\r\n}\r\n/**\r\n *\r\n * This method checks whether cookie is enabled within current browser\r\n * @return true if cookie is enabled within current browser\r\n */\r\nfunction areCookiesEnabled() {\r\n if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\r\n return false;\r\n }\r\n return true;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Standardized Firebase Error.\r\n *\r\n * Usage:\r\n *\r\n * // Typescript string literals for type-safe codes\r\n * type Err =\r\n * 'unknown' |\r\n * 'object-not-found'\r\n * ;\r\n *\r\n * // Closure enum for type-safe error codes\r\n * // at-enum {string}\r\n * var Err = {\r\n * UNKNOWN: 'unknown',\r\n * OBJECT_NOT_FOUND: 'object-not-found',\r\n * }\r\n *\r\n * let errors: Map = {\r\n * 'generic-error': \"Unknown error\",\r\n * 'file-not-found': \"Could not find file: {$file}\",\r\n * };\r\n *\r\n * // Type-safe function - must pass a valid error code as param.\r\n * let error = new ErrorFactory('service', 'Service', errors);\r\n *\r\n * ...\r\n * throw error.create(Err.GENERIC);\r\n * ...\r\n * throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\r\n * ...\r\n * // Service: Could not file file: foo.txt (service/file-not-found).\r\n *\r\n * catch (e) {\r\n * assert(e.message === \"Could not find file: foo.txt.\");\r\n * if ((e as FirebaseError)?.code === 'service/file-not-found') {\r\n * console.log(\"Could not read file: \" + e['file']);\r\n * }\r\n * }\r\n */\r\nconst ERROR_NAME = 'FirebaseError';\r\n// Based on code from:\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\r\nclass FirebaseError extends Error {\r\n constructor(\r\n /** The error code for this error. */\r\n code, message, \r\n /** Custom data for this error. */\r\n customData) {\r\n super(message);\r\n this.code = code;\r\n this.customData = customData;\r\n /** The custom name for all FirebaseErrors. */\r\n this.name = ERROR_NAME;\r\n // Fix For ES5\r\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n Object.setPrototypeOf(this, FirebaseError.prototype);\r\n // Maintains proper stack trace for where our error was thrown.\r\n // Only available on V8.\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ErrorFactory.prototype.create);\r\n }\r\n }\r\n}\r\nclass ErrorFactory {\r\n constructor(service, serviceName, errors) {\r\n this.service = service;\r\n this.serviceName = serviceName;\r\n this.errors = errors;\r\n }\r\n create(code, ...data) {\r\n const customData = data[0] || {};\r\n const fullCode = `${this.service}/${code}`;\r\n const template = this.errors[code];\r\n const message = template ? replaceTemplate(template, customData) : 'Error';\r\n // Service Name: Error message (service/code).\r\n const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\r\n const error = new FirebaseError(fullCode, fullMessage, customData);\r\n return error;\r\n }\r\n}\r\nfunction replaceTemplate(template, data) {\r\n return template.replace(PATTERN, (_, key) => {\r\n const value = data[key];\r\n return value != null ? String(value) : `<${key}?>`;\r\n });\r\n}\r\nconst PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Evaluates a JSON string into a javascript object.\r\n *\r\n * @param {string} str A string containing JSON.\r\n * @return {*} The javascript object representing the specified JSON.\r\n */\r\nfunction jsonEval(str) {\r\n return JSON.parse(str);\r\n}\r\n/**\r\n * Returns JSON representing a javascript object.\r\n * @param {*} data Javascript object to be stringified.\r\n * @return {string} The JSON contents of the object.\r\n */\r\nfunction stringify(data) {\r\n return JSON.stringify(data);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Decodes a Firebase auth. token into constituent parts.\r\n *\r\n * Notes:\r\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst decode = function (token) {\r\n let header = {}, claims = {}, data = {}, signature = '';\r\n try {\r\n const parts = token.split('.');\r\n header = jsonEval(base64Decode(parts[0]) || '');\r\n claims = jsonEval(base64Decode(parts[1]) || '');\r\n signature = parts[2];\r\n data = claims['d'] || {};\r\n delete claims['d'];\r\n }\r\n catch (e) { }\r\n return {\r\n header,\r\n claims,\r\n data,\r\n signature\r\n };\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidTimestamp = function (token) {\r\n const claims = decode(token).claims;\r\n const now = Math.floor(new Date().getTime() / 1000);\r\n let validSince = 0, validUntil = 0;\r\n if (typeof claims === 'object') {\r\n if (claims.hasOwnProperty('nbf')) {\r\n validSince = claims['nbf'];\r\n }\r\n else if (claims.hasOwnProperty('iat')) {\r\n validSince = claims['iat'];\r\n }\r\n if (claims.hasOwnProperty('exp')) {\r\n validUntil = claims['exp'];\r\n }\r\n else {\r\n // token will expire after 24h by default\r\n validUntil = validSince + 86400;\r\n }\r\n }\r\n return (!!now &&\r\n !!validSince &&\r\n !!validUntil &&\r\n now >= validSince &&\r\n now <= validUntil);\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n *\r\n * Notes:\r\n * - May return null if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst issuedAtTime = function (token) {\r\n const claims = decode(token).claims;\r\n if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n return claims['iat'];\r\n }\r\n return null;\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidFormat = function (token) {\r\n const decoded = decode(token), claims = decoded.claims;\r\n return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\r\n};\r\n/**\r\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isAdmin = function (token) {\r\n const claims = decode(token).claims;\r\n return typeof claims === 'object' && claims['admin'] === true;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction contains(obj, key) {\r\n return Object.prototype.hasOwnProperty.call(obj, key);\r\n}\r\nfunction safeGet(obj, key) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return obj[key];\r\n }\r\n else {\r\n return undefined;\r\n }\r\n}\r\nfunction isEmpty(obj) {\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction map(obj, fn, contextObj) {\r\n const res = {};\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n res[key] = fn.call(contextObj, obj[key], key, obj);\r\n }\r\n }\r\n return res;\r\n}\r\n/**\r\n * Deep equal two objects. Support Arrays and Objects.\r\n */\r\nfunction deepEqual(a, b) {\r\n if (a === b) {\r\n return true;\r\n }\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n for (const k of aKeys) {\r\n if (!bKeys.includes(k)) {\r\n return false;\r\n }\r\n const aProp = a[k];\r\n const bProp = b[k];\r\n if (isObject(aProp) && isObject(bProp)) {\r\n if (!deepEqual(aProp, bProp)) {\r\n return false;\r\n }\r\n }\r\n else if (aProp !== bProp) {\r\n return false;\r\n }\r\n }\r\n for (const k of bKeys) {\r\n if (!aKeys.includes(k)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isObject(thing) {\r\n return thing !== null && typeof thing === 'object';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Rejects if the given promise doesn't resolve in timeInMS milliseconds.\r\n * @internal\r\n */\r\nfunction promiseWithTimeout(promise, timeInMS = 2000) {\r\n const deferredPromise = new Deferred();\r\n setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);\r\n promise.then(deferredPromise.resolve, deferredPromise.reject);\r\n return deferredPromise.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a\r\n * params object (e.g. {arg: 'val', arg2: 'val2'})\r\n * Note: You must prepend it with ? when adding it to a URL.\r\n */\r\nfunction querystring(querystringParams) {\r\n const params = [];\r\n for (const [key, value] of Object.entries(querystringParams)) {\r\n if (Array.isArray(value)) {\r\n value.forEach(arrayVal => {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n });\r\n }\r\n else {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n }\r\n }\r\n return params.length ? '&' + params.join('&') : '';\r\n}\r\n/**\r\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\r\n * (e.g. {arg: 'val', arg2: 'val2'})\r\n */\r\nfunction querystringDecode(querystring) {\r\n const obj = {};\r\n const tokens = querystring.replace(/^\\?/, '').split('&');\r\n tokens.forEach(token => {\r\n if (token) {\r\n const [key, value] = token.split('=');\r\n obj[decodeURIComponent(key)] = decodeURIComponent(value);\r\n }\r\n });\r\n return obj;\r\n}\r\n/**\r\n * Extract the query string part of a URL, including the leading question mark (if present).\r\n */\r\nfunction extractQuerystring(url) {\r\n const queryStart = url.indexOf('?');\r\n if (!queryStart) {\r\n return '';\r\n }\r\n const fragmentStart = url.indexOf('#', queryStart);\r\n return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview SHA-1 cryptographic hash.\r\n * Variable names follow the notation in FIPS PUB 180-3:\r\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n *\r\n * Usage:\r\n * var sha1 = new sha1();\r\n * sha1.update(bytes);\r\n * var hash = sha1.digest();\r\n *\r\n * Performance:\r\n * Chrome 23: ~400 Mbit/s\r\n * Firefox 16: ~250 Mbit/s\r\n *\r\n */\r\n/**\r\n * SHA-1 cryptographic hash constructor.\r\n *\r\n * The properties declared here are discussed in the above algorithm document.\r\n * @constructor\r\n * @final\r\n * @struct\r\n */\r\nclass Sha1 {\r\n constructor() {\r\n /**\r\n * Holds the previous values of accumulated variables a-e in the compress_\r\n * function.\r\n * @private\r\n */\r\n this.chain_ = [];\r\n /**\r\n * A buffer holding the partially computed hash result.\r\n * @private\r\n */\r\n this.buf_ = [];\r\n /**\r\n * An array of 80 bytes, each a part of the message to be hashed. Referred to\r\n * as the message schedule in the docs.\r\n * @private\r\n */\r\n this.W_ = [];\r\n /**\r\n * Contains data needed to pad messages less than 64 bytes.\r\n * @private\r\n */\r\n this.pad_ = [];\r\n /**\r\n * @private {number}\r\n */\r\n this.inbuf_ = 0;\r\n /**\r\n * @private {number}\r\n */\r\n this.total_ = 0;\r\n this.blockSize = 512 / 8;\r\n this.pad_[0] = 128;\r\n for (let i = 1; i < this.blockSize; ++i) {\r\n this.pad_[i] = 0;\r\n }\r\n this.reset();\r\n }\r\n reset() {\r\n this.chain_[0] = 0x67452301;\r\n this.chain_[1] = 0xefcdab89;\r\n this.chain_[2] = 0x98badcfe;\r\n this.chain_[3] = 0x10325476;\r\n this.chain_[4] = 0xc3d2e1f0;\r\n this.inbuf_ = 0;\r\n this.total_ = 0;\r\n }\r\n /**\r\n * Internal compress helper function.\r\n * @param buf Block to compress.\r\n * @param offset Offset of the block in the buffer.\r\n * @private\r\n */\r\n compress_(buf, offset) {\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n const W = this.W_;\r\n // get 16 big endian words\r\n if (typeof buf === 'string') {\r\n for (let i = 0; i < 16; i++) {\r\n // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n // have a bug that turns the post-increment ++ operator into pre-increment\r\n // during JIT compilation. We have code that depends heavily on SHA-1 for\r\n // correctness and which is affected by this bug, so I've removed all uses\r\n // of post-increment ++ in which the result value is used. We can revert\r\n // this change once the Safari bug\r\n // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n // most clients have been updated.\r\n W[i] =\r\n (buf.charCodeAt(offset) << 24) |\r\n (buf.charCodeAt(offset + 1) << 16) |\r\n (buf.charCodeAt(offset + 2) << 8) |\r\n buf.charCodeAt(offset + 3);\r\n offset += 4;\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < 16; i++) {\r\n W[i] =\r\n (buf[offset] << 24) |\r\n (buf[offset + 1] << 16) |\r\n (buf[offset + 2] << 8) |\r\n buf[offset + 3];\r\n offset += 4;\r\n }\r\n }\r\n // expand to 80 words\r\n for (let i = 16; i < 80; i++) {\r\n const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n }\r\n let a = this.chain_[0];\r\n let b = this.chain_[1];\r\n let c = this.chain_[2];\r\n let d = this.chain_[3];\r\n let e = this.chain_[4];\r\n let f, k;\r\n // TODO(user): Try to unroll this loop to speed up the computation.\r\n for (let i = 0; i < 80; i++) {\r\n if (i < 40) {\r\n if (i < 20) {\r\n f = d ^ (b & (c ^ d));\r\n k = 0x5a827999;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0x6ed9eba1;\r\n }\r\n }\r\n else {\r\n if (i < 60) {\r\n f = (b & c) | (d & (b | c));\r\n k = 0x8f1bbcdc;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0xca62c1d6;\r\n }\r\n }\r\n const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n e = d;\r\n d = c;\r\n c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n b = a;\r\n a = t;\r\n }\r\n this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n }\r\n update(bytes, length) {\r\n // TODO(johnlenz): tighten the function signature and remove this check\r\n if (bytes == null) {\r\n return;\r\n }\r\n if (length === undefined) {\r\n length = bytes.length;\r\n }\r\n const lengthMinusBlock = length - this.blockSize;\r\n let n = 0;\r\n // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n const buf = this.buf_;\r\n let inbuf = this.inbuf_;\r\n // The outer while loop should execute at most twice.\r\n while (n < length) {\r\n // When we have no data in the block to top up, we can directly process the\r\n // input buffer (assuming it contains sufficient data). This gives ~25%\r\n // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n // the data is provided in large chunks (or in multiples of 64 bytes).\r\n if (inbuf === 0) {\r\n while (n <= lengthMinusBlock) {\r\n this.compress_(bytes, n);\r\n n += this.blockSize;\r\n }\r\n }\r\n if (typeof bytes === 'string') {\r\n while (n < length) {\r\n buf[inbuf] = bytes.charCodeAt(n);\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n while (n < length) {\r\n buf[inbuf] = bytes[n];\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.inbuf_ = inbuf;\r\n this.total_ += length;\r\n }\r\n /** @override */\r\n digest() {\r\n const digest = [];\r\n let totalBits = this.total_ * 8;\r\n // Add pad 0x80 0x00*.\r\n if (this.inbuf_ < 56) {\r\n this.update(this.pad_, 56 - this.inbuf_);\r\n }\r\n else {\r\n this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n }\r\n // Add # bits.\r\n for (let i = this.blockSize - 1; i >= 56; i--) {\r\n this.buf_[i] = totalBits & 255;\r\n totalBits /= 256; // Don't use bit-shifting here!\r\n }\r\n this.compress_(this.buf_);\r\n let n = 0;\r\n for (let i = 0; i < 5; i++) {\r\n for (let j = 24; j >= 0; j -= 8) {\r\n digest[n] = (this.chain_[i] >> j) & 255;\r\n ++n;\r\n }\r\n }\r\n return digest;\r\n }\r\n}\n\n/**\r\n * Helper to make a Subscribe function (just like Promise helps make a\r\n * Thenable).\r\n *\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\nfunction createSubscribe(executor, onNoObservers) {\r\n const proxy = new ObserverProxy(executor, onNoObservers);\r\n return proxy.subscribe.bind(proxy);\r\n}\r\n/**\r\n * Implement fan-out for any number of Observers attached via a subscribe\r\n * function.\r\n */\r\nclass ObserverProxy {\r\n /**\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\n constructor(executor, onNoObservers) {\r\n this.observers = [];\r\n this.unsubscribes = [];\r\n this.observerCount = 0;\r\n // Micro-task scheduling by calling task.then().\r\n this.task = Promise.resolve();\r\n this.finalized = false;\r\n this.onNoObservers = onNoObservers;\r\n // Call the executor asynchronously so subscribers that are called\r\n // synchronously after the creation of the subscribe function\r\n // can still receive the very first value generated in the executor.\r\n this.task\r\n .then(() => {\r\n executor(this);\r\n })\r\n .catch(e => {\r\n this.error(e);\r\n });\r\n }\r\n next(value) {\r\n this.forEachObserver((observer) => {\r\n observer.next(value);\r\n });\r\n }\r\n error(error) {\r\n this.forEachObserver((observer) => {\r\n observer.error(error);\r\n });\r\n this.close(error);\r\n }\r\n complete() {\r\n this.forEachObserver((observer) => {\r\n observer.complete();\r\n });\r\n this.close();\r\n }\r\n /**\r\n * Subscribe function that can be used to add an Observer to the fan-out list.\r\n *\r\n * - We require that no event is sent to a subscriber sychronously to their\r\n * call to subscribe().\r\n */\r\n subscribe(nextOrObserver, error, complete) {\r\n let observer;\r\n if (nextOrObserver === undefined &&\r\n error === undefined &&\r\n complete === undefined) {\r\n throw new Error('Missing Observer.');\r\n }\r\n // Assemble an Observer object when passed as callback functions.\r\n if (implementsAnyMethods(nextOrObserver, [\r\n 'next',\r\n 'error',\r\n 'complete'\r\n ])) {\r\n observer = nextOrObserver;\r\n }\r\n else {\r\n observer = {\r\n next: nextOrObserver,\r\n error,\r\n complete\r\n };\r\n }\r\n if (observer.next === undefined) {\r\n observer.next = noop;\r\n }\r\n if (observer.error === undefined) {\r\n observer.error = noop;\r\n }\r\n if (observer.complete === undefined) {\r\n observer.complete = noop;\r\n }\r\n const unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n // Attempt to subscribe to a terminated Observable - we\r\n // just respond to the Observer with the final error or complete\r\n // event.\r\n if (this.finalized) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n try {\r\n if (this.finalError) {\r\n observer.error(this.finalError);\r\n }\r\n else {\r\n observer.complete();\r\n }\r\n }\r\n catch (e) {\r\n // nothing\r\n }\r\n return;\r\n });\r\n }\r\n this.observers.push(observer);\r\n return unsub;\r\n }\r\n // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n // any unsubscribed Observer.\r\n unsubscribeOne(i) {\r\n if (this.observers === undefined || this.observers[i] === undefined) {\r\n return;\r\n }\r\n delete this.observers[i];\r\n this.observerCount -= 1;\r\n if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n this.onNoObservers(this);\r\n }\r\n }\r\n forEachObserver(fn) {\r\n if (this.finalized) {\r\n // Already closed by previous event....just eat the additional values.\r\n return;\r\n }\r\n // Since sendOne calls asynchronously - there is no chance that\r\n // this.observers will become undefined.\r\n for (let i = 0; i < this.observers.length; i++) {\r\n this.sendOne(i, fn);\r\n }\r\n }\r\n // Call the Observer via one of it's callback function. We are careful to\r\n // confirm that the observe has not been unsubscribed since this asynchronous\r\n // function had been queued.\r\n sendOne(i, fn) {\r\n // Execute the callback asynchronously\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n if (this.observers !== undefined && this.observers[i] !== undefined) {\r\n try {\r\n fn(this.observers[i]);\r\n }\r\n catch (e) {\r\n // Ignore exceptions raised in Observers or missing methods of an\r\n // Observer.\r\n // Log error to console. b/31404806\r\n if (typeof console !== 'undefined' && console.error) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n close(err) {\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n if (err !== undefined) {\r\n this.finalError = err;\r\n }\r\n // Proxy is no longer needed - garbage collect references\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n this.observers = undefined;\r\n this.onNoObservers = undefined;\r\n });\r\n }\r\n}\r\n/** Turn synchronous function into one called asynchronously. */\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction async(fn, onError) {\r\n return (...args) => {\r\n Promise.resolve(true)\r\n .then(() => {\r\n fn(...args);\r\n })\r\n .catch((error) => {\r\n if (onError) {\r\n onError(error);\r\n }\r\n });\r\n };\r\n}\r\n/**\r\n * Return true if the object passed in implements any of the named methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return false;\r\n }\r\n for (const method of methods) {\r\n if (method in obj && typeof obj[method] === 'function') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction noop() {\r\n // do nothing\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Check to make sure the appropriate number of arguments are provided for a public function.\r\n * Throws an error if it fails.\r\n *\r\n * @param fnName The function name\r\n * @param minCount The minimum number of arguments to allow for the function call\r\n * @param maxCount The maximum number of argument to allow for the function call\r\n * @param argCount The actual number of arguments provided.\r\n */\r\nconst validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n let argError;\r\n if (argCount < minCount) {\r\n argError = 'at least ' + minCount;\r\n }\r\n else if (argCount > maxCount) {\r\n argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n }\r\n if (argError) {\r\n const error = fnName +\r\n ' failed: Was called with ' +\r\n argCount +\r\n (argCount === 1 ? ' argument.' : ' arguments.') +\r\n ' Expects ' +\r\n argError +\r\n '.';\r\n throw new Error(error);\r\n }\r\n};\r\n/**\r\n * Generates a string to prefix an error message about failed argument validation\r\n *\r\n * @param fnName The function name\r\n * @param argName The name of the argument\r\n * @return The prefix to add to the error thrown for validation.\r\n */\r\nfunction errorPrefix(fnName, argName) {\r\n return `${fnName} failed: ${argName} argument `;\r\n}\r\n/**\r\n * @param fnName\r\n * @param argumentNumber\r\n * @param namespace\r\n * @param optional\r\n */\r\nfunction validateNamespace(fnName, namespace, optional) {\r\n if (optional && !namespace) {\r\n return;\r\n }\r\n if (typeof namespace !== 'string') {\r\n //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');\r\n }\r\n}\r\nfunction validateCallback(fnName, argumentName, \r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\ncallback, optional) {\r\n if (optional && !callback) {\r\n return;\r\n }\r\n if (typeof callback !== 'function') {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');\r\n }\r\n}\r\nfunction validateContextObject(fnName, argumentName, context, optional) {\r\n if (optional && !context) {\r\n return;\r\n }\r\n if (typeof context !== 'object' || context === null) {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n// so it's been modified.\r\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n// use 2 characters in Javascript. All 4-byte UTF-8 characters begin with a first\r\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n// pair).\r\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n/**\r\n * @param {string} str\r\n * @return {Array}\r\n */\r\nconst stringToByteArray = function (str) {\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n // Is this the lead surrogate in a surrogate pair?\r\n if (c >= 0xd800 && c <= 0xdbff) {\r\n const high = c - 0xd800; // the high 10 bits.\r\n i++;\r\n assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n c = 0x10000 + (high << 10) + low;\r\n }\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if (c < 65536) {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Calculate length without actually converting; useful for doing cheaper validation.\r\n * @param {string} str\r\n * @return {number}\r\n */\r\nconst stringLength = function (str) {\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n const c = str.charCodeAt(i);\r\n if (c < 128) {\r\n p++;\r\n }\r\n else if (c < 2048) {\r\n p += 2;\r\n }\r\n else if (c >= 0xd800 && c <= 0xdbff) {\r\n // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\r\n p += 4;\r\n i++; // skip trail surrogate.\r\n }\r\n else {\r\n p += 3;\r\n }\r\n }\r\n return p;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Copied from https://stackoverflow.com/a/2117523\r\n * Generates a new uuid.\r\n * @public\r\n */\r\nconst uuidv4 = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n const r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The amount of milliseconds to exponentially increase.\r\n */\r\nconst DEFAULT_INTERVAL_MILLIS = 1000;\r\n/**\r\n * The factor to backoff by.\r\n * Should be a number greater than 1.\r\n */\r\nconst DEFAULT_BACKOFF_FACTOR = 2;\r\n/**\r\n * The maximum milliseconds to increase to.\r\n *\r\n *

Visible for testing\r\n */\r\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\r\n/**\r\n * The percentage of backoff time to randomize by.\r\n * See\r\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\r\n * for context.\r\n *\r\n *

Visible for testing\r\n */\r\nconst RANDOM_FACTOR = 0.5;\r\n/**\r\n * Based on the backoff method from\r\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\r\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\r\n */\r\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\r\n // Calculates an exponentially increasing value.\r\n // Deviation: calculates value from count and a constant interval, so we only need to save value\r\n // and count to restore state.\r\n const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\r\n // A random \"fuzz\" to avoid waves of retries.\r\n // Deviation: randomFactor is required.\r\n const randomWait = Math.round(\r\n // A fraction of the backoff value to add/subtract.\r\n // Deviation: changes multiplication order to improve readability.\r\n RANDOM_FACTOR *\r\n currBaseValue *\r\n // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\r\n // if we add or subtract.\r\n (Math.random() - 0.5) *\r\n 2);\r\n // Limits backoff to max to avoid effectively permanent backoff.\r\n return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provide English ordinal letters after a number\r\n */\r\nfunction ordinal(i) {\r\n if (!Number.isFinite(i)) {\r\n return `${i}`;\r\n }\r\n return i + indicator(i);\r\n}\r\nfunction indicator(i) {\r\n i = Math.abs(i);\r\n const cent = i % 100;\r\n if (cent >= 10 && cent <= 20) {\r\n return 'th';\r\n }\r\n const dec = i % 10;\r\n if (dec === 1) {\r\n return 'st';\r\n }\r\n if (dec === 2) {\r\n return 'nd';\r\n }\r\n if (dec === 3) {\r\n return 'rd';\r\n }\r\n return 'th';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getModularInstance(service) {\r\n if (service && service._delegate) {\r\n return service._delegate;\r\n }\r\n else {\r\n return service;\r\n }\r\n}\n\nexport { CONSTANTS, DecodeBase64StringError, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getDefaults, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, uuidv4, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n\n","var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","var asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n var named;\n try {\n named = require('vm').runInThisContext(\n '(function ' + this.name + '(entity) {\\n' +\n ' this._initNamed(entity);\\n' +\n '})'\n );\n } catch (e) {\n named = function (entity) {\n this._initNamed(entity);\n };\n }\n inherits(named, base);\n named.prototype._initNamed = function initnamed(entity) {\n base.call(this, entity);\n };\n\n return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n var res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n var res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!(item instanceof EncoderBuffer))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = new Buffer(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","var Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n var state = {};\n this._baseState = state;\n\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n var state = this._baseState;\n var cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n var res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n var state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n var clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n var state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n var state = this._baseState;\n\n // Filter children and args\n var children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n var res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n var value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n var state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n var state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n var state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n var state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n var state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n var state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n var state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n var state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n var result = state['default'];\n var present = true;\n\n var prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n var tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n var save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n var prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n var explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n var start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n if (state.any)\n var save = input.save();\n var body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any)\n result = result;\n else if (state.choice === null)\n result = this._decodeGeneric(state.tag, input, options);\n else\n result = this._decodeChoice(input, options);\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n var data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n var state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n var state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n var state = this._baseState;\n var result = null;\n var match = false;\n\n Object.keys(state.choice).some(function(key) {\n var save = input.save();\n var node = state.choice[key];\n try {\n var value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n var state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n var result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n var result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default']\n else\n return;\n }\n\n // Encode children first\n var content = null;\n var primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n var prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n var res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n var child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n var state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n var result;\n if (!state.any && state.choice === null) {\n var tag = state.implicit !== null ? state.implicit : state.tag;\n var cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n var state = this._baseState;\n\n var node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n var state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n","var inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n var state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n var state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n var state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n var state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n var state = this._reporterState;\n\n var prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n var state = this._reporterState;\n\n var now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n var err;\n var state = this._reporterState;\n\n var inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n var state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","var constants = require('../constants');\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n","var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n var res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n var value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!(data instanceof base.DecoderBuffer))\n data = new base.DecoderBuffer(data, options);\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n var state = buffer.save();\n var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n var decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n var len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n var state = buffer.save();\n var res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n while (true) {\n var tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n var len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n var res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len)\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n var result = [];\n while (!buffer.isEmpty()) {\n var possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n var res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n var unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n var raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n var str = '';\n for (var i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n var numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n var printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n var result;\n var identifiers = [];\n var ident = 0;\n while (!buffer.isEmpty()) {\n var subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n var first = (identifiers[0] / 40) | 0;\n var second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n var tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n var str = buffer.raw().toString();\n if (tag === 'gentime') {\n var year = str.slice(0, 4) | 0;\n var mon = str.slice(4, 6) | 0;\n var day = str.slice(6, 8) | 0;\n var hour = str.slice(8, 10) | 0;\n var min = str.slice(10, 12) | 0;\n var sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n var year = str.slice(0, 2) | 0;\n var mon = str.slice(2, 4) | 0;\n var day = str.slice(4, 6) | 0;\n var hour = str.slice(6, 8) | 0;\n var min = str.slice(8, 10) | 0;\n var sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n var res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n var raw = buffer.raw();\n var res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n var tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n var cls = der.tagClass[tag >> 6];\n var primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n var oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n var tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n var len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n var num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (var i = 0; i < num; i++) {\n len <<= 8;\n var j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","var decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n var lines = data.toString().split(/[\\r\\n]+/g);\n\n var label = options.label.toUpperCase();\n\n var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n var start = -1;\n var end = -1;\n for (var i = 0; i < lines.length; i++) {\n var match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n var base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n var input = new Buffer(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n var header = new Buffer(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n var lenOctets = 1;\n for (var i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n var header = new Buffer(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n var buf = new Buffer(str.length * 2);\n for (var i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s\\.]+/g);\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n var size = 0;\n for (var i = 0; i < id.length; i++) {\n var ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n var objid = new Buffer(size);\n var offset = objid.length - 1;\n for (var i = id.length - 1; i >= 0; i--) {\n var ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n var str;\n var date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n var numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = new Buffer(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n var size = num.length;\n if (num.length === 0)\n size++;\n\n var out = new Buffer(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n var size = 1;\n for (var i = num; i >= 0x100; i >>= 8)\n size++;\n\n var out = new Array(size);\n for (var i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n var state = this._baseState;\n var i;\n if (state['default'] === null)\n return false;\n\n var data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n var res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","var encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n var buf = DEREncoder.prototype.encode.call(this, data);\n\n var p = buf.toString('base64');\n var out = [ '-----BEGIN ' + options.label + '-----' ];\n for (var i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n r.strip();\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var bn = require('bn.js');\nvar randomBytes = require('randombytes');\nmodule.exports = crt;\nfunction blind(priv) {\n var r = getr(priv);\n var blinder = r.toRed(bn.mont(priv.modulus))\n .redPow(new bn(priv.publicExponent)).fromRed();\n return {\n blinder: blinder,\n unblinder:r.invm(priv.modulus)\n };\n}\nfunction crt(msg, priv) {\n var blinds = blind(priv);\n var len = priv.modulus.byteLength();\n var mod = bn.mont(priv.modulus);\n var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);\n var c1 = blinded.toRed(bn.mont(priv.prime1));\n var c2 = blinded.toRed(bn.mont(priv.prime2));\n var qinv = priv.coefficient;\n var p = priv.prime1;\n var q = priv.prime2;\n var m1 = c1.redPow(priv.exponent1);\n var m2 = c2.redPow(priv.exponent2);\n m1 = m1.fromRed();\n m2 = m2.fromRed();\n var h = m1.isub(m2).imul(qinv).umod(p);\n h.imul(q);\n m2.iadd(h);\n return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));\n}\ncrt.getr = getr;\nfunction getr(priv) {\n var len = priv.modulus.byteLength();\n var r = new bn(randomBytes(len));\n while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {\n r = new bn(randomBytes(len));\n }\n return r;\n}\n","module.exports = require('./browser/algorithms.json')\n","var createHash = require('create-hash')\nvar stream = require('stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = new Buffer(algorithms[key].id, 'hex')\n algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hashType = data.hash\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nSign.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = new Buffer(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n this.end()\n var hash = this._hash.digest()\n var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = new Buffer(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = new Buffer(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n return new Verify(algorithm)\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n}\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [ 0, 1 ]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return new Buffer(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [ 0 ].concat(r)\n if (s[0] & 0x80) s = [ 0 ].concat(s)\n\n var total = r.length + s.length + 4\n var res = [ 0x30, total, 0x02, r.length ]\n res = res.concat(r, [ 0x02, s.length ], s)\n return new Buffer(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = new Buffer(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = new Buffer(q.byteLength() - x.length)\n zeros.fill(0)\n x = Buffer.concat([ zeros, x ])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = new Buffer(hlen)\n v.fill(1)\n var k = new Buffer(hlen)\n k.fill(0)\n k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = new Buffer(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = new Buffer(q.byteLength() - out.length)\n zeros.fill(0)\n out = Buffer.concat([ zeros, out ])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = new Buffer(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([ t, kv.v ])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n var pub = parseKeys(key)\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n return ecVerify(sig, hash, pub)\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong public key type')\n return dsaVerify(sig, hash, pub)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = pub.modulus.byteLength()\n var pad = [ 1 ]\n var padNum = 0\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff)\n padNum++\n }\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) {\n pad.push(hash[i])\n }\n pad = new Buffer(pad)\n var red = BN.mont(pub.modulus)\n sig = new BN(sig).toRed(red)\n\n sig = sig.redPow(new BN(pub.publicExponent))\n sig = new Buffer(sig.fromRed().toArray())\n var out = padNum < 8 ? 1 : 0\n len = Math.min(sig.length, pad.length)\n if (sig.length !== pad.length) out = 1\n\n i = -1\n while (++i < len) out |= sig[i] ^ pad[i]\n return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n var curve = new EC(curveId)\n var pubkey = pub.data.subjectPrivateKey.data\n\n return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n var p = pub.data.p\n var q = pub.data.q\n var g = pub.data.g\n var y = pub.data.pub_key\n var unpacked = parseKeys.signature.decode(sig, 'der')\n var s = unpacked.s\n var r = unpacked.r\n checkValue(s, q)\n checkValue(r, q)\n var montp = BN.mont(p)\n var w = s.invm(q)\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q)\n return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","require('../../modules/es7.array.flat-map');\nmodule.exports = require('../../modules/_core').Array.flatMap;\n","require('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","'use strict';\nrequire('../../modules/es6.promise');\nrequire('../../modules/es7.promise.finally');\nmodule.exports = require('../../modules/_core').Promise['finally'];\n","require('../../modules/es7.string.pad-end');\nmodule.exports = require('../../modules/_core').String.padEnd;\n","require('../../modules/es7.string.pad-start');\nmodule.exports = require('../../modules/_core').String.padStart;\n","require('../../modules/es7.string.trim-right');\nmodule.exports = require('../../modules/_core').String.trimRight;\n","require('../../modules/es7.string.trim-left');\nmodule.exports = require('../../modules/_core').String.trimLeft;\n","require('../../modules/es7.symbol.async-iterator');\nmodule.exports = require('../../modules/_wks-ext').f('asyncIterator');\n","require('../modules/es7.global');\nmodule.exports = require('../modules/_core').global;\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","module.exports = {};\n","module.exports = false;\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = require('./_wks');\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","require('./_set-species')('Array');\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","require('./_wks-define')('asyncIterator');\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","require('../modules/web.timers');\nrequire('../modules/web.immediate');\nrequire('../modules/web.dom.iterable');\nmodule.exports = require('../modules/_core');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar utils = des.utils;\nvar Cipher = des.Cipher;\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar Cipher = des.Cipher;\nvar DES = des.DES;\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n for (var j = 0; j < naf.length; j += doubles.step) {\n var nafW = 0;\n for (var k = j + doubles.step - 1; k >= j; k--)\n nafW = (nafW << 1) + naf[k];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (var j = 0; j < repr.length; j++) {\n var nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\n k++;\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n for (var i = 0; i < len; i++) {\n var p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (var i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a]);\n naf[b] = getNAF(coeffs[b], wndWidth[b]);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b] /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3 /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (var j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (var i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (var j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (var j = 0; j < len; j++) {\n var z = tmp[j];\n var p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (var i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n if (this.curve.twisted) {\n // E = a * C\n var e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n var h = this.z.redSqr();\n // J = F - 2 * H\n var j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n var e = c.redAdd(d);\n // H = (c * Z1)^2\n var h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n var j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16)\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 }\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul)\n }\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1)\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1)\n }\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point))\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point))\n }\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate)\n }\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (var i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (var i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve\n });\n return curve;\n }\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n ]\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n ]\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n ]\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n ]\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n ]\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9'\n ]\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658'\n ]\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre\n ]\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray()\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n do {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8'\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; true; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n\n if (!this.curve._maxwellTrick) {\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n }\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0 && (r[1] & 0x80)) {\n r = r.slice(1);\n }\n if (s[0] === 0 && (s[1] & 0x80)) {\n s = s.slice(1);\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n var curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength)\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n ]\n ]\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n ]\n ]\n }\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w) {\n var naf = [];\n var ws = 1 << (w + 1);\n var k = num.clone();\n while (k.cmpn(1) >= 0) {\n var z;\n if (k.isOdd()) {\n var mod = k.andln(ws - 1);\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n naf.push(z);\n\n // Optimization, shift by word if possible\n var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\n for (var i = 1; i < shift; i++)\n naf.push(0);\n k.iushrn(shift);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n []\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n var m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n var m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","module.exports = global[\"IntlMessageFormat\"] = require(\"-!/code/scratchjr/node_modules/strip-sourcemap-loader/index.js!./index.js\");","export default __webpack_public_path__ + \"sql-wasm-057823fecaede6350cf9941c7d4c7ce3.wasm\";","import { registerVersion } from '@firebase/app';\nexport * from '@firebase/app';\n\nvar name = \"firebase\";\nvar version = \"9.19.1\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nregisterVersion(name, version, 'app');\n\n","export * from '@firebase/database';\n\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nexports = module.exports = require('./lib/parser')['default'];\nexports['default'] = exports;\n","\"use strict\";\n\nexports[\"default\"] = (function() {\n /*\n * Generated by PEG.js 0.8.0.\n *\n * http://pegjs.majda.cz/\n */\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function SyntaxError(message, expected, found, offset, line, column) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.offset = offset;\n this.line = line;\n this.column = column;\n\n this.name = \"SyntaxError\";\n }\n\n peg$subclass(SyntaxError, Error);\n\n function parse(input) {\n var options = arguments.length > 1 ? arguments[1] : {},\n\n peg$FAILED = {},\n\n peg$startRuleFunctions = { start: peg$parsestart },\n peg$startRuleFunction = peg$parsestart,\n\n peg$c0 = [],\n peg$c1 = function(elements) {\n return {\n type : 'messageFormatPattern',\n elements: elements\n };\n },\n peg$c2 = peg$FAILED,\n peg$c3 = function(text) {\n var string = '',\n i, j, outerLen, inner, innerLen;\n\n for (i = 0, outerLen = text.length; i < outerLen; i += 1) {\n inner = text[i];\n\n for (j = 0, innerLen = inner.length; j < innerLen; j += 1) {\n string += inner[j];\n }\n }\n\n return string;\n },\n peg$c4 = function(messageText) {\n return {\n type : 'messageTextElement',\n value: messageText\n };\n },\n peg$c5 = /^[^ \\t\\n\\r,.+={}#]/,\n peg$c6 = { type: \"class\", value: \"[^ \\\\t\\\\n\\\\r,.+={}#]\", description: \"[^ \\\\t\\\\n\\\\r,.+={}#]\" },\n peg$c7 = \"{\",\n peg$c8 = { type: \"literal\", value: \"{\", description: \"\\\"{\\\"\" },\n peg$c9 = null,\n peg$c10 = \",\",\n peg$c11 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n peg$c12 = \"}\",\n peg$c13 = { type: \"literal\", value: \"}\", description: \"\\\"}\\\"\" },\n peg$c14 = function(id, format) {\n return {\n type : 'argumentElement',\n id : id,\n format: format && format[2]\n };\n },\n peg$c15 = \"number\",\n peg$c16 = { type: \"literal\", value: \"number\", description: \"\\\"number\\\"\" },\n peg$c17 = \"date\",\n peg$c18 = { type: \"literal\", value: \"date\", description: \"\\\"date\\\"\" },\n peg$c19 = \"time\",\n peg$c20 = { type: \"literal\", value: \"time\", description: \"\\\"time\\\"\" },\n peg$c21 = function(type, style) {\n return {\n type : type + 'Format',\n style: style && style[2]\n };\n },\n peg$c22 = \"plural\",\n peg$c23 = { type: \"literal\", value: \"plural\", description: \"\\\"plural\\\"\" },\n peg$c24 = function(pluralStyle) {\n return {\n type : pluralStyle.type,\n ordinal: false,\n offset : pluralStyle.offset || 0,\n options: pluralStyle.options\n };\n },\n peg$c25 = \"selectordinal\",\n peg$c26 = { type: \"literal\", value: \"selectordinal\", description: \"\\\"selectordinal\\\"\" },\n peg$c27 = function(pluralStyle) {\n return {\n type : pluralStyle.type,\n ordinal: true,\n offset : pluralStyle.offset || 0,\n options: pluralStyle.options\n }\n },\n peg$c28 = \"select\",\n peg$c29 = { type: \"literal\", value: \"select\", description: \"\\\"select\\\"\" },\n peg$c30 = function(options) {\n return {\n type : 'selectFormat',\n options: options\n };\n },\n peg$c31 = \"=\",\n peg$c32 = { type: \"literal\", value: \"=\", description: \"\\\"=\\\"\" },\n peg$c33 = function(selector, pattern) {\n return {\n type : 'optionalFormatPattern',\n selector: selector,\n value : pattern\n };\n },\n peg$c34 = \"offset:\",\n peg$c35 = { type: \"literal\", value: \"offset:\", description: \"\\\"offset:\\\"\" },\n peg$c36 = function(number) {\n return number;\n },\n peg$c37 = function(offset, options) {\n return {\n type : 'pluralFormat',\n offset : offset,\n options: options\n };\n },\n peg$c38 = { type: \"other\", description: \"whitespace\" },\n peg$c39 = /^[ \\t\\n\\r]/,\n peg$c40 = { type: \"class\", value: \"[ \\\\t\\\\n\\\\r]\", description: \"[ \\\\t\\\\n\\\\r]\" },\n peg$c41 = { type: \"other\", description: \"optionalWhitespace\" },\n peg$c42 = /^[0-9]/,\n peg$c43 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n peg$c44 = /^[0-9a-f]/i,\n peg$c45 = { type: \"class\", value: \"[0-9a-f]i\", description: \"[0-9a-f]i\" },\n peg$c46 = \"0\",\n peg$c47 = { type: \"literal\", value: \"0\", description: \"\\\"0\\\"\" },\n peg$c48 = /^[1-9]/,\n peg$c49 = { type: \"class\", value: \"[1-9]\", description: \"[1-9]\" },\n peg$c50 = function(digits) {\n return parseInt(digits, 10);\n },\n peg$c51 = /^[^{}\\\\\\0-\\x1F \\t\\n\\r]/,\n peg$c52 = { type: \"class\", value: \"[^{}\\\\\\\\\\\\0-\\\\x1F \\\\t\\\\n\\\\r]\", description: \"[^{}\\\\\\\\\\\\0-\\\\x1F \\\\t\\\\n\\\\r]\" },\n peg$c53 = \"\\\\\\\\\",\n peg$c54 = { type: \"literal\", value: \"\\\\\\\\\", description: \"\\\"\\\\\\\\\\\\\\\\\\\"\" },\n peg$c55 = function() { return '\\\\'; },\n peg$c56 = \"\\\\#\",\n peg$c57 = { type: \"literal\", value: \"\\\\#\", description: \"\\\"\\\\\\\\#\\\"\" },\n peg$c58 = function() { return '\\\\#'; },\n peg$c59 = \"\\\\{\",\n peg$c60 = { type: \"literal\", value: \"\\\\{\", description: \"\\\"\\\\\\\\{\\\"\" },\n peg$c61 = function() { return '\\u007B'; },\n peg$c62 = \"\\\\}\",\n peg$c63 = { type: \"literal\", value: \"\\\\}\", description: \"\\\"\\\\\\\\}\\\"\" },\n peg$c64 = function() { return '\\u007D'; },\n peg$c65 = \"\\\\u\",\n peg$c66 = { type: \"literal\", value: \"\\\\u\", description: \"\\\"\\\\\\\\u\\\"\" },\n peg$c67 = function(digits) {\n return String.fromCharCode(parseInt(digits, 16));\n },\n peg$c68 = function(chars) { return chars.join(''); },\n\n peg$currPos = 0,\n peg$reportedPos = 0,\n peg$cachedPos = 0,\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$reportedPos, peg$currPos);\n }\n\n function offset() {\n return peg$reportedPos;\n }\n\n function line() {\n return peg$computePosDetails(peg$reportedPos).line;\n }\n\n function column() {\n return peg$computePosDetails(peg$reportedPos).column;\n }\n\n function expected(description) {\n throw peg$buildException(\n null,\n [{ type: \"other\", description: description }],\n peg$reportedPos\n );\n }\n\n function error(message) {\n throw peg$buildException(message, null, peg$reportedPos);\n }\n\n function peg$computePosDetails(pos) {\n function advance(details, startPos, endPos) {\n var p, ch;\n\n for (p = startPos; p < endPos; p++) {\n ch = input.charAt(p);\n if (ch === \"\\n\") {\n if (!details.seenCR) { details.line++; }\n details.column = 1;\n details.seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n details.line++;\n details.column = 1;\n details.seenCR = true;\n } else {\n details.column++;\n details.seenCR = false;\n }\n }\n }\n\n if (peg$cachedPos !== pos) {\n if (peg$cachedPos > pos) {\n peg$cachedPos = 0;\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n }\n advance(peg$cachedPosDetails, peg$cachedPos, pos);\n peg$cachedPos = pos;\n }\n\n return peg$cachedPosDetails;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildException(message, expected, pos) {\n function cleanupExpected(expected) {\n var i = 1;\n\n expected.sort(function(a, b) {\n if (a.description < b.description) {\n return -1;\n } else if (a.description > b.description) {\n return 1;\n } else {\n return 0;\n }\n });\n\n while (i < expected.length) {\n if (expected[i - 1] === expected[i]) {\n expected.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n function buildMessage(expected, found) {\n function stringEscape(s) {\n function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\x08/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(ch) { return '\\\\x' + hex(ch); })\n .replace(/[\\u0180-\\u0FFF]/g, function(ch) { return '\\\\u0' + hex(ch); })\n .replace(/[\\u1080-\\uFFFF]/g, function(ch) { return '\\\\u' + hex(ch); });\n }\n\n var expectedDescs = new Array(expected.length),\n expectedDesc, foundDesc, i;\n\n for (i = 0; i < expected.length; i++) {\n expectedDescs[i] = expected[i].description;\n }\n\n expectedDesc = expected.length > 1\n ? expectedDescs.slice(0, -1).join(\", \")\n + \" or \"\n + expectedDescs[expected.length - 1]\n : expectedDescs[0];\n\n foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n }\n\n var posDetails = peg$computePosDetails(pos),\n found = pos < input.length ? input.charAt(pos) : null;\n\n if (expected !== null) {\n cleanupExpected(expected);\n }\n\n return new SyntaxError(\n message !== null ? message : buildMessage(expected, found),\n expected,\n found,\n pos,\n posDetails.line,\n posDetails.column\n );\n }\n\n function peg$parsestart() {\n var s0;\n\n s0 = peg$parsemessageFormatPattern();\n\n return s0;\n }\n\n function peg$parsemessageFormatPattern() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsemessageFormatElement();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsemessageFormatElement();\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c1(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsemessageFormatElement() {\n var s0;\n\n s0 = peg$parsemessageTextElement();\n if (s0 === peg$FAILED) {\n s0 = peg$parseargumentElement();\n }\n\n return s0;\n }\n\n function peg$parsemessageText() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsechars();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s3 = [s3, s4, s5];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsechars();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s3 = [s3, s4, s5];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c3(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsews();\n if (s1 !== peg$FAILED) {\n s1 = input.substring(s0, peg$currPos);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsemessageTextElement() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsemessageText();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c4(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseargument() {\n var s0, s1, s2;\n\n s0 = peg$parsenumber();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$c5.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c6); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c5.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c6); }\n }\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n s1 = input.substring(s0, peg$currPos);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseargumentElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c8); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargument();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s6 = peg$c10;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseelementFormat();\n if (s8 !== peg$FAILED) {\n s6 = [s6, s7, s8];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c2;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c2;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c2;\n }\n if (s5 === peg$FAILED) {\n s5 = peg$c9;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c12;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c13); }\n }\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c14(s3, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseelementFormat() {\n var s0;\n\n s0 = peg$parsesimpleFormat();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepluralFormat();\n if (s0 === peg$FAILED) {\n s0 = peg$parseselectOrdinalFormat();\n if (s0 === peg$FAILED) {\n s0 = peg$parseselectFormat();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsesimpleFormat() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c15) {\n s1 = peg$c15;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c16); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c17) {\n s1 = peg$c17;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c18); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c19) {\n s1 = peg$c19;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c20); }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c10;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsechars();\n if (s6 !== peg$FAILED) {\n s4 = [s4, s5, s6];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$c9;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c21(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parsepluralFormat() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s3 = peg$c10;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsepluralStyle();\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24(s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseselectOrdinalFormat() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 13) === peg$c25) {\n s1 = peg$c25;\n peg$currPos += 13;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c26); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s3 = peg$c10;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsepluralStyle();\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c27(s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseselectFormat() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s3 = peg$c10;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseoptionalFormatPattern();\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseoptionalFormatPattern();\n }\n } else {\n s5 = peg$c2;\n }\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c30(s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseselector() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c31;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c32); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenumber();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n s1 = input.substring(s0, peg$currPos);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$parsechars();\n }\n\n return s0;\n }\n\n function peg$parseoptionalFormatPattern() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseselector();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c7;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c8); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessageFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c12;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c13); }\n }\n if (s8 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c33(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseoffset() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 7) === peg$c34) {\n s1 = peg$c34;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c35); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenumber();\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c36(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parsepluralStyle() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parseoffset();\n if (s1 === peg$FAILED) {\n s1 = peg$c9;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseoptionalFormatPattern();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseoptionalFormatPattern();\n }\n } else {\n s3 = peg$c2;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c37(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parsews() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = [];\n if (peg$c39.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c39.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n }\n } else {\n s0 = peg$c2;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c38); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsews();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsews();\n }\n if (s1 !== peg$FAILED) {\n s1 = input.substring(s0, peg$currPos);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c41); }\n }\n\n return s0;\n }\n\n function peg$parsedigit() {\n var s0;\n\n if (peg$c42.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n\n return s0;\n }\n\n function peg$parsehexDigit() {\n var s0;\n\n if (peg$c44.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c45); }\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c46;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c47); }\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$currPos;\n if (peg$c48.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsedigit();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsedigit();\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n s2 = input.substring(s1, peg$currPos);\n }\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c50(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsechar() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n if (peg$c51.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c53) {\n s1 = peg$c53;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c54); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c55();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c56) {\n s1 = peg$c56;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c57); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c58();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c59) {\n s1 = peg$c59;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c60); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c61();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c62) {\n s1 = peg$c62;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c63); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c64();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c65) {\n s1 = peg$c65;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c66); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$parsehexDigit();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsehexDigit();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsehexDigit();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsehexDigit();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n if (s3 !== peg$FAILED) {\n s3 = input.substring(s2, peg$currPos);\n }\n s2 = s3;\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c67(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsechars() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsechar();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsechar();\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c68(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail({ type: \"end\", description: \"end of input\" });\n }\n\n throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);\n }\n }\n\n return {\n SyntaxError: SyntaxError,\n parse: parse\n };\n})();\n\n","IntlMessageFormat.__addLocaleData({\"locale\":\"ca\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1];if(ord)return n==1||n==3?\"one\":n==2?\"two\":n==4?\"few\":\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"ca-AD\",\"parentLocale\":\"ca\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"ca-ES-VALENCIA\",\"parentLocale\":\"ca-ES\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"ca-ES\",\"parentLocale\":\"ca\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"ca-FR\",\"parentLocale\":\"ca\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"ca-IT\",\"parentLocale\":\"ca\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"de\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1];if(ord)return\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"de-AT\",\"parentLocale\":\"de\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"de-BE\",\"parentLocale\":\"de\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"de-CH\",\"parentLocale\":\"de\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"de-LI\",\"parentLocale\":\"de\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"de-LU\",\"parentLocale\":\"de\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"en\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return n10==1&&n100!=11?\"one\":n10==2&&n100!=12?\"two\":n10==3&&n100!=13?\"few\":\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-001\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-150\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-AG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-AI\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-AS\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-AT\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-AU\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BB\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BE\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BI\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BS\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BW\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BZ\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CA\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CC\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CH\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CK\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CX\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CY\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-DE\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-DG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-DK\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-DM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-Dsrt\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-ER\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-FI\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-FJ\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-FK\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-FM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GB\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GD\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GH\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GI\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GU\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GY\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-HK\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-IE\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-IL\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-IM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-IN\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-IO\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-JE\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-JM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-KE\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-KI\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-KN\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-KY\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-LC\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-LR\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-LS\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MH\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MO\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MP\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MS\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MT\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MU\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MW\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MY\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NA\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NF\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NL\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NR\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NU\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NZ\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-PG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-PH\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-PK\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-PN\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-PR\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-PW\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-RW\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SB\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SC\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SD\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SE\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SH\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SI\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SL\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SS\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SX\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SZ\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-Shaw\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-TC\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-TK\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-TO\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-TT\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-TV\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-TZ\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-UG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-UM\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-US\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-VC\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-VG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-VI\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-VU\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-WS\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-ZA\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-ZM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-ZW\",\"parentLocale\":\"en-001\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"es\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return n==1?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-419\",\"parentLocale\":\"es\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-AR\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-BO\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-CL\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-CO\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-CR\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-CU\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-DO\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-EA\",\"parentLocale\":\"es\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-EC\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-GQ\",\"parentLocale\":\"es\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-GT\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-HN\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-IC\",\"parentLocale\":\"es\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-MX\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-NI\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-PA\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-PE\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-PH\",\"parentLocale\":\"es\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-PR\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-PY\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-SV\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-US\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-UY\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-VE\",\"parentLocale\":\"es-419\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"fr\",\"pluralRuleFunction\":function (n,ord){if(ord)return n==1?\"one\":\"other\";return n>=0&&n<2?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-BE\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-BF\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-BI\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-BJ\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-BL\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CA\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CD\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CF\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CG\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CH\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CI\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CM\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-DJ\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-DZ\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-GA\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-GF\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-GN\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-GP\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-GQ\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-HT\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-KM\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-LU\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MA\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MC\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MF\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MG\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-ML\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MQ\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MR\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MU\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-NC\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-NE\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-PF\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-PM\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-RE\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-RW\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-SC\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-SN\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-SY\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-TD\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-TG\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-TN\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-VU\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-WF\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-YT\",\"parentLocale\":\"fr\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"it\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1];if(ord)return n==11||n==8||n==80||n==800?\"many\":\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"it-CH\",\"parentLocale\":\"it\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"it-SM\",\"parentLocale\":\"it\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"ja\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return\"other\"}});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"nl\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1];if(ord)return\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"nl-AW\",\"parentLocale\":\"nl\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"nl-BE\",\"parentLocale\":\"nl\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"nl-BQ\",\"parentLocale\":\"nl\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"nl-CW\",\"parentLocale\":\"nl\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"nl-SR\",\"parentLocale\":\"nl\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"nl-SX\",\"parentLocale\":\"nl\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"pt\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),t0=Number(s[0])==n;if(ord)return\"other\";return t0&&n>=0&&n<=2&&n!=2?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-AO\",\"parentLocale\":\"pt-PT\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-PT\",\"parentLocale\":\"pt\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1];if(ord)return\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-CV\",\"parentLocale\":\"pt-PT\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-GW\",\"parentLocale\":\"pt-PT\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-MO\",\"parentLocale\":\"pt-PT\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-MZ\",\"parentLocale\":\"pt-PT\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-ST\",\"parentLocale\":\"pt-PT\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-TL\",\"parentLocale\":\"pt-PT\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"sv\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return(n10==1||n10==2)&&n100!=11&&n100!=12?\"one\":\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"sv-AX\",\"parentLocale\":\"sv\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"sv-FI\",\"parentLocale\":\"sv\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"th\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return\"other\"}});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"zh\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hans\",\"parentLocale\":\"zh\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hans-HK\",\"parentLocale\":\"zh-Hans\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hans-MO\",\"parentLocale\":\"zh-Hans\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hans-SG\",\"parentLocale\":\"zh-Hans\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hant\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hant-HK\",\"parentLocale\":\"zh-Hant\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hant-MO\",\"parentLocale\":\"zh-Hant-HK\"});\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\n\"use strict\";\nexports[\"default\"] = Compiler;\n\nfunction Compiler(locales, formats, pluralFn) {\n this.locales = locales;\n this.formats = formats;\n this.pluralFn = pluralFn;\n}\n\nCompiler.prototype.compile = function (ast) {\n this.pluralStack = [];\n this.currentPlural = null;\n this.pluralNumberFormat = null;\n\n return this.compileMessage(ast);\n};\n\nCompiler.prototype.compileMessage = function (ast) {\n if (!(ast && ast.type === 'messageFormatPattern')) {\n throw new Error('Message AST is not of type: \"messageFormatPattern\"');\n }\n\n var elements = ast.elements,\n pattern = [];\n\n var i, len, element;\n\n for (i = 0, len = elements.length; i < len; i += 1) {\n element = elements[i];\n\n switch (element.type) {\n case 'messageTextElement':\n pattern.push(this.compileMessageText(element));\n break;\n\n case 'argumentElement':\n pattern.push(this.compileArgument(element));\n break;\n\n default:\n throw new Error('Message element does not have a valid type');\n }\n }\n\n return pattern;\n};\n\nCompiler.prototype.compileMessageText = function (element) {\n // When this `element` is part of plural sub-pattern and its value contains\n // an unescaped '#', use a `PluralOffsetString` helper to properly output\n // the number with the correct offset in the string.\n if (this.currentPlural && /(^|[^\\\\])#/g.test(element.value)) {\n // Create a cache a NumberFormat instance that can be reused for any\n // PluralOffsetString instance in this message.\n if (!this.pluralNumberFormat) {\n this.pluralNumberFormat = new Intl.NumberFormat(this.locales);\n }\n\n return new PluralOffsetString(\n this.currentPlural.id,\n this.currentPlural.format.offset,\n this.pluralNumberFormat,\n element.value);\n }\n\n // Unescape the escaped '#'s in the message text.\n return element.value.replace(/\\\\#/g, '#');\n};\n\nCompiler.prototype.compileArgument = function (element) {\n var format = element.format;\n\n if (!format) {\n return new StringFormat(element.id);\n }\n\n var formats = this.formats,\n locales = this.locales,\n pluralFn = this.pluralFn,\n options;\n\n switch (format.type) {\n case 'numberFormat':\n options = formats.number[format.style];\n return {\n id : element.id,\n format: new Intl.NumberFormat(locales, options).format\n };\n\n case 'dateFormat':\n options = formats.date[format.style];\n return {\n id : element.id,\n format: new Intl.DateTimeFormat(locales, options).format\n };\n\n case 'timeFormat':\n options = formats.time[format.style];\n return {\n id : element.id,\n format: new Intl.DateTimeFormat(locales, options).format\n };\n\n case 'pluralFormat':\n options = this.compileOptions(element);\n return new PluralFormat(\n element.id, format.ordinal, format.offset, options, pluralFn\n );\n\n case 'selectFormat':\n options = this.compileOptions(element);\n return new SelectFormat(element.id, options);\n\n default:\n throw new Error('Message element does not have a valid format type');\n }\n};\n\nCompiler.prototype.compileOptions = function (element) {\n var format = element.format,\n options = format.options,\n optionsHash = {};\n\n // Save the current plural element, if any, then set it to a new value when\n // compiling the options sub-patterns. This conforms the spec's algorithm\n // for handling `\"#\"` syntax in message text.\n this.pluralStack.push(this.currentPlural);\n this.currentPlural = format.type === 'pluralFormat' ? element : null;\n\n var i, len, option;\n\n for (i = 0, len = options.length; i < len; i += 1) {\n option = options[i];\n\n // Compile the sub-pattern and save it under the options's selector.\n optionsHash[option.selector] = this.compileMessage(option.value);\n }\n\n // Pop the plural stack to put back the original current plural value.\n this.currentPlural = this.pluralStack.pop();\n\n return optionsHash;\n};\n\n// -- Compiler Helper Classes --------------------------------------------------\n\nfunction StringFormat(id) {\n this.id = id;\n}\n\nStringFormat.prototype.format = function (value) {\n if (!value) {\n return '';\n }\n\n return typeof value === 'string' ? value : String(value);\n};\n\nfunction PluralFormat(id, useOrdinal, offset, options, pluralFn) {\n this.id = id;\n this.useOrdinal = useOrdinal;\n this.offset = offset;\n this.options = options;\n this.pluralFn = pluralFn;\n}\n\nPluralFormat.prototype.getOption = function (value) {\n var options = this.options;\n\n var option = options['=' + value] ||\n options[this.pluralFn(value - this.offset, this.useOrdinal)];\n\n return option || options.other;\n};\n\nfunction PluralOffsetString(id, offset, numberFormat, string) {\n this.id = id;\n this.offset = offset;\n this.numberFormat = numberFormat;\n this.string = string;\n}\n\nPluralOffsetString.prototype.format = function (value) {\n var number = this.numberFormat.format(value - this.offset);\n\n return this.string\n .replace(/(^|[^\\\\])#/g, '$1' + number)\n .replace(/\\\\#/g, '#');\n};\n\nfunction SelectFormat(id, options) {\n this.id = id;\n this.options = options;\n}\n\nSelectFormat.prototype.getOption = function (value) {\n var options = this.options;\n return options[value] || options.other;\n};\n\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\n\"use strict\";\nvar src$utils$$ = require(\"./utils\"), src$es5$$ = require(\"./es5\"), src$compiler$$ = require(\"./compiler\"), intl$messageformat$parser$$ = require(\"intl-messageformat-parser\");\nexports[\"default\"] = MessageFormat;\n\n// -- MessageFormat --------------------------------------------------------\n\nfunction MessageFormat(message, locales, formats) {\n // Parse string messages into an AST.\n var ast = typeof message === 'string' ?\n MessageFormat.__parse(message) : message;\n\n if (!(ast && ast.type === 'messageFormatPattern')) {\n throw new TypeError('A message must be provided as a String or AST.');\n }\n\n // Creates a new object with the specified `formats` merged with the default\n // formats.\n formats = this._mergeFormats(MessageFormat.formats, formats);\n\n // Defined first because it's used to build the format pattern.\n src$es5$$.defineProperty(this, '_locale', {value: this._resolveLocale(locales)});\n\n // Compile the `ast` to a pattern that is highly optimized for repeated\n // `format()` invocations. **Note:** This passes the `locales` set provided\n // to the constructor instead of just the resolved locale.\n var pluralFn = this._findPluralRuleFunction(this._locale);\n var pattern = this._compilePattern(ast, locales, formats, pluralFn);\n\n // \"Bind\" `format()` method to `this` so it can be passed by reference like\n // the other `Intl` APIs.\n var messageFormat = this;\n this.format = function (values) {\n return messageFormat._format(pattern, values);\n };\n}\n\n// Default format options used as the prototype of the `formats` provided to the\n// constructor. These are used when constructing the internal Intl.NumberFormat\n// and Intl.DateTimeFormat instances.\nsrc$es5$$.defineProperty(MessageFormat, 'formats', {\n enumerable: true,\n\n value: {\n number: {\n 'currency': {\n style: 'currency'\n },\n\n 'percent': {\n style: 'percent'\n }\n },\n\n date: {\n 'short': {\n month: 'numeric',\n day : 'numeric',\n year : '2-digit'\n },\n\n 'medium': {\n month: 'short',\n day : 'numeric',\n year : 'numeric'\n },\n\n 'long': {\n month: 'long',\n day : 'numeric',\n year : 'numeric'\n },\n\n 'full': {\n weekday: 'long',\n month : 'long',\n day : 'numeric',\n year : 'numeric'\n }\n },\n\n time: {\n 'short': {\n hour : 'numeric',\n minute: 'numeric'\n },\n\n 'medium': {\n hour : 'numeric',\n minute: 'numeric',\n second: 'numeric'\n },\n\n 'long': {\n hour : 'numeric',\n minute : 'numeric',\n second : 'numeric',\n timeZoneName: 'short'\n },\n\n 'full': {\n hour : 'numeric',\n minute : 'numeric',\n second : 'numeric',\n timeZoneName: 'short'\n }\n }\n }\n});\n\n// Define internal private properties for dealing with locale data.\nsrc$es5$$.defineProperty(MessageFormat, '__localeData__', {value: src$es5$$.objCreate(null)});\nsrc$es5$$.defineProperty(MessageFormat, '__addLocaleData', {value: function (data) {\n if (!(data && data.locale)) {\n throw new Error(\n 'Locale data provided to IntlMessageFormat is missing a ' +\n '`locale` property'\n );\n }\n\n MessageFormat.__localeData__[data.locale.toLowerCase()] = data;\n}});\n\n// Defines `__parse()` static method as an exposed private.\nsrc$es5$$.defineProperty(MessageFormat, '__parse', {value: intl$messageformat$parser$$[\"default\"].parse});\n\n// Define public `defaultLocale` property which defaults to English, but can be\n// set by the developer.\nsrc$es5$$.defineProperty(MessageFormat, 'defaultLocale', {\n enumerable: true,\n writable : true,\n value : undefined\n});\n\nMessageFormat.prototype.resolvedOptions = function () {\n // TODO: Provide anything else?\n return {\n locale: this._locale\n };\n};\n\nMessageFormat.prototype._compilePattern = function (ast, locales, formats, pluralFn) {\n var compiler = new src$compiler$$[\"default\"](locales, formats, pluralFn);\n return compiler.compile(ast);\n};\n\nMessageFormat.prototype._findPluralRuleFunction = function (locale) {\n var localeData = MessageFormat.__localeData__;\n var data = localeData[locale.toLowerCase()];\n\n // The locale data is de-duplicated, so we have to traverse the locale's\n // hierarchy until we find a `pluralRuleFunction` to return.\n while (data) {\n if (data.pluralRuleFunction) {\n return data.pluralRuleFunction;\n }\n\n data = data.parentLocale && localeData[data.parentLocale.toLowerCase()];\n }\n\n throw new Error(\n 'Locale data added to IntlMessageFormat is missing a ' +\n '`pluralRuleFunction` for :' + locale\n );\n};\n\nMessageFormat.prototype._format = function (pattern, values) {\n var result = '',\n i, len, part, id, value;\n\n for (i = 0, len = pattern.length; i < len; i += 1) {\n part = pattern[i];\n\n // Exist early for string parts.\n if (typeof part === 'string') {\n result += part;\n continue;\n }\n\n id = part.id;\n\n // Enforce that all required values are provided by the caller.\n if (!(values && src$utils$$.hop.call(values, id))) {\n throw new Error('A value must be provided for: ' + id);\n }\n\n value = values[id];\n\n // Recursively format plural and select parts' option — which can be a\n // nested pattern structure. The choosing of the option to use is\n // abstracted-by and delegated-to the part helper object.\n if (part.options) {\n result += this._format(part.getOption(value), values);\n } else {\n result += part.format(value);\n }\n }\n\n return result;\n};\n\nMessageFormat.prototype._mergeFormats = function (defaults, formats) {\n var mergedFormats = {},\n type, mergedType;\n\n for (type in defaults) {\n if (!src$utils$$.hop.call(defaults, type)) { continue; }\n\n mergedFormats[type] = mergedType = src$es5$$.objCreate(defaults[type]);\n\n if (formats && src$utils$$.hop.call(formats, type)) {\n src$utils$$.extend(mergedType, formats[type]);\n }\n }\n\n return mergedFormats;\n};\n\nMessageFormat.prototype._resolveLocale = function (locales) {\n if (typeof locales === 'string') {\n locales = [locales];\n }\n\n // Create a copy of the array so we can push on the default locale.\n locales = (locales || []).concat(MessageFormat.defaultLocale);\n\n var localeData = MessageFormat.__localeData__;\n var i, len, localeParts, data;\n\n // Using the set of locales + the default locale, we look for the first one\n // which that has been registered. When data does not exist for a locale, we\n // traverse its ancestors to find something that's been registered within\n // its hierarchy of locales. Since we lack the proper `parentLocale` data\n // here, we must take a naive approach to traversal.\n for (i = 0, len = locales.length; i < len; i += 1) {\n localeParts = locales[i].toLowerCase().split('-');\n\n while (localeParts.length) {\n data = localeData[localeParts.join('-')];\n if (data) {\n // Return the normalized locale string; e.g., we return \"en-US\",\n // instead of \"en-us\".\n return data.locale;\n }\n\n localeParts.pop();\n }\n }\n\n var defaultLocale = locales.pop();\n throw new Error(\n 'No locale data has been added to IntlMessageFormat for: ' +\n locales.join(', ') + ', or the default locale: ' + defaultLocale\n );\n};\n\n","// GENERATED FILE\n\"use strict\";\nexports[\"default\"] = {\"locale\":\"en\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return n10==1&&n100!=11?\"one\":n10==2&&n100!=12?\"two\":n10==3&&n100!=13?\"few\":\"other\";return n==1&&v0?\"one\":\"other\"}};\n\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\n\"use strict\";\nvar src$utils$$ = require(\"./utils\");\n\n// Purposely using the same implementation as the Intl.js `Intl` polyfill.\n// Copyright 2013 Andy Earnshaw, MIT License\n\nvar realDefineProp = (function () {\n try { return !!Object.defineProperty({}, 'a', {}); }\n catch (e) { return false; }\n})();\n\nvar es3 = !realDefineProp && !Object.prototype.__defineGetter__;\n\nvar defineProperty = realDefineProp ? Object.defineProperty :\n function (obj, name, desc) {\n\n if ('get' in desc && obj.__defineGetter__) {\n obj.__defineGetter__(name, desc.get);\n } else if (!src$utils$$.hop.call(obj, name) || 'value' in desc) {\n obj[name] = desc.value;\n }\n};\n\nvar objCreate = Object.create || function (proto, props) {\n var obj, k;\n\n function F() {}\n F.prototype = proto;\n obj = new F();\n\n for (k in props) {\n if (src$utils$$.hop.call(props, k)) {\n defineProperty(obj, k, props[k]);\n }\n }\n\n return obj;\n};\nexports.defineProperty = defineProperty, exports.objCreate = objCreate;\n\n","/* jslint esnext: true */\n\n\"use strict\";\nvar src$core$$ = require(\"./core\"), src$en$$ = require(\"./en\");\n\nsrc$core$$[\"default\"].__addLocaleData(src$en$$[\"default\"]);\nsrc$core$$[\"default\"].defaultLocale = 'en';\n\nexports[\"default\"] = src$core$$[\"default\"];\n\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\n\"use strict\";\nexports.extend = extend;\nvar hop = Object.prototype.hasOwnProperty;\n\nfunction extend(obj) {\n var sources = Array.prototype.slice.call(arguments, 1),\n i, len, source, key;\n\n for (i = 0, len = sources.length; i < len; i += 1) {\n source = sources[i];\n if (!source) { continue; }\n\n for (key in source) {\n if (hop.call(source, key)) {\n obj[key] = source[key];\n }\n }\n }\n\n return obj;\n}\nexports.hop = hop;\n\n","// Expose `IntlPolyfill` as global to add locale data into runtime later on.\nglobal.IntlPolyfill = require('./lib/core.js');\n\n// Require all locale data for `Intl`. This module will be\n// ignored when bundling for the browser with Browserify/Webpack.\nrequire('./locale-data/complete.js');\n\n// hack to export the polyfill as global Intl if needed\nif (!global.Intl) {\n global.Intl = global.IntlPolyfill;\n global.IntlPolyfill.__applyLocaleSensitivePrototypes();\n}\n\n// providing an idiomatic api for the nodejs version of this module\nmodule.exports = global.IntlPolyfill;\n","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n};\n\nvar jsx = function () {\n var REACT_ELEMENT_TYPE = typeof Symbol === \"function\" && Symbol.for && Symbol.for(\"react.element\") || 0xeac7;\n return function createRawReactElement(type, props, key, children) {\n var defaultProps = type && type.defaultProps;\n var childrenLength = arguments.length - 3;\n\n if (!props && childrenLength !== 0) {\n props = {};\n }\n\n if (props && defaultProps) {\n for (var propName in defaultProps) {\n if (props[propName] === void 0) {\n props[propName] = defaultProps[propName];\n }\n }\n } else if (!props) {\n props = defaultProps || {};\n }\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 3];\n }\n\n props.children = childArray;\n }\n\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key === undefined ? null : '' + key,\n ref: null,\n props: props,\n _owner: null\n };\n };\n}();\n\nvar asyncToGenerator = function (fn) {\n return function () {\n var gen = fn.apply(this, arguments);\n return new Promise(function (resolve, reject) {\n function step(key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n return Promise.resolve(value).then(function (value) {\n return step(\"next\", value);\n }, function (err) {\n return step(\"throw\", err);\n });\n }\n }\n\n return step(\"next\");\n });\n };\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar defineEnumerableProperties = function (obj, descs) {\n for (var key in descs) {\n var desc = descs[key];\n desc.configurable = desc.enumerable = true;\n if (\"value\" in desc) desc.writable = true;\n Object.defineProperty(obj, key, desc);\n }\n\n return obj;\n};\n\nvar defaults = function (obj, defaults) {\n var keys = Object.getOwnPropertyNames(defaults);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = Object.getOwnPropertyDescriptor(defaults, key);\n\n if (value && value.configurable && obj[key] === undefined) {\n Object.defineProperty(obj, key, value);\n }\n }\n\n return obj;\n};\n\nvar defineProperty$1 = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar _instanceof = function (left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n};\n\nvar interopRequireDefault = function (obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n};\n\nvar interopRequireWildcard = function (obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n return newObj;\n }\n};\n\nvar newArrowCheck = function (innerThis, boundThis) {\n if (innerThis !== boundThis) {\n throw new TypeError(\"Cannot instantiate an arrow function\");\n }\n};\n\nvar objectDestructuringEmpty = function (obj) {\n if (obj == null) throw new TypeError(\"Cannot destructure undefined\");\n};\n\nvar objectWithoutProperties = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar selfGlobal = typeof global === \"undefined\" ? self : global;\n\nvar set = function set(object, property, value, receiver) {\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent !== null) {\n set(parent, property, value, receiver);\n }\n } else if (\"value\" in desc && desc.writable) {\n desc.value = value;\n } else {\n var setter = desc.set;\n\n if (setter !== undefined) {\n setter.call(receiver, value);\n }\n }\n\n return value;\n};\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\nvar slicedToArrayLoose = function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n var _arr = [];\n\n for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {\n _arr.push(_step.value);\n\n if (i && _arr.length === i) break;\n }\n\n return _arr;\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n};\n\nvar taggedTemplateLiteral = function (strings, raw) {\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n};\n\nvar taggedTemplateLiteralLoose = function (strings, raw) {\n strings.raw = raw;\n return strings;\n};\n\nvar temporalRef = function (val, name, undef) {\n if (val === undef) {\n throw new ReferenceError(name + \" is not defined - temporal dead zone\");\n } else {\n return val;\n }\n};\n\nvar temporalUndefined = {};\n\nvar toArray = function (arr) {\n return Array.isArray(arr) ? arr : Array.from(arr);\n};\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\n\n\nvar babelHelpers$1 = Object.freeze({\n jsx: jsx,\n asyncToGenerator: asyncToGenerator,\n classCallCheck: classCallCheck,\n createClass: createClass,\n defineEnumerableProperties: defineEnumerableProperties,\n defaults: defaults,\n defineProperty: defineProperty$1,\n get: get,\n inherits: inherits,\n interopRequireDefault: interopRequireDefault,\n interopRequireWildcard: interopRequireWildcard,\n newArrowCheck: newArrowCheck,\n objectDestructuringEmpty: objectDestructuringEmpty,\n objectWithoutProperties: objectWithoutProperties,\n possibleConstructorReturn: possibleConstructorReturn,\n selfGlobal: selfGlobal,\n set: set,\n slicedToArray: slicedToArray,\n slicedToArrayLoose: slicedToArrayLoose,\n taggedTemplateLiteral: taggedTemplateLiteral,\n taggedTemplateLiteralLoose: taggedTemplateLiteralLoose,\n temporalRef: temporalRef,\n temporalUndefined: temporalUndefined,\n toArray: toArray,\n toConsumableArray: toConsumableArray,\n typeof: _typeof,\n extends: _extends,\n instanceof: _instanceof\n});\n\nvar realDefineProp = function () {\n var sentinel = function sentinel() {};\n try {\n Object.defineProperty(sentinel, 'a', {\n get: function get() {\n return 1;\n }\n });\n Object.defineProperty(sentinel, 'prototype', { writable: false });\n return sentinel.a === 1 && sentinel.prototype instanceof Object;\n } catch (e) {\n return false;\n }\n}();\n\n// Need a workaround for getters in ES3\nvar es3 = !realDefineProp && !Object.prototype.__defineGetter__;\n\n// We use this a lot (and need it for proto-less objects)\nvar hop = Object.prototype.hasOwnProperty;\n\n// Naive defineProperty for compatibility\nvar defineProperty = realDefineProp ? Object.defineProperty : function (obj, name, desc) {\n if ('get' in desc && obj.__defineGetter__) obj.__defineGetter__(name, desc.get);else if (!hop.call(obj, name) || 'value' in desc) obj[name] = desc.value;\n};\n\n// Array.prototype.indexOf, as good as we need it to be\nvar arrIndexOf = Array.prototype.indexOf || function (search) {\n /*jshint validthis:true */\n var t = this;\n if (!t.length) return -1;\n\n for (var i = arguments[1] || 0, max = t.length; i < max; i++) {\n if (t[i] === search) return i;\n }\n\n return -1;\n};\n\n// Create an object with the specified prototype (2nd arg required for Record)\nvar objCreate = Object.create || function (proto, props) {\n var obj = void 0;\n\n function F() {}\n F.prototype = proto;\n obj = new F();\n\n for (var k in props) {\n if (hop.call(props, k)) defineProperty(obj, k, props[k]);\n }\n\n return obj;\n};\n\n// Snapshot some (hopefully still) native built-ins\nvar arrSlice = Array.prototype.slice;\nvar arrConcat = Array.prototype.concat;\nvar arrPush = Array.prototype.push;\nvar arrJoin = Array.prototype.join;\nvar arrShift = Array.prototype.shift;\n\n// Naive Function.prototype.bind for compatibility\nvar fnBind = Function.prototype.bind || function (thisObj) {\n var fn = this,\n args = arrSlice.call(arguments, 1);\n\n // All our (presently) bound functions have either 1 or 0 arguments. By returning\n // different function signatures, we can pass some tests in ES3 environments\n if (fn.length === 1) {\n return function () {\n return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));\n };\n }\n return function () {\n return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));\n };\n};\n\n// Object housing internal properties for constructors\nvar internals = objCreate(null);\n\n// Keep internal properties internal\nvar secret = Math.random();\n\n// Helper functions\n// ================\n\n/**\n * A function to deal with the inaccuracy of calculating log10 in pre-ES6\n * JavaScript environments. Math.log(num) / Math.LN10 was responsible for\n * causing issue #62.\n */\nfunction log10Floor(n) {\n // ES6 provides the more accurate Math.log10\n if (typeof Math.log10 === 'function') return Math.floor(Math.log10(n));\n\n var x = Math.round(Math.log(n) * Math.LOG10E);\n return x - (Number('1e' + x) > n);\n}\n\n/**\n * A map that doesn't contain Object in its prototype chain\n */\nfunction Record(obj) {\n // Copy only own properties over unless this object is already a Record instance\n for (var k in obj) {\n if (obj instanceof Record || hop.call(obj, k)) defineProperty(this, k, { value: obj[k], enumerable: true, writable: true, configurable: true });\n }\n}\nRecord.prototype = objCreate(null);\n\n/**\n * An ordered list\n */\nfunction List() {\n defineProperty(this, 'length', { writable: true, value: 0 });\n\n if (arguments.length) arrPush.apply(this, arrSlice.call(arguments));\n}\nList.prototype = objCreate(null);\n\n/**\n * Constructs a regular expression to restore tainted RegExp properties\n */\nfunction createRegExpRestore() {\n if (internals.disableRegExpRestore) {\n return function () {/* no-op */};\n }\n\n var regExpCache = {\n lastMatch: RegExp.lastMatch || '',\n leftContext: RegExp.leftContext,\n multiline: RegExp.multiline,\n input: RegExp.input\n },\n has = false;\n\n // Create a snapshot of all the 'captured' properties\n for (var i = 1; i <= 9; i++) {\n has = (regExpCache['$' + i] = RegExp['$' + i]) || has;\n }return function () {\n // Now we've snapshotted some properties, escape the lastMatch string\n var esc = /[.?*+^$[\\]\\\\(){}|-]/g,\n lm = regExpCache.lastMatch.replace(esc, '\\\\$&'),\n reg = new List();\n\n // If any of the captured strings were non-empty, iterate over them all\n if (has) {\n for (var _i = 1; _i <= 9; _i++) {\n var m = regExpCache['$' + _i];\n\n // If it's empty, add an empty capturing group\n if (!m) lm = '()' + lm;\n\n // Else find the string in lm and escape & wrap it to capture it\n else {\n m = m.replace(esc, '\\\\$&');\n lm = lm.replace(m, '(' + m + ')');\n }\n\n // Push it to the reg and chop lm to make sure further groups come after\n arrPush.call(reg, lm.slice(0, lm.indexOf('(') + 1));\n lm = lm.slice(lm.indexOf('(') + 1);\n }\n }\n\n var exprStr = arrJoin.call(reg, '') + lm;\n\n // Shorten the regex by replacing each part of the expression with a match\n // for a string of that exact length. This is safe for the type of\n // expressions generated above, because the expression matches the whole\n // match string, so we know each group and each segment between capturing\n // groups can be matched by its length alone.\n exprStr = exprStr.replace(/(\\\\\\(|\\\\\\)|[^()])+/g, function (match) {\n return '[\\\\s\\\\S]{' + match.replace('\\\\', '').length + '}';\n });\n\n // Create the regular expression that will reconstruct the RegExp properties\n var expr = new RegExp(exprStr, regExpCache.multiline ? 'gm' : 'g');\n\n // Set the lastIndex of the generated expression to ensure that the match\n // is found in the correct index.\n expr.lastIndex = regExpCache.leftContext.length;\n\n expr.exec(regExpCache.input);\n };\n}\n\n/**\n * Mimics ES5's abstract ToObject() function\n */\nfunction toObject(arg) {\n if (arg === null) throw new TypeError('Cannot convert null or undefined to object');\n\n if ((typeof arg === 'undefined' ? 'undefined' : babelHelpers$1['typeof'](arg)) === 'object') return arg;\n return Object(arg);\n}\n\nfunction toNumber(arg) {\n if (typeof arg === 'number') return arg;\n return Number(arg);\n}\n\nfunction toInteger(arg) {\n var number = toNumber(arg);\n if (isNaN(number)) return 0;\n if (number === +0 || number === -0 || number === +Infinity || number === -Infinity) return number;\n if (number < 0) return Math.floor(Math.abs(number)) * -1;\n return Math.floor(Math.abs(number));\n}\n\nfunction toLength(arg) {\n var len = toInteger(arg);\n if (len <= 0) return 0;\n if (len === Infinity) return Math.pow(2, 53) - 1;\n return Math.min(len, Math.pow(2, 53) - 1);\n}\n\n/**\n * Returns \"internal\" properties for an object\n */\nfunction getInternalProperties(obj) {\n if (hop.call(obj, '__getInternalProperties')) return obj.__getInternalProperties(secret);\n\n return objCreate(null);\n}\n\n/**\n* Defines regular expressions for various operations related to the BCP 47 syntax,\n* as defined at http://tools.ietf.org/html/bcp47#section-2.1\n*/\n\n// extlang = 3ALPHA ; selected ISO 639 codes\n// *2(\"-\" 3ALPHA) ; permanently reserved\nvar extlang = '[a-z]{3}(?:-[a-z]{3}){0,2}';\n\n// language = 2*3ALPHA ; shortest ISO 639 code\n// [\"-\" extlang] ; sometimes followed by\n// ; extended language subtags\n// / 4ALPHA ; or reserved for future use\n// / 5*8ALPHA ; or registered language subtag\nvar language = '(?:[a-z]{2,3}(?:-' + extlang + ')?|[a-z]{4}|[a-z]{5,8})';\n\n// script = 4ALPHA ; ISO 15924 code\nvar script = '[a-z]{4}';\n\n// region = 2ALPHA ; ISO 3166-1 code\n// / 3DIGIT ; UN M.49 code\nvar region = '(?:[a-z]{2}|\\\\d{3})';\n\n// variant = 5*8alphanum ; registered variants\n// / (DIGIT 3alphanum)\nvar variant = '(?:[a-z0-9]{5,8}|\\\\d[a-z0-9]{3})';\n\n// ; Single alphanumerics\n// ; \"x\" reserved for private use\n// singleton = DIGIT ; 0 - 9\n// / %x41-57 ; A - W\n// / %x59-5A ; Y - Z\n// / %x61-77 ; a - w\n// / %x79-7A ; y - z\nvar singleton = '[0-9a-wy-z]';\n\n// extension = singleton 1*(\"-\" (2*8alphanum))\nvar extension = singleton + '(?:-[a-z0-9]{2,8})+';\n\n// privateuse = \"x\" 1*(\"-\" (1*8alphanum))\nvar privateuse = 'x(?:-[a-z0-9]{1,8})+';\n\n// irregular = \"en-GB-oed\" ; irregular tags do not match\n// / \"i-ami\" ; the 'langtag' production and\n// / \"i-bnn\" ; would not otherwise be\n// / \"i-default\" ; considered 'well-formed'\n// / \"i-enochian\" ; These tags are all valid,\n// / \"i-hak\" ; but most are deprecated\n// / \"i-klingon\" ; in favor of more modern\n// / \"i-lux\" ; subtags or subtag\n// / \"i-mingo\" ; combination\n// / \"i-navajo\"\n// / \"i-pwn\"\n// / \"i-tao\"\n// / \"i-tay\"\n// / \"i-tsu\"\n// / \"sgn-BE-FR\"\n// / \"sgn-BE-NL\"\n// / \"sgn-CH-DE\"\nvar irregular = '(?:en-GB-oed' + '|i-(?:ami|bnn|default|enochian|hak|klingon|lux|mingo|navajo|pwn|tao|tay|tsu)' + '|sgn-(?:BE-FR|BE-NL|CH-DE))';\n\n// regular = \"art-lojban\" ; these tags match the 'langtag'\n// / \"cel-gaulish\" ; production, but their subtags\n// / \"no-bok\" ; are not extended language\n// / \"no-nyn\" ; or variant subtags: their meaning\n// / \"zh-guoyu\" ; is defined by their registration\n// / \"zh-hakka\" ; and all of these are deprecated\n// / \"zh-min\" ; in favor of a more modern\n// / \"zh-min-nan\" ; subtag or sequence of subtags\n// / \"zh-xiang\"\nvar regular = '(?:art-lojban|cel-gaulish|no-bok|no-nyn' + '|zh-(?:guoyu|hakka|min|min-nan|xiang))';\n\n// grandfathered = irregular ; non-redundant tags registered\n// / regular ; during the RFC 3066 era\nvar grandfathered = '(?:' + irregular + '|' + regular + ')';\n\n// langtag = language\n// [\"-\" script]\n// [\"-\" region]\n// *(\"-\" variant)\n// *(\"-\" extension)\n// [\"-\" privateuse]\nvar langtag = language + '(?:-' + script + ')?(?:-' + region + ')?(?:-' + variant + ')*(?:-' + extension + ')*(?:-' + privateuse + ')?';\n\n// Language-Tag = langtag ; normal language tags\n// / privateuse ; private use tag\n// / grandfathered ; grandfathered tags\nvar expBCP47Syntax = RegExp('^(?:' + langtag + '|' + privateuse + '|' + grandfathered + ')$', 'i');\n\n// Match duplicate variants in a language tag\nvar expVariantDupes = RegExp('^(?!x).*?-(' + variant + ')-(?:\\\\w{4,8}-(?!x-))*\\\\1\\\\b', 'i');\n\n// Match duplicate singletons in a language tag (except in private use)\nvar expSingletonDupes = RegExp('^(?!x).*?-(' + singleton + ')-(?:\\\\w+-(?!x-))*\\\\1\\\\b', 'i');\n\n// Match all extension sequences\nvar expExtSequences = RegExp('-' + extension, 'ig');\n\n// Default locale is the first-added locale data for us\nvar defaultLocale = void 0;\nfunction setDefaultLocale(locale) {\n defaultLocale = locale;\n}\n\n// IANA Subtag Registry redundant tag and subtag maps\nvar redundantTags = {\n tags: {\n \"art-lojban\": \"jbo\",\n \"i-ami\": \"ami\",\n \"i-bnn\": \"bnn\",\n \"i-hak\": \"hak\",\n \"i-klingon\": \"tlh\",\n \"i-lux\": \"lb\",\n \"i-navajo\": \"nv\",\n \"i-pwn\": \"pwn\",\n \"i-tao\": \"tao\",\n \"i-tay\": \"tay\",\n \"i-tsu\": \"tsu\",\n \"no-bok\": \"nb\",\n \"no-nyn\": \"nn\",\n \"sgn-BE-FR\": \"sfb\",\n \"sgn-BE-NL\": \"vgt\",\n \"sgn-CH-DE\": \"sgg\",\n \"zh-guoyu\": \"cmn\",\n \"zh-hakka\": \"hak\",\n \"zh-min-nan\": \"nan\",\n \"zh-xiang\": \"hsn\",\n \"sgn-BR\": \"bzs\",\n \"sgn-CO\": \"csn\",\n \"sgn-DE\": \"gsg\",\n \"sgn-DK\": \"dsl\",\n \"sgn-ES\": \"ssp\",\n \"sgn-FR\": \"fsl\",\n \"sgn-GB\": \"bfi\",\n \"sgn-GR\": \"gss\",\n \"sgn-IE\": \"isg\",\n \"sgn-IT\": \"ise\",\n \"sgn-JP\": \"jsl\",\n \"sgn-MX\": \"mfs\",\n \"sgn-NI\": \"ncs\",\n \"sgn-NL\": \"dse\",\n \"sgn-NO\": \"nsl\",\n \"sgn-PT\": \"psr\",\n \"sgn-SE\": \"swl\",\n \"sgn-US\": \"ase\",\n \"sgn-ZA\": \"sfs\",\n \"zh-cmn\": \"cmn\",\n \"zh-cmn-Hans\": \"cmn-Hans\",\n \"zh-cmn-Hant\": \"cmn-Hant\",\n \"zh-gan\": \"gan\",\n \"zh-wuu\": \"wuu\",\n \"zh-yue\": \"yue\"\n },\n subtags: {\n BU: \"MM\",\n DD: \"DE\",\n FX: \"FR\",\n TP: \"TL\",\n YD: \"YE\",\n ZR: \"CD\",\n heploc: \"alalc97\",\n 'in': \"id\",\n iw: \"he\",\n ji: \"yi\",\n jw: \"jv\",\n mo: \"ro\",\n ayx: \"nun\",\n bjd: \"drl\",\n ccq: \"rki\",\n cjr: \"mom\",\n cka: \"cmr\",\n cmk: \"xch\",\n drh: \"khk\",\n drw: \"prs\",\n gav: \"dev\",\n hrr: \"jal\",\n ibi: \"opa\",\n kgh: \"kml\",\n lcq: \"ppr\",\n mst: \"mry\",\n myt: \"mry\",\n sca: \"hle\",\n tie: \"ras\",\n tkk: \"twm\",\n tlw: \"weo\",\n tnf: \"prs\",\n ybd: \"rki\",\n yma: \"lrr\"\n },\n extLang: {\n aao: [\"aao\", \"ar\"],\n abh: [\"abh\", \"ar\"],\n abv: [\"abv\", \"ar\"],\n acm: [\"acm\", \"ar\"],\n acq: [\"acq\", \"ar\"],\n acw: [\"acw\", \"ar\"],\n acx: [\"acx\", \"ar\"],\n acy: [\"acy\", \"ar\"],\n adf: [\"adf\", \"ar\"],\n ads: [\"ads\", \"sgn\"],\n aeb: [\"aeb\", \"ar\"],\n aec: [\"aec\", \"ar\"],\n aed: [\"aed\", \"sgn\"],\n aen: [\"aen\", \"sgn\"],\n afb: [\"afb\", \"ar\"],\n afg: [\"afg\", \"sgn\"],\n ajp: [\"ajp\", \"ar\"],\n apc: [\"apc\", \"ar\"],\n apd: [\"apd\", \"ar\"],\n arb: [\"arb\", \"ar\"],\n arq: [\"arq\", \"ar\"],\n ars: [\"ars\", \"ar\"],\n ary: [\"ary\", \"ar\"],\n arz: [\"arz\", \"ar\"],\n ase: [\"ase\", \"sgn\"],\n asf: [\"asf\", \"sgn\"],\n asp: [\"asp\", \"sgn\"],\n asq: [\"asq\", \"sgn\"],\n asw: [\"asw\", \"sgn\"],\n auz: [\"auz\", \"ar\"],\n avl: [\"avl\", \"ar\"],\n ayh: [\"ayh\", \"ar\"],\n ayl: [\"ayl\", \"ar\"],\n ayn: [\"ayn\", \"ar\"],\n ayp: [\"ayp\", \"ar\"],\n bbz: [\"bbz\", \"ar\"],\n bfi: [\"bfi\", \"sgn\"],\n bfk: [\"bfk\", \"sgn\"],\n bjn: [\"bjn\", \"ms\"],\n bog: [\"bog\", \"sgn\"],\n bqn: [\"bqn\", \"sgn\"],\n bqy: [\"bqy\", \"sgn\"],\n btj: [\"btj\", \"ms\"],\n bve: [\"bve\", \"ms\"],\n bvl: [\"bvl\", \"sgn\"],\n bvu: [\"bvu\", \"ms\"],\n bzs: [\"bzs\", \"sgn\"],\n cdo: [\"cdo\", \"zh\"],\n cds: [\"cds\", \"sgn\"],\n cjy: [\"cjy\", \"zh\"],\n cmn: [\"cmn\", \"zh\"],\n coa: [\"coa\", \"ms\"],\n cpx: [\"cpx\", \"zh\"],\n csc: [\"csc\", \"sgn\"],\n csd: [\"csd\", \"sgn\"],\n cse: [\"cse\", \"sgn\"],\n csf: [\"csf\", \"sgn\"],\n csg: [\"csg\", \"sgn\"],\n csl: [\"csl\", \"sgn\"],\n csn: [\"csn\", \"sgn\"],\n csq: [\"csq\", \"sgn\"],\n csr: [\"csr\", \"sgn\"],\n czh: [\"czh\", \"zh\"],\n czo: [\"czo\", \"zh\"],\n doq: [\"doq\", \"sgn\"],\n dse: [\"dse\", \"sgn\"],\n dsl: [\"dsl\", \"sgn\"],\n dup: [\"dup\", \"ms\"],\n ecs: [\"ecs\", \"sgn\"],\n esl: [\"esl\", \"sgn\"],\n esn: [\"esn\", \"sgn\"],\n eso: [\"eso\", \"sgn\"],\n eth: [\"eth\", \"sgn\"],\n fcs: [\"fcs\", \"sgn\"],\n fse: [\"fse\", \"sgn\"],\n fsl: [\"fsl\", \"sgn\"],\n fss: [\"fss\", \"sgn\"],\n gan: [\"gan\", \"zh\"],\n gds: [\"gds\", \"sgn\"],\n gom: [\"gom\", \"kok\"],\n gse: [\"gse\", \"sgn\"],\n gsg: [\"gsg\", \"sgn\"],\n gsm: [\"gsm\", \"sgn\"],\n gss: [\"gss\", \"sgn\"],\n gus: [\"gus\", \"sgn\"],\n hab: [\"hab\", \"sgn\"],\n haf: [\"haf\", \"sgn\"],\n hak: [\"hak\", \"zh\"],\n hds: [\"hds\", \"sgn\"],\n hji: [\"hji\", \"ms\"],\n hks: [\"hks\", \"sgn\"],\n hos: [\"hos\", \"sgn\"],\n hps: [\"hps\", \"sgn\"],\n hsh: [\"hsh\", \"sgn\"],\n hsl: [\"hsl\", \"sgn\"],\n hsn: [\"hsn\", \"zh\"],\n icl: [\"icl\", \"sgn\"],\n ils: [\"ils\", \"sgn\"],\n inl: [\"inl\", \"sgn\"],\n ins: [\"ins\", \"sgn\"],\n ise: [\"ise\", \"sgn\"],\n isg: [\"isg\", \"sgn\"],\n isr: [\"isr\", \"sgn\"],\n jak: [\"jak\", \"ms\"],\n jax: [\"jax\", \"ms\"],\n jcs: [\"jcs\", \"sgn\"],\n jhs: [\"jhs\", \"sgn\"],\n jls: [\"jls\", \"sgn\"],\n jos: [\"jos\", \"sgn\"],\n jsl: [\"jsl\", \"sgn\"],\n jus: [\"jus\", \"sgn\"],\n kgi: [\"kgi\", \"sgn\"],\n knn: [\"knn\", \"kok\"],\n kvb: [\"kvb\", \"ms\"],\n kvk: [\"kvk\", \"sgn\"],\n kvr: [\"kvr\", \"ms\"],\n kxd: [\"kxd\", \"ms\"],\n lbs: [\"lbs\", \"sgn\"],\n lce: [\"lce\", \"ms\"],\n lcf: [\"lcf\", \"ms\"],\n liw: [\"liw\", \"ms\"],\n lls: [\"lls\", \"sgn\"],\n lsg: [\"lsg\", \"sgn\"],\n lsl: [\"lsl\", \"sgn\"],\n lso: [\"lso\", \"sgn\"],\n lsp: [\"lsp\", \"sgn\"],\n lst: [\"lst\", \"sgn\"],\n lsy: [\"lsy\", \"sgn\"],\n ltg: [\"ltg\", \"lv\"],\n lvs: [\"lvs\", \"lv\"],\n lzh: [\"lzh\", \"zh\"],\n max: [\"max\", \"ms\"],\n mdl: [\"mdl\", \"sgn\"],\n meo: [\"meo\", \"ms\"],\n mfa: [\"mfa\", \"ms\"],\n mfb: [\"mfb\", \"ms\"],\n mfs: [\"mfs\", \"sgn\"],\n min: [\"min\", \"ms\"],\n mnp: [\"mnp\", \"zh\"],\n mqg: [\"mqg\", \"ms\"],\n mre: [\"mre\", \"sgn\"],\n msd: [\"msd\", \"sgn\"],\n msi: [\"msi\", \"ms\"],\n msr: [\"msr\", \"sgn\"],\n mui: [\"mui\", \"ms\"],\n mzc: [\"mzc\", \"sgn\"],\n mzg: [\"mzg\", \"sgn\"],\n mzy: [\"mzy\", \"sgn\"],\n nan: [\"nan\", \"zh\"],\n nbs: [\"nbs\", \"sgn\"],\n ncs: [\"ncs\", \"sgn\"],\n nsi: [\"nsi\", \"sgn\"],\n nsl: [\"nsl\", \"sgn\"],\n nsp: [\"nsp\", \"sgn\"],\n nsr: [\"nsr\", \"sgn\"],\n nzs: [\"nzs\", \"sgn\"],\n okl: [\"okl\", \"sgn\"],\n orn: [\"orn\", \"ms\"],\n ors: [\"ors\", \"ms\"],\n pel: [\"pel\", \"ms\"],\n pga: [\"pga\", \"ar\"],\n pks: [\"pks\", \"sgn\"],\n prl: [\"prl\", \"sgn\"],\n prz: [\"prz\", \"sgn\"],\n psc: [\"psc\", \"sgn\"],\n psd: [\"psd\", \"sgn\"],\n pse: [\"pse\", \"ms\"],\n psg: [\"psg\", \"sgn\"],\n psl: [\"psl\", \"sgn\"],\n pso: [\"pso\", \"sgn\"],\n psp: [\"psp\", \"sgn\"],\n psr: [\"psr\", \"sgn\"],\n pys: [\"pys\", \"sgn\"],\n rms: [\"rms\", \"sgn\"],\n rsi: [\"rsi\", \"sgn\"],\n rsl: [\"rsl\", \"sgn\"],\n sdl: [\"sdl\", \"sgn\"],\n sfb: [\"sfb\", \"sgn\"],\n sfs: [\"sfs\", \"sgn\"],\n sgg: [\"sgg\", \"sgn\"],\n sgx: [\"sgx\", \"sgn\"],\n shu: [\"shu\", \"ar\"],\n slf: [\"slf\", \"sgn\"],\n sls: [\"sls\", \"sgn\"],\n sqk: [\"sqk\", \"sgn\"],\n sqs: [\"sqs\", \"sgn\"],\n ssh: [\"ssh\", \"ar\"],\n ssp: [\"ssp\", \"sgn\"],\n ssr: [\"ssr\", \"sgn\"],\n svk: [\"svk\", \"sgn\"],\n swc: [\"swc\", \"sw\"],\n swh: [\"swh\", \"sw\"],\n swl: [\"swl\", \"sgn\"],\n syy: [\"syy\", \"sgn\"],\n tmw: [\"tmw\", \"ms\"],\n tse: [\"tse\", \"sgn\"],\n tsm: [\"tsm\", \"sgn\"],\n tsq: [\"tsq\", \"sgn\"],\n tss: [\"tss\", \"sgn\"],\n tsy: [\"tsy\", \"sgn\"],\n tza: [\"tza\", \"sgn\"],\n ugn: [\"ugn\", \"sgn\"],\n ugy: [\"ugy\", \"sgn\"],\n ukl: [\"ukl\", \"sgn\"],\n uks: [\"uks\", \"sgn\"],\n urk: [\"urk\", \"ms\"],\n uzn: [\"uzn\", \"uz\"],\n uzs: [\"uzs\", \"uz\"],\n vgt: [\"vgt\", \"sgn\"],\n vkk: [\"vkk\", \"ms\"],\n vkt: [\"vkt\", \"ms\"],\n vsi: [\"vsi\", \"sgn\"],\n vsl: [\"vsl\", \"sgn\"],\n vsv: [\"vsv\", \"sgn\"],\n wuu: [\"wuu\", \"zh\"],\n xki: [\"xki\", \"sgn\"],\n xml: [\"xml\", \"sgn\"],\n xmm: [\"xmm\", \"ms\"],\n xms: [\"xms\", \"sgn\"],\n yds: [\"yds\", \"sgn\"],\n ysl: [\"ysl\", \"sgn\"],\n yue: [\"yue\", \"zh\"],\n zib: [\"zib\", \"sgn\"],\n zlm: [\"zlm\", \"ms\"],\n zmi: [\"zmi\", \"ms\"],\n zsl: [\"zsl\", \"sgn\"],\n zsm: [\"zsm\", \"ms\"]\n }\n};\n\n/**\n * Convert only a-z to uppercase as per section 6.1 of the spec\n */\nfunction toLatinUpperCase(str) {\n var i = str.length;\n\n while (i--) {\n var ch = str.charAt(i);\n\n if (ch >= \"a\" && ch <= \"z\") str = str.slice(0, i) + ch.toUpperCase() + str.slice(i + 1);\n }\n\n return str;\n}\n\n/**\n * The IsStructurallyValidLanguageTag abstract operation verifies that the locale\n * argument (which must be a String value)\n *\n * - represents a well-formed BCP 47 language tag as specified in RFC 5646 section\n * 2.1, or successor,\n * - does not include duplicate variant subtags, and\n * - does not include duplicate singleton subtags.\n *\n * The abstract operation returns true if locale can be generated from the ABNF\n * grammar in section 2.1 of the RFC, starting with Language-Tag, and does not\n * contain duplicate variant or singleton subtags (other than as a private use\n * subtag). It returns false otherwise. Terminal value characters in the grammar are\n * interpreted as the Unicode equivalents of the ASCII octet values given.\n */\nfunction /* 6.2.2 */IsStructurallyValidLanguageTag(locale) {\n // represents a well-formed BCP 47 language tag as specified in RFC 5646\n if (!expBCP47Syntax.test(locale)) return false;\n\n // does not include duplicate variant subtags, and\n if (expVariantDupes.test(locale)) return false;\n\n // does not include duplicate singleton subtags.\n if (expSingletonDupes.test(locale)) return false;\n\n return true;\n}\n\n/**\n * The CanonicalizeLanguageTag abstract operation returns the canonical and case-\n * regularized form of the locale argument (which must be a String value that is\n * a structurally valid BCP 47 language tag as verified by the\n * IsStructurallyValidLanguageTag abstract operation). It takes the steps\n * specified in RFC 5646 section 4.5, or successor, to bring the language tag\n * into canonical form, and to regularize the case of the subtags, but does not\n * take the steps to bring a language tag into “extlang form” and to reorder\n * variant subtags.\n\n * The specifications for extensions to BCP 47 language tags, such as RFC 6067,\n * may include canonicalization rules for the extension subtag sequences they\n * define that go beyond the canonicalization rules of RFC 5646 section 4.5.\n * Implementations are allowed, but not required, to apply these additional rules.\n */\nfunction /* 6.2.3 */CanonicalizeLanguageTag(locale) {\n var match = void 0,\n parts = void 0;\n\n // A language tag is in 'canonical form' when the tag is well-formed\n // according to the rules in Sections 2.1 and 2.2\n\n // Section 2.1 says all subtags use lowercase...\n locale = locale.toLowerCase();\n\n // ...with 2 exceptions: 'two-letter and four-letter subtags that neither\n // appear at the start of the tag nor occur after singletons. Such two-letter\n // subtags are all uppercase (as in the tags \"en-CA-x-ca\" or \"sgn-BE-FR\") and\n // four-letter subtags are titlecase (as in the tag \"az-Latn-x-latn\").\n parts = locale.split('-');\n for (var i = 1, max = parts.length; i < max; i++) {\n // Two-letter subtags are all uppercase\n if (parts[i].length === 2) parts[i] = parts[i].toUpperCase();\n\n // Four-letter subtags are titlecase\n else if (parts[i].length === 4) parts[i] = parts[i].charAt(0).toUpperCase() + parts[i].slice(1);\n\n // Is it a singleton?\n else if (parts[i].length === 1 && parts[i] !== 'x') break;\n }\n locale = arrJoin.call(parts, '-');\n\n // The steps laid out in RFC 5646 section 4.5 are as follows:\n\n // 1. Extension sequences are ordered into case-insensitive ASCII order\n // by singleton subtag.\n if ((match = locale.match(expExtSequences)) && match.length > 1) {\n // The built-in sort() sorts by ASCII order, so use that\n match.sort();\n\n // Replace all extensions with the joined, sorted array\n locale = locale.replace(RegExp('(?:' + expExtSequences.source + ')+', 'i'), arrJoin.call(match, ''));\n }\n\n // 2. Redundant or grandfathered tags are replaced by their 'Preferred-\n // Value', if there is one.\n if (hop.call(redundantTags.tags, locale)) locale = redundantTags.tags[locale];\n\n // 3. Subtags are replaced by their 'Preferred-Value', if there is one.\n // For extlangs, the original primary language subtag is also\n // replaced if there is a primary language subtag in the 'Preferred-\n // Value'.\n parts = locale.split('-');\n\n for (var _i = 1, _max = parts.length; _i < _max; _i++) {\n if (hop.call(redundantTags.subtags, parts[_i])) parts[_i] = redundantTags.subtags[parts[_i]];else if (hop.call(redundantTags.extLang, parts[_i])) {\n parts[_i] = redundantTags.extLang[parts[_i]][0];\n\n // For extlang tags, the prefix needs to be removed if it is redundant\n if (_i === 1 && redundantTags.extLang[parts[1]][1] === parts[0]) {\n parts = arrSlice.call(parts, _i++);\n _max -= 1;\n }\n }\n }\n\n return arrJoin.call(parts, '-');\n}\n\n/**\n * The DefaultLocale abstract operation returns a String value representing the\n * structurally valid (6.2.2) and canonicalized (6.2.3) BCP 47 language tag for the\n * host environment’s current locale.\n */\nfunction /* 6.2.4 */DefaultLocale() {\n return defaultLocale;\n}\n\n// Sect 6.3 Currency Codes\n// =======================\n\nvar expCurrencyCode = /^[A-Z]{3}$/;\n\n/**\n * The IsWellFormedCurrencyCode abstract operation verifies that the currency argument\n * (after conversion to a String value) represents a well-formed 3-letter ISO currency\n * code. The following steps are taken:\n */\nfunction /* 6.3.1 */IsWellFormedCurrencyCode(currency) {\n // 1. Let `c` be ToString(currency)\n var c = String(currency);\n\n // 2. Let `normalized` be the result of mapping c to upper case as described\n // in 6.1.\n var normalized = toLatinUpperCase(c);\n\n // 3. If the string length of normalized is not 3, return false.\n // 4. If normalized contains any character that is not in the range \"A\" to \"Z\"\n // (U+0041 to U+005A), return false.\n if (expCurrencyCode.test(normalized) === false) return false;\n\n // 5. Return true\n return true;\n}\n\nvar expUnicodeExSeq = /-u(?:-[0-9a-z]{2,8})+/gi; // See `extension` below\n\nfunction /* 9.2.1 */CanonicalizeLocaleList(locales) {\n // The abstract operation CanonicalizeLocaleList takes the following steps:\n\n // 1. If locales is undefined, then a. Return a new empty List\n if (locales === undefined) return new List();\n\n // 2. Let seen be a new empty List.\n var seen = new List();\n\n // 3. If locales is a String value, then\n // a. Let locales be a new array created as if by the expression new\n // Array(locales) where Array is the standard built-in constructor with\n // that name and locales is the value of locales.\n locales = typeof locales === 'string' ? [locales] : locales;\n\n // 4. Let O be ToObject(locales).\n var O = toObject(locales);\n\n // 5. Let lenValue be the result of calling the [[Get]] internal method of\n // O with the argument \"length\".\n // 6. Let len be ToUint32(lenValue).\n var len = toLength(O.length);\n\n // 7. Let k be 0.\n var k = 0;\n\n // 8. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ToString(k).\n var Pk = String(k);\n\n // b. Let kPresent be the result of calling the [[HasProperty]] internal\n // method of O with argument Pk.\n var kPresent = Pk in O;\n\n // c. If kPresent is true, then\n if (kPresent) {\n // i. Let kValue be the result of calling the [[Get]] internal\n // method of O with argument Pk.\n var kValue = O[Pk];\n\n // ii. If the type of kValue is not String or Object, then throw a\n // TypeError exception.\n if (kValue === null || typeof kValue !== 'string' && (typeof kValue === \"undefined\" ? \"undefined\" : babelHelpers$1[\"typeof\"](kValue)) !== 'object') throw new TypeError('String or Object type expected');\n\n // iii. Let tag be ToString(kValue).\n var tag = String(kValue);\n\n // iv. If the result of calling the abstract operation\n // IsStructurallyValidLanguageTag (defined in 6.2.2), passing tag as\n // the argument, is false, then throw a RangeError exception.\n if (!IsStructurallyValidLanguageTag(tag)) throw new RangeError(\"'\" + tag + \"' is not a structurally valid language tag\");\n\n // v. Let tag be the result of calling the abstract operation\n // CanonicalizeLanguageTag (defined in 6.2.3), passing tag as the\n // argument.\n tag = CanonicalizeLanguageTag(tag);\n\n // vi. If tag is not an element of seen, then append tag as the last\n // element of seen.\n if (arrIndexOf.call(seen, tag) === -1) arrPush.call(seen, tag);\n }\n\n // d. Increase k by 1.\n k++;\n }\n\n // 9. Return seen.\n return seen;\n}\n\n/**\n * The BestAvailableLocale abstract operation compares the provided argument\n * locale, which must be a String value with a structurally valid and\n * canonicalized BCP 47 language tag, against the locales in availableLocales and\n * returns either the longest non-empty prefix of locale that is an element of\n * availableLocales, or undefined if there is no such element. It uses the\n * fallback mechanism of RFC 4647, section 3.4. The following steps are taken:\n */\nfunction /* 9.2.2 */BestAvailableLocale(availableLocales, locale) {\n // 1. Let candidate be locale\n var candidate = locale;\n\n // 2. Repeat\n while (candidate) {\n // a. If availableLocales contains an element equal to candidate, then return\n // candidate.\n if (arrIndexOf.call(availableLocales, candidate) > -1) return candidate;\n\n // b. Let pos be the character index of the last occurrence of \"-\"\n // (U+002D) within candidate. If that character does not occur, return\n // undefined.\n var pos = candidate.lastIndexOf('-');\n\n if (pos < 0) return;\n\n // c. If pos ≥ 2 and the character \"-\" occurs at index pos-2 of candidate,\n // then decrease pos by 2.\n if (pos >= 2 && candidate.charAt(pos - 2) === '-') pos -= 2;\n\n // d. Let candidate be the substring of candidate from position 0, inclusive,\n // to position pos, exclusive.\n candidate = candidate.substring(0, pos);\n }\n}\n\n/**\n * The LookupMatcher abstract operation compares requestedLocales, which must be\n * a List as returned by CanonicalizeLocaleList, against the locales in\n * availableLocales and determines the best available language to meet the\n * request. The following steps are taken:\n */\nfunction /* 9.2.3 */LookupMatcher(availableLocales, requestedLocales) {\n // 1. Let i be 0.\n var i = 0;\n\n // 2. Let len be the number of elements in requestedLocales.\n var len = requestedLocales.length;\n\n // 3. Let availableLocale be undefined.\n var availableLocale = void 0;\n\n var locale = void 0,\n noExtensionsLocale = void 0;\n\n // 4. Repeat while i < len and availableLocale is undefined:\n while (i < len && !availableLocale) {\n // a. Let locale be the element of requestedLocales at 0-origined list\n // position i.\n locale = requestedLocales[i];\n\n // b. Let noExtensionsLocale be the String value that is locale with all\n // Unicode locale extension sequences removed.\n noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');\n\n // c. Let availableLocale be the result of calling the\n // BestAvailableLocale abstract operation (defined in 9.2.2) with\n // arguments availableLocales and noExtensionsLocale.\n availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);\n\n // d. Increase i by 1.\n i++;\n }\n\n // 5. Let result be a new Record.\n var result = new Record();\n\n // 6. If availableLocale is not undefined, then\n if (availableLocale !== undefined) {\n // a. Set result.[[locale]] to availableLocale.\n result['[[locale]]'] = availableLocale;\n\n // b. If locale and noExtensionsLocale are not the same String value, then\n if (String(locale) !== String(noExtensionsLocale)) {\n // i. Let extension be the String value consisting of the first\n // substring of locale that is a Unicode locale extension sequence.\n var extension = locale.match(expUnicodeExSeq)[0];\n\n // ii. Let extensionIndex be the character position of the initial\n // \"-\" of the first Unicode locale extension sequence within locale.\n var extensionIndex = locale.indexOf('-u-');\n\n // iii. Set result.[[extension]] to extension.\n result['[[extension]]'] = extension;\n\n // iv. Set result.[[extensionIndex]] to extensionIndex.\n result['[[extensionIndex]]'] = extensionIndex;\n }\n }\n // 7. Else\n else\n // a. Set result.[[locale]] to the value returned by the DefaultLocale abstract\n // operation (defined in 6.2.4).\n result['[[locale]]'] = DefaultLocale();\n\n // 8. Return result\n return result;\n}\n\n/**\n * The BestFitMatcher abstract operation compares requestedLocales, which must be\n * a List as returned by CanonicalizeLocaleList, against the locales in\n * availableLocales and determines the best available language to meet the\n * request. The algorithm is implementation dependent, but should produce results\n * that a typical user of the requested locales would perceive as at least as\n * good as those produced by the LookupMatcher abstract operation. Options\n * specified through Unicode locale extension sequences must be ignored by the\n * algorithm. Information about such subsequences is returned separately.\n * The abstract operation returns a record with a [[locale]] field, whose value\n * is the language tag of the selected locale, which must be an element of\n * availableLocales. If the language tag of the request locale that led to the\n * selected locale contained a Unicode locale extension sequence, then the\n * returned record also contains an [[extension]] field whose value is the first\n * Unicode locale extension sequence, and an [[extensionIndex]] field whose value\n * is the index of the first Unicode locale extension sequence within the request\n * locale language tag.\n */\nfunction /* 9.2.4 */BestFitMatcher(availableLocales, requestedLocales) {\n return LookupMatcher(availableLocales, requestedLocales);\n}\n\n/**\n * The ResolveLocale abstract operation compares a BCP 47 language priority list\n * requestedLocales against the locales in availableLocales and determines the\n * best available language to meet the request. availableLocales and\n * requestedLocales must be provided as List values, options as a Record.\n */\nfunction /* 9.2.5 */ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData) {\n if (availableLocales.length === 0) {\n throw new ReferenceError('No locale data has been provided for this object yet.');\n }\n\n // The following steps are taken:\n // 1. Let matcher be the value of options.[[localeMatcher]].\n var matcher = options['[[localeMatcher]]'];\n\n var r = void 0;\n\n // 2. If matcher is \"lookup\", then\n if (matcher === 'lookup')\n // a. Let r be the result of calling the LookupMatcher abstract operation\n // (defined in 9.2.3) with arguments availableLocales and\n // requestedLocales.\n r = LookupMatcher(availableLocales, requestedLocales);\n\n // 3. Else\n else\n // a. Let r be the result of calling the BestFitMatcher abstract\n // operation (defined in 9.2.4) with arguments availableLocales and\n // requestedLocales.\n r = BestFitMatcher(availableLocales, requestedLocales);\n\n // 4. Let foundLocale be the value of r.[[locale]].\n var foundLocale = r['[[locale]]'];\n\n var extensionSubtags = void 0,\n extensionSubtagsLength = void 0;\n\n // 5. If r has an [[extension]] field, then\n if (hop.call(r, '[[extension]]')) {\n // a. Let extension be the value of r.[[extension]].\n var extension = r['[[extension]]'];\n // b. Let split be the standard built-in function object defined in ES5,\n // 15.5.4.14.\n var split = String.prototype.split;\n // c. Let extensionSubtags be the result of calling the [[Call]] internal\n // method of split with extension as the this value and an argument\n // list containing the single item \"-\".\n extensionSubtags = split.call(extension, '-');\n // d. Let extensionSubtagsLength be the result of calling the [[Get]]\n // internal method of extensionSubtags with argument \"length\".\n extensionSubtagsLength = extensionSubtags.length;\n }\n\n // 6. Let result be a new Record.\n var result = new Record();\n\n // 7. Set result.[[dataLocale]] to foundLocale.\n result['[[dataLocale]]'] = foundLocale;\n\n // 8. Let supportedExtension be \"-u\".\n var supportedExtension = '-u';\n // 9. Let i be 0.\n var i = 0;\n // 10. Let len be the result of calling the [[Get]] internal method of\n // relevantExtensionKeys with argument \"length\".\n var len = relevantExtensionKeys.length;\n\n // 11 Repeat while i < len:\n while (i < len) {\n // a. Let key be the result of calling the [[Get]] internal method of\n // relevantExtensionKeys with argument ToString(i).\n var key = relevantExtensionKeys[i];\n // b. Let foundLocaleData be the result of calling the [[Get]] internal\n // method of localeData with the argument foundLocale.\n var foundLocaleData = localeData[foundLocale];\n // c. Let keyLocaleData be the result of calling the [[Get]] internal\n // method of foundLocaleData with the argument key.\n var keyLocaleData = foundLocaleData[key];\n // d. Let value be the result of calling the [[Get]] internal method of\n // keyLocaleData with argument \"0\".\n var value = keyLocaleData['0'];\n // e. Let supportedExtensionAddition be \"\".\n var supportedExtensionAddition = '';\n // f. Let indexOf be the standard built-in function object defined in\n // ES5, 15.4.4.14.\n var indexOf = arrIndexOf;\n\n // g. If extensionSubtags is not undefined, then\n if (extensionSubtags !== undefined) {\n // i. Let keyPos be the result of calling the [[Call]] internal\n // method of indexOf with extensionSubtags as the this value and\n // an argument list containing the single item key.\n var keyPos = indexOf.call(extensionSubtags, key);\n\n // ii. If keyPos ≠ -1, then\n if (keyPos !== -1) {\n // 1. If keyPos + 1 < extensionSubtagsLength and the length of the\n // result of calling the [[Get]] internal method of\n // extensionSubtags with argument ToString(keyPos +1) is greater\n // than 2, then\n if (keyPos + 1 < extensionSubtagsLength && extensionSubtags[keyPos + 1].length > 2) {\n // a. Let requestedValue be the result of calling the [[Get]]\n // internal method of extensionSubtags with argument\n // ToString(keyPos + 1).\n var requestedValue = extensionSubtags[keyPos + 1];\n // b. Let valuePos be the result of calling the [[Call]]\n // internal method of indexOf with keyLocaleData as the\n // this value and an argument list containing the single\n // item requestedValue.\n var valuePos = indexOf.call(keyLocaleData, requestedValue);\n\n // c. If valuePos ≠ -1, then\n if (valuePos !== -1) {\n // i. Let value be requestedValue.\n value = requestedValue,\n // ii. Let supportedExtensionAddition be the\n // concatenation of \"-\", key, \"-\", and value.\n supportedExtensionAddition = '-' + key + '-' + value;\n }\n }\n // 2. Else\n else {\n // a. Let valuePos be the result of calling the [[Call]]\n // internal method of indexOf with keyLocaleData as the this\n // value and an argument list containing the single item\n // \"true\".\n var _valuePos = indexOf(keyLocaleData, 'true');\n\n // b. If valuePos ≠ -1, then\n if (_valuePos !== -1)\n // i. Let value be \"true\".\n value = 'true';\n }\n }\n }\n // h. If options has a field [[]], then\n if (hop.call(options, '[[' + key + ']]')) {\n // i. Let optionsValue be the value of options.[[]].\n var optionsValue = options['[[' + key + ']]'];\n\n // ii. If the result of calling the [[Call]] internal method of indexOf\n // with keyLocaleData as the this value and an argument list\n // containing the single item optionsValue is not -1, then\n if (indexOf.call(keyLocaleData, optionsValue) !== -1) {\n // 1. If optionsValue is not equal to value, then\n if (optionsValue !== value) {\n // a. Let value be optionsValue.\n value = optionsValue;\n // b. Let supportedExtensionAddition be \"\".\n supportedExtensionAddition = '';\n }\n }\n }\n // i. Set result.[[]] to value.\n result['[[' + key + ']]'] = value;\n\n // j. Append supportedExtensionAddition to supportedExtension.\n supportedExtension += supportedExtensionAddition;\n\n // k. Increase i by 1.\n i++;\n }\n // 12. If the length of supportedExtension is greater than 2, then\n if (supportedExtension.length > 2) {\n // a.\n var privateIndex = foundLocale.indexOf(\"-x-\");\n // b.\n if (privateIndex === -1) {\n // i.\n foundLocale = foundLocale + supportedExtension;\n }\n // c.\n else {\n // i.\n var preExtension = foundLocale.substring(0, privateIndex);\n // ii.\n var postExtension = foundLocale.substring(privateIndex);\n // iii.\n foundLocale = preExtension + supportedExtension + postExtension;\n }\n // d. asserting - skipping\n // e.\n foundLocale = CanonicalizeLanguageTag(foundLocale);\n }\n // 13. Set result.[[locale]] to foundLocale.\n result['[[locale]]'] = foundLocale;\n\n // 14. Return result.\n return result;\n}\n\n/**\n * The LookupSupportedLocales abstract operation returns the subset of the\n * provided BCP 47 language priority list requestedLocales for which\n * availableLocales has a matching locale when using the BCP 47 Lookup algorithm.\n * Locales appear in the same order in the returned list as in requestedLocales.\n * The following steps are taken:\n */\nfunction /* 9.2.6 */LookupSupportedLocales(availableLocales, requestedLocales) {\n // 1. Let len be the number of elements in requestedLocales.\n var len = requestedLocales.length;\n // 2. Let subset be a new empty List.\n var subset = new List();\n // 3. Let k be 0.\n var k = 0;\n\n // 4. Repeat while k < len\n while (k < len) {\n // a. Let locale be the element of requestedLocales at 0-origined list\n // position k.\n var locale = requestedLocales[k];\n // b. Let noExtensionsLocale be the String value that is locale with all\n // Unicode locale extension sequences removed.\n var noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');\n // c. Let availableLocale be the result of calling the\n // BestAvailableLocale abstract operation (defined in 9.2.2) with\n // arguments availableLocales and noExtensionsLocale.\n var availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);\n\n // d. If availableLocale is not undefined, then append locale to the end of\n // subset.\n if (availableLocale !== undefined) arrPush.call(subset, locale);\n\n // e. Increment k by 1.\n k++;\n }\n\n // 5. Let subsetArray be a new Array object whose elements are the same\n // values in the same order as the elements of subset.\n var subsetArray = arrSlice.call(subset);\n\n // 6. Return subsetArray.\n return subsetArray;\n}\n\n/**\n * The BestFitSupportedLocales abstract operation returns the subset of the\n * provided BCP 47 language priority list requestedLocales for which\n * availableLocales has a matching locale when using the Best Fit Matcher\n * algorithm. Locales appear in the same order in the returned list as in\n * requestedLocales. The steps taken are implementation dependent.\n */\nfunction /*9.2.7 */BestFitSupportedLocales(availableLocales, requestedLocales) {\n // ###TODO: implement this function as described by the specification###\n return LookupSupportedLocales(availableLocales, requestedLocales);\n}\n\n/**\n * The SupportedLocales abstract operation returns the subset of the provided BCP\n * 47 language priority list requestedLocales for which availableLocales has a\n * matching locale. Two algorithms are available to match the locales: the Lookup\n * algorithm described in RFC 4647 section 3.4, and an implementation dependent\n * best-fit algorithm. Locales appear in the same order in the returned list as\n * in requestedLocales. The following steps are taken:\n */\nfunction /*9.2.8 */SupportedLocales(availableLocales, requestedLocales, options) {\n var matcher = void 0,\n subset = void 0;\n\n // 1. If options is not undefined, then\n if (options !== undefined) {\n // a. Let options be ToObject(options).\n options = new Record(toObject(options));\n // b. Let matcher be the result of calling the [[Get]] internal method of\n // options with argument \"localeMatcher\".\n matcher = options.localeMatcher;\n\n // c. If matcher is not undefined, then\n if (matcher !== undefined) {\n // i. Let matcher be ToString(matcher).\n matcher = String(matcher);\n\n // ii. If matcher is not \"lookup\" or \"best fit\", then throw a RangeError\n // exception.\n if (matcher !== 'lookup' && matcher !== 'best fit') throw new RangeError('matcher should be \"lookup\" or \"best fit\"');\n }\n }\n // 2. If matcher is undefined or \"best fit\", then\n if (matcher === undefined || matcher === 'best fit')\n // a. Let subset be the result of calling the BestFitSupportedLocales\n // abstract operation (defined in 9.2.7) with arguments\n // availableLocales and requestedLocales.\n subset = BestFitSupportedLocales(availableLocales, requestedLocales);\n // 3. Else\n else\n // a. Let subset be the result of calling the LookupSupportedLocales\n // abstract operation (defined in 9.2.6) with arguments\n // availableLocales and requestedLocales.\n subset = LookupSupportedLocales(availableLocales, requestedLocales);\n\n // 4. For each named own property name P of subset,\n for (var P in subset) {\n if (!hop.call(subset, P)) continue;\n\n // a. Let desc be the result of calling the [[GetOwnProperty]] internal\n // method of subset with P.\n // b. Set desc.[[Writable]] to false.\n // c. Set desc.[[Configurable]] to false.\n // d. Call the [[DefineOwnProperty]] internal method of subset with P, desc,\n // and true as arguments.\n defineProperty(subset, P, {\n writable: false, configurable: false, value: subset[P]\n });\n }\n // \"Freeze\" the array so no new elements can be added\n defineProperty(subset, 'length', { writable: false });\n\n // 5. Return subset\n return subset;\n}\n\n/**\n * The GetOption abstract operation extracts the value of the property named\n * property from the provided options object, converts it to the required type,\n * checks whether it is one of a List of allowed values, and fills in a fallback\n * value if necessary.\n */\nfunction /*9.2.9 */GetOption(options, property, type, values, fallback) {\n // 1. Let value be the result of calling the [[Get]] internal method of\n // options with argument property.\n var value = options[property];\n\n // 2. If value is not undefined, then\n if (value !== undefined) {\n // a. Assert: type is \"boolean\" or \"string\".\n // b. If type is \"boolean\", then let value be ToBoolean(value).\n // c. If type is \"string\", then let value be ToString(value).\n value = type === 'boolean' ? Boolean(value) : type === 'string' ? String(value) : value;\n\n // d. If values is not undefined, then\n if (values !== undefined) {\n // i. If values does not contain an element equal to value, then throw a\n // RangeError exception.\n if (arrIndexOf.call(values, value) === -1) throw new RangeError(\"'\" + value + \"' is not an allowed value for `\" + property + '`');\n }\n\n // e. Return value.\n return value;\n }\n // Else return fallback.\n return fallback;\n}\n\n/**\n * The GetNumberOption abstract operation extracts a property value from the\n * provided options object, converts it to a Number value, checks whether it is\n * in the allowed range, and fills in a fallback value if necessary.\n */\nfunction /* 9.2.10 */GetNumberOption(options, property, minimum, maximum, fallback) {\n // 1. Let value be the result of calling the [[Get]] internal method of\n // options with argument property.\n var value = options[property];\n\n // 2. If value is not undefined, then\n if (value !== undefined) {\n // a. Let value be ToNumber(value).\n value = Number(value);\n\n // b. If value is NaN or less than minimum or greater than maximum, throw a\n // RangeError exception.\n if (isNaN(value) || value < minimum || value > maximum) throw new RangeError('Value is not a number or outside accepted range');\n\n // c. Return floor(value).\n return Math.floor(value);\n }\n // 3. Else return fallback.\n return fallback;\n}\n\n// 8 The Intl Object\nvar Intl = {};\n\n// 8.2 Function Properties of the Intl Object\n\n// 8.2.1\n// @spec[tc39/ecma402/master/spec/intl.html]\n// @clause[sec-intl.getcanonicallocales]\nfunction getCanonicalLocales(locales) {\n // 1. Let ll be ? CanonicalizeLocaleList(locales).\n var ll = CanonicalizeLocaleList(locales);\n // 2. Return CreateArrayFromList(ll).\n {\n var result = [];\n\n var len = ll.length;\n var k = 0;\n\n while (k < len) {\n result[k] = ll[k];\n k++;\n }\n return result;\n }\n}\n\nObject.defineProperty(Intl, 'getCanonicalLocales', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: getCanonicalLocales\n});\n\n// Currency minor units output from get-4217 grunt task, formatted\nvar currencyMinorUnits = {\n BHD: 3, BYR: 0, XOF: 0, BIF: 0, XAF: 0, CLF: 4, CLP: 0, KMF: 0, DJF: 0,\n XPF: 0, GNF: 0, ISK: 0, IQD: 3, JPY: 0, JOD: 3, KRW: 0, KWD: 3, LYD: 3,\n OMR: 3, PYG: 0, RWF: 0, TND: 3, UGX: 0, UYI: 0, VUV: 0, VND: 0\n};\n\n// Define the NumberFormat constructor internally so it cannot be tainted\nfunction NumberFormatConstructor() {\n var locales = arguments[0];\n var options = arguments[1];\n\n if (!this || this === Intl) {\n return new Intl.NumberFormat(locales, options);\n }\n\n return InitializeNumberFormat(toObject(this), locales, options);\n}\n\ndefineProperty(Intl, 'NumberFormat', {\n configurable: true,\n writable: true,\n value: NumberFormatConstructor\n});\n\n// Must explicitly set prototypes as unwritable\ndefineProperty(Intl.NumberFormat, 'prototype', {\n writable: false\n});\n\n/**\n * The abstract operation InitializeNumberFormat accepts the arguments\n * numberFormat (which must be an object), locales, and options. It initializes\n * numberFormat as a NumberFormat object.\n */\nfunction /*11.1.1.1 */InitializeNumberFormat(numberFormat, locales, options) {\n // This will be a internal properties object if we're not already initialized\n var internal = getInternalProperties(numberFormat);\n\n // Create an object whose props can be used to restore the values of RegExp props\n var regexpRestore = createRegExpRestore();\n\n // 1. If numberFormat has an [[initializedIntlObject]] internal property with\n // value true, throw a TypeError exception.\n if (internal['[[initializedIntlObject]]'] === true) throw new TypeError('`this` object has already been initialized as an Intl object');\n\n // Need this to access the `internal` object\n defineProperty(numberFormat, '__getInternalProperties', {\n value: function value() {\n // NOTE: Non-standard, for internal use only\n if (arguments[0] === secret) return internal;\n }\n });\n\n // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.\n internal['[[initializedIntlObject]]'] = true;\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n var requestedLocales = CanonicalizeLocaleList(locales);\n\n // 4. If options is undefined, then\n if (options === undefined)\n // a. Let options be the result of creating a new object as if by the\n // expression new Object() where Object is the standard built-in constructor\n // with that name.\n options = {};\n\n // 5. Else\n else\n // a. Let options be ToObject(options).\n options = toObject(options);\n\n // 6. Let opt be a new Record.\n var opt = new Record(),\n\n\n // 7. Let matcher be the result of calling the GetOption abstract operation\n // (defined in 9.2.9) with the arguments options, \"localeMatcher\", \"string\",\n // a List containing the two String values \"lookup\" and \"best fit\", and\n // \"best fit\".\n matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');\n\n // 8. Set opt.[[localeMatcher]] to matcher.\n opt['[[localeMatcher]]'] = matcher;\n\n // 9. Let NumberFormat be the standard built-in object that is the initial value\n // of Intl.NumberFormat.\n // 10. Let localeData be the value of the [[localeData]] internal property of\n // NumberFormat.\n var localeData = internals.NumberFormat['[[localeData]]'];\n\n // 11. Let r be the result of calling the ResolveLocale abstract operation\n // (defined in 9.2.5) with the [[availableLocales]] internal property of\n // NumberFormat, requestedLocales, opt, the [[relevantExtensionKeys]]\n // internal property of NumberFormat, and localeData.\n var r = ResolveLocale(internals.NumberFormat['[[availableLocales]]'], requestedLocales, opt, internals.NumberFormat['[[relevantExtensionKeys]]'], localeData);\n\n // 12. Set the [[locale]] internal property of numberFormat to the value of\n // r.[[locale]].\n internal['[[locale]]'] = r['[[locale]]'];\n\n // 13. Set the [[numberingSystem]] internal property of numberFormat to the value\n // of r.[[nu]].\n internal['[[numberingSystem]]'] = r['[[nu]]'];\n\n // The specification doesn't tell us to do this, but it's helpful later on\n internal['[[dataLocale]]'] = r['[[dataLocale]]'];\n\n // 14. Let dataLocale be the value of r.[[dataLocale]].\n var dataLocale = r['[[dataLocale]]'];\n\n // 15. Let s be the result of calling the GetOption abstract operation with the\n // arguments options, \"style\", \"string\", a List containing the three String\n // values \"decimal\", \"percent\", and \"currency\", and \"decimal\".\n var s = GetOption(options, 'style', 'string', new List('decimal', 'percent', 'currency'), 'decimal');\n\n // 16. Set the [[style]] internal property of numberFormat to s.\n internal['[[style]]'] = s;\n\n // 17. Let c be the result of calling the GetOption abstract operation with the\n // arguments options, \"currency\", \"string\", undefined, and undefined.\n var c = GetOption(options, 'currency', 'string');\n\n // 18. If c is not undefined and the result of calling the\n // IsWellFormedCurrencyCode abstract operation (defined in 6.3.1) with\n // argument c is false, then throw a RangeError exception.\n if (c !== undefined && !IsWellFormedCurrencyCode(c)) throw new RangeError(\"'\" + c + \"' is not a valid currency code\");\n\n // 19. If s is \"currency\" and c is undefined, throw a TypeError exception.\n if (s === 'currency' && c === undefined) throw new TypeError('Currency code is required when style is currency');\n\n var cDigits = void 0;\n\n // 20. If s is \"currency\", then\n if (s === 'currency') {\n // a. Let c be the result of converting c to upper case as specified in 6.1.\n c = c.toUpperCase();\n\n // b. Set the [[currency]] internal property of numberFormat to c.\n internal['[[currency]]'] = c;\n\n // c. Let cDigits be the result of calling the CurrencyDigits abstract\n // operation (defined below) with argument c.\n cDigits = CurrencyDigits(c);\n }\n\n // 21. Let cd be the result of calling the GetOption abstract operation with the\n // arguments options, \"currencyDisplay\", \"string\", a List containing the\n // three String values \"code\", \"symbol\", and \"name\", and \"symbol\".\n var cd = GetOption(options, 'currencyDisplay', 'string', new List('code', 'symbol', 'name'), 'symbol');\n\n // 22. If s is \"currency\", then set the [[currencyDisplay]] internal property of\n // numberFormat to cd.\n if (s === 'currency') internal['[[currencyDisplay]]'] = cd;\n\n // 23. Let mnid be the result of calling the GetNumberOption abstract operation\n // (defined in 9.2.10) with arguments options, \"minimumIntegerDigits\", 1, 21,\n // and 1.\n var mnid = GetNumberOption(options, 'minimumIntegerDigits', 1, 21, 1);\n\n // 24. Set the [[minimumIntegerDigits]] internal property of numberFormat to mnid.\n internal['[[minimumIntegerDigits]]'] = mnid;\n\n // 25. If s is \"currency\", then let mnfdDefault be cDigits; else let mnfdDefault\n // be 0.\n var mnfdDefault = s === 'currency' ? cDigits : 0;\n\n // 26. Let mnfd be the result of calling the GetNumberOption abstract operation\n // with arguments options, \"minimumFractionDigits\", 0, 20, and mnfdDefault.\n var mnfd = GetNumberOption(options, 'minimumFractionDigits', 0, 20, mnfdDefault);\n\n // 27. Set the [[minimumFractionDigits]] internal property of numberFormat to mnfd.\n internal['[[minimumFractionDigits]]'] = mnfd;\n\n // 28. If s is \"currency\", then let mxfdDefault be max(mnfd, cDigits); else if s\n // is \"percent\", then let mxfdDefault be max(mnfd, 0); else let mxfdDefault\n // be max(mnfd, 3).\n var mxfdDefault = s === 'currency' ? Math.max(mnfd, cDigits) : s === 'percent' ? Math.max(mnfd, 0) : Math.max(mnfd, 3);\n\n // 29. Let mxfd be the result of calling the GetNumberOption abstract operation\n // with arguments options, \"maximumFractionDigits\", mnfd, 20, and mxfdDefault.\n var mxfd = GetNumberOption(options, 'maximumFractionDigits', mnfd, 20, mxfdDefault);\n\n // 30. Set the [[maximumFractionDigits]] internal property of numberFormat to mxfd.\n internal['[[maximumFractionDigits]]'] = mxfd;\n\n // 31. Let mnsd be the result of calling the [[Get]] internal method of options\n // with argument \"minimumSignificantDigits\".\n var mnsd = options.minimumSignificantDigits;\n\n // 32. Let mxsd be the result of calling the [[Get]] internal method of options\n // with argument \"maximumSignificantDigits\".\n var mxsd = options.maximumSignificantDigits;\n\n // 33. If mnsd is not undefined or mxsd is not undefined, then:\n if (mnsd !== undefined || mxsd !== undefined) {\n // a. Let mnsd be the result of calling the GetNumberOption abstract\n // operation with arguments options, \"minimumSignificantDigits\", 1, 21,\n // and 1.\n mnsd = GetNumberOption(options, 'minimumSignificantDigits', 1, 21, 1);\n\n // b. Let mxsd be the result of calling the GetNumberOption abstract\n // operation with arguments options, \"maximumSignificantDigits\", mnsd,\n // 21, and 21.\n mxsd = GetNumberOption(options, 'maximumSignificantDigits', mnsd, 21, 21);\n\n // c. Set the [[minimumSignificantDigits]] internal property of numberFormat\n // to mnsd, and the [[maximumSignificantDigits]] internal property of\n // numberFormat to mxsd.\n internal['[[minimumSignificantDigits]]'] = mnsd;\n internal['[[maximumSignificantDigits]]'] = mxsd;\n }\n // 34. Let g be the result of calling the GetOption abstract operation with the\n // arguments options, \"useGrouping\", \"boolean\", undefined, and true.\n var g = GetOption(options, 'useGrouping', 'boolean', undefined, true);\n\n // 35. Set the [[useGrouping]] internal property of numberFormat to g.\n internal['[[useGrouping]]'] = g;\n\n // 36. Let dataLocaleData be the result of calling the [[Get]] internal method of\n // localeData with argument dataLocale.\n var dataLocaleData = localeData[dataLocale];\n\n // 37. Let patterns be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"patterns\".\n var patterns = dataLocaleData.patterns;\n\n // 38. Assert: patterns is an object (see 11.2.3)\n\n // 39. Let stylePatterns be the result of calling the [[Get]] internal method of\n // patterns with argument s.\n var stylePatterns = patterns[s];\n\n // 40. Set the [[positivePattern]] internal property of numberFormat to the\n // result of calling the [[Get]] internal method of stylePatterns with the\n // argument \"positivePattern\".\n internal['[[positivePattern]]'] = stylePatterns.positivePattern;\n\n // 41. Set the [[negativePattern]] internal property of numberFormat to the\n // result of calling the [[Get]] internal method of stylePatterns with the\n // argument \"negativePattern\".\n internal['[[negativePattern]]'] = stylePatterns.negativePattern;\n\n // 42. Set the [[boundFormat]] internal property of numberFormat to undefined.\n internal['[[boundFormat]]'] = undefined;\n\n // 43. Set the [[initializedNumberFormat]] internal property of numberFormat to\n // true.\n internal['[[initializedNumberFormat]]'] = true;\n\n // In ES3, we need to pre-bind the format() function\n if (es3) numberFormat.format = GetFormatNumber.call(numberFormat);\n\n // Restore the RegExp properties\n regexpRestore();\n\n // Return the newly initialised object\n return numberFormat;\n}\n\nfunction CurrencyDigits(currency) {\n // When the CurrencyDigits abstract operation is called with an argument currency\n // (which must be an upper case String value), the following steps are taken:\n\n // 1. If the ISO 4217 currency and funds code list contains currency as an\n // alphabetic code, then return the minor unit value corresponding to the\n // currency from the list; else return 2.\n return currencyMinorUnits[currency] !== undefined ? currencyMinorUnits[currency] : 2;\n}\n\n/* 11.2.3 */internals.NumberFormat = {\n '[[availableLocales]]': [],\n '[[relevantExtensionKeys]]': ['nu'],\n '[[localeData]]': {}\n};\n\n/**\n * When the supportedLocalesOf method of Intl.NumberFormat is called, the\n * following steps are taken:\n */\n/* 11.2.2 */\ndefineProperty(Intl.NumberFormat, 'supportedLocalesOf', {\n configurable: true,\n writable: true,\n value: fnBind.call(function (locales) {\n // Bound functions only have the `this` value altered if being used as a constructor,\n // this lets us imitate a native function that has no constructor\n if (!hop.call(this, '[[availableLocales]]')) throw new TypeError('supportedLocalesOf() is not a constructor');\n\n // Create an object whose props can be used to restore the values of RegExp props\n var regexpRestore = createRegExpRestore(),\n\n\n // 1. If options is not provided, then let options be undefined.\n options = arguments[1],\n\n\n // 2. Let availableLocales be the value of the [[availableLocales]] internal\n // property of the standard built-in object that is the initial value of\n // Intl.NumberFormat.\n\n availableLocales = this['[[availableLocales]]'],\n\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n requestedLocales = CanonicalizeLocaleList(locales);\n\n // Restore the RegExp properties\n regexpRestore();\n\n // 4. Return the result of calling the SupportedLocales abstract operation\n // (defined in 9.2.8) with arguments availableLocales, requestedLocales,\n // and options.\n return SupportedLocales(availableLocales, requestedLocales, options);\n }, internals.NumberFormat)\n});\n\n/**\n * This named accessor property returns a function that formats a number\n * according to the effective locale and the formatting options of this\n * NumberFormat object.\n */\n/* 11.3.2 */defineProperty(Intl.NumberFormat.prototype, 'format', {\n configurable: true,\n get: GetFormatNumber\n});\n\nfunction GetFormatNumber() {\n var internal = this !== null && babelHelpers$1[\"typeof\"](this) === 'object' && getInternalProperties(this);\n\n // Satisfy test 11.3_b\n if (!internal || !internal['[[initializedNumberFormat]]']) throw new TypeError('`this` value for format() is not an initialized Intl.NumberFormat object.');\n\n // The value of the [[Get]] attribute is a function that takes the following\n // steps:\n\n // 1. If the [[boundFormat]] internal property of this NumberFormat object\n // is undefined, then:\n if (internal['[[boundFormat]]'] === undefined) {\n // a. Let F be a Function object, with internal properties set as\n // specified for built-in functions in ES5, 15, or successor, and the\n // length property set to 1, that takes the argument value and\n // performs the following steps:\n var F = function F(value) {\n // i. If value is not provided, then let value be undefined.\n // ii. Let x be ToNumber(value).\n // iii. Return the result of calling the FormatNumber abstract\n // operation (defined below) with arguments this and x.\n return FormatNumber(this, /* x = */Number(value));\n };\n\n // b. Let bind be the standard built-in function object defined in ES5,\n // 15.3.4.5.\n // c. Let bf be the result of calling the [[Call]] internal method of\n // bind with F as the this value and an argument list containing\n // the single item this.\n var bf = fnBind.call(F, this);\n\n // d. Set the [[boundFormat]] internal property of this NumberFormat\n // object to bf.\n internal['[[boundFormat]]'] = bf;\n }\n // Return the value of the [[boundFormat]] internal property of this\n // NumberFormat object.\n return internal['[[boundFormat]]'];\n}\n\nfunction formatToParts() {\n var value = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0];\n\n var internal = this !== null && babelHelpers$1[\"typeof\"](this) === 'object' && getInternalProperties(this);\n if (!internal || !internal['[[initializedNumberFormat]]']) throw new TypeError('`this` value for formatToParts() is not an initialized Intl.NumberFormat object.');\n\n var x = Number(value);\n return FormatNumberToParts(this, x);\n}\n\nObject.defineProperty(Intl.NumberFormat.prototype, 'formatToParts', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: formatToParts\n});\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-formatnumbertoparts]\n */\nfunction FormatNumberToParts(numberFormat, x) {\n // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).\n var parts = PartitionNumberPattern(numberFormat, x);\n // 2. Let result be ArrayCreate(0).\n var result = [];\n // 3. Let n be 0.\n var n = 0;\n // 4. For each part in parts, do:\n for (var i = 0; parts.length > i; i++) {\n var part = parts[i];\n // a. Let O be ObjectCreate(%ObjectPrototype%).\n var O = {};\n // a. Perform ? CreateDataPropertyOrThrow(O, \"type\", part.[[type]]).\n O.type = part['[[type]]'];\n // a. Perform ? CreateDataPropertyOrThrow(O, \"value\", part.[[value]]).\n O.value = part['[[value]]'];\n // a. Perform ? CreateDataPropertyOrThrow(result, ? ToString(n), O).\n result[n] = O;\n // a. Increment n by 1.\n n += 1;\n }\n // 5. Return result.\n return result;\n}\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-partitionnumberpattern]\n */\nfunction PartitionNumberPattern(numberFormat, x) {\n\n var internal = getInternalProperties(numberFormat),\n locale = internal['[[dataLocale]]'],\n nums = internal['[[numberingSystem]]'],\n data = internals.NumberFormat['[[localeData]]'][locale],\n ild = data.symbols[nums] || data.symbols.latn,\n pattern = void 0;\n\n // 1. If x is not NaN and x < 0, then:\n if (!isNaN(x) && x < 0) {\n // a. Let x be -x.\n x = -x;\n // a. Let pattern be the value of numberFormat.[[negativePattern]].\n pattern = internal['[[negativePattern]]'];\n }\n // 2. Else,\n else {\n // a. Let pattern be the value of numberFormat.[[positivePattern]].\n pattern = internal['[[positivePattern]]'];\n }\n // 3. Let result be a new empty List.\n var result = new List();\n // 4. Let beginIndex be Call(%StringProto_indexOf%, pattern, \"{\", 0).\n var beginIndex = pattern.indexOf('{', 0);\n // 5. Let endIndex be 0.\n var endIndex = 0;\n // 6. Let nextIndex be 0.\n var nextIndex = 0;\n // 7. Let length be the number of code units in pattern.\n var length = pattern.length;\n // 8. Repeat while beginIndex is an integer index into pattern:\n while (beginIndex > -1 && beginIndex < length) {\n // a. Set endIndex to Call(%StringProto_indexOf%, pattern, \"}\", beginIndex)\n endIndex = pattern.indexOf('}', beginIndex);\n // a. If endIndex = -1, throw new Error exception.\n if (endIndex === -1) throw new Error();\n // a. If beginIndex is greater than nextIndex, then:\n if (beginIndex > nextIndex) {\n // i. Let literal be a substring of pattern from position nextIndex, inclusive, to position beginIndex, exclusive.\n var literal = pattern.substring(nextIndex, beginIndex);\n // ii. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // a. Let p be the substring of pattern from position beginIndex, exclusive, to position endIndex, exclusive.\n var p = pattern.substring(beginIndex + 1, endIndex);\n // a. If p is equal \"number\", then:\n if (p === \"number\") {\n // i. If x is NaN,\n if (isNaN(x)) {\n // 1. Let n be an ILD String value indicating the NaN value.\n var n = ild.nan;\n // 2. Add new part record { [[type]]: \"nan\", [[value]]: n } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'nan', '[[value]]': n });\n }\n // ii. Else if isFinite(x) is false,\n else if (!isFinite(x)) {\n // 1. Let n be an ILD String value indicating infinity.\n var _n = ild.infinity;\n // 2. Add new part record { [[type]]: \"infinity\", [[value]]: n } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'infinity', '[[value]]': _n });\n }\n // iii. Else,\n else {\n // 1. If the value of numberFormat.[[style]] is \"percent\" and isFinite(x), let x be 100 × x.\n if (internal['[[style]]'] === 'percent' && isFinite(x)) x *= 100;\n\n var _n2 = void 0;\n // 2. If the numberFormat.[[minimumSignificantDigits]] and numberFormat.[[maximumSignificantDigits]] are present, then\n if (hop.call(internal, '[[minimumSignificantDigits]]') && hop.call(internal, '[[maximumSignificantDigits]]')) {\n // a. Let n be ToRawPrecision(x, numberFormat.[[minimumSignificantDigits]], numberFormat.[[maximumSignificantDigits]]).\n _n2 = ToRawPrecision(x, internal['[[minimumSignificantDigits]]'], internal['[[maximumSignificantDigits]]']);\n }\n // 3. Else,\n else {\n // a. Let n be ToRawFixed(x, numberFormat.[[minimumIntegerDigits]], numberFormat.[[minimumFractionDigits]], numberFormat.[[maximumFractionDigits]]).\n _n2 = ToRawFixed(x, internal['[[minimumIntegerDigits]]'], internal['[[minimumFractionDigits]]'], internal['[[maximumFractionDigits]]']);\n }\n // 4. If the value of the numberFormat.[[numberingSystem]] matches one of the values in the \"Numbering System\" column of Table 2 below, then\n if (numSys[nums]) {\n (function () {\n // a. Let digits be an array whose 10 String valued elements are the UTF-16 string representations of the 10 digits specified in the \"Digits\" column of the matching row in Table 2.\n var digits = numSys[nums];\n // a. Replace each digit in n with the value of digits[digit].\n _n2 = String(_n2).replace(/\\d/g, function (digit) {\n return digits[digit];\n });\n })();\n }\n // 5. Else use an implementation dependent algorithm to map n to the appropriate representation of n in the given numbering system.\n else _n2 = String(_n2); // ###TODO###\n\n var integer = void 0;\n var fraction = void 0;\n // 6. Let decimalSepIndex be Call(%StringProto_indexOf%, n, \".\", 0).\n var decimalSepIndex = _n2.indexOf('.', 0);\n // 7. If decimalSepIndex > 0, then:\n if (decimalSepIndex > 0) {\n // a. Let integer be the substring of n from position 0, inclusive, to position decimalSepIndex, exclusive.\n integer = _n2.substring(0, decimalSepIndex);\n // a. Let fraction be the substring of n from position decimalSepIndex, exclusive, to the end of n.\n fraction = _n2.substring(decimalSepIndex + 1, decimalSepIndex.length);\n }\n // 8. Else:\n else {\n // a. Let integer be n.\n integer = _n2;\n // a. Let fraction be undefined.\n fraction = undefined;\n }\n // 9. If the value of the numberFormat.[[useGrouping]] is true,\n if (internal['[[useGrouping]]'] === true) {\n // a. Let groupSepSymbol be the ILND String representing the grouping separator.\n var groupSepSymbol = ild.group;\n // a. Let groups be a List whose elements are, in left to right order, the substrings defined by ILND set of locations within the integer.\n var groups = [];\n // ----> implementation:\n // Primary group represents the group closest to the decimal\n var pgSize = data.patterns.primaryGroupSize || 3;\n // Secondary group is every other group\n var sgSize = data.patterns.secondaryGroupSize || pgSize;\n // Group only if necessary\n if (integer.length > pgSize) {\n // Index of the primary grouping separator\n var end = integer.length - pgSize;\n // Starting index for our loop\n var idx = end % sgSize;\n var start = integer.slice(0, idx);\n if (start.length) arrPush.call(groups, start);\n // Loop to separate into secondary grouping digits\n while (idx < end) {\n arrPush.call(groups, integer.slice(idx, idx + sgSize));\n idx += sgSize;\n }\n // Add the primary grouping digits\n arrPush.call(groups, integer.slice(end));\n } else {\n arrPush.call(groups, integer);\n }\n // a. Assert: The number of elements in groups List is greater than 0.\n if (groups.length === 0) throw new Error();\n // a. Repeat, while groups List is not empty:\n while (groups.length) {\n // i. Remove the first element from groups and let integerGroup be the value of that element.\n var integerGroup = arrShift.call(groups);\n // ii. Add new part record { [[type]]: \"integer\", [[value]]: integerGroup } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integerGroup });\n // iii. If groups List is not empty, then:\n if (groups.length) {\n // 1. Add new part record { [[type]]: \"group\", [[value]]: groupSepSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'group', '[[value]]': groupSepSymbol });\n }\n }\n }\n // 10. Else,\n else {\n // a. Add new part record { [[type]]: \"integer\", [[value]]: integer } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integer });\n }\n // 11. If fraction is not undefined, then:\n if (fraction !== undefined) {\n // a. Let decimalSepSymbol be the ILND String representing the decimal separator.\n var decimalSepSymbol = ild.decimal;\n // a. Add new part record { [[type]]: \"decimal\", [[value]]: decimalSepSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'decimal', '[[value]]': decimalSepSymbol });\n // a. Add new part record { [[type]]: \"fraction\", [[value]]: fraction } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'fraction', '[[value]]': fraction });\n }\n }\n }\n // a. Else if p is equal \"plusSign\", then:\n else if (p === \"plusSign\") {\n // i. Let plusSignSymbol be the ILND String representing the plus sign.\n var plusSignSymbol = ild.plusSign;\n // ii. Add new part record { [[type]]: \"plusSign\", [[value]]: plusSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'plusSign', '[[value]]': plusSignSymbol });\n }\n // a. Else if p is equal \"minusSign\", then:\n else if (p === \"minusSign\") {\n // i. Let minusSignSymbol be the ILND String representing the minus sign.\n var minusSignSymbol = ild.minusSign;\n // ii. Add new part record { [[type]]: \"minusSign\", [[value]]: minusSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'minusSign', '[[value]]': minusSignSymbol });\n }\n // a. Else if p is equal \"percentSign\" and numberFormat.[[style]] is \"percent\", then:\n else if (p === \"percentSign\" && internal['[[style]]'] === \"percent\") {\n // i. Let percentSignSymbol be the ILND String representing the percent sign.\n var percentSignSymbol = ild.percentSign;\n // ii. Add new part record { [[type]]: \"percentSign\", [[value]]: percentSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': percentSignSymbol });\n }\n // a. Else if p is equal \"currency\" and numberFormat.[[style]] is \"currency\", then:\n else if (p === \"currency\" && internal['[[style]]'] === \"currency\") {\n // i. Let currency be the value of numberFormat.[[currency]].\n var currency = internal['[[currency]]'];\n\n var cd = void 0;\n\n // ii. If numberFormat.[[currencyDisplay]] is \"code\", then\n if (internal['[[currencyDisplay]]'] === \"code\") {\n // 1. Let cd be currency.\n cd = currency;\n }\n // iii. Else if numberFormat.[[currencyDisplay]] is \"symbol\", then\n else if (internal['[[currencyDisplay]]'] === \"symbol\") {\n // 1. Let cd be an ILD string representing currency in short form. If the implementation does not have such a representation of currency, use currency itself.\n cd = data.currencies[currency] || currency;\n }\n // iv. Else if numberFormat.[[currencyDisplay]] is \"name\", then\n else if (internal['[[currencyDisplay]]'] === \"name\") {\n // 1. Let cd be an ILD string representing currency in long form. If the implementation does not have such a representation of currency, then use currency itself.\n cd = currency;\n }\n // v. Add new part record { [[type]]: \"currency\", [[value]]: cd } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'currency', '[[value]]': cd });\n }\n // a. Else,\n else {\n // i. Let literal be the substring of pattern from position beginIndex, inclusive, to position endIndex, inclusive.\n var _literal = pattern.substring(beginIndex, endIndex);\n // ii. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': _literal });\n }\n // a. Set nextIndex to endIndex + 1.\n nextIndex = endIndex + 1;\n // a. Set beginIndex to Call(%StringProto_indexOf%, pattern, \"{\", nextIndex)\n beginIndex = pattern.indexOf('{', nextIndex);\n }\n // 9. If nextIndex is less than length, then:\n if (nextIndex < length) {\n // a. Let literal be the substring of pattern from position nextIndex, inclusive, to position length, exclusive.\n var _literal2 = pattern.substring(nextIndex, length);\n // a. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': _literal2 });\n }\n // 10. Return result.\n return result;\n}\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-formatnumber]\n */\nfunction FormatNumber(numberFormat, x) {\n // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).\n var parts = PartitionNumberPattern(numberFormat, x);\n // 2. Let result be an empty String.\n var result = '';\n // 3. For each part in parts, do:\n for (var i = 0; parts.length > i; i++) {\n var part = parts[i];\n // a. Set result to a String value produced by concatenating result and part.[[value]].\n result += part['[[value]]'];\n }\n // 4. Return result.\n return result;\n}\n\n/**\n * When the ToRawPrecision abstract operation is called with arguments x (which\n * must be a finite non-negative number), minPrecision, and maxPrecision (both\n * must be integers between 1 and 21) the following steps are taken:\n */\nfunction ToRawPrecision(x, minPrecision, maxPrecision) {\n // 1. Let p be maxPrecision.\n var p = maxPrecision;\n\n var m = void 0,\n e = void 0;\n\n // 2. If x = 0, then\n if (x === 0) {\n // a. Let m be the String consisting of p occurrences of the character \"0\".\n m = arrJoin.call(Array(p + 1), '0');\n // b. Let e be 0.\n e = 0;\n }\n // 3. Else\n else {\n // a. Let e and n be integers such that 10ᵖ⁻¹ ≤ n < 10ᵖ and for which the\n // exact mathematical value of n × 10ᵉ⁻ᵖ⁺¹ – x is as close to zero as\n // possible. If there are two such sets of e and n, pick the e and n for\n // which n × 10ᵉ⁻ᵖ⁺¹ is larger.\n e = log10Floor(Math.abs(x));\n\n // Easier to get to m from here\n var f = Math.round(Math.exp(Math.abs(e - p + 1) * Math.LN10));\n\n // b. Let m be the String consisting of the digits of the decimal\n // representation of n (in order, with no leading zeroes)\n m = String(Math.round(e - p + 1 < 0 ? x * f : x / f));\n }\n\n // 4. If e ≥ p, then\n if (e >= p)\n // a. Return the concatenation of m and e-p+1 occurrences of the character \"0\".\n return m + arrJoin.call(Array(e - p + 1 + 1), '0');\n\n // 5. If e = p-1, then\n else if (e === p - 1)\n // a. Return m.\n return m;\n\n // 6. If e ≥ 0, then\n else if (e >= 0)\n // a. Let m be the concatenation of the first e+1 characters of m, the character\n // \".\", and the remaining p–(e+1) characters of m.\n m = m.slice(0, e + 1) + '.' + m.slice(e + 1);\n\n // 7. If e < 0, then\n else if (e < 0)\n // a. Let m be the concatenation of the String \"0.\", –(e+1) occurrences of the\n // character \"0\", and the string m.\n m = '0.' + arrJoin.call(Array(-(e + 1) + 1), '0') + m;\n\n // 8. If m contains the character \".\", and maxPrecision > minPrecision, then\n if (m.indexOf(\".\") >= 0 && maxPrecision > minPrecision) {\n // a. Let cut be maxPrecision – minPrecision.\n var cut = maxPrecision - minPrecision;\n\n // b. Repeat while cut > 0 and the last character of m is \"0\":\n while (cut > 0 && m.charAt(m.length - 1) === '0') {\n // i. Remove the last character from m.\n m = m.slice(0, -1);\n\n // ii. Decrease cut by 1.\n cut--;\n }\n\n // c. If the last character of m is \".\", then\n if (m.charAt(m.length - 1) === '.')\n // i. Remove the last character from m.\n m = m.slice(0, -1);\n }\n // 9. Return m.\n return m;\n}\n\n/**\n * @spec[tc39/ecma402/master/spec/numberformat.html]\n * @clause[sec-torawfixed]\n * When the ToRawFixed abstract operation is called with arguments x (which must\n * be a finite non-negative number), minInteger (which must be an integer between\n * 1 and 21), minFraction, and maxFraction (which must be integers between 0 and\n * 20) the following steps are taken:\n */\nfunction ToRawFixed(x, minInteger, minFraction, maxFraction) {\n // 1. Let f be maxFraction.\n var f = maxFraction;\n // 2. Let n be an integer for which the exact mathematical value of n ÷ 10f – x is as close to zero as possible. If there are two such n, pick the larger n.\n var n = Math.pow(10, f) * x; // diverging...\n // 3. If n = 0, let m be the String \"0\". Otherwise, let m be the String consisting of the digits of the decimal representation of n (in order, with no leading zeroes).\n var m = n === 0 ? \"0\" : n.toFixed(0); // divering...\n\n {\n // this diversion is needed to take into consideration big numbers, e.g.:\n // 1.2344501e+37 -> 12344501000000000000000000000000000000\n var idx = void 0;\n var exp = (idx = m.indexOf('e')) > -1 ? m.slice(idx + 1) : 0;\n if (exp) {\n m = m.slice(0, idx).replace('.', '');\n m += arrJoin.call(Array(exp - (m.length - 1) + 1), '0');\n }\n }\n\n var int = void 0;\n // 4. If f ≠ 0, then\n if (f !== 0) {\n // a. Let k be the number of characters in m.\n var k = m.length;\n // a. If k ≤ f, then\n if (k <= f) {\n // i. Let z be the String consisting of f+1–k occurrences of the character \"0\".\n var z = arrJoin.call(Array(f + 1 - k + 1), '0');\n // ii. Let m be the concatenation of Strings z and m.\n m = z + m;\n // iii. Let k be f+1.\n k = f + 1;\n }\n // a. Let a be the first k–f characters of m, and let b be the remaining f characters of m.\n var a = m.substring(0, k - f),\n b = m.substring(k - f, m.length);\n // a. Let m be the concatenation of the three Strings a, \".\", and b.\n m = a + \".\" + b;\n // a. Let int be the number of characters in a.\n int = a.length;\n }\n // 5. Else, let int be the number of characters in m.\n else int = m.length;\n // 6. Let cut be maxFraction – minFraction.\n var cut = maxFraction - minFraction;\n // 7. Repeat while cut > 0 and the last character of m is \"0\":\n while (cut > 0 && m.slice(-1) === \"0\") {\n // a. Remove the last character from m.\n m = m.slice(0, -1);\n // a. Decrease cut by 1.\n cut--;\n }\n // 8. If the last character of m is \".\", then\n if (m.slice(-1) === \".\") {\n // a. Remove the last character from m.\n m = m.slice(0, -1);\n }\n // 9. If int < minInteger, then\n if (int < minInteger) {\n // a. Let z be the String consisting of minInteger–int occurrences of the character \"0\".\n var _z = arrJoin.call(Array(minInteger - int + 1), '0');\n // a. Let m be the concatenation of Strings z and m.\n m = _z + m;\n }\n // 10. Return m.\n return m;\n}\n\n// Sect 11.3.2 Table 2, Numbering systems\n// ======================================\nvar numSys = {\n arab: [\"٠\", \"١\", \"٢\", \"٣\", \"٤\", \"٥\", \"٦\", \"٧\", \"٨\", \"٩\"],\n arabext: [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"],\n bali: [\"᭐\", \"᭑\", \"᭒\", \"᭓\", \"᭔\", \"᭕\", \"᭖\", \"᭗\", \"᭘\", \"᭙\"],\n beng: [\"০\", \"১\", \"২\", \"৩\", \"৪\", \"৫\", \"৬\", \"৭\", \"৮\", \"৯\"],\n deva: [\"०\", \"१\", \"२\", \"३\", \"४\", \"५\", \"६\", \"७\", \"८\", \"९\"],\n fullwide: [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"],\n gujr: [\"૦\", \"૧\", \"૨\", \"૩\", \"૪\", \"૫\", \"૬\", \"૭\", \"૮\", \"૯\"],\n guru: [\"੦\", \"੧\", \"੨\", \"੩\", \"੪\", \"੫\", \"੬\", \"੭\", \"੮\", \"੯\"],\n hanidec: [\"〇\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"七\", \"八\", \"九\"],\n khmr: [\"០\", \"១\", \"២\", \"៣\", \"៤\", \"៥\", \"៦\", \"៧\", \"៨\", \"៩\"],\n knda: [\"೦\", \"೧\", \"೨\", \"೩\", \"೪\", \"೫\", \"೬\", \"೭\", \"೮\", \"೯\"],\n laoo: [\"໐\", \"໑\", \"໒\", \"໓\", \"໔\", \"໕\", \"໖\", \"໗\", \"໘\", \"໙\"],\n latn: [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"],\n limb: [\"᥆\", \"᥇\", \"᥈\", \"᥉\", \"᥊\", \"᥋\", \"᥌\", \"᥍\", \"᥎\", \"᥏\"],\n mlym: [\"൦\", \"൧\", \"൨\", \"൩\", \"൪\", \"൫\", \"൬\", \"൭\", \"൮\", \"൯\"],\n mong: [\"᠐\", \"᠑\", \"᠒\", \"᠓\", \"᠔\", \"᠕\", \"᠖\", \"᠗\", \"᠘\", \"᠙\"],\n mymr: [\"၀\", \"၁\", \"၂\", \"၃\", \"၄\", \"၅\", \"၆\", \"၇\", \"၈\", \"၉\"],\n orya: [\"୦\", \"୧\", \"୨\", \"୩\", \"୪\", \"୫\", \"୬\", \"୭\", \"୮\", \"୯\"],\n tamldec: [\"௦\", \"௧\", \"௨\", \"௩\", \"௪\", \"௫\", \"௬\", \"௭\", \"௮\", \"௯\"],\n telu: [\"౦\", \"౧\", \"౨\", \"౩\", \"౪\", \"౫\", \"౬\", \"౭\", \"౮\", \"౯\"],\n thai: [\"๐\", \"๑\", \"๒\", \"๓\", \"๔\", \"๕\", \"๖\", \"๗\", \"๘\", \"๙\"],\n tibt: [\"༠\", \"༡\", \"༢\", \"༣\", \"༤\", \"༥\", \"༦\", \"༧\", \"༨\", \"༩\"]\n};\n\n/**\n * This function provides access to the locale and formatting options computed\n * during initialization of the object.\n *\n * The function returns a new object whose properties and attributes are set as\n * if constructed by an object literal assigning to each of the following\n * properties the value of the corresponding internal property of this\n * NumberFormat object (see 11.4): locale, numberingSystem, style, currency,\n * currencyDisplay, minimumIntegerDigits, minimumFractionDigits,\n * maximumFractionDigits, minimumSignificantDigits, maximumSignificantDigits, and\n * useGrouping. Properties whose corresponding internal properties are not present\n * are not assigned.\n */\n/* 11.3.3 */defineProperty(Intl.NumberFormat.prototype, 'resolvedOptions', {\n configurable: true,\n writable: true,\n value: function value() {\n var prop = void 0,\n descs = new Record(),\n props = ['locale', 'numberingSystem', 'style', 'currency', 'currencyDisplay', 'minimumIntegerDigits', 'minimumFractionDigits', 'maximumFractionDigits', 'minimumSignificantDigits', 'maximumSignificantDigits', 'useGrouping'],\n internal = this !== null && babelHelpers$1[\"typeof\"](this) === 'object' && getInternalProperties(this);\n\n // Satisfy test 11.3_b\n if (!internal || !internal['[[initializedNumberFormat]]']) throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.NumberFormat object.');\n\n for (var i = 0, max = props.length; i < max; i++) {\n if (hop.call(internal, prop = '[[' + props[i] + ']]')) descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };\n }\n\n return objCreate({}, descs);\n }\n});\n\n/* jslint esnext: true */\n\n// Match these datetime components in a CLDR pattern, except those in single quotes\nvar expDTComponents = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n// trim patterns after transformations\nvar expPatternTrimmer = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n// Skip over patterns with these datetime components because we don't have data\n// to back them up:\n// timezone, weekday, amoung others\nvar unwantedDTCs = /[rqQASjJgwWIQq]/; // xXVO were removed from this list in favor of computing matches with timeZoneName values but printing as empty string\n\nvar dtKeys = [\"era\", \"year\", \"month\", \"day\", \"weekday\", \"quarter\"];\nvar tmKeys = [\"hour\", \"minute\", \"second\", \"hour12\", \"timeZoneName\"];\n\nfunction isDateFormatOnly(obj) {\n for (var i = 0; i < tmKeys.length; i += 1) {\n if (obj.hasOwnProperty(tmKeys[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction isTimeFormatOnly(obj) {\n for (var i = 0; i < dtKeys.length; i += 1) {\n if (obj.hasOwnProperty(dtKeys[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction joinDateAndTimeFormats(dateFormatObj, timeFormatObj) {\n var o = { _: {} };\n for (var i = 0; i < dtKeys.length; i += 1) {\n if (dateFormatObj[dtKeys[i]]) {\n o[dtKeys[i]] = dateFormatObj[dtKeys[i]];\n }\n if (dateFormatObj._[dtKeys[i]]) {\n o._[dtKeys[i]] = dateFormatObj._[dtKeys[i]];\n }\n }\n for (var j = 0; j < tmKeys.length; j += 1) {\n if (timeFormatObj[tmKeys[j]]) {\n o[tmKeys[j]] = timeFormatObj[tmKeys[j]];\n }\n if (timeFormatObj._[tmKeys[j]]) {\n o._[tmKeys[j]] = timeFormatObj._[tmKeys[j]];\n }\n }\n return o;\n}\n\nfunction computeFinalPatterns(formatObj) {\n // From http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns:\n // 'In patterns, two single quotes represents a literal single quote, either\n // inside or outside single quotes. Text within single quotes is not\n // interpreted in any way (except for two adjacent single quotes).'\n formatObj.pattern12 = formatObj.extendedPattern.replace(/'([^']*)'/g, function ($0, literal) {\n return literal ? literal : \"'\";\n });\n\n // pattern 12 is always the default. we can produce the 24 by removing {ampm}\n formatObj.pattern = formatObj.pattern12.replace('{ampm}', '').replace(expPatternTrimmer, '');\n return formatObj;\n}\n\nfunction expDTComponentsMeta($0, formatObj) {\n switch ($0.charAt(0)) {\n // --- Era\n case 'G':\n formatObj.era = ['short', 'short', 'short', 'long', 'narrow'][$0.length - 1];\n return '{era}';\n\n // --- Year\n case 'y':\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n formatObj.year = $0.length === 2 ? '2-digit' : 'numeric';\n return '{year}';\n\n // --- Quarter (not supported in this polyfill)\n case 'Q':\n case 'q':\n formatObj.quarter = ['numeric', '2-digit', 'short', 'long', 'narrow'][$0.length - 1];\n return '{quarter}';\n\n // --- Month\n case 'M':\n case 'L':\n formatObj.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][$0.length - 1];\n return '{month}';\n\n // --- Week (not supported in this polyfill)\n case 'w':\n // week of the year\n formatObj.week = $0.length === 2 ? '2-digit' : 'numeric';\n return '{weekday}';\n case 'W':\n // week of the month\n formatObj.week = 'numeric';\n return '{weekday}';\n\n // --- Day\n case 'd':\n // day of the month\n formatObj.day = $0.length === 2 ? '2-digit' : 'numeric';\n return '{day}';\n case 'D': // day of the year\n case 'F': // day of the week\n case 'g':\n // 1..n: Modified Julian day\n formatObj.day = 'numeric';\n return '{day}';\n\n // --- Week Day\n case 'E':\n // day of the week\n formatObj.weekday = ['short', 'short', 'short', 'long', 'narrow', 'short'][$0.length - 1];\n return '{weekday}';\n case 'e':\n // local day of the week\n formatObj.weekday = ['numeric', '2-digit', 'short', 'long', 'narrow', 'short'][$0.length - 1];\n return '{weekday}';\n case 'c':\n // stand alone local day of the week\n formatObj.weekday = ['numeric', undefined, 'short', 'long', 'narrow', 'short'][$0.length - 1];\n return '{weekday}';\n\n // --- Period\n case 'a': // AM, PM\n case 'b': // am, pm, noon, midnight\n case 'B':\n // flexible day periods\n formatObj.hour12 = true;\n return '{ampm}';\n\n // --- Hour\n case 'h':\n case 'H':\n formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';\n return '{hour}';\n case 'k':\n case 'K':\n formatObj.hour12 = true; // 12-hour-cycle time formats (using h or K)\n formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';\n return '{hour}';\n\n // --- Minute\n case 'm':\n formatObj.minute = $0.length === 2 ? '2-digit' : 'numeric';\n return '{minute}';\n\n // --- Second\n case 's':\n formatObj.second = $0.length === 2 ? '2-digit' : 'numeric';\n return '{second}';\n case 'S':\n case 'A':\n formatObj.second = 'numeric';\n return '{second}';\n\n // --- Timezone\n case 'z': // 1..3, 4: specific non-location format\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n case 'O': // 1, 4: miliseconds in day short, long\n case 'v': // 1, 4: generic non-location format\n case 'V': // 1, 2, 3, 4: time zone ID or city\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n case 'x':\n // 1, 2, 3, 4: The ISO8601 varios formats\n // this polyfill only supports much, for now, we are just doing something dummy\n formatObj.timeZoneName = $0.length < 4 ? 'short' : 'long';\n return '{timeZoneName}';\n }\n}\n\n/**\n * Converts the CLDR availableFormats into the objects and patterns required by\n * the ECMAScript Internationalization API specification.\n */\nfunction createDateTimeFormat(skeleton, pattern) {\n // we ignore certain patterns that are unsupported to avoid this expensive op.\n if (unwantedDTCs.test(pattern)) return undefined;\n\n var formatObj = {\n originalPattern: pattern,\n _: {}\n };\n\n // Replace the pattern string with the one required by the specification, whilst\n // at the same time evaluating it for the subsets and formats\n formatObj.extendedPattern = pattern.replace(expDTComponents, function ($0) {\n // See which symbol we're dealing with\n return expDTComponentsMeta($0, formatObj._);\n });\n\n // Match the skeleton string with the one required by the specification\n // this implementation is based on the Date Field Symbol Table:\n // http://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n // Note: we are adding extra data to the formatObject even though this polyfill\n // might not support it.\n skeleton.replace(expDTComponents, function ($0) {\n // See which symbol we're dealing with\n return expDTComponentsMeta($0, formatObj);\n });\n\n return computeFinalPatterns(formatObj);\n}\n\n/**\n * Processes DateTime formats from CLDR to an easier-to-parse format.\n * the result of this operation should be cached the first time a particular\n * calendar is analyzed.\n *\n * The specification requires we support at least the following subsets of\n * date/time components:\n *\n * - 'weekday', 'year', 'month', 'day', 'hour', 'minute', 'second'\n * - 'weekday', 'year', 'month', 'day'\n * - 'year', 'month', 'day'\n * - 'year', 'month'\n * - 'month', 'day'\n * - 'hour', 'minute', 'second'\n * - 'hour', 'minute'\n *\n * We need to cherry pick at least these subsets from the CLDR data and convert\n * them into the pattern objects used in the ECMA-402 API.\n */\nfunction createDateTimeFormats(formats) {\n var availableFormats = formats.availableFormats;\n var timeFormats = formats.timeFormats;\n var dateFormats = formats.dateFormats;\n var result = [];\n var skeleton = void 0,\n pattern = void 0,\n computed = void 0,\n i = void 0,\n j = void 0;\n var timeRelatedFormats = [];\n var dateRelatedFormats = [];\n\n // Map available (custom) formats into a pattern for createDateTimeFormats\n for (skeleton in availableFormats) {\n if (availableFormats.hasOwnProperty(skeleton)) {\n pattern = availableFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n // in some cases, the format is only displaying date specific props\n // or time specific props, in which case we need to also produce the\n // combined formats.\n if (isDateFormatOnly(computed)) {\n dateRelatedFormats.push(computed);\n } else if (isTimeFormatOnly(computed)) {\n timeRelatedFormats.push(computed);\n }\n }\n }\n }\n\n // Map time formats into a pattern for createDateTimeFormats\n for (skeleton in timeFormats) {\n if (timeFormats.hasOwnProperty(skeleton)) {\n pattern = timeFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n timeRelatedFormats.push(computed);\n }\n }\n }\n\n // Map date formats into a pattern for createDateTimeFormats\n for (skeleton in dateFormats) {\n if (dateFormats.hasOwnProperty(skeleton)) {\n pattern = dateFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n dateRelatedFormats.push(computed);\n }\n }\n }\n\n // combine custom time and custom date formats when they are orthogonals to complete the\n // formats supported by CLDR.\n // This Algo is based on section \"Missing Skeleton Fields\" from:\n // http://unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\n for (i = 0; i < timeRelatedFormats.length; i += 1) {\n for (j = 0; j < dateRelatedFormats.length; j += 1) {\n if (dateRelatedFormats[j].month === 'long') {\n pattern = dateRelatedFormats[j].weekday ? formats.full : formats.long;\n } else if (dateRelatedFormats[j].month === 'short') {\n pattern = formats.medium;\n } else {\n pattern = formats.short;\n }\n computed = joinDateAndTimeFormats(dateRelatedFormats[j], timeRelatedFormats[i]);\n computed.originalPattern = pattern;\n computed.extendedPattern = pattern.replace('{0}', timeRelatedFormats[i].extendedPattern).replace('{1}', dateRelatedFormats[j].extendedPattern).replace(/^[,\\s]+|[,\\s]+$/gi, '');\n result.push(computeFinalPatterns(computed));\n }\n }\n\n return result;\n}\n\n// this represents the exceptions of the rule that are not covered by CLDR availableFormats\n// for single property configurations, they play no role when using multiple properties, and\n// those that are not in this table, are not exceptions or are not covered by the data we\n// provide.\nvar validSyntheticProps = {\n second: {\n numeric: 's',\n '2-digit': 'ss'\n },\n minute: {\n numeric: 'm',\n '2-digit': 'mm'\n },\n year: {\n numeric: 'y',\n '2-digit': 'yy'\n },\n day: {\n numeric: 'd',\n '2-digit': 'dd'\n },\n month: {\n numeric: 'L',\n '2-digit': 'LL',\n narrow: 'LLLLL',\n short: 'LLL',\n long: 'LLLL'\n },\n weekday: {\n narrow: 'ccccc',\n short: 'ccc',\n long: 'cccc'\n }\n};\n\nfunction generateSyntheticFormat(propName, propValue) {\n if (validSyntheticProps[propName] && validSyntheticProps[propName][propValue]) {\n var _ref2;\n\n return _ref2 = {\n originalPattern: validSyntheticProps[propName][propValue],\n _: defineProperty$1({}, propName, propValue),\n extendedPattern: \"{\" + propName + \"}\"\n }, defineProperty$1(_ref2, propName, propValue), defineProperty$1(_ref2, \"pattern12\", \"{\" + propName + \"}\"), defineProperty$1(_ref2, \"pattern\", \"{\" + propName + \"}\"), _ref2;\n }\n}\n\n// An object map of date component keys, saves using a regex later\nvar dateWidths = objCreate(null, { narrow: {}, short: {}, long: {} });\n\n/**\n * Returns a string for a date component, resolved using multiple inheritance as specified\n * as specified in the Unicode Technical Standard 35.\n */\nfunction resolveDateString(data, ca, component, width, key) {\n // From http://www.unicode.org/reports/tr35/tr35.html#Multiple_Inheritance:\n // 'In clearly specified instances, resources may inherit from within the same locale.\n // For example, ... the Buddhist calendar inherits from the Gregorian calendar.'\n var obj = data[ca] && data[ca][component] ? data[ca][component] : data.gregory[component],\n\n\n // \"sideways\" inheritance resolves strings when a key doesn't exist\n alts = {\n narrow: ['short', 'long'],\n short: ['long', 'narrow'],\n long: ['short', 'narrow']\n },\n\n\n //\n resolved = hop.call(obj, width) ? obj[width] : hop.call(obj, alts[width][0]) ? obj[alts[width][0]] : obj[alts[width][1]];\n\n // `key` wouldn't be specified for components 'dayPeriods'\n return key !== null ? resolved[key] : resolved;\n}\n\n// Define the DateTimeFormat constructor internally so it cannot be tainted\nfunction DateTimeFormatConstructor() {\n var locales = arguments[0];\n var options = arguments[1];\n\n if (!this || this === Intl) {\n return new Intl.DateTimeFormat(locales, options);\n }\n return InitializeDateTimeFormat(toObject(this), locales, options);\n}\n\ndefineProperty(Intl, 'DateTimeFormat', {\n configurable: true,\n writable: true,\n value: DateTimeFormatConstructor\n});\n\n// Must explicitly set prototypes as unwritable\ndefineProperty(DateTimeFormatConstructor, 'prototype', {\n writable: false\n});\n\n/**\n * The abstract operation InitializeDateTimeFormat accepts the arguments dateTimeFormat\n * (which must be an object), locales, and options. It initializes dateTimeFormat as a\n * DateTimeFormat object.\n */\nfunction /* 12.1.1.1 */InitializeDateTimeFormat(dateTimeFormat, locales, options) {\n // This will be a internal properties object if we're not already initialized\n var internal = getInternalProperties(dateTimeFormat);\n\n // Create an object whose props can be used to restore the values of RegExp props\n var regexpRestore = createRegExpRestore();\n\n // 1. If dateTimeFormat has an [[initializedIntlObject]] internal property with\n // value true, throw a TypeError exception.\n if (internal['[[initializedIntlObject]]'] === true) throw new TypeError('`this` object has already been initialized as an Intl object');\n\n // Need this to access the `internal` object\n defineProperty(dateTimeFormat, '__getInternalProperties', {\n value: function value() {\n // NOTE: Non-standard, for internal use only\n if (arguments[0] === secret) return internal;\n }\n });\n\n // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.\n internal['[[initializedIntlObject]]'] = true;\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n var requestedLocales = CanonicalizeLocaleList(locales);\n\n // 4. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined below) with arguments options, \"any\", and \"date\".\n options = ToDateTimeOptions(options, 'any', 'date');\n\n // 5. Let opt be a new Record.\n var opt = new Record();\n\n // 6. Let matcher be the result of calling the GetOption abstract operation\n // (defined in 9.2.9) with arguments options, \"localeMatcher\", \"string\", a List\n // containing the two String values \"lookup\" and \"best fit\", and \"best fit\".\n var matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');\n\n // 7. Set opt.[[localeMatcher]] to matcher.\n opt['[[localeMatcher]]'] = matcher;\n\n // 8. Let DateTimeFormat be the standard built-in object that is the initial\n // value of Intl.DateTimeFormat.\n var DateTimeFormat = internals.DateTimeFormat; // This is what we *really* need\n\n // 9. Let localeData be the value of the [[localeData]] internal property of\n // DateTimeFormat.\n var localeData = DateTimeFormat['[[localeData]]'];\n\n // 10. Let r be the result of calling the ResolveLocale abstract operation\n // (defined in 9.2.5) with the [[availableLocales]] internal property of\n // DateTimeFormat, requestedLocales, opt, the [[relevantExtensionKeys]]\n // internal property of DateTimeFormat, and localeData.\n var r = ResolveLocale(DateTimeFormat['[[availableLocales]]'], requestedLocales, opt, DateTimeFormat['[[relevantExtensionKeys]]'], localeData);\n\n // 11. Set the [[locale]] internal property of dateTimeFormat to the value of\n // r.[[locale]].\n internal['[[locale]]'] = r['[[locale]]'];\n\n // 12. Set the [[calendar]] internal property of dateTimeFormat to the value of\n // r.[[ca]].\n internal['[[calendar]]'] = r['[[ca]]'];\n\n // 13. Set the [[numberingSystem]] internal property of dateTimeFormat to the value of\n // r.[[nu]].\n internal['[[numberingSystem]]'] = r['[[nu]]'];\n\n // The specification doesn't tell us to do this, but it's helpful later on\n internal['[[dataLocale]]'] = r['[[dataLocale]]'];\n\n // 14. Let dataLocale be the value of r.[[dataLocale]].\n var dataLocale = r['[[dataLocale]]'];\n\n // 15. Let tz be the result of calling the [[Get]] internal method of options with\n // argument \"timeZone\".\n var tz = options.timeZone;\n\n // 16. If tz is not undefined, then\n if (tz !== undefined) {\n // a. Let tz be ToString(tz).\n // b. Convert tz to upper case as described in 6.1.\n // NOTE: If an implementation accepts additional time zone values, as permitted\n // under certain conditions by the Conformance clause, different casing\n // rules apply.\n tz = toLatinUpperCase(tz);\n\n // c. If tz is not \"UTC\", then throw a RangeError exception.\n // ###TODO: accept more time zones###\n if (tz !== 'UTC') throw new RangeError('timeZone is not supported.');\n }\n\n // 17. Set the [[timeZone]] internal property of dateTimeFormat to tz.\n internal['[[timeZone]]'] = tz;\n\n // 18. Let opt be a new Record.\n opt = new Record();\n\n // 19. For each row of Table 3, except the header row, do:\n for (var prop in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, prop)) continue;\n\n // 20. Let prop be the name given in the Property column of the row.\n // 21. Let value be the result of calling the GetOption abstract operation,\n // passing as argument options, the name given in the Property column of the\n // row, \"string\", a List containing the strings given in the Values column of\n // the row, and undefined.\n var value = GetOption(options, prop, 'string', dateTimeComponents[prop]);\n\n // 22. Set opt.[[]] to value.\n opt['[[' + prop + ']]'] = value;\n }\n\n // Assigned a value below\n var bestFormat = void 0;\n\n // 23. Let dataLocaleData be the result of calling the [[Get]] internal method of\n // localeData with argument dataLocale.\n var dataLocaleData = localeData[dataLocale];\n\n // 24. Let formats be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"formats\".\n // Note: we process the CLDR formats into the spec'd structure\n var formats = ToDateTimeFormats(dataLocaleData.formats);\n\n // 25. Let matcher be the result of calling the GetOption abstract operation with\n // arguments options, \"formatMatcher\", \"string\", a List containing the two String\n // values \"basic\" and \"best fit\", and \"best fit\".\n matcher = GetOption(options, 'formatMatcher', 'string', new List('basic', 'best fit'), 'best fit');\n\n // Optimization: caching the processed formats as a one time operation by\n // replacing the initial structure from localeData\n dataLocaleData.formats = formats;\n\n // 26. If matcher is \"basic\", then\n if (matcher === 'basic') {\n // 27. Let bestFormat be the result of calling the BasicFormatMatcher abstract\n // operation (defined below) with opt and formats.\n bestFormat = BasicFormatMatcher(opt, formats);\n\n // 28. Else\n } else {\n {\n // diverging\n var _hr = GetOption(options, 'hour12', 'boolean' /*, undefined, undefined*/);\n opt.hour12 = _hr === undefined ? dataLocaleData.hour12 : _hr;\n }\n // 29. Let bestFormat be the result of calling the BestFitFormatMatcher\n // abstract operation (defined below) with opt and formats.\n bestFormat = BestFitFormatMatcher(opt, formats);\n }\n\n // 30. For each row in Table 3, except the header row, do\n for (var _prop in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, _prop)) continue;\n\n // a. Let prop be the name given in the Property column of the row.\n // b. Let pDesc be the result of calling the [[GetOwnProperty]] internal method of\n // bestFormat with argument prop.\n // c. If pDesc is not undefined, then\n if (hop.call(bestFormat, _prop)) {\n // i. Let p be the result of calling the [[Get]] internal method of bestFormat\n // with argument prop.\n var p = bestFormat[_prop];\n {\n // diverging\n p = bestFormat._ && hop.call(bestFormat._, _prop) ? bestFormat._[_prop] : p;\n }\n\n // ii. Set the [[]] internal property of dateTimeFormat to p.\n internal['[[' + _prop + ']]'] = p;\n }\n }\n\n var pattern = void 0; // Assigned a value below\n\n // 31. Let hr12 be the result of calling the GetOption abstract operation with\n // arguments options, \"hour12\", \"boolean\", undefined, and undefined.\n var hr12 = GetOption(options, 'hour12', 'boolean' /*, undefined, undefined*/);\n\n // 32. If dateTimeFormat has an internal property [[hour]], then\n if (internal['[[hour]]']) {\n // a. If hr12 is undefined, then let hr12 be the result of calling the [[Get]]\n // internal method of dataLocaleData with argument \"hour12\".\n hr12 = hr12 === undefined ? dataLocaleData.hour12 : hr12;\n\n // b. Set the [[hour12]] internal property of dateTimeFormat to hr12.\n internal['[[hour12]]'] = hr12;\n\n // c. If hr12 is true, then\n if (hr12 === true) {\n // i. Let hourNo0 be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"hourNo0\".\n var hourNo0 = dataLocaleData.hourNo0;\n\n // ii. Set the [[hourNo0]] internal property of dateTimeFormat to hourNo0.\n internal['[[hourNo0]]'] = hourNo0;\n\n // iii. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern12\".\n pattern = bestFormat.pattern12;\n }\n\n // d. Else\n else\n // i. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern\".\n pattern = bestFormat.pattern;\n }\n\n // 33. Else\n else\n // a. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern\".\n pattern = bestFormat.pattern;\n\n // 34. Set the [[pattern]] internal property of dateTimeFormat to pattern.\n internal['[[pattern]]'] = pattern;\n\n // 35. Set the [[boundFormat]] internal property of dateTimeFormat to undefined.\n internal['[[boundFormat]]'] = undefined;\n\n // 36. Set the [[initializedDateTimeFormat]] internal property of dateTimeFormat to\n // true.\n internal['[[initializedDateTimeFormat]]'] = true;\n\n // In ES3, we need to pre-bind the format() function\n if (es3) dateTimeFormat.format = GetFormatDateTime.call(dateTimeFormat);\n\n // Restore the RegExp properties\n regexpRestore();\n\n // Return the newly initialised object\n return dateTimeFormat;\n}\n\n/**\n * Several DateTimeFormat algorithms use values from the following table, which provides\n * property names and allowable values for the components of date and time formats:\n */\nvar dateTimeComponents = {\n weekday: [\"narrow\", \"short\", \"long\"],\n era: [\"narrow\", \"short\", \"long\"],\n year: [\"2-digit\", \"numeric\"],\n month: [\"2-digit\", \"numeric\", \"narrow\", \"short\", \"long\"],\n day: [\"2-digit\", \"numeric\"],\n hour: [\"2-digit\", \"numeric\"],\n minute: [\"2-digit\", \"numeric\"],\n second: [\"2-digit\", \"numeric\"],\n timeZoneName: [\"short\", \"long\"]\n};\n\n/**\n * When the ToDateTimeOptions abstract operation is called with arguments options,\n * required, and defaults, the following steps are taken:\n */\nfunction ToDateTimeFormats(formats) {\n if (Object.prototype.toString.call(formats) === '[object Array]') {\n return formats;\n }\n return createDateTimeFormats(formats);\n}\n\n/**\n * When the ToDateTimeOptions abstract operation is called with arguments options,\n * required, and defaults, the following steps are taken:\n */\nfunction ToDateTimeOptions(options, required, defaults) {\n // 1. If options is undefined, then let options be null, else let options be\n // ToObject(options).\n if (options === undefined) options = null;else {\n // (#12) options needs to be a Record, but it also needs to inherit properties\n var opt2 = toObject(options);\n options = new Record();\n\n for (var k in opt2) {\n options[k] = opt2[k];\n }\n }\n\n // 2. Let create be the standard built-in function object defined in ES5, 15.2.3.5.\n var create = objCreate;\n\n // 3. Let options be the result of calling the [[Call]] internal method of create with\n // undefined as the this value and an argument list containing the single item\n // options.\n options = create(options);\n\n // 4. Let needDefaults be true.\n var needDefaults = true;\n\n // 5. If required is \"date\" or \"any\", then\n if (required === 'date' || required === 'any') {\n // a. For each of the property names \"weekday\", \"year\", \"month\", \"day\":\n // i. If the result of calling the [[Get]] internal method of options with the\n // property name is not undefined, then let needDefaults be false.\n if (options.weekday !== undefined || options.year !== undefined || options.month !== undefined || options.day !== undefined) needDefaults = false;\n }\n\n // 6. If required is \"time\" or \"any\", then\n if (required === 'time' || required === 'any') {\n // a. For each of the property names \"hour\", \"minute\", \"second\":\n // i. If the result of calling the [[Get]] internal method of options with the\n // property name is not undefined, then let needDefaults be false.\n if (options.hour !== undefined || options.minute !== undefined || options.second !== undefined) needDefaults = false;\n }\n\n // 7. If needDefaults is true and defaults is either \"date\" or \"all\", then\n if (needDefaults && (defaults === 'date' || defaults === 'all'))\n // a. For each of the property names \"year\", \"month\", \"day\":\n // i. Call the [[DefineOwnProperty]] internal method of options with the\n // property name, Property Descriptor {[[Value]]: \"numeric\", [[Writable]]:\n // true, [[Enumerable]]: true, [[Configurable]]: true}, and false.\n options.year = options.month = options.day = 'numeric';\n\n // 8. If needDefaults is true and defaults is either \"time\" or \"all\", then\n if (needDefaults && (defaults === 'time' || defaults === 'all'))\n // a. For each of the property names \"hour\", \"minute\", \"second\":\n // i. Call the [[DefineOwnProperty]] internal method of options with the\n // property name, Property Descriptor {[[Value]]: \"numeric\", [[Writable]]:\n // true, [[Enumerable]]: true, [[Configurable]]: true}, and false.\n options.hour = options.minute = options.second = 'numeric';\n\n // 9. Return options.\n return options;\n}\n\n/**\n * When the BasicFormatMatcher abstract operation is called with two arguments options and\n * formats, the following steps are taken:\n */\nfunction BasicFormatMatcher(options, formats) {\n // 1. Let removalPenalty be 120.\n var removalPenalty = 120;\n\n // 2. Let additionPenalty be 20.\n var additionPenalty = 20;\n\n // 3. Let longLessPenalty be 8.\n var longLessPenalty = 8;\n\n // 4. Let longMorePenalty be 6.\n var longMorePenalty = 6;\n\n // 5. Let shortLessPenalty be 6.\n var shortLessPenalty = 6;\n\n // 6. Let shortMorePenalty be 3.\n var shortMorePenalty = 3;\n\n // 7. Let bestScore be -Infinity.\n var bestScore = -Infinity;\n\n // 8. Let bestFormat be undefined.\n var bestFormat = void 0;\n\n // 9. Let i be 0.\n var i = 0;\n\n // 10. Assert: formats is an Array object.\n\n // 11. Let len be the result of calling the [[Get]] internal method of formats with argument \"length\".\n var len = formats.length;\n\n // 12. Repeat while i < len:\n while (i < len) {\n // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).\n var format = formats[i];\n\n // b. Let score be 0.\n var score = 0;\n\n // c. For each property shown in Table 3:\n for (var property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, property)) continue;\n\n // i. Let optionsProp be options.[[]].\n var optionsProp = options['[[' + property + ']]'];\n\n // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format\n // with argument property.\n // iii. If formatPropDesc is not undefined, then\n // 1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.\n var formatProp = hop.call(format, property) ? format[property] : undefined;\n\n // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by\n // additionPenalty.\n if (optionsProp === undefined && formatProp !== undefined) score -= additionPenalty;\n\n // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by\n // removalPenalty.\n else if (optionsProp !== undefined && formatProp === undefined) score -= removalPenalty;\n\n // vi. Else\n else {\n // 1. Let values be the array [\"2-digit\", \"numeric\", \"narrow\", \"short\",\n // \"long\"].\n var values = ['2-digit', 'numeric', 'narrow', 'short', 'long'];\n\n // 2. Let optionsPropIndex be the index of optionsProp within values.\n var optionsPropIndex = arrIndexOf.call(values, optionsProp);\n\n // 3. Let formatPropIndex be the index of formatProp within values.\n var formatPropIndex = arrIndexOf.call(values, formatProp);\n\n // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).\n var delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);\n\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta === 2) score -= longMorePenalty;\n\n // 6. Else if delta = 1, decrease score by shortMorePenalty.\n else if (delta === 1) score -= shortMorePenalty;\n\n // 7. Else if delta = -1, decrease score by shortLessPenalty.\n else if (delta === -1) score -= shortLessPenalty;\n\n // 8. Else if delta = -2, decrease score by longLessPenalty.\n else if (delta === -2) score -= longLessPenalty;\n }\n }\n\n // d. If score > bestScore, then\n if (score > bestScore) {\n // i. Let bestScore be score.\n bestScore = score;\n\n // ii. Let bestFormat be format.\n bestFormat = format;\n }\n\n // e. Increase i by 1.\n i++;\n }\n\n // 13. Return bestFormat.\n return bestFormat;\n}\n\n/**\n * When the BestFitFormatMatcher abstract operation is called with two arguments options\n * and formats, it performs implementation dependent steps, which should return a set of\n * component representations that a typical user of the selected locale would perceive as\n * at least as good as the one returned by BasicFormatMatcher.\n *\n * This polyfill defines the algorithm to be the same as BasicFormatMatcher,\n * with the addition of bonus points awarded where the requested format is of\n * the same data type as the potentially matching format.\n *\n * This algo relies on the concept of closest distance matching described here:\n * http://unicode.org/reports/tr35/tr35-dates.html#Matching_Skeletons\n * Typically a “best match” is found using a closest distance match, such as:\n *\n * Symbols requesting a best choice for the locale are replaced.\n * j → one of {H, k, h, K}; C → one of {a, b, B}\n * -> Covered by cldr.js matching process\n *\n * For fields with symbols representing the same type (year, month, day, etc):\n * Most symbols have a small distance from each other.\n * M ≅ L; E ≅ c; a ≅ b ≅ B; H ≅ k ≅ h ≅ K; ...\n * -> Covered by cldr.js matching process\n *\n * Width differences among fields, other than those marking text vs numeric, are given small distance from each other.\n * MMM ≅ MMMM\n * MM ≅ M\n * Numeric and text fields are given a larger distance from each other.\n * MMM ≈ MM\n * Symbols representing substantial differences (week of year vs week of month) are given much larger a distances from each other.\n * d ≋ D; ...\n * Missing or extra fields cause a match to fail. (But see Missing Skeleton Fields).\n *\n *\n * For example,\n *\n * { month: 'numeric', day: 'numeric' }\n *\n * should match\n *\n * { month: '2-digit', day: '2-digit' }\n *\n * rather than\n *\n * { month: 'short', day: 'numeric' }\n *\n * This makes sense because a user requesting a formatted date with numeric parts would\n * not expect to see the returned format containing narrow, short or long part names\n */\nfunction BestFitFormatMatcher(options, formats) {\n /** Diverging: this block implements the hack for single property configuration, eg.:\n *\n * `new Intl.DateTimeFormat('en', {day: 'numeric'})`\n *\n * should produce a single digit with the day of the month. This is needed because\n * CLDR `availableFormats` data structure doesn't cover these cases.\n */\n {\n var optionsPropNames = [];\n for (var property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, property)) continue;\n\n if (options['[[' + property + ']]'] !== undefined) {\n optionsPropNames.push(property);\n }\n }\n if (optionsPropNames.length === 1) {\n var _bestFormat = generateSyntheticFormat(optionsPropNames[0], options['[[' + optionsPropNames[0] + ']]']);\n if (_bestFormat) {\n return _bestFormat;\n }\n }\n }\n\n // 1. Let removalPenalty be 120.\n var removalPenalty = 120;\n\n // 2. Let additionPenalty be 20.\n var additionPenalty = 20;\n\n // 3. Let longLessPenalty be 8.\n var longLessPenalty = 8;\n\n // 4. Let longMorePenalty be 6.\n var longMorePenalty = 6;\n\n // 5. Let shortLessPenalty be 6.\n var shortLessPenalty = 6;\n\n // 6. Let shortMorePenalty be 3.\n var shortMorePenalty = 3;\n\n var patternPenalty = 2;\n\n var hour12Penalty = 1;\n\n // 7. Let bestScore be -Infinity.\n var bestScore = -Infinity;\n\n // 8. Let bestFormat be undefined.\n var bestFormat = void 0;\n\n // 9. Let i be 0.\n var i = 0;\n\n // 10. Assert: formats is an Array object.\n\n // 11. Let len be the result of calling the [[Get]] internal method of formats with argument \"length\".\n var len = formats.length;\n\n // 12. Repeat while i < len:\n while (i < len) {\n // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).\n var format = formats[i];\n\n // b. Let score be 0.\n var score = 0;\n\n // c. For each property shown in Table 3:\n for (var _property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, _property)) continue;\n\n // i. Let optionsProp be options.[[]].\n var optionsProp = options['[[' + _property + ']]'];\n\n // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format\n // with argument property.\n // iii. If formatPropDesc is not undefined, then\n // 1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.\n var formatProp = hop.call(format, _property) ? format[_property] : undefined;\n\n // Diverging: using the default properties produced by the pattern/skeleton\n // to match it with user options, and apply a penalty\n var patternProp = hop.call(format._, _property) ? format._[_property] : undefined;\n if (optionsProp !== patternProp) {\n score -= patternPenalty;\n }\n\n // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by\n // additionPenalty.\n if (optionsProp === undefined && formatProp !== undefined) score -= additionPenalty;\n\n // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by\n // removalPenalty.\n else if (optionsProp !== undefined && formatProp === undefined) score -= removalPenalty;\n\n // vi. Else\n else {\n // 1. Let values be the array [\"2-digit\", \"numeric\", \"narrow\", \"short\",\n // \"long\"].\n var values = ['2-digit', 'numeric', 'narrow', 'short', 'long'];\n\n // 2. Let optionsPropIndex be the index of optionsProp within values.\n var optionsPropIndex = arrIndexOf.call(values, optionsProp);\n\n // 3. Let formatPropIndex be the index of formatProp within values.\n var formatPropIndex = arrIndexOf.call(values, formatProp);\n\n // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).\n var delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);\n\n {\n // diverging from spec\n // When the bestFit argument is true, subtract additional penalty where data types are not the same\n if (formatPropIndex <= 1 && optionsPropIndex >= 2 || formatPropIndex >= 2 && optionsPropIndex <= 1) {\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta > 0) score -= longMorePenalty;else if (delta < 0) score -= longLessPenalty;\n } else {\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta > 1) score -= shortMorePenalty;else if (delta < -1) score -= shortLessPenalty;\n }\n }\n }\n }\n\n {\n // diverging to also take into consideration differences between 12 or 24 hours\n // which is special for the best fit only.\n if (format._.hour12 !== options.hour12) {\n score -= hour12Penalty;\n }\n }\n\n // d. If score > bestScore, then\n if (score > bestScore) {\n // i. Let bestScore be score.\n bestScore = score;\n // ii. Let bestFormat be format.\n bestFormat = format;\n }\n\n // e. Increase i by 1.\n i++;\n }\n\n // 13. Return bestFormat.\n return bestFormat;\n}\n\n/* 12.2.3 */internals.DateTimeFormat = {\n '[[availableLocales]]': [],\n '[[relevantExtensionKeys]]': ['ca', 'nu'],\n '[[localeData]]': {}\n};\n\n/**\n * When the supportedLocalesOf method of Intl.DateTimeFormat is called, the\n * following steps are taken:\n */\n/* 12.2.2 */\ndefineProperty(Intl.DateTimeFormat, 'supportedLocalesOf', {\n configurable: true,\n writable: true,\n value: fnBind.call(function (locales) {\n // Bound functions only have the `this` value altered if being used as a constructor,\n // this lets us imitate a native function that has no constructor\n if (!hop.call(this, '[[availableLocales]]')) throw new TypeError('supportedLocalesOf() is not a constructor');\n\n // Create an object whose props can be used to restore the values of RegExp props\n var regexpRestore = createRegExpRestore(),\n\n\n // 1. If options is not provided, then let options be undefined.\n options = arguments[1],\n\n\n // 2. Let availableLocales be the value of the [[availableLocales]] internal\n // property of the standard built-in object that is the initial value of\n // Intl.NumberFormat.\n\n availableLocales = this['[[availableLocales]]'],\n\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n requestedLocales = CanonicalizeLocaleList(locales);\n\n // Restore the RegExp properties\n regexpRestore();\n\n // 4. Return the result of calling the SupportedLocales abstract operation\n // (defined in 9.2.8) with arguments availableLocales, requestedLocales,\n // and options.\n return SupportedLocales(availableLocales, requestedLocales, options);\n }, internals.NumberFormat)\n});\n\n/**\n * This named accessor property returns a function that formats a number\n * according to the effective locale and the formatting options of this\n * DateTimeFormat object.\n */\n/* 12.3.2 */defineProperty(Intl.DateTimeFormat.prototype, 'format', {\n configurable: true,\n get: GetFormatDateTime\n});\n\nfunction GetFormatDateTime() {\n var internal = this !== null && babelHelpers$1[\"typeof\"](this) === 'object' && getInternalProperties(this);\n\n // Satisfy test 12.3_b\n if (!internal || !internal['[[initializedDateTimeFormat]]']) throw new TypeError('`this` value for format() is not an initialized Intl.DateTimeFormat object.');\n\n // The value of the [[Get]] attribute is a function that takes the following\n // steps:\n\n // 1. If the [[boundFormat]] internal property of this DateTimeFormat object\n // is undefined, then:\n if (internal['[[boundFormat]]'] === undefined) {\n // a. Let F be a Function object, with internal properties set as\n // specified for built-in functions in ES5, 15, or successor, and the\n // length property set to 0, that takes the argument date and\n // performs the following steps:\n var F = function F() {\n var date = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0];\n\n // i. If date is not provided or is undefined, then let x be the\n // result as if by the expression Date.now() where Date.now is\n // the standard built-in function defined in ES5, 15.9.4.4.\n // ii. Else let x be ToNumber(date).\n // iii. Return the result of calling the FormatDateTime abstract\n // operation (defined below) with arguments this and x.\n var x = date === undefined ? Date.now() : toNumber(date);\n return FormatDateTime(this, x);\n };\n // b. Let bind be the standard built-in function object defined in ES5,\n // 15.3.4.5.\n // c. Let bf be the result of calling the [[Call]] internal method of\n // bind with F as the this value and an argument list containing\n // the single item this.\n var bf = fnBind.call(F, this);\n // d. Set the [[boundFormat]] internal property of this NumberFormat\n // object to bf.\n internal['[[boundFormat]]'] = bf;\n }\n // Return the value of the [[boundFormat]] internal property of this\n // NumberFormat object.\n return internal['[[boundFormat]]'];\n}\n\nfunction formatToParts$1() {\n var date = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0];\n\n var internal = this !== null && babelHelpers$1[\"typeof\"](this) === 'object' && getInternalProperties(this);\n\n if (!internal || !internal['[[initializedDateTimeFormat]]']) throw new TypeError('`this` value for formatToParts() is not an initialized Intl.DateTimeFormat object.');\n\n var x = date === undefined ? Date.now() : toNumber(date);\n return FormatToPartsDateTime(this, x);\n}\n\nObject.defineProperty(Intl.DateTimeFormat.prototype, 'formatToParts', {\n enumerable: false,\n writable: true,\n configurable: true,\n value: formatToParts$1\n});\n\nfunction CreateDateTimeParts(dateTimeFormat, x) {\n // 1. If x is not a finite Number, then throw a RangeError exception.\n if (!isFinite(x)) throw new RangeError('Invalid valid date passed to format');\n\n var internal = dateTimeFormat.__getInternalProperties(secret);\n\n // Creating restore point for properties on the RegExp object... please wait\n /* let regexpRestore = */createRegExpRestore(); // ###TODO: review this\n\n // 2. Let locale be the value of the [[locale]] internal property of dateTimeFormat.\n var locale = internal['[[locale]]'];\n\n // 3. Let nf be the result of creating a new NumberFormat object as if by the\n // expression new Intl.NumberFormat([locale], {useGrouping: false}) where\n // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.\n var nf = new Intl.NumberFormat([locale], { useGrouping: false });\n\n // 4. Let nf2 be the result of creating a new NumberFormat object as if by the\n // expression new Intl.NumberFormat([locale], {minimumIntegerDigits: 2, useGrouping:\n // false}) where Intl.NumberFormat is the standard built-in constructor defined in\n // 11.1.3.\n var nf2 = new Intl.NumberFormat([locale], { minimumIntegerDigits: 2, useGrouping: false });\n\n // 5. Let tm be the result of calling the ToLocalTime abstract operation (defined\n // below) with x, the value of the [[calendar]] internal property of dateTimeFormat,\n // and the value of the [[timeZone]] internal property of dateTimeFormat.\n var tm = ToLocalTime(x, internal['[[calendar]]'], internal['[[timeZone]]']);\n\n // 6. Let result be the value of the [[pattern]] internal property of dateTimeFormat.\n var pattern = internal['[[pattern]]'];\n\n // 7.\n var result = new List();\n\n // 8.\n var index = 0;\n\n // 9.\n var beginIndex = pattern.indexOf('{');\n\n // 10.\n var endIndex = 0;\n\n // Need the locale minus any extensions\n var dataLocale = internal['[[dataLocale]]'];\n\n // Need the calendar data from CLDR\n var localeData = internals.DateTimeFormat['[[localeData]]'][dataLocale].calendars;\n var ca = internal['[[calendar]]'];\n\n // 11.\n while (beginIndex !== -1) {\n var fv = void 0;\n // a.\n endIndex = pattern.indexOf('}', beginIndex);\n // b.\n if (endIndex === -1) {\n throw new Error('Unclosed pattern');\n }\n // c.\n if (beginIndex > index) {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substring(index, beginIndex)\n });\n }\n // d.\n var p = pattern.substring(beginIndex + 1, endIndex);\n // e.\n if (dateTimeComponents.hasOwnProperty(p)) {\n // i. Let f be the value of the [[

]] internal property of dateTimeFormat.\n var f = internal['[[' + p + ']]'];\n // ii. Let v be the value of tm.[[

]].\n var v = tm['[[' + p + ']]'];\n // iii. If p is \"year\" and v ≤ 0, then let v be 1 - v.\n if (p === 'year' && v <= 0) {\n v = 1 - v;\n }\n // iv. If p is \"month\", then increase v by 1.\n else if (p === 'month') {\n v++;\n }\n // v. If p is \"hour\" and the value of the [[hour12]] internal property of\n // dateTimeFormat is true, then\n else if (p === 'hour' && internal['[[hour12]]'] === true) {\n // 1. Let v be v modulo 12.\n v = v % 12;\n // 2. If v is 0 and the value of the [[hourNo0]] internal property of\n // dateTimeFormat is true, then let v be 12.\n if (v === 0 && internal['[[hourNo0]]'] === true) {\n v = 12;\n }\n }\n\n // vi. If f is \"numeric\", then\n if (f === 'numeric') {\n // 1. Let fv be the result of calling the FormatNumber abstract operation\n // (defined in 11.3.2) with arguments nf and v.\n fv = FormatNumber(nf, v);\n }\n // vii. Else if f is \"2-digit\", then\n else if (f === '2-digit') {\n // 1. Let fv be the result of calling the FormatNumber abstract operation\n // with arguments nf2 and v.\n fv = FormatNumber(nf2, v);\n // 2. If the length of fv is greater than 2, let fv be the substring of fv\n // containing the last two characters.\n if (fv.length > 2) {\n fv = fv.slice(-2);\n }\n }\n // viii. Else if f is \"narrow\", \"short\", or \"long\", then let fv be a String\n // value representing f in the desired form; the String value depends upon\n // the implementation and the effective locale and calendar of\n // dateTimeFormat. If p is \"month\", then the String value may also depend\n // on whether dateTimeFormat has a [[day]] internal property. If p is\n // \"timeZoneName\", then the String value may also depend on the value of\n // the [[inDST]] field of tm.\n else if (f in dateWidths) {\n switch (p) {\n case 'month':\n fv = resolveDateString(localeData, ca, 'months', f, tm['[[' + p + ']]']);\n break;\n\n case 'weekday':\n try {\n fv = resolveDateString(localeData, ca, 'days', f, tm['[[' + p + ']]']);\n // fv = resolveDateString(ca.days, f)[tm['[['+ p +']]']];\n } catch (e) {\n throw new Error('Could not find weekday data for locale ' + locale);\n }\n break;\n\n case 'timeZoneName':\n fv = ''; // ###TODO\n break;\n\n case 'era':\n try {\n fv = resolveDateString(localeData, ca, 'eras', f, tm['[[' + p + ']]']);\n } catch (e) {\n throw new Error('Could not find era data for locale ' + locale);\n }\n break;\n\n default:\n fv = tm['[[' + p + ']]'];\n }\n }\n // ix\n arrPush.call(result, {\n type: p,\n value: fv\n });\n // f.\n } else if (p === 'ampm') {\n // i.\n var _v = tm['[[hour]]'];\n // ii./iii.\n fv = resolveDateString(localeData, ca, 'dayPeriods', _v > 11 ? 'pm' : 'am', null);\n // iv.\n arrPush.call(result, {\n type: 'dayPeriod',\n value: fv\n });\n // g.\n } else {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substring(beginIndex, endIndex + 1)\n });\n }\n // h.\n index = endIndex + 1;\n // i.\n beginIndex = pattern.indexOf('{', index);\n }\n // 12.\n if (endIndex < pattern.length - 1) {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substr(endIndex + 1)\n });\n }\n // 13.\n return result;\n}\n\n/**\n * When the FormatDateTime abstract operation is called with arguments dateTimeFormat\n * (which must be an object initialized as a DateTimeFormat) and x (which must be a Number\n * value), it returns a String value representing x (interpreted as a time value as\n * specified in ES5, 15.9.1.1) according to the effective locale and the formatting\n * options of dateTimeFormat.\n */\nfunction FormatDateTime(dateTimeFormat, x) {\n var parts = CreateDateTimeParts(dateTimeFormat, x);\n var result = '';\n\n for (var i = 0; parts.length > i; i++) {\n var part = parts[i];\n result += part.value;\n }\n return result;\n}\n\nfunction FormatToPartsDateTime(dateTimeFormat, x) {\n var parts = CreateDateTimeParts(dateTimeFormat, x);\n var result = [];\n for (var i = 0; parts.length > i; i++) {\n var part = parts[i];\n result.push({\n type: part.type,\n value: part.value\n });\n }\n return result;\n}\n\n/**\n * When the ToLocalTime abstract operation is called with arguments date, calendar, and\n * timeZone, the following steps are taken:\n */\nfunction ToLocalTime(date, calendar, timeZone) {\n // 1. Apply calendrical calculations on date for the given calendar and time zone to\n // produce weekday, era, year, month, day, hour, minute, second, and inDST values.\n // The calculations should use best available information about the specified\n // calendar and time zone. If the calendar is \"gregory\", then the calculations must\n // match the algorithms specified in ES5, 15.9.1, except that calculations are not\n // bound by the restrictions on the use of best available information on time zones\n // for local time zone adjustment and daylight saving time adjustment imposed by\n // ES5, 15.9.1.7 and 15.9.1.8.\n // ###TODO###\n var d = new Date(date),\n m = 'get' + (timeZone || '');\n\n // 2. Return a Record with fields [[weekday]], [[era]], [[year]], [[month]], [[day]],\n // [[hour]], [[minute]], [[second]], and [[inDST]], each with the corresponding\n // calculated value.\n return new Record({\n '[[weekday]]': d[m + 'Day'](),\n '[[era]]': +(d[m + 'FullYear']() >= 0),\n '[[year]]': d[m + 'FullYear'](),\n '[[month]]': d[m + 'Month'](),\n '[[day]]': d[m + 'Date'](),\n '[[hour]]': d[m + 'Hours'](),\n '[[minute]]': d[m + 'Minutes'](),\n '[[second]]': d[m + 'Seconds'](),\n '[[inDST]]': false // ###TODO###\n });\n}\n\n/**\n * The function returns a new object whose properties and attributes are set as if\n * constructed by an object literal assigning to each of the following properties the\n * value of the corresponding internal property of this DateTimeFormat object (see 12.4):\n * locale, calendar, numberingSystem, timeZone, hour12, weekday, era, year, month, day,\n * hour, minute, second, and timeZoneName. Properties whose corresponding internal\n * properties are not present are not assigned.\n */\n/* 12.3.3 */defineProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', {\n writable: true,\n configurable: true,\n value: function value() {\n var prop = void 0,\n descs = new Record(),\n props = ['locale', 'calendar', 'numberingSystem', 'timeZone', 'hour12', 'weekday', 'era', 'year', 'month', 'day', 'hour', 'minute', 'second', 'timeZoneName'],\n internal = this !== null && babelHelpers$1[\"typeof\"](this) === 'object' && getInternalProperties(this);\n\n // Satisfy test 12.3_b\n if (!internal || !internal['[[initializedDateTimeFormat]]']) throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.DateTimeFormat object.');\n\n for (var i = 0, max = props.length; i < max; i++) {\n if (hop.call(internal, prop = '[[' + props[i] + ']]')) descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };\n }\n\n return objCreate({}, descs);\n }\n});\n\nvar ls = Intl.__localeSensitiveProtos = {\n Number: {},\n Date: {}\n};\n\n/**\n * When the toLocaleString method is called with optional arguments locales and options,\n * the following steps are taken:\n */\n/* 13.2.1 */ls.Number.toLocaleString = function () {\n // Satisfy test 13.2.1_1\n if (Object.prototype.toString.call(this) !== '[object Number]') throw new TypeError('`this` value must be a number for Number.prototype.toLocaleString()');\n\n // 1. Let x be this Number value (as defined in ES5, 15.7.4).\n // 2. If locales is not provided, then let locales be undefined.\n // 3. If options is not provided, then let options be undefined.\n // 4. Let numberFormat be the result of creating a new object as if by the\n // expression new Intl.NumberFormat(locales, options) where\n // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.\n // 5. Return the result of calling the FormatNumber abstract operation\n // (defined in 11.3.2) with arguments numberFormat and x.\n return FormatNumber(new NumberFormatConstructor(arguments[0], arguments[1]), this);\n};\n\n/**\n * When the toLocaleString method is called with optional arguments locales and options,\n * the following steps are taken:\n */\n/* 13.3.1 */ls.Date.toLocaleString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]') throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n var x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x)) return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n var locales = arguments[0];\n\n // 4. If options is not provided, then let options be undefined.\n var options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"any\", and \"all\".\n options = ToDateTimeOptions(options, 'any', 'all');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n var dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\n/**\n * When the toLocaleDateString method is called with optional arguments locales and\n * options, the following steps are taken:\n */\n/* 13.3.2 */ls.Date.toLocaleDateString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]') throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleDateString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n var x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x)) return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n var locales = arguments[0],\n\n\n // 4. If options is not provided, then let options be undefined.\n options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"date\", and \"date\".\n options = ToDateTimeOptions(options, 'date', 'date');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n var dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\n/**\n * When the toLocaleTimeString method is called with optional arguments locales and\n * options, the following steps are taken:\n */\n/* 13.3.3 */ls.Date.toLocaleTimeString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]') throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleTimeString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n var x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x)) return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n var locales = arguments[0];\n\n // 4. If options is not provided, then let options be undefined.\n var options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"time\", and \"time\".\n options = ToDateTimeOptions(options, 'time', 'time');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n var dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\ndefineProperty(Intl, '__applyLocaleSensitivePrototypes', {\n writable: true,\n configurable: true,\n value: function value() {\n defineProperty(Number.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Number.toLocaleString });\n // Need this here for IE 8, to avoid the _DontEnum_ bug\n defineProperty(Date.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Date.toLocaleString });\n\n for (var k in ls.Date) {\n if (hop.call(ls.Date, k)) defineProperty(Date.prototype, k, { writable: true, configurable: true, value: ls.Date[k] });\n }\n }\n});\n\n/**\n * Can't really ship a single script with data for hundreds of locales, so we provide\n * this __addLocaleData method as a means for the developer to add the data on an\n * as-needed basis\n */\ndefineProperty(Intl, '__addLocaleData', {\n value: function value(data) {\n if (!IsStructurallyValidLanguageTag(data.locale)) throw new Error(\"Object passed doesn't identify itself with a valid language tag\");\n\n addLocaleData(data, data.locale);\n }\n});\n\nfunction addLocaleData(data, tag) {\n // Both NumberFormat and DateTimeFormat require number data, so throw if it isn't present\n if (!data.number) throw new Error(\"Object passed doesn't contain locale data for Intl.NumberFormat\");\n\n var locale = void 0,\n locales = [tag],\n parts = tag.split('-');\n\n // Create fallbacks for locale data with scripts, e.g. Latn, Hans, Vaii, etc\n if (parts.length > 2 && parts[1].length === 4) arrPush.call(locales, parts[0] + '-' + parts[2]);\n\n while (locale = arrShift.call(locales)) {\n // Add to NumberFormat internal properties as per 11.2.3\n arrPush.call(internals.NumberFormat['[[availableLocales]]'], locale);\n internals.NumberFormat['[[localeData]]'][locale] = data.number;\n\n // ...and DateTimeFormat internal properties as per 12.2.3\n if (data.date) {\n data.date.nu = data.number.nu;\n arrPush.call(internals.DateTimeFormat['[[availableLocales]]'], locale);\n internals.DateTimeFormat['[[localeData]]'][locale] = data.date;\n }\n }\n\n // If this is the first set of locale data added, make it the default\n if (defaultLocale === undefined) setDefaultLocale(tag);\n}\n\ndefineProperty(Intl, '__disableRegExpRestore', {\n value: function value() {\n internals.disableRegExpRestore = true;\n }\n});\n\nmodule.exports = Intl;","IntlPolyfill.__addLocaleData({locale:\"ca\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1}, {0}\",full:\"{1} 'a' 'les' {0}\",long:\"{1}, {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E d\",Ehm:\"E h:mm a\",EHm:\"E H:mm\",Ehms:\"E h:mm:ss a\",EHms:\"E H:mm:ss\",Gy:\"y G\",GyMMM:\"LLL y G\",GyMMMd:\"d MMM y G\",GyMMMEd:\"E, d MMM y G\",GyMMMM:\"LLLL 'de' y G\",GyMMMMd:\"d MMMM 'de' y G\",GyMMMMEd:\"E, d MMMM 'de' y G\",\"h\":\"h a\",\"H\":\"H\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d/M\",MEd:\"E d/M\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E, d MMM\",MMMMd:\"d MMMM\",MMMMEd:\"E, d MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M/y\",yMd:\"d/M/y\",yMEd:\"E, d/M/y\",yMMM:\"LLL 'de' y\",yMMMd:\"d MMM y\",yMMMEd:\"E, d MMM y\",yMMMM:\"LLLL 'de' y\",yMMMMd:\"d MMMM 'de' y\",yMMMMEd:\"E, d MMMM 'de' y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE, d MMMM 'de' y\",yMMMMd:\"d MMMM 'de' y\",yMMMd:\"d MMM y\",yMd:\"d/M/yy\"},timeFormats:{hmmsszzzz:\"H:mm:ss zzzz\",hmsz:\"H:mm:ss z\",hms:\"H:mm:ss\",hm:\"H:mm\"}},calendars:{buddhist:{months:{narrow:[\"GN\",\"FB\",\"MÇ\",\"AB\",\"MG\",\"JN\",\"JL\",\"AG\",\"ST\",\"OC\",\"NV\",\"DS\"],short:[\"gen.\",\"febr.\",\"març\",\"abr.\",\"maig\",\"juny\",\"jul.\",\"ag.\",\"set.\",\"oct.\",\"nov.\",\"des.\"],long:[\"de gener\",\"de febrer\",\"de març\",\"d’abril\",\"de maig\",\"de juny\",\"de juliol\",\"d’agost\",\"de setembre\",\"d’octubre\",\"de novembre\",\"de desembre\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"eB\"],short:[\"eB\"],long:[\"eB\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],long:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],long:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},gregory:{months:{narrow:[\"GN\",\"FB\",\"MÇ\",\"AB\",\"MG\",\"JN\",\"JL\",\"AG\",\"ST\",\"OC\",\"NV\",\"DS\"],short:[\"gen.\",\"febr.\",\"març\",\"abr.\",\"maig\",\"juny\",\"jul.\",\"ag.\",\"set.\",\"oct.\",\"nov.\",\"des.\"],long:[\"de gener\",\"de febrer\",\"de març\",\"d’abril\",\"de maig\",\"de juny\",\"de juliol\",\"d’agost\",\"de setembre\",\"d’octubre\",\"de novembre\",\"de desembre\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"aC\",\"dC\",\"AEC\",\"EC\"],short:[\"aC\",\"dC\",\"AEC\",\"EC\"],long:[\"abans de Crist\",\"després de Crist\",\"abans de l’Era Comuna\",\"Era Comuna\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"],long:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},japanese:{months:{narrow:[\"GN\",\"FB\",\"MÇ\",\"AB\",\"MG\",\"JN\",\"JL\",\"AG\",\"ST\",\"OC\",\"NV\",\"DS\"],short:[\"gen.\",\"febr.\",\"març\",\"abr.\",\"maig\",\"juny\",\"jul.\",\"ag.\",\"set.\",\"oct.\",\"nov.\",\"des.\"],long:[\"de gener\",\"de febrer\",\"de març\",\"d’abril\",\"de maig\",\"de juny\",\"de juliol\",\"d’agost\",\"de setembre\",\"d’octubre\",\"de novembre\",\"de desembre\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},roc:{months:{narrow:[\"GN\",\"FB\",\"MÇ\",\"AB\",\"MG\",\"JN\",\"JL\",\"AG\",\"ST\",\"OC\",\"NV\",\"DS\"],short:[\"gen.\",\"febr.\",\"març\",\"abr.\",\"maig\",\"juny\",\"jul.\",\"ag.\",\"set.\",\"oct.\",\"nov.\",\"des.\"],long:[\"de gener\",\"de febrer\",\"de març\",\"d’abril\",\"de maig\",\"de juny\",\"de juliol\",\"d’agost\",\"de setembre\",\"d’octubre\",\"de novembre\",\"de desembre\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"Before R.O.C.\",\"R.O.C.\"],short:[\"Before R.O.C.\",\"R.O.C.\"],long:[\"Before R.O.C.\",\"R.O.C.\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{number} {currency}\",negativePattern:\"{minusSign}{number} {currency}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\",\",group:\".\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"AU$\",CNY:\"¥\",ESP:\"₧\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"JP¥\",KRW:\"₩\",NZD:\"NZ$\",THB:\"฿\",TWD:\"NT$\",VND:\"₫\",XAF:\"FCFA\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"de\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1}, {0}\",medium:\"{1}, {0}\",full:\"{1} 'um' {0}\",long:\"{1} 'um' {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E, d.\",Ehm:\"E h:mm a\",EHm:\"E, HH:mm\",Ehms:\"E, h:mm:ss a\",EHms:\"E, HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"d. MMM y G\",GyMMMEd:\"E, d. MMM y G\",\"h\":\"h a\",\"H\":\"HH 'Uhr'\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d.M.\",MEd:\"E, d.M.\",MMd:\"d.MM.\",MMdd:\"dd.MM.\",MMM:\"LLL\",MMMd:\"d. MMM\",MMMEd:\"E, d. MMM\",MMMMd:\"d. MMMM\",MMMMEd:\"E, d. MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M.y\",yMd:\"d.M.y\",yMEd:\"E, d.M.y\",yMM:\"MM.y\",yMMdd:\"dd.MM.y\",yMMM:\"MMM y\",yMMMd:\"d. MMM y\",yMMMEd:\"E, d. MMM y\",yMMMM:\"MMMM y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE, d. MMMM y\",yMMMMd:\"d. MMMM y\",yMMMd:\"dd.MM.y\",yMd:\"dd.MM.yy\"},timeFormats:{hmmsszzzz:\"HH:mm:ss zzzz\",hmsz:\"HH:mm:ss z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan.\",\"Feb.\",\"März\",\"Apr.\",\"Mai\",\"Juni\",\"Juli\",\"Aug.\",\"Sep.\",\"Okt.\",\"Nov.\",\"Dez.\"],long:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"BE\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},gregory:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan.\",\"Feb.\",\"März\",\"Apr.\",\"Mai\",\"Juni\",\"Juli\",\"Aug.\",\"Sep.\",\"Okt.\",\"Nov.\",\"Dez.\"],long:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"v. Chr.\",\"n. Chr.\",\"v. u. Z.\",\"u. Z.\"],short:[\"v. Chr.\",\"n. Chr.\",\"v. u. Z.\",\"u. Z.\"],long:[\"v. Chr.\",\"n. Chr.\",\"vor unserer Zeitrechnung\",\"unserer Zeitrechnung\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"],long:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},japanese:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan.\",\"Feb.\",\"März\",\"Apr.\",\"Mai\",\"Juni\",\"Juli\",\"Aug.\",\"Sep.\",\"Okt.\",\"Nov.\",\"Dez.\"],long:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},roc:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan.\",\"Feb.\",\"März\",\"Apr.\",\"Mai\",\"Juni\",\"Juli\",\"Aug.\",\"Sep.\",\"Okt.\",\"Nov.\",\"Dez.\"],long:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"Before R.O.C.\",\"Minguo\"],short:[\"Before R.O.C.\",\"Minguo\"],long:[\"Before R.O.C.\",\"Minguo\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{number} {currency}\",negativePattern:\"{minusSign}{number} {currency}\"},percent:{positivePattern:\"{number} {percentSign}\",negativePattern:\"{minusSign}{number} {percentSign}\"}},symbols:{latn:{decimal:\",\",group:\".\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{ATS:\"öS\",AUD:\"AU$\",BGM:\"BGK\",BGO:\"BGJ\",BRL:\"R$\",CAD:\"CA$\",CNY:\"CN¥\",DEM:\"DM\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",THB:\"฿\",TWD:\"NT$\",USD:\"$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"en\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:true,formats:{short:\"{1}, {0}\",medium:\"{1}, {0}\",full:\"{1} 'at' {0}\",long:\"{1} 'at' {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"d E\",Ehm:\"E h:mm a\",EHm:\"E HH:mm\",Ehms:\"E h:mm:ss a\",EHms:\"E HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"MMM d, y G\",GyMMMEd:\"E, MMM d, y G\",\"h\":\"h a\",\"H\":\"HH\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"M/d\",MEd:\"E, M/d\",MMM:\"LLL\",MMMd:\"MMM d\",MMMEd:\"E, MMM d\",MMMMd:\"MMMM d\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M/y\",yMd:\"M/d/y\",yMEd:\"E, M/d/y\",yMMM:\"MMM y\",yMMMd:\"MMM d, y\",yMMMEd:\"E, MMM d, y\",yMMMM:\"MMMM y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE, MMMM d, y\",yMMMMd:\"MMMM d, y\",yMMMd:\"MMM d, y\",yMd:\"M/d/yy\"},timeFormats:{hmmsszzzz:\"h:mm:ss a zzzz\",hmsz:\"h:mm:ss a z\",hms:\"h:mm:ss a\",hm:\"h:mm a\"}},calendars:{buddhist:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],long:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"BE\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Mo1\",\"Mo2\",\"Mo3\",\"Mo4\",\"Mo5\",\"Mo6\",\"Mo7\",\"Mo8\",\"Mo9\",\"Mo10\",\"Mo11\",\"Mo12\"],long:[\"Month1\",\"Month2\",\"Month3\",\"Month4\",\"Month5\",\"Month6\",\"Month7\",\"Month8\",\"Month9\",\"Month10\",\"Month11\",\"Month12\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Mo1\",\"Mo2\",\"Mo3\",\"Mo4\",\"Mo5\",\"Mo6\",\"Mo7\",\"Mo8\",\"Mo9\",\"Mo10\",\"Mo11\",\"Mo12\"],long:[\"Month1\",\"Month2\",\"Month3\",\"Month4\",\"Month5\",\"Month6\",\"Month7\",\"Month8\",\"Month9\",\"Month10\",\"Month11\",\"Month12\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},gregory:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],long:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"B\",\"A\",\"BCE\",\"CE\"],short:[\"BC\",\"AD\",\"BCE\",\"CE\"],long:[\"Before Christ\",\"Anno Domini\",\"Before Common Era\",\"Common Era\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"],long:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},japanese:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],long:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},roc:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],long:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"Before R.O.C.\",\"Minguo\"],short:[\"Before R.O.C.\",\"Minguo\"],long:[\"Before R.O.C.\",\"Minguo\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{currency}{number}\",negativePattern:\"{minusSign}{currency}{number}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\".\",group:\",\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"A$\",BRL:\"R$\",CAD:\"CA$\",CNY:\"CN¥\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",TWD:\"NT$\",USD:\"$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"es\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1}, {0}\",long:\"{1}, {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E d\",Ehm:\"E, h:mm a\",EHm:\"E, H:mm\",Ehms:\"E, h:mm:ss a\",EHms:\"E, H:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"d MMM y G\",GyMMMEd:\"E, d MMM y G\",GyMMMM:\"MMMM 'de' y G\",GyMMMMd:\"d 'de' MMMM 'de' y G\",GyMMMMEd:\"E, d 'de' MMMM 'de' y G\",\"h\":\"h a\",\"H\":\"H\",hm:\"h:mm a\",Hm:\"H:mm\",hms:\"h:mm:ss a\",Hms:\"H:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"H:mm:ss v\",hmsvvvv:\"h:mm:ss a (vvvv)\",Hmsvvvv:\"H:mm:ss (vvvv)\",hmv:\"h:mm a v\",Hmv:\"H:mm v\",\"M\":\"L\",Md:\"d/M\",MEd:\"E, d/M\",MMd:\"d/M\",MMdd:\"d/M\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E, d MMM\",MMMMd:\"d 'de' MMMM\",MMMMEd:\"E, d 'de' MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M/y\",yMd:\"d/M/y\",yMEd:\"EEE, d/M/y\",yMM:\"M/y\",yMMM:\"MMM y\",yMMMd:\"d MMM y\",yMMMEd:\"EEE, d MMM y\",yMMMM:\"MMMM 'de' y\",yMMMMd:\"d 'de' MMMM 'de' y\",yMMMMEd:\"EEE, d 'de' MMMM 'de' y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ 'de' y\"},dateFormats:{yMMMMEEEEd:\"EEEE, d 'de' MMMM 'de' y\",yMMMMd:\"d 'de' MMMM 'de' y\",yMMMd:\"d MMM y\",yMd:\"d/M/yy\"},timeFormats:{hmmsszzzz:\"H:mm:ss (zzzz)\",hmsz:\"H:mm:ss z\",hms:\"H:mm:ss\",hm:\"H:mm\"}},calendars:{buddhist:{months:{narrow:[\"E\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"ene.\",\"feb.\",\"mar.\",\"abr.\",\"may.\",\"jun.\",\"jul.\",\"ago.\",\"sept.\",\"oct.\",\"nov.\",\"dic.\"],long:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"BE\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},gregory:{months:{narrow:[\"E\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"ene.\",\"feb.\",\"mar.\",\"abr.\",\"may.\",\"jun.\",\"jul.\",\"ago.\",\"sept.\",\"oct.\",\"nov.\",\"dic.\"],long:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"a. C.\",\"d. C.\",\"a. e. c.\",\"e. c.\"],short:[\"a. C.\",\"d. C.\",\"a. e. c.\",\"e. c.\"],long:[\"antes de Cristo\",\"después de Cristo\",\"antes de la era común\",\"era común\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"],long:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},japanese:{months:{narrow:[\"E\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"ene.\",\"feb.\",\"mar.\",\"abr.\",\"may.\",\"jun.\",\"jul.\",\"ago.\",\"sept.\",\"oct.\",\"nov.\",\"dic.\"],long:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},roc:{months:{narrow:[\"E\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"ene.\",\"feb.\",\"mar.\",\"abr.\",\"may.\",\"jun.\",\"jul.\",\"ago.\",\"sept.\",\"oct.\",\"nov.\",\"dic.\"],long:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"antes de R.O.C.\",\"R.O.C.\"],short:[\"antes de R.O.C.\",\"R.O.C.\"],long:[\"antes de R.O.C.\",\"R.O.C.\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{number} {currency}\",negativePattern:\"{minusSign}{number} {currency}\"},percent:{positivePattern:\"{number} {percentSign}\",negativePattern:\"{minusSign}{number} {percentSign}\"}},symbols:{latn:{decimal:\",\",group:\".\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{CAD:\"CA$\",ESP:\"₧\",EUR:\"€\",THB:\"฿\",USD:\"$\",VND:\"₫\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"fr\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} 'à' {0}\",full:\"{1} 'à' {0}\",long:\"{1} 'à' {0}\",availableFormats:{\"d\":\"d\",\"E\":\"E\",Ed:\"E d\",Ehm:\"E h:mm a\",EHm:\"E HH:mm\",Ehms:\"E h:mm:ss a\",EHms:\"E HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"d MMM y G\",GyMMMEd:\"E d MMM y G\",\"h\":\"h a\",\"H\":\"HH 'h'\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"dd/MM\",MEd:\"E dd/MM\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E d MMM\",MMMMd:\"d MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"MM/y\",yMd:\"dd/MM/y\",yMEd:\"E dd/MM/y\",yMMM:\"MMM y\",yMMMd:\"d MMM y\",yMMMEd:\"E d MMM y\",yMMMM:\"MMMM y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE d MMMM y\",yMMMMd:\"d MMMM y\",yMMMd:\"d MMM y\",yMd:\"dd/MM/y\"},timeFormats:{hmmsszzzz:\"HH:mm:ss zzzz\",hmsz:\"HH:mm:ss z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"janv.\",\"févr.\",\"mars\",\"avr.\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],long:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"E.B.\"],short:[\"ère b.\"],long:[\"ère bouddhiste\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1yuè\",\"2yuè\",\"3yuè\",\"4yuè\",\"5yuè\",\"6yuè\",\"7yuè\",\"8yuè\",\"9yuè\",\"10yuè\",\"11yuè\",\"12yuè\"],long:[\"zhēngyuè\",\"èryuè\",\"sānyuè\",\"sìyuè\",\"wǔyuè\",\"liùyuè\",\"qīyuè\",\"bāyuè\",\"jiǔyuè\",\"shíyuè\",\"shíyīyuè\",\"shí’èryuè\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1yuè\",\"2yuè\",\"3yuè\",\"4yuè\",\"5yuè\",\"6yuè\",\"7yuè\",\"8yuè\",\"9yuè\",\"10yuè\",\"11yuè\",\"12yuè\"],long:[\"zhēngyuè\",\"èryuè\",\"sānyuè\",\"sìyuè\",\"wǔyuè\",\"liùyuè\",\"qīyuè\",\"bāyuè\",\"jiǔyuè\",\"shíyuè\",\"shíyīyuè\",\"shí’èryuè\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},gregory:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"janv.\",\"févr.\",\"mars\",\"avr.\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],long:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"av. J.-C.\",\"ap. J.-C.\",\"AEC\",\"EC\"],short:[\"av. J.-C.\",\"ap. J.-C.\",\"AEC\",\"EC\"],long:[\"avant Jésus-Christ\",\"après Jésus-Christ\",\"avant l’ère commune\",\"de l’ère commune\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tisseri\",\"Hesvan\",\"Kislev\",\"Tébeth\",\"Schébat\",\"Adar I\",\"Adar\",\"Nissan\",\"Iyar\",\"Sivan\",\"Tamouz\",\"Ab\",\"Elloul\",\"Adar II\"],long:[\"Tisseri\",\"Hesvan\",\"Kislev\",\"Tébeth\",\"Schébat\",\"Adar I\",\"Adar\",\"Nissan\",\"Iyar\",\"Sivan\",\"Tamouz\",\"Ab\",\"Elloul\",\"Adar II\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"mouh.\",\"saf.\",\"rab. aw.\",\"rab. th.\",\"joum. oul.\",\"joum. tha.\",\"raj.\",\"chaa.\",\"ram.\",\"chaw.\",\"dhou. q.\",\"dhou. h.\"],long:[\"mouharram\",\"safar\",\"rabia al awal\",\"rabia ath-thani\",\"joumada al oula\",\"joumada ath-thania\",\"rajab\",\"chaabane\",\"ramadan\",\"chawwal\",\"dhou al qi`da\",\"dhou al-hijja\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"mouh.\",\"saf.\",\"rab. aw.\",\"rab. th.\",\"joum. oul.\",\"joum. tha.\",\"raj.\",\"chaa.\",\"ram.\",\"chaw.\",\"dhou. q.\",\"dhou. h.\"],long:[\"mouharram\",\"safar\",\"rabia al awal\",\"rabia ath-thani\",\"joumada al oula\",\"joumada ath-thania\",\"rajab\",\"chaabane\",\"ramadan\",\"chawwal\",\"dhou al qi`da\",\"dhou al-hijja\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},japanese:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"janv.\",\"févr.\",\"mars\",\"avr.\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],long:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},roc:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"janv.\",\"févr.\",\"mars\",\"avr.\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],long:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"avant RdC\",\"RdC\"],short:[\"avant RdC\",\"RdC\"],long:[\"avant RdC\",\"RdC\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{number} {currency}\",negativePattern:\"{minusSign}{number} {currency}\"},percent:{positivePattern:\"{number} {percentSign}\",negativePattern:\"{minusSign}{number} {percentSign}\"}},symbols:{latn:{decimal:\",\",group:\" \",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{ARS:\"$AR\",AUD:\"$AU\",BEF:\"FB\",BMD:\"$BM\",BND:\"$BN\",BRL:\"R$\",BSD:\"$BS\",BZD:\"$BZ\",CAD:\"$CA\",CLP:\"$CL\",COP:\"$CO\",CYP:\"£CY\",EUR:\"€\",FJD:\"$FJ\",FKP:\"£FK\",FRF:\"F\",GBP:\"£GB\",GIP:\"£GI\",IEP:\"£IE\",ILP:\"£IL\",ILS:\"₪\",INR:\"₹\",ITL:\"₤IT\",KRW:\"₩\",LBP:\"£LB\",MTP:\"£MT\",MXN:\"$MX\",NAD:\"$NA\",NZD:\"$NZ\",RHD:\"$RH\",SBD:\"$SB\",SGD:\"$SG\",SRD:\"$SR\",TTD:\"$TT\",USD:\"$US\",UYU:\"$UY\",VND:\"₫\",WST:\"WS$\",XAF:\"FCFA\",XOF:\"CFA\",XPF:\"FCFP\"}}});","IntlPolyfill.__addLocaleData({locale:\"it\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1}, {0}\",medium:\"{1}, {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E d\",Ehm:\"E h:mm a\",EHm:\"E HH:mm\",Ehms:\"E h:mm:ss a\",EHms:\"E HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"d MMM y G\",GyMMMEd:\"E d MMM y G\",\"h\":\"h a\",\"H\":\"HH\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d/M\",MEd:\"E d/M\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E d MMM\",MMMMd:\"d MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M/y\",yMd:\"d/M/y\",yMEd:\"E d/M/y\",yMMM:\"MMM y\",yMMMd:\"d MMM y\",yMMMEd:\"E d MMM y\",yMMMM:\"MMMM y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE d MMMM y\",yMMMMd:\"d MMMM y\",yMMMd:\"dd MMM y\",yMd:\"dd/MM/yy\"},timeFormats:{hmmsszzzz:\"HH:mm:ss zzzz\",hmsz:\"HH:mm:ss z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"G\",\"F\",\"M\",\"A\",\"M\",\"G\",\"L\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"gen\",\"feb\",\"mar\",\"apr\",\"mag\",\"giu\",\"lug\",\"ago\",\"set\",\"ott\",\"nov\",\"dic\"],long:[\"gennaio\",\"febbraio\",\"marzo\",\"aprile\",\"maggio\",\"giugno\",\"luglio\",\"agosto\",\"settembre\",\"ottobre\",\"novembre\",\"dicembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"EB\"],short:[\"EB\"],long:[\"EB\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},gregory:{months:{narrow:[\"G\",\"F\",\"M\",\"A\",\"M\",\"G\",\"L\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"gen\",\"feb\",\"mar\",\"apr\",\"mag\",\"giu\",\"lug\",\"ago\",\"set\",\"ott\",\"nov\",\"dic\"],long:[\"gennaio\",\"febbraio\",\"marzo\",\"aprile\",\"maggio\",\"giugno\",\"luglio\",\"agosto\",\"settembre\",\"ottobre\",\"novembre\",\"dicembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"aC\",\"dC\",\"BCE\",\"CE\"],short:[\"a.C.\",\"d.C.\",\"a.E.V.\",\"E.V.\"],long:[\"a.C.\",\"d.C.\",\"avanti Era Volgare\",\"Era Volgare\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"],long:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},japanese:{months:{narrow:[\"G\",\"F\",\"M\",\"A\",\"M\",\"G\",\"L\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"gen\",\"feb\",\"mar\",\"apr\",\"mag\",\"giu\",\"lug\",\"ago\",\"set\",\"ott\",\"nov\",\"dic\"],long:[\"gennaio\",\"febbraio\",\"marzo\",\"aprile\",\"maggio\",\"giugno\",\"luglio\",\"agosto\",\"settembre\",\"ottobre\",\"novembre\",\"dicembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},roc:{months:{narrow:[\"G\",\"F\",\"M\",\"A\",\"M\",\"G\",\"L\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"gen\",\"feb\",\"mar\",\"apr\",\"mag\",\"giu\",\"lug\",\"ago\",\"set\",\"ott\",\"nov\",\"dic\"],long:[\"gennaio\",\"febbraio\",\"marzo\",\"aprile\",\"maggio\",\"giugno\",\"luglio\",\"agosto\",\"settembre\",\"ottobre\",\"novembre\",\"dicembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"Prima di R.O.C.\",\"Minguo\"],short:[\"Prima di R.O.C.\",\"Minguo\"],long:[\"Prima di R.O.C.\",\"Minguo\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{number} {currency}\",negativePattern:\"{minusSign}{number} {currency}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\",\",group:\".\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"A$\",CAD:\"CA$\",CNY:\"CN¥\",EUR:\"€\",GBP:\"£\",ILS:\"₪\",INR:\"₹\",NZD:\"NZ$\",THB:\"฿\",USD:\"US$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"ja\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:false,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d日\",\"E\":\"ccc\",Ed:\"d日(E)\",EEEEd:\"d日EEEE\",Ehm:\"aK:mm (E)\",EHm:\"H:mm (E)\",Ehms:\"aK:mm:ss (E)\",EHms:\"H:mm:ss (E)\",Gy:\"Gy年\",GyMMM:\"Gy年M月\",GyMMMd:\"Gy年M月d日\",GyMMMEd:\"Gy年M月d日(E)\",GyMMMEEEEd:\"Gy年M月d日EEEE\",\"h\":\"aK時\",\"H\":\"H時\",hm:\"aK:mm\",Hm:\"H:mm\",hms:\"aK:mm:ss\",Hms:\"H:mm:ss\",hmsv:\"aK:mm:ss v\",Hmsv:\"H:mm:ss v\",hmv:\"aK:mm v\",Hmv:\"H:mm v\",\"M\":\"M月\",Md:\"M/d\",MEd:\"M/d(E)\",MEEEEd:\"M/dEEEE\",MMM:\"M月\",MMMd:\"M月d日\",MMMEd:\"M月d日(E)\",MMMEEEEd:\"M月d日EEEE\",MMMMd:\"M月d日\",ms:\"mm:ss\",\"y\":\"y年\",yM:\"y/M\",yMd:\"y/M/d\",yMEd:\"y/M/d(E)\",yMEEEEd:\"y/M/dEEEE\",yMM:\"y/MM\",yMMM:\"y年M月\",yMMMd:\"y年M月d日\",yMMMEd:\"y年M月d日(E)\",yMMMEEEEd:\"y年M月d日EEEE\",yMMMM:\"y年M月\",yQQQ:\"y/QQQ\",yQQQQ:\"yQQQQ\"},dateFormats:{yMMMMEEEEd:\"y年M月d日EEEE\",yMMMMd:\"y年M月d日\",yMMMd:\"y/MM/dd\",yMd:\"y/MM/dd\"},timeFormats:{hmmsszzzz:\"H時mm分ss秒 zzzz\",hmsz:\"H:mm:ss z\",hms:\"H:mm:ss\",hm:\"H:mm\"}},calendars:{buddhist:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"仏暦\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},chinese:{months:{narrow:[\"正\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"十一\",\"十二\"],short:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],long:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"トウト\",\"ババ\",\"ハトール\",\"キアック\",\"トーバ\",\"アムシール\",\"バラムハート\",\"バラモウダ\",\"バシャンス\",\"パオーナ\",\"エペープ\",\"メスラ\",\"ナシエ\"],long:[\"トウト\",\"ババ\",\"ハトール\",\"キアック\",\"トーバ\",\"アムシール\",\"バラムハート\",\"バラモウダ\",\"バシャンス\",\"パオーナ\",\"エペープ\",\"メスラ\",\"ナシエ\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},dangi:{months:{narrow:[\"正\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"十一\",\"十二\"],short:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],long:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"メスケレム\",\"テケムト\",\"ヘダル\",\"ターサス\",\"テル\",\"イェカティト\",\"メガビト\",\"ミアジア\",\"ゲンボト\",\"セネ\",\"ハムレ\",\"ネハッセ\",\"パグメン\"],long:[\"メスケレム\",\"テケムト\",\"ヘダル\",\"ターサス\",\"テル\",\"イェカティト\",\"メガビト\",\"ミアジア\",\"ゲンボト\",\"セネ\",\"ハムレ\",\"ネハッセ\",\"パグメン\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"メスケレム\",\"テケムト\",\"ヘダル\",\"ターサス\",\"テル\",\"イェカティト\",\"メガビト\",\"ミアジア\",\"ゲンボト\",\"セネ\",\"ハムレ\",\"ネハッセ\",\"パグメン\"],long:[\"メスケレム\",\"テケムト\",\"ヘダル\",\"ターサス\",\"テル\",\"イェカティト\",\"メガビト\",\"ミアジア\",\"ゲンボト\",\"セネ\",\"ハムレ\",\"ネハッセ\",\"パグメン\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},gregory:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"BC\",\"AD\",\"BCE\",\"CE\"],short:[\"紀元前\",\"西暦\",\"西暦紀元前\",\"西暦紀元\"],long:[\"紀元前\",\"西暦\",\"西暦紀元前\",\"西暦紀元\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"ティスレ\",\"へシボン\",\"キスレブ\",\"テベット\",\"シバット\",\"アダル I\",\"アダル\",\"ニサン\",\"イヤル\",\"シバン\",\"タムズ\",\"アヴ\",\"エルル\",\"アダル II\"],long:[\"ティスレ\",\"へシボン\",\"キスレブ\",\"テベット\",\"シバット\",\"アダル I\",\"アダル\",\"ニサン\",\"イヤル\",\"シバン\",\"タムズ\",\"アヴ\",\"エルル\",\"アダル II\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"カイトラ\",\"ヴァイサカ\",\"ジャイスタ\",\"アーサダ\",\"スラバナ\",\"バードラ\",\"アスビナ\",\"カルディカ\",\"アヴラハヤナ\",\"パウサ\",\"マーガ\",\"パルグナ\"],long:[\"カイトラ\",\"ヴァイサカ\",\"ジャイスタ\",\"アーサダ\",\"スラバナ\",\"バードラ\",\"アスビナ\",\"カルディカ\",\"アヴラハヤナ\",\"パウサ\",\"マーガ\",\"パルグナ\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"サカ\"],short:[\"サカ\"],long:[\"サカ\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"ムハッラム\",\"サフアル\",\"ラビー・ウル・アウワル\",\"ラビー・ウッ・サーニー\",\"ジュマーダル・アウワル\",\"ジュマーダッサーニー\",\"ラジャブ\",\"シャアバーン\",\"ラマダーン\",\"シャウワール\",\"ズル・カイダ\",\"ズル・ヒッジャ\"],long:[\"ムハッラム\",\"サフアル\",\"ラビー・ウル・アウワル\",\"ラビー・ウッ・サーニー\",\"ジュマーダル・アウワル\",\"ジュマーダッサーニー\",\"ラジャブ\",\"シャアバーン\",\"ラマダーン\",\"シャウワール\",\"ズル・カイダ\",\"ズル・ヒッジャ\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"ムハッラム\",\"サフアル\",\"ラビー・ウル・アウワル\",\"ラビー・ウッ・サーニー\",\"ジュマーダル・アウワル\",\"ジュマーダッサーニー\",\"ラジャブ\",\"シャアバーン\",\"ラマダーン\",\"シャウワール\",\"ズル・カイダ\",\"ズル・ヒッジャ\"],long:[\"ムハッラム\",\"サフアル\",\"ラビー・ウル・アウワル\",\"ラビー・ウッ・サーニー\",\"ジュマーダル・アウワル\",\"ジュマーダッサーニー\",\"ラジャブ\",\"シャアバーン\",\"ラマダーン\",\"シャウワール\",\"ズル・カイダ\",\"ズル・ヒッジャ\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},japanese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"大化\",\"白雉\",\"白鳯\",\"朱鳥\",\"大宝\",\"慶雲\",\"和銅\",\"霊亀\",\"養老\",\"神亀\",\"天平\",\"天平感宝\",\"天平勝宝\",\"天平宝字\",\"天平神護\",\"神護景雲\",\"宝亀\",\"天応\",\"延暦\",\"大同\",\"弘仁\",\"天長\",\"承和\",\"嘉祥\",\"仁寿\",\"斉衡\",\"天安\",\"貞観\",\"元慶\",\"仁和\",\"寛平\",\"昌泰\",\"延喜\",\"延長\",\"承平\",\"天慶\",\"天暦\",\"天徳\",\"応和\",\"康保\",\"安和\",\"天禄\",\"天延\",\"貞元\",\"天元\",\"永観\",\"寛和\",\"永延\",\"永祚\",\"正暦\",\"長徳\",\"長保\",\"寛弘\",\"長和\",\"寛仁\",\"治安\",\"万寿\",\"長元\",\"長暦\",\"長久\",\"寛徳\",\"永承\",\"天喜\",\"康平\",\"治暦\",\"延久\",\"承保\",\"承暦\",\"永保\",\"応徳\",\"寛治\",\"嘉保\",\"永長\",\"承徳\",\"康和\",\"長治\",\"嘉承\",\"天仁\",\"天永\",\"永久\",\"元永\",\"保安\",\"天治\",\"大治\",\"天承\",\"長承\",\"保延\",\"永治\",\"康治\",\"天養\",\"久安\",\"仁平\",\"久寿\",\"保元\",\"平治\",\"永暦\",\"応保\",\"長寛\",\"永万\",\"仁安\",\"嘉応\",\"承安\",\"安元\",\"治承\",\"養和\",\"寿永\",\"元暦\",\"文治\",\"建久\",\"正治\",\"建仁\",\"元久\",\"建永\",\"承元\",\"建暦\",\"建保\",\"承久\",\"貞応\",\"元仁\",\"嘉禄\",\"安貞\",\"寛喜\",\"貞永\",\"天福\",\"文暦\",\"嘉禎\",\"暦仁\",\"延応\",\"仁治\",\"寛元\",\"宝治\",\"建長\",\"康元\",\"正嘉\",\"正元\",\"文応\",\"弘長\",\"文永\",\"建治\",\"弘安\",\"正応\",\"永仁\",\"正安\",\"乾元\",\"嘉元\",\"徳治\",\"延慶\",\"応長\",\"正和\",\"文保\",\"元応\",\"元亨\",\"正中\",\"嘉暦\",\"元徳\",\"元弘\",\"建武\",\"延元\",\"興国\",\"正平\",\"建徳\",\"文中\",\"天授\",\"康暦\",\"弘和\",\"元中\",\"至徳\",\"嘉慶\",\"康応\",\"明徳\",\"応永\",\"正長\",\"永享\",\"嘉吉\",\"文安\",\"宝徳\",\"享徳\",\"康正\",\"長禄\",\"寛正\",\"文正\",\"応仁\",\"文明\",\"長享\",\"延徳\",\"明応\",\"文亀\",\"永正\",\"大永\",\"享禄\",\"天文\",\"弘治\",\"永禄\",\"元亀\",\"天正\",\"文禄\",\"慶長\",\"元和\",\"寛永\",\"正保\",\"慶安\",\"承応\",\"明暦\",\"万治\",\"寛文\",\"延宝\",\"天和\",\"貞享\",\"元禄\",\"宝永\",\"正徳\",\"享保\",\"元文\",\"寛保\",\"延享\",\"寛延\",\"宝暦\",\"明和\",\"安永\",\"天明\",\"寛政\",\"享和\",\"文化\",\"文政\",\"天保\",\"弘化\",\"嘉永\",\"安政\",\"万延\",\"文久\",\"元治\",\"慶応\",\"M\",\"T\",\"S\",\"H\"],short:[\"大化\",\"白雉\",\"白鳯\",\"朱鳥\",\"大宝\",\"慶雲\",\"和銅\",\"霊亀\",\"養老\",\"神亀\",\"天平\",\"天平感宝\",\"天平勝宝\",\"天平宝字\",\"天平神護\",\"神護景雲\",\"宝亀\",\"天応\",\"延暦\",\"大同\",\"弘仁\",\"天長\",\"承和\",\"嘉祥\",\"仁寿\",\"斉衡\",\"天安\",\"貞観\",\"元慶\",\"仁和\",\"寛平\",\"昌泰\",\"延喜\",\"延長\",\"承平\",\"天慶\",\"天暦\",\"天徳\",\"応和\",\"康保\",\"安和\",\"天禄\",\"天延\",\"貞元\",\"天元\",\"永観\",\"寛和\",\"永延\",\"永祚\",\"正暦\",\"長徳\",\"長保\",\"寛弘\",\"長和\",\"寛仁\",\"治安\",\"万寿\",\"長元\",\"長暦\",\"長久\",\"寛徳\",\"永承\",\"天喜\",\"康平\",\"治暦\",\"延久\",\"承保\",\"承暦\",\"永保\",\"応徳\",\"寛治\",\"嘉保\",\"永長\",\"承徳\",\"康和\",\"長治\",\"嘉承\",\"天仁\",\"天永\",\"永久\",\"元永\",\"保安\",\"天治\",\"大治\",\"天承\",\"長承\",\"保延\",\"永治\",\"康治\",\"天養\",\"久安\",\"仁平\",\"久寿\",\"保元\",\"平治\",\"永暦\",\"応保\",\"長寛\",\"永万\",\"仁安\",\"嘉応\",\"承安\",\"安元\",\"治承\",\"養和\",\"寿永\",\"元暦\",\"文治\",\"建久\",\"正治\",\"建仁\",\"元久\",\"建永\",\"承元\",\"建暦\",\"建保\",\"承久\",\"貞応\",\"元仁\",\"嘉禄\",\"安貞\",\"寛喜\",\"貞永\",\"天福\",\"文暦\",\"嘉禎\",\"暦仁\",\"延応\",\"仁治\",\"寛元\",\"宝治\",\"建長\",\"康元\",\"正嘉\",\"正元\",\"文応\",\"弘長\",\"文永\",\"建治\",\"弘安\",\"正応\",\"永仁\",\"正安\",\"乾元\",\"嘉元\",\"徳治\",\"延慶\",\"応長\",\"正和\",\"文保\",\"元応\",\"元亨\",\"正中\",\"嘉暦\",\"元徳\",\"元弘\",\"建武\",\"延元\",\"興国\",\"正平\",\"建徳\",\"文中\",\"天授\",\"康暦\",\"弘和\",\"元中\",\"至徳\",\"嘉慶\",\"康応\",\"明徳\",\"応永\",\"正長\",\"永享\",\"嘉吉\",\"文安\",\"宝徳\",\"享徳\",\"康正\",\"長禄\",\"寛正\",\"文正\",\"応仁\",\"文明\",\"長享\",\"延徳\",\"明応\",\"文亀\",\"永正\",\"大永\",\"享禄\",\"天文\",\"弘治\",\"永禄\",\"元亀\",\"天正\",\"文禄\",\"慶長\",\"元和\",\"寛永\",\"正保\",\"慶安\",\"承応\",\"明暦\",\"万治\",\"寛文\",\"延宝\",\"天和\",\"貞享\",\"元禄\",\"宝永\",\"正徳\",\"享保\",\"元文\",\"寛保\",\"延享\",\"寛延\",\"宝暦\",\"明和\",\"安永\",\"天明\",\"寛政\",\"享和\",\"文化\",\"文政\",\"天保\",\"弘化\",\"嘉永\",\"安政\",\"万延\",\"文久\",\"元治\",\"慶応\",\"明治\",\"大正\",\"昭和\",\"平成\"],long:[\"大化\",\"白雉\",\"白鳯\",\"朱鳥\",\"大宝\",\"慶雲\",\"和銅\",\"霊亀\",\"養老\",\"神亀\",\"天平\",\"天平感宝\",\"天平勝宝\",\"天平宝字\",\"天平神護\",\"神護景雲\",\"宝亀\",\"天応\",\"延暦\",\"大同\",\"弘仁\",\"天長\",\"承和\",\"嘉祥\",\"仁寿\",\"斉衡\",\"天安\",\"貞観\",\"元慶\",\"仁和\",\"寛平\",\"昌泰\",\"延喜\",\"延長\",\"承平\",\"天慶\",\"天暦\",\"天徳\",\"応和\",\"康保\",\"安和\",\"天禄\",\"天延\",\"貞元\",\"天元\",\"永観\",\"寛和\",\"永延\",\"永祚\",\"正暦\",\"長徳\",\"長保\",\"寛弘\",\"長和\",\"寛仁\",\"治安\",\"万寿\",\"長元\",\"長暦\",\"長久\",\"寛徳\",\"永承\",\"天喜\",\"康平\",\"治暦\",\"延久\",\"承保\",\"承暦\",\"永保\",\"応徳\",\"寛治\",\"嘉保\",\"永長\",\"承徳\",\"康和\",\"長治\",\"嘉承\",\"天仁\",\"天永\",\"永久\",\"元永\",\"保安\",\"天治\",\"大治\",\"天承\",\"長承\",\"保延\",\"永治\",\"康治\",\"天養\",\"久安\",\"仁平\",\"久寿\",\"保元\",\"平治\",\"永暦\",\"応保\",\"長寛\",\"永万\",\"仁安\",\"嘉応\",\"承安\",\"安元\",\"治承\",\"養和\",\"寿永\",\"元暦\",\"文治\",\"建久\",\"正治\",\"建仁\",\"元久\",\"建永\",\"承元\",\"建暦\",\"建保\",\"承久\",\"貞応\",\"元仁\",\"嘉禄\",\"安貞\",\"寛喜\",\"貞永\",\"天福\",\"文暦\",\"嘉禎\",\"暦仁\",\"延応\",\"仁治\",\"寛元\",\"宝治\",\"建長\",\"康元\",\"正嘉\",\"正元\",\"文応\",\"弘長\",\"文永\",\"建治\",\"弘安\",\"正応\",\"永仁\",\"正安\",\"乾元\",\"嘉元\",\"徳治\",\"延慶\",\"応長\",\"正和\",\"文保\",\"元応\",\"元亨\",\"正中\",\"嘉暦\",\"元徳\",\"元弘\",\"建武\",\"延元\",\"興国\",\"正平\",\"建徳\",\"文中\",\"天授\",\"康暦\",\"弘和\",\"元中\",\"至徳\",\"嘉慶\",\"康応\",\"明徳\",\"応永\",\"正長\",\"永享\",\"嘉吉\",\"文安\",\"宝徳\",\"享徳\",\"康正\",\"長禄\",\"寛正\",\"文正\",\"応仁\",\"文明\",\"長享\",\"延徳\",\"明応\",\"文亀\",\"永正\",\"大永\",\"享禄\",\"天文\",\"弘治\",\"永禄\",\"元亀\",\"天正\",\"文禄\",\"慶長\",\"元和\",\"寛永\",\"正保\",\"慶安\",\"承応\",\"明暦\",\"万治\",\"寛文\",\"延宝\",\"天和\",\"貞享\",\"元禄\",\"宝永\",\"正徳\",\"享保\",\"元文\",\"寛保\",\"延享\",\"寛延\",\"宝暦\",\"明和\",\"安永\",\"天明\",\"寛政\",\"享和\",\"文化\",\"文政\",\"天保\",\"弘化\",\"嘉永\",\"安政\",\"万延\",\"文久\",\"元治\",\"慶応\",\"明治\",\"大正\",\"昭和\",\"平成\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"ファルヴァルディーン\",\"オルディーベヘシュト\",\"ホルダード\",\"ティール\",\"モルダード\",\"シャハリーヴァル\",\"メフル\",\"アーバーン\",\"アーザル\",\"デイ\",\"バフマン\",\"エスファンド\"],long:[\"ファルヴァルディーン\",\"オルディーベヘシュト\",\"ホルダード\",\"ティール\",\"モルダード\",\"シャハリーヴァル\",\"メフル\",\"アーバーン\",\"アーザル\",\"デイ\",\"バフマン\",\"エスファンド\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},roc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"民国前\",\"民国\"],short:[\"民国前\",\"民国\"],long:[\"民国前\",\"民国\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{currency}{number}\",negativePattern:\"{minusSign}{currency}{number}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\".\",group:\",\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"AU$\",BRL:\"R$\",CAD:\"CA$\",CNY:\"元\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",THB:\"฿\",TWD:\"NT$\",USD:\"$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"nl\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E d\",Ehm:\"E h:mm a\",EHm:\"E HH:mm\",Ehms:\"E h:mm:ss a\",EHms:\"E HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"d MMM y G\",GyMMMEd:\"E d MMM y G\",\"h\":\"h a\",\"H\":\"HH\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d-M\",MEd:\"E d-M\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E d MMM\",MMMMd:\"d MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M-y\",yMd:\"d-M-y\",yMEd:\"E d-M-y\",yMMM:\"MMM y\",yMMMd:\"d MMM y\",yMMMEd:\"E d MMM y\",yMMMM:\"MMMM y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE d MMMM y\",yMMMMd:\"d MMMM y\",yMMMd:\"d MMM y\",yMd:\"dd-MM-yy\"},timeFormats:{hmmsszzzz:\"HH:mm:ss zzzz\",hmsz:\"HH:mm:ss z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mrt.\",\"apr.\",\"mei\",\"jun.\",\"jul.\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"BE\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"mnd 1\",\"mnd 2\",\"mnd 3\",\"mnd 4\",\"mnd 5\",\"mnd 6\",\"mnd 7\",\"mnd 8\",\"mnd 9\",\"mnd 10\",\"mnd 11\",\"mnd 12\"],long:[\"maand 1\",\"maand 2\",\"maand 3\",\"maand 4\",\"maand 5\",\"maand 6\",\"maand 7\",\"maand 8\",\"maand 9\",\"maand 10\",\"maand 11\",\"maand 12\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tut\",\"Babah\",\"Hatur\",\"Kiyahk\",\"Tubah\",\"Amshir\",\"Baramhat\",\"Baramundah\",\"Bashans\",\"Ba’unah\",\"Abib\",\"Misra\",\"Nasi\"],long:[\"Tut\",\"Babah\",\"Hatur\",\"Kiyahk\",\"Tubah\",\"Amshir\",\"Baramhat\",\"Baramundah\",\"Bashans\",\"Ba’unah\",\"Abib\",\"Misra\",\"Nasi\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"mnd 1\",\"mnd 2\",\"mnd 3\",\"mnd 4\",\"mnd 5\",\"mnd 6\",\"mnd 7\",\"mnd 8\",\"mnd 9\",\"mnd 10\",\"mnd 11\",\"mnd 12\"],long:[\"maand 1\",\"maand 2\",\"maand 3\",\"maand 4\",\"maand 5\",\"maand 6\",\"maand 7\",\"maand 8\",\"maand 9\",\"maand 10\",\"maand 11\",\"maand 12\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Mäskäräm\",\"Teqemt\",\"Hedar\",\"Tahsas\",\"T’er\",\"Yäkatit\",\"Mägabit\",\"Miyazya\",\"Genbot\",\"Säne\",\"Hamle\",\"Nähase\",\"Pagumän\"],long:[\"Mäskäräm\",\"Teqemt\",\"Hedar\",\"Tahsas\",\"T’er\",\"Yäkatit\",\"Mägabit\",\"Miyazya\",\"Genbot\",\"Säne\",\"Hamle\",\"Nähase\",\"Pagumän\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Mäskäräm\",\"Teqemt\",\"Hedar\",\"Tahsas\",\"T’er\",\"Yäkatit\",\"Mägabit\",\"Miyazya\",\"Genbot\",\"Säne\",\"Hamle\",\"Nähase\",\"Pagumän\"],long:[\"Mäskäräm\",\"Teqemt\",\"Hedar\",\"Tahsas\",\"T’er\",\"Yäkatit\",\"Mägabit\",\"Miyazya\",\"Genbot\",\"Säne\",\"Hamle\",\"Nähase\",\"Pagumän\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},gregory:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mrt.\",\"apr.\",\"mei\",\"jun.\",\"jul.\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"v.C.\",\"n.C.\",\"vgj\",\"gj\"],short:[\"v.Chr.\",\"n.Chr.\",\"v.g.j.\",\"g.j.\"],long:[\"voor Christus\",\"na Christus\",\"vóór gewone jaartelling\",\"gewone jaartelling\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tisjrie\",\"Chesjwan\",\"Kislev\",\"Tevet\",\"Sjevat\",\"Adar A\",\"Adar\",\"Nisan\",\"Ijar\",\"Sivan\",\"Tammoez\",\"Av\",\"Elloel\",\"Adar B\"],long:[\"Tisjrie\",\"Chesjwan\",\"Kislev\",\"Tevet\",\"Sjevat\",\"Adar A\",\"Adar\",\"Nisan\",\"Ijar\",\"Sivan\",\"Tammoez\",\"Av\",\"Elloel\",\"Adar B\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaishakha\",\"Jyeshtha\",\"Aashaadha\",\"Shraavana\",\"Bhaadrapada\",\"Ashvina\",\"Kaartika\",\"Agrahayana\",\"Pausha\",\"Maagha\",\"Phaalguna\"],long:[\"Chaitra\",\"Vaishakha\",\"Jyeshtha\",\"Aashaadha\",\"Shraavana\",\"Bhaadrapada\",\"Ashvina\",\"Kaartika\",\"Agrahayana\",\"Pausha\",\"Maagha\",\"Phaalguna\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"SAKA\"],short:[\"SAKA\"],long:[\"SAKA\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Moeh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Joem. I\",\"Joem. II\",\"Raj.\",\"Sja.\",\"Ram.\",\"Sjaw.\",\"Doe al k.\",\"Doe al h.\"],long:[\"Moeharram\",\"Safar\",\"Rabiʻa al awal\",\"Rabiʻa al thani\",\"Joemadʻal awal\",\"Joemadʻal thani\",\"Rajab\",\"Sjaʻaban\",\"Ramadan\",\"Sjawal\",\"Doe al kaʻaba\",\"Doe al hizja\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"Saʻna Hizjria\"],short:[\"Saʻna Hizjria\"],long:[\"Saʻna Hizjria\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Moeh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Joem. I\",\"Joem. II\",\"Raj.\",\"Sja.\",\"Ram.\",\"Sjaw.\",\"Doe al k.\",\"Doe al h.\"],long:[\"Moeharram\",\"Safar\",\"Rabiʻa al awal\",\"Rabiʻa al thani\",\"Joemadʻal awal\",\"Joemadʻal thani\",\"Rajab\",\"Sjaʻaban\",\"Ramadan\",\"Sjawal\",\"Doe al kaʻaba\",\"Doe al hizja\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"Saʻna Hizjria\"],short:[\"Saʻna Hizjria\"],long:[\"Saʻna Hizjria\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},japanese:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mrt.\",\"apr.\",\"mei\",\"jun.\",\"jul.\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kaho (1094–1096)\",\"Eichō (1096–1097)\",\"Shōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen-ei (1118-1120)\",\"Hoan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hoen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hogen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken-ei (1206-1207)\",\"Shōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Shōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tempuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En-ō (1239-1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun-ō (1260-1261)\",\"Kōchō (1261–1264)\",\"Bun-ei (1264-1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkei (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkyō (1321–1324)\",\"Shōchū (1324–1326)\",\"Kareki (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kemmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun-an (1444-1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenmon (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genwa (1615–1624)\",\"Kan-ei (1624-1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Shōō (1652–1655)\",\"Meiryaku (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenwa (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan-en (1748-1751)\",\"Hōryaku (1751–1764)\",\"Meiwa (1764–1772)\",\"An-ei (1772-1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man-en (1860-1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kaho (1094–1096)\",\"Eichō (1096–1097)\",\"Shōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen-ei (1118-1120)\",\"Hoan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hoen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hogen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken-ei (1206-1207)\",\"Shōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Shōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tempuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En-ō (1239-1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun-ō (1260-1261)\",\"Kōchō (1261–1264)\",\"Bun-ei (1264-1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkei (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkyō (1321–1324)\",\"Shōchū (1324–1326)\",\"Kareki (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kemmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun-an (1444-1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenmon (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genwa (1615–1624)\",\"Kan-ei (1624-1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Shōō (1652–1655)\",\"Meiryaku (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenwa (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan-en (1748-1751)\",\"Hōryaku (1751–1764)\",\"Meiwa (1764–1772)\",\"An-ei (1772-1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man-en (1860-1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},roc:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mrt.\",\"apr.\",\"mei\",\"jun.\",\"jul.\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"voor R.O.C.\",\"Minguo\"],short:[\"voor R.O.C.\",\"Minguo\"],long:[\"voor R.O.C.\",\"Minguo\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{currency} {number}\",negativePattern:\"{currency} {minusSign}{number}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\",\",group:\".\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"AU$\",BRL:\"R$\",CAD:\"C$\",CNY:\"CN¥\",EUR:\"€\",FJD:\"FJ$\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"JP¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",SBD:\"SI$\",THB:\"฿\",TWD:\"NT$\",USD:\"US$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\"}}});","IntlPolyfill.__addLocaleData({locale:\"pt\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E, d\",Ehm:\"E, h:mm a\",EHm:\"E, HH:mm\",Ehms:\"E, h:mm:ss a\",EHms:\"E, HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM 'de' y G\",GyMMMd:\"d 'de' MMM 'de' y G\",GyMMMEd:\"E, d 'de' MMM 'de' y G\",\"h\":\"h a\",\"H\":\"HH\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d/M\",MEd:\"E, dd/MM\",MMdd:\"dd/MM\",MMM:\"LLL\",MMMd:\"d 'de' MMM\",MMMEd:\"E, d 'de' MMM\",MMMMd:\"d 'de' MMMM\",MMMMEd:\"E, d 'de' MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"MM/y\",yMd:\"dd/MM/y\",yMEd:\"E, dd/MM/y\",yMM:\"MM/y\",yMMM:\"MMM 'de' y\",yMMMd:\"d 'de' MMM 'de' y\",yMMMEd:\"E, d 'de' MMM 'de' y\",yMMMM:\"MMMM 'de' y\",yMMMMd:\"d 'de' MMMM 'de' y\",yMMMMEd:\"E, d 'de' MMMM 'de' y\",yQQQ:\"y QQQ\",yQQQQ:\"y QQQQ\"},dateFormats:{yMMMMEEEEd:\"EEEE, d 'de' MMMM 'de' y\",yMMMMd:\"d 'de' MMMM 'de' y\",yMMMd:\"d 'de' MMM 'de' y\",yMd:\"dd/MM/yy\"},timeFormats:{hmmsszzzz:\"HH:mm:ss zzzz\",hmsz:\"HH:mm:ss z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan\",\"fev\",\"mar\",\"abr\",\"mai\",\"jun\",\"jul\",\"ago\",\"set\",\"out\",\"nov\",\"dez\"],long:[\"janeiro\",\"fevereiro\",\"março\",\"abril\",\"maio\",\"junho\",\"julho\",\"agosto\",\"setembro\",\"outubro\",\"novembro\",\"dezembro\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"BE\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Mês 1\",\"Mês 2\",\"Mês 3\",\"Mês 4\",\"Mês 5\",\"Mês 6\",\"Mês 7\",\"Mês 8\",\"Mês 9\",\"Mês 10\",\"Mês 11\",\"Mês 12\"],long:[\"Mês 1\",\"Mês 2\",\"Mês 3\",\"Mês 4\",\"Mês 5\",\"Mês 6\",\"Mês 7\",\"Mês 8\",\"Mês 9\",\"Mês 10\",\"Mês 11\",\"Mês 12\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Mês 1\",\"Mês 2\",\"Mês 3\",\"Mês 4\",\"Mês 5\",\"Mês 6\",\"Mês 7\",\"Mês 8\",\"Mês 9\",\"Mês 10\",\"Mês 11\",\"Mês 12\"],long:[\"Mês 1\",\"Mês 2\",\"Mês 3\",\"Mês 4\",\"Mês 5\",\"Mês 6\",\"Mês 7\",\"Mês 8\",\"Mês 9\",\"Mês 10\",\"Mês 11\",\"Mês 12\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},gregory:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan\",\"fev\",\"mar\",\"abr\",\"mai\",\"jun\",\"jul\",\"ago\",\"set\",\"out\",\"nov\",\"dez\"],long:[\"janeiro\",\"fevereiro\",\"março\",\"abril\",\"maio\",\"junho\",\"julho\",\"agosto\",\"setembro\",\"outubro\",\"novembro\",\"dezembro\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"a.C.\",\"d.C.\",\"AEC\",\"EC\"],short:[\"a.C.\",\"d.C.\",\"AEC\",\"EC\"],long:[\"antes de Cristo\",\"depois de Cristo\",\"antes da Era Comum\",\"Era Comum\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"],long:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},japanese:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan\",\"fev\",\"mar\",\"abr\",\"mai\",\"jun\",\"jul\",\"ago\",\"set\",\"out\",\"nov\",\"dez\"],long:[\"janeiro\",\"fevereiro\",\"março\",\"abril\",\"maio\",\"junho\",\"julho\",\"agosto\",\"setembro\",\"outubro\",\"novembro\",\"dezembro\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},roc:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan\",\"fev\",\"mar\",\"abr\",\"mai\",\"jun\",\"jul\",\"ago\",\"set\",\"out\",\"nov\",\"dez\"],long:[\"janeiro\",\"fevereiro\",\"março\",\"abril\",\"maio\",\"junho\",\"julho\",\"agosto\",\"setembro\",\"outubro\",\"novembro\",\"dezembro\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"Antes de R.O.C.\",\"R.O.C.\"],short:[\"Antes de R.O.C.\",\"R.O.C.\"],long:[\"Antes de R.O.C.\",\"R.O.C.\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{currency}{number}\",negativePattern:\"{minusSign}{currency}{number}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\",\",group:\".\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"AU$\",BRL:\"R$\",CAD:\"CA$\",CNY:\"CN¥\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"JP¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",PTE:\"Esc.\",THB:\"฿\",TWD:\"NT$\",USD:\"US$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"sv\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E d\",Ehm:\"E h:mm a\",EHm:\"E HH:mm\",Ehms:\"E h:mm:ss a\",EHms:\"E HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"d MMM y G\",GyMMMEd:\"E d MMM y G\",\"h\":\"h a\",\"H\":\"HH\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d/M\",MEd:\"E d/M\",MMd:\"d/M\",MMdd:\"dd/MM\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E d MMM\",MMMMd:\"d MMMM\",MMMMEd:\"E d MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"y-MM\",yMd:\"y-MM-dd\",yMEd:\"E, y-MM-dd\",yMM:\"y-MM\",yMMM:\"MMM y\",yMMMd:\"d MMM y\",yMMMEd:\"E d MMM y\",yMMMM:\"MMMM y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE d MMMM y\",yMMMMd:\"d MMMM y\",yMMMd:\"d MMM y\",yMd:\"y-MM-dd\"},timeFormats:{hmmsszzzz:\"'kl'. HH:mm:ss zzzz\",hmsz:\"HH:mm:ss z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mars\",\"apr.\",\"maj\",\"juni\",\"juli\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"mars\",\"april\",\"maj\",\"juni\",\"juli\",\"augusti\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"BE\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"tout\",\"bâbâ\",\"hâtour\",\"kiahk\",\"toubah\",\"amshîr\",\"barmahât\",\"barmoudah\",\"bashans\",\"ba’ounah\",\"abîb\",\"misra\",\"al-nasi\"],long:[\"tout\",\"bâbâ\",\"hâtour\",\"kiahk\",\"toubah\",\"amshîr\",\"barmahât\",\"barmoudah\",\"bashans\",\"ba’ounah\",\"abîb\",\"misra\",\"al-nasi\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"mäskäräm\",\"teqemt\",\"hedar\",\"tahesas\",\"ter\",\"yäkatit\",\"mägabit\",\"miyazya\",\"guenbot\",\"säné\",\"hamlé\",\"nähasé\",\"pagumén\"],long:[\"mäskäräm\",\"teqemt\",\"hedar\",\"tahesas\",\"ter\",\"yäkatit\",\"mägabit\",\"miyazya\",\"guenbot\",\"säné\",\"hamlé\",\"nähasé\",\"pagumén\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"mäskäräm\",\"teqemt\",\"hedar\",\"tahesas\",\"ter\",\"yäkatit\",\"mägabit\",\"miyazya\",\"guenbot\",\"säné\",\"hamlé\",\"nähasé\",\"pagumén\"],long:[\"mäskäräm\",\"teqemt\",\"hedar\",\"tahesas\",\"ter\",\"yäkatit\",\"mägabit\",\"miyazya\",\"guenbot\",\"säné\",\"hamlé\",\"nähasé\",\"pagumén\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},gregory:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mars\",\"apr.\",\"maj\",\"juni\",\"juli\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"mars\",\"april\",\"maj\",\"juni\",\"juli\",\"augusti\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"f.Kr.\",\"e.Kr.\",\"fvt\",\"vt\"],short:[\"f.Kr.\",\"e.Kr.\",\"f.v.t.\",\"v.t.\"],long:[\"före Kristus\",\"efter Kristus\",\"före västerländsk tideräkning\",\"västerländsk tideräkning\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"tishrí\",\"heshván\",\"kislév\",\"tevét\",\"shevát\",\"adár I\",\"adár\",\"nisán\",\"ijjár\",\"siván\",\"tammúz\",\"ab\",\"elúl\",\"adár II\"],long:[\"tishrí\",\"heshván\",\"kislév\",\"tevét\",\"shevát\",\"adár I\",\"adár\",\"nisán\",\"ijjár\",\"siván\",\"tammúz\",\"ab\",\"elúl\",\"adár II\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"chaitra\",\"vaishākh\",\"jyaishtha\",\"āshādha\",\"shrāvana\",\"bhādrapad\",\"āshwin\",\"kārtik\",\"mārgashīrsha\",\"paush\",\"māgh\",\"phālgun\"],long:[\"chaitra\",\"vaishākh\",\"jyaishtha\",\"āshādha\",\"shrāvana\",\"bhādrapad\",\"āshwin\",\"kārtik\",\"mārgashīrsha\",\"paush\",\"māgh\",\"phālgun\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"SAKA\"],short:[\"SAKA\"],long:[\"Saka-eran\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"muharram\",\"safar\",\"rabi’ al-awwal\",\"rabi’ al-akhir\",\"jumada-l-ula\",\"jumada-l-akhira\",\"rajab\",\"sha’ban\",\"ramadan\",\"shawwal\",\"dhu-l-ga’da\",\"dhu-l-hijja\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"muharram\",\"safar\",\"rabi’ al-awwal\",\"rabi’ al-akhir\",\"jumada-l-ula\",\"jumada-l-akhira\",\"rajab\",\"sha’ban\",\"ramadan\",\"shawwal\",\"dhu-l-ga’da\",\"dhu-l-hijja\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},japanese:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mars\",\"apr.\",\"maj\",\"juni\",\"juli\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"mars\",\"april\",\"maj\",\"juni\",\"juli\",\"augusti\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tempyō (729–749)\",\"Tempyō-kampō (749–749)\",\"Tempyō-shōhō (749–757)\",\"Tempyō-hōji (757–765)\",\"Temphō-jingo (765–767)\",\"Jingo-keiun (767–770)\",\"Hōki (770–780)\",\"Ten-ō (781–782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saiko (854–857)\",\"Tennan (857–859)\",\"Jōgan (859–877)\",\"Genkei (877–885)\",\"Ninna (885–889)\",\"Kampyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Shōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten-en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Ei-en (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eiho (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kaho (1094–1096)\",\"Eichō (1096–1097)\",\"Shōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110–1113)\",\"Eikyū (1113–1118)\",\"Gen-ei (1118–1120)\",\"Hoan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hoen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Tenyō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hogen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin-an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryuku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken-ei (1206–1207)\",\"Shōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Shōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tempuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En-ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun-ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun-ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkei (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkyō (1321–1324)\",\"Shōchū (1324–1326)\",\"Kareki (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kemmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun-an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenmon (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genwa (1615–1624)\",\"Kan-ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Shōō (1652–1655)\",\"Meiryaku (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenwa (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan-en (1748–1751)\",\"Hōryaku (1751–1764)\",\"Meiwa (1764–1772)\",\"An-ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man-en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tempyō (729–749)\",\"Tempyō-kampō (749–749)\",\"Tempyō-shōhō (749–757)\",\"Tempyō-hōji (757–765)\",\"Temphō-jingo (765–767)\",\"Jingo-keiun (767–770)\",\"Hōki (770–780)\",\"Ten-ō (781–782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saiko (854–857)\",\"Tennan (857–859)\",\"Jōgan (859–877)\",\"Genkei (877–885)\",\"Ninna (885–889)\",\"Kampyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Shōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten-en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Ei-en (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eiho (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kaho (1094–1096)\",\"Eichō (1096–1097)\",\"Shōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110–1113)\",\"Eikyū (1113–1118)\",\"Gen-ei (1118–1120)\",\"Hoan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hoen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Tenyō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hogen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin-an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryuku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken-ei (1206–1207)\",\"Shōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Shōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tempuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En-ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun-ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun-ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkei (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkyō (1321–1324)\",\"Shōchū (1324–1326)\",\"Kareki (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kemmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun-an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenmon (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genwa (1615–1624)\",\"Kan-ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Shōō (1652–1655)\",\"Meiryaku (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenwa (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan-en (1748–1751)\",\"Hōryaku (1751–1764)\",\"Meiwa (1764–1772)\",\"An-ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man-en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"farvardin\",\"ordibehesht\",\"khordād\",\"tir\",\"mordād\",\"shahrivar\",\"mehr\",\"ābān\",\"āzar\",\"dey\",\"bahman\",\"esfand\"],long:[\"farvardin\",\"ordibehesht\",\"khordād\",\"tir\",\"mordād\",\"shahrivar\",\"mehr\",\"ābān\",\"āzar\",\"dey\",\"bahman\",\"esfand\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},roc:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mars\",\"apr.\",\"maj\",\"juni\",\"juli\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"mars\",\"april\",\"maj\",\"juni\",\"juli\",\"augusti\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"före R.K.\",\"R.K.\"],short:[\"före R.K.\",\"R.K.\"],long:[\"före R.K.\",\"R.K.\"]},dayPeriods:{am:\"fm\",pm:\"em\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{number} {currency}\",negativePattern:\"{minusSign}{number} {currency}\"},percent:{positivePattern:\"{number} {percentSign}\",negativePattern:\"{minusSign}{number} {percentSign}\"}},symbols:{latn:{decimal:\",\",group:\" \",nan:\"¤¤¤\",plusSign:\"+\",minusSign:\"−\",percentSign:\"%\",infinity:\"∞\"}},currencies:{BBD:\"Bds$\",BMD:\"BM$\",BRL:\"BR$\",BSD:\"BS$\",BZD:\"BZ$\",CAD:\"CA$\",DKK:\"Dkr\",DOP:\"RD$\",EEK:\"Ekr\",EGP:\"EG£\",EUR:\"€\",ILS:\"₪\",ISK:\"Ikr\",JMD:\"JM$\",MXN:\"MX$\",NOK:\"Nkr\",SEK:\"kr\",USD:\"US$\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"th\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E d\",Ehm:\"E h:mm a\",EHm:\"E HH:mm น.\",Ehms:\"E h:mm:ss a\",EHms:\"E HH:mm:ss\",Gy:\"G y\",GyMMM:\"MMM G y\",GyMMMd:\"d MMM G y\",GyMMMEd:\"E d MMM G y\",GyMMMEEEEd:\"EEEEที่ d MMM G y\",\"h\":\"h a\",\"H\":\"HH\",hm:\"h:mm a\",Hm:\"HH:mm น.\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d/M\",MEd:\"E d/M\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E d MMM\",MMMEEEEd:\"EEEEที่ d MMM\",MMMMd:\"d MMMM\",MMMMEd:\"E d MMMM\",MMMMEEEEd:\"EEEEที่ d MMMM\",mmss:\"mm:ss\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M/y\",yMd:\"d/M/y\",yMEd:\"E d/M/y\",yMMM:\"MMM y\",yMMMd:\"d MMM y\",yMMMEd:\"E d MMM y\",yMMMEEEEd:\"EEEEที่ d MMM y\",yMMMM:\"MMMM G y\",yMMMMd:\"d MMMM G y\",yMMMMEd:\"E d MMMM G y\",yMMMMEEEEd:\"EEEEที่ d MMMM G y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ G y\"},dateFormats:{yMMMMEEEEd:\"EEEEที่ d MMMM G y\",yMMMMd:\"d MMMM G y\",yMMMd:\"d MMM y\",yMd:\"d/M/yy\"},timeFormats:{hmmsszzzz:\"H นาฬิกา mm นาที ss วินาที zzzz\",hmsz:\"H นาฬิกา mm นาที ss วินาที z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],short:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],long:[\"มกราคม\",\"กุมภาพันธ์\",\"มีนาคม\",\"เมษายน\",\"พฤษภาคม\",\"มิถุนายน\",\"กรกฎาคม\",\"สิงหาคม\",\"กันยายน\",\"ตุลาคม\",\"พฤศจิกายน\",\"ธันวาคม\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"พ.ศ.\"],short:[\"พ.ศ.\"],long:[\"พุทธศักราช\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],long:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"เทาท์\",\"บาบา\",\"ฮาเทอร์\",\"เคียฟ\",\"โทบา\",\"อัมเชอร์\",\"บารัมฮัท\",\"บาราเมาดา\",\"บาชันส์\",\"พาโอนา\",\"อีเปป\",\"เมสรา\",\"นาซี\"],long:[\"เทาท์\",\"บาบา\",\"ฮาเทอร์\",\"เคียฟ\",\"โทบา\",\"อัมเชอร์\",\"บารัมฮัท\",\"บาราเมาดา\",\"บาชันส์\",\"พาโอนา\",\"อีเปป\",\"เมสรา\",\"นาซี\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],long:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"เมสเคอเรม\",\"เตเกมท\",\"เฮดาร์\",\"ทาฮ์ซัส\",\"เทอร์\",\"เยคาทิท\",\"เมกาบิต\",\"เมียเซีย\",\"เจนบอต\",\"เซเน\",\"ฮัมเล\",\"เนแฮซ\",\"พากูเมน\"],long:[\"เมสเคอเรม\",\"เตเกมท\",\"เฮดาร์\",\"ทาฮ์ซัส\",\"เทอร์\",\"เยคาทิท\",\"เมกาบิต\",\"เมียเซีย\",\"เจนบอต\",\"เซเน\",\"ฮัมเล\",\"เนแฮซ\",\"พากูเมน\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"เมสเคอเรม\",\"เตเกมท\",\"เฮดาร์\",\"ทาฮ์ซัส\",\"เทอร์\",\"เยคาทิท\",\"เมกาบิต\",\"เมียเซีย\",\"เจนบอต\",\"เซเน\",\"ฮัมเล\",\"เนแฮซ\",\"พากูเมน\"],long:[\"เมสเคอเรม\",\"เตเกมท\",\"เฮดาร์\",\"ทาฮ์ซัส\",\"เทอร์\",\"เยคาทิท\",\"เมกาบิต\",\"เมียเซีย\",\"เจนบอต\",\"เซเน\",\"ฮัมเล\",\"เนแฮซ\",\"พากูเมน\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},gregory:{months:{narrow:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],short:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],long:[\"มกราคม\",\"กุมภาพันธ์\",\"มีนาคม\",\"เมษายน\",\"พฤษภาคม\",\"มิถุนายน\",\"กรกฎาคม\",\"สิงหาคม\",\"กันยายน\",\"ตุลาคม\",\"พฤศจิกายน\",\"ธันวาคม\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ก่อน ค.ศ.\",\"ค.ศ.\",\"ก.ส.ศ.\",\"ส.ศ.\"],short:[\"ปีก่อน ค.ศ.\",\"ค.ศ.\",\"ก.ส.ศ.\",\"ส.ศ.\"],long:[\"ปีก่อนคริสต์ศักราช\",\"คริสต์ศักราช\",\"ก่อนสามัญศักราช\",\"สามัญศักราช\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"ทิชรี\",\"เฮวาน\",\"กีสเลฟ\",\"เตเวต\",\"เชวัต\",\"อาดาร์ I\",\"อาดาร์\",\"นิสซาน\",\"อิยาร์\",\"สีวัน\",\"ตามูซ\",\"อัฟ\",\"เอลอุล\",\"อาดาร์ II\"],long:[\"ทิชรี\",\"เฮวาน\",\"กีสเลฟ\",\"เตเวต\",\"เชวัต\",\"อาดาร์ I\",\"อาดาร์\",\"นิสซาน\",\"อิยาร์\",\"สีวัน\",\"ตามูซ\",\"อัฟ\",\"เอลอุล\",\"อาดาร์ II\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ย.ศ.\"],short:[\"ย.ศ.\"],long:[\"ย.ศ.\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"จิตรา\",\"วิสาขา\",\"เชษฐา\",\"อัษฎา\",\"ศรวณา\",\"พัตรา\",\"อัศวิชา\",\"การติกา\",\"มฤคศิรา\",\"ปุษยา\",\"มาฆะ\",\"ผลคุณี\"],long:[\"จิตรา\",\"วิสาขา\",\"เชษฐา\",\"อัษฎา\",\"ศรวณา\",\"พัตรา\",\"อัศวิชา\",\"การติกา\",\"มฤคศิรา\",\"ปุษยา\",\"มาฆะ\",\"ผลคุณี\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ม.ศ.\"],short:[\"ม.ศ.\"],long:[\"ม.ศ.\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"มุฮัร.\",\"เศาะ.\",\"รอบี I\",\"รอบี II\",\"จุมาดา I\",\"จุมาดา II\",\"เราะ.\",\"ชะอ์.\",\"เราะมะ.\",\"เชาว.\",\"ซุลกิอฺ.\",\"ซุลหิจ.\"],long:[\"มุฮะร์รอม\",\"ซอฟาร์\",\"รอบี I\",\"รอบี II\",\"จุมาดา I\",\"จุมาดา II\",\"รอจับ\",\"ชะอะบาน\",\"รอมะดอน\",\"เชาวัล\",\"ซุลกิอฺดะฮฺ\",\"ซุลหิจญะฮฺ\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ฮ.ศ.\"],short:[\"ฮ.ศ.\"],long:[\"ฮิจเราะห์ศักราช\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"มุฮัร.\",\"เศาะ.\",\"รอบี I\",\"รอบี II\",\"จุมาดา I\",\"จุมาดา II\",\"เราะ.\",\"ชะอ์.\",\"เราะมะ.\",\"เชาว.\",\"ซุลกิอฺ.\",\"ซุลหิจ.\"],long:[\"มุฮะร์รอม\",\"ซอฟาร์\",\"รอบี I\",\"รอบี II\",\"จุมาดา I\",\"จุมาดา II\",\"รอจับ\",\"ชะอะบาน\",\"รอมะดอน\",\"เชาวัล\",\"ซุลกิอฺดะฮฺ\",\"ซุลหิจญะฮฺ\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ฮ.ศ.\"],short:[\"ฮ.ศ.\"],long:[\"ฮิจเราะห์ศักราช\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},japanese:{months:{narrow:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],short:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],long:[\"มกราคม\",\"กุมภาพันธ์\",\"มีนาคม\",\"เมษายน\",\"พฤษภาคม\",\"มิถุนายน\",\"กรกฎาคม\",\"สิงหาคม\",\"กันยายน\",\"ตุลาคม\",\"พฤศจิกายน\",\"ธันวาคม\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"ทะอิกะ (645–650)\",\"ฮะกุชิ (650–671)\",\"ฮากุโฮ (672–686)\",\"ชุโช (686–701)\",\"ทะอิโฮ (701–704)\",\"เคอุง (704–708)\",\"วะโด (708–715)\",\"เรกิ (715–717)\",\"โยโร (717–724)\",\"จิงกิ (724–729)\",\"เท็มเพียว (729–749)\",\"เท็มเพียว-คัมโป (749-749)\",\"เท็มเพียว-โชโฮ (749-757)\",\"เท็มเพียว-โฮจิ (757-765)\",\"เท็มเพียว-จิงโงะ (765-767)\",\"จิงโงะ-เคอุง (767-770)\",\"โฮกิ (770–780)\",\"เท็นโอ (781–782)\",\"เอ็นเรียะกุ (782–806)\",\"ดะอิโด (806–810)\",\"โคนิง (810–824)\",\"เท็นโช (824–834)\",\"โชวะ (834–848)\",\"คะโจ (848–851)\",\"นินจุ (851–854)\",\"ซะอิโกะ (854–857)\",\"เท็นนัง (857–859)\",\"โจงัง (859–877)\",\"เก็งเก (877–885)\",\"นินนะ (885–889)\",\"คัมเพียว (889–898)\",\"โชตะอิ (898–901)\",\"เอ็งงิ (901–923)\",\"เอ็นโช (923–931)\",\"โชเฮ (931–938)\",\"เท็งเงียว (938–947)\",\"เท็นเรียะกุ (947–957)\",\"เท็นโตะกุ (957–961)\",\"โอวะ (961–964)\",\"โคโฮ (964–968)\",\"อันนะ (968–970)\",\"เท็นโระกุ (970–973)\",\"เท็นเอ็ง (973–976)\",\"โจเง็ง (976–978)\",\"เท็งเง็ง (978–983)\",\"เอกัง (983–985)\",\"คันนะ (985–987)\",\"เอเอ็ง (987–989)\",\"เอโซ (989–990)\",\"โชเรียะกุ (990–995)\",\"โชโตะกุ (995–999)\",\"โชโฮ (999–1004)\",\"คันโก (1004–1012)\",\"โชวะ (1012–1017)\",\"คันนิง (1017–1021)\",\"จิอัง (1021–1024)\",\"มันจุ (1024–1028)\",\"โชเง็ง (1028–1037)\",\"โชเรียะกุ (1037–1040)\",\"โชคีว (1040–1044)\",\"คันโตะกุ (1044–1046)\",\"เอโช (1046–1053)\",\"เท็งงิ (1053–1058)\",\"โคเฮ (1058–1065)\",\"จิเรียะกุ (1065–1069)\",\"เอ็งคีว (1069–1074)\",\"โชโฮ (1074–1077)\",\"โชเรียะกุ (1077–1081)\",\"เอโฮะ (1081–1084)\",\"โอโตะกุ (1084–1087)\",\"คันจิ (1087–1094)\",\"คะโฮะ (1094–1096)\",\"เอโช (1096–1097)\",\"โชโตะกุ (1097–1099)\",\"โควะ (1099–1104)\",\"โชจิ (1104–1106)\",\"คะโช (1106–1108)\",\"เท็นนิง (1108–1110)\",\"เท็นเอ (1110–1113)\",\"เอกีว (1113–1118)\",\"เก็นเอ (1118–1120)\",\"โฮะอัง (1120–1124)\",\"เท็นจิ (1124–1126)\",\"ดะอิจิ (1126–1131)\",\"เท็นโช (1131–1132)\",\"โชโช (1132–1135)\",\"โฮะเอ็ง (1135–1141)\",\"เอจิ (1141–1142)\",\"โคจิ (1142–1144)\",\"เท็นโย (1144–1145)\",\"คีวอัง (1145–1151)\",\"นิมเป (1151–1154)\",\"คีวจุ (1154–1156)\",\"โฮะเง็ง (1156–1159)\",\"เฮจิ (1159–1160)\",\"เอเรียะกุ (1160–1161)\",\"โอโฮ (1161–1163)\",\"โชกัง (1163–1165)\",\"เอมัง (1165–1166)\",\"นินอัง (1166–1169)\",\"คะโอ (1169–1171)\",\"โชอัง (1171–1175)\",\"อังเง็ง (1175–1177)\",\"จิโช (1177–1181)\",\"โยวะ (1181–1182)\",\"จุเอ (1182–1184)\",\"เก็นเรียะกุ (1184–1185)\",\"บุนจิ (1185–1190)\",\"เค็งกีว (1190–1199)\",\"โชจิ (1199–1201)\",\"เค็นนิง (1201–1204)\",\"เก็งกีว (1204–1206)\",\"เค็นเอ (1206–1207)\",\"โชเก็ง (1207–1211)\",\"เค็นเรียะกุ (1211–1213)\",\"เค็มโป (1213–1219)\",\"โชกีว (1219–1222)\",\"โจโอ (1222–1224)\",\"เก็นนิง (1224–1225)\",\"คะโระกุ (1225–1227)\",\"อันเต (1227–1229)\",\"คังกิ (1229–1232)\",\"โจเอ (1232–1233)\",\"เท็มปุกุ (1233–1234)\",\"บุนเรียะกุ (1234–1235)\",\"คะเต (1235–1238)\",\"เรียะกุนิง (1238–1239)\",\"เอ็นโอ (1239–1240)\",\"นินจิ (1240–1243)\",\"คังเง็ง (1243–1247)\",\"โฮจิ (1247–1249)\",\"เค็นโช (1249–1256)\",\"โคเง็ง (1256–1257)\",\"โชกะ (1257–1259)\",\"โชเง็ง (1259–1260)\",\"บุนโอ (1260–1261)\",\"โคโช (1261–1264)\",\"บุนเอ (1264–1275)\",\"เค็นจิ (1275–1278)\",\"โคอัง (1278–1288)\",\"โชโอ (1288–1293)\",\"เอนิง (1293–1299)\",\"โชอัง (1299–1302)\",\"เค็งเง็ง (1302–1303)\",\"คะเง็ง (1303–1306)\",\"โทะกุจิ (1306–1308)\",\"เอ็งเก (1308–1311)\",\"โอโช (1311–1312)\",\"โชวะ (1312–1317)\",\"บุมโป (1317–1319)\",\"เก็นโอ (1319–1321)\",\"เก็งเกียว (1321–1324)\",\"โชชู (1324–1326)\",\"คะเระกิ (1326–1329)\",\"เก็นโตะกุ (1329–1331)\",\"เก็งโก (1331–1334)\",\"เค็มมุ (1334–1336)\",\"เอ็งเง็ง (1336–1340)\",\"โคโกะกุ (1340–1346)\",\"โชเฮ (1346–1370)\",\"เค็นโตะกุ (1370–1372)\",\"บุนชู (1372–1375)\",\"เท็นจุ (1375–1379)\",\"โคเรียะกุ (1379–1381)\",\"โควะ (1381–1384)\",\"เก็นชู (1384–1392)\",\"เมโตะกุ (1384–1387)\",\"คะเค (1387–1389)\",\"โคโอ (1389–1390)\",\"เมโตะกุ (1390–1394)\",\"โอเอ (1394–1428)\",\"โชโช (1428–1429)\",\"เอเกียว (1429–1441)\",\"คะกิสึ (1441–1444)\",\"บุนอัง (1444–1449)\",\"โฮโตะกุ (1449–1452)\",\"เคียวโตะกุ (1452–1455)\",\"โคโช (1455–1457)\",\"โชโระกุ (1457–1460)\",\"คันโช (1460–1466)\",\"บุนโช (1466–1467)\",\"โอนิง (1467–1469)\",\"บุมเม (1469–1487)\",\"โชเกียว (1487–1489)\",\"เอ็นโตะกุ (1489–1492)\",\"เมโอ (1492–1501)\",\"บุงกิ (1501–1504)\",\"เอโช (1504–1521)\",\"ทะอิเอ (1521–1528)\",\"เคียวโระกุ (1528–1532)\",\"เท็มมน (1532–1555)\",\"โคจิ (1555–1558)\",\"เอโระกุ (1558–1570)\",\"เก็งกิ (1570–1573)\",\"เท็นโช (1573–1592)\",\"บุนโระกุ (1592–1596)\",\"เคโช (1596–1615)\",\"เก็งวะ (1615–1624)\",\"คันเอ (1624–1644)\",\"โชโฮ (1644–1648)\",\"เคอัง (1648–1652)\",\"โชโอ (1652–1655)\",\"เมเรียะกุ (1655–1658)\",\"มันจิ (1658–1661)\",\"คัมบุง (1661–1673)\",\"เอ็มโป (1673–1681)\",\"เท็นวะ (1681–1684)\",\"โจเกียว (1684–1688)\",\"เก็นโระกุ (1688–1704)\",\"โฮเอ (1704–1711)\",\"โชโตะกุ (1711–1716)\",\"เคียวโฮ (1716–1736)\",\"เก็มบุง (1736–1741)\",\"คัมโป (1741–1744)\",\"เอ็งเกียว (1744–1748)\",\"คันเอ็ง (1748–1751)\",\"โฮเรียะกุ (1751–1764)\",\"เมวะ (1764–1772)\",\"อันเอ (1772–1781)\",\"เท็มเม (1781–1789)\",\"คันเซ (1789–1801)\",\"เคียววะ (1801–1804)\",\"บุงกะ (1804–1818)\",\"บุนเซ (1818–1830)\",\"เท็มโป (1830–1844)\",\"โคกะ (1844–1848)\",\"คะเอ (1848–1854)\",\"อันเซ (1854–1860)\",\"มันเอ็ง (1860–1861)\",\"บุงกีว (1861–1864)\",\"เก็นจิ (1864–1865)\",\"เคโอ (1865–1868)\",\"เมจิ\",\"ทะอิโช\",\"โชวะ\",\"เฮเซ\"],long:[\"ทะอิกะ (645–650)\",\"ฮะกุชิ (650–671)\",\"ฮากุโฮ (672–686)\",\"ชุโช (686–701)\",\"ทะอิโฮ (701–704)\",\"เคอุง (704–708)\",\"วะโด (708–715)\",\"เรกิ (715–717)\",\"โยโร (717–724)\",\"จิงกิ (724–729)\",\"เท็มเพียว (729–749)\",\"เท็มเพียว-คัมโป (749-749)\",\"เท็มเพียว-โชโฮ (749-757)\",\"เท็มเพียว-โฮจิ (757-765)\",\"เท็มเพียว-จิงโงะ (765-767)\",\"จิงโงะ-เคอุง (767-770)\",\"โฮกิ (770–780)\",\"เท็นโอ (781–782)\",\"เอ็นเรียะกุ (782–806)\",\"ดะอิโด (806–810)\",\"โคนิง (810–824)\",\"เท็นโช (824–834)\",\"โชวะ (834–848)\",\"คะโจ (848–851)\",\"นินจุ (851–854)\",\"ซะอิโกะ (854–857)\",\"เท็นนัง (857–859)\",\"โจงัง (859–877)\",\"เก็งเก (877–885)\",\"นินนะ (885–889)\",\"คัมเพียว (889–898)\",\"โชตะอิ (898–901)\",\"เอ็งงิ (901–923)\",\"เอ็นโช (923–931)\",\"โชเฮ (931–938)\",\"เท็งเงียว (938–947)\",\"เท็นเรียะกุ (947–957)\",\"เท็นโตะกุ (957–961)\",\"โอวะ (961–964)\",\"โคโฮ (964–968)\",\"อันนะ (968–970)\",\"เท็นโระกุ (970–973)\",\"เท็นเอ็ง (973–976)\",\"โจเง็ง (976–978)\",\"เท็งเง็ง (978–983)\",\"เอกัง (983–985)\",\"คันนะ (985–987)\",\"เอเอ็ง (987–989)\",\"เอโซ (989–990)\",\"โชเรียะกุ (990–995)\",\"โชโตะกุ (995–999)\",\"โชโฮ (999–1004)\",\"คันโก (1004–1012)\",\"โชวะ (1012–1017)\",\"คันนิง (1017–1021)\",\"จิอัง (1021–1024)\",\"มันจุ (1024–1028)\",\"โชเง็ง (1028–1037)\",\"โชเรียะกุ (1037–1040)\",\"โชคีว (1040–1044)\",\"คันโตะกุ (1044–1046)\",\"เอโช (1046–1053)\",\"เท็งงิ (1053–1058)\",\"โคเฮ (1058–1065)\",\"จิเรียะกุ (1065–1069)\",\"เอ็งคีว (1069–1074)\",\"โชโฮ (1074–1077)\",\"โชเรียะกุ (1077–1081)\",\"เอโฮะ (1081–1084)\",\"โอโตะกุ (1084–1087)\",\"คันจิ (1087–1094)\",\"คะโฮะ (1094–1096)\",\"เอโช (1096–1097)\",\"โชโตะกุ (1097–1099)\",\"โควะ (1099–1104)\",\"โชจิ (1104–1106)\",\"คะโช (1106–1108)\",\"เท็นนิง (1108–1110)\",\"เท็นเอ (1110–1113)\",\"เอกีว (1113–1118)\",\"เก็นเอ (1118–1120)\",\"โฮะอัง (1120–1124)\",\"เท็นจิ (1124–1126)\",\"ดะอิจิ (1126–1131)\",\"เท็นโช (1131–1132)\",\"โชโช (1132–1135)\",\"โฮะเอ็ง (1135–1141)\",\"เอจิ (1141–1142)\",\"โคจิ (1142–1144)\",\"เท็นโย (1144–1145)\",\"คีวอัง (1145–1151)\",\"นิมเป (1151–1154)\",\"คีวจุ (1154–1156)\",\"โฮะเง็ง (1156–1159)\",\"เฮจิ (1159–1160)\",\"เอเรียะกุ (1160–1161)\",\"โอโฮ (1161–1163)\",\"โชกัง (1163–1165)\",\"เอมัง (1165–1166)\",\"นินอัง (1166–1169)\",\"คะโอ (1169–1171)\",\"โชอัง (1171–1175)\",\"อังเง็ง (1175–1177)\",\"จิโช (1177–1181)\",\"โยวะ (1181–1182)\",\"จุเอ (1182–1184)\",\"เก็นเรียะกุ (1184–1185)\",\"บุนจิ (1185–1190)\",\"เค็งกีว (1190–1199)\",\"โชจิ (1199–1201)\",\"เค็นนิง (1201–1204)\",\"เก็งกีว (1204–1206)\",\"เค็นเอ (1206–1207)\",\"โชเก็ง (1207–1211)\",\"เค็นเรียะกุ (1211–1213)\",\"เค็มโป (1213–1219)\",\"โชกีว (1219–1222)\",\"โจโอ (1222–1224)\",\"เก็นนิง (1224–1225)\",\"คะโระกุ (1225–1227)\",\"อันเต (1227–1229)\",\"คังกิ (1229–1232)\",\"โจเอ (1232–1233)\",\"เท็มปุกุ (1233–1234)\",\"บุนเรียะกุ (1234–1235)\",\"คะเต (1235–1238)\",\"เรียะกุนิง (1238–1239)\",\"เอ็นโอ (1239–1240)\",\"นินจิ (1240–1243)\",\"คังเง็ง (1243–1247)\",\"โฮจิ (1247–1249)\",\"เค็นโช (1249–1256)\",\"โคเง็ง (1256–1257)\",\"โชกะ (1257–1259)\",\"โชเง็ง (1259–1260)\",\"บุนโอ (1260–1261)\",\"โคโช (1261–1264)\",\"บุนเอ (1264–1275)\",\"เค็นจิ (1275–1278)\",\"โคอัง (1278–1288)\",\"โชโอ (1288–1293)\",\"เอนิง (1293–1299)\",\"โชอัง (1299–1302)\",\"เค็งเง็ง (1302–1303)\",\"คะเง็ง (1303–1306)\",\"โทะกุจิ (1306–1308)\",\"เอ็งเก (1308–1311)\",\"โอโช (1311–1312)\",\"โชวะ (1312–1317)\",\"บุมโป (1317–1319)\",\"เก็นโอ (1319–1321)\",\"เก็งเกียว (1321–1324)\",\"โชชู (1324–1326)\",\"คะเระกิ (1326–1329)\",\"เก็นโตะกุ (1329–1331)\",\"เก็งโก (1331–1334)\",\"เค็มมุ (1334–1336)\",\"เอ็งเง็ง (1336–1340)\",\"โคโกะกุ (1340–1346)\",\"โชเฮ (1346–1370)\",\"เค็นโตะกุ (1370–1372)\",\"บุนชู (1372–1375)\",\"เท็นจุ (1375–1379)\",\"โคเรียะกุ (1379–1381)\",\"โควะ (1381–1384)\",\"เก็นชู (1384–1392)\",\"เมโตะกุ (1384–1387)\",\"คะเค (1387–1389)\",\"โคโอ (1389–1390)\",\"เมโตะกุ (1390–1394)\",\"โอเอ (1394–1428)\",\"โชโช (1428–1429)\",\"เอเกียว (1429–1441)\",\"คะกิสึ (1441–1444)\",\"บุนอัง (1444–1449)\",\"โฮโตะกุ (1449–1452)\",\"เคียวโตะกุ (1452–1455)\",\"โคโช (1455–1457)\",\"โชโระกุ (1457–1460)\",\"คันโช (1460–1466)\",\"บุนโช (1466–1467)\",\"โอนิง (1467–1469)\",\"บุมเม (1469–1487)\",\"โชเกียว (1487–1489)\",\"เอ็นโตะกุ (1489–1492)\",\"เมโอ (1492–1501)\",\"บุงกิ (1501–1504)\",\"เอโช (1504–1521)\",\"ทะอิเอ (1521–1528)\",\"เคียวโระกุ (1528–1532)\",\"เท็มมน (1532–1555)\",\"โคจิ (1555–1558)\",\"เอโระกุ (1558–1570)\",\"เก็งกิ (1570–1573)\",\"เท็นโช (1573–1592)\",\"บุนโระกุ (1592–1596)\",\"เคโช (1596–1615)\",\"เก็งวะ (1615–1624)\",\"คันเอ (1624–1644)\",\"โชโฮ (1644–1648)\",\"เคอัง (1648–1652)\",\"โชโอ (1652–1655)\",\"เมเรียะกุ (1655–1658)\",\"มันจิ (1658–1661)\",\"คัมบุง (1661–1673)\",\"เอ็มโป (1673–1681)\",\"เท็นวะ (1681–1684)\",\"โจเกียว (1684–1688)\",\"เก็นโระกุ (1688–1704)\",\"โฮเอ (1704–1711)\",\"โชโตะกุ (1711–1716)\",\"เคียวโฮ (1716–1736)\",\"เก็มบุง (1736–1741)\",\"คัมโป (1741–1744)\",\"เอ็งเกียว (1744–1748)\",\"คันเอ็ง (1748–1751)\",\"โฮเรียะกุ (1751–1764)\",\"เมวะ (1764–1772)\",\"อันเอ (1772–1781)\",\"เท็มเม (1781–1789)\",\"คันเซ (1789–1801)\",\"เคียววะ (1801–1804)\",\"บุงกะ (1804–1818)\",\"บุนเซ (1818–1830)\",\"เท็มโป (1830–1844)\",\"โคกะ (1844–1848)\",\"คะเอ (1848–1854)\",\"อันเซ (1854–1860)\",\"มันเอ็ง (1860–1861)\",\"บุงกีว (1861–1864)\",\"เก็นจิ (1864–1865)\",\"เคโอ (1865–1868)\",\"เมจิ\",\"ทะอิโช\",\"โชวะ\",\"เฮเซ\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"ฟาร์วาร์ดิน\",\"ออร์ดิเบเฮชต์\",\"คอร์แดด\",\"เตอร์\",\"มอร์แดด\",\"ชาหริวาร์\",\"เมฮร์\",\"อะบาน\",\"อะซาร์\",\"เดย์\",\"บาฮ์มาน\",\"เอสฟานด์\"],long:[\"ฟาร์วาร์ดิน\",\"ออร์ดิเบเฮชต์\",\"คอร์แดด\",\"เตอร์\",\"มอร์แดด\",\"ชาหริวาร์\",\"เมฮร์\",\"อะบาน\",\"อะซาร์\",\"เดย์\",\"บาฮ์มาน\",\"เอสฟานด์\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ปีเปอร์เซีย\"],short:[\"ปีเปอร์เซีย\"],long:[\"ปีเปอร์เซีย\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},roc:{months:{narrow:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],short:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],long:[\"มกราคม\",\"กุมภาพันธ์\",\"มีนาคม\",\"เมษายน\",\"พฤษภาคม\",\"มิถุนายน\",\"กรกฎาคม\",\"สิงหาคม\",\"กันยายน\",\"ตุลาคม\",\"พฤศจิกายน\",\"ธันวาคม\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ปีก่อนไต้หวัน\",\"ไต้หวัน\"],short:[\"ปีก่อนไต้หวัน\",\"ไต้หวัน\"],long:[\"ปีก่อนไต้หวัน\",\"ไต้หวัน\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{currency}{number}\",negativePattern:\"{minusSign}{currency}{number}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\".\",group:\",\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"},thai:{decimal:\".\",group:\",\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"AU$\",BRL:\"R$\",CAD:\"CA$\",CNY:\"CN¥\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",TWD:\"NT$\",USD:\"US$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"zh\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:true,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d日\",\"E\":\"ccc\",Ed:\"d日E\",Ehm:\"E ah:mm\",EHm:\"EHH:mm\",Ehms:\"E ah:mm:ss\",EHms:\"EHH:mm:ss\",Gy:\"Gy年\",GyMMM:\"Gy年M月\",GyMMMd:\"Gy年M月d日\",GyMMMEd:\"Gy年M月d日E\",\"h\":\"ah时\",\"H\":\"H时\",hm:\"ah:mm\",Hm:\"HH:mm\",hms:\"ah:mm:ss\",Hms:\"HH:mm:ss\",hmsv:\"v ah:mm:ss\",Hmsv:\"v HH:mm:ss\",hmv:\"v ah:mm\",Hmv:\"v HH:mm\",\"M\":\"M月\",Md:\"M/d\",MEd:\"M/dE\",MMdd:\"MM/dd\",MMM:\"LLL\",MMMd:\"M月d日\",MMMEd:\"M月d日E\",MMMMd:\"M月d日\",ms:\"mm:ss\",\"y\":\"y年\",yM:\"y年M月\",yMd:\"y/M/d\",yMEd:\"y/M/dE\",yMM:\"y年M月\",yMMM:\"y年M月\",yMMMd:\"y年M月d日\",yMMMEd:\"y年M月d日E\",yMMMM:\"y年M月\",yQQQ:\"y年第Q季度\",yQQQQ:\"y年第Q季度\"},dateFormats:{yMMMMEEEEd:\"y年M月d日EEEE\",yMMMMd:\"y年M月d日\",yMMMd:\"y年M月d日\",yMd:\"y/M/d\"},timeFormats:{hmmsszzzz:\"zzzz ah:mm:ss\",hmsz:\"z ah:mm:ss\",hms:\"ah:mm:ss\",hm:\"ah:mm\"}},calendars:{buddhist:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"佛历\"],short:[\"佛历\"],long:[\"佛历\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},chinese:{months:{narrow:[\"正\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"冬\",\"腊\"],short:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"冬月\",\"腊月\"],long:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"冬月\",\"腊月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\",\"13月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\",\"十三月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},dangi:{months:{narrow:[\"正\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"冬\",\"腊\"],short:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"冬月\",\"腊月\"],long:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"冬月\",\"腊月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\",\"13月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\",\"十三月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\",\"13月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\",\"十三月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},gregory:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"公元前\",\"公元\",\"西元前\",\"西元\"],short:[\"公元前\",\"公元\",\"西元前\",\"西元\"],long:[\"公元前\",\"公元\",\"西元前\",\"西元\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\",\"13月\",\"闰7月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\",\"十三月\",\"闰七月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"希伯来历\"],short:[\"希伯来历\"],long:[\"希伯来历\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"印度历\"],short:[\"印度历\"],long:[\"印度历\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"伊斯兰历\"],short:[\"伊斯兰历\"],long:[\"伊斯兰历\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"伊斯兰历\"],short:[\"伊斯兰历\"],long:[\"伊斯兰历\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},japanese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"大化 (645–650)\",\"白雉 (650–671)\",\"白凤 (672–686)\",\"朱鸟 (686–701)\",\"大宝 (701–704)\",\"庆云 (704–708)\",\"和铜 (708–715)\",\"灵龟 (715–717)\",\"养老 (717–724)\",\"神龟 (724–729)\",\"天平 (729–749)\",\"天平感宝 (749–749)\",\"天平胜宝 (749–757)\",\"天平宝字 (757–765)\",\"天平神护 (765–767)\",\"神护景云 (767–770)\",\"宝龟 (770–780)\",\"天应 (781–782)\",\"延历 (782–806)\",\"大同 (806–810)\",\"弘仁 (810–824)\",\"天长 (824–834)\",\"承和 (834–848)\",\"嘉祥 (848–851)\",\"仁寿 (851–854)\",\"齐衡 (854–857)\",\"天安 (857–859)\",\"贞观 (859–877)\",\"元庆 (877–885)\",\"仁和 (885–889)\",\"宽平 (889–898)\",\"昌泰 (898–901)\",\"延喜 (901–923)\",\"延长 (923–931)\",\"承平 (931–938)\",\"天庆 (938–947)\",\"天历 (947–957)\",\"天德 (957–961)\",\"应和 (961–964)\",\"康保 (964–968)\",\"安和 (968–970)\",\"天禄 (970–973)\",\"天延 (973–976)\",\"贞元 (976–978)\",\"天元 (978–983)\",\"永观 (983–985)\",\"宽和 (985–987)\",\"永延 (987–989)\",\"永祚 (989–990)\",\"正历 (990–995)\",\"长德 (995–999)\",\"长保 (999–1004)\",\"宽弘 (1004–1012)\",\"长和 (1012–1017)\",\"宽仁 (1017–1021)\",\"治安 (1021–1024)\",\"万寿 (1024–1028)\",\"长元 (1028–1037)\",\"长历 (1037–1040)\",\"长久 (1040–1044)\",\"宽德 (1044–1046)\",\"永承 (1046–1053)\",\"天喜 (1053–1058)\",\"康平 (1058–1065)\",\"治历 (1065–1069)\",\"延久 (1069–1074)\",\"承保 (1074–1077)\",\"正历 (1077–1081)\",\"永保 (1081–1084)\",\"应德 (1084–1087)\",\"宽治 (1087–1094)\",\"嘉保 (1094–1096)\",\"永长 (1096–1097)\",\"承德 (1097–1099)\",\"康和 (1099–1104)\",\"长治 (1104–1106)\",\"嘉承 (1106–1108)\",\"天仁 (1108–1110)\",\"天永 (1110–1113)\",\"永久 (1113–1118)\",\"元永 (1118–1120)\",\"保安 (1120–1124)\",\"天治 (1124–1126)\",\"大治 (1126–1131)\",\"天承 (1131–1132)\",\"长承 (1132–1135)\",\"保延 (1135–1141)\",\"永治 (1141–1142)\",\"康治 (1142–1144)\",\"天养 (1144–1145)\",\"久安 (1145–1151)\",\"仁平 (1151–1154)\",\"久寿 (1154–1156)\",\"保元 (1156–1159)\",\"平治 (1159–1160)\",\"永历 (1160–1161)\",\"应保 (1161–1163)\",\"长宽 (1163–1165)\",\"永万 (1165–1166)\",\"仁安 (1166–1169)\",\"嘉应 (1169–1171)\",\"承安 (1171–1175)\",\"安元 (1175–1177)\",\"治承 (1177–1181)\",\"养和 (1181–1182)\",\"寿永 (1182–1184)\",\"元历 (1184–1185)\",\"文治 (1185–1190)\",\"建久 (1190–1199)\",\"正治 (1199–1201)\",\"建仁 (1201–1204)\",\"元久 (1204–1206)\",\"建永 (1206–1207)\",\"承元 (1207–1211)\",\"建历 (1211–1213)\",\"建保 (1213–1219)\",\"承久 (1219–1222)\",\"贞应 (1222–1224)\",\"元仁 (1224–1225)\",\"嘉禄 (1225–1227)\",\"安贞 (1227–1229)\",\"宽喜 (1229–1232)\",\"贞永 (1232–1233)\",\"天福 (1233–1234)\",\"文历 (1234–1235)\",\"嘉祯 (1235–1238)\",\"历仁 (1238–1239)\",\"延应 (1239–1240)\",\"仁治 (1240–1243)\",\"宽元 (1243–1247)\",\"宝治 (1247–1249)\",\"建长 (1249–1256)\",\"康元 (1256–1257)\",\"正嘉 (1257–1259)\",\"正元 (1259–1260)\",\"文应 (1260–1261)\",\"弘长 (1261–1264)\",\"文永 (1264–1275)\",\"建治 (1275–1278)\",\"弘安 (1278–1288)\",\"正应 (1288–1293)\",\"永仁 (1293–1299)\",\"正安 (1299–1302)\",\"干元 (1302–1303)\",\"嘉元 (1303–1306)\",\"德治 (1306–1308)\",\"延庆 (1308–1311)\",\"应长 (1311–1312)\",\"正和 (1312–1317)\",\"文保 (1317–1319)\",\"元应 (1319–1321)\",\"元亨 (1321–1324)\",\"正中 (1324–1326)\",\"嘉历 (1326–1329)\",\"元德 (1329–1331)\",\"元弘 (1331–1334)\",\"建武 (1334–1336)\",\"延元 (1336–1340)\",\"兴国 (1340–1346)\",\"正平 (1346–1370)\",\"建德 (1370–1372)\",\"文中 (1372–1375)\",\"天授 (1375–1379)\",\"康历 (1379–1381)\",\"弘和 (1381–1384)\",\"元中 (1384–1392)\",\"至德 (1384–1387)\",\"嘉庆 (1387–1389)\",\"康应 (1389–1390)\",\"明德 (1390–1394)\",\"应永 (1394–1428)\",\"正长 (1428–1429)\",\"永享 (1429–1441)\",\"嘉吉 (1441–1444)\",\"文安 (1444–1449)\",\"宝德 (1449–1452)\",\"享德 (1452–1455)\",\"康正 (1455–1457)\",\"长禄 (1457–1460)\",\"宽正 (1460–1466)\",\"文正 (1466–1467)\",\"应仁 (1467–1469)\",\"文明 (1469–1487)\",\"长享 (1487–1489)\",\"延德 (1489–1492)\",\"明应 (1492–1501)\",\"文龟 (1501–1504)\",\"永正 (1504–1521)\",\"大永 (1521–1528)\",\"享禄 (1528–1532)\",\"天文 (1532–1555)\",\"弘治 (1555–1558)\",\"永禄 (1558–1570)\",\"元龟 (1570–1573)\",\"天正 (1573–1592)\",\"文禄 (1592–1596)\",\"庆长 (1596–1615)\",\"元和 (1615–1624)\",\"宽永 (1624–1644)\",\"正保 (1644–1648)\",\"庆安 (1648–1652)\",\"承应 (1652–1655)\",\"明历 (1655–1658)\",\"万治 (1658–1661)\",\"宽文 (1661–1673)\",\"延宝 (1673–1681)\",\"天和 (1681–1684)\",\"贞享 (1684–1688)\",\"元禄 (1688–1704)\",\"宝永 (1704–1711)\",\"正德 (1711–1716)\",\"享保 (1716–1736)\",\"元文 (1736–1741)\",\"宽保 (1741–1744)\",\"延享 (1744–1748)\",\"宽延 (1748–1751)\",\"宝历 (1751–1764)\",\"明和 (1764–1772)\",\"安永 (1772–1781)\",\"天明 (1781–1789)\",\"宽政 (1789–1801)\",\"享和 (1801–1804)\",\"文化 (1804–1818)\",\"文政 (1818–1830)\",\"天保 (1830–1844)\",\"弘化 (1844–1848)\",\"嘉永 (1848–1854)\",\"安政 (1854–1860)\",\"万延 (1860–1861)\",\"文久 (1861–1864)\",\"元治 (1864–1865)\",\"庆应 (1865–1868)\",\"明治\",\"大正\",\"昭和\",\"平成\"],long:[\"大化 (645–650)\",\"白雉 (650–671)\",\"白凤 (672–686)\",\"朱鸟 (686–701)\",\"大宝 (701–704)\",\"庆云 (704–708)\",\"和铜 (708–715)\",\"灵龟 (715–717)\",\"养老 (717–724)\",\"神龟 (724–729)\",\"天平 (729–749)\",\"天平感宝 (749–749)\",\"天平胜宝 (749–757)\",\"天平宝字 (757–765)\",\"天平神护 (765–767)\",\"神护景云 (767–770)\",\"宝龟 (770–780)\",\"天应 (781–782)\",\"延历 (782–806)\",\"大同 (806–810)\",\"弘仁 (810–824)\",\"天长 (824–834)\",\"承和 (834–848)\",\"嘉祥 (848–851)\",\"仁寿 (851–854)\",\"齐衡 (854–857)\",\"天安 (857–859)\",\"贞观 (859–877)\",\"元庆 (877–885)\",\"仁和 (885–889)\",\"宽平 (889–898)\",\"昌泰 (898–901)\",\"延喜 (901–923)\",\"延长 (923–931)\",\"承平 (931–938)\",\"天庆 (938–947)\",\"天历 (947–957)\",\"天德 (957–961)\",\"应和 (961–964)\",\"康保 (964–968)\",\"安和 (968–970)\",\"天禄 (970–973)\",\"天延 (973–976)\",\"贞元 (976–978)\",\"天元 (978–983)\",\"永观 (983–985)\",\"宽和 (985–987)\",\"永延 (987–989)\",\"永祚 (989–990)\",\"正历 (990–995)\",\"长德 (995–999)\",\"长保 (999–1004)\",\"宽弘 (1004–1012)\",\"长和 (1012–1017)\",\"宽仁 (1017–1021)\",\"治安 (1021–1024)\",\"万寿 (1024–1028)\",\"长元 (1028–1037)\",\"长历 (1037–1040)\",\"长久 (1040–1044)\",\"宽德 (1044–1046)\",\"永承 (1046–1053)\",\"天喜 (1053–1058)\",\"康平 (1058–1065)\",\"治历 (1065–1069)\",\"延久 (1069–1074)\",\"承保 (1074–1077)\",\"正历 (1077–1081)\",\"永保 (1081–1084)\",\"应德 (1084–1087)\",\"宽治 (1087–1094)\",\"嘉保 (1094–1096)\",\"永长 (1096–1097)\",\"承德 (1097–1099)\",\"康和 (1099–1104)\",\"长治 (1104–1106)\",\"嘉承 (1106–1108)\",\"天仁 (1108–1110)\",\"天永 (1110–1113)\",\"永久 (1113–1118)\",\"元永 (1118–1120)\",\"保安 (1120–1124)\",\"天治 (1124–1126)\",\"大治 (1126–1131)\",\"天承 (1131–1132)\",\"长承 (1132–1135)\",\"保延 (1135–1141)\",\"永治 (1141–1142)\",\"康治 (1142–1144)\",\"天养 (1144–1145)\",\"久安 (1145–1151)\",\"仁平 (1151–1154)\",\"久寿 (1154–1156)\",\"保元 (1156–1159)\",\"平治 (1159–1160)\",\"永历 (1160–1161)\",\"应保 (1161–1163)\",\"长宽 (1163–1165)\",\"永万 (1165–1166)\",\"仁安 (1166–1169)\",\"嘉应 (1169–1171)\",\"承安 (1171–1175)\",\"安元 (1175–1177)\",\"治承 (1177–1181)\",\"养和 (1181–1182)\",\"寿永 (1182–1184)\",\"元历 (1184–1185)\",\"文治 (1185–1190)\",\"建久 (1190–1199)\",\"正治 (1199–1201)\",\"建仁 (1201–1204)\",\"元久 (1204–1206)\",\"建永 (1206–1207)\",\"承元 (1207–1211)\",\"建历 (1211–1213)\",\"建保 (1213–1219)\",\"承久 (1219–1222)\",\"贞应 (1222–1224)\",\"元仁 (1224–1225)\",\"嘉禄 (1225–1227)\",\"安贞 (1227–1229)\",\"宽喜 (1229–1232)\",\"贞永 (1232–1233)\",\"天福 (1233–1234)\",\"文历 (1234–1235)\",\"嘉祯 (1235–1238)\",\"历仁 (1238–1239)\",\"延应 (1239–1240)\",\"仁治 (1240–1243)\",\"宽元 (1243–1247)\",\"宝治 (1247–1249)\",\"建长 (1249–1256)\",\"康元 (1256–1257)\",\"正嘉 (1257–1259)\",\"正元 (1259–1260)\",\"文应 (1260–1261)\",\"弘长 (1261–1264)\",\"文永 (1264–1275)\",\"建治 (1275–1278)\",\"弘安 (1278–1288)\",\"正应 (1288–1293)\",\"永仁 (1293–1299)\",\"正安 (1299–1302)\",\"干元 (1302–1303)\",\"嘉元 (1303–1306)\",\"德治 (1306–1308)\",\"延庆 (1308–1311)\",\"应长 (1311–1312)\",\"正和 (1312–1317)\",\"文保 (1317–1319)\",\"元应 (1319–1321)\",\"元亨 (1321–1324)\",\"正中 (1324–1326)\",\"嘉历 (1326–1329)\",\"元德 (1329–1331)\",\"元弘 (1331–1334)\",\"建武 (1334–1336)\",\"延元 (1336–1340)\",\"兴国 (1340–1346)\",\"正平 (1346–1370)\",\"建德 (1370–1372)\",\"文中 (1372–1375)\",\"天授 (1375–1379)\",\"康历 (1379–1381)\",\"弘和 (1381–1384)\",\"元中 (1384–1392)\",\"至德 (1384–1387)\",\"嘉庆 (1387–1389)\",\"康应 (1389–1390)\",\"明德 (1390–1394)\",\"应永 (1394–1428)\",\"正长 (1428–1429)\",\"永享 (1429–1441)\",\"嘉吉 (1441–1444)\",\"文安 (1444–1449)\",\"宝德 (1449–1452)\",\"享德 (1452–1455)\",\"康正 (1455–1457)\",\"长禄 (1457–1460)\",\"宽正 (1460–1466)\",\"文正 (1466–1467)\",\"应仁 (1467–1469)\",\"文明 (1469–1487)\",\"长享 (1487–1489)\",\"延德 (1489–1492)\",\"明应 (1492–1501)\",\"文龟 (1501–1504)\",\"永正 (1504–1521)\",\"大永 (1521–1528)\",\"享禄 (1528–1532)\",\"天文 (1532–1555)\",\"弘治 (1555–1558)\",\"永禄 (1558–1570)\",\"元龟 (1570–1573)\",\"天正 (1573–1592)\",\"文禄 (1592–1596)\",\"庆长 (1596–1615)\",\"元和 (1615–1624)\",\"宽永 (1624–1644)\",\"正保 (1644–1648)\",\"庆安 (1648–1652)\",\"承应 (1652–1655)\",\"明历 (1655–1658)\",\"万治 (1658–1661)\",\"宽文 (1661–1673)\",\"延宝 (1673–1681)\",\"天和 (1681–1684)\",\"贞享 (1684–1688)\",\"元禄 (1688–1704)\",\"宝永 (1704–1711)\",\"正德 (1711–1716)\",\"享保 (1716–1736)\",\"元文 (1736–1741)\",\"宽保 (1741–1744)\",\"延享 (1744–1748)\",\"宽延 (1748–1751)\",\"宝历 (1751–1764)\",\"明和 (1764–1772)\",\"安永 (1772–1781)\",\"天明 (1781–1789)\",\"宽政 (1789–1801)\",\"享和 (1801–1804)\",\"文化 (1804–1818)\",\"文政 (1818–1830)\",\"天保 (1830–1844)\",\"弘化 (1844–1848)\",\"嘉永 (1848–1854)\",\"安政 (1854–1860)\",\"万延 (1860–1861)\",\"文久 (1861–1864)\",\"元治 (1864–1865)\",\"庆应 (1865–1868)\",\"明治\",\"大正\",\"昭和\",\"平成\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"波斯历\"],short:[\"波斯历\"],long:[\"波斯历\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},roc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"民国前\",\"民国\"],short:[\"民国前\",\"民国\"],long:[\"民国前\",\"民国\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{currency}{number}\",negativePattern:\"{minusSign}{currency}{number}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{hanidec:{decimal:\".\",group:\",\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"},latn:{decimal:\".\",group:\",\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"AU$\",BRL:\"R$\",CAD:\"CA$\",CNY:\"¥\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILR:\"ILS\",ILS:\"₪\",INR:\"₹\",JPY:\"JP¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",TWD:\"NT$\",USD:\"US$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\n","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r\\+\\/\\=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r\\+\\/\\=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = new Buffer(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n var f = basename(path);\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n 'sha': 'SHA-1',\n 'sha-1': 'SHA-1',\n 'sha1': 'SHA-1',\n 'sha256': 'SHA-256',\n 'sha-256': 'SHA-256',\n 'sha384': 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n 'sha512': 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\n\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n process.nextTick(function () {\n callback(null, out)\n })\n }, function (e) {\n process.nextTick(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n return process.nextTick(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n }\n\n checkParameters(password, salt, iterations, keylen)\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n defaultEncoding = 'utf-8'\n} else {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n}\nmodule.exports = defaultEncoding\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nfunction checkBuffer (buf, name) {\n if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) {\n throw new TypeError(name + ' must be a buffer or string')\n }\n}\n\nmodule.exports = function (password, salt, iterations, keylen) {\n checkBuffer(password, 'Password')\n checkBuffer(salt, 'Salt')\n\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar Buffer = require('safe-buffer').Buffer\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(password, salt, iterations, keylen)\n\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","module.exports = require('./lib/_stream_duplex.js');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","module.exports = require('events').EventEmitter;\n","module.exports = require('./readable').PassThrough\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","module.exports = require('./readable').Transform\n","module.exports = require('./lib/_stream_writable.js');\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a ';\r\n }\r\n const iframeContents = '' + script + '';\r\n try {\r\n this.myIFrame.doc.open();\r\n this.myIFrame.doc.write(iframeContents);\r\n this.myIFrame.doc.close();\r\n }\r\n catch (e) {\r\n log('frame writing exception');\r\n if (e.stack) {\r\n log(e.stack);\r\n }\r\n log(e);\r\n }\r\n }\r\n else {\r\n this.commandCB = commandCB;\r\n this.onMessageCB = onMessageCB;\r\n }\r\n }\r\n /**\r\n * Each browser has its own funny way to handle iframes. Here we mush them all together into one object that I can\r\n * actually use.\r\n */\r\n static createIFrame_() {\r\n const iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n // This is necessary in order to initialize the document inside the iframe\r\n if (document.body) {\r\n document.body.appendChild(iframe);\r\n try {\r\n // If document.domain has been modified in IE, this will throw an error, and we need to set the\r\n // domain of the iframe's document manually. We can do this via a javascript: url as the src attribute\r\n // Also note that we must do this *after* the iframe has been appended to the page. Otherwise it doesn't work.\r\n const a = iframe.contentWindow.document;\r\n if (!a) {\r\n // Apologies for the log-spam, I need to do something to keep closure from optimizing out the assignment above.\r\n log('No IE domain setting required');\r\n }\r\n }\r\n catch (e) {\r\n const domain = document.domain;\r\n iframe.src =\r\n \"javascript:void((function(){document.open();document.domain='\" +\r\n domain +\r\n \"';document.close();})())\";\r\n }\r\n }\r\n else {\r\n // LongPollConnection attempts to delay initialization until the document is ready, so hopefully this\r\n // never gets hit.\r\n throw 'Document body has not initialized. Wait to initialize Firebase until after the document is ready.';\r\n }\r\n // Get the document of the iframe in a browser-specific way.\r\n if (iframe.contentDocument) {\r\n iframe.doc = iframe.contentDocument; // Firefox, Opera, Safari\r\n }\r\n else if (iframe.contentWindow) {\r\n iframe.doc = iframe.contentWindow.document; // Internet Explorer\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }\r\n else if (iframe.document) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n iframe.doc = iframe.document; //others?\r\n }\r\n return iframe;\r\n }\r\n /**\r\n * Cancel all outstanding queries and remove the frame.\r\n */\r\n close() {\r\n //Mark this iframe as dead, so no new requests are sent.\r\n this.alive = false;\r\n if (this.myIFrame) {\r\n //We have to actually remove all of the html inside this iframe before removing it from the\r\n //window, or IE will continue loading and executing the script tags we've already added, which\r\n //can lead to some errors being thrown. Setting textContent seems to be the safest way to do this.\r\n this.myIFrame.doc.body.textContent = '';\r\n setTimeout(() => {\r\n if (this.myIFrame !== null) {\r\n document.body.removeChild(this.myIFrame);\r\n this.myIFrame = null;\r\n }\r\n }, Math.floor(0));\r\n }\r\n // Protect from being called recursively.\r\n const onDisconnect = this.onDisconnect;\r\n if (onDisconnect) {\r\n this.onDisconnect = null;\r\n onDisconnect();\r\n }\r\n }\r\n /**\r\n * Actually start the long-polling session by adding the first script tag(s) to the iframe.\r\n * @param id - The ID of this connection\r\n * @param pw - The password for this connection\r\n */\r\n startLongPoll(id, pw) {\r\n this.myID = id;\r\n this.myPW = pw;\r\n this.alive = true;\r\n //send the initial request. If there are requests queued, make sure that we transmit as many as we are currently able to.\r\n while (this.newRequest_()) { }\r\n }\r\n /**\r\n * This is called any time someone might want a script tag to be added. It adds a script tag when there aren't\r\n * too many outstanding requests and we are still alive.\r\n *\r\n * If there are outstanding packet segments to send, it sends one. If there aren't, it sends a long-poll anyways if\r\n * needed.\r\n */\r\n newRequest_() {\r\n // We keep one outstanding request open all the time to receive data, but if we need to send data\r\n // (pendingSegs.length > 0) then we create a new request to send the data. The server will automatically\r\n // close the old request.\r\n if (this.alive &&\r\n this.sendNewPolls &&\r\n this.outstandingRequests.size < (this.pendingSegs.length > 0 ? 2 : 1)) {\r\n //construct our url\r\n this.currentSerial++;\r\n const urlParams = {};\r\n urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\r\n urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\r\n urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = this.currentSerial;\r\n let theURL = this.urlFn(urlParams);\r\n //Now add as much data as we can.\r\n let curDataString = '';\r\n let i = 0;\r\n while (this.pendingSegs.length > 0) {\r\n //first, lets see if the next segment will fit.\r\n const nextSeg = this.pendingSegs[0];\r\n if (nextSeg.d.length +\r\n SEG_HEADER_SIZE +\r\n curDataString.length <=\r\n MAX_URL_DATA_SIZE) {\r\n //great, the segment will fit. Lets append it.\r\n const theSeg = this.pendingSegs.shift();\r\n curDataString =\r\n curDataString +\r\n '&' +\r\n FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM +\r\n i +\r\n '=' +\r\n theSeg.seg +\r\n '&' +\r\n FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET +\r\n i +\r\n '=' +\r\n theSeg.ts +\r\n '&' +\r\n FIREBASE_LONGPOLL_DATA_PARAM +\r\n i +\r\n '=' +\r\n theSeg.d;\r\n i++;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n theURL = theURL + curDataString;\r\n this.addLongPollTag_(theURL, this.currentSerial);\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n /**\r\n * Queue a packet for transmission to the server.\r\n * @param segnum - A sequential id for this packet segment used for reassembly\r\n * @param totalsegs - The total number of segments in this packet\r\n * @param data - The data for this segment.\r\n */\r\n enqueueSegment(segnum, totalsegs, data) {\r\n //add this to the queue of segments to send.\r\n this.pendingSegs.push({ seg: segnum, ts: totalsegs, d: data });\r\n //send the data immediately if there isn't already data being transmitted, unless\r\n //startLongPoll hasn't been called yet.\r\n if (this.alive) {\r\n this.newRequest_();\r\n }\r\n }\r\n /**\r\n * Add a script tag for a regular long-poll request.\r\n * @param url - The URL of the script tag.\r\n * @param serial - The serial number of the request.\r\n */\r\n addLongPollTag_(url, serial) {\r\n //remember that we sent this request.\r\n this.outstandingRequests.add(serial);\r\n const doNewRequest = () => {\r\n this.outstandingRequests.delete(serial);\r\n this.newRequest_();\r\n };\r\n // If this request doesn't return on its own accord (by the server sending us some data), we'll\r\n // create a new one after the KEEPALIVE interval to make sure we always keep a fresh request open.\r\n const keepaliveTimeout = setTimeout(doNewRequest, Math.floor(KEEPALIVE_REQUEST_INTERVAL));\r\n const readyStateCB = () => {\r\n // Request completed. Cancel the keepalive.\r\n clearTimeout(keepaliveTimeout);\r\n // Trigger a new request so we can continue receiving data.\r\n doNewRequest();\r\n };\r\n this.addTag(url, readyStateCB);\r\n }\r\n /**\r\n * Add an arbitrary script tag to the iframe.\r\n * @param url - The URL for the script tag source.\r\n * @param loadCB - A callback to be triggered once the script has loaded.\r\n */\r\n addTag(url, loadCB) {\r\n if (isNodeSdk()) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n this.doNodeLongPoll(url, loadCB);\r\n }\r\n else {\r\n setTimeout(() => {\r\n try {\r\n // if we're already closed, don't add this poll\r\n if (!this.sendNewPolls) {\r\n return;\r\n }\r\n const newScript = this.myIFrame.doc.createElement('script');\r\n newScript.type = 'text/javascript';\r\n newScript.async = true;\r\n newScript.src = url;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n newScript.onload = newScript.onreadystatechange =\r\n function () {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const rstate = newScript.readyState;\r\n if (!rstate || rstate === 'loaded' || rstate === 'complete') {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n newScript.onload = newScript.onreadystatechange = null;\r\n if (newScript.parentNode) {\r\n newScript.parentNode.removeChild(newScript);\r\n }\r\n loadCB();\r\n }\r\n };\r\n newScript.onerror = () => {\r\n log('Long-poll script failed to load: ' + url);\r\n this.sendNewPolls = false;\r\n this.close();\r\n };\r\n this.myIFrame.doc.body.appendChild(newScript);\r\n }\r\n catch (e) {\r\n // TODO: we should make this error visible somehow\r\n }\r\n }, Math.floor(1));\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst WEBSOCKET_MAX_FRAME_SIZE = 16384;\r\nconst WEBSOCKET_KEEPALIVE_INTERVAL = 45000;\r\nlet WebSocketImpl = null;\r\nif (typeof MozWebSocket !== 'undefined') {\r\n WebSocketImpl = MozWebSocket;\r\n}\r\nelse if (typeof WebSocket !== 'undefined') {\r\n WebSocketImpl = WebSocket;\r\n}\r\n/**\r\n * Create a new websocket connection with the given callbacks.\r\n */\r\nclass WebSocketConnection {\r\n /**\r\n * @param connId identifier for this transport\r\n * @param repoInfo The info for the websocket endpoint.\r\n * @param applicationId The Firebase App ID for this project.\r\n * @param appCheckToken The App Check Token for this client.\r\n * @param authToken The Auth Token for this client.\r\n * @param transportSessionId Optional transportSessionId if this is connecting\r\n * to an existing transport session\r\n * @param lastSessionId Optional lastSessionId if there was a previous\r\n * connection\r\n */\r\n constructor(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {\r\n this.connId = connId;\r\n this.applicationId = applicationId;\r\n this.appCheckToken = appCheckToken;\r\n this.authToken = authToken;\r\n this.keepaliveTimer = null;\r\n this.frames = null;\r\n this.totalFrames = 0;\r\n this.bytesSent = 0;\r\n this.bytesReceived = 0;\r\n this.log_ = logWrapper(this.connId);\r\n this.stats_ = statsManagerGetCollection(repoInfo);\r\n this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId);\r\n this.nodeAdmin = repoInfo.nodeAdmin;\r\n }\r\n /**\r\n * @param repoInfo - The info for the websocket endpoint.\r\n * @param transportSessionId - Optional transportSessionId if this is connecting to an existing transport\r\n * session\r\n * @param lastSessionId - Optional lastSessionId if there was a previous connection\r\n * @returns connection url\r\n */\r\n static connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId) {\r\n const urlParams = {};\r\n urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n if (!isNodeSdk() &&\r\n typeof location !== 'undefined' &&\r\n location.hostname &&\r\n FORGE_DOMAIN_RE.test(location.hostname)) {\r\n urlParams[REFERER_PARAM] = FORGE_REF;\r\n }\r\n if (transportSessionId) {\r\n urlParams[TRANSPORT_SESSION_PARAM] = transportSessionId;\r\n }\r\n if (lastSessionId) {\r\n urlParams[LAST_SESSION_PARAM] = lastSessionId;\r\n }\r\n if (appCheckToken) {\r\n urlParams[APP_CHECK_TOKEN_PARAM] = appCheckToken;\r\n }\r\n if (applicationId) {\r\n urlParams[APPLICATION_ID_PARAM] = applicationId;\r\n }\r\n return repoInfoConnectionURL(repoInfo, WEBSOCKET, urlParams);\r\n }\r\n /**\r\n * @param onMessage - Callback when messages arrive\r\n * @param onDisconnect - Callback with connection lost.\r\n */\r\n open(onMessage, onDisconnect) {\r\n this.onDisconnect = onDisconnect;\r\n this.onMessage = onMessage;\r\n this.log_('Websocket connecting to ' + this.connURL);\r\n this.everConnected_ = false;\r\n // Assume failure until proven otherwise.\r\n PersistentStorage.set('previous_websocket_failure', true);\r\n try {\r\n let options;\r\n if (isNodeSdk()) {\r\n const device = this.nodeAdmin ? 'AdminNode' : 'Node';\r\n // UA Format: Firebase////\r\n options = {\r\n headers: {\r\n 'User-Agent': `Firebase/${PROTOCOL_VERSION}/${SDK_VERSION}/${process.platform}/${device}`,\r\n 'X-Firebase-GMPID': this.applicationId || ''\r\n }\r\n };\r\n // If using Node with admin creds, AppCheck-related checks are unnecessary.\r\n // Note that we send the credentials here even if they aren't admin credentials, which is\r\n // not a problem.\r\n // Note that this header is just used to bypass appcheck, and the token should still be sent\r\n // through the websocket connection once it is established.\r\n if (this.authToken) {\r\n options.headers['Authorization'] = `Bearer ${this.authToken}`;\r\n }\r\n if (this.appCheckToken) {\r\n options.headers['X-Firebase-AppCheck'] = this.appCheckToken;\r\n }\r\n // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.\r\n const env = process['env'];\r\n const proxy = this.connURL.indexOf('wss://') === 0\r\n ? env['HTTPS_PROXY'] || env['https_proxy']\r\n : env['HTTP_PROXY'] || env['http_proxy'];\r\n if (proxy) {\r\n options['proxy'] = { origin: proxy };\r\n }\r\n }\r\n this.mySock = new WebSocketImpl(this.connURL, [], options);\r\n }\r\n catch (e) {\r\n this.log_('Error instantiating WebSocket.');\r\n const error = e.message || e.data;\r\n if (error) {\r\n this.log_(error);\r\n }\r\n this.onClosed_();\r\n return;\r\n }\r\n this.mySock.onopen = () => {\r\n this.log_('Websocket connected.');\r\n this.everConnected_ = true;\r\n };\r\n this.mySock.onclose = () => {\r\n this.log_('Websocket connection was disconnected.');\r\n this.mySock = null;\r\n this.onClosed_();\r\n };\r\n this.mySock.onmessage = m => {\r\n this.handleIncomingFrame(m);\r\n };\r\n this.mySock.onerror = e => {\r\n this.log_('WebSocket error. Closing connection.');\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const error = e.message || e.data;\r\n if (error) {\r\n this.log_(error);\r\n }\r\n this.onClosed_();\r\n };\r\n }\r\n /**\r\n * No-op for websockets, we don't need to do anything once the connection is confirmed as open\r\n */\r\n start() { }\r\n static forceDisallow() {\r\n WebSocketConnection.forceDisallow_ = true;\r\n }\r\n static isAvailable() {\r\n let isOldAndroid = false;\r\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\r\n const oldAndroidRegex = /Android ([0-9]{0,}\\.[0-9]{0,})/;\r\n const oldAndroidMatch = navigator.userAgent.match(oldAndroidRegex);\r\n if (oldAndroidMatch && oldAndroidMatch.length > 1) {\r\n if (parseFloat(oldAndroidMatch[1]) < 4.4) {\r\n isOldAndroid = true;\r\n }\r\n }\r\n }\r\n return (!isOldAndroid &&\r\n WebSocketImpl !== null &&\r\n !WebSocketConnection.forceDisallow_);\r\n }\r\n /**\r\n * Returns true if we previously failed to connect with this transport.\r\n */\r\n static previouslyFailed() {\r\n // If our persistent storage is actually only in-memory storage,\r\n // we default to assuming that it previously failed to be safe.\r\n return (PersistentStorage.isInMemoryStorage ||\r\n PersistentStorage.get('previous_websocket_failure') === true);\r\n }\r\n markConnectionHealthy() {\r\n PersistentStorage.remove('previous_websocket_failure');\r\n }\r\n appendFrame_(data) {\r\n this.frames.push(data);\r\n if (this.frames.length === this.totalFrames) {\r\n const fullMess = this.frames.join('');\r\n this.frames = null;\r\n const jsonMess = jsonEval(fullMess);\r\n //handle the message\r\n this.onMessage(jsonMess);\r\n }\r\n }\r\n /**\r\n * @param frameCount - The number of frames we are expecting from the server\r\n */\r\n handleNewFrameCount_(frameCount) {\r\n this.totalFrames = frameCount;\r\n this.frames = [];\r\n }\r\n /**\r\n * Attempts to parse a frame count out of some text. If it can't, assumes a value of 1\r\n * @returns Any remaining data to be process, or null if there is none\r\n */\r\n extractFrameCount_(data) {\r\n assert(this.frames === null, 'We already have a frame buffer');\r\n // TODO: The server is only supposed to send up to 9999 frames (i.e. length <= 4), but that isn't being enforced\r\n // currently. So allowing larger frame counts (length <= 6). See https://app.asana.com/0/search/8688598998380/8237608042508\r\n if (data.length <= 6) {\r\n const frameCount = Number(data);\r\n if (!isNaN(frameCount)) {\r\n this.handleNewFrameCount_(frameCount);\r\n return null;\r\n }\r\n }\r\n this.handleNewFrameCount_(1);\r\n return data;\r\n }\r\n /**\r\n * Process a websocket frame that has arrived from the server.\r\n * @param mess - The frame data\r\n */\r\n handleIncomingFrame(mess) {\r\n if (this.mySock === null) {\r\n return; // Chrome apparently delivers incoming packets even after we .close() the connection sometimes.\r\n }\r\n const data = mess['data'];\r\n this.bytesReceived += data.length;\r\n this.stats_.incrementCounter('bytes_received', data.length);\r\n this.resetKeepAlive();\r\n if (this.frames !== null) {\r\n // we're buffering\r\n this.appendFrame_(data);\r\n }\r\n else {\r\n // try to parse out a frame count, otherwise, assume 1 and process it\r\n const remainingData = this.extractFrameCount_(data);\r\n if (remainingData !== null) {\r\n this.appendFrame_(remainingData);\r\n }\r\n }\r\n }\r\n /**\r\n * Send a message to the server\r\n * @param data - The JSON object to transmit\r\n */\r\n send(data) {\r\n this.resetKeepAlive();\r\n const dataStr = stringify(data);\r\n this.bytesSent += dataStr.length;\r\n this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n //We can only fit a certain amount in each websocket frame, so we need to split this request\r\n //up into multiple pieces if it doesn't fit in one request.\r\n const dataSegs = splitStringBySize(dataStr, WEBSOCKET_MAX_FRAME_SIZE);\r\n //Send the length header\r\n if (dataSegs.length > 1) {\r\n this.sendString_(String(dataSegs.length));\r\n }\r\n //Send the actual data in segments.\r\n for (let i = 0; i < dataSegs.length; i++) {\r\n this.sendString_(dataSegs[i]);\r\n }\r\n }\r\n shutdown_() {\r\n this.isClosed_ = true;\r\n if (this.keepaliveTimer) {\r\n clearInterval(this.keepaliveTimer);\r\n this.keepaliveTimer = null;\r\n }\r\n if (this.mySock) {\r\n this.mySock.close();\r\n this.mySock = null;\r\n }\r\n }\r\n onClosed_() {\r\n if (!this.isClosed_) {\r\n this.log_('WebSocket is closing itself');\r\n this.shutdown_();\r\n // since this is an internal close, trigger the close listener\r\n if (this.onDisconnect) {\r\n this.onDisconnect(this.everConnected_);\r\n this.onDisconnect = null;\r\n }\r\n }\r\n }\r\n /**\r\n * External-facing close handler.\r\n * Close the websocket and kill the connection.\r\n */\r\n close() {\r\n if (!this.isClosed_) {\r\n this.log_('WebSocket is being closed');\r\n this.shutdown_();\r\n }\r\n }\r\n /**\r\n * Kill the current keepalive timer and start a new one, to ensure that it always fires N seconds after\r\n * the last activity.\r\n */\r\n resetKeepAlive() {\r\n clearInterval(this.keepaliveTimer);\r\n this.keepaliveTimer = setInterval(() => {\r\n //If there has been no websocket activity for a while, send a no-op\r\n if (this.mySock) {\r\n this.sendString_('0');\r\n }\r\n this.resetKeepAlive();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(WEBSOCKET_KEEPALIVE_INTERVAL));\r\n }\r\n /**\r\n * Send a string over the websocket.\r\n *\r\n * @param str - String to send.\r\n */\r\n sendString_(str) {\r\n // Firefox seems to sometimes throw exceptions (NS_ERROR_UNEXPECTED) from websocket .send()\r\n // calls for some unknown reason. We treat these as an error and disconnect.\r\n // See https://app.asana.com/0/58926111402292/68021340250410\r\n try {\r\n this.mySock.send(str);\r\n }\r\n catch (e) {\r\n this.log_('Exception thrown from WebSocket.send():', e.message || e.data, 'Closing connection.');\r\n setTimeout(this.onClosed_.bind(this), 0);\r\n }\r\n }\r\n}\r\n/**\r\n * Number of response before we consider the connection \"healthy.\"\r\n */\r\nWebSocketConnection.responsesRequiredToBeHealthy = 2;\r\n/**\r\n * Time to wait for the connection te become healthy before giving up.\r\n */\r\nWebSocketConnection.healthyTimeout = 30000;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Currently simplistic, this class manages what transport a Connection should use at various stages of its\r\n * lifecycle.\r\n *\r\n * It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if\r\n * they are available.\r\n */\r\nclass TransportManager {\r\n /**\r\n * @param repoInfo - Metadata around the namespace we're connecting to\r\n */\r\n constructor(repoInfo) {\r\n this.initTransports_(repoInfo);\r\n }\r\n static get ALL_TRANSPORTS() {\r\n return [BrowserPollConnection, WebSocketConnection];\r\n }\r\n /**\r\n * Returns whether transport has been selected to ensure WebSocketConnection or BrowserPollConnection are not called after\r\n * TransportManager has already set up transports_\r\n */\r\n static get IS_TRANSPORT_INITIALIZED() {\r\n return this.globalTransportInitialized_;\r\n }\r\n initTransports_(repoInfo) {\r\n const isWebSocketsAvailable = WebSocketConnection && WebSocketConnection['isAvailable']();\r\n let isSkipPollConnection = isWebSocketsAvailable && !WebSocketConnection.previouslyFailed();\r\n if (repoInfo.webSocketOnly) {\r\n if (!isWebSocketsAvailable) {\r\n warn(\"wss:// URL used, but browser isn't known to support websockets. Trying anyway.\");\r\n }\r\n isSkipPollConnection = true;\r\n }\r\n if (isSkipPollConnection) {\r\n this.transports_ = [WebSocketConnection];\r\n }\r\n else {\r\n const transports = (this.transports_ = []);\r\n for (const transport of TransportManager.ALL_TRANSPORTS) {\r\n if (transport && transport['isAvailable']()) {\r\n transports.push(transport);\r\n }\r\n }\r\n TransportManager.globalTransportInitialized_ = true;\r\n }\r\n }\r\n /**\r\n * @returns The constructor for the initial transport to use\r\n */\r\n initialTransport() {\r\n if (this.transports_.length > 0) {\r\n return this.transports_[0];\r\n }\r\n else {\r\n throw new Error('No transports available');\r\n }\r\n }\r\n /**\r\n * @returns The constructor for the next transport, or null\r\n */\r\n upgradeTransport() {\r\n if (this.transports_.length > 1) {\r\n return this.transports_[1];\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n}\r\n// Keeps track of whether the TransportManager has already chosen a transport to use\r\nTransportManager.globalTransportInitialized_ = false;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Abort upgrade attempt if it takes longer than 60s.\r\nconst UPGRADE_TIMEOUT = 60000;\r\n// For some transports (WebSockets), we need to \"validate\" the transport by exchanging a few requests and responses.\r\n// If we haven't sent enough requests within 5s, we'll start sending noop ping requests.\r\nconst DELAY_BEFORE_SENDING_EXTRA_REQUESTS = 5000;\r\n// If the initial data sent triggers a lot of bandwidth (i.e. it's a large put or a listen for a large amount of data)\r\n// then we may not be able to exchange our ping/pong requests within the healthy timeout. So if we reach the timeout\r\n// but we've sent/received enough bytes, we don't cancel the connection.\r\nconst BYTES_SENT_HEALTHY_OVERRIDE = 10 * 1024;\r\nconst BYTES_RECEIVED_HEALTHY_OVERRIDE = 100 * 1024;\r\nconst MESSAGE_TYPE = 't';\r\nconst MESSAGE_DATA = 'd';\r\nconst CONTROL_SHUTDOWN = 's';\r\nconst CONTROL_RESET = 'r';\r\nconst CONTROL_ERROR = 'e';\r\nconst CONTROL_PONG = 'o';\r\nconst SWITCH_ACK = 'a';\r\nconst END_TRANSMISSION = 'n';\r\nconst PING = 'p';\r\nconst SERVER_HELLO = 'h';\r\n/**\r\n * Creates a new real-time connection to the server using whichever method works\r\n * best in the current browser.\r\n */\r\nclass Connection {\r\n /**\r\n * @param id - an id for this connection\r\n * @param repoInfo_ - the info for the endpoint to connect to\r\n * @param applicationId_ - the Firebase App ID for this project\r\n * @param appCheckToken_ - The App Check Token for this device.\r\n * @param authToken_ - The auth token for this session.\r\n * @param onMessage_ - the callback to be triggered when a server-push message arrives\r\n * @param onReady_ - the callback to be triggered when this connection is ready to send messages.\r\n * @param onDisconnect_ - the callback to be triggered when a connection was lost\r\n * @param onKill_ - the callback to be triggered when this connection has permanently shut down.\r\n * @param lastSessionId - last session id in persistent connection. is used to clean up old session in real-time server\r\n */\r\n constructor(id, repoInfo_, applicationId_, appCheckToken_, authToken_, onMessage_, onReady_, onDisconnect_, onKill_, lastSessionId) {\r\n this.id = id;\r\n this.repoInfo_ = repoInfo_;\r\n this.applicationId_ = applicationId_;\r\n this.appCheckToken_ = appCheckToken_;\r\n this.authToken_ = authToken_;\r\n this.onMessage_ = onMessage_;\r\n this.onReady_ = onReady_;\r\n this.onDisconnect_ = onDisconnect_;\r\n this.onKill_ = onKill_;\r\n this.lastSessionId = lastSessionId;\r\n this.connectionCount = 0;\r\n this.pendingDataMessages = [];\r\n this.state_ = 0 /* RealtimeState.CONNECTING */;\r\n this.log_ = logWrapper('c:' + this.id + ':');\r\n this.transportManager_ = new TransportManager(repoInfo_);\r\n this.log_('Connection created');\r\n this.start_();\r\n }\r\n /**\r\n * Starts a connection attempt\r\n */\r\n start_() {\r\n const conn = this.transportManager_.initialTransport();\r\n this.conn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, null, this.lastSessionId);\r\n // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n // can consider the transport healthy.\r\n this.primaryResponsesRequired_ = conn['responsesRequiredToBeHealthy'] || 0;\r\n const onMessageReceived = this.connReceiver_(this.conn_);\r\n const onConnectionLost = this.disconnReceiver_(this.conn_);\r\n this.tx_ = this.conn_;\r\n this.rx_ = this.conn_;\r\n this.secondaryConn_ = null;\r\n this.isHealthy_ = false;\r\n /*\r\n * Firefox doesn't like when code from one iframe tries to create another iframe by way of the parent frame.\r\n * This can occur in the case of a redirect, i.e. we guessed wrong on what server to connect to and received a reset.\r\n * Somehow, setTimeout seems to make this ok. That doesn't make sense from a security perspective, since you should\r\n * still have the context of your originating frame.\r\n */\r\n setTimeout(() => {\r\n // this.conn_ gets set to null in some of the tests. Check to make sure it still exists before using it\r\n this.conn_ && this.conn_.open(onMessageReceived, onConnectionLost);\r\n }, Math.floor(0));\r\n const healthyTimeoutMS = conn['healthyTimeout'] || 0;\r\n if (healthyTimeoutMS > 0) {\r\n this.healthyTimeout_ = setTimeoutNonBlocking(() => {\r\n this.healthyTimeout_ = null;\r\n if (!this.isHealthy_) {\r\n if (this.conn_ &&\r\n this.conn_.bytesReceived > BYTES_RECEIVED_HEALTHY_OVERRIDE) {\r\n this.log_('Connection exceeded healthy timeout but has received ' +\r\n this.conn_.bytesReceived +\r\n ' bytes. Marking connection healthy.');\r\n this.isHealthy_ = true;\r\n this.conn_.markConnectionHealthy();\r\n }\r\n else if (this.conn_ &&\r\n this.conn_.bytesSent > BYTES_SENT_HEALTHY_OVERRIDE) {\r\n this.log_('Connection exceeded healthy timeout but has sent ' +\r\n this.conn_.bytesSent +\r\n ' bytes. Leaving connection alive.');\r\n // NOTE: We don't want to mark it healthy, since we have no guarantee that the bytes have made it to\r\n // the server.\r\n }\r\n else {\r\n this.log_('Closing unhealthy connection after timeout.');\r\n this.close();\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(healthyTimeoutMS));\r\n }\r\n }\r\n nextTransportId_() {\r\n return 'c:' + this.id + ':' + this.connectionCount++;\r\n }\r\n disconnReceiver_(conn) {\r\n return everConnected => {\r\n if (conn === this.conn_) {\r\n this.onConnectionLost_(everConnected);\r\n }\r\n else if (conn === this.secondaryConn_) {\r\n this.log_('Secondary connection lost.');\r\n this.onSecondaryConnectionLost_();\r\n }\r\n else {\r\n this.log_('closing an old connection');\r\n }\r\n };\r\n }\r\n connReceiver_(conn) {\r\n return (message) => {\r\n if (this.state_ !== 2 /* RealtimeState.DISCONNECTED */) {\r\n if (conn === this.rx_) {\r\n this.onPrimaryMessageReceived_(message);\r\n }\r\n else if (conn === this.secondaryConn_) {\r\n this.onSecondaryMessageReceived_(message);\r\n }\r\n else {\r\n this.log_('message on old connection');\r\n }\r\n }\r\n };\r\n }\r\n /**\r\n * @param dataMsg - An arbitrary data message to be sent to the server\r\n */\r\n sendRequest(dataMsg) {\r\n // wrap in a data message envelope and send it on\r\n const msg = { t: 'd', d: dataMsg };\r\n this.sendData_(msg);\r\n }\r\n tryCleanupConnection() {\r\n if (this.tx_ === this.secondaryConn_ && this.rx_ === this.secondaryConn_) {\r\n this.log_('cleaning up and promoting a connection: ' + this.secondaryConn_.connId);\r\n this.conn_ = this.secondaryConn_;\r\n this.secondaryConn_ = null;\r\n // the server will shutdown the old connection\r\n }\r\n }\r\n onSecondaryControl_(controlData) {\r\n if (MESSAGE_TYPE in controlData) {\r\n const cmd = controlData[MESSAGE_TYPE];\r\n if (cmd === SWITCH_ACK) {\r\n this.upgradeIfSecondaryHealthy_();\r\n }\r\n else if (cmd === CONTROL_RESET) {\r\n // Most likely the session wasn't valid. Abandon the switch attempt\r\n this.log_('Got a reset on secondary, closing it');\r\n this.secondaryConn_.close();\r\n // If we were already using this connection for something, than we need to fully close\r\n if (this.tx_ === this.secondaryConn_ ||\r\n this.rx_ === this.secondaryConn_) {\r\n this.close();\r\n }\r\n }\r\n else if (cmd === CONTROL_PONG) {\r\n this.log_('got pong on secondary.');\r\n this.secondaryResponsesRequired_--;\r\n this.upgradeIfSecondaryHealthy_();\r\n }\r\n }\r\n }\r\n onSecondaryMessageReceived_(parsedData) {\r\n const layer = requireKey('t', parsedData);\r\n const data = requireKey('d', parsedData);\r\n if (layer === 'c') {\r\n this.onSecondaryControl_(data);\r\n }\r\n else if (layer === 'd') {\r\n // got a data message, but we're still second connection. Need to buffer it up\r\n this.pendingDataMessages.push(data);\r\n }\r\n else {\r\n throw new Error('Unknown protocol layer: ' + layer);\r\n }\r\n }\r\n upgradeIfSecondaryHealthy_() {\r\n if (this.secondaryResponsesRequired_ <= 0) {\r\n this.log_('Secondary connection is healthy.');\r\n this.isHealthy_ = true;\r\n this.secondaryConn_.markConnectionHealthy();\r\n this.proceedWithUpgrade_();\r\n }\r\n else {\r\n // Send a ping to make sure the connection is healthy.\r\n this.log_('sending ping on secondary.');\r\n this.secondaryConn_.send({ t: 'c', d: { t: PING, d: {} } });\r\n }\r\n }\r\n proceedWithUpgrade_() {\r\n // tell this connection to consider itself open\r\n this.secondaryConn_.start();\r\n // send ack\r\n this.log_('sending client ack on secondary');\r\n this.secondaryConn_.send({ t: 'c', d: { t: SWITCH_ACK, d: {} } });\r\n // send end packet on primary transport, switch to sending on this one\r\n // can receive on this one, buffer responses until end received on primary transport\r\n this.log_('Ending transmission on primary');\r\n this.conn_.send({ t: 'c', d: { t: END_TRANSMISSION, d: {} } });\r\n this.tx_ = this.secondaryConn_;\r\n this.tryCleanupConnection();\r\n }\r\n onPrimaryMessageReceived_(parsedData) {\r\n // Must refer to parsedData properties in quotes, so closure doesn't touch them.\r\n const layer = requireKey('t', parsedData);\r\n const data = requireKey('d', parsedData);\r\n if (layer === 'c') {\r\n this.onControl_(data);\r\n }\r\n else if (layer === 'd') {\r\n this.onDataMessage_(data);\r\n }\r\n }\r\n onDataMessage_(message) {\r\n this.onPrimaryResponse_();\r\n // We don't do anything with data messages, just kick them up a level\r\n this.onMessage_(message);\r\n }\r\n onPrimaryResponse_() {\r\n if (!this.isHealthy_) {\r\n this.primaryResponsesRequired_--;\r\n if (this.primaryResponsesRequired_ <= 0) {\r\n this.log_('Primary connection is healthy.');\r\n this.isHealthy_ = true;\r\n this.conn_.markConnectionHealthy();\r\n }\r\n }\r\n }\r\n onControl_(controlData) {\r\n const cmd = requireKey(MESSAGE_TYPE, controlData);\r\n if (MESSAGE_DATA in controlData) {\r\n const payload = controlData[MESSAGE_DATA];\r\n if (cmd === SERVER_HELLO) {\r\n const handshakePayload = Object.assign({}, payload);\r\n if (this.repoInfo_.isUsingEmulator) {\r\n // Upon connecting, the emulator will pass the hostname that it's aware of, but we prefer the user's set hostname via `connectDatabaseEmulator` over what the emulator passes.\r\n handshakePayload.h = this.repoInfo_.host;\r\n }\r\n this.onHandshake_(handshakePayload);\r\n }\r\n else if (cmd === END_TRANSMISSION) {\r\n this.log_('recvd end transmission on primary');\r\n this.rx_ = this.secondaryConn_;\r\n for (let i = 0; i < this.pendingDataMessages.length; ++i) {\r\n this.onDataMessage_(this.pendingDataMessages[i]);\r\n }\r\n this.pendingDataMessages = [];\r\n this.tryCleanupConnection();\r\n }\r\n else if (cmd === CONTROL_SHUTDOWN) {\r\n // This was previously the 'onKill' callback passed to the lower-level connection\r\n // payload in this case is the reason for the shutdown. Generally a human-readable error\r\n this.onConnectionShutdown_(payload);\r\n }\r\n else if (cmd === CONTROL_RESET) {\r\n // payload in this case is the host we should contact\r\n this.onReset_(payload);\r\n }\r\n else if (cmd === CONTROL_ERROR) {\r\n error('Server Error: ' + payload);\r\n }\r\n else if (cmd === CONTROL_PONG) {\r\n this.log_('got pong on primary.');\r\n this.onPrimaryResponse_();\r\n this.sendPingOnPrimaryIfNecessary_();\r\n }\r\n else {\r\n error('Unknown control packet command: ' + cmd);\r\n }\r\n }\r\n }\r\n /**\r\n * @param handshake - The handshake data returned from the server\r\n */\r\n onHandshake_(handshake) {\r\n const timestamp = handshake.ts;\r\n const version = handshake.v;\r\n const host = handshake.h;\r\n this.sessionId = handshake.s;\r\n this.repoInfo_.host = host;\r\n // if we've already closed the connection, then don't bother trying to progress further\r\n if (this.state_ === 0 /* RealtimeState.CONNECTING */) {\r\n this.conn_.start();\r\n this.onConnectionEstablished_(this.conn_, timestamp);\r\n if (PROTOCOL_VERSION !== version) {\r\n warn('Protocol version mismatch detected');\r\n }\r\n // TODO: do we want to upgrade? when? maybe a delay?\r\n this.tryStartUpgrade_();\r\n }\r\n }\r\n tryStartUpgrade_() {\r\n const conn = this.transportManager_.upgradeTransport();\r\n if (conn) {\r\n this.startUpgrade_(conn);\r\n }\r\n }\r\n startUpgrade_(conn) {\r\n this.secondaryConn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, this.sessionId);\r\n // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n // can consider the transport healthy.\r\n this.secondaryResponsesRequired_ =\r\n conn['responsesRequiredToBeHealthy'] || 0;\r\n const onMessage = this.connReceiver_(this.secondaryConn_);\r\n const onDisconnect = this.disconnReceiver_(this.secondaryConn_);\r\n this.secondaryConn_.open(onMessage, onDisconnect);\r\n // If we haven't successfully upgraded after UPGRADE_TIMEOUT, give up and kill the secondary.\r\n setTimeoutNonBlocking(() => {\r\n if (this.secondaryConn_) {\r\n this.log_('Timed out trying to upgrade.');\r\n this.secondaryConn_.close();\r\n }\r\n }, Math.floor(UPGRADE_TIMEOUT));\r\n }\r\n onReset_(host) {\r\n this.log_('Reset packet received. New host: ' + host);\r\n this.repoInfo_.host = host;\r\n // TODO: if we're already \"connected\", we need to trigger a disconnect at the next layer up.\r\n // We don't currently support resets after the connection has already been established\r\n if (this.state_ === 1 /* RealtimeState.CONNECTED */) {\r\n this.close();\r\n }\r\n else {\r\n // Close whatever connections we have open and start again.\r\n this.closeConnections_();\r\n this.start_();\r\n }\r\n }\r\n onConnectionEstablished_(conn, timestamp) {\r\n this.log_('Realtime connection established.');\r\n this.conn_ = conn;\r\n this.state_ = 1 /* RealtimeState.CONNECTED */;\r\n if (this.onReady_) {\r\n this.onReady_(timestamp, this.sessionId);\r\n this.onReady_ = null;\r\n }\r\n // If after 5 seconds we haven't sent enough requests to the server to get the connection healthy,\r\n // send some pings.\r\n if (this.primaryResponsesRequired_ === 0) {\r\n this.log_('Primary connection is healthy.');\r\n this.isHealthy_ = true;\r\n }\r\n else {\r\n setTimeoutNonBlocking(() => {\r\n this.sendPingOnPrimaryIfNecessary_();\r\n }, Math.floor(DELAY_BEFORE_SENDING_EXTRA_REQUESTS));\r\n }\r\n }\r\n sendPingOnPrimaryIfNecessary_() {\r\n // If the connection isn't considered healthy yet, we'll send a noop ping packet request.\r\n if (!this.isHealthy_ && this.state_ === 1 /* RealtimeState.CONNECTED */) {\r\n this.log_('sending ping on primary.');\r\n this.sendData_({ t: 'c', d: { t: PING, d: {} } });\r\n }\r\n }\r\n onSecondaryConnectionLost_() {\r\n const conn = this.secondaryConn_;\r\n this.secondaryConn_ = null;\r\n if (this.tx_ === conn || this.rx_ === conn) {\r\n // we are relying on this connection already in some capacity. Therefore, a failure is real\r\n this.close();\r\n }\r\n }\r\n /**\r\n * @param everConnected - Whether or not the connection ever reached a server. Used to determine if\r\n * we should flush the host cache\r\n */\r\n onConnectionLost_(everConnected) {\r\n this.conn_ = null;\r\n // NOTE: IF you're seeing a Firefox error for this line, I think it might be because it's getting\r\n // called on window close and RealtimeState.CONNECTING is no longer defined. Just a guess.\r\n if (!everConnected && this.state_ === 0 /* RealtimeState.CONNECTING */) {\r\n this.log_('Realtime connection failed.');\r\n // Since we failed to connect at all, clear any cached entry for this namespace in case the machine went away\r\n if (this.repoInfo_.isCacheableHost()) {\r\n PersistentStorage.remove('host:' + this.repoInfo_.host);\r\n // reset the internal host to what we would show the user, i.e. .firebaseio.com\r\n this.repoInfo_.internalHost = this.repoInfo_.host;\r\n }\r\n }\r\n else if (this.state_ === 1 /* RealtimeState.CONNECTED */) {\r\n this.log_('Realtime connection lost.');\r\n }\r\n this.close();\r\n }\r\n onConnectionShutdown_(reason) {\r\n this.log_('Connection shutdown command received. Shutting down...');\r\n if (this.onKill_) {\r\n this.onKill_(reason);\r\n this.onKill_ = null;\r\n }\r\n // We intentionally don't want to fire onDisconnect (kill is a different case),\r\n // so clear the callback.\r\n this.onDisconnect_ = null;\r\n this.close();\r\n }\r\n sendData_(data) {\r\n if (this.state_ !== 1 /* RealtimeState.CONNECTED */) {\r\n throw 'Connection is not connected';\r\n }\r\n else {\r\n this.tx_.send(data);\r\n }\r\n }\r\n /**\r\n * Cleans up this connection, calling the appropriate callbacks\r\n */\r\n close() {\r\n if (this.state_ !== 2 /* RealtimeState.DISCONNECTED */) {\r\n this.log_('Closing realtime connection.');\r\n this.state_ = 2 /* RealtimeState.DISCONNECTED */;\r\n this.closeConnections_();\r\n if (this.onDisconnect_) {\r\n this.onDisconnect_();\r\n this.onDisconnect_ = null;\r\n }\r\n }\r\n }\r\n closeConnections_() {\r\n this.log_('Shutting down all connections');\r\n if (this.conn_) {\r\n this.conn_.close();\r\n this.conn_ = null;\r\n }\r\n if (this.secondaryConn_) {\r\n this.secondaryConn_.close();\r\n this.secondaryConn_ = null;\r\n }\r\n if (this.healthyTimeout_) {\r\n clearTimeout(this.healthyTimeout_);\r\n this.healthyTimeout_ = null;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface defining the set of actions that can be performed against the Firebase server\r\n * (basically corresponds to our wire protocol).\r\n *\r\n * @interface\r\n */\r\nclass ServerActions {\r\n put(pathString, data, onComplete, hash) { }\r\n merge(pathString, data, onComplete, hash) { }\r\n /**\r\n * Refreshes the auth token for the current connection.\r\n * @param token - The authentication token\r\n */\r\n refreshAuthToken(token) { }\r\n /**\r\n * Refreshes the app check token for the current connection.\r\n * @param token The app check token\r\n */\r\n refreshAppCheckToken(token) { }\r\n onDisconnectPut(pathString, data, onComplete) { }\r\n onDisconnectMerge(pathString, data, onComplete) { }\r\n onDisconnectCancel(pathString, onComplete) { }\r\n reportStats(stats) { }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Base class to be used if you want to emit events. Call the constructor with\r\n * the set of allowed event names.\r\n */\r\nclass EventEmitter {\r\n constructor(allowedEvents_) {\r\n this.allowedEvents_ = allowedEvents_;\r\n this.listeners_ = {};\r\n assert(Array.isArray(allowedEvents_) && allowedEvents_.length > 0, 'Requires a non-empty array');\r\n }\r\n /**\r\n * To be called by derived classes to trigger events.\r\n */\r\n trigger(eventType, ...varArgs) {\r\n if (Array.isArray(this.listeners_[eventType])) {\r\n // Clone the list, since callbacks could add/remove listeners.\r\n const listeners = [...this.listeners_[eventType]];\r\n for (let i = 0; i < listeners.length; i++) {\r\n listeners[i].callback.apply(listeners[i].context, varArgs);\r\n }\r\n }\r\n }\r\n on(eventType, callback, context) {\r\n this.validateEventType_(eventType);\r\n this.listeners_[eventType] = this.listeners_[eventType] || [];\r\n this.listeners_[eventType].push({ callback, context });\r\n const eventData = this.getInitialEvent(eventType);\r\n if (eventData) {\r\n callback.apply(context, eventData);\r\n }\r\n }\r\n off(eventType, callback, context) {\r\n this.validateEventType_(eventType);\r\n const listeners = this.listeners_[eventType] || [];\r\n for (let i = 0; i < listeners.length; i++) {\r\n if (listeners[i].callback === callback &&\r\n (!context || context === listeners[i].context)) {\r\n listeners.splice(i, 1);\r\n return;\r\n }\r\n }\r\n }\r\n validateEventType_(eventType) {\r\n assert(this.allowedEvents_.find(et => {\r\n return et === eventType;\r\n }), 'Unknown event: ' + eventType);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Monitors online state (as reported by window.online/offline events).\r\n *\r\n * The expectation is that this could have many false positives (thinks we are online\r\n * when we're not), but no false negatives. So we can safely use it to determine when\r\n * we definitely cannot reach the internet.\r\n */\r\nclass OnlineMonitor extends EventEmitter {\r\n constructor() {\r\n super(['online']);\r\n this.online_ = true;\r\n // We've had repeated complaints that Cordova apps can get stuck \"offline\", e.g.\r\n // https://forum.ionicframework.com/t/firebase-connection-is-lost-and-never-come-back/43810\r\n // It would seem that the 'online' event does not always fire consistently. So we disable it\r\n // for Cordova.\r\n if (typeof window !== 'undefined' &&\r\n typeof window.addEventListener !== 'undefined' &&\r\n !isMobileCordova()) {\r\n window.addEventListener('online', () => {\r\n if (!this.online_) {\r\n this.online_ = true;\r\n this.trigger('online', true);\r\n }\r\n }, false);\r\n window.addEventListener('offline', () => {\r\n if (this.online_) {\r\n this.online_ = false;\r\n this.trigger('online', false);\r\n }\r\n }, false);\r\n }\r\n }\r\n static getInstance() {\r\n return new OnlineMonitor();\r\n }\r\n getInitialEvent(eventType) {\r\n assert(eventType === 'online', 'Unknown event type: ' + eventType);\r\n return [this.online_];\r\n }\r\n currentlyOnline() {\r\n return this.online_;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Maximum key depth. */\r\nconst MAX_PATH_DEPTH = 32;\r\n/** Maximum number of (UTF8) bytes in a Firebase path. */\r\nconst MAX_PATH_LENGTH_BYTES = 768;\r\n/**\r\n * An immutable object representing a parsed path. It's immutable so that you\r\n * can pass them around to other functions without worrying about them changing\r\n * it.\r\n */\r\nclass Path {\r\n /**\r\n * @param pathOrString - Path string to parse, or another path, or the raw\r\n * tokens array\r\n */\r\n constructor(pathOrString, pieceNum) {\r\n if (pieceNum === void 0) {\r\n this.pieces_ = pathOrString.split('/');\r\n // Remove empty pieces.\r\n let copyTo = 0;\r\n for (let i = 0; i < this.pieces_.length; i++) {\r\n if (this.pieces_[i].length > 0) {\r\n this.pieces_[copyTo] = this.pieces_[i];\r\n copyTo++;\r\n }\r\n }\r\n this.pieces_.length = copyTo;\r\n this.pieceNum_ = 0;\r\n }\r\n else {\r\n this.pieces_ = pathOrString;\r\n this.pieceNum_ = pieceNum;\r\n }\r\n }\r\n toString() {\r\n let pathString = '';\r\n for (let i = this.pieceNum_; i < this.pieces_.length; i++) {\r\n if (this.pieces_[i] !== '') {\r\n pathString += '/' + this.pieces_[i];\r\n }\r\n }\r\n return pathString || '/';\r\n }\r\n}\r\nfunction newEmptyPath() {\r\n return new Path('');\r\n}\r\nfunction pathGetFront(path) {\r\n if (path.pieceNum_ >= path.pieces_.length) {\r\n return null;\r\n }\r\n return path.pieces_[path.pieceNum_];\r\n}\r\n/**\r\n * @returns The number of segments in this path\r\n */\r\nfunction pathGetLength(path) {\r\n return path.pieces_.length - path.pieceNum_;\r\n}\r\nfunction pathPopFront(path) {\r\n let pieceNum = path.pieceNum_;\r\n if (pieceNum < path.pieces_.length) {\r\n pieceNum++;\r\n }\r\n return new Path(path.pieces_, pieceNum);\r\n}\r\nfunction pathGetBack(path) {\r\n if (path.pieceNum_ < path.pieces_.length) {\r\n return path.pieces_[path.pieces_.length - 1];\r\n }\r\n return null;\r\n}\r\nfunction pathToUrlEncodedString(path) {\r\n let pathString = '';\r\n for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\r\n if (path.pieces_[i] !== '') {\r\n pathString += '/' + encodeURIComponent(String(path.pieces_[i]));\r\n }\r\n }\r\n return pathString || '/';\r\n}\r\n/**\r\n * Shallow copy of the parts of the path.\r\n *\r\n */\r\nfunction pathSlice(path, begin = 0) {\r\n return path.pieces_.slice(path.pieceNum_ + begin);\r\n}\r\nfunction pathParent(path) {\r\n if (path.pieceNum_ >= path.pieces_.length) {\r\n return null;\r\n }\r\n const pieces = [];\r\n for (let i = path.pieceNum_; i < path.pieces_.length - 1; i++) {\r\n pieces.push(path.pieces_[i]);\r\n }\r\n return new Path(pieces, 0);\r\n}\r\nfunction pathChild(path, childPathObj) {\r\n const pieces = [];\r\n for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\r\n pieces.push(path.pieces_[i]);\r\n }\r\n if (childPathObj instanceof Path) {\r\n for (let i = childPathObj.pieceNum_; i < childPathObj.pieces_.length; i++) {\r\n pieces.push(childPathObj.pieces_[i]);\r\n }\r\n }\r\n else {\r\n const childPieces = childPathObj.split('/');\r\n for (let i = 0; i < childPieces.length; i++) {\r\n if (childPieces[i].length > 0) {\r\n pieces.push(childPieces[i]);\r\n }\r\n }\r\n }\r\n return new Path(pieces, 0);\r\n}\r\n/**\r\n * @returns True if there are no segments in this path\r\n */\r\nfunction pathIsEmpty(path) {\r\n return path.pieceNum_ >= path.pieces_.length;\r\n}\r\n/**\r\n * @returns The path from outerPath to innerPath\r\n */\r\nfunction newRelativePath(outerPath, innerPath) {\r\n const outer = pathGetFront(outerPath), inner = pathGetFront(innerPath);\r\n if (outer === null) {\r\n return innerPath;\r\n }\r\n else if (outer === inner) {\r\n return newRelativePath(pathPopFront(outerPath), pathPopFront(innerPath));\r\n }\r\n else {\r\n throw new Error('INTERNAL ERROR: innerPath (' +\r\n innerPath +\r\n ') is not within ' +\r\n 'outerPath (' +\r\n outerPath +\r\n ')');\r\n }\r\n}\r\n/**\r\n * @returns -1, 0, 1 if left is less, equal, or greater than the right.\r\n */\r\nfunction pathCompare(left, right) {\r\n const leftKeys = pathSlice(left, 0);\r\n const rightKeys = pathSlice(right, 0);\r\n for (let i = 0; i < leftKeys.length && i < rightKeys.length; i++) {\r\n const cmp = nameCompare(leftKeys[i], rightKeys[i]);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n }\r\n if (leftKeys.length === rightKeys.length) {\r\n return 0;\r\n }\r\n return leftKeys.length < rightKeys.length ? -1 : 1;\r\n}\r\n/**\r\n * @returns true if paths are the same.\r\n */\r\nfunction pathEquals(path, other) {\r\n if (pathGetLength(path) !== pathGetLength(other)) {\r\n return false;\r\n }\r\n for (let i = path.pieceNum_, j = other.pieceNum_; i <= path.pieces_.length; i++, j++) {\r\n if (path.pieces_[i] !== other.pieces_[j]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * @returns True if this path is a parent of (or the same as) other\r\n */\r\nfunction pathContains(path, other) {\r\n let i = path.pieceNum_;\r\n let j = other.pieceNum_;\r\n if (pathGetLength(path) > pathGetLength(other)) {\r\n return false;\r\n }\r\n while (i < path.pieces_.length) {\r\n if (path.pieces_[i] !== other.pieces_[j]) {\r\n return false;\r\n }\r\n ++i;\r\n ++j;\r\n }\r\n return true;\r\n}\r\n/**\r\n * Dynamic (mutable) path used to count path lengths.\r\n *\r\n * This class is used to efficiently check paths for valid\r\n * length (in UTF8 bytes) and depth (used in path validation).\r\n *\r\n * Throws Error exception if path is ever invalid.\r\n *\r\n * The definition of a path always begins with '/'.\r\n */\r\nclass ValidationPath {\r\n /**\r\n * @param path - Initial Path.\r\n * @param errorPrefix_ - Prefix for any error messages.\r\n */\r\n constructor(path, errorPrefix_) {\r\n this.errorPrefix_ = errorPrefix_;\r\n this.parts_ = pathSlice(path, 0);\r\n /** Initialize to number of '/' chars needed in path. */\r\n this.byteLength_ = Math.max(1, this.parts_.length);\r\n for (let i = 0; i < this.parts_.length; i++) {\r\n this.byteLength_ += stringLength(this.parts_[i]);\r\n }\r\n validationPathCheckValid(this);\r\n }\r\n}\r\nfunction validationPathPush(validationPath, child) {\r\n // Count the needed '/'\r\n if (validationPath.parts_.length > 0) {\r\n validationPath.byteLength_ += 1;\r\n }\r\n validationPath.parts_.push(child);\r\n validationPath.byteLength_ += stringLength(child);\r\n validationPathCheckValid(validationPath);\r\n}\r\nfunction validationPathPop(validationPath) {\r\n const last = validationPath.parts_.pop();\r\n validationPath.byteLength_ -= stringLength(last);\r\n // Un-count the previous '/'\r\n if (validationPath.parts_.length > 0) {\r\n validationPath.byteLength_ -= 1;\r\n }\r\n}\r\nfunction validationPathCheckValid(validationPath) {\r\n if (validationPath.byteLength_ > MAX_PATH_LENGTH_BYTES) {\r\n throw new Error(validationPath.errorPrefix_ +\r\n 'has a key path longer than ' +\r\n MAX_PATH_LENGTH_BYTES +\r\n ' bytes (' +\r\n validationPath.byteLength_ +\r\n ').');\r\n }\r\n if (validationPath.parts_.length > MAX_PATH_DEPTH) {\r\n throw new Error(validationPath.errorPrefix_ +\r\n 'path specified exceeds the maximum depth that can be written (' +\r\n MAX_PATH_DEPTH +\r\n ') or object contains a cycle ' +\r\n validationPathToErrorString(validationPath));\r\n }\r\n}\r\n/**\r\n * String for use in error messages - uses '.' notation for path.\r\n */\r\nfunction validationPathToErrorString(validationPath) {\r\n if (validationPath.parts_.length === 0) {\r\n return '';\r\n }\r\n return \"in property '\" + validationPath.parts_.join('.') + \"'\";\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass VisibilityMonitor extends EventEmitter {\r\n constructor() {\r\n super(['visible']);\r\n let hidden;\r\n let visibilityChange;\r\n if (typeof document !== 'undefined' &&\r\n typeof document.addEventListener !== 'undefined') {\r\n if (typeof document['hidden'] !== 'undefined') {\r\n // Opera 12.10 and Firefox 18 and later support\r\n visibilityChange = 'visibilitychange';\r\n hidden = 'hidden';\r\n }\r\n else if (typeof document['mozHidden'] !== 'undefined') {\r\n visibilityChange = 'mozvisibilitychange';\r\n hidden = 'mozHidden';\r\n }\r\n else if (typeof document['msHidden'] !== 'undefined') {\r\n visibilityChange = 'msvisibilitychange';\r\n hidden = 'msHidden';\r\n }\r\n else if (typeof document['webkitHidden'] !== 'undefined') {\r\n visibilityChange = 'webkitvisibilitychange';\r\n hidden = 'webkitHidden';\r\n }\r\n }\r\n // Initially, we always assume we are visible. This ensures that in browsers\r\n // without page visibility support or in cases where we are never visible\r\n // (e.g. chrome extension), we act as if we are visible, i.e. don't delay\r\n // reconnects\r\n this.visible_ = true;\r\n if (visibilityChange) {\r\n document.addEventListener(visibilityChange, () => {\r\n const visible = !document[hidden];\r\n if (visible !== this.visible_) {\r\n this.visible_ = visible;\r\n this.trigger('visible', visible);\r\n }\r\n }, false);\r\n }\r\n }\r\n static getInstance() {\r\n return new VisibilityMonitor();\r\n }\r\n getInitialEvent(eventType) {\r\n assert(eventType === 'visible', 'Unknown event type: ' + eventType);\r\n return [this.visible_];\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst RECONNECT_MIN_DELAY = 1000;\r\nconst RECONNECT_MAX_DELAY_DEFAULT = 60 * 5 * 1000; // 5 minutes in milliseconds (Case: 1858)\r\nconst RECONNECT_MAX_DELAY_FOR_ADMINS = 30 * 1000; // 30 seconds for admin clients (likely to be a backend server)\r\nconst RECONNECT_DELAY_MULTIPLIER = 1.3;\r\nconst RECONNECT_DELAY_RESET_TIMEOUT = 30000; // Reset delay back to MIN_DELAY after being connected for 30sec.\r\nconst SERVER_KILL_INTERRUPT_REASON = 'server_kill';\r\n// If auth fails repeatedly, we'll assume something is wrong and log a warning / back off.\r\nconst INVALID_TOKEN_THRESHOLD = 3;\r\n/**\r\n * Firebase connection. Abstracts wire protocol and handles reconnecting.\r\n *\r\n * NOTE: All JSON objects sent to the realtime connection must have property names enclosed\r\n * in quotes to make sure the closure compiler does not minify them.\r\n */\r\nclass PersistentConnection extends ServerActions {\r\n /**\r\n * @param repoInfo_ - Data about the namespace we are connecting to\r\n * @param applicationId_ - The Firebase App ID for this project\r\n * @param onDataUpdate_ - A callback for new data from the server\r\n */\r\n constructor(repoInfo_, applicationId_, onDataUpdate_, onConnectStatus_, onServerInfoUpdate_, authTokenProvider_, appCheckTokenProvider_, authOverride_) {\r\n super();\r\n this.repoInfo_ = repoInfo_;\r\n this.applicationId_ = applicationId_;\r\n this.onDataUpdate_ = onDataUpdate_;\r\n this.onConnectStatus_ = onConnectStatus_;\r\n this.onServerInfoUpdate_ = onServerInfoUpdate_;\r\n this.authTokenProvider_ = authTokenProvider_;\r\n this.appCheckTokenProvider_ = appCheckTokenProvider_;\r\n this.authOverride_ = authOverride_;\r\n // Used for diagnostic logging.\r\n this.id = PersistentConnection.nextPersistentConnectionId_++;\r\n this.log_ = logWrapper('p:' + this.id + ':');\r\n this.interruptReasons_ = {};\r\n this.listens = new Map();\r\n this.outstandingPuts_ = [];\r\n this.outstandingGets_ = [];\r\n this.outstandingPutCount_ = 0;\r\n this.outstandingGetCount_ = 0;\r\n this.onDisconnectRequestQueue_ = [];\r\n this.connected_ = false;\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_DEFAULT;\r\n this.securityDebugCallback_ = null;\r\n this.lastSessionId = null;\r\n this.establishConnectionTimer_ = null;\r\n this.visible_ = false;\r\n // Before we get connected, we keep a queue of pending messages to send.\r\n this.requestCBHash_ = {};\r\n this.requestNumber_ = 0;\r\n this.realtime_ = null;\r\n this.authToken_ = null;\r\n this.appCheckToken_ = null;\r\n this.forceTokenRefresh_ = false;\r\n this.invalidAuthTokenCount_ = 0;\r\n this.invalidAppCheckTokenCount_ = 0;\r\n this.firstConnection_ = true;\r\n this.lastConnectionAttemptTime_ = null;\r\n this.lastConnectionEstablishedTime_ = null;\r\n if (authOverride_ && !isNodeSdk()) {\r\n throw new Error('Auth override specified in options, but not supported on non Node.js platforms');\r\n }\r\n VisibilityMonitor.getInstance().on('visible', this.onVisible_, this);\r\n if (repoInfo_.host.indexOf('fblocal') === -1) {\r\n OnlineMonitor.getInstance().on('online', this.onOnline_, this);\r\n }\r\n }\r\n sendRequest(action, body, onResponse) {\r\n const curReqNum = ++this.requestNumber_;\r\n const msg = { r: curReqNum, a: action, b: body };\r\n this.log_(stringify(msg));\r\n assert(this.connected_, \"sendRequest call when we're not connected not allowed.\");\r\n this.realtime_.sendRequest(msg);\r\n if (onResponse) {\r\n this.requestCBHash_[curReqNum] = onResponse;\r\n }\r\n }\r\n get(query) {\r\n this.initConnection_();\r\n const deferred = new Deferred();\r\n const request = {\r\n p: query._path.toString(),\r\n q: query._queryObject\r\n };\r\n const outstandingGet = {\r\n action: 'g',\r\n request,\r\n onComplete: (message) => {\r\n const payload = message['d'];\r\n if (message['s'] === 'ok') {\r\n deferred.resolve(payload);\r\n }\r\n else {\r\n deferred.reject(payload);\r\n }\r\n }\r\n };\r\n this.outstandingGets_.push(outstandingGet);\r\n this.outstandingGetCount_++;\r\n const index = this.outstandingGets_.length - 1;\r\n if (this.connected_) {\r\n this.sendGet_(index);\r\n }\r\n return deferred.promise;\r\n }\r\n listen(query, currentHashFn, tag, onComplete) {\r\n this.initConnection_();\r\n const queryId = query._queryIdentifier;\r\n const pathString = query._path.toString();\r\n this.log_('Listen called for ' + pathString + ' ' + queryId);\r\n if (!this.listens.has(pathString)) {\r\n this.listens.set(pathString, new Map());\r\n }\r\n assert(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'listen() called for non-default but complete query');\r\n assert(!this.listens.get(pathString).has(queryId), `listen() called twice for same path/queryId.`);\r\n const listenSpec = {\r\n onComplete,\r\n hashFn: currentHashFn,\r\n query,\r\n tag\r\n };\r\n this.listens.get(pathString).set(queryId, listenSpec);\r\n if (this.connected_) {\r\n this.sendListen_(listenSpec);\r\n }\r\n }\r\n sendGet_(index) {\r\n const get = this.outstandingGets_[index];\r\n this.sendRequest('g', get.request, (message) => {\r\n delete this.outstandingGets_[index];\r\n this.outstandingGetCount_--;\r\n if (this.outstandingGetCount_ === 0) {\r\n this.outstandingGets_ = [];\r\n }\r\n if (get.onComplete) {\r\n get.onComplete(message);\r\n }\r\n });\r\n }\r\n sendListen_(listenSpec) {\r\n const query = listenSpec.query;\r\n const pathString = query._path.toString();\r\n const queryId = query._queryIdentifier;\r\n this.log_('Listen on ' + pathString + ' for ' + queryId);\r\n const req = { /*path*/ p: pathString };\r\n const action = 'q';\r\n // Only bother to send query if it's non-default.\r\n if (listenSpec.tag) {\r\n req['q'] = query._queryObject;\r\n req['t'] = listenSpec.tag;\r\n }\r\n req[ /*hash*/'h'] = listenSpec.hashFn();\r\n this.sendRequest(action, req, (message) => {\r\n const payload = message[ /*data*/'d'];\r\n const status = message[ /*status*/'s'];\r\n // print warnings in any case...\r\n PersistentConnection.warnOnListenWarnings_(payload, query);\r\n const currentListenSpec = this.listens.get(pathString) &&\r\n this.listens.get(pathString).get(queryId);\r\n // only trigger actions if the listen hasn't been removed and readded\r\n if (currentListenSpec === listenSpec) {\r\n this.log_('listen response', message);\r\n if (status !== 'ok') {\r\n this.removeListen_(pathString, queryId);\r\n }\r\n if (listenSpec.onComplete) {\r\n listenSpec.onComplete(status, payload);\r\n }\r\n }\r\n });\r\n }\r\n static warnOnListenWarnings_(payload, query) {\r\n if (payload && typeof payload === 'object' && contains(payload, 'w')) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const warnings = safeGet(payload, 'w');\r\n if (Array.isArray(warnings) && ~warnings.indexOf('no_index')) {\r\n const indexSpec = '\".indexOn\": \"' + query._queryParams.getIndex().toString() + '\"';\r\n const indexPath = query._path.toString();\r\n warn(`Using an unspecified index. Your data will be downloaded and ` +\r\n `filtered on the client. Consider adding ${indexSpec} at ` +\r\n `${indexPath} to your security rules for better performance.`);\r\n }\r\n }\r\n }\r\n refreshAuthToken(token) {\r\n this.authToken_ = token;\r\n this.log_('Auth token refreshed');\r\n if (this.authToken_) {\r\n this.tryAuth();\r\n }\r\n else {\r\n //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete\r\n //the credential so we dont become authenticated next time we connect.\r\n if (this.connected_) {\r\n this.sendRequest('unauth', {}, () => { });\r\n }\r\n }\r\n this.reduceReconnectDelayIfAdminCredential_(token);\r\n }\r\n reduceReconnectDelayIfAdminCredential_(credential) {\r\n // NOTE: This isn't intended to be bulletproof (a malicious developer can always just modify the client).\r\n // Additionally, we don't bother resetting the max delay back to the default if auth fails / expires.\r\n const isFirebaseSecret = credential && credential.length === 40;\r\n if (isFirebaseSecret || isAdmin(credential)) {\r\n this.log_('Admin auth credential detected. Reducing max reconnect time.');\r\n this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n }\r\n }\r\n refreshAppCheckToken(token) {\r\n this.appCheckToken_ = token;\r\n this.log_('App check token refreshed');\r\n if (this.appCheckToken_) {\r\n this.tryAppCheck();\r\n }\r\n else {\r\n //If we're connected we want to let the server know to unauthenticate us.\r\n //If we're not connected, simply delete the credential so we dont become\r\n // authenticated next time we connect.\r\n if (this.connected_) {\r\n this.sendRequest('unappeck', {}, () => { });\r\n }\r\n }\r\n }\r\n /**\r\n * Attempts to authenticate with the given credentials. If the authentication attempt fails, it's triggered like\r\n * a auth revoked (the connection is closed).\r\n */\r\n tryAuth() {\r\n if (this.connected_ && this.authToken_) {\r\n const token = this.authToken_;\r\n const authMethod = isValidFormat(token) ? 'auth' : 'gauth';\r\n const requestData = { cred: token };\r\n if (this.authOverride_ === null) {\r\n requestData['noauth'] = true;\r\n }\r\n else if (typeof this.authOverride_ === 'object') {\r\n requestData['authvar'] = this.authOverride_;\r\n }\r\n this.sendRequest(authMethod, requestData, (res) => {\r\n const status = res[ /*status*/'s'];\r\n const data = res[ /*data*/'d'] || 'error';\r\n if (this.authToken_ === token) {\r\n if (status === 'ok') {\r\n this.invalidAuthTokenCount_ = 0;\r\n }\r\n else {\r\n // Triggers reconnect and force refresh for auth token\r\n this.onAuthRevoked_(status, data);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Attempts to authenticate with the given token. If the authentication\r\n * attempt fails, it's triggered like the token was revoked (the connection is\r\n * closed).\r\n */\r\n tryAppCheck() {\r\n if (this.connected_ && this.appCheckToken_) {\r\n this.sendRequest('appcheck', { 'token': this.appCheckToken_ }, (res) => {\r\n const status = res[ /*status*/'s'];\r\n const data = res[ /*data*/'d'] || 'error';\r\n if (status === 'ok') {\r\n this.invalidAppCheckTokenCount_ = 0;\r\n }\r\n else {\r\n this.onAppCheckRevoked_(status, data);\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * @inheritDoc\r\n */\r\n unlisten(query, tag) {\r\n const pathString = query._path.toString();\r\n const queryId = query._queryIdentifier;\r\n this.log_('Unlisten called for ' + pathString + ' ' + queryId);\r\n assert(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'unlisten() called for non-default but complete query');\r\n const listen = this.removeListen_(pathString, queryId);\r\n if (listen && this.connected_) {\r\n this.sendUnlisten_(pathString, queryId, query._queryObject, tag);\r\n }\r\n }\r\n sendUnlisten_(pathString, queryId, queryObj, tag) {\r\n this.log_('Unlisten on ' + pathString + ' for ' + queryId);\r\n const req = { /*path*/ p: pathString };\r\n const action = 'n';\r\n // Only bother sending queryId if it's non-default.\r\n if (tag) {\r\n req['q'] = queryObj;\r\n req['t'] = tag;\r\n }\r\n this.sendRequest(action, req);\r\n }\r\n onDisconnectPut(pathString, data, onComplete) {\r\n this.initConnection_();\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('o', pathString, data, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString,\r\n action: 'o',\r\n data,\r\n onComplete\r\n });\r\n }\r\n }\r\n onDisconnectMerge(pathString, data, onComplete) {\r\n this.initConnection_();\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('om', pathString, data, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString,\r\n action: 'om',\r\n data,\r\n onComplete\r\n });\r\n }\r\n }\r\n onDisconnectCancel(pathString, onComplete) {\r\n this.initConnection_();\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('oc', pathString, null, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString,\r\n action: 'oc',\r\n data: null,\r\n onComplete\r\n });\r\n }\r\n }\r\n sendOnDisconnect_(action, pathString, data, onComplete) {\r\n const request = { /*path*/ p: pathString, /*data*/ d: data };\r\n this.log_('onDisconnect ' + action, request);\r\n this.sendRequest(action, request, (response) => {\r\n if (onComplete) {\r\n setTimeout(() => {\r\n onComplete(response[ /*status*/'s'], response[ /* data */'d']);\r\n }, Math.floor(0));\r\n }\r\n });\r\n }\r\n put(pathString, data, onComplete, hash) {\r\n this.putInternal('p', pathString, data, onComplete, hash);\r\n }\r\n merge(pathString, data, onComplete, hash) {\r\n this.putInternal('m', pathString, data, onComplete, hash);\r\n }\r\n putInternal(action, pathString, data, onComplete, hash) {\r\n this.initConnection_();\r\n const request = {\r\n /*path*/ p: pathString,\r\n /*data*/ d: data\r\n };\r\n if (hash !== undefined) {\r\n request[ /*hash*/'h'] = hash;\r\n }\r\n // TODO: Only keep track of the most recent put for a given path?\r\n this.outstandingPuts_.push({\r\n action,\r\n request,\r\n onComplete\r\n });\r\n this.outstandingPutCount_++;\r\n const index = this.outstandingPuts_.length - 1;\r\n if (this.connected_) {\r\n this.sendPut_(index);\r\n }\r\n else {\r\n this.log_('Buffering put: ' + pathString);\r\n }\r\n }\r\n sendPut_(index) {\r\n const action = this.outstandingPuts_[index].action;\r\n const request = this.outstandingPuts_[index].request;\r\n const onComplete = this.outstandingPuts_[index].onComplete;\r\n this.outstandingPuts_[index].queued = this.connected_;\r\n this.sendRequest(action, request, (message) => {\r\n this.log_(action + ' response', message);\r\n delete this.outstandingPuts_[index];\r\n this.outstandingPutCount_--;\r\n // Clean up array occasionally.\r\n if (this.outstandingPutCount_ === 0) {\r\n this.outstandingPuts_ = [];\r\n }\r\n if (onComplete) {\r\n onComplete(message[ /*status*/'s'], message[ /* data */'d']);\r\n }\r\n });\r\n }\r\n reportStats(stats) {\r\n // If we're not connected, we just drop the stats.\r\n if (this.connected_) {\r\n const request = { /*counters*/ c: stats };\r\n this.log_('reportStats', request);\r\n this.sendRequest(/*stats*/ 's', request, result => {\r\n const status = result[ /*status*/'s'];\r\n if (status !== 'ok') {\r\n const errorReason = result[ /* data */'d'];\r\n this.log_('reportStats', 'Error sending stats: ' + errorReason);\r\n }\r\n });\r\n }\r\n }\r\n onDataMessage_(message) {\r\n if ('r' in message) {\r\n // this is a response\r\n this.log_('from server: ' + stringify(message));\r\n const reqNum = message['r'];\r\n const onResponse = this.requestCBHash_[reqNum];\r\n if (onResponse) {\r\n delete this.requestCBHash_[reqNum];\r\n onResponse(message[ /*body*/'b']);\r\n }\r\n }\r\n else if ('error' in message) {\r\n throw 'A server-side error has occurred: ' + message['error'];\r\n }\r\n else if ('a' in message) {\r\n // a and b are action and body, respectively\r\n this.onDataPush_(message['a'], message['b']);\r\n }\r\n }\r\n onDataPush_(action, body) {\r\n this.log_('handleServerMessage', action, body);\r\n if (action === 'd') {\r\n this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n /*isMerge*/ false, body['t']);\r\n }\r\n else if (action === 'm') {\r\n this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n /*isMerge=*/ true, body['t']);\r\n }\r\n else if (action === 'c') {\r\n this.onListenRevoked_(body[ /*path*/'p'], body[ /*query*/'q']);\r\n }\r\n else if (action === 'ac') {\r\n this.onAuthRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n }\r\n else if (action === 'apc') {\r\n this.onAppCheckRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n }\r\n else if (action === 'sd') {\r\n this.onSecurityDebugPacket_(body);\r\n }\r\n else {\r\n error('Unrecognized action received from server: ' +\r\n stringify(action) +\r\n '\\nAre you using the latest client?');\r\n }\r\n }\r\n onReady_(timestamp, sessionId) {\r\n this.log_('connection ready');\r\n this.connected_ = true;\r\n this.lastConnectionEstablishedTime_ = new Date().getTime();\r\n this.handleTimestamp_(timestamp);\r\n this.lastSessionId = sessionId;\r\n if (this.firstConnection_) {\r\n this.sendConnectStats_();\r\n }\r\n this.restoreState_();\r\n this.firstConnection_ = false;\r\n this.onConnectStatus_(true);\r\n }\r\n scheduleConnect_(timeout) {\r\n assert(!this.realtime_, \"Scheduling a connect when we're already connected/ing?\");\r\n if (this.establishConnectionTimer_) {\r\n clearTimeout(this.establishConnectionTimer_);\r\n }\r\n // NOTE: Even when timeout is 0, it's important to do a setTimeout to work around an infuriating \"Security Error\" in\r\n // Firefox when trying to write to our long-polling iframe in some scenarios (e.g. Forge or our unit tests).\r\n this.establishConnectionTimer_ = setTimeout(() => {\r\n this.establishConnectionTimer_ = null;\r\n this.establishConnection_();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, Math.floor(timeout));\r\n }\r\n initConnection_() {\r\n if (!this.realtime_ && this.firstConnection_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n onVisible_(visible) {\r\n // NOTE: Tabbing away and back to a window will defeat our reconnect backoff, but I think that's fine.\r\n if (visible &&\r\n !this.visible_ &&\r\n this.reconnectDelay_ === this.maxReconnectDelay_) {\r\n this.log_('Window became visible. Reducing delay.');\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n this.visible_ = visible;\r\n }\r\n onOnline_(online) {\r\n if (online) {\r\n this.log_('Browser went online.');\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n else {\r\n this.log_('Browser went offline. Killing connection.');\r\n if (this.realtime_) {\r\n this.realtime_.close();\r\n }\r\n }\r\n }\r\n onRealtimeDisconnect_() {\r\n this.log_('data client disconnected');\r\n this.connected_ = false;\r\n this.realtime_ = null;\r\n // Since we don't know if our sent transactions succeeded or not, we need to cancel them.\r\n this.cancelSentTransactions_();\r\n // Clear out the pending requests.\r\n this.requestCBHash_ = {};\r\n if (this.shouldReconnect_()) {\r\n if (!this.visible_) {\r\n this.log_(\"Window isn't visible. Delaying reconnect.\");\r\n this.reconnectDelay_ = this.maxReconnectDelay_;\r\n this.lastConnectionAttemptTime_ = new Date().getTime();\r\n }\r\n else if (this.lastConnectionEstablishedTime_) {\r\n // If we've been connected long enough, reset reconnect delay to minimum.\r\n const timeSinceLastConnectSucceeded = new Date().getTime() - this.lastConnectionEstablishedTime_;\r\n if (timeSinceLastConnectSucceeded > RECONNECT_DELAY_RESET_TIMEOUT) {\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n }\r\n this.lastConnectionEstablishedTime_ = null;\r\n }\r\n const timeSinceLastConnectAttempt = new Date().getTime() - this.lastConnectionAttemptTime_;\r\n let reconnectDelay = Math.max(0, this.reconnectDelay_ - timeSinceLastConnectAttempt);\r\n reconnectDelay = Math.random() * reconnectDelay;\r\n this.log_('Trying to reconnect in ' + reconnectDelay + 'ms');\r\n this.scheduleConnect_(reconnectDelay);\r\n // Adjust reconnect delay for next time.\r\n this.reconnectDelay_ = Math.min(this.maxReconnectDelay_, this.reconnectDelay_ * RECONNECT_DELAY_MULTIPLIER);\r\n }\r\n this.onConnectStatus_(false);\r\n }\r\n async establishConnection_() {\r\n if (this.shouldReconnect_()) {\r\n this.log_('Making a connection attempt');\r\n this.lastConnectionAttemptTime_ = new Date().getTime();\r\n this.lastConnectionEstablishedTime_ = null;\r\n const onDataMessage = this.onDataMessage_.bind(this);\r\n const onReady = this.onReady_.bind(this);\r\n const onDisconnect = this.onRealtimeDisconnect_.bind(this);\r\n const connId = this.id + ':' + PersistentConnection.nextConnectionId_++;\r\n const lastSessionId = this.lastSessionId;\r\n let canceled = false;\r\n let connection = null;\r\n const closeFn = function () {\r\n if (connection) {\r\n connection.close();\r\n }\r\n else {\r\n canceled = true;\r\n onDisconnect();\r\n }\r\n };\r\n const sendRequestFn = function (msg) {\r\n assert(connection, \"sendRequest call when we're not connected not allowed.\");\r\n connection.sendRequest(msg);\r\n };\r\n this.realtime_ = {\r\n close: closeFn,\r\n sendRequest: sendRequestFn\r\n };\r\n const forceRefresh = this.forceTokenRefresh_;\r\n this.forceTokenRefresh_ = false;\r\n try {\r\n // First fetch auth and app check token, and establish connection after\r\n // fetching the token was successful\r\n const [authToken, appCheckToken] = await Promise.all([\r\n this.authTokenProvider_.getToken(forceRefresh),\r\n this.appCheckTokenProvider_.getToken(forceRefresh)\r\n ]);\r\n if (!canceled) {\r\n log('getToken() completed. Creating connection.');\r\n this.authToken_ = authToken && authToken.accessToken;\r\n this.appCheckToken_ = appCheckToken && appCheckToken.token;\r\n connection = new Connection(connId, this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, onDataMessage, onReady, onDisconnect, \r\n /* onKill= */ reason => {\r\n warn(reason + ' (' + this.repoInfo_.toString() + ')');\r\n this.interrupt(SERVER_KILL_INTERRUPT_REASON);\r\n }, lastSessionId);\r\n }\r\n else {\r\n log('getToken() completed but was canceled');\r\n }\r\n }\r\n catch (error) {\r\n this.log_('Failed to get token: ' + error);\r\n if (!canceled) {\r\n if (this.repoInfo_.nodeAdmin) {\r\n // This may be a critical error for the Admin Node.js SDK, so log a warning.\r\n // But getToken() may also just have temporarily failed, so we still want to\r\n // continue retrying.\r\n warn(error);\r\n }\r\n closeFn();\r\n }\r\n }\r\n }\r\n }\r\n interrupt(reason) {\r\n log('Interrupting connection for reason: ' + reason);\r\n this.interruptReasons_[reason] = true;\r\n if (this.realtime_) {\r\n this.realtime_.close();\r\n }\r\n else {\r\n if (this.establishConnectionTimer_) {\r\n clearTimeout(this.establishConnectionTimer_);\r\n this.establishConnectionTimer_ = null;\r\n }\r\n if (this.connected_) {\r\n this.onRealtimeDisconnect_();\r\n }\r\n }\r\n }\r\n resume(reason) {\r\n log('Resuming connection for reason: ' + reason);\r\n delete this.interruptReasons_[reason];\r\n if (isEmpty(this.interruptReasons_)) {\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n }\r\n handleTimestamp_(timestamp) {\r\n const delta = timestamp - new Date().getTime();\r\n this.onServerInfoUpdate_({ serverTimeOffset: delta });\r\n }\r\n cancelSentTransactions_() {\r\n for (let i = 0; i < this.outstandingPuts_.length; i++) {\r\n const put = this.outstandingPuts_[i];\r\n if (put && /*hash*/ 'h' in put.request && put.queued) {\r\n if (put.onComplete) {\r\n put.onComplete('disconnect');\r\n }\r\n delete this.outstandingPuts_[i];\r\n this.outstandingPutCount_--;\r\n }\r\n }\r\n // Clean up array occasionally.\r\n if (this.outstandingPutCount_ === 0) {\r\n this.outstandingPuts_ = [];\r\n }\r\n }\r\n onListenRevoked_(pathString, query) {\r\n // Remove the listen and manufacture a \"permission_denied\" error for the failed listen.\r\n let queryId;\r\n if (!query) {\r\n queryId = 'default';\r\n }\r\n else {\r\n queryId = query.map(q => ObjectToUniqueKey(q)).join('$');\r\n }\r\n const listen = this.removeListen_(pathString, queryId);\r\n if (listen && listen.onComplete) {\r\n listen.onComplete('permission_denied');\r\n }\r\n }\r\n removeListen_(pathString, queryId) {\r\n const normalizedPathString = new Path(pathString).toString(); // normalize path.\r\n let listen;\r\n if (this.listens.has(normalizedPathString)) {\r\n const map = this.listens.get(normalizedPathString);\r\n listen = map.get(queryId);\r\n map.delete(queryId);\r\n if (map.size === 0) {\r\n this.listens.delete(normalizedPathString);\r\n }\r\n }\r\n else {\r\n // all listens for this path has already been removed\r\n listen = undefined;\r\n }\r\n return listen;\r\n }\r\n onAuthRevoked_(statusCode, explanation) {\r\n log('Auth token revoked: ' + statusCode + '/' + explanation);\r\n this.authToken_ = null;\r\n this.forceTokenRefresh_ = true;\r\n this.realtime_.close();\r\n if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n // We'll wait a couple times before logging the warning / increasing the\r\n // retry period since oauth tokens will report as \"invalid\" if they're\r\n // just expired. Plus there may be transient issues that resolve themselves.\r\n this.invalidAuthTokenCount_++;\r\n if (this.invalidAuthTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\r\n // Set a long reconnect delay because recovery is unlikely\r\n this.reconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n // Notify the auth token provider that the token is invalid, which will log\r\n // a warning\r\n this.authTokenProvider_.notifyForInvalidToken();\r\n }\r\n }\r\n }\r\n onAppCheckRevoked_(statusCode, explanation) {\r\n log('App check token revoked: ' + statusCode + '/' + explanation);\r\n this.appCheckToken_ = null;\r\n this.forceTokenRefresh_ = true;\r\n // Note: We don't close the connection as the developer may not have\r\n // enforcement enabled. The backend closes connections with enforcements.\r\n if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n // We'll wait a couple times before logging the warning / increasing the\r\n // retry period since oauth tokens will report as \"invalid\" if they're\r\n // just expired. Plus there may be transient issues that resolve themselves.\r\n this.invalidAppCheckTokenCount_++;\r\n if (this.invalidAppCheckTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\r\n this.appCheckTokenProvider_.notifyForInvalidToken();\r\n }\r\n }\r\n }\r\n onSecurityDebugPacket_(body) {\r\n if (this.securityDebugCallback_) {\r\n this.securityDebugCallback_(body);\r\n }\r\n else {\r\n if ('msg' in body) {\r\n console.log('FIREBASE: ' + body['msg'].replace('\\n', '\\nFIREBASE: '));\r\n }\r\n }\r\n }\r\n restoreState_() {\r\n //Re-authenticate ourselves if we have a credential stored.\r\n this.tryAuth();\r\n this.tryAppCheck();\r\n // Puts depend on having received the corresponding data update from the server before they complete, so we must\r\n // make sure to send listens before puts.\r\n for (const queries of this.listens.values()) {\r\n for (const listenSpec of queries.values()) {\r\n this.sendListen_(listenSpec);\r\n }\r\n }\r\n for (let i = 0; i < this.outstandingPuts_.length; i++) {\r\n if (this.outstandingPuts_[i]) {\r\n this.sendPut_(i);\r\n }\r\n }\r\n while (this.onDisconnectRequestQueue_.length) {\r\n const request = this.onDisconnectRequestQueue_.shift();\r\n this.sendOnDisconnect_(request.action, request.pathString, request.data, request.onComplete);\r\n }\r\n for (let i = 0; i < this.outstandingGets_.length; i++) {\r\n if (this.outstandingGets_[i]) {\r\n this.sendGet_(i);\r\n }\r\n }\r\n }\r\n /**\r\n * Sends client stats for first connection\r\n */\r\n sendConnectStats_() {\r\n const stats = {};\r\n let clientName = 'js';\r\n if (isNodeSdk()) {\r\n if (this.repoInfo_.nodeAdmin) {\r\n clientName = 'admin_node';\r\n }\r\n else {\r\n clientName = 'node';\r\n }\r\n }\r\n stats['sdk.' + clientName + '.' + SDK_VERSION.replace(/\\./g, '-')] = 1;\r\n if (isMobileCordova()) {\r\n stats['framework.cordova'] = 1;\r\n }\r\n else if (isReactNative()) {\r\n stats['framework.reactnative'] = 1;\r\n }\r\n this.reportStats(stats);\r\n }\r\n shouldReconnect_() {\r\n const online = OnlineMonitor.getInstance().currentlyOnline();\r\n return isEmpty(this.interruptReasons_) && online;\r\n }\r\n}\r\nPersistentConnection.nextPersistentConnectionId_ = 0;\r\n/**\r\n * Counter for number of connections created. Mainly used for tagging in the logs\r\n */\r\nPersistentConnection.nextConnectionId_ = 0;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass NamedNode {\r\n constructor(name, node) {\r\n this.name = name;\r\n this.node = node;\r\n }\r\n static Wrap(name, node) {\r\n return new NamedNode(name, node);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Index {\r\n /**\r\n * @returns A standalone comparison function for\r\n * this index\r\n */\r\n getCompare() {\r\n return this.compare.bind(this);\r\n }\r\n /**\r\n * Given a before and after value for a node, determine if the indexed value has changed. Even if they are different,\r\n * it's possible that the changes are isolated to parts of the snapshot that are not indexed.\r\n *\r\n *\r\n * @returns True if the portion of the snapshot being indexed changed between oldNode and newNode\r\n */\r\n indexedValueChanged(oldNode, newNode) {\r\n const oldWrapped = new NamedNode(MIN_NAME, oldNode);\r\n const newWrapped = new NamedNode(MIN_NAME, newNode);\r\n return this.compare(oldWrapped, newWrapped) !== 0;\r\n }\r\n /**\r\n * @returns a node wrapper that will sort equal to or less than\r\n * any other node wrapper, using this index\r\n */\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet __EMPTY_NODE;\r\nclass KeyIndex extends Index {\r\n static get __EMPTY_NODE() {\r\n return __EMPTY_NODE;\r\n }\r\n static set __EMPTY_NODE(val) {\r\n __EMPTY_NODE = val;\r\n }\r\n compare(a, b) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n isDefinedOn(node) {\r\n // We could probably return true here (since every node has a key), but it's never called\r\n // so just leaving unimplemented for now.\r\n throw assertionError('KeyIndex.isDefinedOn not expected to be called.');\r\n }\r\n indexedValueChanged(oldNode, newNode) {\r\n return false; // The key for a node never changes.\r\n }\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n maxPost() {\r\n // TODO: This should really be created once and cached in a static property, but\r\n // NamedNode isn't defined yet, so I can't use it in a static. Bleh.\r\n return new NamedNode(MAX_NAME, __EMPTY_NODE);\r\n }\r\n makePost(indexValue, name) {\r\n assert(typeof indexValue === 'string', 'KeyIndex indexValue must always be a string.');\r\n // We just use empty node, but it'll never be compared, since our comparator only looks at name.\r\n return new NamedNode(indexValue, __EMPTY_NODE);\r\n }\r\n /**\r\n * @returns String representation for inclusion in a query spec\r\n */\r\n toString() {\r\n return '.key';\r\n }\r\n}\r\nconst KEY_INDEX = new KeyIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An iterator over an LLRBNode.\r\n */\r\nclass SortedMapIterator {\r\n /**\r\n * @param node - Node to iterate.\r\n * @param isReverse_ - Whether or not to iterate in reverse\r\n */\r\n constructor(node, startKey, comparator, isReverse_, resultGenerator_ = null) {\r\n this.isReverse_ = isReverse_;\r\n this.resultGenerator_ = resultGenerator_;\r\n this.nodeStack_ = [];\r\n let cmp = 1;\r\n while (!node.isEmpty()) {\r\n node = node;\r\n cmp = startKey ? comparator(node.key, startKey) : 1;\r\n // flip the comparison if we're going in reverse\r\n if (isReverse_) {\r\n cmp *= -1;\r\n }\r\n if (cmp < 0) {\r\n // This node is less than our start key. ignore it\r\n if (this.isReverse_) {\r\n node = node.left;\r\n }\r\n else {\r\n node = node.right;\r\n }\r\n }\r\n else if (cmp === 0) {\r\n // This node is exactly equal to our start key. Push it on the stack, but stop iterating;\r\n this.nodeStack_.push(node);\r\n break;\r\n }\r\n else {\r\n // This node is greater than our start key, add it to the stack and move to the next one\r\n this.nodeStack_.push(node);\r\n if (this.isReverse_) {\r\n node = node.right;\r\n }\r\n else {\r\n node = node.left;\r\n }\r\n }\r\n }\r\n }\r\n getNext() {\r\n if (this.nodeStack_.length === 0) {\r\n return null;\r\n }\r\n let node = this.nodeStack_.pop();\r\n let result;\r\n if (this.resultGenerator_) {\r\n result = this.resultGenerator_(node.key, node.value);\r\n }\r\n else {\r\n result = { key: node.key, value: node.value };\r\n }\r\n if (this.isReverse_) {\r\n node = node.left;\r\n while (!node.isEmpty()) {\r\n this.nodeStack_.push(node);\r\n node = node.right;\r\n }\r\n }\r\n else {\r\n node = node.right;\r\n while (!node.isEmpty()) {\r\n this.nodeStack_.push(node);\r\n node = node.left;\r\n }\r\n }\r\n return result;\r\n }\r\n hasNext() {\r\n return this.nodeStack_.length > 0;\r\n }\r\n peek() {\r\n if (this.nodeStack_.length === 0) {\r\n return null;\r\n }\r\n const node = this.nodeStack_[this.nodeStack_.length - 1];\r\n if (this.resultGenerator_) {\r\n return this.resultGenerator_(node.key, node.value);\r\n }\r\n else {\r\n return { key: node.key, value: node.value };\r\n }\r\n }\r\n}\r\n/**\r\n * Represents a node in a Left-leaning Red-Black tree.\r\n */\r\nclass LLRBNode {\r\n /**\r\n * @param key - Key associated with this node.\r\n * @param value - Value associated with this node.\r\n * @param color - Whether this node is red.\r\n * @param left - Left child.\r\n * @param right - Right child.\r\n */\r\n constructor(key, value, color, left, right) {\r\n this.key = key;\r\n this.value = value;\r\n this.color = color != null ? color : LLRBNode.RED;\r\n this.left =\r\n left != null ? left : SortedMap.EMPTY_NODE;\r\n this.right =\r\n right != null ? right : SortedMap.EMPTY_NODE;\r\n }\r\n /**\r\n * Returns a copy of the current node, optionally replacing pieces of it.\r\n *\r\n * @param key - New key for the node, or null.\r\n * @param value - New value for the node, or null.\r\n * @param color - New color for the node, or null.\r\n * @param left - New left child for the node, or null.\r\n * @param right - New right child for the node, or null.\r\n * @returns The node copy.\r\n */\r\n copy(key, value, color, left, right) {\r\n return new LLRBNode(key != null ? key : this.key, value != null ? value : this.value, color != null ? color : this.color, left != null ? left : this.left, right != null ? right : this.right);\r\n }\r\n /**\r\n * @returns The total number of nodes in the tree.\r\n */\r\n count() {\r\n return this.left.count() + 1 + this.right.count();\r\n }\r\n /**\r\n * @returns True if the tree is empty.\r\n */\r\n isEmpty() {\r\n return false;\r\n }\r\n /**\r\n * Traverses the tree in key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns The first truthy value returned by action, or the last falsey\r\n * value returned by action\r\n */\r\n inorderTraversal(action) {\r\n return (this.left.inorderTraversal(action) ||\r\n !!action(this.key, this.value) ||\r\n this.right.inorderTraversal(action));\r\n }\r\n /**\r\n * Traverses the tree in reverse key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns True if traversal was aborted.\r\n */\r\n reverseTraversal(action) {\r\n return (this.right.reverseTraversal(action) ||\r\n action(this.key, this.value) ||\r\n this.left.reverseTraversal(action));\r\n }\r\n /**\r\n * @returns The minimum node in the tree.\r\n */\r\n min_() {\r\n if (this.left.isEmpty()) {\r\n return this;\r\n }\r\n else {\r\n return this.left.min_();\r\n }\r\n }\r\n /**\r\n * @returns The maximum key in the tree.\r\n */\r\n minKey() {\r\n return this.min_().key;\r\n }\r\n /**\r\n * @returns The maximum key in the tree.\r\n */\r\n maxKey() {\r\n if (this.right.isEmpty()) {\r\n return this.key;\r\n }\r\n else {\r\n return this.right.maxKey();\r\n }\r\n }\r\n /**\r\n * @param key - Key to insert.\r\n * @param value - Value to insert.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with the key/value added.\r\n */\r\n insert(key, value, comparator) {\r\n let n = this;\r\n const cmp = comparator(key, n.key);\r\n if (cmp < 0) {\r\n n = n.copy(null, null, null, n.left.insert(key, value, comparator), null);\r\n }\r\n else if (cmp === 0) {\r\n n = n.copy(null, value, null, null, null);\r\n }\r\n else {\r\n n = n.copy(null, null, null, null, n.right.insert(key, value, comparator));\r\n }\r\n return n.fixUp_();\r\n }\r\n /**\r\n * @returns New tree, with the minimum key removed.\r\n */\r\n removeMin_() {\r\n if (this.left.isEmpty()) {\r\n return SortedMap.EMPTY_NODE;\r\n }\r\n let n = this;\r\n if (!n.left.isRed_() && !n.left.left.isRed_()) {\r\n n = n.moveRedLeft_();\r\n }\r\n n = n.copy(null, null, null, n.left.removeMin_(), null);\r\n return n.fixUp_();\r\n }\r\n /**\r\n * @param key - The key of the item to remove.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with the specified item removed.\r\n */\r\n remove(key, comparator) {\r\n let n, smallest;\r\n n = this;\r\n if (comparator(key, n.key) < 0) {\r\n if (!n.left.isEmpty() && !n.left.isRed_() && !n.left.left.isRed_()) {\r\n n = n.moveRedLeft_();\r\n }\r\n n = n.copy(null, null, null, n.left.remove(key, comparator), null);\r\n }\r\n else {\r\n if (n.left.isRed_()) {\r\n n = n.rotateRight_();\r\n }\r\n if (!n.right.isEmpty() && !n.right.isRed_() && !n.right.left.isRed_()) {\r\n n = n.moveRedRight_();\r\n }\r\n if (comparator(key, n.key) === 0) {\r\n if (n.right.isEmpty()) {\r\n return SortedMap.EMPTY_NODE;\r\n }\r\n else {\r\n smallest = n.right.min_();\r\n n = n.copy(smallest.key, smallest.value, null, null, n.right.removeMin_());\r\n }\r\n }\r\n n = n.copy(null, null, null, null, n.right.remove(key, comparator));\r\n }\r\n return n.fixUp_();\r\n }\r\n /**\r\n * @returns Whether this is a RED node.\r\n */\r\n isRed_() {\r\n return this.color;\r\n }\r\n /**\r\n * @returns New tree after performing any needed rotations.\r\n */\r\n fixUp_() {\r\n let n = this;\r\n if (n.right.isRed_() && !n.left.isRed_()) {\r\n n = n.rotateLeft_();\r\n }\r\n if (n.left.isRed_() && n.left.left.isRed_()) {\r\n n = n.rotateRight_();\r\n }\r\n if (n.left.isRed_() && n.right.isRed_()) {\r\n n = n.colorFlip_();\r\n }\r\n return n;\r\n }\r\n /**\r\n * @returns New tree, after moveRedLeft.\r\n */\r\n moveRedLeft_() {\r\n let n = this.colorFlip_();\r\n if (n.right.left.isRed_()) {\r\n n = n.copy(null, null, null, null, n.right.rotateRight_());\r\n n = n.rotateLeft_();\r\n n = n.colorFlip_();\r\n }\r\n return n;\r\n }\r\n /**\r\n * @returns New tree, after moveRedRight.\r\n */\r\n moveRedRight_() {\r\n let n = this.colorFlip_();\r\n if (n.left.left.isRed_()) {\r\n n = n.rotateRight_();\r\n n = n.colorFlip_();\r\n }\r\n return n;\r\n }\r\n /**\r\n * @returns New tree, after rotateLeft.\r\n */\r\n rotateLeft_() {\r\n const nl = this.copy(null, null, LLRBNode.RED, null, this.right.left);\r\n return this.right.copy(null, null, this.color, nl, null);\r\n }\r\n /**\r\n * @returns New tree, after rotateRight.\r\n */\r\n rotateRight_() {\r\n const nr = this.copy(null, null, LLRBNode.RED, this.left.right, null);\r\n return this.left.copy(null, null, this.color, null, nr);\r\n }\r\n /**\r\n * @returns Newt ree, after colorFlip.\r\n */\r\n colorFlip_() {\r\n const left = this.left.copy(null, null, !this.left.color, null, null);\r\n const right = this.right.copy(null, null, !this.right.color, null, null);\r\n return this.copy(null, null, !this.color, left, right);\r\n }\r\n /**\r\n * For testing.\r\n *\r\n * @returns True if all is well.\r\n */\r\n checkMaxDepth_() {\r\n const blackDepth = this.check_();\r\n return Math.pow(2.0, blackDepth) <= this.count() + 1;\r\n }\r\n check_() {\r\n if (this.isRed_() && this.left.isRed_()) {\r\n throw new Error('Red node has red child(' + this.key + ',' + this.value + ')');\r\n }\r\n if (this.right.isRed_()) {\r\n throw new Error('Right child of (' + this.key + ',' + this.value + ') is red');\r\n }\r\n const blackDepth = this.left.check_();\r\n if (blackDepth !== this.right.check_()) {\r\n throw new Error('Black depths differ');\r\n }\r\n else {\r\n return blackDepth + (this.isRed_() ? 0 : 1);\r\n }\r\n }\r\n}\r\nLLRBNode.RED = true;\r\nLLRBNode.BLACK = false;\r\n/**\r\n * Represents an empty node (a leaf node in the Red-Black Tree).\r\n */\r\nclass LLRBEmptyNode {\r\n /**\r\n * Returns a copy of the current node.\r\n *\r\n * @returns The node copy.\r\n */\r\n copy(key, value, color, left, right) {\r\n return this;\r\n }\r\n /**\r\n * Returns a copy of the tree, with the specified key/value added.\r\n *\r\n * @param key - Key to be added.\r\n * @param value - Value to be added.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with item added.\r\n */\r\n insert(key, value, comparator) {\r\n return new LLRBNode(key, value, null);\r\n }\r\n /**\r\n * Returns a copy of the tree, with the specified key removed.\r\n *\r\n * @param key - The key to remove.\r\n * @param comparator - Comparator.\r\n * @returns New tree, with item removed.\r\n */\r\n remove(key, comparator) {\r\n return this;\r\n }\r\n /**\r\n * @returns The total number of nodes in the tree.\r\n */\r\n count() {\r\n return 0;\r\n }\r\n /**\r\n * @returns True if the tree is empty.\r\n */\r\n isEmpty() {\r\n return true;\r\n }\r\n /**\r\n * Traverses the tree in key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns True if traversal was aborted.\r\n */\r\n inorderTraversal(action) {\r\n return false;\r\n }\r\n /**\r\n * Traverses the tree in reverse key order and calls the specified action function\r\n * for each node.\r\n *\r\n * @param action - Callback function to be called for each\r\n * node. If it returns true, traversal is aborted.\r\n * @returns True if traversal was aborted.\r\n */\r\n reverseTraversal(action) {\r\n return false;\r\n }\r\n minKey() {\r\n return null;\r\n }\r\n maxKey() {\r\n return null;\r\n }\r\n check_() {\r\n return 0;\r\n }\r\n /**\r\n * @returns Whether this node is red.\r\n */\r\n isRed_() {\r\n return false;\r\n }\r\n}\r\n/**\r\n * An immutable sorted map implementation, based on a Left-leaning Red-Black\r\n * tree.\r\n */\r\nclass SortedMap {\r\n /**\r\n * @param comparator_ - Key comparator.\r\n * @param root_ - Optional root node for the map.\r\n */\r\n constructor(comparator_, root_ = SortedMap.EMPTY_NODE) {\r\n this.comparator_ = comparator_;\r\n this.root_ = root_;\r\n }\r\n /**\r\n * Returns a copy of the map, with the specified key/value added or replaced.\r\n * (TODO: We should perhaps rename this method to 'put')\r\n *\r\n * @param key - Key to be added.\r\n * @param value - Value to be added.\r\n * @returns New map, with item added.\r\n */\r\n insert(key, value) {\r\n return new SortedMap(this.comparator_, this.root_\r\n .insert(key, value, this.comparator_)\r\n .copy(null, null, LLRBNode.BLACK, null, null));\r\n }\r\n /**\r\n * Returns a copy of the map, with the specified key removed.\r\n *\r\n * @param key - The key to remove.\r\n * @returns New map, with item removed.\r\n */\r\n remove(key) {\r\n return new SortedMap(this.comparator_, this.root_\r\n .remove(key, this.comparator_)\r\n .copy(null, null, LLRBNode.BLACK, null, null));\r\n }\r\n /**\r\n * Returns the value of the node with the given key, or null.\r\n *\r\n * @param key - The key to look up.\r\n * @returns The value of the node with the given key, or null if the\r\n * key doesn't exist.\r\n */\r\n get(key) {\r\n let cmp;\r\n let node = this.root_;\r\n while (!node.isEmpty()) {\r\n cmp = this.comparator_(key, node.key);\r\n if (cmp === 0) {\r\n return node.value;\r\n }\r\n else if (cmp < 0) {\r\n node = node.left;\r\n }\r\n else if (cmp > 0) {\r\n node = node.right;\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Returns the key of the item *before* the specified key, or null if key is the first item.\r\n * @param key - The key to find the predecessor of\r\n * @returns The predecessor key.\r\n */\r\n getPredecessorKey(key) {\r\n let cmp, node = this.root_, rightParent = null;\r\n while (!node.isEmpty()) {\r\n cmp = this.comparator_(key, node.key);\r\n if (cmp === 0) {\r\n if (!node.left.isEmpty()) {\r\n node = node.left;\r\n while (!node.right.isEmpty()) {\r\n node = node.right;\r\n }\r\n return node.key;\r\n }\r\n else if (rightParent) {\r\n return rightParent.key;\r\n }\r\n else {\r\n return null; // first item.\r\n }\r\n }\r\n else if (cmp < 0) {\r\n node = node.left;\r\n }\r\n else if (cmp > 0) {\r\n rightParent = node;\r\n node = node.right;\r\n }\r\n }\r\n throw new Error('Attempted to find predecessor key for a nonexistent key. What gives?');\r\n }\r\n /**\r\n * @returns True if the map is empty.\r\n */\r\n isEmpty() {\r\n return this.root_.isEmpty();\r\n }\r\n /**\r\n * @returns The total number of nodes in the map.\r\n */\r\n count() {\r\n return this.root_.count();\r\n }\r\n /**\r\n * @returns The minimum key in the map.\r\n */\r\n minKey() {\r\n return this.root_.minKey();\r\n }\r\n /**\r\n * @returns The maximum key in the map.\r\n */\r\n maxKey() {\r\n return this.root_.maxKey();\r\n }\r\n /**\r\n * Traverses the map in key order and calls the specified action function\r\n * for each key/value pair.\r\n *\r\n * @param action - Callback function to be called\r\n * for each key/value pair. If action returns true, traversal is aborted.\r\n * @returns The first truthy value returned by action, or the last falsey\r\n * value returned by action\r\n */\r\n inorderTraversal(action) {\r\n return this.root_.inorderTraversal(action);\r\n }\r\n /**\r\n * Traverses the map in reverse key order and calls the specified action function\r\n * for each key/value pair.\r\n *\r\n * @param action - Callback function to be called\r\n * for each key/value pair. If action returns true, traversal is aborted.\r\n * @returns True if the traversal was aborted.\r\n */\r\n reverseTraversal(action) {\r\n return this.root_.reverseTraversal(action);\r\n }\r\n /**\r\n * Returns an iterator over the SortedMap.\r\n * @returns The iterator.\r\n */\r\n getIterator(resultGenerator) {\r\n return new SortedMapIterator(this.root_, null, this.comparator_, false, resultGenerator);\r\n }\r\n getIteratorFrom(key, resultGenerator) {\r\n return new SortedMapIterator(this.root_, key, this.comparator_, false, resultGenerator);\r\n }\r\n getReverseIteratorFrom(key, resultGenerator) {\r\n return new SortedMapIterator(this.root_, key, this.comparator_, true, resultGenerator);\r\n }\r\n getReverseIterator(resultGenerator) {\r\n return new SortedMapIterator(this.root_, null, this.comparator_, true, resultGenerator);\r\n }\r\n}\r\n/**\r\n * Always use the same empty node, to reduce memory.\r\n */\r\nSortedMap.EMPTY_NODE = new LLRBEmptyNode();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction NAME_ONLY_COMPARATOR(left, right) {\r\n return nameCompare(left.name, right.name);\r\n}\r\nfunction NAME_COMPARATOR(left, right) {\r\n return nameCompare(left, right);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet MAX_NODE$2;\r\nfunction setMaxNode$1(val) {\r\n MAX_NODE$2 = val;\r\n}\r\nconst priorityHashText = function (priority) {\r\n if (typeof priority === 'number') {\r\n return 'number:' + doubleToIEEE754String(priority);\r\n }\r\n else {\r\n return 'string:' + priority;\r\n }\r\n};\r\n/**\r\n * Validates that a priority snapshot Node is valid.\r\n */\r\nconst validatePriorityNode = function (priorityNode) {\r\n if (priorityNode.isLeafNode()) {\r\n const val = priorityNode.val();\r\n assert(typeof val === 'string' ||\r\n typeof val === 'number' ||\r\n (typeof val === 'object' && contains(val, '.sv')), 'Priority must be a string or number.');\r\n }\r\n else {\r\n assert(priorityNode === MAX_NODE$2 || priorityNode.isEmpty(), 'priority of unexpected type.');\r\n }\r\n // Don't call getPriority() on MAX_NODE to avoid hitting assertion.\r\n assert(priorityNode === MAX_NODE$2 || priorityNode.getPriority().isEmpty(), \"Priority nodes can't have a priority of their own.\");\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet __childrenNodeConstructor;\r\n/**\r\n * LeafNode is a class for storing leaf nodes in a DataSnapshot. It\r\n * implements Node and stores the value of the node (a string,\r\n * number, or boolean) accessible via getValue().\r\n */\r\nclass LeafNode {\r\n /**\r\n * @param value_ - The value to store in this leaf node. The object type is\r\n * possible in the event of a deferred value\r\n * @param priorityNode_ - The priority of this node.\r\n */\r\n constructor(value_, priorityNode_ = LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\r\n this.value_ = value_;\r\n this.priorityNode_ = priorityNode_;\r\n this.lazyHash_ = null;\r\n assert(this.value_ !== undefined && this.value_ !== null, \"LeafNode shouldn't be created with null/undefined value.\");\r\n validatePriorityNode(this.priorityNode_);\r\n }\r\n static set __childrenNodeConstructor(val) {\r\n __childrenNodeConstructor = val;\r\n }\r\n static get __childrenNodeConstructor() {\r\n return __childrenNodeConstructor;\r\n }\r\n /** @inheritDoc */\r\n isLeafNode() {\r\n return true;\r\n }\r\n /** @inheritDoc */\r\n getPriority() {\r\n return this.priorityNode_;\r\n }\r\n /** @inheritDoc */\r\n updatePriority(newPriorityNode) {\r\n return new LeafNode(this.value_, newPriorityNode);\r\n }\r\n /** @inheritDoc */\r\n getImmediateChild(childName) {\r\n // Hack to treat priority as a regular child\r\n if (childName === '.priority') {\r\n return this.priorityNode_;\r\n }\r\n else {\r\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n }\r\n }\r\n /** @inheritDoc */\r\n getChild(path) {\r\n if (pathIsEmpty(path)) {\r\n return this;\r\n }\r\n else if (pathGetFront(path) === '.priority') {\r\n return this.priorityNode_;\r\n }\r\n else {\r\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n }\r\n }\r\n hasChild() {\r\n return false;\r\n }\r\n /** @inheritDoc */\r\n getPredecessorChildName(childName, childNode) {\r\n return null;\r\n }\r\n /** @inheritDoc */\r\n updateImmediateChild(childName, newChildNode) {\r\n if (childName === '.priority') {\r\n return this.updatePriority(newChildNode);\r\n }\r\n else if (newChildNode.isEmpty() && childName !== '.priority') {\r\n return this;\r\n }\r\n else {\r\n return LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateImmediateChild(childName, newChildNode).updatePriority(this.priorityNode_);\r\n }\r\n }\r\n /** @inheritDoc */\r\n updateChild(path, newChildNode) {\r\n const front = pathGetFront(path);\r\n if (front === null) {\r\n return newChildNode;\r\n }\r\n else if (newChildNode.isEmpty() && front !== '.priority') {\r\n return this;\r\n }\r\n else {\r\n assert(front !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');\r\n return this.updateImmediateChild(front, LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateChild(pathPopFront(path), newChildNode));\r\n }\r\n }\r\n /** @inheritDoc */\r\n isEmpty() {\r\n return false;\r\n }\r\n /** @inheritDoc */\r\n numChildren() {\r\n return 0;\r\n }\r\n /** @inheritDoc */\r\n forEachChild(index, action) {\r\n return false;\r\n }\r\n val(exportFormat) {\r\n if (exportFormat && !this.getPriority().isEmpty()) {\r\n return {\r\n '.value': this.getValue(),\r\n '.priority': this.getPriority().val()\r\n };\r\n }\r\n else {\r\n return this.getValue();\r\n }\r\n }\r\n /** @inheritDoc */\r\n hash() {\r\n if (this.lazyHash_ === null) {\r\n let toHash = '';\r\n if (!this.priorityNode_.isEmpty()) {\r\n toHash +=\r\n 'priority:' +\r\n priorityHashText(this.priorityNode_.val()) +\r\n ':';\r\n }\r\n const type = typeof this.value_;\r\n toHash += type + ':';\r\n if (type === 'number') {\r\n toHash += doubleToIEEE754String(this.value_);\r\n }\r\n else {\r\n toHash += this.value_;\r\n }\r\n this.lazyHash_ = sha1(toHash);\r\n }\r\n return this.lazyHash_;\r\n }\r\n /**\r\n * Returns the value of the leaf node.\r\n * @returns The value of the node.\r\n */\r\n getValue() {\r\n return this.value_;\r\n }\r\n compareTo(other) {\r\n if (other === LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\r\n return 1;\r\n }\r\n else if (other instanceof LeafNode.__childrenNodeConstructor) {\r\n return -1;\r\n }\r\n else {\r\n assert(other.isLeafNode(), 'Unknown node type');\r\n return this.compareToLeafNode_(other);\r\n }\r\n }\r\n /**\r\n * Comparison specifically for two leaf nodes\r\n */\r\n compareToLeafNode_(otherLeaf) {\r\n const otherLeafType = typeof otherLeaf.value_;\r\n const thisLeafType = typeof this.value_;\r\n const otherIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(otherLeafType);\r\n const thisIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(thisLeafType);\r\n assert(otherIndex >= 0, 'Unknown leaf type: ' + otherLeafType);\r\n assert(thisIndex >= 0, 'Unknown leaf type: ' + thisLeafType);\r\n if (otherIndex === thisIndex) {\r\n // Same type, compare values\r\n if (thisLeafType === 'object') {\r\n // Deferred value nodes are all equal, but we should also never get to this point...\r\n return 0;\r\n }\r\n else {\r\n // Note that this works because true > false, all others are number or string comparisons\r\n if (this.value_ < otherLeaf.value_) {\r\n return -1;\r\n }\r\n else if (this.value_ === otherLeaf.value_) {\r\n return 0;\r\n }\r\n else {\r\n return 1;\r\n }\r\n }\r\n }\r\n else {\r\n return thisIndex - otherIndex;\r\n }\r\n }\r\n withIndex() {\r\n return this;\r\n }\r\n isIndexed() {\r\n return true;\r\n }\r\n equals(other) {\r\n if (other === this) {\r\n return true;\r\n }\r\n else if (other.isLeafNode()) {\r\n const otherLeaf = other;\r\n return (this.value_ === otherLeaf.value_ &&\r\n this.priorityNode_.equals(otherLeaf.priorityNode_));\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n}\r\n/**\r\n * The sort order for comparing leaf nodes of different types. If two leaf nodes have\r\n * the same type, the comparison falls back to their value\r\n */\r\nLeafNode.VALUE_TYPE_ORDER = ['object', 'boolean', 'number', 'string'];\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet nodeFromJSON$1;\r\nlet MAX_NODE$1;\r\nfunction setNodeFromJSON(val) {\r\n nodeFromJSON$1 = val;\r\n}\r\nfunction setMaxNode(val) {\r\n MAX_NODE$1 = val;\r\n}\r\nclass PriorityIndex extends Index {\r\n compare(a, b) {\r\n const aPriority = a.node.getPriority();\r\n const bPriority = b.node.getPriority();\r\n const indexCmp = aPriority.compareTo(bPriority);\r\n if (indexCmp === 0) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n else {\r\n return indexCmp;\r\n }\r\n }\r\n isDefinedOn(node) {\r\n return !node.getPriority().isEmpty();\r\n }\r\n indexedValueChanged(oldNode, newNode) {\r\n return !oldNode.getPriority().equals(newNode.getPriority());\r\n }\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n maxPost() {\r\n return new NamedNode(MAX_NAME, new LeafNode('[PRIORITY-POST]', MAX_NODE$1));\r\n }\r\n makePost(indexValue, name) {\r\n const priorityNode = nodeFromJSON$1(indexValue);\r\n return new NamedNode(name, new LeafNode('[PRIORITY-POST]', priorityNode));\r\n }\r\n /**\r\n * @returns String representation for inclusion in a query spec\r\n */\r\n toString() {\r\n return '.priority';\r\n }\r\n}\r\nconst PRIORITY_INDEX = new PriorityIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_2 = Math.log(2);\r\nclass Base12Num {\r\n constructor(length) {\r\n const logBase2 = (num) => \r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n parseInt((Math.log(num) / LOG_2), 10);\r\n const bitMask = (bits) => parseInt(Array(bits + 1).join('1'), 2);\r\n this.count = logBase2(length + 1);\r\n this.current_ = this.count - 1;\r\n const mask = bitMask(this.count);\r\n this.bits_ = (length + 1) & mask;\r\n }\r\n nextBitIsOne() {\r\n //noinspection JSBitwiseOperatorUsage\r\n const result = !(this.bits_ & (0x1 << this.current_));\r\n this.current_--;\r\n return result;\r\n }\r\n}\r\n/**\r\n * Takes a list of child nodes and constructs a SortedSet using the given comparison\r\n * function\r\n *\r\n * Uses the algorithm described in the paper linked here:\r\n * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1458\r\n *\r\n * @param childList - Unsorted list of children\r\n * @param cmp - The comparison method to be used\r\n * @param keyFn - An optional function to extract K from a node wrapper, if K's\r\n * type is not NamedNode\r\n * @param mapSortFn - An optional override for comparator used by the generated sorted map\r\n */\r\nconst buildChildSet = function (childList, cmp, keyFn, mapSortFn) {\r\n childList.sort(cmp);\r\n const buildBalancedTree = function (low, high) {\r\n const length = high - low;\r\n let namedNode;\r\n let key;\r\n if (length === 0) {\r\n return null;\r\n }\r\n else if (length === 1) {\r\n namedNode = childList[low];\r\n key = keyFn ? keyFn(namedNode) : namedNode;\r\n return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, null, null);\r\n }\r\n else {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const middle = parseInt((length / 2), 10) + low;\r\n const left = buildBalancedTree(low, middle);\r\n const right = buildBalancedTree(middle + 1, high);\r\n namedNode = childList[middle];\r\n key = keyFn ? keyFn(namedNode) : namedNode;\r\n return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, left, right);\r\n }\r\n };\r\n const buildFrom12Array = function (base12) {\r\n let node = null;\r\n let root = null;\r\n let index = childList.length;\r\n const buildPennant = function (chunkSize, color) {\r\n const low = index - chunkSize;\r\n const high = index;\r\n index -= chunkSize;\r\n const childTree = buildBalancedTree(low + 1, high);\r\n const namedNode = childList[low];\r\n const key = keyFn ? keyFn(namedNode) : namedNode;\r\n attachPennant(new LLRBNode(key, namedNode.node, color, null, childTree));\r\n };\r\n const attachPennant = function (pennant) {\r\n if (node) {\r\n node.left = pennant;\r\n node = pennant;\r\n }\r\n else {\r\n root = pennant;\r\n node = pennant;\r\n }\r\n };\r\n for (let i = 0; i < base12.count; ++i) {\r\n const isOne = base12.nextBitIsOne();\r\n // The number of nodes taken in each slice is 2^(arr.length - (i + 1))\r\n const chunkSize = Math.pow(2, base12.count - (i + 1));\r\n if (isOne) {\r\n buildPennant(chunkSize, LLRBNode.BLACK);\r\n }\r\n else {\r\n // current == 2\r\n buildPennant(chunkSize, LLRBNode.BLACK);\r\n buildPennant(chunkSize, LLRBNode.RED);\r\n }\r\n }\r\n return root;\r\n };\r\n const base12 = new Base12Num(childList.length);\r\n const root = buildFrom12Array(base12);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return new SortedMap(mapSortFn || cmp, root);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet _defaultIndexMap;\r\nconst fallbackObject = {};\r\nclass IndexMap {\r\n constructor(indexes_, indexSet_) {\r\n this.indexes_ = indexes_;\r\n this.indexSet_ = indexSet_;\r\n }\r\n /**\r\n * The default IndexMap for nodes without a priority\r\n */\r\n static get Default() {\r\n assert(fallbackObject && PRIORITY_INDEX, 'ChildrenNode.ts has not been loaded');\r\n _defaultIndexMap =\r\n _defaultIndexMap ||\r\n new IndexMap({ '.priority': fallbackObject }, { '.priority': PRIORITY_INDEX });\r\n return _defaultIndexMap;\r\n }\r\n get(indexKey) {\r\n const sortedMap = safeGet(this.indexes_, indexKey);\r\n if (!sortedMap) {\r\n throw new Error('No index defined for ' + indexKey);\r\n }\r\n if (sortedMap instanceof SortedMap) {\r\n return sortedMap;\r\n }\r\n else {\r\n // The index exists, but it falls back to just name comparison. Return null so that the calling code uses the\r\n // regular child map\r\n return null;\r\n }\r\n }\r\n hasIndex(indexDefinition) {\r\n return contains(this.indexSet_, indexDefinition.toString());\r\n }\r\n addIndex(indexDefinition, existingChildren) {\r\n assert(indexDefinition !== KEY_INDEX, \"KeyIndex always exists and isn't meant to be added to the IndexMap.\");\r\n const childList = [];\r\n let sawIndexedValue = false;\r\n const iter = existingChildren.getIterator(NamedNode.Wrap);\r\n let next = iter.getNext();\r\n while (next) {\r\n sawIndexedValue =\r\n sawIndexedValue || indexDefinition.isDefinedOn(next.node);\r\n childList.push(next);\r\n next = iter.getNext();\r\n }\r\n let newIndex;\r\n if (sawIndexedValue) {\r\n newIndex = buildChildSet(childList, indexDefinition.getCompare());\r\n }\r\n else {\r\n newIndex = fallbackObject;\r\n }\r\n const indexName = indexDefinition.toString();\r\n const newIndexSet = Object.assign({}, this.indexSet_);\r\n newIndexSet[indexName] = indexDefinition;\r\n const newIndexes = Object.assign({}, this.indexes_);\r\n newIndexes[indexName] = newIndex;\r\n return new IndexMap(newIndexes, newIndexSet);\r\n }\r\n /**\r\n * Ensure that this node is properly tracked in any indexes that we're maintaining\r\n */\r\n addToIndexes(namedNode, existingChildren) {\r\n const newIndexes = map(this.indexes_, (indexedChildren, indexName) => {\r\n const index = safeGet(this.indexSet_, indexName);\r\n assert(index, 'Missing index implementation for ' + indexName);\r\n if (indexedChildren === fallbackObject) {\r\n // Check to see if we need to index everything\r\n if (index.isDefinedOn(namedNode.node)) {\r\n // We need to build this index\r\n const childList = [];\r\n const iter = existingChildren.getIterator(NamedNode.Wrap);\r\n let next = iter.getNext();\r\n while (next) {\r\n if (next.name !== namedNode.name) {\r\n childList.push(next);\r\n }\r\n next = iter.getNext();\r\n }\r\n childList.push(namedNode);\r\n return buildChildSet(childList, index.getCompare());\r\n }\r\n else {\r\n // No change, this remains a fallback\r\n return fallbackObject;\r\n }\r\n }\r\n else {\r\n const existingSnap = existingChildren.get(namedNode.name);\r\n let newChildren = indexedChildren;\r\n if (existingSnap) {\r\n newChildren = newChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n }\r\n return newChildren.insert(namedNode, namedNode.node);\r\n }\r\n });\r\n return new IndexMap(newIndexes, this.indexSet_);\r\n }\r\n /**\r\n * Create a new IndexMap instance with the given value removed\r\n */\r\n removeFromIndexes(namedNode, existingChildren) {\r\n const newIndexes = map(this.indexes_, (indexedChildren) => {\r\n if (indexedChildren === fallbackObject) {\r\n // This is the fallback. Just return it, nothing to do in this case\r\n return indexedChildren;\r\n }\r\n else {\r\n const existingSnap = existingChildren.get(namedNode.name);\r\n if (existingSnap) {\r\n return indexedChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n }\r\n else {\r\n // No record of this child\r\n return indexedChildren;\r\n }\r\n }\r\n });\r\n return new IndexMap(newIndexes, this.indexSet_);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// TODO: For memory savings, don't store priorityNode_ if it's empty.\r\nlet EMPTY_NODE;\r\n/**\r\n * ChildrenNode is a class for storing internal nodes in a DataSnapshot\r\n * (i.e. nodes with children). It implements Node and stores the\r\n * list of children in the children property, sorted by child name.\r\n */\r\nclass ChildrenNode {\r\n /**\r\n * @param children_ - List of children of this node..\r\n * @param priorityNode_ - The priority of this node (as a snapshot node).\r\n */\r\n constructor(children_, priorityNode_, indexMap_) {\r\n this.children_ = children_;\r\n this.priorityNode_ = priorityNode_;\r\n this.indexMap_ = indexMap_;\r\n this.lazyHash_ = null;\r\n /**\r\n * Note: The only reason we allow null priority is for EMPTY_NODE, since we can't use\r\n * EMPTY_NODE as the priority of EMPTY_NODE. We might want to consider making EMPTY_NODE its own\r\n * class instead of an empty ChildrenNode.\r\n */\r\n if (this.priorityNode_) {\r\n validatePriorityNode(this.priorityNode_);\r\n }\r\n if (this.children_.isEmpty()) {\r\n assert(!this.priorityNode_ || this.priorityNode_.isEmpty(), 'An empty node cannot have a priority');\r\n }\r\n }\r\n static get EMPTY_NODE() {\r\n return (EMPTY_NODE ||\r\n (EMPTY_NODE = new ChildrenNode(new SortedMap(NAME_COMPARATOR), null, IndexMap.Default)));\r\n }\r\n /** @inheritDoc */\r\n isLeafNode() {\r\n return false;\r\n }\r\n /** @inheritDoc */\r\n getPriority() {\r\n return this.priorityNode_ || EMPTY_NODE;\r\n }\r\n /** @inheritDoc */\r\n updatePriority(newPriorityNode) {\r\n if (this.children_.isEmpty()) {\r\n // Don't allow priorities on empty nodes\r\n return this;\r\n }\r\n else {\r\n return new ChildrenNode(this.children_, newPriorityNode, this.indexMap_);\r\n }\r\n }\r\n /** @inheritDoc */\r\n getImmediateChild(childName) {\r\n // Hack to treat priority as a regular child\r\n if (childName === '.priority') {\r\n return this.getPriority();\r\n }\r\n else {\r\n const child = this.children_.get(childName);\r\n return child === null ? EMPTY_NODE : child;\r\n }\r\n }\r\n /** @inheritDoc */\r\n getChild(path) {\r\n const front = pathGetFront(path);\r\n if (front === null) {\r\n return this;\r\n }\r\n return this.getImmediateChild(front).getChild(pathPopFront(path));\r\n }\r\n /** @inheritDoc */\r\n hasChild(childName) {\r\n return this.children_.get(childName) !== null;\r\n }\r\n /** @inheritDoc */\r\n updateImmediateChild(childName, newChildNode) {\r\n assert(newChildNode, 'We should always be passing snapshot nodes');\r\n if (childName === '.priority') {\r\n return this.updatePriority(newChildNode);\r\n }\r\n else {\r\n const namedNode = new NamedNode(childName, newChildNode);\r\n let newChildren, newIndexMap;\r\n if (newChildNode.isEmpty()) {\r\n newChildren = this.children_.remove(childName);\r\n newIndexMap = this.indexMap_.removeFromIndexes(namedNode, this.children_);\r\n }\r\n else {\r\n newChildren = this.children_.insert(childName, newChildNode);\r\n newIndexMap = this.indexMap_.addToIndexes(namedNode, this.children_);\r\n }\r\n const newPriority = newChildren.isEmpty()\r\n ? EMPTY_NODE\r\n : this.priorityNode_;\r\n return new ChildrenNode(newChildren, newPriority, newIndexMap);\r\n }\r\n }\r\n /** @inheritDoc */\r\n updateChild(path, newChildNode) {\r\n const front = pathGetFront(path);\r\n if (front === null) {\r\n return newChildNode;\r\n }\r\n else {\r\n assert(pathGetFront(path) !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');\r\n const newImmediateChild = this.getImmediateChild(front).updateChild(pathPopFront(path), newChildNode);\r\n return this.updateImmediateChild(front, newImmediateChild);\r\n }\r\n }\r\n /** @inheritDoc */\r\n isEmpty() {\r\n return this.children_.isEmpty();\r\n }\r\n /** @inheritDoc */\r\n numChildren() {\r\n return this.children_.count();\r\n }\r\n /** @inheritDoc */\r\n val(exportFormat) {\r\n if (this.isEmpty()) {\r\n return null;\r\n }\r\n const obj = {};\r\n let numKeys = 0, maxKey = 0, allIntegerKeys = true;\r\n this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n obj[key] = childNode.val(exportFormat);\r\n numKeys++;\r\n if (allIntegerKeys && ChildrenNode.INTEGER_REGEXP_.test(key)) {\r\n maxKey = Math.max(maxKey, Number(key));\r\n }\r\n else {\r\n allIntegerKeys = false;\r\n }\r\n });\r\n if (!exportFormat && allIntegerKeys && maxKey < 2 * numKeys) {\r\n // convert to array.\r\n const array = [];\r\n // eslint-disable-next-line guard-for-in\r\n for (const key in obj) {\r\n array[key] = obj[key];\r\n }\r\n return array;\r\n }\r\n else {\r\n if (exportFormat && !this.getPriority().isEmpty()) {\r\n obj['.priority'] = this.getPriority().val();\r\n }\r\n return obj;\r\n }\r\n }\r\n /** @inheritDoc */\r\n hash() {\r\n if (this.lazyHash_ === null) {\r\n let toHash = '';\r\n if (!this.getPriority().isEmpty()) {\r\n toHash +=\r\n 'priority:' +\r\n priorityHashText(this.getPriority().val()) +\r\n ':';\r\n }\r\n this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n const childHash = childNode.hash();\r\n if (childHash !== '') {\r\n toHash += ':' + key + ':' + childHash;\r\n }\r\n });\r\n this.lazyHash_ = toHash === '' ? '' : sha1(toHash);\r\n }\r\n return this.lazyHash_;\r\n }\r\n /** @inheritDoc */\r\n getPredecessorChildName(childName, childNode, index) {\r\n const idx = this.resolveIndex_(index);\r\n if (idx) {\r\n const predecessor = idx.getPredecessorKey(new NamedNode(childName, childNode));\r\n return predecessor ? predecessor.name : null;\r\n }\r\n else {\r\n return this.children_.getPredecessorKey(childName);\r\n }\r\n }\r\n getFirstChildName(indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n const minKey = idx.minKey();\r\n return minKey && minKey.name;\r\n }\r\n else {\r\n return this.children_.minKey();\r\n }\r\n }\r\n getFirstChild(indexDefinition) {\r\n const minKey = this.getFirstChildName(indexDefinition);\r\n if (minKey) {\r\n return new NamedNode(minKey, this.children_.get(minKey));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Given an index, return the key name of the largest value we have, according to that index\r\n */\r\n getLastChildName(indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n const maxKey = idx.maxKey();\r\n return maxKey && maxKey.name;\r\n }\r\n else {\r\n return this.children_.maxKey();\r\n }\r\n }\r\n getLastChild(indexDefinition) {\r\n const maxKey = this.getLastChildName(indexDefinition);\r\n if (maxKey) {\r\n return new NamedNode(maxKey, this.children_.get(maxKey));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n forEachChild(index, action) {\r\n const idx = this.resolveIndex_(index);\r\n if (idx) {\r\n return idx.inorderTraversal(wrappedNode => {\r\n return action(wrappedNode.name, wrappedNode.node);\r\n });\r\n }\r\n else {\r\n return this.children_.inorderTraversal(action);\r\n }\r\n }\r\n getIterator(indexDefinition) {\r\n return this.getIteratorFrom(indexDefinition.minPost(), indexDefinition);\r\n }\r\n getIteratorFrom(startPost, indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n return idx.getIteratorFrom(startPost, key => key);\r\n }\r\n else {\r\n const iterator = this.children_.getIteratorFrom(startPost.name, NamedNode.Wrap);\r\n let next = iterator.peek();\r\n while (next != null && indexDefinition.compare(next, startPost) < 0) {\r\n iterator.getNext();\r\n next = iterator.peek();\r\n }\r\n return iterator;\r\n }\r\n }\r\n getReverseIterator(indexDefinition) {\r\n return this.getReverseIteratorFrom(indexDefinition.maxPost(), indexDefinition);\r\n }\r\n getReverseIteratorFrom(endPost, indexDefinition) {\r\n const idx = this.resolveIndex_(indexDefinition);\r\n if (idx) {\r\n return idx.getReverseIteratorFrom(endPost, key => {\r\n return key;\r\n });\r\n }\r\n else {\r\n const iterator = this.children_.getReverseIteratorFrom(endPost.name, NamedNode.Wrap);\r\n let next = iterator.peek();\r\n while (next != null && indexDefinition.compare(next, endPost) > 0) {\r\n iterator.getNext();\r\n next = iterator.peek();\r\n }\r\n return iterator;\r\n }\r\n }\r\n compareTo(other) {\r\n if (this.isEmpty()) {\r\n if (other.isEmpty()) {\r\n return 0;\r\n }\r\n else {\r\n return -1;\r\n }\r\n }\r\n else if (other.isLeafNode() || other.isEmpty()) {\r\n return 1;\r\n }\r\n else if (other === MAX_NODE) {\r\n return -1;\r\n }\r\n else {\r\n // Must be another node with children.\r\n return 0;\r\n }\r\n }\r\n withIndex(indexDefinition) {\r\n if (indexDefinition === KEY_INDEX ||\r\n this.indexMap_.hasIndex(indexDefinition)) {\r\n return this;\r\n }\r\n else {\r\n const newIndexMap = this.indexMap_.addIndex(indexDefinition, this.children_);\r\n return new ChildrenNode(this.children_, this.priorityNode_, newIndexMap);\r\n }\r\n }\r\n isIndexed(index) {\r\n return index === KEY_INDEX || this.indexMap_.hasIndex(index);\r\n }\r\n equals(other) {\r\n if (other === this) {\r\n return true;\r\n }\r\n else if (other.isLeafNode()) {\r\n return false;\r\n }\r\n else {\r\n const otherChildrenNode = other;\r\n if (!this.getPriority().equals(otherChildrenNode.getPriority())) {\r\n return false;\r\n }\r\n else if (this.children_.count() === otherChildrenNode.children_.count()) {\r\n const thisIter = this.getIterator(PRIORITY_INDEX);\r\n const otherIter = otherChildrenNode.getIterator(PRIORITY_INDEX);\r\n let thisCurrent = thisIter.getNext();\r\n let otherCurrent = otherIter.getNext();\r\n while (thisCurrent && otherCurrent) {\r\n if (thisCurrent.name !== otherCurrent.name ||\r\n !thisCurrent.node.equals(otherCurrent.node)) {\r\n return false;\r\n }\r\n thisCurrent = thisIter.getNext();\r\n otherCurrent = otherIter.getNext();\r\n }\r\n return thisCurrent === null && otherCurrent === null;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n }\r\n /**\r\n * Returns a SortedMap ordered by index, or null if the default (by-key) ordering can be used\r\n * instead.\r\n *\r\n */\r\n resolveIndex_(indexDefinition) {\r\n if (indexDefinition === KEY_INDEX) {\r\n return null;\r\n }\r\n else {\r\n return this.indexMap_.get(indexDefinition.toString());\r\n }\r\n }\r\n}\r\nChildrenNode.INTEGER_REGEXP_ = /^(0|[1-9]\\d*)$/;\r\nclass MaxNode extends ChildrenNode {\r\n constructor() {\r\n super(new SortedMap(NAME_COMPARATOR), ChildrenNode.EMPTY_NODE, IndexMap.Default);\r\n }\r\n compareTo(other) {\r\n if (other === this) {\r\n return 0;\r\n }\r\n else {\r\n return 1;\r\n }\r\n }\r\n equals(other) {\r\n // Not that we every compare it, but MAX_NODE is only ever equal to itself\r\n return other === this;\r\n }\r\n getPriority() {\r\n return this;\r\n }\r\n getImmediateChild(childName) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n isEmpty() {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Marker that will sort higher than any other snapshot.\r\n */\r\nconst MAX_NODE = new MaxNode();\r\nObject.defineProperties(NamedNode, {\r\n MIN: {\r\n value: new NamedNode(MIN_NAME, ChildrenNode.EMPTY_NODE)\r\n },\r\n MAX: {\r\n value: new NamedNode(MAX_NAME, MAX_NODE)\r\n }\r\n});\r\n/**\r\n * Reference Extensions\r\n */\r\nKeyIndex.__EMPTY_NODE = ChildrenNode.EMPTY_NODE;\r\nLeafNode.__childrenNodeConstructor = ChildrenNode;\r\nsetMaxNode$1(MAX_NODE);\r\nsetMaxNode(MAX_NODE);\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst USE_HINZE = true;\r\n/**\r\n * Constructs a snapshot node representing the passed JSON and returns it.\r\n * @param json - JSON to create a node for.\r\n * @param priority - Optional priority to use. This will be ignored if the\r\n * passed JSON contains a .priority property.\r\n */\r\nfunction nodeFromJSON(json, priority = null) {\r\n if (json === null) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n if (typeof json === 'object' && '.priority' in json) {\r\n priority = json['.priority'];\r\n }\r\n assert(priority === null ||\r\n typeof priority === 'string' ||\r\n typeof priority === 'number' ||\r\n (typeof priority === 'object' && '.sv' in priority), 'Invalid priority type found: ' + typeof priority);\r\n if (typeof json === 'object' && '.value' in json && json['.value'] !== null) {\r\n json = json['.value'];\r\n }\r\n // Valid leaf nodes include non-objects or server-value wrapper objects\r\n if (typeof json !== 'object' || '.sv' in json) {\r\n const jsonLeaf = json;\r\n return new LeafNode(jsonLeaf, nodeFromJSON(priority));\r\n }\r\n if (!(json instanceof Array) && USE_HINZE) {\r\n const children = [];\r\n let childrenHavePriority = false;\r\n const hinzeJsonObj = json;\r\n each(hinzeJsonObj, (key, child) => {\r\n if (key.substring(0, 1) !== '.') {\r\n // Ignore metadata nodes\r\n const childNode = nodeFromJSON(child);\r\n if (!childNode.isEmpty()) {\r\n childrenHavePriority =\r\n childrenHavePriority || !childNode.getPriority().isEmpty();\r\n children.push(new NamedNode(key, childNode));\r\n }\r\n }\r\n });\r\n if (children.length === 0) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n const childSet = buildChildSet(children, NAME_ONLY_COMPARATOR, namedNode => namedNode.name, NAME_COMPARATOR);\r\n if (childrenHavePriority) {\r\n const sortedChildSet = buildChildSet(children, PRIORITY_INDEX.getCompare());\r\n return new ChildrenNode(childSet, nodeFromJSON(priority), new IndexMap({ '.priority': sortedChildSet }, { '.priority': PRIORITY_INDEX }));\r\n }\r\n else {\r\n return new ChildrenNode(childSet, nodeFromJSON(priority), IndexMap.Default);\r\n }\r\n }\r\n else {\r\n let node = ChildrenNode.EMPTY_NODE;\r\n each(json, (key, childData) => {\r\n if (contains(json, key)) {\r\n if (key.substring(0, 1) !== '.') {\r\n // ignore metadata nodes.\r\n const childNode = nodeFromJSON(childData);\r\n if (childNode.isLeafNode() || !childNode.isEmpty()) {\r\n node = node.updateImmediateChild(key, childNode);\r\n }\r\n }\r\n }\r\n });\r\n return node.updatePriority(nodeFromJSON(priority));\r\n }\r\n}\r\nsetNodeFromJSON(nodeFromJSON);\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PathIndex extends Index {\r\n constructor(indexPath_) {\r\n super();\r\n this.indexPath_ = indexPath_;\r\n assert(!pathIsEmpty(indexPath_) && pathGetFront(indexPath_) !== '.priority', \"Can't create PathIndex with empty path or .priority key\");\r\n }\r\n extractChild(snap) {\r\n return snap.getChild(this.indexPath_);\r\n }\r\n isDefinedOn(node) {\r\n return !node.getChild(this.indexPath_).isEmpty();\r\n }\r\n compare(a, b) {\r\n const aChild = this.extractChild(a.node);\r\n const bChild = this.extractChild(b.node);\r\n const indexCmp = aChild.compareTo(bChild);\r\n if (indexCmp === 0) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n else {\r\n return indexCmp;\r\n }\r\n }\r\n makePost(indexValue, name) {\r\n const valueNode = nodeFromJSON(indexValue);\r\n const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, valueNode);\r\n return new NamedNode(name, node);\r\n }\r\n maxPost() {\r\n const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, MAX_NODE);\r\n return new NamedNode(MAX_NAME, node);\r\n }\r\n toString() {\r\n return pathSlice(this.indexPath_, 0).join('/');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ValueIndex extends Index {\r\n compare(a, b) {\r\n const indexCmp = a.node.compareTo(b.node);\r\n if (indexCmp === 0) {\r\n return nameCompare(a.name, b.name);\r\n }\r\n else {\r\n return indexCmp;\r\n }\r\n }\r\n isDefinedOn(node) {\r\n return true;\r\n }\r\n indexedValueChanged(oldNode, newNode) {\r\n return !oldNode.equals(newNode);\r\n }\r\n minPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MIN;\r\n }\r\n maxPost() {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return NamedNode.MAX;\r\n }\r\n makePost(indexValue, name) {\r\n const valueNode = nodeFromJSON(indexValue);\r\n return new NamedNode(name, valueNode);\r\n }\r\n /**\r\n * @returns String representation for inclusion in a query spec\r\n */\r\n toString() {\r\n return '.value';\r\n }\r\n}\r\nconst VALUE_INDEX = new ValueIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction changeValue(snapshotNode) {\r\n return { type: \"value\" /* ChangeType.VALUE */, snapshotNode };\r\n}\r\nfunction changeChildAdded(childName, snapshotNode) {\r\n return { type: \"child_added\" /* ChangeType.CHILD_ADDED */, snapshotNode, childName };\r\n}\r\nfunction changeChildRemoved(childName, snapshotNode) {\r\n return { type: \"child_removed\" /* ChangeType.CHILD_REMOVED */, snapshotNode, childName };\r\n}\r\nfunction changeChildChanged(childName, snapshotNode, oldSnap) {\r\n return {\r\n type: \"child_changed\" /* ChangeType.CHILD_CHANGED */,\r\n snapshotNode,\r\n childName,\r\n oldSnap\r\n };\r\n}\r\nfunction changeChildMoved(childName, snapshotNode) {\r\n return { type: \"child_moved\" /* ChangeType.CHILD_MOVED */, snapshotNode, childName };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Doesn't really filter nodes but applies an index to the node and keeps track of any changes\r\n */\r\nclass IndexedFilter {\r\n constructor(index_) {\r\n this.index_ = index_;\r\n }\r\n updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n assert(snap.isIndexed(this.index_), 'A node must be indexed if only a child is updated');\r\n const oldChild = snap.getImmediateChild(key);\r\n // Check if anything actually changed.\r\n if (oldChild.getChild(affectedPath).equals(newChild.getChild(affectedPath))) {\r\n // There's an edge case where a child can enter or leave the view because affectedPath was set to null.\r\n // In this case, affectedPath will appear null in both the old and new snapshots. So we need\r\n // to avoid treating these cases as \"nothing changed.\"\r\n if (oldChild.isEmpty() === newChild.isEmpty()) {\r\n // Nothing changed.\r\n // This assert should be valid, but it's expensive (can dominate perf testing) so don't actually do it.\r\n //assert(oldChild.equals(newChild), 'Old and new snapshots should be equal.');\r\n return snap;\r\n }\r\n }\r\n if (optChangeAccumulator != null) {\r\n if (newChild.isEmpty()) {\r\n if (snap.hasChild(key)) {\r\n optChangeAccumulator.trackChildChange(changeChildRemoved(key, oldChild));\r\n }\r\n else {\r\n assert(snap.isLeafNode(), 'A child remove without an old child only makes sense on a leaf node');\r\n }\r\n }\r\n else if (oldChild.isEmpty()) {\r\n optChangeAccumulator.trackChildChange(changeChildAdded(key, newChild));\r\n }\r\n else {\r\n optChangeAccumulator.trackChildChange(changeChildChanged(key, newChild, oldChild));\r\n }\r\n }\r\n if (snap.isLeafNode() && newChild.isEmpty()) {\r\n return snap;\r\n }\r\n else {\r\n // Make sure the node is indexed\r\n return snap.updateImmediateChild(key, newChild).withIndex(this.index_);\r\n }\r\n }\r\n updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n if (optChangeAccumulator != null) {\r\n if (!oldSnap.isLeafNode()) {\r\n oldSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n if (!newSnap.hasChild(key)) {\r\n optChangeAccumulator.trackChildChange(changeChildRemoved(key, childNode));\r\n }\r\n });\r\n }\r\n if (!newSnap.isLeafNode()) {\r\n newSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n if (oldSnap.hasChild(key)) {\r\n const oldChild = oldSnap.getImmediateChild(key);\r\n if (!oldChild.equals(childNode)) {\r\n optChangeAccumulator.trackChildChange(changeChildChanged(key, childNode, oldChild));\r\n }\r\n }\r\n else {\r\n optChangeAccumulator.trackChildChange(changeChildAdded(key, childNode));\r\n }\r\n });\r\n }\r\n }\r\n return newSnap.withIndex(this.index_);\r\n }\r\n updatePriority(oldSnap, newPriority) {\r\n if (oldSnap.isEmpty()) {\r\n return ChildrenNode.EMPTY_NODE;\r\n }\r\n else {\r\n return oldSnap.updatePriority(newPriority);\r\n }\r\n }\r\n filtersNodes() {\r\n return false;\r\n }\r\n getIndexedFilter() {\r\n return this;\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Filters nodes by range and uses an IndexFilter to track any changes after filtering the node\r\n */\r\nclass RangedFilter {\r\n constructor(params) {\r\n this.indexedFilter_ = new IndexedFilter(params.getIndex());\r\n this.index_ = params.getIndex();\r\n this.startPost_ = RangedFilter.getStartPost_(params);\r\n this.endPost_ = RangedFilter.getEndPost_(params);\r\n this.startIsInclusive_ = !params.startAfterSet_;\r\n this.endIsInclusive_ = !params.endBeforeSet_;\r\n }\r\n getStartPost() {\r\n return this.startPost_;\r\n }\r\n getEndPost() {\r\n return this.endPost_;\r\n }\r\n matches(node) {\r\n const isWithinStart = this.startIsInclusive_\r\n ? this.index_.compare(this.getStartPost(), node) <= 0\r\n : this.index_.compare(this.getStartPost(), node) < 0;\r\n const isWithinEnd = this.endIsInclusive_\r\n ? this.index_.compare(node, this.getEndPost()) <= 0\r\n : this.index_.compare(node, this.getEndPost()) < 0;\r\n return isWithinStart && isWithinEnd;\r\n }\r\n updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n if (!this.matches(new NamedNode(key, newChild))) {\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n return this.indexedFilter_.updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n }\r\n updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n if (newSnap.isLeafNode()) {\r\n // Make sure we have a children node with the correct index, not a leaf node;\r\n newSnap = ChildrenNode.EMPTY_NODE;\r\n }\r\n let filtered = newSnap.withIndex(this.index_);\r\n // Don't support priorities on queries\r\n filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n const self = this;\r\n newSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n if (!self.matches(new NamedNode(key, childNode))) {\r\n filtered = filtered.updateImmediateChild(key, ChildrenNode.EMPTY_NODE);\r\n }\r\n });\r\n return this.indexedFilter_.updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n }\r\n updatePriority(oldSnap, newPriority) {\r\n // Don't support priorities on queries\r\n return oldSnap;\r\n }\r\n filtersNodes() {\r\n return true;\r\n }\r\n getIndexedFilter() {\r\n return this.indexedFilter_;\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n static getStartPost_(params) {\r\n if (params.hasStart()) {\r\n const startName = params.getIndexStartName();\r\n return params.getIndex().makePost(params.getIndexStartValue(), startName);\r\n }\r\n else {\r\n return params.getIndex().minPost();\r\n }\r\n }\r\n static getEndPost_(params) {\r\n if (params.hasEnd()) {\r\n const endName = params.getIndexEndName();\r\n return params.getIndex().makePost(params.getIndexEndValue(), endName);\r\n }\r\n else {\r\n return params.getIndex().maxPost();\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Applies a limit and a range to a node and uses RangedFilter to do the heavy lifting where possible\r\n */\r\nclass LimitedFilter {\r\n constructor(params) {\r\n this.withinDirectionalStart = (node) => this.reverse_ ? this.withinEndPost(node) : this.withinStartPost(node);\r\n this.withinDirectionalEnd = (node) => this.reverse_ ? this.withinStartPost(node) : this.withinEndPost(node);\r\n this.withinStartPost = (node) => {\r\n const compareRes = this.index_.compare(this.rangedFilter_.getStartPost(), node);\r\n return this.startIsInclusive_ ? compareRes <= 0 : compareRes < 0;\r\n };\r\n this.withinEndPost = (node) => {\r\n const compareRes = this.index_.compare(node, this.rangedFilter_.getEndPost());\r\n return this.endIsInclusive_ ? compareRes <= 0 : compareRes < 0;\r\n };\r\n this.rangedFilter_ = new RangedFilter(params);\r\n this.index_ = params.getIndex();\r\n this.limit_ = params.getLimit();\r\n this.reverse_ = !params.isViewFromLeft();\r\n this.startIsInclusive_ = !params.startAfterSet_;\r\n this.endIsInclusive_ = !params.endBeforeSet_;\r\n }\r\n updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n if (!this.rangedFilter_.matches(new NamedNode(key, newChild))) {\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n if (snap.getImmediateChild(key).equals(newChild)) {\r\n // No change\r\n return snap;\r\n }\r\n else if (snap.numChildren() < this.limit_) {\r\n return this.rangedFilter_\r\n .getIndexedFilter()\r\n .updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n }\r\n else {\r\n return this.fullLimitUpdateChild_(snap, key, newChild, source, optChangeAccumulator);\r\n }\r\n }\r\n updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n let filtered;\r\n if (newSnap.isLeafNode() || newSnap.isEmpty()) {\r\n // Make sure we have a children node with the correct index, not a leaf node;\r\n filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n }\r\n else {\r\n if (this.limit_ * 2 < newSnap.numChildren() &&\r\n newSnap.isIndexed(this.index_)) {\r\n // Easier to build up a snapshot, since what we're given has more than twice the elements we want\r\n filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n // anchor to the startPost, endPost, or last element as appropriate\r\n let iterator;\r\n if (this.reverse_) {\r\n iterator = newSnap.getReverseIteratorFrom(this.rangedFilter_.getEndPost(), this.index_);\r\n }\r\n else {\r\n iterator = newSnap.getIteratorFrom(this.rangedFilter_.getStartPost(), this.index_);\r\n }\r\n let count = 0;\r\n while (iterator.hasNext() && count < this.limit_) {\r\n const next = iterator.getNext();\r\n if (!this.withinDirectionalStart(next)) {\r\n // if we have not reached the start, skip to the next element\r\n continue;\r\n }\r\n else if (!this.withinDirectionalEnd(next)) {\r\n // if we have reached the end, stop adding elements\r\n break;\r\n }\r\n else {\r\n filtered = filtered.updateImmediateChild(next.name, next.node);\r\n count++;\r\n }\r\n }\r\n }\r\n else {\r\n // The snap contains less than twice the limit. Faster to delete from the snap than build up a new one\r\n filtered = newSnap.withIndex(this.index_);\r\n // Don't support priorities on queries\r\n filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n let iterator;\r\n if (this.reverse_) {\r\n iterator = filtered.getReverseIterator(this.index_);\r\n }\r\n else {\r\n iterator = filtered.getIterator(this.index_);\r\n }\r\n let count = 0;\r\n while (iterator.hasNext()) {\r\n const next = iterator.getNext();\r\n const inRange = count < this.limit_ &&\r\n this.withinDirectionalStart(next) &&\r\n this.withinDirectionalEnd(next);\r\n if (inRange) {\r\n count++;\r\n }\r\n else {\r\n filtered = filtered.updateImmediateChild(next.name, ChildrenNode.EMPTY_NODE);\r\n }\r\n }\r\n }\r\n }\r\n return this.rangedFilter_\r\n .getIndexedFilter()\r\n .updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n }\r\n updatePriority(oldSnap, newPriority) {\r\n // Don't support priorities on queries\r\n return oldSnap;\r\n }\r\n filtersNodes() {\r\n return true;\r\n }\r\n getIndexedFilter() {\r\n return this.rangedFilter_.getIndexedFilter();\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n fullLimitUpdateChild_(snap, childKey, childSnap, source, changeAccumulator) {\r\n // TODO: rename all cache stuff etc to general snap terminology\r\n let cmp;\r\n if (this.reverse_) {\r\n const indexCmp = this.index_.getCompare();\r\n cmp = (a, b) => indexCmp(b, a);\r\n }\r\n else {\r\n cmp = this.index_.getCompare();\r\n }\r\n const oldEventCache = snap;\r\n assert(oldEventCache.numChildren() === this.limit_, '');\r\n const newChildNamedNode = new NamedNode(childKey, childSnap);\r\n const windowBoundary = this.reverse_\r\n ? oldEventCache.getFirstChild(this.index_)\r\n : oldEventCache.getLastChild(this.index_);\r\n const inRange = this.rangedFilter_.matches(newChildNamedNode);\r\n if (oldEventCache.hasChild(childKey)) {\r\n const oldChildSnap = oldEventCache.getImmediateChild(childKey);\r\n let nextChild = source.getChildAfterChild(this.index_, windowBoundary, this.reverse_);\r\n while (nextChild != null &&\r\n (nextChild.name === childKey || oldEventCache.hasChild(nextChild.name))) {\r\n // There is a weird edge case where a node is updated as part of a merge in the write tree, but hasn't\r\n // been applied to the limited filter yet. Ignore this next child which will be updated later in\r\n // the limited filter...\r\n nextChild = source.getChildAfterChild(this.index_, nextChild, this.reverse_);\r\n }\r\n const compareNext = nextChild == null ? 1 : cmp(nextChild, newChildNamedNode);\r\n const remainsInWindow = inRange && !childSnap.isEmpty() && compareNext >= 0;\r\n if (remainsInWindow) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildChanged(childKey, childSnap, oldChildSnap));\r\n }\r\n return oldEventCache.updateImmediateChild(childKey, childSnap);\r\n }\r\n else {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildRemoved(childKey, oldChildSnap));\r\n }\r\n const newEventCache = oldEventCache.updateImmediateChild(childKey, ChildrenNode.EMPTY_NODE);\r\n const nextChildInRange = nextChild != null && this.rangedFilter_.matches(nextChild);\r\n if (nextChildInRange) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildAdded(nextChild.name, nextChild.node));\r\n }\r\n return newEventCache.updateImmediateChild(nextChild.name, nextChild.node);\r\n }\r\n else {\r\n return newEventCache;\r\n }\r\n }\r\n }\r\n else if (childSnap.isEmpty()) {\r\n // we're deleting a node, but it was not in the window, so ignore it\r\n return snap;\r\n }\r\n else if (inRange) {\r\n if (cmp(windowBoundary, newChildNamedNode) >= 0) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(changeChildRemoved(windowBoundary.name, windowBoundary.node));\r\n changeAccumulator.trackChildChange(changeChildAdded(childKey, childSnap));\r\n }\r\n return oldEventCache\r\n .updateImmediateChild(childKey, childSnap)\r\n .updateImmediateChild(windowBoundary.name, ChildrenNode.EMPTY_NODE);\r\n }\r\n else {\r\n return snap;\r\n }\r\n }\r\n else {\r\n return snap;\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class is an immutable-from-the-public-api struct containing a set of query parameters defining a\r\n * range to be returned for a particular location. It is assumed that validation of parameters is done at the\r\n * user-facing API level, so it is not done here.\r\n *\r\n * @internal\r\n */\r\nclass QueryParams {\r\n constructor() {\r\n this.limitSet_ = false;\r\n this.startSet_ = false;\r\n this.startNameSet_ = false;\r\n this.startAfterSet_ = false; // can only be true if startSet_ is true\r\n this.endSet_ = false;\r\n this.endNameSet_ = false;\r\n this.endBeforeSet_ = false; // can only be true if endSet_ is true\r\n this.limit_ = 0;\r\n this.viewFrom_ = '';\r\n this.indexStartValue_ = null;\r\n this.indexStartName_ = '';\r\n this.indexEndValue_ = null;\r\n this.indexEndName_ = '';\r\n this.index_ = PRIORITY_INDEX;\r\n }\r\n hasStart() {\r\n return this.startSet_;\r\n }\r\n /**\r\n * @returns True if it would return from left.\r\n */\r\n isViewFromLeft() {\r\n if (this.viewFrom_ === '') {\r\n // limit(), rather than limitToFirst or limitToLast was called.\r\n // This means that only one of startSet_ and endSet_ is true. Use them\r\n // to calculate which side of the view to anchor to. If neither is set,\r\n // anchor to the end.\r\n return this.startSet_;\r\n }\r\n else {\r\n return this.viewFrom_ === \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\r\n }\r\n }\r\n /**\r\n * Only valid to call if hasStart() returns true\r\n */\r\n getIndexStartValue() {\r\n assert(this.startSet_, 'Only valid if start has been set');\r\n return this.indexStartValue_;\r\n }\r\n /**\r\n * Only valid to call if hasStart() returns true.\r\n * Returns the starting key name for the range defined by these query parameters\r\n */\r\n getIndexStartName() {\r\n assert(this.startSet_, 'Only valid if start has been set');\r\n if (this.startNameSet_) {\r\n return this.indexStartName_;\r\n }\r\n else {\r\n return MIN_NAME;\r\n }\r\n }\r\n hasEnd() {\r\n return this.endSet_;\r\n }\r\n /**\r\n * Only valid to call if hasEnd() returns true.\r\n */\r\n getIndexEndValue() {\r\n assert(this.endSet_, 'Only valid if end has been set');\r\n return this.indexEndValue_;\r\n }\r\n /**\r\n * Only valid to call if hasEnd() returns true.\r\n * Returns the end key name for the range defined by these query parameters\r\n */\r\n getIndexEndName() {\r\n assert(this.endSet_, 'Only valid if end has been set');\r\n if (this.endNameSet_) {\r\n return this.indexEndName_;\r\n }\r\n else {\r\n return MAX_NAME;\r\n }\r\n }\r\n hasLimit() {\r\n return this.limitSet_;\r\n }\r\n /**\r\n * @returns True if a limit has been set and it has been explicitly anchored\r\n */\r\n hasAnchoredLimit() {\r\n return this.limitSet_ && this.viewFrom_ !== '';\r\n }\r\n /**\r\n * Only valid to call if hasLimit() returns true\r\n */\r\n getLimit() {\r\n assert(this.limitSet_, 'Only valid if limit has been set');\r\n return this.limit_;\r\n }\r\n getIndex() {\r\n return this.index_;\r\n }\r\n loadsAllData() {\r\n return !(this.startSet_ || this.endSet_ || this.limitSet_);\r\n }\r\n isDefault() {\r\n return this.loadsAllData() && this.index_ === PRIORITY_INDEX;\r\n }\r\n copy() {\r\n const copy = new QueryParams();\r\n copy.limitSet_ = this.limitSet_;\r\n copy.limit_ = this.limit_;\r\n copy.startSet_ = this.startSet_;\r\n copy.startAfterSet_ = this.startAfterSet_;\r\n copy.indexStartValue_ = this.indexStartValue_;\r\n copy.startNameSet_ = this.startNameSet_;\r\n copy.indexStartName_ = this.indexStartName_;\r\n copy.endSet_ = this.endSet_;\r\n copy.endBeforeSet_ = this.endBeforeSet_;\r\n copy.indexEndValue_ = this.indexEndValue_;\r\n copy.endNameSet_ = this.endNameSet_;\r\n copy.indexEndName_ = this.indexEndName_;\r\n copy.index_ = this.index_;\r\n copy.viewFrom_ = this.viewFrom_;\r\n return copy;\r\n }\r\n}\r\nfunction queryParamsGetNodeFilter(queryParams) {\r\n if (queryParams.loadsAllData()) {\r\n return new IndexedFilter(queryParams.getIndex());\r\n }\r\n else if (queryParams.hasLimit()) {\r\n return new LimitedFilter(queryParams);\r\n }\r\n else {\r\n return new RangedFilter(queryParams);\r\n }\r\n}\r\nfunction queryParamsLimitToFirst(queryParams, newLimit) {\r\n const newParams = queryParams.copy();\r\n newParams.limitSet_ = true;\r\n newParams.limit_ = newLimit;\r\n newParams.viewFrom_ = \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\r\n return newParams;\r\n}\r\nfunction queryParamsLimitToLast(queryParams, newLimit) {\r\n const newParams = queryParams.copy();\r\n newParams.limitSet_ = true;\r\n newParams.limit_ = newLimit;\r\n newParams.viewFrom_ = \"r\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT */;\r\n return newParams;\r\n}\r\nfunction queryParamsStartAt(queryParams, indexValue, key) {\r\n const newParams = queryParams.copy();\r\n newParams.startSet_ = true;\r\n if (indexValue === undefined) {\r\n indexValue = null;\r\n }\r\n newParams.indexStartValue_ = indexValue;\r\n if (key != null) {\r\n newParams.startNameSet_ = true;\r\n newParams.indexStartName_ = key;\r\n }\r\n else {\r\n newParams.startNameSet_ = false;\r\n newParams.indexStartName_ = '';\r\n }\r\n return newParams;\r\n}\r\nfunction queryParamsStartAfter(queryParams, indexValue, key) {\r\n let params;\r\n if (queryParams.index_ === KEY_INDEX || !!key) {\r\n params = queryParamsStartAt(queryParams, indexValue, key);\r\n }\r\n else {\r\n params = queryParamsStartAt(queryParams, indexValue, MAX_NAME);\r\n }\r\n params.startAfterSet_ = true;\r\n return params;\r\n}\r\nfunction queryParamsEndAt(queryParams, indexValue, key) {\r\n const newParams = queryParams.copy();\r\n newParams.endSet_ = true;\r\n if (indexValue === undefined) {\r\n indexValue = null;\r\n }\r\n newParams.indexEndValue_ = indexValue;\r\n if (key !== undefined) {\r\n newParams.endNameSet_ = true;\r\n newParams.indexEndName_ = key;\r\n }\r\n else {\r\n newParams.endNameSet_ = false;\r\n newParams.indexEndName_ = '';\r\n }\r\n return newParams;\r\n}\r\nfunction queryParamsEndBefore(queryParams, indexValue, key) {\r\n let params;\r\n if (queryParams.index_ === KEY_INDEX || !!key) {\r\n params = queryParamsEndAt(queryParams, indexValue, key);\r\n }\r\n else {\r\n params = queryParamsEndAt(queryParams, indexValue, MIN_NAME);\r\n }\r\n params.endBeforeSet_ = true;\r\n return params;\r\n}\r\nfunction queryParamsOrderBy(queryParams, index) {\r\n const newParams = queryParams.copy();\r\n newParams.index_ = index;\r\n return newParams;\r\n}\r\n/**\r\n * Returns a set of REST query string parameters representing this query.\r\n *\r\n * @returns query string parameters\r\n */\r\nfunction queryParamsToRestQueryStringParameters(queryParams) {\r\n const qs = {};\r\n if (queryParams.isDefault()) {\r\n return qs;\r\n }\r\n let orderBy;\r\n if (queryParams.index_ === PRIORITY_INDEX) {\r\n orderBy = \"$priority\" /* REST_QUERY_CONSTANTS.PRIORITY_INDEX */;\r\n }\r\n else if (queryParams.index_ === VALUE_INDEX) {\r\n orderBy = \"$value\" /* REST_QUERY_CONSTANTS.VALUE_INDEX */;\r\n }\r\n else if (queryParams.index_ === KEY_INDEX) {\r\n orderBy = \"$key\" /* REST_QUERY_CONSTANTS.KEY_INDEX */;\r\n }\r\n else {\r\n assert(queryParams.index_ instanceof PathIndex, 'Unrecognized index type!');\r\n orderBy = queryParams.index_.toString();\r\n }\r\n qs[\"orderBy\" /* REST_QUERY_CONSTANTS.ORDER_BY */] = stringify(orderBy);\r\n if (queryParams.startSet_) {\r\n const startParam = queryParams.startAfterSet_\r\n ? \"startAfter\" /* REST_QUERY_CONSTANTS.START_AFTER */\r\n : \"startAt\" /* REST_QUERY_CONSTANTS.START_AT */;\r\n qs[startParam] = stringify(queryParams.indexStartValue_);\r\n if (queryParams.startNameSet_) {\r\n qs[startParam] += ',' + stringify(queryParams.indexStartName_);\r\n }\r\n }\r\n if (queryParams.endSet_) {\r\n const endParam = queryParams.endBeforeSet_\r\n ? \"endBefore\" /* REST_QUERY_CONSTANTS.END_BEFORE */\r\n : \"endAt\" /* REST_QUERY_CONSTANTS.END_AT */;\r\n qs[endParam] = stringify(queryParams.indexEndValue_);\r\n if (queryParams.endNameSet_) {\r\n qs[endParam] += ',' + stringify(queryParams.indexEndName_);\r\n }\r\n }\r\n if (queryParams.limitSet_) {\r\n if (queryParams.isViewFromLeft()) {\r\n qs[\"limitToFirst\" /* REST_QUERY_CONSTANTS.LIMIT_TO_FIRST */] = queryParams.limit_;\r\n }\r\n else {\r\n qs[\"limitToLast\" /* REST_QUERY_CONSTANTS.LIMIT_TO_LAST */] = queryParams.limit_;\r\n }\r\n }\r\n return qs;\r\n}\r\nfunction queryParamsGetQueryObject(queryParams) {\r\n const obj = {};\r\n if (queryParams.startSet_) {\r\n obj[\"sp\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_VALUE */] =\r\n queryParams.indexStartValue_;\r\n if (queryParams.startNameSet_) {\r\n obj[\"sn\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_NAME */] =\r\n queryParams.indexStartName_;\r\n }\r\n obj[\"sin\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_START_IS_INCLUSIVE */] =\r\n !queryParams.startAfterSet_;\r\n }\r\n if (queryParams.endSet_) {\r\n obj[\"ep\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_VALUE */] = queryParams.indexEndValue_;\r\n if (queryParams.endNameSet_) {\r\n obj[\"en\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_NAME */] = queryParams.indexEndName_;\r\n }\r\n obj[\"ein\" /* WIRE_PROTOCOL_CONSTANTS.INDEX_END_IS_INCLUSIVE */] =\r\n !queryParams.endBeforeSet_;\r\n }\r\n if (queryParams.limitSet_) {\r\n obj[\"l\" /* WIRE_PROTOCOL_CONSTANTS.LIMIT */] = queryParams.limit_;\r\n let viewFrom = queryParams.viewFrom_;\r\n if (viewFrom === '') {\r\n if (queryParams.isViewFromLeft()) {\r\n viewFrom = \"l\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT */;\r\n }\r\n else {\r\n viewFrom = \"r\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT */;\r\n }\r\n }\r\n obj[\"vf\" /* WIRE_PROTOCOL_CONSTANTS.VIEW_FROM */] = viewFrom;\r\n }\r\n // For now, priority index is the default, so we only specify if it's some other index\r\n if (queryParams.index_ !== PRIORITY_INDEX) {\r\n obj[\"i\" /* WIRE_PROTOCOL_CONSTANTS.INDEX */] = queryParams.index_.toString();\r\n }\r\n return obj;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of ServerActions that communicates with the server via REST requests.\r\n * This is mostly useful for compatibility with crawlers, where we don't want to spin up a full\r\n * persistent connection (using WebSockets or long-polling)\r\n */\r\nclass ReadonlyRestClient extends ServerActions {\r\n /**\r\n * @param repoInfo_ - Data about the namespace we are connecting to\r\n * @param onDataUpdate_ - A callback for new data from the server\r\n */\r\n constructor(repoInfo_, onDataUpdate_, authTokenProvider_, appCheckTokenProvider_) {\r\n super();\r\n this.repoInfo_ = repoInfo_;\r\n this.onDataUpdate_ = onDataUpdate_;\r\n this.authTokenProvider_ = authTokenProvider_;\r\n this.appCheckTokenProvider_ = appCheckTokenProvider_;\r\n /** @private {function(...[*])} */\r\n this.log_ = logWrapper('p:rest:');\r\n /**\r\n * We don't actually need to track listens, except to prevent us calling an onComplete for a listen\r\n * that's been removed. :-/\r\n */\r\n this.listens_ = {};\r\n }\r\n reportStats(stats) {\r\n throw new Error('Method not implemented.');\r\n }\r\n static getListenId_(query, tag) {\r\n if (tag !== undefined) {\r\n return 'tag$' + tag;\r\n }\r\n else {\r\n assert(query._queryParams.isDefault(), \"should have a tag if it's not a default query.\");\r\n return query._path.toString();\r\n }\r\n }\r\n /** @inheritDoc */\r\n listen(query, currentHashFn, tag, onComplete) {\r\n const pathString = query._path.toString();\r\n this.log_('Listen called for ' + pathString + ' ' + query._queryIdentifier);\r\n // Mark this listener so we can tell if it's removed.\r\n const listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n const thisListen = {};\r\n this.listens_[listenId] = thisListen;\r\n const queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);\r\n this.restRequest_(pathString + '.json', queryStringParameters, (error, result) => {\r\n let data = result;\r\n if (error === 404) {\r\n data = null;\r\n error = null;\r\n }\r\n if (error === null) {\r\n this.onDataUpdate_(pathString, data, /*isMerge=*/ false, tag);\r\n }\r\n if (safeGet(this.listens_, listenId) === thisListen) {\r\n let status;\r\n if (!error) {\r\n status = 'ok';\r\n }\r\n else if (error === 401) {\r\n status = 'permission_denied';\r\n }\r\n else {\r\n status = 'rest_error:' + error;\r\n }\r\n onComplete(status, null);\r\n }\r\n });\r\n }\r\n /** @inheritDoc */\r\n unlisten(query, tag) {\r\n const listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n delete this.listens_[listenId];\r\n }\r\n get(query) {\r\n const queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);\r\n const pathString = query._path.toString();\r\n const deferred = new Deferred();\r\n this.restRequest_(pathString + '.json', queryStringParameters, (error, result) => {\r\n let data = result;\r\n if (error === 404) {\r\n data = null;\r\n error = null;\r\n }\r\n if (error === null) {\r\n this.onDataUpdate_(pathString, data, \r\n /*isMerge=*/ false, \r\n /*tag=*/ null);\r\n deferred.resolve(data);\r\n }\r\n else {\r\n deferred.reject(new Error(data));\r\n }\r\n });\r\n return deferred.promise;\r\n }\r\n /** @inheritDoc */\r\n refreshAuthToken(token) {\r\n // no-op since we just always call getToken.\r\n }\r\n /**\r\n * Performs a REST request to the given path, with the provided query string parameters,\r\n * and any auth credentials we have.\r\n */\r\n restRequest_(pathString, queryStringParameters = {}, callback) {\r\n queryStringParameters['format'] = 'export';\r\n return Promise.all([\r\n this.authTokenProvider_.getToken(/*forceRefresh=*/ false),\r\n this.appCheckTokenProvider_.getToken(/*forceRefresh=*/ false)\r\n ]).then(([authToken, appCheckToken]) => {\r\n if (authToken && authToken.accessToken) {\r\n queryStringParameters['auth'] = authToken.accessToken;\r\n }\r\n if (appCheckToken && appCheckToken.token) {\r\n queryStringParameters['ac'] = appCheckToken.token;\r\n }\r\n const url = (this.repoInfo_.secure ? 'https://' : 'http://') +\r\n this.repoInfo_.host +\r\n pathString +\r\n '?' +\r\n 'ns=' +\r\n this.repoInfo_.namespace +\r\n querystring(queryStringParameters);\r\n this.log_('Sending REST request for ' + url);\r\n const xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange = () => {\r\n if (callback && xhr.readyState === 4) {\r\n this.log_('REST Response for ' + url + ' received. status:', xhr.status, 'response:', xhr.responseText);\r\n let res = null;\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n try {\r\n res = jsonEval(xhr.responseText);\r\n }\r\n catch (e) {\r\n warn('Failed to parse JSON response for ' +\r\n url +\r\n ': ' +\r\n xhr.responseText);\r\n }\r\n callback(null, res);\r\n }\r\n else {\r\n // 401 and 404 are expected.\r\n if (xhr.status !== 401 && xhr.status !== 404) {\r\n warn('Got unsuccessful REST response for ' +\r\n url +\r\n ' Status: ' +\r\n xhr.status);\r\n }\r\n callback(xhr.status);\r\n }\r\n callback = null;\r\n }\r\n };\r\n xhr.open('GET', url, /*asynchronous=*/ true);\r\n xhr.send();\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Mutable object which basically just stores a reference to the \"latest\" immutable snapshot.\r\n */\r\nclass SnapshotHolder {\r\n constructor() {\r\n this.rootNode_ = ChildrenNode.EMPTY_NODE;\r\n }\r\n getNode(path) {\r\n return this.rootNode_.getChild(path);\r\n }\r\n updateSnapshot(path, newSnapshotNode) {\r\n this.rootNode_ = this.rootNode_.updateChild(path, newSnapshotNode);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newSparseSnapshotTree() {\r\n return {\r\n value: null,\r\n children: new Map()\r\n };\r\n}\r\n/**\r\n * Stores the given node at the specified path. If there is already a node\r\n * at a shallower path, it merges the new data into that snapshot node.\r\n *\r\n * @param path - Path to look up snapshot for.\r\n * @param data - The new data, or null.\r\n */\r\nfunction sparseSnapshotTreeRemember(sparseSnapshotTree, path, data) {\r\n if (pathIsEmpty(path)) {\r\n sparseSnapshotTree.value = data;\r\n sparseSnapshotTree.children.clear();\r\n }\r\n else if (sparseSnapshotTree.value !== null) {\r\n sparseSnapshotTree.value = sparseSnapshotTree.value.updateChild(path, data);\r\n }\r\n else {\r\n const childKey = pathGetFront(path);\r\n if (!sparseSnapshotTree.children.has(childKey)) {\r\n sparseSnapshotTree.children.set(childKey, newSparseSnapshotTree());\r\n }\r\n const child = sparseSnapshotTree.children.get(childKey);\r\n path = pathPopFront(path);\r\n sparseSnapshotTreeRemember(child, path, data);\r\n }\r\n}\r\n/**\r\n * Purge the data at path from the cache.\r\n *\r\n * @param path - Path to look up snapshot for.\r\n * @returns True if this node should now be removed.\r\n */\r\nfunction sparseSnapshotTreeForget(sparseSnapshotTree, path) {\r\n if (pathIsEmpty(path)) {\r\n sparseSnapshotTree.value = null;\r\n sparseSnapshotTree.children.clear();\r\n return true;\r\n }\r\n else {\r\n if (sparseSnapshotTree.value !== null) {\r\n if (sparseSnapshotTree.value.isLeafNode()) {\r\n // We're trying to forget a node that doesn't exist\r\n return false;\r\n }\r\n else {\r\n const value = sparseSnapshotTree.value;\r\n sparseSnapshotTree.value = null;\r\n value.forEachChild(PRIORITY_INDEX, (key, tree) => {\r\n sparseSnapshotTreeRemember(sparseSnapshotTree, new Path(key), tree);\r\n });\r\n return sparseSnapshotTreeForget(sparseSnapshotTree, path);\r\n }\r\n }\r\n else if (sparseSnapshotTree.children.size > 0) {\r\n const childKey = pathGetFront(path);\r\n path = pathPopFront(path);\r\n if (sparseSnapshotTree.children.has(childKey)) {\r\n const safeToRemove = sparseSnapshotTreeForget(sparseSnapshotTree.children.get(childKey), path);\r\n if (safeToRemove) {\r\n sparseSnapshotTree.children.delete(childKey);\r\n }\r\n }\r\n return sparseSnapshotTree.children.size === 0;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n}\r\n/**\r\n * Recursively iterates through all of the stored tree and calls the\r\n * callback on each one.\r\n *\r\n * @param prefixPath - Path to look up node for.\r\n * @param func - The function to invoke for each tree.\r\n */\r\nfunction sparseSnapshotTreeForEachTree(sparseSnapshotTree, prefixPath, func) {\r\n if (sparseSnapshotTree.value !== null) {\r\n func(prefixPath, sparseSnapshotTree.value);\r\n }\r\n else {\r\n sparseSnapshotTreeForEachChild(sparseSnapshotTree, (key, tree) => {\r\n const path = new Path(prefixPath.toString() + '/' + key);\r\n sparseSnapshotTreeForEachTree(tree, path, func);\r\n });\r\n }\r\n}\r\n/**\r\n * Iterates through each immediate child and triggers the callback.\r\n * Only seems to be used in tests.\r\n *\r\n * @param func - The function to invoke for each child.\r\n */\r\nfunction sparseSnapshotTreeForEachChild(sparseSnapshotTree, func) {\r\n sparseSnapshotTree.children.forEach((tree, key) => {\r\n func(key, tree);\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns the delta from the previous call to get stats.\r\n *\r\n * @param collection_ - The collection to \"listen\" to.\r\n */\r\nclass StatsListener {\r\n constructor(collection_) {\r\n this.collection_ = collection_;\r\n this.last_ = null;\r\n }\r\n get() {\r\n const newStats = this.collection_.get();\r\n const delta = Object.assign({}, newStats);\r\n if (this.last_) {\r\n each(this.last_, (stat, value) => {\r\n delta[stat] = delta[stat] - value;\r\n });\r\n }\r\n this.last_ = newStats;\r\n return delta;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Assuming some apps may have a short amount of time on page, and a bulk of firebase operations probably\r\n// happen on page load, we try to report our first set of stats pretty quickly, but we wait at least 10\r\n// seconds to try to ensure the Firebase connection is established / settled.\r\nconst FIRST_STATS_MIN_TIME = 10 * 1000;\r\nconst FIRST_STATS_MAX_TIME = 30 * 1000;\r\n// We'll continue to report stats on average every 5 minutes.\r\nconst REPORT_STATS_INTERVAL = 5 * 60 * 1000;\r\nclass StatsReporter {\r\n constructor(collection, server_) {\r\n this.server_ = server_;\r\n this.statsToReport_ = {};\r\n this.statsListener_ = new StatsListener(collection);\r\n const timeout = FIRST_STATS_MIN_TIME +\r\n (FIRST_STATS_MAX_TIME - FIRST_STATS_MIN_TIME) * Math.random();\r\n setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(timeout));\r\n }\r\n reportStats_() {\r\n const stats = this.statsListener_.get();\r\n const reportedStats = {};\r\n let haveStatsToReport = false;\r\n each(stats, (stat, value) => {\r\n if (value > 0 && contains(this.statsToReport_, stat)) {\r\n reportedStats[stat] = value;\r\n haveStatsToReport = true;\r\n }\r\n });\r\n if (haveStatsToReport) {\r\n this.server_.reportStats(reportedStats);\r\n }\r\n // queue our next run.\r\n setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(Math.random() * 2 * REPORT_STATS_INTERVAL));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n *\r\n * @enum\r\n */\r\nvar OperationType;\r\n(function (OperationType) {\r\n OperationType[OperationType[\"OVERWRITE\"] = 0] = \"OVERWRITE\";\r\n OperationType[OperationType[\"MERGE\"] = 1] = \"MERGE\";\r\n OperationType[OperationType[\"ACK_USER_WRITE\"] = 2] = \"ACK_USER_WRITE\";\r\n OperationType[OperationType[\"LISTEN_COMPLETE\"] = 3] = \"LISTEN_COMPLETE\";\r\n})(OperationType || (OperationType = {}));\r\nfunction newOperationSourceUser() {\r\n return {\r\n fromUser: true,\r\n fromServer: false,\r\n queryId: null,\r\n tagged: false\r\n };\r\n}\r\nfunction newOperationSourceServer() {\r\n return {\r\n fromUser: false,\r\n fromServer: true,\r\n queryId: null,\r\n tagged: false\r\n };\r\n}\r\nfunction newOperationSourceServerTaggedQuery(queryId) {\r\n return {\r\n fromUser: false,\r\n fromServer: true,\r\n queryId,\r\n tagged: true\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AckUserWrite {\r\n /**\r\n * @param affectedTree - A tree containing true for each affected path. Affected paths can't overlap.\r\n */\r\n constructor(\r\n /** @inheritDoc */ path, \r\n /** @inheritDoc */ affectedTree, \r\n /** @inheritDoc */ revert) {\r\n this.path = path;\r\n this.affectedTree = affectedTree;\r\n this.revert = revert;\r\n /** @inheritDoc */\r\n this.type = OperationType.ACK_USER_WRITE;\r\n /** @inheritDoc */\r\n this.source = newOperationSourceUser();\r\n }\r\n operationForChild(childName) {\r\n if (!pathIsEmpty(this.path)) {\r\n assert(pathGetFront(this.path) === childName, 'operationForChild called for unrelated child.');\r\n return new AckUserWrite(pathPopFront(this.path), this.affectedTree, this.revert);\r\n }\r\n else if (this.affectedTree.value != null) {\r\n assert(this.affectedTree.children.isEmpty(), 'affectedTree should not have overlapping affected paths.');\r\n // All child locations are affected as well; just return same operation.\r\n return this;\r\n }\r\n else {\r\n const childTree = this.affectedTree.subtree(new Path(childName));\r\n return new AckUserWrite(newEmptyPath(), childTree, this.revert);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ListenComplete {\r\n constructor(source, path) {\r\n this.source = source;\r\n this.path = path;\r\n /** @inheritDoc */\r\n this.type = OperationType.LISTEN_COMPLETE;\r\n }\r\n operationForChild(childName) {\r\n if (pathIsEmpty(this.path)) {\r\n return new ListenComplete(this.source, newEmptyPath());\r\n }\r\n else {\r\n return new ListenComplete(this.source, pathPopFront(this.path));\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Overwrite {\r\n constructor(source, path, snap) {\r\n this.source = source;\r\n this.path = path;\r\n this.snap = snap;\r\n /** @inheritDoc */\r\n this.type = OperationType.OVERWRITE;\r\n }\r\n operationForChild(childName) {\r\n if (pathIsEmpty(this.path)) {\r\n return new Overwrite(this.source, newEmptyPath(), this.snap.getImmediateChild(childName));\r\n }\r\n else {\r\n return new Overwrite(this.source, pathPopFront(this.path), this.snap);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Merge {\r\n constructor(\r\n /** @inheritDoc */ source, \r\n /** @inheritDoc */ path, \r\n /** @inheritDoc */ children) {\r\n this.source = source;\r\n this.path = path;\r\n this.children = children;\r\n /** @inheritDoc */\r\n this.type = OperationType.MERGE;\r\n }\r\n operationForChild(childName) {\r\n if (pathIsEmpty(this.path)) {\r\n const childTree = this.children.subtree(new Path(childName));\r\n if (childTree.isEmpty()) {\r\n // This child is unaffected\r\n return null;\r\n }\r\n else if (childTree.value) {\r\n // We have a snapshot for the child in question. This becomes an overwrite of the child.\r\n return new Overwrite(this.source, newEmptyPath(), childTree.value);\r\n }\r\n else {\r\n // This is a merge at a deeper level\r\n return new Merge(this.source, newEmptyPath(), childTree);\r\n }\r\n }\r\n else {\r\n assert(pathGetFront(this.path) === childName, \"Can't get a merge for a child not on the path of the operation\");\r\n return new Merge(this.source, pathPopFront(this.path), this.children);\r\n }\r\n }\r\n toString() {\r\n return ('Operation(' +\r\n this.path +\r\n ': ' +\r\n this.source.toString() +\r\n ' merge: ' +\r\n this.children.toString() +\r\n ')');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A cache node only stores complete children. Additionally it holds a flag whether the node can be considered fully\r\n * initialized in the sense that we know at one point in time this represented a valid state of the world, e.g.\r\n * initialized with data from the server, or a complete overwrite by the client. The filtered flag also tracks\r\n * whether a node potentially had children removed due to a filter.\r\n */\r\nclass CacheNode {\r\n constructor(node_, fullyInitialized_, filtered_) {\r\n this.node_ = node_;\r\n this.fullyInitialized_ = fullyInitialized_;\r\n this.filtered_ = filtered_;\r\n }\r\n /**\r\n * Returns whether this node was fully initialized with either server data or a complete overwrite by the client\r\n */\r\n isFullyInitialized() {\r\n return this.fullyInitialized_;\r\n }\r\n /**\r\n * Returns whether this node is potentially missing children due to a filter applied to the node\r\n */\r\n isFiltered() {\r\n return this.filtered_;\r\n }\r\n isCompleteForPath(path) {\r\n if (pathIsEmpty(path)) {\r\n return this.isFullyInitialized() && !this.filtered_;\r\n }\r\n const childKey = pathGetFront(path);\r\n return this.isCompleteForChild(childKey);\r\n }\r\n isCompleteForChild(key) {\r\n return ((this.isFullyInitialized() && !this.filtered_) || this.node_.hasChild(key));\r\n }\r\n getNode() {\r\n return this.node_;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An EventGenerator is used to convert \"raw\" changes (Change) as computed by the\r\n * CacheDiffer into actual events (Event) that can be raised. See generateEventsForChanges()\r\n * for details.\r\n *\r\n */\r\nclass EventGenerator {\r\n constructor(query_) {\r\n this.query_ = query_;\r\n this.index_ = this.query_._queryParams.getIndex();\r\n }\r\n}\r\n/**\r\n * Given a set of raw changes (no moved events and prevName not specified yet), and a set of\r\n * EventRegistrations that should be notified of these changes, generate the actual events to be raised.\r\n *\r\n * Notes:\r\n * - child_moved events will be synthesized at this time for any child_changed events that affect\r\n * our index.\r\n * - prevName will be calculated based on the index ordering.\r\n */\r\nfunction eventGeneratorGenerateEventsForChanges(eventGenerator, changes, eventCache, eventRegistrations) {\r\n const events = [];\r\n const moves = [];\r\n changes.forEach(change => {\r\n if (change.type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\r\n eventGenerator.index_.indexedValueChanged(change.oldSnap, change.snapshotNode)) {\r\n moves.push(changeChildMoved(change.childName, change.snapshotNode));\r\n }\r\n });\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_removed\" /* ChangeType.CHILD_REMOVED */, changes, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_added\" /* ChangeType.CHILD_ADDED */, changes, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_moved\" /* ChangeType.CHILD_MOVED */, moves, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_changed\" /* ChangeType.CHILD_CHANGED */, changes, eventRegistrations, eventCache);\r\n eventGeneratorGenerateEventsForType(eventGenerator, events, \"value\" /* ChangeType.VALUE */, changes, eventRegistrations, eventCache);\r\n return events;\r\n}\r\n/**\r\n * Given changes of a single change type, generate the corresponding events.\r\n */\r\nfunction eventGeneratorGenerateEventsForType(eventGenerator, events, eventType, changes, registrations, eventCache) {\r\n const filteredChanges = changes.filter(change => change.type === eventType);\r\n filteredChanges.sort((a, b) => eventGeneratorCompareChanges(eventGenerator, a, b));\r\n filteredChanges.forEach(change => {\r\n const materializedChange = eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache);\r\n registrations.forEach(registration => {\r\n if (registration.respondsTo(change.type)) {\r\n events.push(registration.createEvent(materializedChange, eventGenerator.query_));\r\n }\r\n });\r\n });\r\n}\r\nfunction eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache) {\r\n if (change.type === 'value' || change.type === 'child_removed') {\r\n return change;\r\n }\r\n else {\r\n change.prevName = eventCache.getPredecessorChildName(change.childName, change.snapshotNode, eventGenerator.index_);\r\n return change;\r\n }\r\n}\r\nfunction eventGeneratorCompareChanges(eventGenerator, a, b) {\r\n if (a.childName == null || b.childName == null) {\r\n throw assertionError('Should only compare child_ events.');\r\n }\r\n const aWrapped = new NamedNode(a.childName, a.snapshotNode);\r\n const bWrapped = new NamedNode(b.childName, b.snapshotNode);\r\n return eventGenerator.index_.compare(aWrapped, bWrapped);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newViewCache(eventCache, serverCache) {\r\n return { eventCache, serverCache };\r\n}\r\nfunction viewCacheUpdateEventSnap(viewCache, eventSnap, complete, filtered) {\r\n return newViewCache(new CacheNode(eventSnap, complete, filtered), viewCache.serverCache);\r\n}\r\nfunction viewCacheUpdateServerSnap(viewCache, serverSnap, complete, filtered) {\r\n return newViewCache(viewCache.eventCache, new CacheNode(serverSnap, complete, filtered));\r\n}\r\nfunction viewCacheGetCompleteEventSnap(viewCache) {\r\n return viewCache.eventCache.isFullyInitialized()\r\n ? viewCache.eventCache.getNode()\r\n : null;\r\n}\r\nfunction viewCacheGetCompleteServerSnap(viewCache) {\r\n return viewCache.serverCache.isFullyInitialized()\r\n ? viewCache.serverCache.getNode()\r\n : null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet emptyChildrenSingleton;\r\n/**\r\n * Singleton empty children collection.\r\n *\r\n */\r\nconst EmptyChildren = () => {\r\n if (!emptyChildrenSingleton) {\r\n emptyChildrenSingleton = new SortedMap(stringCompare);\r\n }\r\n return emptyChildrenSingleton;\r\n};\r\n/**\r\n * A tree with immutable elements.\r\n */\r\nclass ImmutableTree {\r\n constructor(value, children = EmptyChildren()) {\r\n this.value = value;\r\n this.children = children;\r\n }\r\n static fromObject(obj) {\r\n let tree = new ImmutableTree(null);\r\n each(obj, (childPath, childSnap) => {\r\n tree = tree.set(new Path(childPath), childSnap);\r\n });\r\n return tree;\r\n }\r\n /**\r\n * True if the value is empty and there are no children\r\n */\r\n isEmpty() {\r\n return this.value === null && this.children.isEmpty();\r\n }\r\n /**\r\n * Given a path and predicate, return the first node and the path to that node\r\n * where the predicate returns true.\r\n *\r\n * TODO Do a perf test -- If we're creating a bunch of `{path: value:}`\r\n * objects on the way back out, it may be better to pass down a pathSoFar obj.\r\n *\r\n * @param relativePath - The remainder of the path\r\n * @param predicate - The predicate to satisfy to return a node\r\n */\r\n findRootMostMatchingPathAndValue(relativePath, predicate) {\r\n if (this.value != null && predicate(this.value)) {\r\n return { path: newEmptyPath(), value: this.value };\r\n }\r\n else {\r\n if (pathIsEmpty(relativePath)) {\r\n return null;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front);\r\n if (child !== null) {\r\n const childExistingPathAndValue = child.findRootMostMatchingPathAndValue(pathPopFront(relativePath), predicate);\r\n if (childExistingPathAndValue != null) {\r\n const fullPath = pathChild(new Path(front), childExistingPathAndValue.path);\r\n return { path: fullPath, value: childExistingPathAndValue.value };\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * Find, if it exists, the shortest subpath of the given path that points a defined\r\n * value in the tree\r\n */\r\n findRootMostValueAndPath(relativePath) {\r\n return this.findRootMostMatchingPathAndValue(relativePath, () => true);\r\n }\r\n /**\r\n * @returns The subtree at the given path\r\n */\r\n subtree(relativePath) {\r\n if (pathIsEmpty(relativePath)) {\r\n return this;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const childTree = this.children.get(front);\r\n if (childTree !== null) {\r\n return childTree.subtree(pathPopFront(relativePath));\r\n }\r\n else {\r\n return new ImmutableTree(null);\r\n }\r\n }\r\n }\r\n /**\r\n * Sets a value at the specified path.\r\n *\r\n * @param relativePath - Path to set value at.\r\n * @param toSet - Value to set.\r\n * @returns Resulting tree.\r\n */\r\n set(relativePath, toSet) {\r\n if (pathIsEmpty(relativePath)) {\r\n return new ImmutableTree(toSet, this.children);\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front) || new ImmutableTree(null);\r\n const newChild = child.set(pathPopFront(relativePath), toSet);\r\n const newChildren = this.children.insert(front, newChild);\r\n return new ImmutableTree(this.value, newChildren);\r\n }\r\n }\r\n /**\r\n * Removes the value at the specified path.\r\n *\r\n * @param relativePath - Path to value to remove.\r\n * @returns Resulting tree.\r\n */\r\n remove(relativePath) {\r\n if (pathIsEmpty(relativePath)) {\r\n if (this.children.isEmpty()) {\r\n return new ImmutableTree(null);\r\n }\r\n else {\r\n return new ImmutableTree(null, this.children);\r\n }\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front);\r\n if (child) {\r\n const newChild = child.remove(pathPopFront(relativePath));\r\n let newChildren;\r\n if (newChild.isEmpty()) {\r\n newChildren = this.children.remove(front);\r\n }\r\n else {\r\n newChildren = this.children.insert(front, newChild);\r\n }\r\n if (this.value === null && newChildren.isEmpty()) {\r\n return new ImmutableTree(null);\r\n }\r\n else {\r\n return new ImmutableTree(this.value, newChildren);\r\n }\r\n }\r\n else {\r\n return this;\r\n }\r\n }\r\n }\r\n /**\r\n * Gets a value from the tree.\r\n *\r\n * @param relativePath - Path to get value for.\r\n * @returns Value at path, or null.\r\n */\r\n get(relativePath) {\r\n if (pathIsEmpty(relativePath)) {\r\n return this.value;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front);\r\n if (child) {\r\n return child.get(pathPopFront(relativePath));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n /**\r\n * Replace the subtree at the specified path with the given new tree.\r\n *\r\n * @param relativePath - Path to replace subtree for.\r\n * @param newTree - New tree.\r\n * @returns Resulting tree.\r\n */\r\n setTree(relativePath, newTree) {\r\n if (pathIsEmpty(relativePath)) {\r\n return newTree;\r\n }\r\n else {\r\n const front = pathGetFront(relativePath);\r\n const child = this.children.get(front) || new ImmutableTree(null);\r\n const newChild = child.setTree(pathPopFront(relativePath), newTree);\r\n let newChildren;\r\n if (newChild.isEmpty()) {\r\n newChildren = this.children.remove(front);\r\n }\r\n else {\r\n newChildren = this.children.insert(front, newChild);\r\n }\r\n return new ImmutableTree(this.value, newChildren);\r\n }\r\n }\r\n /**\r\n * Performs a depth first fold on this tree. Transforms a tree into a single\r\n * value, given a function that operates on the path to a node, an optional\r\n * current value, and a map of child names to folded subtrees\r\n */\r\n fold(fn) {\r\n return this.fold_(newEmptyPath(), fn);\r\n }\r\n /**\r\n * Recursive helper for public-facing fold() method\r\n */\r\n fold_(pathSoFar, fn) {\r\n const accum = {};\r\n this.children.inorderTraversal((childKey, childTree) => {\r\n accum[childKey] = childTree.fold_(pathChild(pathSoFar, childKey), fn);\r\n });\r\n return fn(pathSoFar, this.value, accum);\r\n }\r\n /**\r\n * Find the first matching value on the given path. Return the result of applying f to it.\r\n */\r\n findOnPath(path, f) {\r\n return this.findOnPath_(path, newEmptyPath(), f);\r\n }\r\n findOnPath_(pathToFollow, pathSoFar, f) {\r\n const result = this.value ? f(pathSoFar, this.value) : false;\r\n if (result) {\r\n return result;\r\n }\r\n else {\r\n if (pathIsEmpty(pathToFollow)) {\r\n return null;\r\n }\r\n else {\r\n const front = pathGetFront(pathToFollow);\r\n const nextChild = this.children.get(front);\r\n if (nextChild) {\r\n return nextChild.findOnPath_(pathPopFront(pathToFollow), pathChild(pathSoFar, front), f);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n foreachOnPath(path, f) {\r\n return this.foreachOnPath_(path, newEmptyPath(), f);\r\n }\r\n foreachOnPath_(pathToFollow, currentRelativePath, f) {\r\n if (pathIsEmpty(pathToFollow)) {\r\n return this;\r\n }\r\n else {\r\n if (this.value) {\r\n f(currentRelativePath, this.value);\r\n }\r\n const front = pathGetFront(pathToFollow);\r\n const nextChild = this.children.get(front);\r\n if (nextChild) {\r\n return nextChild.foreachOnPath_(pathPopFront(pathToFollow), pathChild(currentRelativePath, front), f);\r\n }\r\n else {\r\n return new ImmutableTree(null);\r\n }\r\n }\r\n }\r\n /**\r\n * Calls the given function for each node in the tree that has a value.\r\n *\r\n * @param f - A function to be called with the path from the root of the tree to\r\n * a node, and the value at that node. Called in depth-first order.\r\n */\r\n foreach(f) {\r\n this.foreach_(newEmptyPath(), f);\r\n }\r\n foreach_(currentRelativePath, f) {\r\n this.children.inorderTraversal((childName, childTree) => {\r\n childTree.foreach_(pathChild(currentRelativePath, childName), f);\r\n });\r\n if (this.value) {\r\n f(currentRelativePath, this.value);\r\n }\r\n }\r\n foreachChild(f) {\r\n this.children.inorderTraversal((childName, childTree) => {\r\n if (childTree.value) {\r\n f(childName, childTree.value);\r\n }\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class holds a collection of writes that can be applied to nodes in unison. It abstracts away the logic with\r\n * dealing with priority writes and multiple nested writes. At any given path there is only allowed to be one write\r\n * modifying that path. Any write to an existing path or shadowing an existing path will modify that existing write\r\n * to reflect the write added.\r\n */\r\nclass CompoundWrite {\r\n constructor(writeTree_) {\r\n this.writeTree_ = writeTree_;\r\n }\r\n static empty() {\r\n return new CompoundWrite(new ImmutableTree(null));\r\n }\r\n}\r\nfunction compoundWriteAddWrite(compoundWrite, path, node) {\r\n if (pathIsEmpty(path)) {\r\n return new CompoundWrite(new ImmutableTree(node));\r\n }\r\n else {\r\n const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\r\n if (rootmost != null) {\r\n const rootMostPath = rootmost.path;\r\n let value = rootmost.value;\r\n const relativePath = newRelativePath(rootMostPath, path);\r\n value = value.updateChild(relativePath, node);\r\n return new CompoundWrite(compoundWrite.writeTree_.set(rootMostPath, value));\r\n }\r\n else {\r\n const subtree = new ImmutableTree(node);\r\n const newWriteTree = compoundWrite.writeTree_.setTree(path, subtree);\r\n return new CompoundWrite(newWriteTree);\r\n }\r\n }\r\n}\r\nfunction compoundWriteAddWrites(compoundWrite, path, updates) {\r\n let newWrite = compoundWrite;\r\n each(updates, (childKey, node) => {\r\n newWrite = compoundWriteAddWrite(newWrite, pathChild(path, childKey), node);\r\n });\r\n return newWrite;\r\n}\r\n/**\r\n * Will remove a write at the given path and deeper paths. This will not modify a write at a higher\r\n * location, which must be removed by calling this method with that path.\r\n *\r\n * @param compoundWrite - The CompoundWrite to remove.\r\n * @param path - The path at which a write and all deeper writes should be removed\r\n * @returns The new CompoundWrite with the removed path\r\n */\r\nfunction compoundWriteRemoveWrite(compoundWrite, path) {\r\n if (pathIsEmpty(path)) {\r\n return CompoundWrite.empty();\r\n }\r\n else {\r\n const newWriteTree = compoundWrite.writeTree_.setTree(path, new ImmutableTree(null));\r\n return new CompoundWrite(newWriteTree);\r\n }\r\n}\r\n/**\r\n * Returns whether this CompoundWrite will fully overwrite a node at a given location and can therefore be\r\n * considered \"complete\".\r\n *\r\n * @param compoundWrite - The CompoundWrite to check.\r\n * @param path - The path to check for\r\n * @returns Whether there is a complete write at that path\r\n */\r\nfunction compoundWriteHasCompleteWrite(compoundWrite, path) {\r\n return compoundWriteGetCompleteNode(compoundWrite, path) != null;\r\n}\r\n/**\r\n * Returns a node for a path if and only if the node is a \"complete\" overwrite at that path. This will not aggregate\r\n * writes from deeper paths, but will return child nodes from a more shallow path.\r\n *\r\n * @param compoundWrite - The CompoundWrite to get the node from.\r\n * @param path - The path to get a complete write\r\n * @returns The node if complete at that path, or null otherwise.\r\n */\r\nfunction compoundWriteGetCompleteNode(compoundWrite, path) {\r\n const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\r\n if (rootmost != null) {\r\n return compoundWrite.writeTree_\r\n .get(rootmost.path)\r\n .getChild(newRelativePath(rootmost.path, path));\r\n }\r\n else {\r\n return null;\r\n }\r\n}\r\n/**\r\n * Returns all children that are guaranteed to be a complete overwrite.\r\n *\r\n * @param compoundWrite - The CompoundWrite to get children from.\r\n * @returns A list of all complete children.\r\n */\r\nfunction compoundWriteGetCompleteChildren(compoundWrite) {\r\n const children = [];\r\n const node = compoundWrite.writeTree_.value;\r\n if (node != null) {\r\n // If it's a leaf node, it has no children; so nothing to do.\r\n if (!node.isLeafNode()) {\r\n node.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n children.push(new NamedNode(childName, childNode));\r\n });\r\n }\r\n }\r\n else {\r\n compoundWrite.writeTree_.children.inorderTraversal((childName, childTree) => {\r\n if (childTree.value != null) {\r\n children.push(new NamedNode(childName, childTree.value));\r\n }\r\n });\r\n }\r\n return children;\r\n}\r\nfunction compoundWriteChildCompoundWrite(compoundWrite, path) {\r\n if (pathIsEmpty(path)) {\r\n return compoundWrite;\r\n }\r\n else {\r\n const shadowingNode = compoundWriteGetCompleteNode(compoundWrite, path);\r\n if (shadowingNode != null) {\r\n return new CompoundWrite(new ImmutableTree(shadowingNode));\r\n }\r\n else {\r\n return new CompoundWrite(compoundWrite.writeTree_.subtree(path));\r\n }\r\n }\r\n}\r\n/**\r\n * Returns true if this CompoundWrite is empty and therefore does not modify any nodes.\r\n * @returns Whether this CompoundWrite is empty\r\n */\r\nfunction compoundWriteIsEmpty(compoundWrite) {\r\n return compoundWrite.writeTree_.isEmpty();\r\n}\r\n/**\r\n * Applies this CompoundWrite to a node. The node is returned with all writes from this CompoundWrite applied to the\r\n * node\r\n * @param node - The node to apply this CompoundWrite to\r\n * @returns The node with all writes applied\r\n */\r\nfunction compoundWriteApply(compoundWrite, node) {\r\n return applySubtreeWrite(newEmptyPath(), compoundWrite.writeTree_, node);\r\n}\r\nfunction applySubtreeWrite(relativePath, writeTree, node) {\r\n if (writeTree.value != null) {\r\n // Since there a write is always a leaf, we're done here\r\n return node.updateChild(relativePath, writeTree.value);\r\n }\r\n else {\r\n let priorityWrite = null;\r\n writeTree.children.inorderTraversal((childKey, childTree) => {\r\n if (childKey === '.priority') {\r\n // Apply priorities at the end so we don't update priorities for either empty nodes or forget\r\n // to apply priorities to empty nodes that are later filled\r\n assert(childTree.value !== null, 'Priority writes must always be leaf nodes');\r\n priorityWrite = childTree.value;\r\n }\r\n else {\r\n node = applySubtreeWrite(pathChild(relativePath, childKey), childTree, node);\r\n }\r\n });\r\n // If there was a priority write, we only apply it if the node is not empty\r\n if (!node.getChild(relativePath).isEmpty() && priorityWrite !== null) {\r\n node = node.updateChild(pathChild(relativePath, '.priority'), priorityWrite);\r\n }\r\n return node;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Create a new WriteTreeRef for the given path. For use with a new sync point at the given path.\r\n *\r\n */\r\nfunction writeTreeChildWrites(writeTree, path) {\r\n return newWriteTreeRef(path, writeTree);\r\n}\r\n/**\r\n * Record a new overwrite from user code.\r\n *\r\n * @param visible - This is set to false by some transactions. It should be excluded from event caches\r\n */\r\nfunction writeTreeAddOverwrite(writeTree, path, snap, writeId, visible) {\r\n assert(writeId > writeTree.lastWriteId, 'Stacking an older write on top of newer ones');\r\n if (visible === undefined) {\r\n visible = true;\r\n }\r\n writeTree.allWrites.push({\r\n path,\r\n snap,\r\n writeId,\r\n visible\r\n });\r\n if (visible) {\r\n writeTree.visibleWrites = compoundWriteAddWrite(writeTree.visibleWrites, path, snap);\r\n }\r\n writeTree.lastWriteId = writeId;\r\n}\r\n/**\r\n * Record a new merge from user code.\r\n */\r\nfunction writeTreeAddMerge(writeTree, path, changedChildren, writeId) {\r\n assert(writeId > writeTree.lastWriteId, 'Stacking an older merge on top of newer ones');\r\n writeTree.allWrites.push({\r\n path,\r\n children: changedChildren,\r\n writeId,\r\n visible: true\r\n });\r\n writeTree.visibleWrites = compoundWriteAddWrites(writeTree.visibleWrites, path, changedChildren);\r\n writeTree.lastWriteId = writeId;\r\n}\r\nfunction writeTreeGetWrite(writeTree, writeId) {\r\n for (let i = 0; i < writeTree.allWrites.length; i++) {\r\n const record = writeTree.allWrites[i];\r\n if (record.writeId === writeId) {\r\n return record;\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * Remove a write (either an overwrite or merge) that has been successfully acknowledge by the server. Recalculates\r\n * the tree if necessary. We return true if it may have been visible, meaning views need to reevaluate.\r\n *\r\n * @returns true if the write may have been visible (meaning we'll need to reevaluate / raise\r\n * events as a result).\r\n */\r\nfunction writeTreeRemoveWrite(writeTree, writeId) {\r\n // Note: disabling this check. It could be a transaction that preempted another transaction, and thus was applied\r\n // out of order.\r\n //const validClear = revert || this.allWrites_.length === 0 || writeId <= this.allWrites_[0].writeId;\r\n //assert(validClear, \"Either we don't have this write, or it's the first one in the queue\");\r\n const idx = writeTree.allWrites.findIndex(s => {\r\n return s.writeId === writeId;\r\n });\r\n assert(idx >= 0, 'removeWrite called with nonexistent writeId.');\r\n const writeToRemove = writeTree.allWrites[idx];\r\n writeTree.allWrites.splice(idx, 1);\r\n let removedWriteWasVisible = writeToRemove.visible;\r\n let removedWriteOverlapsWithOtherWrites = false;\r\n let i = writeTree.allWrites.length - 1;\r\n while (removedWriteWasVisible && i >= 0) {\r\n const currentWrite = writeTree.allWrites[i];\r\n if (currentWrite.visible) {\r\n if (i >= idx &&\r\n writeTreeRecordContainsPath_(currentWrite, writeToRemove.path)) {\r\n // The removed write was completely shadowed by a subsequent write.\r\n removedWriteWasVisible = false;\r\n }\r\n else if (pathContains(writeToRemove.path, currentWrite.path)) {\r\n // Either we're covering some writes or they're covering part of us (depending on which came first).\r\n removedWriteOverlapsWithOtherWrites = true;\r\n }\r\n }\r\n i--;\r\n }\r\n if (!removedWriteWasVisible) {\r\n return false;\r\n }\r\n else if (removedWriteOverlapsWithOtherWrites) {\r\n // There's some shadowing going on. Just rebuild the visible writes from scratch.\r\n writeTreeResetTree_(writeTree);\r\n return true;\r\n }\r\n else {\r\n // There's no shadowing. We can safely just remove the write(s) from visibleWrites.\r\n if (writeToRemove.snap) {\r\n writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, writeToRemove.path);\r\n }\r\n else {\r\n const children = writeToRemove.children;\r\n each(children, (childName) => {\r\n writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, pathChild(writeToRemove.path, childName));\r\n });\r\n }\r\n return true;\r\n }\r\n}\r\nfunction writeTreeRecordContainsPath_(writeRecord, path) {\r\n if (writeRecord.snap) {\r\n return pathContains(writeRecord.path, path);\r\n }\r\n else {\r\n for (const childName in writeRecord.children) {\r\n if (writeRecord.children.hasOwnProperty(childName) &&\r\n pathContains(pathChild(writeRecord.path, childName), path)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n/**\r\n * Re-layer the writes and merges into a tree so we can efficiently calculate event snapshots\r\n */\r\nfunction writeTreeResetTree_(writeTree) {\r\n writeTree.visibleWrites = writeTreeLayerTree_(writeTree.allWrites, writeTreeDefaultFilter_, newEmptyPath());\r\n if (writeTree.allWrites.length > 0) {\r\n writeTree.lastWriteId =\r\n writeTree.allWrites[writeTree.allWrites.length - 1].writeId;\r\n }\r\n else {\r\n writeTree.lastWriteId = -1;\r\n }\r\n}\r\n/**\r\n * The default filter used when constructing the tree. Keep everything that's visible.\r\n */\r\nfunction writeTreeDefaultFilter_(write) {\r\n return write.visible;\r\n}\r\n/**\r\n * Static method. Given an array of WriteRecords, a filter for which ones to include, and a path, construct the tree of\r\n * event data at that path.\r\n */\r\nfunction writeTreeLayerTree_(writes, filter, treeRoot) {\r\n let compoundWrite = CompoundWrite.empty();\r\n for (let i = 0; i < writes.length; ++i) {\r\n const write = writes[i];\r\n // Theory, a later set will either:\r\n // a) abort a relevant transaction, so no need to worry about excluding it from calculating that transaction\r\n // b) not be relevant to a transaction (separate branch), so again will not affect the data for that transaction\r\n if (filter(write)) {\r\n const writePath = write.path;\r\n let relativePath;\r\n if (write.snap) {\r\n if (pathContains(treeRoot, writePath)) {\r\n relativePath = newRelativePath(treeRoot, writePath);\r\n compoundWrite = compoundWriteAddWrite(compoundWrite, relativePath, write.snap);\r\n }\r\n else if (pathContains(writePath, treeRoot)) {\r\n relativePath = newRelativePath(writePath, treeRoot);\r\n compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), write.snap.getChild(relativePath));\r\n }\r\n else ;\r\n }\r\n else if (write.children) {\r\n if (pathContains(treeRoot, writePath)) {\r\n relativePath = newRelativePath(treeRoot, writePath);\r\n compoundWrite = compoundWriteAddWrites(compoundWrite, relativePath, write.children);\r\n }\r\n else if (pathContains(writePath, treeRoot)) {\r\n relativePath = newRelativePath(writePath, treeRoot);\r\n if (pathIsEmpty(relativePath)) {\r\n compoundWrite = compoundWriteAddWrites(compoundWrite, newEmptyPath(), write.children);\r\n }\r\n else {\r\n const child = safeGet(write.children, pathGetFront(relativePath));\r\n if (child) {\r\n // There exists a child in this node that matches the root path\r\n const deepNode = child.getChild(pathPopFront(relativePath));\r\n compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), deepNode);\r\n }\r\n }\r\n }\r\n else ;\r\n }\r\n else {\r\n throw assertionError('WriteRecord should have .snap or .children');\r\n }\r\n }\r\n }\r\n return compoundWrite;\r\n}\r\n/**\r\n * Given optional, underlying server data, and an optional set of constraints (exclude some sets, include hidden\r\n * writes), attempt to calculate a complete snapshot for the given path\r\n *\r\n * @param writeIdsToExclude - An optional set to be excluded\r\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\r\n */\r\nfunction writeTreeCalcCompleteEventCache(writeTree, treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n if (!writeIdsToExclude && !includeHiddenWrites) {\r\n const shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);\r\n if (shadowingNode != null) {\r\n return shadowingNode;\r\n }\r\n else {\r\n const subMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n if (compoundWriteIsEmpty(subMerge)) {\r\n return completeServerCache;\r\n }\r\n else if (completeServerCache == null &&\r\n !compoundWriteHasCompleteWrite(subMerge, newEmptyPath())) {\r\n // We wouldn't have a complete snapshot, since there's no underlying data and no complete shadow\r\n return null;\r\n }\r\n else {\r\n const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n return compoundWriteApply(subMerge, layeredCache);\r\n }\r\n }\r\n }\r\n else {\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n if (!includeHiddenWrites && compoundWriteIsEmpty(merge)) {\r\n return completeServerCache;\r\n }\r\n else {\r\n // If the server cache is null, and we don't have a complete cache, we need to return null\r\n if (!includeHiddenWrites &&\r\n completeServerCache == null &&\r\n !compoundWriteHasCompleteWrite(merge, newEmptyPath())) {\r\n return null;\r\n }\r\n else {\r\n const filter = function (write) {\r\n return ((write.visible || includeHiddenWrites) &&\r\n (!writeIdsToExclude ||\r\n !~writeIdsToExclude.indexOf(write.writeId)) &&\r\n (pathContains(write.path, treePath) ||\r\n pathContains(treePath, write.path)));\r\n };\r\n const mergeAtPath = writeTreeLayerTree_(writeTree.allWrites, filter, treePath);\r\n const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n return compoundWriteApply(mergeAtPath, layeredCache);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * With optional, underlying server data, attempt to return a children node of children that we have complete data for.\r\n * Used when creating new views, to pre-fill their complete event children snapshot.\r\n */\r\nfunction writeTreeCalcCompleteEventChildren(writeTree, treePath, completeServerChildren) {\r\n let completeChildren = ChildrenNode.EMPTY_NODE;\r\n const topLevelSet = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);\r\n if (topLevelSet) {\r\n if (!topLevelSet.isLeafNode()) {\r\n // we're shadowing everything. Return the children.\r\n topLevelSet.forEachChild(PRIORITY_INDEX, (childName, childSnap) => {\r\n completeChildren = completeChildren.updateImmediateChild(childName, childSnap);\r\n });\r\n }\r\n return completeChildren;\r\n }\r\n else if (completeServerChildren) {\r\n // Layer any children we have on top of this\r\n // We know we don't have a top-level set, so just enumerate existing children\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n completeServerChildren.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n const node = compoundWriteApply(compoundWriteChildCompoundWrite(merge, new Path(childName)), childNode);\r\n completeChildren = completeChildren.updateImmediateChild(childName, node);\r\n });\r\n // Add any complete children we have from the set\r\n compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\r\n completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n });\r\n return completeChildren;\r\n }\r\n else {\r\n // We don't have anything to layer on top of. Layer on any children we have\r\n // Note that we can return an empty snap if we have a defined delete\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\r\n completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n });\r\n return completeChildren;\r\n }\r\n}\r\n/**\r\n * Given that the underlying server data has updated, determine what, if anything, needs to be\r\n * applied to the event cache.\r\n *\r\n * Possibilities:\r\n *\r\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n *\r\n * 2. Some write is completely shadowing. No events to be raised\r\n *\r\n * 3. Is partially shadowed. Events\r\n *\r\n * Either existingEventSnap or existingServerSnap must exist\r\n */\r\nfunction writeTreeCalcEventCacheAfterServerOverwrite(writeTree, treePath, childPath, existingEventSnap, existingServerSnap) {\r\n assert(existingEventSnap || existingServerSnap, 'Either existingEventSnap or existingServerSnap must exist');\r\n const path = pathChild(treePath, childPath);\r\n if (compoundWriteHasCompleteWrite(writeTree.visibleWrites, path)) {\r\n // At this point we can probably guarantee that we're in case 2, meaning no events\r\n // May need to check visibility while doing the findRootMostValueAndPath call\r\n return null;\r\n }\r\n else {\r\n // No complete shadowing. We're either partially shadowing or not shadowing at all.\r\n const childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);\r\n if (compoundWriteIsEmpty(childMerge)) {\r\n // We're not shadowing at all. Case 1\r\n return existingServerSnap.getChild(childPath);\r\n }\r\n else {\r\n // This could be more efficient if the serverNode + updates doesn't change the eventSnap\r\n // However this is tricky to find out, since user updates don't necessary change the server\r\n // snap, e.g. priority updates on empty nodes, or deep deletes. Another special case is if the server\r\n // adds nodes, but doesn't change any existing writes. It is therefore not enough to\r\n // only check if the updates change the serverNode.\r\n // Maybe check if the merge tree contains these special cases and only do a full overwrite in that case?\r\n return compoundWriteApply(childMerge, existingServerSnap.getChild(childPath));\r\n }\r\n }\r\n}\r\n/**\r\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n * complete child for this ChildKey.\r\n */\r\nfunction writeTreeCalcCompleteChild(writeTree, treePath, childKey, existingServerSnap) {\r\n const path = pathChild(treePath, childKey);\r\n const shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\r\n if (shadowingNode != null) {\r\n return shadowingNode;\r\n }\r\n else {\r\n if (existingServerSnap.isCompleteForChild(childKey)) {\r\n const childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);\r\n return compoundWriteApply(childMerge, existingServerSnap.getNode().getImmediateChild(childKey));\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n}\r\n/**\r\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n * a higher path, this will return the child of that write relative to the write and this path.\r\n * Returns null if there is no write at this path.\r\n */\r\nfunction writeTreeShadowingWrite(writeTree, path) {\r\n return compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\r\n}\r\n/**\r\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n * the window, but may now be in the window.\r\n */\r\nfunction writeTreeCalcIndexedSlice(writeTree, treePath, completeServerData, startPost, count, reverse, index) {\r\n let toIterate;\r\n const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n const shadowingNode = compoundWriteGetCompleteNode(merge, newEmptyPath());\r\n if (shadowingNode != null) {\r\n toIterate = shadowingNode;\r\n }\r\n else if (completeServerData != null) {\r\n toIterate = compoundWriteApply(merge, completeServerData);\r\n }\r\n else {\r\n // no children to iterate on\r\n return [];\r\n }\r\n toIterate = toIterate.withIndex(index);\r\n if (!toIterate.isEmpty() && !toIterate.isLeafNode()) {\r\n const nodes = [];\r\n const cmp = index.getCompare();\r\n const iter = reverse\r\n ? toIterate.getReverseIteratorFrom(startPost, index)\r\n : toIterate.getIteratorFrom(startPost, index);\r\n let next = iter.getNext();\r\n while (next && nodes.length < count) {\r\n if (cmp(next, startPost) !== 0) {\r\n nodes.push(next);\r\n }\r\n next = iter.getNext();\r\n }\r\n return nodes;\r\n }\r\n else {\r\n return [];\r\n }\r\n}\r\nfunction newWriteTree() {\r\n return {\r\n visibleWrites: CompoundWrite.empty(),\r\n allWrites: [],\r\n lastWriteId: -1\r\n };\r\n}\r\n/**\r\n * If possible, returns a complete event cache, using the underlying server data if possible. In addition, can be used\r\n * to get a cache that includes hidden writes, and excludes arbitrary writes. Note that customizing the returned node\r\n * can lead to a more expensive calculation.\r\n *\r\n * @param writeIdsToExclude - Optional writes to exclude.\r\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\r\n */\r\nfunction writeTreeRefCalcCompleteEventCache(writeTreeRef, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n return writeTreeCalcCompleteEventCache(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites);\r\n}\r\n/**\r\n * If possible, returns a children node containing all of the complete children we have data for. The returned data is a\r\n * mix of the given server data and write data.\r\n *\r\n */\r\nfunction writeTreeRefCalcCompleteEventChildren(writeTreeRef, completeServerChildren) {\r\n return writeTreeCalcCompleteEventChildren(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerChildren);\r\n}\r\n/**\r\n * Given that either the underlying server data has updated or the outstanding writes have updated, determine what,\r\n * if anything, needs to be applied to the event cache.\r\n *\r\n * Possibilities:\r\n *\r\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n *\r\n * 2. Some write is completely shadowing. No events to be raised\r\n *\r\n * 3. Is partially shadowed. Events should be raised\r\n *\r\n * Either existingEventSnap or existingServerSnap must exist, this is validated via an assert\r\n *\r\n *\r\n */\r\nfunction writeTreeRefCalcEventCacheAfterServerOverwrite(writeTreeRef, path, existingEventSnap, existingServerSnap) {\r\n return writeTreeCalcEventCacheAfterServerOverwrite(writeTreeRef.writeTree, writeTreeRef.treePath, path, existingEventSnap, existingServerSnap);\r\n}\r\n/**\r\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n * a higher path, this will return the child of that write relative to the write and this path.\r\n * Returns null if there is no write at this path.\r\n *\r\n */\r\nfunction writeTreeRefShadowingWrite(writeTreeRef, path) {\r\n return writeTreeShadowingWrite(writeTreeRef.writeTree, pathChild(writeTreeRef.treePath, path));\r\n}\r\n/**\r\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n * the window, but may now be in the window\r\n */\r\nfunction writeTreeRefCalcIndexedSlice(writeTreeRef, completeServerData, startPost, count, reverse, index) {\r\n return writeTreeCalcIndexedSlice(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerData, startPost, count, reverse, index);\r\n}\r\n/**\r\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n * complete child for this ChildKey.\r\n */\r\nfunction writeTreeRefCalcCompleteChild(writeTreeRef, childKey, existingServerCache) {\r\n return writeTreeCalcCompleteChild(writeTreeRef.writeTree, writeTreeRef.treePath, childKey, existingServerCache);\r\n}\r\n/**\r\n * Return a WriteTreeRef for a child.\r\n */\r\nfunction writeTreeRefChild(writeTreeRef, childName) {\r\n return newWriteTreeRef(pathChild(writeTreeRef.treePath, childName), writeTreeRef.writeTree);\r\n}\r\nfunction newWriteTreeRef(path, writeTree) {\r\n return {\r\n treePath: path,\r\n writeTree\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ChildChangeAccumulator {\r\n constructor() {\r\n this.changeMap = new Map();\r\n }\r\n trackChildChange(change) {\r\n const type = change.type;\r\n const childKey = change.childName;\r\n assert(type === \"child_added\" /* ChangeType.CHILD_ADDED */ ||\r\n type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ ||\r\n type === \"child_removed\" /* ChangeType.CHILD_REMOVED */, 'Only child changes supported for tracking');\r\n assert(childKey !== '.priority', 'Only non-priority child changes can be tracked.');\r\n const oldChange = this.changeMap.get(childKey);\r\n if (oldChange) {\r\n const oldType = oldChange.type;\r\n if (type === \"child_added\" /* ChangeType.CHILD_ADDED */ &&\r\n oldType === \"child_removed\" /* ChangeType.CHILD_REMOVED */) {\r\n this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.snapshotNode));\r\n }\r\n else if (type === \"child_removed\" /* ChangeType.CHILD_REMOVED */ &&\r\n oldType === \"child_added\" /* ChangeType.CHILD_ADDED */) {\r\n this.changeMap.delete(childKey);\r\n }\r\n else if (type === \"child_removed\" /* ChangeType.CHILD_REMOVED */ &&\r\n oldType === \"child_changed\" /* ChangeType.CHILD_CHANGED */) {\r\n this.changeMap.set(childKey, changeChildRemoved(childKey, oldChange.oldSnap));\r\n }\r\n else if (type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\r\n oldType === \"child_added\" /* ChangeType.CHILD_ADDED */) {\r\n this.changeMap.set(childKey, changeChildAdded(childKey, change.snapshotNode));\r\n }\r\n else if (type === \"child_changed\" /* ChangeType.CHILD_CHANGED */ &&\r\n oldType === \"child_changed\" /* ChangeType.CHILD_CHANGED */) {\r\n this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.oldSnap));\r\n }\r\n else {\r\n throw assertionError('Illegal combination of changes: ' +\r\n change +\r\n ' occurred after ' +\r\n oldChange);\r\n }\r\n }\r\n else {\r\n this.changeMap.set(childKey, change);\r\n }\r\n }\r\n getChanges() {\r\n return Array.from(this.changeMap.values());\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of CompleteChildSource that never returns any additional children\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nclass NoCompleteChildSource_ {\r\n getCompleteChild(childKey) {\r\n return null;\r\n }\r\n getChildAfterChild(index, child, reverse) {\r\n return null;\r\n }\r\n}\r\n/**\r\n * Singleton instance.\r\n */\r\nconst NO_COMPLETE_CHILD_SOURCE = new NoCompleteChildSource_();\r\n/**\r\n * An implementation of CompleteChildSource that uses a WriteTree in addition to any other server data or\r\n * old event caches available to calculate complete children.\r\n */\r\nclass WriteTreeCompleteChildSource {\r\n constructor(writes_, viewCache_, optCompleteServerCache_ = null) {\r\n this.writes_ = writes_;\r\n this.viewCache_ = viewCache_;\r\n this.optCompleteServerCache_ = optCompleteServerCache_;\r\n }\r\n getCompleteChild(childKey) {\r\n const node = this.viewCache_.eventCache;\r\n if (node.isCompleteForChild(childKey)) {\r\n return node.getNode().getImmediateChild(childKey);\r\n }\r\n else {\r\n const serverNode = this.optCompleteServerCache_ != null\r\n ? new CacheNode(this.optCompleteServerCache_, true, false)\r\n : this.viewCache_.serverCache;\r\n return writeTreeRefCalcCompleteChild(this.writes_, childKey, serverNode);\r\n }\r\n }\r\n getChildAfterChild(index, child, reverse) {\r\n const completeServerData = this.optCompleteServerCache_ != null\r\n ? this.optCompleteServerCache_\r\n : viewCacheGetCompleteServerSnap(this.viewCache_);\r\n const nodes = writeTreeRefCalcIndexedSlice(this.writes_, completeServerData, child, 1, reverse, index);\r\n if (nodes.length === 0) {\r\n return null;\r\n }\r\n else {\r\n return nodes[0];\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newViewProcessor(filter) {\r\n return { filter };\r\n}\r\nfunction viewProcessorAssertIndexed(viewProcessor, viewCache) {\r\n assert(viewCache.eventCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Event snap not indexed');\r\n assert(viewCache.serverCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Server snap not indexed');\r\n}\r\nfunction viewProcessorApplyOperation(viewProcessor, oldViewCache, operation, writesCache, completeCache) {\r\n const accumulator = new ChildChangeAccumulator();\r\n let newViewCache, filterServerNode;\r\n if (operation.type === OperationType.OVERWRITE) {\r\n const overwrite = operation;\r\n if (overwrite.source.fromUser) {\r\n newViewCache = viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, accumulator);\r\n }\r\n else {\r\n assert(overwrite.source.fromServer, 'Unknown source.');\r\n // We filter the node if it's a tagged update or the node has been previously filtered and the\r\n // update is not at the root in which case it is ok (and necessary) to mark the node unfiltered\r\n // again\r\n filterServerNode =\r\n overwrite.source.tagged ||\r\n (oldViewCache.serverCache.isFiltered() && !pathIsEmpty(overwrite.path));\r\n newViewCache = viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n }\r\n else if (operation.type === OperationType.MERGE) {\r\n const merge = operation;\r\n if (merge.source.fromUser) {\r\n newViewCache = viewProcessorApplyUserMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, accumulator);\r\n }\r\n else {\r\n assert(merge.source.fromServer, 'Unknown source.');\r\n // We filter the node if it's a tagged update or the node has been previously filtered\r\n filterServerNode =\r\n merge.source.tagged || oldViewCache.serverCache.isFiltered();\r\n newViewCache = viewProcessorApplyServerMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n }\r\n else if (operation.type === OperationType.ACK_USER_WRITE) {\r\n const ackUserWrite = operation;\r\n if (!ackUserWrite.revert) {\r\n newViewCache = viewProcessorAckUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, ackUserWrite.affectedTree, writesCache, completeCache, accumulator);\r\n }\r\n else {\r\n newViewCache = viewProcessorRevertUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, writesCache, completeCache, accumulator);\r\n }\r\n }\r\n else if (operation.type === OperationType.LISTEN_COMPLETE) {\r\n newViewCache = viewProcessorListenComplete(viewProcessor, oldViewCache, operation.path, writesCache, accumulator);\r\n }\r\n else {\r\n throw assertionError('Unknown operation type: ' + operation.type);\r\n }\r\n const changes = accumulator.getChanges();\r\n viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, changes);\r\n return { viewCache: newViewCache, changes };\r\n}\r\nfunction viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, accumulator) {\r\n const eventSnap = newViewCache.eventCache;\r\n if (eventSnap.isFullyInitialized()) {\r\n const isLeafOrEmpty = eventSnap.getNode().isLeafNode() || eventSnap.getNode().isEmpty();\r\n const oldCompleteSnap = viewCacheGetCompleteEventSnap(oldViewCache);\r\n if (accumulator.length > 0 ||\r\n !oldViewCache.eventCache.isFullyInitialized() ||\r\n (isLeafOrEmpty && !eventSnap.getNode().equals(oldCompleteSnap)) ||\r\n !eventSnap.getNode().getPriority().equals(oldCompleteSnap.getPriority())) {\r\n accumulator.push(changeValue(viewCacheGetCompleteEventSnap(newViewCache)));\r\n }\r\n }\r\n}\r\nfunction viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, viewCache, changePath, writesCache, source, accumulator) {\r\n const oldEventSnap = viewCache.eventCache;\r\n if (writeTreeRefShadowingWrite(writesCache, changePath) != null) {\r\n // we have a shadowing write, ignore changes\r\n return viewCache;\r\n }\r\n else {\r\n let newEventCache, serverNode;\r\n if (pathIsEmpty(changePath)) {\r\n // TODO: figure out how this plays with \"sliding ack windows\"\r\n assert(viewCache.serverCache.isFullyInitialized(), 'If change path is empty, we must have complete server data');\r\n if (viewCache.serverCache.isFiltered()) {\r\n // We need to special case this, because we need to only apply writes to complete children, or\r\n // we might end up raising events for incomplete children. If the server data is filtered deep\r\n // writes cannot be guaranteed to be complete\r\n const serverCache = viewCacheGetCompleteServerSnap(viewCache);\r\n const completeChildren = serverCache instanceof ChildrenNode\r\n ? serverCache\r\n : ChildrenNode.EMPTY_NODE;\r\n const completeEventChildren = writeTreeRefCalcCompleteEventChildren(writesCache, completeChildren);\r\n newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeEventChildren, accumulator);\r\n }\r\n else {\r\n const completeNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeNode, accumulator);\r\n }\r\n }\r\n else {\r\n const childKey = pathGetFront(changePath);\r\n if (childKey === '.priority') {\r\n assert(pathGetLength(changePath) === 1, \"Can't have a priority with additional path components\");\r\n const oldEventNode = oldEventSnap.getNode();\r\n serverNode = viewCache.serverCache.getNode();\r\n // we might have overwrites for this priority\r\n const updatedPriority = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventNode, serverNode);\r\n if (updatedPriority != null) {\r\n newEventCache = viewProcessor.filter.updatePriority(oldEventNode, updatedPriority);\r\n }\r\n else {\r\n // priority didn't change, keep old node\r\n newEventCache = oldEventSnap.getNode();\r\n }\r\n }\r\n else {\r\n const childChangePath = pathPopFront(changePath);\r\n // update child\r\n let newEventChild;\r\n if (oldEventSnap.isCompleteForChild(childKey)) {\r\n serverNode = viewCache.serverCache.getNode();\r\n const eventChildUpdate = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventSnap.getNode(), serverNode);\r\n if (eventChildUpdate != null) {\r\n newEventChild = oldEventSnap\r\n .getNode()\r\n .getImmediateChild(childKey)\r\n .updateChild(childChangePath, eventChildUpdate);\r\n }\r\n else {\r\n // Nothing changed, just keep the old child\r\n newEventChild = oldEventSnap.getNode().getImmediateChild(childKey);\r\n }\r\n }\r\n else {\r\n newEventChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);\r\n }\r\n if (newEventChild != null) {\r\n newEventCache = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newEventChild, childChangePath, source, accumulator);\r\n }\r\n else {\r\n // no complete child available or no change\r\n newEventCache = oldEventSnap.getNode();\r\n }\r\n }\r\n }\r\n return viewCacheUpdateEventSnap(viewCache, newEventCache, oldEventSnap.isFullyInitialized() || pathIsEmpty(changePath), viewProcessor.filter.filtersNodes());\r\n }\r\n}\r\nfunction viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, filterServerNode, accumulator) {\r\n const oldServerSnap = oldViewCache.serverCache;\r\n let newServerCache;\r\n const serverFilter = filterServerNode\r\n ? viewProcessor.filter\r\n : viewProcessor.filter.getIndexedFilter();\r\n if (pathIsEmpty(changePath)) {\r\n newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), changedSnap, null);\r\n }\r\n else if (serverFilter.filtersNodes() && !oldServerSnap.isFiltered()) {\r\n // we want to filter the server node, but we didn't filter the server node yet, so simulate a full update\r\n const newServerNode = oldServerSnap\r\n .getNode()\r\n .updateChild(changePath, changedSnap);\r\n newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), newServerNode, null);\r\n }\r\n else {\r\n const childKey = pathGetFront(changePath);\r\n if (!oldServerSnap.isCompleteForPath(changePath) &&\r\n pathGetLength(changePath) > 1) {\r\n // We don't update incomplete nodes with updates intended for other listeners\r\n return oldViewCache;\r\n }\r\n const childChangePath = pathPopFront(changePath);\r\n const childNode = oldServerSnap.getNode().getImmediateChild(childKey);\r\n const newChildNode = childNode.updateChild(childChangePath, changedSnap);\r\n if (childKey === '.priority') {\r\n newServerCache = serverFilter.updatePriority(oldServerSnap.getNode(), newChildNode);\r\n }\r\n else {\r\n newServerCache = serverFilter.updateChild(oldServerSnap.getNode(), childKey, newChildNode, childChangePath, NO_COMPLETE_CHILD_SOURCE, null);\r\n }\r\n }\r\n const newViewCache = viewCacheUpdateServerSnap(oldViewCache, newServerCache, oldServerSnap.isFullyInitialized() || pathIsEmpty(changePath), serverFilter.filtersNodes());\r\n const source = new WriteTreeCompleteChildSource(writesCache, newViewCache, completeCache);\r\n return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, changePath, writesCache, source, accumulator);\r\n}\r\nfunction viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, accumulator) {\r\n const oldEventSnap = oldViewCache.eventCache;\r\n let newViewCache, newEventCache;\r\n const source = new WriteTreeCompleteChildSource(writesCache, oldViewCache, completeCache);\r\n if (pathIsEmpty(changePath)) {\r\n newEventCache = viewProcessor.filter.updateFullNode(oldViewCache.eventCache.getNode(), changedSnap, accumulator);\r\n newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, true, viewProcessor.filter.filtersNodes());\r\n }\r\n else {\r\n const childKey = pathGetFront(changePath);\r\n if (childKey === '.priority') {\r\n newEventCache = viewProcessor.filter.updatePriority(oldViewCache.eventCache.getNode(), changedSnap);\r\n newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, oldEventSnap.isFullyInitialized(), oldEventSnap.isFiltered());\r\n }\r\n else {\r\n const childChangePath = pathPopFront(changePath);\r\n const oldChild = oldEventSnap.getNode().getImmediateChild(childKey);\r\n let newChild;\r\n if (pathIsEmpty(childChangePath)) {\r\n // Child overwrite, we can replace the child\r\n newChild = changedSnap;\r\n }\r\n else {\r\n const childNode = source.getCompleteChild(childKey);\r\n if (childNode != null) {\r\n if (pathGetBack(childChangePath) === '.priority' &&\r\n childNode.getChild(pathParent(childChangePath)).isEmpty()) {\r\n // This is a priority update on an empty node. If this node exists on the server, the\r\n // server will send down the priority in the update, so ignore for now\r\n newChild = childNode;\r\n }\r\n else {\r\n newChild = childNode.updateChild(childChangePath, changedSnap);\r\n }\r\n }\r\n else {\r\n // There is no complete child node available\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n }\r\n if (!oldChild.equals(newChild)) {\r\n const newEventSnap = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newChild, childChangePath, source, accumulator);\r\n newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventSnap, oldEventSnap.isFullyInitialized(), viewProcessor.filter.filtersNodes());\r\n }\r\n else {\r\n newViewCache = oldViewCache;\r\n }\r\n }\r\n }\r\n return newViewCache;\r\n}\r\nfunction viewProcessorCacheHasChild(viewCache, childKey) {\r\n return viewCache.eventCache.isCompleteForChild(childKey);\r\n}\r\nfunction viewProcessorApplyUserMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, accumulator) {\r\n // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n // window leaving room for new items. It's important we process these changes first, so we\r\n // iterate the changes twice, first processing any that affect items currently in view.\r\n // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n // and event snap. I'm not sure if this will result in edge cases when a child is in one but\r\n // not the other.\r\n let curViewCache = viewCache;\r\n changedChildren.foreach((relativePath, childNode) => {\r\n const writePath = pathChild(path, relativePath);\r\n if (viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\r\n curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n }\r\n });\r\n changedChildren.foreach((relativePath, childNode) => {\r\n const writePath = pathChild(path, relativePath);\r\n if (!viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\r\n curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n }\r\n });\r\n return curViewCache;\r\n}\r\nfunction viewProcessorApplyMerge(viewProcessor, node, merge) {\r\n merge.foreach((relativePath, childNode) => {\r\n node = node.updateChild(relativePath, childNode);\r\n });\r\n return node;\r\n}\r\nfunction viewProcessorApplyServerMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, filterServerNode, accumulator) {\r\n // If we don't have a cache yet, this merge was intended for a previously listen in the same location. Ignore it and\r\n // wait for the complete data update coming soon.\r\n if (viewCache.serverCache.getNode().isEmpty() &&\r\n !viewCache.serverCache.isFullyInitialized()) {\r\n return viewCache;\r\n }\r\n // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n // window leaving room for new items. It's important we process these changes first, so we\r\n // iterate the changes twice, first processing any that affect items currently in view.\r\n // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n // and event snap. I'm not sure if this will result in edge cases when a child is in one but\r\n // not the other.\r\n let curViewCache = viewCache;\r\n let viewMergeTree;\r\n if (pathIsEmpty(path)) {\r\n viewMergeTree = changedChildren;\r\n }\r\n else {\r\n viewMergeTree = new ImmutableTree(null).setTree(path, changedChildren);\r\n }\r\n const serverNode = viewCache.serverCache.getNode();\r\n viewMergeTree.children.inorderTraversal((childKey, childTree) => {\r\n if (serverNode.hasChild(childKey)) {\r\n const serverChild = viewCache.serverCache\r\n .getNode()\r\n .getImmediateChild(childKey);\r\n const newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childTree);\r\n curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n }\r\n });\r\n viewMergeTree.children.inorderTraversal((childKey, childMergeTree) => {\r\n const isUnknownDeepMerge = !viewCache.serverCache.isCompleteForChild(childKey) &&\r\n childMergeTree.value === null;\r\n if (!serverNode.hasChild(childKey) && !isUnknownDeepMerge) {\r\n const serverChild = viewCache.serverCache\r\n .getNode()\r\n .getImmediateChild(childKey);\r\n const newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childMergeTree);\r\n curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n }\r\n });\r\n return curViewCache;\r\n}\r\nfunction viewProcessorAckUserWrite(viewProcessor, viewCache, ackPath, affectedTree, writesCache, completeCache, accumulator) {\r\n if (writeTreeRefShadowingWrite(writesCache, ackPath) != null) {\r\n return viewCache;\r\n }\r\n // Only filter server node if it is currently filtered\r\n const filterServerNode = viewCache.serverCache.isFiltered();\r\n // Essentially we'll just get our existing server cache for the affected paths and re-apply it as a server update\r\n // now that it won't be shadowed.\r\n const serverCache = viewCache.serverCache;\r\n if (affectedTree.value != null) {\r\n // This is an overwrite.\r\n if ((pathIsEmpty(ackPath) && serverCache.isFullyInitialized()) ||\r\n serverCache.isCompleteForPath(ackPath)) {\r\n return viewProcessorApplyServerOverwrite(viewProcessor, viewCache, ackPath, serverCache.getNode().getChild(ackPath), writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n else if (pathIsEmpty(ackPath)) {\r\n // This is a goofy edge case where we are acking data at this location but don't have full data. We\r\n // should just re-apply whatever we have in our cache as a merge.\r\n let changedChildren = new ImmutableTree(null);\r\n serverCache.getNode().forEachChild(KEY_INDEX, (name, node) => {\r\n changedChildren = changedChildren.set(new Path(name), node);\r\n });\r\n return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n else {\r\n return viewCache;\r\n }\r\n }\r\n else {\r\n // This is a merge.\r\n let changedChildren = new ImmutableTree(null);\r\n affectedTree.foreach((mergePath, value) => {\r\n const serverCachePath = pathChild(ackPath, mergePath);\r\n if (serverCache.isCompleteForPath(serverCachePath)) {\r\n changedChildren = changedChildren.set(mergePath, serverCache.getNode().getChild(serverCachePath));\r\n }\r\n });\r\n return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren, writesCache, completeCache, filterServerNode, accumulator);\r\n }\r\n}\r\nfunction viewProcessorListenComplete(viewProcessor, viewCache, path, writesCache, accumulator) {\r\n const oldServerNode = viewCache.serverCache;\r\n const newViewCache = viewCacheUpdateServerSnap(viewCache, oldServerNode.getNode(), oldServerNode.isFullyInitialized() || pathIsEmpty(path), oldServerNode.isFiltered());\r\n return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, path, writesCache, NO_COMPLETE_CHILD_SOURCE, accumulator);\r\n}\r\nfunction viewProcessorRevertUserWrite(viewProcessor, viewCache, path, writesCache, completeServerCache, accumulator) {\r\n let complete;\r\n if (writeTreeRefShadowingWrite(writesCache, path) != null) {\r\n return viewCache;\r\n }\r\n else {\r\n const source = new WriteTreeCompleteChildSource(writesCache, viewCache, completeServerCache);\r\n const oldEventCache = viewCache.eventCache.getNode();\r\n let newEventCache;\r\n if (pathIsEmpty(path) || pathGetFront(path) === '.priority') {\r\n let newNode;\r\n if (viewCache.serverCache.isFullyInitialized()) {\r\n newNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n }\r\n else {\r\n const serverChildren = viewCache.serverCache.getNode();\r\n assert(serverChildren instanceof ChildrenNode, 'serverChildren would be complete if leaf node');\r\n newNode = writeTreeRefCalcCompleteEventChildren(writesCache, serverChildren);\r\n }\r\n newNode = newNode;\r\n newEventCache = viewProcessor.filter.updateFullNode(oldEventCache, newNode, accumulator);\r\n }\r\n else {\r\n const childKey = pathGetFront(path);\r\n let newChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);\r\n if (newChild == null &&\r\n viewCache.serverCache.isCompleteForChild(childKey)) {\r\n newChild = oldEventCache.getImmediateChild(childKey);\r\n }\r\n if (newChild != null) {\r\n newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, newChild, pathPopFront(path), source, accumulator);\r\n }\r\n else if (viewCache.eventCache.getNode().hasChild(childKey)) {\r\n // No complete child available, delete the existing one, if any\r\n newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, ChildrenNode.EMPTY_NODE, pathPopFront(path), source, accumulator);\r\n }\r\n else {\r\n newEventCache = oldEventCache;\r\n }\r\n if (newEventCache.isEmpty() &&\r\n viewCache.serverCache.isFullyInitialized()) {\r\n // We might have reverted all child writes. Maybe the old event was a leaf node\r\n complete = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n if (complete.isLeafNode()) {\r\n newEventCache = viewProcessor.filter.updateFullNode(newEventCache, complete, accumulator);\r\n }\r\n }\r\n }\r\n complete =\r\n viewCache.serverCache.isFullyInitialized() ||\r\n writeTreeRefShadowingWrite(writesCache, newEmptyPath()) != null;\r\n return viewCacheUpdateEventSnap(viewCache, newEventCache, complete, viewProcessor.filter.filtersNodes());\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A view represents a specific location and query that has 1 or more event registrations.\r\n *\r\n * It does several things:\r\n * - Maintains the list of event registrations for this location/query.\r\n * - Maintains a cache of the data visible for this location/query.\r\n * - Applies new operations (via applyOperation), updates the cache, and based on the event\r\n * registrations returns the set of events to be raised.\r\n */\r\nclass View {\r\n constructor(query_, initialViewCache) {\r\n this.query_ = query_;\r\n this.eventRegistrations_ = [];\r\n const params = this.query_._queryParams;\r\n const indexFilter = new IndexedFilter(params.getIndex());\r\n const filter = queryParamsGetNodeFilter(params);\r\n this.processor_ = newViewProcessor(filter);\r\n const initialServerCache = initialViewCache.serverCache;\r\n const initialEventCache = initialViewCache.eventCache;\r\n // Don't filter server node with other filter than index, wait for tagged listen\r\n const serverSnap = indexFilter.updateFullNode(ChildrenNode.EMPTY_NODE, initialServerCache.getNode(), null);\r\n const eventSnap = filter.updateFullNode(ChildrenNode.EMPTY_NODE, initialEventCache.getNode(), null);\r\n const newServerCache = new CacheNode(serverSnap, initialServerCache.isFullyInitialized(), indexFilter.filtersNodes());\r\n const newEventCache = new CacheNode(eventSnap, initialEventCache.isFullyInitialized(), filter.filtersNodes());\r\n this.viewCache_ = newViewCache(newEventCache, newServerCache);\r\n this.eventGenerator_ = new EventGenerator(this.query_);\r\n }\r\n get query() {\r\n return this.query_;\r\n }\r\n}\r\nfunction viewGetServerCache(view) {\r\n return view.viewCache_.serverCache.getNode();\r\n}\r\nfunction viewGetCompleteNode(view) {\r\n return viewCacheGetCompleteEventSnap(view.viewCache_);\r\n}\r\nfunction viewGetCompleteServerCache(view, path) {\r\n const cache = viewCacheGetCompleteServerSnap(view.viewCache_);\r\n if (cache) {\r\n // If this isn't a \"loadsAllData\" view, then cache isn't actually a complete cache and\r\n // we need to see if it contains the child we're interested in.\r\n if (view.query._queryParams.loadsAllData() ||\r\n (!pathIsEmpty(path) &&\r\n !cache.getImmediateChild(pathGetFront(path)).isEmpty())) {\r\n return cache.getChild(path);\r\n }\r\n }\r\n return null;\r\n}\r\nfunction viewIsEmpty(view) {\r\n return view.eventRegistrations_.length === 0;\r\n}\r\nfunction viewAddEventRegistration(view, eventRegistration) {\r\n view.eventRegistrations_.push(eventRegistration);\r\n}\r\n/**\r\n * @param eventRegistration - If null, remove all callbacks.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @returns Cancel events, if cancelError was provided.\r\n */\r\nfunction viewRemoveEventRegistration(view, eventRegistration, cancelError) {\r\n const cancelEvents = [];\r\n if (cancelError) {\r\n assert(eventRegistration == null, 'A cancel should cancel all event registrations.');\r\n const path = view.query._path;\r\n view.eventRegistrations_.forEach(registration => {\r\n const maybeEvent = registration.createCancelEvent(cancelError, path);\r\n if (maybeEvent) {\r\n cancelEvents.push(maybeEvent);\r\n }\r\n });\r\n }\r\n if (eventRegistration) {\r\n let remaining = [];\r\n for (let i = 0; i < view.eventRegistrations_.length; ++i) {\r\n const existing = view.eventRegistrations_[i];\r\n if (!existing.matches(eventRegistration)) {\r\n remaining.push(existing);\r\n }\r\n else if (eventRegistration.hasAnyCallback()) {\r\n // We're removing just this one\r\n remaining = remaining.concat(view.eventRegistrations_.slice(i + 1));\r\n break;\r\n }\r\n }\r\n view.eventRegistrations_ = remaining;\r\n }\r\n else {\r\n view.eventRegistrations_ = [];\r\n }\r\n return cancelEvents;\r\n}\r\n/**\r\n * Applies the given Operation, updates our cache, and returns the appropriate events.\r\n */\r\nfunction viewApplyOperation(view, operation, writesCache, completeServerCache) {\r\n if (operation.type === OperationType.MERGE &&\r\n operation.source.queryId !== null) {\r\n assert(viewCacheGetCompleteServerSnap(view.viewCache_), 'We should always have a full cache before handling merges');\r\n assert(viewCacheGetCompleteEventSnap(view.viewCache_), 'Missing event cache, even though we have a server cache');\r\n }\r\n const oldViewCache = view.viewCache_;\r\n const result = viewProcessorApplyOperation(view.processor_, oldViewCache, operation, writesCache, completeServerCache);\r\n viewProcessorAssertIndexed(view.processor_, result.viewCache);\r\n assert(result.viewCache.serverCache.isFullyInitialized() ||\r\n !oldViewCache.serverCache.isFullyInitialized(), 'Once a server snap is complete, it should never go back');\r\n view.viewCache_ = result.viewCache;\r\n return viewGenerateEventsForChanges_(view, result.changes, result.viewCache.eventCache.getNode(), null);\r\n}\r\nfunction viewGetInitialEvents(view, registration) {\r\n const eventSnap = view.viewCache_.eventCache;\r\n const initialChanges = [];\r\n if (!eventSnap.getNode().isLeafNode()) {\r\n const eventNode = eventSnap.getNode();\r\n eventNode.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n initialChanges.push(changeChildAdded(key, childNode));\r\n });\r\n }\r\n if (eventSnap.isFullyInitialized()) {\r\n initialChanges.push(changeValue(eventSnap.getNode()));\r\n }\r\n return viewGenerateEventsForChanges_(view, initialChanges, eventSnap.getNode(), registration);\r\n}\r\nfunction viewGenerateEventsForChanges_(view, changes, eventCache, eventRegistration) {\r\n const registrations = eventRegistration\r\n ? [eventRegistration]\r\n : view.eventRegistrations_;\r\n return eventGeneratorGenerateEventsForChanges(view.eventGenerator_, changes, eventCache, registrations);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet referenceConstructor$1;\r\n/**\r\n * SyncPoint represents a single location in a SyncTree with 1 or more event registrations, meaning we need to\r\n * maintain 1 or more Views at this location to cache server data and raise appropriate events for server changes\r\n * and user writes (set, transaction, update).\r\n *\r\n * It's responsible for:\r\n * - Maintaining the set of 1 or more views necessary at this location (a SyncPoint with 0 views should be removed).\r\n * - Proxying user / server operations to the views as appropriate (i.e. applyServerOverwrite,\r\n * applyUserOverwrite, etc.)\r\n */\r\nclass SyncPoint {\r\n constructor() {\r\n /**\r\n * The Views being tracked at this location in the tree, stored as a map where the key is a\r\n * queryId and the value is the View for that query.\r\n *\r\n * NOTE: This list will be quite small (usually 1, but perhaps 2 or 3; any more is an odd use case).\r\n */\r\n this.views = new Map();\r\n }\r\n}\r\nfunction syncPointSetReferenceConstructor(val) {\r\n assert(!referenceConstructor$1, '__referenceConstructor has already been defined');\r\n referenceConstructor$1 = val;\r\n}\r\nfunction syncPointGetReferenceConstructor() {\r\n assert(referenceConstructor$1, 'Reference.ts has not been loaded');\r\n return referenceConstructor$1;\r\n}\r\nfunction syncPointIsEmpty(syncPoint) {\r\n return syncPoint.views.size === 0;\r\n}\r\nfunction syncPointApplyOperation(syncPoint, operation, writesCache, optCompleteServerCache) {\r\n const queryId = operation.source.queryId;\r\n if (queryId !== null) {\r\n const view = syncPoint.views.get(queryId);\r\n assert(view != null, 'SyncTree gave us an op for an invalid query.');\r\n return viewApplyOperation(view, operation, writesCache, optCompleteServerCache);\r\n }\r\n else {\r\n let events = [];\r\n for (const view of syncPoint.views.values()) {\r\n events = events.concat(viewApplyOperation(view, operation, writesCache, optCompleteServerCache));\r\n }\r\n return events;\r\n }\r\n}\r\n/**\r\n * Get a view for the specified query.\r\n *\r\n * @param query - The query to return a view for\r\n * @param writesCache\r\n * @param serverCache\r\n * @param serverCacheComplete\r\n * @returns Events to raise.\r\n */\r\nfunction syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete) {\r\n const queryId = query._queryIdentifier;\r\n const view = syncPoint.views.get(queryId);\r\n if (!view) {\r\n // TODO: make writesCache take flag for complete server node\r\n let eventCache = writeTreeRefCalcCompleteEventCache(writesCache, serverCacheComplete ? serverCache : null);\r\n let eventCacheComplete = false;\r\n if (eventCache) {\r\n eventCacheComplete = true;\r\n }\r\n else if (serverCache instanceof ChildrenNode) {\r\n eventCache = writeTreeRefCalcCompleteEventChildren(writesCache, serverCache);\r\n eventCacheComplete = false;\r\n }\r\n else {\r\n eventCache = ChildrenNode.EMPTY_NODE;\r\n eventCacheComplete = false;\r\n }\r\n const viewCache = newViewCache(new CacheNode(eventCache, eventCacheComplete, false), new CacheNode(serverCache, serverCacheComplete, false));\r\n return new View(query, viewCache);\r\n }\r\n return view;\r\n}\r\n/**\r\n * Add an event callback for the specified query.\r\n *\r\n * @param query\r\n * @param eventRegistration\r\n * @param writesCache\r\n * @param serverCache - Complete server cache, if we have it.\r\n * @param serverCacheComplete\r\n * @returns Events to raise.\r\n */\r\nfunction syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete) {\r\n const view = syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete);\r\n if (!syncPoint.views.has(query._queryIdentifier)) {\r\n syncPoint.views.set(query._queryIdentifier, view);\r\n }\r\n // This is guaranteed to exist now, we just created anything that was missing\r\n viewAddEventRegistration(view, eventRegistration);\r\n return viewGetInitialEvents(view, eventRegistration);\r\n}\r\n/**\r\n * Remove event callback(s). Return cancelEvents if a cancelError is specified.\r\n *\r\n * If query is the default query, we'll check all views for the specified eventRegistration.\r\n * If eventRegistration is null, we'll remove all callbacks for the specified view(s).\r\n *\r\n * @param eventRegistration - If null, remove all callbacks.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @returns removed queries and any cancel events\r\n */\r\nfunction syncPointRemoveEventRegistration(syncPoint, query, eventRegistration, cancelError) {\r\n const queryId = query._queryIdentifier;\r\n const removed = [];\r\n let cancelEvents = [];\r\n const hadCompleteView = syncPointHasCompleteView(syncPoint);\r\n if (queryId === 'default') {\r\n // When you do ref.off(...), we search all views for the registration to remove.\r\n for (const [viewQueryId, view] of syncPoint.views.entries()) {\r\n cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));\r\n if (viewIsEmpty(view)) {\r\n syncPoint.views.delete(viewQueryId);\r\n // We'll deal with complete views later.\r\n if (!view.query._queryParams.loadsAllData()) {\r\n removed.push(view.query);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // remove the callback from the specific view.\r\n const view = syncPoint.views.get(queryId);\r\n if (view) {\r\n cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));\r\n if (viewIsEmpty(view)) {\r\n syncPoint.views.delete(queryId);\r\n // We'll deal with complete views later.\r\n if (!view.query._queryParams.loadsAllData()) {\r\n removed.push(view.query);\r\n }\r\n }\r\n }\r\n }\r\n if (hadCompleteView && !syncPointHasCompleteView(syncPoint)) {\r\n // We removed our last complete view.\r\n removed.push(new (syncPointGetReferenceConstructor())(query._repo, query._path));\r\n }\r\n return { removed, events: cancelEvents };\r\n}\r\nfunction syncPointGetQueryViews(syncPoint) {\r\n const result = [];\r\n for (const view of syncPoint.views.values()) {\r\n if (!view.query._queryParams.loadsAllData()) {\r\n result.push(view);\r\n }\r\n }\r\n return result;\r\n}\r\n/**\r\n * @param path - The path to the desired complete snapshot\r\n * @returns A complete cache, if it exists\r\n */\r\nfunction syncPointGetCompleteServerCache(syncPoint, path) {\r\n let serverCache = null;\r\n for (const view of syncPoint.views.values()) {\r\n serverCache = serverCache || viewGetCompleteServerCache(view, path);\r\n }\r\n return serverCache;\r\n}\r\nfunction syncPointViewForQuery(syncPoint, query) {\r\n const params = query._queryParams;\r\n if (params.loadsAllData()) {\r\n return syncPointGetCompleteView(syncPoint);\r\n }\r\n else {\r\n const queryId = query._queryIdentifier;\r\n return syncPoint.views.get(queryId);\r\n }\r\n}\r\nfunction syncPointViewExistsForQuery(syncPoint, query) {\r\n return syncPointViewForQuery(syncPoint, query) != null;\r\n}\r\nfunction syncPointHasCompleteView(syncPoint) {\r\n return syncPointGetCompleteView(syncPoint) != null;\r\n}\r\nfunction syncPointGetCompleteView(syncPoint) {\r\n for (const view of syncPoint.views.values()) {\r\n if (view.query._queryParams.loadsAllData()) {\r\n return view;\r\n }\r\n }\r\n return null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet referenceConstructor;\r\nfunction syncTreeSetReferenceConstructor(val) {\r\n assert(!referenceConstructor, '__referenceConstructor has already been defined');\r\n referenceConstructor = val;\r\n}\r\nfunction syncTreeGetReferenceConstructor() {\r\n assert(referenceConstructor, 'Reference.ts has not been loaded');\r\n return referenceConstructor;\r\n}\r\n/**\r\n * Static tracker for next query tag.\r\n */\r\nlet syncTreeNextQueryTag_ = 1;\r\n/**\r\n * SyncTree is the central class for managing event callback registration, data caching, views\r\n * (query processing), and event generation. There are typically two SyncTree instances for\r\n * each Repo, one for the normal Firebase data, and one for the .info data.\r\n *\r\n * It has a number of responsibilities, including:\r\n * - Tracking all user event callbacks (registered via addEventRegistration() and removeEventRegistration()).\r\n * - Applying and caching data changes for user set(), transaction(), and update() calls\r\n * (applyUserOverwrite(), applyUserMerge()).\r\n * - Applying and caching data changes for server data changes (applyServerOverwrite(),\r\n * applyServerMerge()).\r\n * - Generating user-facing events for server and user changes (all of the apply* methods\r\n * return the set of events that need to be raised as a result).\r\n * - Maintaining the appropriate set of server listens to ensure we are always subscribed\r\n * to the correct set of paths and queries to satisfy the current set of user event\r\n * callbacks (listens are started/stopped using the provided listenProvider).\r\n *\r\n * NOTE: Although SyncTree tracks event callbacks and calculates events to raise, the actual\r\n * events are returned to the caller rather than raised synchronously.\r\n *\r\n */\r\nclass SyncTree {\r\n /**\r\n * @param listenProvider_ - Used by SyncTree to start / stop listening\r\n * to server data.\r\n */\r\n constructor(listenProvider_) {\r\n this.listenProvider_ = listenProvider_;\r\n /**\r\n * Tree of SyncPoints. There's a SyncPoint at any location that has 1 or more views.\r\n */\r\n this.syncPointTree_ = new ImmutableTree(null);\r\n /**\r\n * A tree of all pending user writes (user-initiated set()'s, transaction()'s, update()'s, etc.).\r\n */\r\n this.pendingWriteTree_ = newWriteTree();\r\n this.tagToQueryMap = new Map();\r\n this.queryToTagMap = new Map();\r\n }\r\n}\r\n/**\r\n * Apply the data changes for a user-generated set() or transaction() call.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyUserOverwrite(syncTree, path, newData, writeId, visible) {\r\n // Record pending write.\r\n writeTreeAddOverwrite(syncTree.pendingWriteTree_, path, newData, writeId, visible);\r\n if (!visible) {\r\n return [];\r\n }\r\n else {\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceUser(), path, newData));\r\n }\r\n}\r\n/**\r\n * Apply the data from a user-generated update() call\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyUserMerge(syncTree, path, changedChildren, writeId) {\r\n // Record pending merge.\r\n writeTreeAddMerge(syncTree.pendingWriteTree_, path, changedChildren, writeId);\r\n const changeTree = ImmutableTree.fromObject(changedChildren);\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceUser(), path, changeTree));\r\n}\r\n/**\r\n * Acknowledge a pending user write that was previously registered with applyUserOverwrite() or applyUserMerge().\r\n *\r\n * @param revert - True if the given write failed and needs to be reverted\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeAckUserWrite(syncTree, writeId, revert = false) {\r\n const write = writeTreeGetWrite(syncTree.pendingWriteTree_, writeId);\r\n const needToReevaluate = writeTreeRemoveWrite(syncTree.pendingWriteTree_, writeId);\r\n if (!needToReevaluate) {\r\n return [];\r\n }\r\n else {\r\n let affectedTree = new ImmutableTree(null);\r\n if (write.snap != null) {\r\n // overwrite\r\n affectedTree = affectedTree.set(newEmptyPath(), true);\r\n }\r\n else {\r\n each(write.children, (pathString) => {\r\n affectedTree = affectedTree.set(new Path(pathString), true);\r\n });\r\n }\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new AckUserWrite(write.path, affectedTree, revert));\r\n }\r\n}\r\n/**\r\n * Apply new server data for the specified path..\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyServerOverwrite(syncTree, path, newData) {\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceServer(), path, newData));\r\n}\r\n/**\r\n * Apply new server data to be merged in at the specified path.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyServerMerge(syncTree, path, changedChildren) {\r\n const changeTree = ImmutableTree.fromObject(changedChildren);\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceServer(), path, changeTree));\r\n}\r\n/**\r\n * Apply a listen complete for a query\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyListenComplete(syncTree, path) {\r\n return syncTreeApplyOperationToSyncPoints_(syncTree, new ListenComplete(newOperationSourceServer(), path));\r\n}\r\n/**\r\n * Apply a listen complete for a tagged query\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedListenComplete(syncTree, path, tag) {\r\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n if (queryKey) {\r\n const r = syncTreeParseQueryKey_(queryKey);\r\n const queryPath = r.path, queryId = r.queryId;\r\n const relativePath = newRelativePath(queryPath, path);\r\n const op = new ListenComplete(newOperationSourceServerTaggedQuery(queryId), relativePath);\r\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n }\r\n else {\r\n // We've already removed the query. No big deal, ignore the update\r\n return [];\r\n }\r\n}\r\n/**\r\n * Remove event callback(s).\r\n *\r\n * If query is the default query, we'll check all queries for the specified eventRegistration.\r\n * If eventRegistration is null, we'll remove all callbacks for the specified query/queries.\r\n *\r\n * @param eventRegistration - If null, all callbacks are removed.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @param skipListenerDedup - When performing a `get()`, we don't add any new listeners, so no\r\n * deduping needs to take place. This flag allows toggling of that behavior\r\n * @returns Cancel events, if cancelError was provided.\r\n */\r\nfunction syncTreeRemoveEventRegistration(syncTree, query, eventRegistration, cancelError, skipListenerDedup = false) {\r\n // Find the syncPoint first. Then deal with whether or not it has matching listeners\r\n const path = query._path;\r\n const maybeSyncPoint = syncTree.syncPointTree_.get(path);\r\n let cancelEvents = [];\r\n // A removal on a default query affects all queries at that location. A removal on an indexed query, even one without\r\n // other query constraints, does *not* affect all queries at that location. So this check must be for 'default', and\r\n // not loadsAllData().\r\n if (maybeSyncPoint &&\r\n (query._queryIdentifier === 'default' ||\r\n syncPointViewExistsForQuery(maybeSyncPoint, query))) {\r\n const removedAndEvents = syncPointRemoveEventRegistration(maybeSyncPoint, query, eventRegistration, cancelError);\r\n if (syncPointIsEmpty(maybeSyncPoint)) {\r\n syncTree.syncPointTree_ = syncTree.syncPointTree_.remove(path);\r\n }\r\n const removed = removedAndEvents.removed;\r\n cancelEvents = removedAndEvents.events;\r\n if (!skipListenerDedup) {\r\n /**\r\n * We may have just removed one of many listeners and can short-circuit this whole process\r\n * We may also not have removed a default listener, in which case all of the descendant listeners should already be\r\n * properly set up.\r\n */\r\n // Since indexed queries can shadow if they don't have other query constraints, check for loadsAllData(), instead of\r\n // queryId === 'default'\r\n const removingDefault = -1 !==\r\n removed.findIndex(query => {\r\n return query._queryParams.loadsAllData();\r\n });\r\n const covered = syncTree.syncPointTree_.findOnPath(path, (relativePath, parentSyncPoint) => syncPointHasCompleteView(parentSyncPoint));\r\n if (removingDefault && !covered) {\r\n const subtree = syncTree.syncPointTree_.subtree(path);\r\n // There are potentially child listeners. Determine what if any listens we need to send before executing the\r\n // removal\r\n if (!subtree.isEmpty()) {\r\n // We need to fold over our subtree and collect the listeners to send\r\n const newViews = syncTreeCollectDistinctViewsForSubTree_(subtree);\r\n // Ok, we've collected all the listens we need. Set them up.\r\n for (let i = 0; i < newViews.length; ++i) {\r\n const view = newViews[i], newQuery = view.query;\r\n const listener = syncTreeCreateListenerForView_(syncTree, view);\r\n syncTree.listenProvider_.startListening(syncTreeQueryForListening_(newQuery), syncTreeTagForQuery(syncTree, newQuery), listener.hashFn, listener.onComplete);\r\n }\r\n }\r\n // Otherwise there's nothing below us, so nothing we need to start listening on\r\n }\r\n // If we removed anything and we're not covered by a higher up listen, we need to stop listening on this query\r\n // The above block has us covered in terms of making sure we're set up on listens lower in the tree.\r\n // Also, note that if we have a cancelError, it's already been removed at the provider level.\r\n if (!covered && removed.length > 0 && !cancelError) {\r\n // If we removed a default, then we weren't listening on any of the other queries here. Just cancel the one\r\n // default. Otherwise, we need to iterate through and cancel each individual query\r\n if (removingDefault) {\r\n // We don't tag default listeners\r\n const defaultTag = null;\r\n syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(query), defaultTag);\r\n }\r\n else {\r\n removed.forEach((queryToRemove) => {\r\n const tagToRemove = syncTree.queryToTagMap.get(syncTreeMakeQueryKey_(queryToRemove));\r\n syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToRemove), tagToRemove);\r\n });\r\n }\r\n }\r\n }\r\n // Now, clear all of the tags we're tracking for the removed listens\r\n syncTreeRemoveTags_(syncTree, removed);\r\n }\r\n return cancelEvents;\r\n}\r\n/**\r\n * Apply new server data for the specified tagged query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedQueryOverwrite(syncTree, path, snap, tag) {\r\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n if (queryKey != null) {\r\n const r = syncTreeParseQueryKey_(queryKey);\r\n const queryPath = r.path, queryId = r.queryId;\r\n const relativePath = newRelativePath(queryPath, path);\r\n const op = new Overwrite(newOperationSourceServerTaggedQuery(queryId), relativePath, snap);\r\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n }\r\n else {\r\n // Query must have been removed already\r\n return [];\r\n }\r\n}\r\n/**\r\n * Apply server data to be merged in for the specified tagged query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedQueryMerge(syncTree, path, changedChildren, tag) {\r\n const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n if (queryKey) {\r\n const r = syncTreeParseQueryKey_(queryKey);\r\n const queryPath = r.path, queryId = r.queryId;\r\n const relativePath = newRelativePath(queryPath, path);\r\n const changeTree = ImmutableTree.fromObject(changedChildren);\r\n const op = new Merge(newOperationSourceServerTaggedQuery(queryId), relativePath, changeTree);\r\n return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n }\r\n else {\r\n // We've already removed the query. No big deal, ignore the update\r\n return [];\r\n }\r\n}\r\n/**\r\n * Add an event callback for the specified query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeAddEventRegistration(syncTree, query, eventRegistration, skipSetupListener = false) {\r\n const path = query._path;\r\n let serverCache = null;\r\n let foundAncestorDefaultView = false;\r\n // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\r\n // Consider optimizing this once there's a better understanding of what actual behavior will be.\r\n syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\r\n const relativePath = newRelativePath(pathToSyncPoint, path);\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(sp, relativePath);\r\n foundAncestorDefaultView =\r\n foundAncestorDefaultView || syncPointHasCompleteView(sp);\r\n });\r\n let syncPoint = syncTree.syncPointTree_.get(path);\r\n if (!syncPoint) {\r\n syncPoint = new SyncPoint();\r\n syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\r\n }\r\n else {\r\n foundAncestorDefaultView =\r\n foundAncestorDefaultView || syncPointHasCompleteView(syncPoint);\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n let serverCacheComplete;\r\n if (serverCache != null) {\r\n serverCacheComplete = true;\r\n }\r\n else {\r\n serverCacheComplete = false;\r\n serverCache = ChildrenNode.EMPTY_NODE;\r\n const subtree = syncTree.syncPointTree_.subtree(path);\r\n subtree.foreachChild((childName, childSyncPoint) => {\r\n const completeCache = syncPointGetCompleteServerCache(childSyncPoint, newEmptyPath());\r\n if (completeCache) {\r\n serverCache = serverCache.updateImmediateChild(childName, completeCache);\r\n }\r\n });\r\n }\r\n const viewAlreadyExists = syncPointViewExistsForQuery(syncPoint, query);\r\n if (!viewAlreadyExists && !query._queryParams.loadsAllData()) {\r\n // We need to track a tag for this query\r\n const queryKey = syncTreeMakeQueryKey_(query);\r\n assert(!syncTree.queryToTagMap.has(queryKey), 'View does not exist, but we have a tag');\r\n const tag = syncTreeGetNextQueryTag_();\r\n syncTree.queryToTagMap.set(queryKey, tag);\r\n syncTree.tagToQueryMap.set(tag, queryKey);\r\n }\r\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, path);\r\n let events = syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete);\r\n if (!viewAlreadyExists && !foundAncestorDefaultView && !skipSetupListener) {\r\n const view = syncPointViewForQuery(syncPoint, query);\r\n events = events.concat(syncTreeSetupListener_(syncTree, query, view));\r\n }\r\n return events;\r\n}\r\n/**\r\n * Returns a complete cache, if we have one, of the data at a particular path. If the location does not have a\r\n * listener above it, we will get a false \"null\". This shouldn't be a problem because transactions will always\r\n * have a listener above, and atomic operations would correctly show a jitter of ->\r\n * as the write is applied locally and then acknowledged at the server.\r\n *\r\n * Note: this method will *include* hidden writes from transaction with applyLocally set to false.\r\n *\r\n * @param path - The path to the data we want\r\n * @param writeIdsToExclude - A specific set to be excluded\r\n */\r\nfunction syncTreeCalcCompleteEventCache(syncTree, path, writeIdsToExclude) {\r\n const includeHiddenSets = true;\r\n const writeTree = syncTree.pendingWriteTree_;\r\n const serverCache = syncTree.syncPointTree_.findOnPath(path, (pathSoFar, syncPoint) => {\r\n const relativePath = newRelativePath(pathSoFar, path);\r\n const serverCache = syncPointGetCompleteServerCache(syncPoint, relativePath);\r\n if (serverCache) {\r\n return serverCache;\r\n }\r\n });\r\n return writeTreeCalcCompleteEventCache(writeTree, path, serverCache, writeIdsToExclude, includeHiddenSets);\r\n}\r\nfunction syncTreeGetServerValue(syncTree, query) {\r\n const path = query._path;\r\n let serverCache = null;\r\n // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\r\n // Consider optimizing this once there's a better understanding of what actual behavior will be.\r\n syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\r\n const relativePath = newRelativePath(pathToSyncPoint, path);\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(sp, relativePath);\r\n });\r\n let syncPoint = syncTree.syncPointTree_.get(path);\r\n if (!syncPoint) {\r\n syncPoint = new SyncPoint();\r\n syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\r\n }\r\n else {\r\n serverCache =\r\n serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n const serverCacheComplete = serverCache != null;\r\n const serverCacheNode = serverCacheComplete\r\n ? new CacheNode(serverCache, true, false)\r\n : null;\r\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, query._path);\r\n const view = syncPointGetView(syncPoint, query, writesCache, serverCacheComplete ? serverCacheNode.getNode() : ChildrenNode.EMPTY_NODE, serverCacheComplete);\r\n return viewGetCompleteNode(view);\r\n}\r\n/**\r\n * A helper method that visits all descendant and ancestor SyncPoints, applying the operation.\r\n *\r\n * NOTES:\r\n * - Descendant SyncPoints will be visited first (since we raise events depth-first).\r\n *\r\n * - We call applyOperation() on each SyncPoint passing three things:\r\n * 1. A version of the Operation that has been made relative to the SyncPoint location.\r\n * 2. A WriteTreeRef of any writes we have cached at the SyncPoint location.\r\n * 3. A snapshot Node with cached server data, if we have it.\r\n *\r\n * - We concatenate all of the events returned by each SyncPoint and return the result.\r\n */\r\nfunction syncTreeApplyOperationToSyncPoints_(syncTree, operation) {\r\n return syncTreeApplyOperationHelper_(operation, syncTree.syncPointTree_, \r\n /*serverCache=*/ null, writeTreeChildWrites(syncTree.pendingWriteTree_, newEmptyPath()));\r\n}\r\n/**\r\n * Recursive helper for applyOperationToSyncPoints_\r\n */\r\nfunction syncTreeApplyOperationHelper_(operation, syncPointTree, serverCache, writesCache) {\r\n if (pathIsEmpty(operation.path)) {\r\n return syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache);\r\n }\r\n else {\r\n const syncPoint = syncPointTree.get(newEmptyPath());\r\n // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n if (serverCache == null && syncPoint != null) {\r\n serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n let events = [];\r\n const childName = pathGetFront(operation.path);\r\n const childOperation = operation.operationForChild(childName);\r\n const childTree = syncPointTree.children.get(childName);\r\n if (childTree && childOperation) {\r\n const childServerCache = serverCache\r\n ? serverCache.getImmediateChild(childName)\r\n : null;\r\n const childWritesCache = writeTreeRefChild(writesCache, childName);\r\n events = events.concat(syncTreeApplyOperationHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n }\r\n if (syncPoint) {\r\n events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));\r\n }\r\n return events;\r\n }\r\n}\r\n/**\r\n * Recursive helper for applyOperationToSyncPoints_\r\n */\r\nfunction syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache) {\r\n const syncPoint = syncPointTree.get(newEmptyPath());\r\n // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n if (serverCache == null && syncPoint != null) {\r\n serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n }\r\n let events = [];\r\n syncPointTree.children.inorderTraversal((childName, childTree) => {\r\n const childServerCache = serverCache\r\n ? serverCache.getImmediateChild(childName)\r\n : null;\r\n const childWritesCache = writeTreeRefChild(writesCache, childName);\r\n const childOperation = operation.operationForChild(childName);\r\n if (childOperation) {\r\n events = events.concat(syncTreeApplyOperationDescendantsHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n }\r\n });\r\n if (syncPoint) {\r\n events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));\r\n }\r\n return events;\r\n}\r\nfunction syncTreeCreateListenerForView_(syncTree, view) {\r\n const query = view.query;\r\n const tag = syncTreeTagForQuery(syncTree, query);\r\n return {\r\n hashFn: () => {\r\n const cache = viewGetServerCache(view) || ChildrenNode.EMPTY_NODE;\r\n return cache.hash();\r\n },\r\n onComplete: (status) => {\r\n if (status === 'ok') {\r\n if (tag) {\r\n return syncTreeApplyTaggedListenComplete(syncTree, query._path, tag);\r\n }\r\n else {\r\n return syncTreeApplyListenComplete(syncTree, query._path);\r\n }\r\n }\r\n else {\r\n // If a listen failed, kill all of the listeners here, not just the one that triggered the error.\r\n // Note that this may need to be scoped to just this listener if we change permissions on filtered children\r\n const error = errorForServerCode(status, query);\r\n return syncTreeRemoveEventRegistration(syncTree, query, \r\n /*eventRegistration*/ null, error);\r\n }\r\n }\r\n };\r\n}\r\n/**\r\n * Return the tag associated with the given query.\r\n */\r\nfunction syncTreeTagForQuery(syncTree, query) {\r\n const queryKey = syncTreeMakeQueryKey_(query);\r\n return syncTree.queryToTagMap.get(queryKey);\r\n}\r\n/**\r\n * Given a query, computes a \"queryKey\" suitable for use in our queryToTagMap_.\r\n */\r\nfunction syncTreeMakeQueryKey_(query) {\r\n return query._path.toString() + '$' + query._queryIdentifier;\r\n}\r\n/**\r\n * Return the query associated with the given tag, if we have one\r\n */\r\nfunction syncTreeQueryKeyForTag_(syncTree, tag) {\r\n return syncTree.tagToQueryMap.get(tag);\r\n}\r\n/**\r\n * Given a queryKey (created by makeQueryKey), parse it back into a path and queryId.\r\n */\r\nfunction syncTreeParseQueryKey_(queryKey) {\r\n const splitIndex = queryKey.indexOf('$');\r\n assert(splitIndex !== -1 && splitIndex < queryKey.length - 1, 'Bad queryKey.');\r\n return {\r\n queryId: queryKey.substr(splitIndex + 1),\r\n path: new Path(queryKey.substr(0, splitIndex))\r\n };\r\n}\r\n/**\r\n * A helper method to apply tagged operations\r\n */\r\nfunction syncTreeApplyTaggedOperation_(syncTree, queryPath, operation) {\r\n const syncPoint = syncTree.syncPointTree_.get(queryPath);\r\n assert(syncPoint, \"Missing sync point for query tag that we're tracking\");\r\n const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, queryPath);\r\n return syncPointApplyOperation(syncPoint, operation, writesCache, null);\r\n}\r\n/**\r\n * This collapses multiple unfiltered views into a single view, since we only need a single\r\n * listener for them.\r\n */\r\nfunction syncTreeCollectDistinctViewsForSubTree_(subtree) {\r\n return subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\r\n if (maybeChildSyncPoint && syncPointHasCompleteView(maybeChildSyncPoint)) {\r\n const completeView = syncPointGetCompleteView(maybeChildSyncPoint);\r\n return [completeView];\r\n }\r\n else {\r\n // No complete view here, flatten any deeper listens into an array\r\n let views = [];\r\n if (maybeChildSyncPoint) {\r\n views = syncPointGetQueryViews(maybeChildSyncPoint);\r\n }\r\n each(childMap, (_key, childViews) => {\r\n views = views.concat(childViews);\r\n });\r\n return views;\r\n }\r\n });\r\n}\r\n/**\r\n * Normalizes a query to a query we send the server for listening\r\n *\r\n * @returns The normalized query\r\n */\r\nfunction syncTreeQueryForListening_(query) {\r\n if (query._queryParams.loadsAllData() && !query._queryParams.isDefault()) {\r\n // We treat queries that load all data as default queries\r\n // Cast is necessary because ref() technically returns Firebase which is actually fb.api.Firebase which inherits\r\n // from Query\r\n return new (syncTreeGetReferenceConstructor())(query._repo, query._path);\r\n }\r\n else {\r\n return query;\r\n }\r\n}\r\nfunction syncTreeRemoveTags_(syncTree, queries) {\r\n for (let j = 0; j < queries.length; ++j) {\r\n const removedQuery = queries[j];\r\n if (!removedQuery._queryParams.loadsAllData()) {\r\n // We should have a tag for this\r\n const removedQueryKey = syncTreeMakeQueryKey_(removedQuery);\r\n const removedQueryTag = syncTree.queryToTagMap.get(removedQueryKey);\r\n syncTree.queryToTagMap.delete(removedQueryKey);\r\n syncTree.tagToQueryMap.delete(removedQueryTag);\r\n }\r\n }\r\n}\r\n/**\r\n * Static accessor for query tags.\r\n */\r\nfunction syncTreeGetNextQueryTag_() {\r\n return syncTreeNextQueryTag_++;\r\n}\r\n/**\r\n * For a given new listen, manage the de-duplication of outstanding subscriptions.\r\n *\r\n * @returns This method can return events to support synchronous data sources\r\n */\r\nfunction syncTreeSetupListener_(syncTree, query, view) {\r\n const path = query._path;\r\n const tag = syncTreeTagForQuery(syncTree, query);\r\n const listener = syncTreeCreateListenerForView_(syncTree, view);\r\n const events = syncTree.listenProvider_.startListening(syncTreeQueryForListening_(query), tag, listener.hashFn, listener.onComplete);\r\n const subtree = syncTree.syncPointTree_.subtree(path);\r\n // The root of this subtree has our query. We're here because we definitely need to send a listen for that, but we\r\n // may need to shadow other listens as well.\r\n if (tag) {\r\n assert(!syncPointHasCompleteView(subtree.value), \"If we're adding a query, it shouldn't be shadowed\");\r\n }\r\n else {\r\n // Shadow everything at or below this location, this is a default listener.\r\n const queriesToStop = subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\r\n if (!pathIsEmpty(relativePath) &&\r\n maybeChildSyncPoint &&\r\n syncPointHasCompleteView(maybeChildSyncPoint)) {\r\n return [syncPointGetCompleteView(maybeChildSyncPoint).query];\r\n }\r\n else {\r\n // No default listener here, flatten any deeper queries into an array\r\n let queries = [];\r\n if (maybeChildSyncPoint) {\r\n queries = queries.concat(syncPointGetQueryViews(maybeChildSyncPoint).map(view => view.query));\r\n }\r\n each(childMap, (_key, childQueries) => {\r\n queries = queries.concat(childQueries);\r\n });\r\n return queries;\r\n }\r\n });\r\n for (let i = 0; i < queriesToStop.length; ++i) {\r\n const queryToStop = queriesToStop[i];\r\n syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToStop), syncTreeTagForQuery(syncTree, queryToStop));\r\n }\r\n }\r\n return events;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ExistingValueProvider {\r\n constructor(node_) {\r\n this.node_ = node_;\r\n }\r\n getImmediateChild(childName) {\r\n const child = this.node_.getImmediateChild(childName);\r\n return new ExistingValueProvider(child);\r\n }\r\n node() {\r\n return this.node_;\r\n }\r\n}\r\nclass DeferredValueProvider {\r\n constructor(syncTree, path) {\r\n this.syncTree_ = syncTree;\r\n this.path_ = path;\r\n }\r\n getImmediateChild(childName) {\r\n const childPath = pathChild(this.path_, childName);\r\n return new DeferredValueProvider(this.syncTree_, childPath);\r\n }\r\n node() {\r\n return syncTreeCalcCompleteEventCache(this.syncTree_, this.path_);\r\n }\r\n}\r\n/**\r\n * Generate placeholders for deferred values.\r\n */\r\nconst generateWithValues = function (values) {\r\n values = values || {};\r\n values['timestamp'] = values['timestamp'] || new Date().getTime();\r\n return values;\r\n};\r\n/**\r\n * Value to use when firing local events. When writing server values, fire\r\n * local events with an approximate value, otherwise return value as-is.\r\n */\r\nconst resolveDeferredLeafValue = function (value, existingVal, serverValues) {\r\n if (!value || typeof value !== 'object') {\r\n return value;\r\n }\r\n assert('.sv' in value, 'Unexpected leaf node or priority contents');\r\n if (typeof value['.sv'] === 'string') {\r\n return resolveScalarDeferredValue(value['.sv'], existingVal, serverValues);\r\n }\r\n else if (typeof value['.sv'] === 'object') {\r\n return resolveComplexDeferredValue(value['.sv'], existingVal);\r\n }\r\n else {\r\n assert(false, 'Unexpected server value: ' + JSON.stringify(value, null, 2));\r\n }\r\n};\r\nconst resolveScalarDeferredValue = function (op, existing, serverValues) {\r\n switch (op) {\r\n case 'timestamp':\r\n return serverValues['timestamp'];\r\n default:\r\n assert(false, 'Unexpected server value: ' + op);\r\n }\r\n};\r\nconst resolveComplexDeferredValue = function (op, existing, unused) {\r\n if (!op.hasOwnProperty('increment')) {\r\n assert(false, 'Unexpected server value: ' + JSON.stringify(op, null, 2));\r\n }\r\n const delta = op['increment'];\r\n if (typeof delta !== 'number') {\r\n assert(false, 'Unexpected increment value: ' + delta);\r\n }\r\n const existingNode = existing.node();\r\n assert(existingNode !== null && typeof existingNode !== 'undefined', 'Expected ChildrenNode.EMPTY_NODE for nulls');\r\n // Incrementing a non-number sets the value to the incremented amount\r\n if (!existingNode.isLeafNode()) {\r\n return delta;\r\n }\r\n const leaf = existingNode;\r\n const existingVal = leaf.getValue();\r\n if (typeof existingVal !== 'number') {\r\n return delta;\r\n }\r\n // No need to do over/underflow arithmetic here because JS only handles floats under the covers\r\n return existingVal + delta;\r\n};\r\n/**\r\n * Recursively replace all deferred values and priorities in the tree with the\r\n * specified generated replacement values.\r\n * @param path - path to which write is relative\r\n * @param node - new data written at path\r\n * @param syncTree - current data\r\n */\r\nconst resolveDeferredValueTree = function (path, node, syncTree, serverValues) {\r\n return resolveDeferredValue(node, new DeferredValueProvider(syncTree, path), serverValues);\r\n};\r\n/**\r\n * Recursively replace all deferred values and priorities in the node with the\r\n * specified generated replacement values. If there are no server values in the node,\r\n * it'll be returned as-is.\r\n */\r\nconst resolveDeferredValueSnapshot = function (node, existing, serverValues) {\r\n return resolveDeferredValue(node, new ExistingValueProvider(existing), serverValues);\r\n};\r\nfunction resolveDeferredValue(node, existingVal, serverValues) {\r\n const rawPri = node.getPriority().val();\r\n const priority = resolveDeferredLeafValue(rawPri, existingVal.getImmediateChild('.priority'), serverValues);\r\n let newNode;\r\n if (node.isLeafNode()) {\r\n const leafNode = node;\r\n const value = resolveDeferredLeafValue(leafNode.getValue(), existingVal, serverValues);\r\n if (value !== leafNode.getValue() ||\r\n priority !== leafNode.getPriority().val()) {\r\n return new LeafNode(value, nodeFromJSON(priority));\r\n }\r\n else {\r\n return node;\r\n }\r\n }\r\n else {\r\n const childrenNode = node;\r\n newNode = childrenNode;\r\n if (priority !== childrenNode.getPriority().val()) {\r\n newNode = newNode.updatePriority(new LeafNode(priority));\r\n }\r\n childrenNode.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n const newChildNode = resolveDeferredValue(childNode, existingVal.getImmediateChild(childName), serverValues);\r\n if (newChildNode !== childNode) {\r\n newNode = newNode.updateImmediateChild(childName, newChildNode);\r\n }\r\n });\r\n return newNode;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A light-weight tree, traversable by path. Nodes can have both values and children.\r\n * Nodes are not enumerated (by forEachChild) unless they have a value or non-empty\r\n * children.\r\n */\r\nclass Tree {\r\n /**\r\n * @param name - Optional name of the node.\r\n * @param parent - Optional parent node.\r\n * @param node - Optional node to wrap.\r\n */\r\n constructor(name = '', parent = null, node = { children: {}, childCount: 0 }) {\r\n this.name = name;\r\n this.parent = parent;\r\n this.node = node;\r\n }\r\n}\r\n/**\r\n * Returns a sub-Tree for the given path.\r\n *\r\n * @param pathObj - Path to look up.\r\n * @returns Tree for path.\r\n */\r\nfunction treeSubTree(tree, pathObj) {\r\n // TODO: Require pathObj to be Path?\r\n let path = pathObj instanceof Path ? pathObj : new Path(pathObj);\r\n let child = tree, next = pathGetFront(path);\r\n while (next !== null) {\r\n const childNode = safeGet(child.node.children, next) || {\r\n children: {},\r\n childCount: 0\r\n };\r\n child = new Tree(next, child, childNode);\r\n path = pathPopFront(path);\r\n next = pathGetFront(path);\r\n }\r\n return child;\r\n}\r\n/**\r\n * Returns the data associated with this tree node.\r\n *\r\n * @returns The data or null if no data exists.\r\n */\r\nfunction treeGetValue(tree) {\r\n return tree.node.value;\r\n}\r\n/**\r\n * Sets data to this tree node.\r\n *\r\n * @param value - Value to set.\r\n */\r\nfunction treeSetValue(tree, value) {\r\n tree.node.value = value;\r\n treeUpdateParents(tree);\r\n}\r\n/**\r\n * @returns Whether the tree has any children.\r\n */\r\nfunction treeHasChildren(tree) {\r\n return tree.node.childCount > 0;\r\n}\r\n/**\r\n * @returns Whethe rthe tree is empty (no value or children).\r\n */\r\nfunction treeIsEmpty(tree) {\r\n return treeGetValue(tree) === undefined && !treeHasChildren(tree);\r\n}\r\n/**\r\n * Calls action for each child of this tree node.\r\n *\r\n * @param action - Action to be called for each child.\r\n */\r\nfunction treeForEachChild(tree, action) {\r\n each(tree.node.children, (child, childTree) => {\r\n action(new Tree(child, tree, childTree));\r\n });\r\n}\r\n/**\r\n * Does a depth-first traversal of this node's descendants, calling action for each one.\r\n *\r\n * @param action - Action to be called for each child.\r\n * @param includeSelf - Whether to call action on this node as well. Defaults to\r\n * false.\r\n * @param childrenFirst - Whether to call action on children before calling it on\r\n * parent.\r\n */\r\nfunction treeForEachDescendant(tree, action, includeSelf, childrenFirst) {\r\n if (includeSelf && !childrenFirst) {\r\n action(tree);\r\n }\r\n treeForEachChild(tree, child => {\r\n treeForEachDescendant(child, action, true, childrenFirst);\r\n });\r\n if (includeSelf && childrenFirst) {\r\n action(tree);\r\n }\r\n}\r\n/**\r\n * Calls action on each ancestor node.\r\n *\r\n * @param action - Action to be called on each parent; return\r\n * true to abort.\r\n * @param includeSelf - Whether to call action on this node as well.\r\n * @returns true if the action callback returned true.\r\n */\r\nfunction treeForEachAncestor(tree, action, includeSelf) {\r\n let node = includeSelf ? tree : tree.parent;\r\n while (node !== null) {\r\n if (action(node)) {\r\n return true;\r\n }\r\n node = node.parent;\r\n }\r\n return false;\r\n}\r\n/**\r\n * @returns The path of this tree node, as a Path.\r\n */\r\nfunction treeGetPath(tree) {\r\n return new Path(tree.parent === null\r\n ? tree.name\r\n : treeGetPath(tree.parent) + '/' + tree.name);\r\n}\r\n/**\r\n * Adds or removes this child from its parent based on whether it's empty or not.\r\n */\r\nfunction treeUpdateParents(tree) {\r\n if (tree.parent !== null) {\r\n treeUpdateChild(tree.parent, tree.name, tree);\r\n }\r\n}\r\n/**\r\n * Adds or removes the passed child to this tree node, depending on whether it's empty.\r\n *\r\n * @param childName - The name of the child to update.\r\n * @param child - The child to update.\r\n */\r\nfunction treeUpdateChild(tree, childName, child) {\r\n const childEmpty = treeIsEmpty(child);\r\n const childExists = contains(tree.node.children, childName);\r\n if (childEmpty && childExists) {\r\n delete tree.node.children[childName];\r\n tree.node.childCount--;\r\n treeUpdateParents(tree);\r\n }\r\n else if (!childEmpty && !childExists) {\r\n tree.node.children[childName] = child.node;\r\n tree.node.childCount++;\r\n treeUpdateParents(tree);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * True for invalid Firebase keys\r\n */\r\nconst INVALID_KEY_REGEX_ = /[\\[\\].#$\\/\\u0000-\\u001F\\u007F]/;\r\n/**\r\n * True for invalid Firebase paths.\r\n * Allows '/' in paths.\r\n */\r\nconst INVALID_PATH_REGEX_ = /[\\[\\].#$\\u0000-\\u001F\\u007F]/;\r\n/**\r\n * Maximum number of characters to allow in leaf value\r\n */\r\nconst MAX_LEAF_SIZE_ = 10 * 1024 * 1024;\r\nconst isValidKey = function (key) {\r\n return (typeof key === 'string' && key.length !== 0 && !INVALID_KEY_REGEX_.test(key));\r\n};\r\nconst isValidPathString = function (pathString) {\r\n return (typeof pathString === 'string' &&\r\n pathString.length !== 0 &&\r\n !INVALID_PATH_REGEX_.test(pathString));\r\n};\r\nconst isValidRootPathString = function (pathString) {\r\n if (pathString) {\r\n // Allow '/.info/' at the beginning.\r\n pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n }\r\n return isValidPathString(pathString);\r\n};\r\nconst isValidPriority = function (priority) {\r\n return (priority === null ||\r\n typeof priority === 'string' ||\r\n (typeof priority === 'number' && !isInvalidJSONNumber(priority)) ||\r\n (priority &&\r\n typeof priority === 'object' &&\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n contains(priority, '.sv')));\r\n};\r\n/**\r\n * Pre-validate a datum passed as an argument to Firebase function.\r\n */\r\nconst validateFirebaseDataArg = function (fnName, value, path, optional) {\r\n if (optional && value === undefined) {\r\n return;\r\n }\r\n validateFirebaseData(errorPrefix(fnName, 'value'), value, path);\r\n};\r\n/**\r\n * Validate a data object client-side before sending to server.\r\n */\r\nconst validateFirebaseData = function (errorPrefix, data, path_) {\r\n const path = path_ instanceof Path ? new ValidationPath(path_, errorPrefix) : path_;\r\n if (data === undefined) {\r\n throw new Error(errorPrefix + 'contains undefined ' + validationPathToErrorString(path));\r\n }\r\n if (typeof data === 'function') {\r\n throw new Error(errorPrefix +\r\n 'contains a function ' +\r\n validationPathToErrorString(path) +\r\n ' with contents = ' +\r\n data.toString());\r\n }\r\n if (isInvalidJSONNumber(data)) {\r\n throw new Error(errorPrefix +\r\n 'contains ' +\r\n data.toString() +\r\n ' ' +\r\n validationPathToErrorString(path));\r\n }\r\n // Check max leaf size, but try to avoid the utf8 conversion if we can.\r\n if (typeof data === 'string' &&\r\n data.length > MAX_LEAF_SIZE_ / 3 &&\r\n stringLength(data) > MAX_LEAF_SIZE_) {\r\n throw new Error(errorPrefix +\r\n 'contains a string greater than ' +\r\n MAX_LEAF_SIZE_ +\r\n ' utf8 bytes ' +\r\n validationPathToErrorString(path) +\r\n \" ('\" +\r\n data.substring(0, 50) +\r\n \"...')\");\r\n }\r\n // TODO = Perf = Consider combining the recursive validation of keys into NodeFromJSON\r\n // to save extra walking of large objects.\r\n if (data && typeof data === 'object') {\r\n let hasDotValue = false;\r\n let hasActualChild = false;\r\n each(data, (key, value) => {\r\n if (key === '.value') {\r\n hasDotValue = true;\r\n }\r\n else if (key !== '.priority' && key !== '.sv') {\r\n hasActualChild = true;\r\n if (!isValidKey(key)) {\r\n throw new Error(errorPrefix +\r\n ' contains an invalid key (' +\r\n key +\r\n ') ' +\r\n validationPathToErrorString(path) +\r\n '. Keys must be non-empty strings ' +\r\n 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n }\r\n }\r\n validationPathPush(path, key);\r\n validateFirebaseData(errorPrefix, value, path);\r\n validationPathPop(path);\r\n });\r\n if (hasDotValue && hasActualChild) {\r\n throw new Error(errorPrefix +\r\n ' contains \".value\" child ' +\r\n validationPathToErrorString(path) +\r\n ' in addition to actual children.');\r\n }\r\n }\r\n};\r\n/**\r\n * Pre-validate paths passed in the firebase function.\r\n */\r\nconst validateFirebaseMergePaths = function (errorPrefix, mergePaths) {\r\n let i, curPath;\r\n for (i = 0; i < mergePaths.length; i++) {\r\n curPath = mergePaths[i];\r\n const keys = pathSlice(curPath);\r\n for (let j = 0; j < keys.length; j++) {\r\n if (keys[j] === '.priority' && j === keys.length - 1) ;\r\n else if (!isValidKey(keys[j])) {\r\n throw new Error(errorPrefix +\r\n 'contains an invalid key (' +\r\n keys[j] +\r\n ') in path ' +\r\n curPath.toString() +\r\n '. Keys must be non-empty strings ' +\r\n 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n }\r\n }\r\n }\r\n // Check that update keys are not descendants of each other.\r\n // We rely on the property that sorting guarantees that ancestors come\r\n // right before descendants.\r\n mergePaths.sort(pathCompare);\r\n let prevPath = null;\r\n for (i = 0; i < mergePaths.length; i++) {\r\n curPath = mergePaths[i];\r\n if (prevPath !== null && pathContains(prevPath, curPath)) {\r\n throw new Error(errorPrefix +\r\n 'contains a path ' +\r\n prevPath.toString() +\r\n ' that is ancestor of another path ' +\r\n curPath.toString());\r\n }\r\n prevPath = curPath;\r\n }\r\n};\r\n/**\r\n * pre-validate an object passed as an argument to firebase function (\r\n * must be an object - e.g. for firebase.update()).\r\n */\r\nconst validateFirebaseMergeDataArg = function (fnName, data, path, optional) {\r\n if (optional && data === undefined) {\r\n return;\r\n }\r\n const errorPrefix$1 = errorPrefix(fnName, 'values');\r\n if (!(data && typeof data === 'object') || Array.isArray(data)) {\r\n throw new Error(errorPrefix$1 + ' must be an object containing the children to replace.');\r\n }\r\n const mergePaths = [];\r\n each(data, (key, value) => {\r\n const curPath = new Path(key);\r\n validateFirebaseData(errorPrefix$1, value, pathChild(path, curPath));\r\n if (pathGetBack(curPath) === '.priority') {\r\n if (!isValidPriority(value)) {\r\n throw new Error(errorPrefix$1 +\r\n \"contains an invalid value for '\" +\r\n curPath.toString() +\r\n \"', which must be a valid \" +\r\n 'Firebase priority (a string, finite number, server value, or null).');\r\n }\r\n }\r\n mergePaths.push(curPath);\r\n });\r\n validateFirebaseMergePaths(errorPrefix$1, mergePaths);\r\n};\r\nconst validatePriority = function (fnName, priority, optional) {\r\n if (optional && priority === undefined) {\r\n return;\r\n }\r\n if (isInvalidJSONNumber(priority)) {\r\n throw new Error(errorPrefix(fnName, 'priority') +\r\n 'is ' +\r\n priority.toString() +\r\n ', but must be a valid Firebase priority (a string, finite number, ' +\r\n 'server value, or null).');\r\n }\r\n // Special case to allow importing data with a .sv.\r\n if (!isValidPriority(priority)) {\r\n throw new Error(errorPrefix(fnName, 'priority') +\r\n 'must be a valid Firebase priority ' +\r\n '(a string, finite number, server value, or null).');\r\n }\r\n};\r\nconst validateKey = function (fnName, argumentName, key, optional) {\r\n if (optional && key === undefined) {\r\n return;\r\n }\r\n if (!isValidKey(key)) {\r\n throw new Error(errorPrefix(fnName, argumentName) +\r\n 'was an invalid key = \"' +\r\n key +\r\n '\". Firebase keys must be non-empty strings and ' +\r\n 'can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\").');\r\n }\r\n};\r\n/**\r\n * @internal\r\n */\r\nconst validatePathString = function (fnName, argumentName, pathString, optional) {\r\n if (optional && pathString === undefined) {\r\n return;\r\n }\r\n if (!isValidPathString(pathString)) {\r\n throw new Error(errorPrefix(fnName, argumentName) +\r\n 'was an invalid path = \"' +\r\n pathString +\r\n '\". Paths must be non-empty strings and ' +\r\n 'can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\"');\r\n }\r\n};\r\nconst validateRootPathString = function (fnName, argumentName, pathString, optional) {\r\n if (pathString) {\r\n // Allow '/.info/' at the beginning.\r\n pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n }\r\n validatePathString(fnName, argumentName, pathString, optional);\r\n};\r\n/**\r\n * @internal\r\n */\r\nconst validateWritablePath = function (fnName, path) {\r\n if (pathGetFront(path) === '.info') {\r\n throw new Error(fnName + \" failed = Can't modify data under /.info/\");\r\n }\r\n};\r\nconst validateUrl = function (fnName, parsedUrl) {\r\n // TODO = Validate server better.\r\n const pathString = parsedUrl.path.toString();\r\n if (!(typeof parsedUrl.repoInfo.host === 'string') ||\r\n parsedUrl.repoInfo.host.length === 0 ||\r\n (!isValidKey(parsedUrl.repoInfo.namespace) &&\r\n parsedUrl.repoInfo.host.split(':')[0] !== 'localhost') ||\r\n (pathString.length !== 0 && !isValidRootPathString(pathString))) {\r\n throw new Error(errorPrefix(fnName, 'url') +\r\n 'must be a valid firebase URL and ' +\r\n 'the path can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\".');\r\n }\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The event queue serves a few purposes:\r\n * 1. It ensures we maintain event order in the face of event callbacks doing operations that result in more\r\n * events being queued.\r\n * 2. raiseQueuedEvents() handles being called reentrantly nicely. That is, if in the course of raising events,\r\n * raiseQueuedEvents() is called again, the \"inner\" call will pick up raising events where the \"outer\" call\r\n * left off, ensuring that the events are still raised synchronously and in order.\r\n * 3. You can use raiseEventsAtPath and raiseEventsForChangedPath to ensure only relevant previously-queued\r\n * events are raised synchronously.\r\n *\r\n * NOTE: This can all go away if/when we move to async events.\r\n *\r\n */\r\nclass EventQueue {\r\n constructor() {\r\n this.eventLists_ = [];\r\n /**\r\n * Tracks recursion depth of raiseQueuedEvents_, for debugging purposes.\r\n */\r\n this.recursionDepth_ = 0;\r\n }\r\n}\r\n/**\r\n * @param eventDataList - The new events to queue.\r\n */\r\nfunction eventQueueQueueEvents(eventQueue, eventDataList) {\r\n // We group events by path, storing them in a single EventList, to make it easier to skip over them quickly.\r\n let currList = null;\r\n for (let i = 0; i < eventDataList.length; i++) {\r\n const data = eventDataList[i];\r\n const path = data.getPath();\r\n if (currList !== null && !pathEquals(path, currList.path)) {\r\n eventQueue.eventLists_.push(currList);\r\n currList = null;\r\n }\r\n if (currList === null) {\r\n currList = { events: [], path };\r\n }\r\n currList.events.push(data);\r\n }\r\n if (currList) {\r\n eventQueue.eventLists_.push(currList);\r\n }\r\n}\r\n/**\r\n * Queues the specified events and synchronously raises all events (including previously queued ones)\r\n * for the specified path.\r\n *\r\n * It is assumed that the new events are all for the specified path.\r\n *\r\n * @param path - The path to raise events for.\r\n * @param eventDataList - The new events to raise.\r\n */\r\nfunction eventQueueRaiseEventsAtPath(eventQueue, path, eventDataList) {\r\n eventQueueQueueEvents(eventQueue, eventDataList);\r\n eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath => pathEquals(eventPath, path));\r\n}\r\n/**\r\n * Queues the specified events and synchronously raises all events (including previously queued ones) for\r\n * locations related to the specified change path (i.e. all ancestors and descendants).\r\n *\r\n * It is assumed that the new events are all related (ancestor or descendant) to the specified path.\r\n *\r\n * @param changedPath - The path to raise events for.\r\n * @param eventDataList - The events to raise\r\n */\r\nfunction eventQueueRaiseEventsForChangedPath(eventQueue, changedPath, eventDataList) {\r\n eventQueueQueueEvents(eventQueue, eventDataList);\r\n eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath => pathContains(eventPath, changedPath) ||\r\n pathContains(changedPath, eventPath));\r\n}\r\nfunction eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, predicate) {\r\n eventQueue.recursionDepth_++;\r\n let sentAll = true;\r\n for (let i = 0; i < eventQueue.eventLists_.length; i++) {\r\n const eventList = eventQueue.eventLists_[i];\r\n if (eventList) {\r\n const eventPath = eventList.path;\r\n if (predicate(eventPath)) {\r\n eventListRaise(eventQueue.eventLists_[i]);\r\n eventQueue.eventLists_[i] = null;\r\n }\r\n else {\r\n sentAll = false;\r\n }\r\n }\r\n }\r\n if (sentAll) {\r\n eventQueue.eventLists_ = [];\r\n }\r\n eventQueue.recursionDepth_--;\r\n}\r\n/**\r\n * Iterates through the list and raises each event\r\n */\r\nfunction eventListRaise(eventList) {\r\n for (let i = 0; i < eventList.events.length; i++) {\r\n const eventData = eventList.events[i];\r\n if (eventData !== null) {\r\n eventList.events[i] = null;\r\n const eventFn = eventData.getEventRunner();\r\n if (logger) {\r\n log('event: ' + eventData.toString());\r\n }\r\n exceptionGuard(eventFn);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst INTERRUPT_REASON = 'repo_interrupt';\r\n/**\r\n * If a transaction does not succeed after 25 retries, we abort it. Among other\r\n * things this ensure that if there's ever a bug causing a mismatch between\r\n * client / server hashes for some data, we won't retry indefinitely.\r\n */\r\nconst MAX_TRANSACTION_RETRIES = 25;\r\n/**\r\n * A connection to a single data repository.\r\n */\r\nclass Repo {\r\n constructor(repoInfo_, forceRestClient_, authTokenProvider_, appCheckProvider_) {\r\n this.repoInfo_ = repoInfo_;\r\n this.forceRestClient_ = forceRestClient_;\r\n this.authTokenProvider_ = authTokenProvider_;\r\n this.appCheckProvider_ = appCheckProvider_;\r\n this.dataUpdateCount = 0;\r\n this.statsListener_ = null;\r\n this.eventQueue_ = new EventQueue();\r\n this.nextWriteId_ = 1;\r\n this.interceptServerDataCallback_ = null;\r\n /** A list of data pieces and paths to be set when this client disconnects. */\r\n this.onDisconnect_ = newSparseSnapshotTree();\r\n /** Stores queues of outstanding transactions for Firebase locations. */\r\n this.transactionQueueTree_ = new Tree();\r\n // TODO: This should be @private but it's used by test_access.js and internal.js\r\n this.persistentConnection_ = null;\r\n // This key is intentionally not updated if RepoInfo is later changed or replaced\r\n this.key = this.repoInfo_.toURLString();\r\n }\r\n /**\r\n * @returns The URL corresponding to the root of this Firebase.\r\n */\r\n toString() {\r\n return ((this.repoInfo_.secure ? 'https://' : 'http://') + this.repoInfo_.host);\r\n }\r\n}\r\nfunction repoStart(repo, appId, authOverride) {\r\n repo.stats_ = statsManagerGetCollection(repo.repoInfo_);\r\n if (repo.forceRestClient_ || beingCrawled()) {\r\n repo.server_ = new ReadonlyRestClient(repo.repoInfo_, (pathString, data, isMerge, tag) => {\r\n repoOnDataUpdate(repo, pathString, data, isMerge, tag);\r\n }, repo.authTokenProvider_, repo.appCheckProvider_);\r\n // Minor hack: Fire onConnect immediately, since there's no actual connection.\r\n setTimeout(() => repoOnConnectStatus(repo, /* connectStatus= */ true), 0);\r\n }\r\n else {\r\n // Validate authOverride\r\n if (typeof authOverride !== 'undefined' && authOverride !== null) {\r\n if (typeof authOverride !== 'object') {\r\n throw new Error('Only objects are supported for option databaseAuthVariableOverride');\r\n }\r\n try {\r\n stringify(authOverride);\r\n }\r\n catch (e) {\r\n throw new Error('Invalid authOverride provided: ' + e);\r\n }\r\n }\r\n repo.persistentConnection_ = new PersistentConnection(repo.repoInfo_, appId, (pathString, data, isMerge, tag) => {\r\n repoOnDataUpdate(repo, pathString, data, isMerge, tag);\r\n }, (connectStatus) => {\r\n repoOnConnectStatus(repo, connectStatus);\r\n }, (updates) => {\r\n repoOnServerInfoUpdate(repo, updates);\r\n }, repo.authTokenProvider_, repo.appCheckProvider_, authOverride);\r\n repo.server_ = repo.persistentConnection_;\r\n }\r\n repo.authTokenProvider_.addTokenChangeListener(token => {\r\n repo.server_.refreshAuthToken(token);\r\n });\r\n repo.appCheckProvider_.addTokenChangeListener(result => {\r\n repo.server_.refreshAppCheckToken(result.token);\r\n });\r\n // In the case of multiple Repos for the same repoInfo (i.e. there are multiple Firebase.Contexts being used),\r\n // we only want to create one StatsReporter. As such, we'll report stats over the first Repo created.\r\n repo.statsReporter_ = statsManagerGetOrCreateReporter(repo.repoInfo_, () => new StatsReporter(repo.stats_, repo.server_));\r\n // Used for .info.\r\n repo.infoData_ = new SnapshotHolder();\r\n repo.infoSyncTree_ = new SyncTree({\r\n startListening: (query, tag, currentHashFn, onComplete) => {\r\n let infoEvents = [];\r\n const node = repo.infoData_.getNode(query._path);\r\n // This is possibly a hack, but we have different semantics for .info endpoints. We don't raise null events\r\n // on initial data...\r\n if (!node.isEmpty()) {\r\n infoEvents = syncTreeApplyServerOverwrite(repo.infoSyncTree_, query._path, node);\r\n setTimeout(() => {\r\n onComplete('ok');\r\n }, 0);\r\n }\r\n return infoEvents;\r\n },\r\n stopListening: () => { }\r\n });\r\n repoUpdateInfo(repo, 'connected', false);\r\n repo.serverSyncTree_ = new SyncTree({\r\n startListening: (query, tag, currentHashFn, onComplete) => {\r\n repo.server_.listen(query, currentHashFn, tag, (status, data) => {\r\n const events = onComplete(status, data);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, query._path, events);\r\n });\r\n // No synchronous events for network-backed sync trees\r\n return [];\r\n },\r\n stopListening: (query, tag) => {\r\n repo.server_.unlisten(query, tag);\r\n }\r\n });\r\n}\r\n/**\r\n * @returns The time in milliseconds, taking the server offset into account if we have one.\r\n */\r\nfunction repoServerTime(repo) {\r\n const offsetNode = repo.infoData_.getNode(new Path('.info/serverTimeOffset'));\r\n const offset = offsetNode.val() || 0;\r\n return new Date().getTime() + offset;\r\n}\r\n/**\r\n * Generate ServerValues using some variables from the repo object.\r\n */\r\nfunction repoGenerateServerValues(repo) {\r\n return generateWithValues({\r\n timestamp: repoServerTime(repo)\r\n });\r\n}\r\n/**\r\n * Called by realtime when we get new messages from the server.\r\n */\r\nfunction repoOnDataUpdate(repo, pathString, data, isMerge, tag) {\r\n // For testing.\r\n repo.dataUpdateCount++;\r\n const path = new Path(pathString);\r\n data = repo.interceptServerDataCallback_\r\n ? repo.interceptServerDataCallback_(pathString, data)\r\n : data;\r\n let events = [];\r\n if (tag) {\r\n if (isMerge) {\r\n const taggedChildren = map(data, (raw) => nodeFromJSON(raw));\r\n events = syncTreeApplyTaggedQueryMerge(repo.serverSyncTree_, path, taggedChildren, tag);\r\n }\r\n else {\r\n const taggedSnap = nodeFromJSON(data);\r\n events = syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, path, taggedSnap, tag);\r\n }\r\n }\r\n else if (isMerge) {\r\n const changedChildren = map(data, (raw) => nodeFromJSON(raw));\r\n events = syncTreeApplyServerMerge(repo.serverSyncTree_, path, changedChildren);\r\n }\r\n else {\r\n const snap = nodeFromJSON(data);\r\n events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap);\r\n }\r\n let affectedPath = path;\r\n if (events.length > 0) {\r\n // Since we have a listener outstanding for each transaction, receiving any events\r\n // is a proxy for some change having occurred.\r\n affectedPath = repoRerunTransactions(repo, path);\r\n }\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, events);\r\n}\r\nfunction repoOnConnectStatus(repo, connectStatus) {\r\n repoUpdateInfo(repo, 'connected', connectStatus);\r\n if (connectStatus === false) {\r\n repoRunOnDisconnectEvents(repo);\r\n }\r\n}\r\nfunction repoOnServerInfoUpdate(repo, updates) {\r\n each(updates, (key, value) => {\r\n repoUpdateInfo(repo, key, value);\r\n });\r\n}\r\nfunction repoUpdateInfo(repo, pathString, value) {\r\n const path = new Path('/.info/' + pathString);\r\n const newNode = nodeFromJSON(value);\r\n repo.infoData_.updateSnapshot(path, newNode);\r\n const events = syncTreeApplyServerOverwrite(repo.infoSyncTree_, path, newNode);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n}\r\nfunction repoGetNextWriteId(repo) {\r\n return repo.nextWriteId_++;\r\n}\r\n/**\r\n * The purpose of `getValue` is to return the latest known value\r\n * satisfying `query`.\r\n *\r\n * This method will first check for in-memory cached values\r\n * belonging to active listeners. If they are found, such values\r\n * are considered to be the most up-to-date.\r\n *\r\n * If the client is not connected, this method will wait until the\r\n * repo has established a connection and then request the value for `query`.\r\n * If the client is not able to retrieve the query result for another reason,\r\n * it reports an error.\r\n *\r\n * @param query - The query to surface a value for.\r\n */\r\nfunction repoGetValue(repo, query, eventRegistration) {\r\n // Only active queries are cached. There is no persisted cache.\r\n const cached = syncTreeGetServerValue(repo.serverSyncTree_, query);\r\n if (cached != null) {\r\n return Promise.resolve(cached);\r\n }\r\n return repo.server_.get(query).then(payload => {\r\n const node = nodeFromJSON(payload).withIndex(query._queryParams.getIndex());\r\n /**\r\n * Below we simulate the actions of an `onlyOnce` `onValue()` event where:\r\n * Add an event registration,\r\n * Update data at the path,\r\n * Raise any events,\r\n * Cleanup the SyncTree\r\n */\r\n syncTreeAddEventRegistration(repo.serverSyncTree_, query, eventRegistration, true);\r\n let events;\r\n if (query._queryParams.loadsAllData()) {\r\n events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, query._path, node);\r\n }\r\n else {\r\n const tag = syncTreeTagForQuery(repo.serverSyncTree_, query);\r\n events = syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, query._path, node, tag);\r\n }\r\n /*\r\n * We need to raise events in the scenario where `get()` is called at a parent path, and\r\n * while the `get()` is pending, `onValue` is called at a child location. While get() is waiting\r\n * for the data, `onValue` will register a new event. Then, get() will come back, and update the syncTree\r\n * and its corresponding serverCache, including the child location where `onValue` is called. Then,\r\n * `onValue` will receive the event from the server, but look at the syncTree and see that the data received\r\n * from the server is already at the SyncPoint, and so the `onValue` callback will never get fired.\r\n * Calling `eventQueueRaiseEventsForChangedPath()` is the correct way to propagate the events and\r\n * ensure the corresponding child events will get fired.\r\n */\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, query._path, events);\r\n syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, eventRegistration, null, true);\r\n return node;\r\n }, err => {\r\n repoLog(repo, 'get for query ' + stringify(query) + ' failed: ' + err);\r\n return Promise.reject(new Error(err));\r\n });\r\n}\r\nfunction repoSetWithPriority(repo, path, newVal, newPriority, onComplete) {\r\n repoLog(repo, 'set', {\r\n path: path.toString(),\r\n value: newVal,\r\n priority: newPriority\r\n });\r\n // TODO: Optimize this behavior to either (a) store flag to skip resolving where possible and / or\r\n // (b) store unresolved paths on JSON parse\r\n const serverValues = repoGenerateServerValues(repo);\r\n const newNodeUnresolved = nodeFromJSON(newVal, newPriority);\r\n const existing = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path);\r\n const newNode = resolveDeferredValueSnapshot(newNodeUnresolved, existing, serverValues);\r\n const writeId = repoGetNextWriteId(repo);\r\n const events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, writeId, true);\r\n eventQueueQueueEvents(repo.eventQueue_, events);\r\n repo.server_.put(path.toString(), newNodeUnresolved.val(/*export=*/ true), (status, errorReason) => {\r\n const success = status === 'ok';\r\n if (!success) {\r\n warn('set at ' + path + ' failed: ' + status);\r\n }\r\n const clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, clearEvents);\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n const affectedPath = repoAbortTransactions(repo, path);\r\n repoRerunTransactions(repo, affectedPath);\r\n // We queued the events above, so just flush the queue here\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, []);\r\n}\r\nfunction repoUpdate(repo, path, childrenToMerge, onComplete) {\r\n repoLog(repo, 'update', { path: path.toString(), value: childrenToMerge });\r\n // Start with our existing data and merge each child into it.\r\n let empty = true;\r\n const serverValues = repoGenerateServerValues(repo);\r\n const changedChildren = {};\r\n each(childrenToMerge, (changedKey, changedValue) => {\r\n empty = false;\r\n changedChildren[changedKey] = resolveDeferredValueTree(pathChild(path, changedKey), nodeFromJSON(changedValue), repo.serverSyncTree_, serverValues);\r\n });\r\n if (!empty) {\r\n const writeId = repoGetNextWriteId(repo);\r\n const events = syncTreeApplyUserMerge(repo.serverSyncTree_, path, changedChildren, writeId);\r\n eventQueueQueueEvents(repo.eventQueue_, events);\r\n repo.server_.merge(path.toString(), childrenToMerge, (status, errorReason) => {\r\n const success = status === 'ok';\r\n if (!success) {\r\n warn('update at ' + path + ' failed: ' + status);\r\n }\r\n const clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);\r\n const affectedPath = clearEvents.length > 0 ? repoRerunTransactions(repo, path) : path;\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, clearEvents);\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n each(childrenToMerge, (changedPath) => {\r\n const affectedPath = repoAbortTransactions(repo, pathChild(path, changedPath));\r\n repoRerunTransactions(repo, affectedPath);\r\n });\r\n // We queued the events above, so just flush the queue here\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, []);\r\n }\r\n else {\r\n log(\"update() called with empty data. Don't do anything.\");\r\n repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\r\n }\r\n}\r\n/**\r\n * Applies all of the changes stored up in the onDisconnect_ tree.\r\n */\r\nfunction repoRunOnDisconnectEvents(repo) {\r\n repoLog(repo, 'onDisconnectEvents');\r\n const serverValues = repoGenerateServerValues(repo);\r\n const resolvedOnDisconnectTree = newSparseSnapshotTree();\r\n sparseSnapshotTreeForEachTree(repo.onDisconnect_, newEmptyPath(), (path, node) => {\r\n const resolved = resolveDeferredValueTree(path, node, repo.serverSyncTree_, serverValues);\r\n sparseSnapshotTreeRemember(resolvedOnDisconnectTree, path, resolved);\r\n });\r\n let events = [];\r\n sparseSnapshotTreeForEachTree(resolvedOnDisconnectTree, newEmptyPath(), (path, snap) => {\r\n events = events.concat(syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap));\r\n const affectedPath = repoAbortTransactions(repo, path);\r\n repoRerunTransactions(repo, affectedPath);\r\n });\r\n repo.onDisconnect_ = newSparseSnapshotTree();\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, newEmptyPath(), events);\r\n}\r\nfunction repoOnDisconnectCancel(repo, path, onComplete) {\r\n repo.server_.onDisconnectCancel(path.toString(), (status, errorReason) => {\r\n if (status === 'ok') {\r\n sparseSnapshotTreeForget(repo.onDisconnect_, path);\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoOnDisconnectSet(repo, path, value, onComplete) {\r\n const newNode = nodeFromJSON(value);\r\n repo.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), (status, errorReason) => {\r\n if (status === 'ok') {\r\n sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoOnDisconnectSetWithPriority(repo, path, value, priority, onComplete) {\r\n const newNode = nodeFromJSON(value, priority);\r\n repo.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), (status, errorReason) => {\r\n if (status === 'ok') {\r\n sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoOnDisconnectUpdate(repo, path, childrenToMerge, onComplete) {\r\n if (isEmpty(childrenToMerge)) {\r\n log(\"onDisconnect().update() called with empty data. Don't do anything.\");\r\n repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\r\n return;\r\n }\r\n repo.server_.onDisconnectMerge(path.toString(), childrenToMerge, (status, errorReason) => {\r\n if (status === 'ok') {\r\n each(childrenToMerge, (childName, childNode) => {\r\n const newChildNode = nodeFromJSON(childNode);\r\n sparseSnapshotTreeRemember(repo.onDisconnect_, pathChild(path, childName), newChildNode);\r\n });\r\n }\r\n repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n });\r\n}\r\nfunction repoAddEventCallbackForQuery(repo, query, eventRegistration) {\r\n let events;\r\n if (pathGetFront(query._path) === '.info') {\r\n events = syncTreeAddEventRegistration(repo.infoSyncTree_, query, eventRegistration);\r\n }\r\n else {\r\n events = syncTreeAddEventRegistration(repo.serverSyncTree_, query, eventRegistration);\r\n }\r\n eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\r\n}\r\nfunction repoRemoveEventCallbackForQuery(repo, query, eventRegistration) {\r\n // These are guaranteed not to raise events, since we're not passing in a cancelError. However, we can future-proof\r\n // a little bit by handling the return values anyways.\r\n let events;\r\n if (pathGetFront(query._path) === '.info') {\r\n events = syncTreeRemoveEventRegistration(repo.infoSyncTree_, query, eventRegistration);\r\n }\r\n else {\r\n events = syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, eventRegistration);\r\n }\r\n eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\r\n}\r\nfunction repoInterrupt(repo) {\r\n if (repo.persistentConnection_) {\r\n repo.persistentConnection_.interrupt(INTERRUPT_REASON);\r\n }\r\n}\r\nfunction repoResume(repo) {\r\n if (repo.persistentConnection_) {\r\n repo.persistentConnection_.resume(INTERRUPT_REASON);\r\n }\r\n}\r\nfunction repoLog(repo, ...varArgs) {\r\n let prefix = '';\r\n if (repo.persistentConnection_) {\r\n prefix = repo.persistentConnection_.id + ':';\r\n }\r\n log(prefix, ...varArgs);\r\n}\r\nfunction repoCallOnCompleteCallback(repo, callback, status, errorReason) {\r\n if (callback) {\r\n exceptionGuard(() => {\r\n if (status === 'ok') {\r\n callback(null);\r\n }\r\n else {\r\n const code = (status || 'error').toUpperCase();\r\n let message = code;\r\n if (errorReason) {\r\n message += ': ' + errorReason;\r\n }\r\n const error = new Error(message);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n error.code = code;\r\n callback(error);\r\n }\r\n });\r\n }\r\n}\r\n/**\r\n * Creates a new transaction, adds it to the transactions we're tracking, and\r\n * sends it to the server if possible.\r\n *\r\n * @param path - Path at which to do transaction.\r\n * @param transactionUpdate - Update callback.\r\n * @param onComplete - Completion callback.\r\n * @param unwatcher - Function that will be called when the transaction no longer\r\n * need data updates for `path`.\r\n * @param applyLocally - Whether or not to make intermediate results visible\r\n */\r\nfunction repoStartTransaction(repo, path, transactionUpdate, onComplete, unwatcher, applyLocally) {\r\n repoLog(repo, 'transaction on ' + path);\r\n // Initialize transaction.\r\n const transaction = {\r\n path,\r\n update: transactionUpdate,\r\n onComplete,\r\n // One of TransactionStatus enums.\r\n status: null,\r\n // Used when combining transactions at different locations to figure out\r\n // which one goes first.\r\n order: LUIDGenerator(),\r\n // Whether to raise local events for this transaction.\r\n applyLocally,\r\n // Count of how many times we've retried the transaction.\r\n retryCount: 0,\r\n // Function to call to clean up our .on() listener.\r\n unwatcher,\r\n // Stores why a transaction was aborted.\r\n abortReason: null,\r\n currentWriteId: null,\r\n currentInputSnapshot: null,\r\n currentOutputSnapshotRaw: null,\r\n currentOutputSnapshotResolved: null\r\n };\r\n // Run transaction initially.\r\n const currentState = repoGetLatestState(repo, path, undefined);\r\n transaction.currentInputSnapshot = currentState;\r\n const newVal = transaction.update(currentState.val());\r\n if (newVal === undefined) {\r\n // Abort transaction.\r\n transaction.unwatcher();\r\n transaction.currentOutputSnapshotRaw = null;\r\n transaction.currentOutputSnapshotResolved = null;\r\n if (transaction.onComplete) {\r\n transaction.onComplete(null, false, transaction.currentInputSnapshot);\r\n }\r\n }\r\n else {\r\n validateFirebaseData('transaction failed: Data returned ', newVal, transaction.path);\r\n // Mark as run and add to our queue.\r\n transaction.status = 0 /* TransactionStatus.RUN */;\r\n const queueNode = treeSubTree(repo.transactionQueueTree_, path);\r\n const nodeQueue = treeGetValue(queueNode) || [];\r\n nodeQueue.push(transaction);\r\n treeSetValue(queueNode, nodeQueue);\r\n // Update visibleData and raise events\r\n // Note: We intentionally raise events after updating all of our\r\n // transaction state, since the user could start new transactions from the\r\n // event callbacks.\r\n let priorityForNode;\r\n if (typeof newVal === 'object' &&\r\n newVal !== null &&\r\n contains(newVal, '.priority')) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n priorityForNode = safeGet(newVal, '.priority');\r\n assert(isValidPriority(priorityForNode), 'Invalid priority returned by transaction. ' +\r\n 'Priority must be a valid string, finite number, server value, or null.');\r\n }\r\n else {\r\n const currentNode = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path) ||\r\n ChildrenNode.EMPTY_NODE;\r\n priorityForNode = currentNode.getPriority().val();\r\n }\r\n const serverValues = repoGenerateServerValues(repo);\r\n const newNodeUnresolved = nodeFromJSON(newVal, priorityForNode);\r\n const newNode = resolveDeferredValueSnapshot(newNodeUnresolved, currentState, serverValues);\r\n transaction.currentOutputSnapshotRaw = newNodeUnresolved;\r\n transaction.currentOutputSnapshotResolved = newNode;\r\n transaction.currentWriteId = repoGetNextWriteId(repo);\r\n const events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, transaction.currentWriteId, transaction.applyLocally);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n }\r\n}\r\n/**\r\n * @param excludeSets - A specific set to exclude\r\n */\r\nfunction repoGetLatestState(repo, path, excludeSets) {\r\n return (syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path, excludeSets) ||\r\n ChildrenNode.EMPTY_NODE);\r\n}\r\n/**\r\n * Sends any already-run transactions that aren't waiting for outstanding\r\n * transactions to complete.\r\n *\r\n * Externally it's called with no arguments, but it calls itself recursively\r\n * with a particular transactionQueueTree node to recurse through the tree.\r\n *\r\n * @param node - transactionQueueTree node to start at.\r\n */\r\nfunction repoSendReadyTransactions(repo, node = repo.transactionQueueTree_) {\r\n // Before recursing, make sure any completed transactions are removed.\r\n if (!node) {\r\n repoPruneCompletedTransactionsBelowNode(repo, node);\r\n }\r\n if (treeGetValue(node)) {\r\n const queue = repoBuildTransactionQueue(repo, node);\r\n assert(queue.length > 0, 'Sending zero length transaction queue');\r\n const allRun = queue.every((transaction) => transaction.status === 0 /* TransactionStatus.RUN */);\r\n // If they're all run (and not sent), we can send them. Else, we must wait.\r\n if (allRun) {\r\n repoSendTransactionQueue(repo, treeGetPath(node), queue);\r\n }\r\n }\r\n else if (treeHasChildren(node)) {\r\n treeForEachChild(node, childNode => {\r\n repoSendReadyTransactions(repo, childNode);\r\n });\r\n }\r\n}\r\n/**\r\n * Given a list of run transactions, send them to the server and then handle\r\n * the result (success or failure).\r\n *\r\n * @param path - The location of the queue.\r\n * @param queue - Queue of transactions under the specified location.\r\n */\r\nfunction repoSendTransactionQueue(repo, path, queue) {\r\n // Mark transactions as sent and increment retry count!\r\n const setsToIgnore = queue.map(txn => {\r\n return txn.currentWriteId;\r\n });\r\n const latestState = repoGetLatestState(repo, path, setsToIgnore);\r\n let snapToSend = latestState;\r\n const latestHash = latestState.hash();\r\n for (let i = 0; i < queue.length; i++) {\r\n const txn = queue[i];\r\n assert(txn.status === 0 /* TransactionStatus.RUN */, 'tryToSendTransactionQueue_: items in queue should all be run.');\r\n txn.status = 1 /* TransactionStatus.SENT */;\r\n txn.retryCount++;\r\n const relativePath = newRelativePath(path, txn.path);\r\n // If we've gotten to this point, the output snapshot must be defined.\r\n snapToSend = snapToSend.updateChild(relativePath /** @type {!Node} */, txn.currentOutputSnapshotRaw);\r\n }\r\n const dataToSend = snapToSend.val(true);\r\n const pathToSend = path;\r\n // Send the put.\r\n repo.server_.put(pathToSend.toString(), dataToSend, (status) => {\r\n repoLog(repo, 'transaction put response', {\r\n path: pathToSend.toString(),\r\n status\r\n });\r\n let events = [];\r\n if (status === 'ok') {\r\n // Queue up the callbacks and fire them after cleaning up all of our\r\n // transaction state, since the callback could trigger more\r\n // transactions or sets.\r\n const callbacks = [];\r\n for (let i = 0; i < queue.length; i++) {\r\n queue[i].status = 2 /* TransactionStatus.COMPLETED */;\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId));\r\n if (queue[i].onComplete) {\r\n // We never unset the output snapshot, and given that this\r\n // transaction is complete, it should be set\r\n callbacks.push(() => queue[i].onComplete(null, true, queue[i].currentOutputSnapshotResolved));\r\n }\r\n queue[i].unwatcher();\r\n }\r\n // Now remove the completed transactions.\r\n repoPruneCompletedTransactionsBelowNode(repo, treeSubTree(repo.transactionQueueTree_, path));\r\n // There may be pending transactions that we can now send.\r\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n // Finally, trigger onComplete callbacks.\r\n for (let i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n }\r\n else {\r\n // transactions are no longer sent. Update their status appropriately.\r\n if (status === 'datastale') {\r\n for (let i = 0; i < queue.length; i++) {\r\n if (queue[i].status === 3 /* TransactionStatus.SENT_NEEDS_ABORT */) {\r\n queue[i].status = 4 /* TransactionStatus.NEEDS_ABORT */;\r\n }\r\n else {\r\n queue[i].status = 0 /* TransactionStatus.RUN */;\r\n }\r\n }\r\n }\r\n else {\r\n warn('transaction at ' + pathToSend.toString() + ' failed: ' + status);\r\n for (let i = 0; i < queue.length; i++) {\r\n queue[i].status = 4 /* TransactionStatus.NEEDS_ABORT */;\r\n queue[i].abortReason = status;\r\n }\r\n }\r\n repoRerunTransactions(repo, path);\r\n }\r\n }, latestHash);\r\n}\r\n/**\r\n * Finds all transactions dependent on the data at changedPath and reruns them.\r\n *\r\n * Should be called any time cached data changes.\r\n *\r\n * Return the highest path that was affected by rerunning transactions. This\r\n * is the path at which events need to be raised for.\r\n *\r\n * @param changedPath - The path in mergedData that changed.\r\n * @returns The rootmost path that was affected by rerunning transactions.\r\n */\r\nfunction repoRerunTransactions(repo, changedPath) {\r\n const rootMostTransactionNode = repoGetAncestorTransactionNode(repo, changedPath);\r\n const path = treeGetPath(rootMostTransactionNode);\r\n const queue = repoBuildTransactionQueue(repo, rootMostTransactionNode);\r\n repoRerunTransactionQueue(repo, queue, path);\r\n return path;\r\n}\r\n/**\r\n * Does all the work of rerunning transactions (as well as cleans up aborted\r\n * transactions and whatnot).\r\n *\r\n * @param queue - The queue of transactions to run.\r\n * @param path - The path the queue is for.\r\n */\r\nfunction repoRerunTransactionQueue(repo, queue, path) {\r\n if (queue.length === 0) {\r\n return; // Nothing to do!\r\n }\r\n // Queue up the callbacks and fire them after cleaning up all of our\r\n // transaction state, since the callback could trigger more transactions or\r\n // sets.\r\n const callbacks = [];\r\n let events = [];\r\n // Ignore all of the sets we're going to re-run.\r\n const txnsToRerun = queue.filter(q => {\r\n return q.status === 0 /* TransactionStatus.RUN */;\r\n });\r\n const setsToIgnore = txnsToRerun.map(q => {\r\n return q.currentWriteId;\r\n });\r\n for (let i = 0; i < queue.length; i++) {\r\n const transaction = queue[i];\r\n const relativePath = newRelativePath(path, transaction.path);\r\n let abortTransaction = false, abortReason;\r\n assert(relativePath !== null, 'rerunTransactionsUnderNode_: relativePath should not be null.');\r\n if (transaction.status === 4 /* TransactionStatus.NEEDS_ABORT */) {\r\n abortTransaction = true;\r\n abortReason = transaction.abortReason;\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n }\r\n else if (transaction.status === 0 /* TransactionStatus.RUN */) {\r\n if (transaction.retryCount >= MAX_TRANSACTION_RETRIES) {\r\n abortTransaction = true;\r\n abortReason = 'maxretry';\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n }\r\n else {\r\n // This code reruns a transaction\r\n const currentNode = repoGetLatestState(repo, transaction.path, setsToIgnore);\r\n transaction.currentInputSnapshot = currentNode;\r\n const newData = queue[i].update(currentNode.val());\r\n if (newData !== undefined) {\r\n validateFirebaseData('transaction failed: Data returned ', newData, transaction.path);\r\n let newDataNode = nodeFromJSON(newData);\r\n const hasExplicitPriority = typeof newData === 'object' &&\r\n newData != null &&\r\n contains(newData, '.priority');\r\n if (!hasExplicitPriority) {\r\n // Keep the old priority if there wasn't a priority explicitly specified.\r\n newDataNode = newDataNode.updatePriority(currentNode.getPriority());\r\n }\r\n const oldWriteId = transaction.currentWriteId;\r\n const serverValues = repoGenerateServerValues(repo);\r\n const newNodeResolved = resolveDeferredValueSnapshot(newDataNode, currentNode, serverValues);\r\n transaction.currentOutputSnapshotRaw = newDataNode;\r\n transaction.currentOutputSnapshotResolved = newNodeResolved;\r\n transaction.currentWriteId = repoGetNextWriteId(repo);\r\n // Mutates setsToIgnore in place\r\n setsToIgnore.splice(setsToIgnore.indexOf(oldWriteId), 1);\r\n events = events.concat(syncTreeApplyUserOverwrite(repo.serverSyncTree_, transaction.path, newNodeResolved, transaction.currentWriteId, transaction.applyLocally));\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, oldWriteId, true));\r\n }\r\n else {\r\n abortTransaction = true;\r\n abortReason = 'nodata';\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n }\r\n }\r\n }\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n events = [];\r\n if (abortTransaction) {\r\n // Abort.\r\n queue[i].status = 2 /* TransactionStatus.COMPLETED */;\r\n // Removing a listener can trigger pruning which can muck with\r\n // mergedData/visibleData (as it prunes data). So defer the unwatcher\r\n // until we're done.\r\n (function (unwatcher) {\r\n setTimeout(unwatcher, Math.floor(0));\r\n })(queue[i].unwatcher);\r\n if (queue[i].onComplete) {\r\n if (abortReason === 'nodata') {\r\n callbacks.push(() => queue[i].onComplete(null, false, queue[i].currentInputSnapshot));\r\n }\r\n else {\r\n callbacks.push(() => queue[i].onComplete(new Error(abortReason), false, null));\r\n }\r\n }\r\n }\r\n }\r\n // Clean up completed transactions.\r\n repoPruneCompletedTransactionsBelowNode(repo, repo.transactionQueueTree_);\r\n // Now fire callbacks, now that we're in a good, known state.\r\n for (let i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n // Try to send the transaction result to the server.\r\n repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n}\r\n/**\r\n * Returns the rootmost ancestor node of the specified path that has a pending\r\n * transaction on it, or just returns the node for the given path if there are\r\n * no pending transactions on any ancestor.\r\n *\r\n * @param path - The location to start at.\r\n * @returns The rootmost node with a transaction.\r\n */\r\nfunction repoGetAncestorTransactionNode(repo, path) {\r\n let front;\r\n // Start at the root and walk deeper into the tree towards path until we\r\n // find a node with pending transactions.\r\n let transactionNode = repo.transactionQueueTree_;\r\n front = pathGetFront(path);\r\n while (front !== null && treeGetValue(transactionNode) === undefined) {\r\n transactionNode = treeSubTree(transactionNode, front);\r\n path = pathPopFront(path);\r\n front = pathGetFront(path);\r\n }\r\n return transactionNode;\r\n}\r\n/**\r\n * Builds the queue of all transactions at or below the specified\r\n * transactionNode.\r\n *\r\n * @param transactionNode\r\n * @returns The generated queue.\r\n */\r\nfunction repoBuildTransactionQueue(repo, transactionNode) {\r\n // Walk any child transaction queues and aggregate them into a single queue.\r\n const transactionQueue = [];\r\n repoAggregateTransactionQueuesForNode(repo, transactionNode, transactionQueue);\r\n // Sort them by the order the transactions were created.\r\n transactionQueue.sort((a, b) => a.order - b.order);\r\n return transactionQueue;\r\n}\r\nfunction repoAggregateTransactionQueuesForNode(repo, node, queue) {\r\n const nodeQueue = treeGetValue(node);\r\n if (nodeQueue) {\r\n for (let i = 0; i < nodeQueue.length; i++) {\r\n queue.push(nodeQueue[i]);\r\n }\r\n }\r\n treeForEachChild(node, child => {\r\n repoAggregateTransactionQueuesForNode(repo, child, queue);\r\n });\r\n}\r\n/**\r\n * Remove COMPLETED transactions at or below this node in the transactionQueueTree_.\r\n */\r\nfunction repoPruneCompletedTransactionsBelowNode(repo, node) {\r\n const queue = treeGetValue(node);\r\n if (queue) {\r\n let to = 0;\r\n for (let from = 0; from < queue.length; from++) {\r\n if (queue[from].status !== 2 /* TransactionStatus.COMPLETED */) {\r\n queue[to] = queue[from];\r\n to++;\r\n }\r\n }\r\n queue.length = to;\r\n treeSetValue(node, queue.length > 0 ? queue : undefined);\r\n }\r\n treeForEachChild(node, childNode => {\r\n repoPruneCompletedTransactionsBelowNode(repo, childNode);\r\n });\r\n}\r\n/**\r\n * Aborts all transactions on ancestors or descendants of the specified path.\r\n * Called when doing a set() or update() since we consider them incompatible\r\n * with transactions.\r\n *\r\n * @param path - Path for which we want to abort related transactions.\r\n */\r\nfunction repoAbortTransactions(repo, path) {\r\n const affectedPath = treeGetPath(repoGetAncestorTransactionNode(repo, path));\r\n const transactionNode = treeSubTree(repo.transactionQueueTree_, path);\r\n treeForEachAncestor(transactionNode, (node) => {\r\n repoAbortTransactionsOnNode(repo, node);\r\n });\r\n repoAbortTransactionsOnNode(repo, transactionNode);\r\n treeForEachDescendant(transactionNode, (node) => {\r\n repoAbortTransactionsOnNode(repo, node);\r\n });\r\n return affectedPath;\r\n}\r\n/**\r\n * Abort transactions stored in this transaction queue node.\r\n *\r\n * @param node - Node to abort transactions for.\r\n */\r\nfunction repoAbortTransactionsOnNode(repo, node) {\r\n const queue = treeGetValue(node);\r\n if (queue) {\r\n // Queue up the callbacks and fire them after cleaning up all of our\r\n // transaction state, since the callback could trigger more transactions\r\n // or sets.\r\n const callbacks = [];\r\n // Go through queue. Any already-sent transactions must be marked for\r\n // abort, while the unsent ones can be immediately aborted and removed.\r\n let events = [];\r\n let lastSent = -1;\r\n for (let i = 0; i < queue.length; i++) {\r\n if (queue[i].status === 3 /* TransactionStatus.SENT_NEEDS_ABORT */) ;\r\n else if (queue[i].status === 1 /* TransactionStatus.SENT */) {\r\n assert(lastSent === i - 1, 'All SENT items should be at beginning of queue.');\r\n lastSent = i;\r\n // Mark transaction for abort when it comes back.\r\n queue[i].status = 3 /* TransactionStatus.SENT_NEEDS_ABORT */;\r\n queue[i].abortReason = 'set';\r\n }\r\n else {\r\n assert(queue[i].status === 0 /* TransactionStatus.RUN */, 'Unexpected transaction status in abort');\r\n // We can abort it immediately.\r\n queue[i].unwatcher();\r\n events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId, true));\r\n if (queue[i].onComplete) {\r\n callbacks.push(queue[i].onComplete.bind(null, new Error('set'), false, null));\r\n }\r\n }\r\n }\r\n if (lastSent === -1) {\r\n // We're not waiting for any sent transactions. We can clear the queue.\r\n treeSetValue(node, undefined);\r\n }\r\n else {\r\n // Remove the transactions we aborted.\r\n queue.length = lastSent + 1;\r\n }\r\n // Now fire the callbacks.\r\n eventQueueRaiseEventsForChangedPath(repo.eventQueue_, treeGetPath(node), events);\r\n for (let i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction decodePath(pathString) {\r\n let pathStringDecoded = '';\r\n const pieces = pathString.split('/');\r\n for (let i = 0; i < pieces.length; i++) {\r\n if (pieces[i].length > 0) {\r\n let piece = pieces[i];\r\n try {\r\n piece = decodeURIComponent(piece.replace(/\\+/g, ' '));\r\n }\r\n catch (e) { }\r\n pathStringDecoded += '/' + piece;\r\n }\r\n }\r\n return pathStringDecoded;\r\n}\r\n/**\r\n * @returns key value hash\r\n */\r\nfunction decodeQuery(queryString) {\r\n const results = {};\r\n if (queryString.charAt(0) === '?') {\r\n queryString = queryString.substring(1);\r\n }\r\n for (const segment of queryString.split('&')) {\r\n if (segment.length === 0) {\r\n continue;\r\n }\r\n const kv = segment.split('=');\r\n if (kv.length === 2) {\r\n results[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);\r\n }\r\n else {\r\n warn(`Invalid query segment '${segment}' in query '${queryString}'`);\r\n }\r\n }\r\n return results;\r\n}\r\nconst parseRepoInfo = function (dataURL, nodeAdmin) {\r\n const parsedUrl = parseDatabaseURL(dataURL), namespace = parsedUrl.namespace;\r\n if (parsedUrl.domain === 'firebase.com') {\r\n fatal(parsedUrl.host +\r\n ' is no longer supported. ' +\r\n 'Please use .firebaseio.com instead');\r\n }\r\n // Catch common error of uninitialized namespace value.\r\n if ((!namespace || namespace === 'undefined') &&\r\n parsedUrl.domain !== 'localhost') {\r\n fatal('Cannot parse Firebase url. Please use https://.firebaseio.com');\r\n }\r\n if (!parsedUrl.secure) {\r\n warnIfPageIsSecure();\r\n }\r\n const webSocketOnly = parsedUrl.scheme === 'ws' || parsedUrl.scheme === 'wss';\r\n return {\r\n repoInfo: new RepoInfo(parsedUrl.host, parsedUrl.secure, namespace, webSocketOnly, nodeAdmin, \r\n /*persistenceKey=*/ '', \r\n /*includeNamespaceInQueryParams=*/ namespace !== parsedUrl.subdomain),\r\n path: new Path(parsedUrl.pathString)\r\n };\r\n};\r\nconst parseDatabaseURL = function (dataURL) {\r\n // Default to empty strings in the event of a malformed string.\r\n let host = '', domain = '', subdomain = '', pathString = '', namespace = '';\r\n // Always default to SSL, unless otherwise specified.\r\n let secure = true, scheme = 'https', port = 443;\r\n // Don't do any validation here. The caller is responsible for validating the result of parsing.\r\n if (typeof dataURL === 'string') {\r\n // Parse scheme.\r\n let colonInd = dataURL.indexOf('//');\r\n if (colonInd >= 0) {\r\n scheme = dataURL.substring(0, colonInd - 1);\r\n dataURL = dataURL.substring(colonInd + 2);\r\n }\r\n // Parse host, path, and query string.\r\n let slashInd = dataURL.indexOf('/');\r\n if (slashInd === -1) {\r\n slashInd = dataURL.length;\r\n }\r\n let questionMarkInd = dataURL.indexOf('?');\r\n if (questionMarkInd === -1) {\r\n questionMarkInd = dataURL.length;\r\n }\r\n host = dataURL.substring(0, Math.min(slashInd, questionMarkInd));\r\n if (slashInd < questionMarkInd) {\r\n // For pathString, questionMarkInd will always come after slashInd\r\n pathString = decodePath(dataURL.substring(slashInd, questionMarkInd));\r\n }\r\n const queryParams = decodeQuery(dataURL.substring(Math.min(dataURL.length, questionMarkInd)));\r\n // If we have a port, use scheme for determining if it's secure.\r\n colonInd = host.indexOf(':');\r\n if (colonInd >= 0) {\r\n secure = scheme === 'https' || scheme === 'wss';\r\n port = parseInt(host.substring(colonInd + 1), 10);\r\n }\r\n else {\r\n colonInd = host.length;\r\n }\r\n const hostWithoutPort = host.slice(0, colonInd);\r\n if (hostWithoutPort.toLowerCase() === 'localhost') {\r\n domain = 'localhost';\r\n }\r\n else if (hostWithoutPort.split('.').length <= 2) {\r\n domain = hostWithoutPort;\r\n }\r\n else {\r\n // Interpret the subdomain of a 3 or more component URL as the namespace name.\r\n const dotInd = host.indexOf('.');\r\n subdomain = host.substring(0, dotInd).toLowerCase();\r\n domain = host.substring(dotInd + 1);\r\n // Normalize namespaces to lowercase to share storage / connection.\r\n namespace = subdomain;\r\n }\r\n // Always treat the value of the `ns` as the namespace name if it is present.\r\n if ('ns' in queryParams) {\r\n namespace = queryParams['ns'];\r\n }\r\n }\r\n return {\r\n host,\r\n port,\r\n domain,\r\n subdomain,\r\n secure,\r\n scheme,\r\n pathString,\r\n namespace\r\n };\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Modeled after base64 web-safe chars, but ordered by ASCII.\r\nconst PUSH_CHARS = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';\r\n/**\r\n * Fancy ID generator that creates 20-character string identifiers with the\r\n * following properties:\r\n *\r\n * 1. They're based on timestamp so that they sort *after* any existing ids.\r\n * 2. They contain 72-bits of random data after the timestamp so that IDs won't\r\n * collide with other clients' IDs.\r\n * 3. They sort *lexicographically* (so the timestamp is converted to characters\r\n * that will sort properly).\r\n * 4. They're monotonically increasing. Even if you generate more than one in\r\n * the same timestamp, the latter ones will sort after the former ones. We do\r\n * this by using the previous random bits but \"incrementing\" them by 1 (only\r\n * in the case of a timestamp collision).\r\n */\r\nconst nextPushId = (function () {\r\n // Timestamp of last push, used to prevent local collisions if you push twice\r\n // in one ms.\r\n let lastPushTime = 0;\r\n // We generate 72-bits of randomness which get turned into 12 characters and\r\n // appended to the timestamp to prevent collisions with other clients. We\r\n // store the last characters we generated because in the event of a collision,\r\n // we'll use those same characters except \"incremented\" by one.\r\n const lastRandChars = [];\r\n return function (now) {\r\n const duplicateTime = now === lastPushTime;\r\n lastPushTime = now;\r\n let i;\r\n const timeStampChars = new Array(8);\r\n for (i = 7; i >= 0; i--) {\r\n timeStampChars[i] = PUSH_CHARS.charAt(now % 64);\r\n // NOTE: Can't use << here because javascript will convert to int and lose\r\n // the upper bits.\r\n now = Math.floor(now / 64);\r\n }\r\n assert(now === 0, 'Cannot push at time == 0');\r\n let id = timeStampChars.join('');\r\n if (!duplicateTime) {\r\n for (i = 0; i < 12; i++) {\r\n lastRandChars[i] = Math.floor(Math.random() * 64);\r\n }\r\n }\r\n else {\r\n // If the timestamp hasn't changed since last push, use the same random\r\n // number, except incremented by 1.\r\n for (i = 11; i >= 0 && lastRandChars[i] === 63; i--) {\r\n lastRandChars[i] = 0;\r\n }\r\n lastRandChars[i]++;\r\n }\r\n for (i = 0; i < 12; i++) {\r\n id += PUSH_CHARS.charAt(lastRandChars[i]);\r\n }\r\n assert(id.length === 20, 'nextPushId: Length should be 20.');\r\n return id;\r\n };\r\n})();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Encapsulates the data needed to raise an event\r\n */\r\nclass DataEvent {\r\n /**\r\n * @param eventType - One of: value, child_added, child_changed, child_moved, child_removed\r\n * @param eventRegistration - The function to call to with the event data. User provided\r\n * @param snapshot - The data backing the event\r\n * @param prevName - Optional, the name of the previous child for child_* events.\r\n */\r\n constructor(eventType, eventRegistration, snapshot, prevName) {\r\n this.eventType = eventType;\r\n this.eventRegistration = eventRegistration;\r\n this.snapshot = snapshot;\r\n this.prevName = prevName;\r\n }\r\n getPath() {\r\n const ref = this.snapshot.ref;\r\n if (this.eventType === 'value') {\r\n return ref._path;\r\n }\r\n else {\r\n return ref.parent._path;\r\n }\r\n }\r\n getEventType() {\r\n return this.eventType;\r\n }\r\n getEventRunner() {\r\n return this.eventRegistration.getEventRunner(this);\r\n }\r\n toString() {\r\n return (this.getPath().toString() +\r\n ':' +\r\n this.eventType +\r\n ':' +\r\n stringify(this.snapshot.exportVal()));\r\n }\r\n}\r\nclass CancelEvent {\r\n constructor(eventRegistration, error, path) {\r\n this.eventRegistration = eventRegistration;\r\n this.error = error;\r\n this.path = path;\r\n }\r\n getPath() {\r\n return this.path;\r\n }\r\n getEventType() {\r\n return 'cancel';\r\n }\r\n getEventRunner() {\r\n return this.eventRegistration.getEventRunner(this);\r\n }\r\n toString() {\r\n return this.path.toString() + ':cancel';\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A wrapper class that converts events from the database@exp SDK to the legacy\r\n * Database SDK. Events are not converted directly as event registration relies\r\n * on reference comparison of the original user callback (see `matches()`) and\r\n * relies on equality of the legacy SDK's `context` object.\r\n */\r\nclass CallbackContext {\r\n constructor(snapshotCallback, cancelCallback) {\r\n this.snapshotCallback = snapshotCallback;\r\n this.cancelCallback = cancelCallback;\r\n }\r\n onValue(expDataSnapshot, previousChildName) {\r\n this.snapshotCallback.call(null, expDataSnapshot, previousChildName);\r\n }\r\n onCancel(error) {\r\n assert(this.hasCancelCallback, 'Raising a cancel event on a listener with no cancel callback');\r\n return this.cancelCallback.call(null, error);\r\n }\r\n get hasCancelCallback() {\r\n return !!this.cancelCallback;\r\n }\r\n matches(other) {\r\n return (this.snapshotCallback === other.snapshotCallback ||\r\n (this.snapshotCallback.userCallback !== undefined &&\r\n this.snapshotCallback.userCallback ===\r\n other.snapshotCallback.userCallback &&\r\n this.snapshotCallback.context === other.snapshotCallback.context));\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The `onDisconnect` class allows you to write or clear data when your client\r\n * disconnects from the Database server. These updates occur whether your\r\n * client disconnects cleanly or not, so you can rely on them to clean up data\r\n * even if a connection is dropped or a client crashes.\r\n *\r\n * The `onDisconnect` class is most commonly used to manage presence in\r\n * applications where it is useful to detect how many clients are connected and\r\n * when other clients disconnect. See\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information.\r\n *\r\n * To avoid problems when a connection is dropped before the requests can be\r\n * transferred to the Database server, these functions should be called before\r\n * writing any data.\r\n *\r\n * Note that `onDisconnect` operations are only triggered once. If you want an\r\n * operation to occur each time a disconnect occurs, you'll need to re-establish\r\n * the `onDisconnect` operations each time you reconnect.\r\n */\r\nclass OnDisconnect {\r\n /** @hideconstructor */\r\n constructor(_repo, _path) {\r\n this._repo = _repo;\r\n this._path = _path;\r\n }\r\n /**\r\n * Cancels all previously queued `onDisconnect()` set or update events for this\r\n * location and all children.\r\n *\r\n * If a write has been queued for this location via a `set()` or `update()` at a\r\n * parent location, the write at this location will be canceled, though writes\r\n * to sibling locations will still occur.\r\n *\r\n * @returns Resolves when synchronization to the server is complete.\r\n */\r\n cancel() {\r\n const deferred = new Deferred();\r\n repoOnDisconnectCancel(this._repo, this._path, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Ensures the data at this location is deleted when the client is disconnected\r\n * (due to closing the browser, navigating to a new page, or network issues).\r\n *\r\n * @returns Resolves when synchronization to the server is complete.\r\n */\r\n remove() {\r\n validateWritablePath('OnDisconnect.remove', this._path);\r\n const deferred = new Deferred();\r\n repoOnDisconnectSet(this._repo, this._path, null, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Ensures the data at this location is set to the specified value when the\r\n * client is disconnected (due to closing the browser, navigating to a new page,\r\n * or network issues).\r\n *\r\n * `set()` is especially useful for implementing \"presence\" systems, where a\r\n * value should be changed or cleared when a user disconnects so that they\r\n * appear \"offline\" to other users. See\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information.\r\n *\r\n * Note that `onDisconnect` operations are only triggered once. If you want an\r\n * operation to occur each time a disconnect occurs, you'll need to re-establish\r\n * the `onDisconnect` operations each time.\r\n *\r\n * @param value - The value to be written to this location on disconnect (can\r\n * be an object, array, string, number, boolean, or null).\r\n * @returns Resolves when synchronization to the Database is complete.\r\n */\r\n set(value) {\r\n validateWritablePath('OnDisconnect.set', this._path);\r\n validateFirebaseDataArg('OnDisconnect.set', value, this._path, false);\r\n const deferred = new Deferred();\r\n repoOnDisconnectSet(this._repo, this._path, value, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Ensures the data at this location is set to the specified value and priority\r\n * when the client is disconnected (due to closing the browser, navigating to a\r\n * new page, or network issues).\r\n *\r\n * @param value - The value to be written to this location on disconnect (can\r\n * be an object, array, string, number, boolean, or null).\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when synchronization to the Database is complete.\r\n */\r\n setWithPriority(value, priority) {\r\n validateWritablePath('OnDisconnect.setWithPriority', this._path);\r\n validateFirebaseDataArg('OnDisconnect.setWithPriority', value, this._path, false);\r\n validatePriority('OnDisconnect.setWithPriority', priority, false);\r\n const deferred = new Deferred();\r\n repoOnDisconnectSetWithPriority(this._repo, this._path, value, priority, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n /**\r\n * Writes multiple values at this location when the client is disconnected (due\r\n * to closing the browser, navigating to a new page, or network issues).\r\n *\r\n * The `values` argument contains multiple property-value pairs that will be\r\n * written to the Database together. Each child property can either be a simple\r\n * property (for example, \"name\") or a relative path (for example, \"name/first\")\r\n * from the current location to the data to update.\r\n *\r\n * As opposed to the `set()` method, `update()` can be use to selectively update\r\n * only the referenced properties at the current location (instead of replacing\r\n * all the child properties at the current location).\r\n *\r\n * @param values - Object containing multiple values.\r\n * @returns Resolves when synchronization to the Database is complete.\r\n */\r\n update(values) {\r\n validateWritablePath('OnDisconnect.update', this._path);\r\n validateFirebaseMergeDataArg('OnDisconnect.update', values, this._path, false);\r\n const deferred = new Deferred();\r\n repoOnDisconnectUpdate(this._repo, this._path, values, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @internal\r\n */\r\nclass QueryImpl {\r\n /**\r\n * @hideconstructor\r\n */\r\n constructor(_repo, _path, _queryParams, _orderByCalled) {\r\n this._repo = _repo;\r\n this._path = _path;\r\n this._queryParams = _queryParams;\r\n this._orderByCalled = _orderByCalled;\r\n }\r\n get key() {\r\n if (pathIsEmpty(this._path)) {\r\n return null;\r\n }\r\n else {\r\n return pathGetBack(this._path);\r\n }\r\n }\r\n get ref() {\r\n return new ReferenceImpl(this._repo, this._path);\r\n }\r\n get _queryIdentifier() {\r\n const obj = queryParamsGetQueryObject(this._queryParams);\r\n const id = ObjectToUniqueKey(obj);\r\n return id === '{}' ? 'default' : id;\r\n }\r\n /**\r\n * An object representation of the query parameters used by this Query.\r\n */\r\n get _queryObject() {\r\n return queryParamsGetQueryObject(this._queryParams);\r\n }\r\n isEqual(other) {\r\n other = getModularInstance(other);\r\n if (!(other instanceof QueryImpl)) {\r\n return false;\r\n }\r\n const sameRepo = this._repo === other._repo;\r\n const samePath = pathEquals(this._path, other._path);\r\n const sameQueryIdentifier = this._queryIdentifier === other._queryIdentifier;\r\n return sameRepo && samePath && sameQueryIdentifier;\r\n }\r\n toJSON() {\r\n return this.toString();\r\n }\r\n toString() {\r\n return this._repo.toString() + pathToUrlEncodedString(this._path);\r\n }\r\n}\r\n/**\r\n * Validates that no other order by call has been made\r\n */\r\nfunction validateNoPreviousOrderByCall(query, fnName) {\r\n if (query._orderByCalled === true) {\r\n throw new Error(fnName + \": You can't combine multiple orderBy calls.\");\r\n }\r\n}\r\n/**\r\n * Validates start/end values for queries.\r\n */\r\nfunction validateQueryEndpoints(params) {\r\n let startNode = null;\r\n let endNode = null;\r\n if (params.hasStart()) {\r\n startNode = params.getIndexStartValue();\r\n }\r\n if (params.hasEnd()) {\r\n endNode = params.getIndexEndValue();\r\n }\r\n if (params.getIndex() === KEY_INDEX) {\r\n const tooManyArgsError = 'Query: When ordering by key, you may only pass one argument to ' +\r\n 'startAt(), endAt(), or equalTo().';\r\n const wrongArgTypeError = 'Query: When ordering by key, the argument passed to startAt(), startAfter(), ' +\r\n 'endAt(), endBefore(), or equalTo() must be a string.';\r\n if (params.hasStart()) {\r\n const startName = params.getIndexStartName();\r\n if (startName !== MIN_NAME) {\r\n throw new Error(tooManyArgsError);\r\n }\r\n else if (typeof startNode !== 'string') {\r\n throw new Error(wrongArgTypeError);\r\n }\r\n }\r\n if (params.hasEnd()) {\r\n const endName = params.getIndexEndName();\r\n if (endName !== MAX_NAME) {\r\n throw new Error(tooManyArgsError);\r\n }\r\n else if (typeof endNode !== 'string') {\r\n throw new Error(wrongArgTypeError);\r\n }\r\n }\r\n }\r\n else if (params.getIndex() === PRIORITY_INDEX) {\r\n if ((startNode != null && !isValidPriority(startNode)) ||\r\n (endNode != null && !isValidPriority(endNode))) {\r\n throw new Error('Query: When ordering by priority, the first argument passed to startAt(), ' +\r\n 'startAfter() endAt(), endBefore(), or equalTo() must be a valid priority value ' +\r\n '(null, a number, or a string).');\r\n }\r\n }\r\n else {\r\n assert(params.getIndex() instanceof PathIndex ||\r\n params.getIndex() === VALUE_INDEX, 'unknown index type.');\r\n if ((startNode != null && typeof startNode === 'object') ||\r\n (endNode != null && typeof endNode === 'object')) {\r\n throw new Error('Query: First argument passed to startAt(), startAfter(), endAt(), endBefore(), or ' +\r\n 'equalTo() cannot be an object.');\r\n }\r\n }\r\n}\r\n/**\r\n * Validates that limit* has been called with the correct combination of parameters\r\n */\r\nfunction validateLimit(params) {\r\n if (params.hasStart() &&\r\n params.hasEnd() &&\r\n params.hasLimit() &&\r\n !params.hasAnchoredLimit()) {\r\n throw new Error(\"Query: Can't combine startAt(), startAfter(), endAt(), endBefore(), and limit(). Use \" +\r\n 'limitToFirst() or limitToLast() instead.');\r\n }\r\n}\r\n/**\r\n * @internal\r\n */\r\nclass ReferenceImpl extends QueryImpl {\r\n /** @hideconstructor */\r\n constructor(repo, path) {\r\n super(repo, path, new QueryParams(), false);\r\n }\r\n get parent() {\r\n const parentPath = pathParent(this._path);\r\n return parentPath === null\r\n ? null\r\n : new ReferenceImpl(this._repo, parentPath);\r\n }\r\n get root() {\r\n let ref = this;\r\n while (ref.parent !== null) {\r\n ref = ref.parent;\r\n }\r\n return ref;\r\n }\r\n}\r\n/**\r\n * A `DataSnapshot` contains data from a Database location.\r\n *\r\n * Any time you read data from the Database, you receive the data as a\r\n * `DataSnapshot`. A `DataSnapshot` is passed to the event callbacks you attach\r\n * with `on()` or `once()`. You can extract the contents of the snapshot as a\r\n * JavaScript object by calling the `val()` method. Alternatively, you can\r\n * traverse into the snapshot by calling `child()` to return child snapshots\r\n * (which you could then call `val()` on).\r\n *\r\n * A `DataSnapshot` is an efficiently generated, immutable copy of the data at\r\n * a Database location. It cannot be modified and will never change (to modify\r\n * data, you always call the `set()` method on a `Reference` directly).\r\n */\r\nclass DataSnapshot {\r\n /**\r\n * @param _node - A SnapshotNode to wrap.\r\n * @param ref - The location this snapshot came from.\r\n * @param _index - The iteration order for this snapshot\r\n * @hideconstructor\r\n */\r\n constructor(_node, \r\n /**\r\n * The location of this DataSnapshot.\r\n */\r\n ref, _index) {\r\n this._node = _node;\r\n this.ref = ref;\r\n this._index = _index;\r\n }\r\n /**\r\n * Gets the priority value of the data in this `DataSnapshot`.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data |Sorting and filtering data}\r\n * ).\r\n */\r\n get priority() {\r\n // typecast here because we never return deferred values or internal priorities (MAX_PRIORITY)\r\n return this._node.getPriority().val();\r\n }\r\n /**\r\n * The key (last part of the path) of the location of this `DataSnapshot`.\r\n *\r\n * The last token in a Database location is considered its key. For example,\r\n * \"ada\" is the key for the /users/ada/ node. Accessing the key on any\r\n * `DataSnapshot` will return the key for the location that generated it.\r\n * However, accessing the key on the root URL of a Database will return\r\n * `null`.\r\n */\r\n get key() {\r\n return this.ref.key;\r\n }\r\n /** Returns the number of child properties of this `DataSnapshot`. */\r\n get size() {\r\n return this._node.numChildren();\r\n }\r\n /**\r\n * Gets another `DataSnapshot` for the location at the specified relative path.\r\n *\r\n * Passing a relative path to the `child()` method of a DataSnapshot returns\r\n * another `DataSnapshot` for the location at the specified relative path. The\r\n * relative path can either be a simple child name (for example, \"ada\") or a\r\n * deeper, slash-separated path (for example, \"ada/name/first\"). If the child\r\n * location has no data, an empty `DataSnapshot` (that is, a `DataSnapshot`\r\n * whose value is `null`) is returned.\r\n *\r\n * @param path - A relative path to the location of child data.\r\n */\r\n child(path) {\r\n const childPath = new Path(path);\r\n const childRef = child(this.ref, path);\r\n return new DataSnapshot(this._node.getChild(childPath), childRef, PRIORITY_INDEX);\r\n }\r\n /**\r\n * Returns true if this `DataSnapshot` contains any data. It is slightly more\r\n * efficient than using `snapshot.val() !== null`.\r\n */\r\n exists() {\r\n return !this._node.isEmpty();\r\n }\r\n /**\r\n * Exports the entire contents of the DataSnapshot as a JavaScript object.\r\n *\r\n * The `exportVal()` method is similar to `val()`, except priority information\r\n * is included (if available), making it suitable for backing up your data.\r\n *\r\n * @returns The DataSnapshot's contents as a JavaScript value (Object,\r\n * Array, string, number, boolean, or `null`).\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n exportVal() {\r\n return this._node.val(true);\r\n }\r\n /**\r\n * Enumerates the top-level children in the `DataSnapshot`.\r\n *\r\n * Because of the way JavaScript objects work, the ordering of data in the\r\n * JavaScript object returned by `val()` is not guaranteed to match the\r\n * ordering on the server nor the ordering of `onChildAdded()` events. That is\r\n * where `forEach()` comes in handy. It guarantees the children of a\r\n * `DataSnapshot` will be iterated in their query order.\r\n *\r\n * If no explicit `orderBy*()` method is used, results are returned\r\n * ordered by key (unless priorities are used, in which case, results are\r\n * returned by priority).\r\n *\r\n * @param action - A function that will be called for each child DataSnapshot.\r\n * The callback can return true to cancel further enumeration.\r\n * @returns true if enumeration was canceled due to your callback returning\r\n * true.\r\n */\r\n forEach(action) {\r\n if (this._node.isLeafNode()) {\r\n return false;\r\n }\r\n const childrenNode = this._node;\r\n // Sanitize the return value to a boolean. ChildrenNode.forEachChild has a weird return type...\r\n return !!childrenNode.forEachChild(this._index, (key, node) => {\r\n return action(new DataSnapshot(node, child(this.ref, key), PRIORITY_INDEX));\r\n });\r\n }\r\n /**\r\n * Returns true if the specified child path has (non-null) data.\r\n *\r\n * @param path - A relative path to the location of a potential child.\r\n * @returns `true` if data exists at the specified child path; else\r\n * `false`.\r\n */\r\n hasChild(path) {\r\n const childPath = new Path(path);\r\n return !this._node.getChild(childPath).isEmpty();\r\n }\r\n /**\r\n * Returns whether or not the `DataSnapshot` has any non-`null` child\r\n * properties.\r\n *\r\n * You can use `hasChildren()` to determine if a `DataSnapshot` has any\r\n * children. If it does, you can enumerate them using `forEach()`. If it\r\n * doesn't, then either this snapshot contains a primitive value (which can be\r\n * retrieved with `val()`) or it is empty (in which case, `val()` will return\r\n * `null`).\r\n *\r\n * @returns true if this snapshot has any children; else false.\r\n */\r\n hasChildren() {\r\n if (this._node.isLeafNode()) {\r\n return false;\r\n }\r\n else {\r\n return !this._node.isEmpty();\r\n }\r\n }\r\n /**\r\n * Returns a JSON-serializable representation of this object.\r\n */\r\n toJSON() {\r\n return this.exportVal();\r\n }\r\n /**\r\n * Extracts a JavaScript value from a `DataSnapshot`.\r\n *\r\n * Depending on the data in a `DataSnapshot`, the `val()` method may return a\r\n * scalar type (string, number, or boolean), an array, or an object. It may\r\n * also return null, indicating that the `DataSnapshot` is empty (contains no\r\n * data).\r\n *\r\n * @returns The DataSnapshot's contents as a JavaScript value (Object,\r\n * Array, string, number, boolean, or `null`).\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n val() {\r\n return this._node.val();\r\n }\r\n}\r\n/**\r\n *\r\n * Returns a `Reference` representing the location in the Database\r\n * corresponding to the provided path. If no path is provided, the `Reference`\r\n * will point to the root of the Database.\r\n *\r\n * @param db - The database instance to obtain a reference for.\r\n * @param path - Optional path representing the location the returned\r\n * `Reference` will point. If not provided, the returned `Reference` will\r\n * point to the root of the Database.\r\n * @returns If a path is provided, a `Reference`\r\n * pointing to the provided path. Otherwise, a `Reference` pointing to the\r\n * root of the Database.\r\n */\r\nfunction ref(db, path) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('ref');\r\n return path !== undefined ? child(db._root, path) : db._root;\r\n}\r\n/**\r\n * Returns a `Reference` representing the location in the Database\r\n * corresponding to the provided Firebase URL.\r\n *\r\n * An exception is thrown if the URL is not a valid Firebase Database URL or it\r\n * has a different domain than the current `Database` instance.\r\n *\r\n * Note that all query parameters (`orderBy`, `limitToLast`, etc.) are ignored\r\n * and are not applied to the returned `Reference`.\r\n *\r\n * @param db - The database instance to obtain a reference for.\r\n * @param url - The Firebase URL at which the returned `Reference` will\r\n * point.\r\n * @returns A `Reference` pointing to the provided\r\n * Firebase URL.\r\n */\r\nfunction refFromURL(db, url) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('refFromURL');\r\n const parsedURL = parseRepoInfo(url, db._repo.repoInfo_.nodeAdmin);\r\n validateUrl('refFromURL', parsedURL);\r\n const repoInfo = parsedURL.repoInfo;\r\n if (!db._repo.repoInfo_.isCustomHost() &&\r\n repoInfo.host !== db._repo.repoInfo_.host) {\r\n fatal('refFromURL' +\r\n ': Host name does not match the current database: ' +\r\n '(found ' +\r\n repoInfo.host +\r\n ' but expected ' +\r\n db._repo.repoInfo_.host +\r\n ')');\r\n }\r\n return ref(db, parsedURL.path.toString());\r\n}\r\n/**\r\n * Gets a `Reference` for the location at the specified relative path.\r\n *\r\n * The relative path can either be a simple child name (for example, \"ada\") or\r\n * a deeper slash-separated path (for example, \"ada/name/first\").\r\n *\r\n * @param parent - The parent location.\r\n * @param path - A relative path from this location to the desired child\r\n * location.\r\n * @returns The specified child location.\r\n */\r\nfunction child(parent, path) {\r\n parent = getModularInstance(parent);\r\n if (pathGetFront(parent._path) === null) {\r\n validateRootPathString('child', 'path', path, false);\r\n }\r\n else {\r\n validatePathString('child', 'path', path, false);\r\n }\r\n return new ReferenceImpl(parent._repo, pathChild(parent._path, path));\r\n}\r\n/**\r\n * Returns an `OnDisconnect` object - see\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information on how to use it.\r\n *\r\n * @param ref - The reference to add OnDisconnect triggers for.\r\n */\r\nfunction onDisconnect(ref) {\r\n ref = getModularInstance(ref);\r\n return new OnDisconnect(ref._repo, ref._path);\r\n}\r\n/**\r\n * Generates a new child location using a unique key and returns its\r\n * `Reference`.\r\n *\r\n * This is the most common pattern for adding data to a collection of items.\r\n *\r\n * If you provide a value to `push()`, the value is written to the\r\n * generated location. If you don't pass a value, nothing is written to the\r\n * database and the child remains empty (but you can use the `Reference`\r\n * elsewhere).\r\n *\r\n * The unique keys generated by `push()` are ordered by the current time, so the\r\n * resulting list of items is chronologically sorted. The keys are also\r\n * designed to be unguessable (they contain 72 random bits of entropy).\r\n *\r\n * See {@link https://firebase.google.com/docs/database/web/lists-of-data#append_to_a_list_of_data | Append to a list of data}.\r\n * See {@link https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html | The 2^120 Ways to Ensure Unique Identifiers}.\r\n *\r\n * @param parent - The parent location.\r\n * @param value - Optional value to be written at the generated location.\r\n * @returns Combined `Promise` and `Reference`; resolves when write is complete,\r\n * but can be used immediately as the `Reference` to the child location.\r\n */\r\nfunction push(parent, value) {\r\n parent = getModularInstance(parent);\r\n validateWritablePath('push', parent._path);\r\n validateFirebaseDataArg('push', value, parent._path, true);\r\n const now = repoServerTime(parent._repo);\r\n const name = nextPushId(now);\r\n // push() returns a ThennableReference whose promise is fulfilled with a\r\n // regular Reference. We use child() to create handles to two different\r\n // references. The first is turned into a ThennableReference below by adding\r\n // then() and catch() methods and is used as the return value of push(). The\r\n // second remains a regular Reference and is used as the fulfilled value of\r\n // the first ThennableReference.\r\n const thennablePushRef = child(parent, name);\r\n const pushRef = child(parent, name);\r\n let promise;\r\n if (value != null) {\r\n promise = set(pushRef, value).then(() => pushRef);\r\n }\r\n else {\r\n promise = Promise.resolve(pushRef);\r\n }\r\n thennablePushRef.then = promise.then.bind(promise);\r\n thennablePushRef.catch = promise.then.bind(promise, undefined);\r\n return thennablePushRef;\r\n}\r\n/**\r\n * Removes the data at this Database location.\r\n *\r\n * Any data at child locations will also be deleted.\r\n *\r\n * The effect of the remove will be visible immediately and the corresponding\r\n * event 'value' will be triggered. Synchronization of the remove to the\r\n * Firebase servers will also be started, and the returned Promise will resolve\r\n * when complete. If provided, the onComplete callback will be called\r\n * asynchronously after synchronization has finished.\r\n *\r\n * @param ref - The location to remove.\r\n * @returns Resolves when remove on server is complete.\r\n */\r\nfunction remove(ref) {\r\n validateWritablePath('remove', ref._path);\r\n return set(ref, null);\r\n}\r\n/**\r\n * Writes data to this Database location.\r\n *\r\n * This will overwrite any data at this location and all child locations.\r\n *\r\n * The effect of the write will be visible immediately, and the corresponding\r\n * events (\"value\", \"child_added\", etc.) will be triggered. Synchronization of\r\n * the data to the Firebase servers will also be started, and the returned\r\n * Promise will resolve when complete. If provided, the `onComplete` callback\r\n * will be called asynchronously after synchronization has finished.\r\n *\r\n * Passing `null` for the new value is equivalent to calling `remove()`; namely,\r\n * all data at this location and all child locations will be deleted.\r\n *\r\n * `set()` will remove any priority stored at this location, so if priority is\r\n * meant to be preserved, you need to use `setWithPriority()` instead.\r\n *\r\n * Note that modifying data with `set()` will cancel any pending transactions\r\n * at that location, so extreme care should be taken if mixing `set()` and\r\n * `transaction()` to modify the same data.\r\n *\r\n * A single `set()` will generate a single \"value\" event at the location where\r\n * the `set()` was performed.\r\n *\r\n * @param ref - The location to write to.\r\n * @param value - The value to be written (string, number, boolean, object,\r\n * array, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction set(ref, value) {\r\n ref = getModularInstance(ref);\r\n validateWritablePath('set', ref._path);\r\n validateFirebaseDataArg('set', value, ref._path, false);\r\n const deferred = new Deferred();\r\n repoSetWithPriority(ref._repo, ref._path, value, \r\n /*priority=*/ null, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Sets a priority for the data at this Database location.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\r\n * ).\r\n *\r\n * @param ref - The location to write to.\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction setPriority(ref, priority) {\r\n ref = getModularInstance(ref);\r\n validateWritablePath('setPriority', ref._path);\r\n validatePriority('setPriority', priority, false);\r\n const deferred = new Deferred();\r\n repoSetWithPriority(ref._repo, pathChild(ref._path, '.priority'), priority, null, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Writes data the Database location. Like `set()` but also specifies the\r\n * priority for that data.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\r\n * ).\r\n *\r\n * @param ref - The location to write to.\r\n * @param value - The value to be written (string, number, boolean, object,\r\n * array, or null).\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction setWithPriority(ref, value, priority) {\r\n validateWritablePath('setWithPriority', ref._path);\r\n validateFirebaseDataArg('setWithPriority', value, ref._path, false);\r\n validatePriority('setWithPriority', priority, false);\r\n if (ref.key === '.length' || ref.key === '.keys') {\r\n throw 'setWithPriority failed: ' + ref.key + ' is a read-only object.';\r\n }\r\n const deferred = new Deferred();\r\n repoSetWithPriority(ref._repo, ref._path, value, priority, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Writes multiple values to the Database at once.\r\n *\r\n * The `values` argument contains multiple property-value pairs that will be\r\n * written to the Database together. Each child property can either be a simple\r\n * property (for example, \"name\") or a relative path (for example,\r\n * \"name/first\") from the current location to the data to update.\r\n *\r\n * As opposed to the `set()` method, `update()` can be use to selectively update\r\n * only the referenced properties at the current location (instead of replacing\r\n * all the child properties at the current location).\r\n *\r\n * The effect of the write will be visible immediately, and the corresponding\r\n * events ('value', 'child_added', etc.) will be triggered. Synchronization of\r\n * the data to the Firebase servers will also be started, and the returned\r\n * Promise will resolve when complete. If provided, the `onComplete` callback\r\n * will be called asynchronously after synchronization has finished.\r\n *\r\n * A single `update()` will generate a single \"value\" event at the location\r\n * where the `update()` was performed, regardless of how many children were\r\n * modified.\r\n *\r\n * Note that modifying data with `update()` will cancel any pending\r\n * transactions at that location, so extreme care should be taken if mixing\r\n * `update()` and `transaction()` to modify the same data.\r\n *\r\n * Passing `null` to `update()` will remove the data at this location.\r\n *\r\n * See\r\n * {@link https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html | Introducing multi-location updates and more}.\r\n *\r\n * @param ref - The location to write to.\r\n * @param values - Object containing multiple values.\r\n * @returns Resolves when update on server is complete.\r\n */\r\nfunction update(ref, values) {\r\n validateFirebaseMergeDataArg('update', values, ref._path, false);\r\n const deferred = new Deferred();\r\n repoUpdate(ref._repo, ref._path, values, deferred.wrapCallback(() => { }));\r\n return deferred.promise;\r\n}\r\n/**\r\n * Gets the most up-to-date result for this query.\r\n *\r\n * @param query - The query to run.\r\n * @returns A `Promise` which resolves to the resulting DataSnapshot if a value is\r\n * available, or rejects if the client is unable to return a value (e.g., if the\r\n * server is unreachable and there is nothing cached).\r\n */\r\nfunction get(query) {\r\n query = getModularInstance(query);\r\n const callbackContext = new CallbackContext(() => { });\r\n const container = new ValueEventRegistration(callbackContext);\r\n return repoGetValue(query._repo, query, container).then(node => {\r\n return new DataSnapshot(node, new ReferenceImpl(query._repo, query._path), query._queryParams.getIndex());\r\n });\r\n}\r\n/**\r\n * Represents registration for 'value' events.\r\n */\r\nclass ValueEventRegistration {\r\n constructor(callbackContext) {\r\n this.callbackContext = callbackContext;\r\n }\r\n respondsTo(eventType) {\r\n return eventType === 'value';\r\n }\r\n createEvent(change, query) {\r\n const index = query._queryParams.getIndex();\r\n return new DataEvent('value', this, new DataSnapshot(change.snapshotNode, new ReferenceImpl(query._repo, query._path), index));\r\n }\r\n getEventRunner(eventData) {\r\n if (eventData.getEventType() === 'cancel') {\r\n return () => this.callbackContext.onCancel(eventData.error);\r\n }\r\n else {\r\n return () => this.callbackContext.onValue(eventData.snapshot, null);\r\n }\r\n }\r\n createCancelEvent(error, path) {\r\n if (this.callbackContext.hasCancelCallback) {\r\n return new CancelEvent(this, error, path);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n matches(other) {\r\n if (!(other instanceof ValueEventRegistration)) {\r\n return false;\r\n }\r\n else if (!other.callbackContext || !this.callbackContext) {\r\n // If no callback specified, we consider it to match any callback.\r\n return true;\r\n }\r\n else {\r\n return other.callbackContext.matches(this.callbackContext);\r\n }\r\n }\r\n hasAnyCallback() {\r\n return this.callbackContext !== null;\r\n }\r\n}\r\n/**\r\n * Represents the registration of a child_x event.\r\n */\r\nclass ChildEventRegistration {\r\n constructor(eventType, callbackContext) {\r\n this.eventType = eventType;\r\n this.callbackContext = callbackContext;\r\n }\r\n respondsTo(eventType) {\r\n let eventToCheck = eventType === 'children_added' ? 'child_added' : eventType;\r\n eventToCheck =\r\n eventToCheck === 'children_removed' ? 'child_removed' : eventToCheck;\r\n return this.eventType === eventToCheck;\r\n }\r\n createCancelEvent(error, path) {\r\n if (this.callbackContext.hasCancelCallback) {\r\n return new CancelEvent(this, error, path);\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n createEvent(change, query) {\r\n assert(change.childName != null, 'Child events should have a childName.');\r\n const childRef = child(new ReferenceImpl(query._repo, query._path), change.childName);\r\n const index = query._queryParams.getIndex();\r\n return new DataEvent(change.type, this, new DataSnapshot(change.snapshotNode, childRef, index), change.prevName);\r\n }\r\n getEventRunner(eventData) {\r\n if (eventData.getEventType() === 'cancel') {\r\n return () => this.callbackContext.onCancel(eventData.error);\r\n }\r\n else {\r\n return () => this.callbackContext.onValue(eventData.snapshot, eventData.prevName);\r\n }\r\n }\r\n matches(other) {\r\n if (other instanceof ChildEventRegistration) {\r\n return (this.eventType === other.eventType &&\r\n (!this.callbackContext ||\r\n !other.callbackContext ||\r\n this.callbackContext.matches(other.callbackContext)));\r\n }\r\n return false;\r\n }\r\n hasAnyCallback() {\r\n return !!this.callbackContext;\r\n }\r\n}\r\nfunction addEventListener(query, eventType, callback, cancelCallbackOrListenOptions, options) {\r\n let cancelCallback;\r\n if (typeof cancelCallbackOrListenOptions === 'object') {\r\n cancelCallback = undefined;\r\n options = cancelCallbackOrListenOptions;\r\n }\r\n if (typeof cancelCallbackOrListenOptions === 'function') {\r\n cancelCallback = cancelCallbackOrListenOptions;\r\n }\r\n if (options && options.onlyOnce) {\r\n const userCallback = callback;\r\n const onceCallback = (dataSnapshot, previousChildName) => {\r\n repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n userCallback(dataSnapshot, previousChildName);\r\n };\r\n onceCallback.userCallback = callback.userCallback;\r\n onceCallback.context = callback.context;\r\n callback = onceCallback;\r\n }\r\n const callbackContext = new CallbackContext(callback, cancelCallback || undefined);\r\n const container = eventType === 'value'\r\n ? new ValueEventRegistration(callbackContext)\r\n : new ChildEventRegistration(eventType, callbackContext);\r\n repoAddEventCallbackForQuery(query._repo, query, container);\r\n return () => repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n}\r\nfunction onValue(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'value', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildAdded(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_added', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildChanged(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_changed', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildMoved(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_moved', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildRemoved(query, callback, cancelCallbackOrListenOptions, options) {\r\n return addEventListener(query, 'child_removed', callback, cancelCallbackOrListenOptions, options);\r\n}\r\n/**\r\n * Detaches a callback previously attached with the corresponding `on*()` (`onValue`, `onChildAdded`) listener.\r\n * Note: This is not the recommended way to remove a listener. Instead, please use the returned callback function from\r\n * the respective `on*` callbacks.\r\n *\r\n * Detach a callback previously attached with `on*()`. Calling `off()` on a parent listener\r\n * will not automatically remove listeners registered on child nodes, `off()`\r\n * must also be called on any child listeners to remove the callback.\r\n *\r\n * If a callback is not specified, all callbacks for the specified eventType\r\n * will be removed. Similarly, if no eventType is specified, all callbacks\r\n * for the `Reference` will be removed.\r\n *\r\n * Individual listeners can also be removed by invoking their unsubscribe\r\n * callbacks.\r\n *\r\n * @param query - The query that the listener was registered with.\r\n * @param eventType - One of the following strings: \"value\", \"child_added\",\r\n * \"child_changed\", \"child_removed\", or \"child_moved.\" If omitted, all callbacks\r\n * for the `Reference` will be removed.\r\n * @param callback - The callback function that was passed to `on()` or\r\n * `undefined` to remove all callbacks.\r\n */\r\nfunction off(query, eventType, callback) {\r\n let container = null;\r\n const expCallback = callback ? new CallbackContext(callback) : null;\r\n if (eventType === 'value') {\r\n container = new ValueEventRegistration(expCallback);\r\n }\r\n else if (eventType) {\r\n container = new ChildEventRegistration(eventType, expCallback);\r\n }\r\n repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n}\r\n/**\r\n * A `QueryConstraint` is used to narrow the set of documents returned by a\r\n * Database query. `QueryConstraint`s are created by invoking {@link endAt},\r\n * {@link endBefore}, {@link startAt}, {@link startAfter}, {@link\r\n * limitToFirst}, {@link limitToLast}, {@link orderByChild},\r\n * {@link orderByChild}, {@link orderByKey} , {@link orderByPriority} ,\r\n * {@link orderByValue} or {@link equalTo} and\r\n * can then be passed to {@link query} to create a new query instance that\r\n * also contains this `QueryConstraint`.\r\n */\r\nclass QueryConstraint {\r\n}\r\nclass QueryEndAtConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('endAt', this._value, query._path, true);\r\n const newParams = queryParamsEndAt(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasEnd()) {\r\n throw new Error('endAt: Starting point was already set (by another call to endAt, ' +\r\n 'endBefore or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified ending point.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The ending point is inclusive, so children with exactly the specified value\r\n * will be included in the query. The optional key argument can be used to\r\n * further limit the range of the query. If it is specified, then children that\r\n * have exactly the specified value must also have a key name less than or equal\r\n * to the specified key.\r\n *\r\n * You can read more about `endAt()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to end at. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to end at, among the children with the previously\r\n * specified priority. This argument is only allowed if ordering by child,\r\n * value, or priority.\r\n */\r\nfunction endAt(value, key) {\r\n validateKey('endAt', 'key', key, true);\r\n return new QueryEndAtConstraint(value, key);\r\n}\r\nclass QueryEndBeforeConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('endBefore', this._value, query._path, false);\r\n const newParams = queryParamsEndBefore(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasEnd()) {\r\n throw new Error('endBefore: Starting point was already set (by another call to endAt, ' +\r\n 'endBefore or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified ending point (exclusive).\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The ending point is exclusive. If only a value is provided, children\r\n * with a value less than the specified value will be included in the query.\r\n * If a key is specified, then children must have a value less than or equal\r\n * to the specified value and a key name less than the specified key.\r\n *\r\n * @param value - The value to end before. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to end before, among the children with the\r\n * previously specified priority. This argument is only allowed if ordering by\r\n * child, value, or priority.\r\n */\r\nfunction endBefore(value, key) {\r\n validateKey('endBefore', 'key', key, true);\r\n return new QueryEndBeforeConstraint(value, key);\r\n}\r\nclass QueryStartAtConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('startAt', this._value, query._path, true);\r\n const newParams = queryParamsStartAt(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasStart()) {\r\n throw new Error('startAt: Starting point was already set (by another call to startAt, ' +\r\n 'startBefore or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified starting point.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The starting point is inclusive, so children with exactly the specified value\r\n * will be included in the query. The optional key argument can be used to\r\n * further limit the range of the query. If it is specified, then children that\r\n * have exactly the specified value must also have a key name greater than or\r\n * equal to the specified key.\r\n *\r\n * You can read more about `startAt()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to start at. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start at. This argument is only allowed if\r\n * ordering by child, value, or priority.\r\n */\r\nfunction startAt(value = null, key) {\r\n validateKey('startAt', 'key', key, true);\r\n return new QueryStartAtConstraint(value, key);\r\n}\r\nclass QueryStartAfterConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('startAfter', this._value, query._path, false);\r\n const newParams = queryParamsStartAfter(query._queryParams, this._value, this._key);\r\n validateLimit(newParams);\r\n validateQueryEndpoints(newParams);\r\n if (query._queryParams.hasStart()) {\r\n throw new Error('startAfter: Starting point was already set (by another call to startAt, ' +\r\n 'startAfter, or equalTo).');\r\n }\r\n return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified starting point (exclusive).\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The starting point is exclusive. If only a value is provided, children\r\n * with a value greater than the specified value will be included in the query.\r\n * If a key is specified, then children must have a value greater than or equal\r\n * to the specified value and a a key name greater than the specified key.\r\n *\r\n * @param value - The value to start after. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start after. This argument is only allowed if\r\n * ordering by child, value, or priority.\r\n */\r\nfunction startAfter(value, key) {\r\n validateKey('startAfter', 'key', key, true);\r\n return new QueryStartAfterConstraint(value, key);\r\n}\r\nclass QueryLimitToFirstConstraint extends QueryConstraint {\r\n constructor(_limit) {\r\n super();\r\n this._limit = _limit;\r\n }\r\n _apply(query) {\r\n if (query._queryParams.hasLimit()) {\r\n throw new Error('limitToFirst: Limit was already set (by another call to limitToFirst ' +\r\n 'or limitToLast).');\r\n }\r\n return new QueryImpl(query._repo, query._path, queryParamsLimitToFirst(query._queryParams, this._limit), query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that if limited to the first specific number\r\n * of children.\r\n *\r\n * The `limitToFirst()` method is used to set a maximum number of children to be\r\n * synced for a given callback. If we set a limit of 100, we will initially only\r\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\r\n * stored in our Database, a `child_added` event will fire for each message.\r\n * However, if we have over 100 messages, we will only receive a `child_added`\r\n * event for the first 100 ordered messages. As items change, we will receive\r\n * `child_removed` events for each item that drops out of the active list so\r\n * that the total number stays at 100.\r\n *\r\n * You can read more about `limitToFirst()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param limit - The maximum number of nodes to include in this query.\r\n */\r\nfunction limitToFirst(limit) {\r\n if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\r\n throw new Error('limitToFirst: First argument must be a positive integer.');\r\n }\r\n return new QueryLimitToFirstConstraint(limit);\r\n}\r\nclass QueryLimitToLastConstraint extends QueryConstraint {\r\n constructor(_limit) {\r\n super();\r\n this._limit = _limit;\r\n }\r\n _apply(query) {\r\n if (query._queryParams.hasLimit()) {\r\n throw new Error('limitToLast: Limit was already set (by another call to limitToFirst ' +\r\n 'or limitToLast).');\r\n }\r\n return new QueryImpl(query._repo, query._path, queryParamsLimitToLast(query._queryParams, this._limit), query._orderByCalled);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that is limited to return only the last\r\n * specified number of children.\r\n *\r\n * The `limitToLast()` method is used to set a maximum number of children to be\r\n * synced for a given callback. If we set a limit of 100, we will initially only\r\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\r\n * stored in our Database, a `child_added` event will fire for each message.\r\n * However, if we have over 100 messages, we will only receive a `child_added`\r\n * event for the last 100 ordered messages. As items change, we will receive\r\n * `child_removed` events for each item that drops out of the active list so\r\n * that the total number stays at 100.\r\n *\r\n * You can read more about `limitToLast()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param limit - The maximum number of nodes to include in this query.\r\n */\r\nfunction limitToLast(limit) {\r\n if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\r\n throw new Error('limitToLast: First argument must be a positive integer.');\r\n }\r\n return new QueryLimitToLastConstraint(limit);\r\n}\r\nclass QueryOrderByChildConstraint extends QueryConstraint {\r\n constructor(_path) {\r\n super();\r\n this._path = _path;\r\n }\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByChild');\r\n const parsedPath = new Path(this._path);\r\n if (pathIsEmpty(parsedPath)) {\r\n throw new Error('orderByChild: cannot pass in empty path. Use orderByValue() instead.');\r\n }\r\n const index = new PathIndex(parsedPath);\r\n const newParams = queryParamsOrderBy(query._queryParams, index);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by the specified child key.\r\n *\r\n * Queries can only order by one key at a time. Calling `orderByChild()`\r\n * multiple times on the same query is an error.\r\n *\r\n * Firebase queries allow you to order your data by any child key on the fly.\r\n * However, if you know in advance what your indexes will be, you can define\r\n * them via the .indexOn rule in your Security Rules for better performance. See\r\n * the{@link https://firebase.google.com/docs/database/security/indexing-data}\r\n * rule for more information.\r\n *\r\n * You can read more about `orderByChild()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n *\r\n * @param path - The path to order by.\r\n */\r\nfunction orderByChild(path) {\r\n if (path === '$key') {\r\n throw new Error('orderByChild: \"$key\" is invalid. Use orderByKey() instead.');\r\n }\r\n else if (path === '$priority') {\r\n throw new Error('orderByChild: \"$priority\" is invalid. Use orderByPriority() instead.');\r\n }\r\n else if (path === '$value') {\r\n throw new Error('orderByChild: \"$value\" is invalid. Use orderByValue() instead.');\r\n }\r\n validatePathString('orderByChild', 'path', path, false);\r\n return new QueryOrderByChildConstraint(path);\r\n}\r\nclass QueryOrderByKeyConstraint extends QueryConstraint {\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByKey');\r\n const newParams = queryParamsOrderBy(query._queryParams, KEY_INDEX);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by the key.\r\n *\r\n * Sorts the results of a query by their (ascending) key values.\r\n *\r\n * You can read more about `orderByKey()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n */\r\nfunction orderByKey() {\r\n return new QueryOrderByKeyConstraint();\r\n}\r\nclass QueryOrderByPriorityConstraint extends QueryConstraint {\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByPriority');\r\n const newParams = queryParamsOrderBy(query._queryParams, PRIORITY_INDEX);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by priority.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}\r\n * for alternatives to priority.\r\n */\r\nfunction orderByPriority() {\r\n return new QueryOrderByPriorityConstraint();\r\n}\r\nclass QueryOrderByValueConstraint extends QueryConstraint {\r\n _apply(query) {\r\n validateNoPreviousOrderByCall(query, 'orderByValue');\r\n const newParams = queryParamsOrderBy(query._queryParams, VALUE_INDEX);\r\n validateQueryEndpoints(newParams);\r\n return new QueryImpl(query._repo, query._path, newParams, \r\n /*orderByCalled=*/ true);\r\n }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by value.\r\n *\r\n * If the children of a query are all scalar values (string, number, or\r\n * boolean), you can order the results by their (ascending) values.\r\n *\r\n * You can read more about `orderByValue()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n */\r\nfunction orderByValue() {\r\n return new QueryOrderByValueConstraint();\r\n}\r\nclass QueryEqualToValueConstraint extends QueryConstraint {\r\n constructor(_value, _key) {\r\n super();\r\n this._value = _value;\r\n this._key = _key;\r\n }\r\n _apply(query) {\r\n validateFirebaseDataArg('equalTo', this._value, query._path, false);\r\n if (query._queryParams.hasStart()) {\r\n throw new Error('equalTo: Starting point was already set (by another call to startAt/startAfter or ' +\r\n 'equalTo).');\r\n }\r\n if (query._queryParams.hasEnd()) {\r\n throw new Error('equalTo: Ending point was already set (by another call to endAt/endBefore or ' +\r\n 'equalTo).');\r\n }\r\n return new QueryEndAtConstraint(this._value, this._key)._apply(new QueryStartAtConstraint(this._value, this._key)._apply(query));\r\n }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` that includes children that match the specified\r\n * value.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The optional key argument can be used to further limit the range of the\r\n * query. If it is specified, then children that have exactly the specified\r\n * value must also have exactly the specified key as their key name. This can be\r\n * used to filter result sets with many matches for the same value.\r\n *\r\n * You can read more about `equalTo()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to match for. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start at, among the children with the\r\n * previously specified priority. This argument is only allowed if ordering by\r\n * child, value, or priority.\r\n */\r\nfunction equalTo(value, key) {\r\n validateKey('equalTo', 'key', key, true);\r\n return new QueryEqualToValueConstraint(value, key);\r\n}\r\n/**\r\n * Creates a new immutable instance of `Query` that is extended to also include\r\n * additional query constraints.\r\n *\r\n * @param query - The Query instance to use as a base for the new constraints.\r\n * @param queryConstraints - The list of `QueryConstraint`s to apply.\r\n * @throws if any of the provided query constraints cannot be combined with the\r\n * existing or new constraints.\r\n */\r\nfunction query(query, ...queryConstraints) {\r\n let queryImpl = getModularInstance(query);\r\n for (const constraint of queryConstraints) {\r\n queryImpl = constraint._apply(queryImpl);\r\n }\r\n return queryImpl;\r\n}\r\n/**\r\n * Define reference constructor in various modules\r\n *\r\n * We are doing this here to avoid several circular\r\n * dependency issues\r\n */\r\nsyncPointSetReferenceConstructor(ReferenceImpl);\r\nsyncTreeSetReferenceConstructor(ReferenceImpl);\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This variable is also defined in the firebase Node.js Admin SDK. Before\r\n * modifying this definition, consult the definition in:\r\n *\r\n * https://github.com/firebase/firebase-admin-node\r\n *\r\n * and make sure the two are consistent.\r\n */\r\nconst FIREBASE_DATABASE_EMULATOR_HOST_VAR = 'FIREBASE_DATABASE_EMULATOR_HOST';\r\n/**\r\n * Creates and caches `Repo` instances.\r\n */\r\nconst repos = {};\r\n/**\r\n * If true, any new `Repo` will be created to use `ReadonlyRestClient` (for testing purposes).\r\n */\r\nlet useRestClient = false;\r\n/**\r\n * Update an existing `Repo` in place to point to a new host/port.\r\n */\r\nfunction repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider) {\r\n repo.repoInfo_ = new RepoInfo(`${host}:${port}`, \r\n /* secure= */ false, repo.repoInfo_.namespace, repo.repoInfo_.webSocketOnly, repo.repoInfo_.nodeAdmin, repo.repoInfo_.persistenceKey, repo.repoInfo_.includeNamespaceInQueryParams, \r\n /*isUsingEmulator=*/ true);\r\n if (tokenProvider) {\r\n repo.authTokenProvider_ = tokenProvider;\r\n }\r\n}\r\n/**\r\n * This function should only ever be called to CREATE a new database instance.\r\n * @internal\r\n */\r\nfunction repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url, nodeAdmin) {\r\n let dbUrl = url || app.options.databaseURL;\r\n if (dbUrl === undefined) {\r\n if (!app.options.projectId) {\r\n fatal(\"Can't determine Firebase Database URL. Be sure to include \" +\r\n ' a Project ID when calling firebase.initializeApp().');\r\n }\r\n log('Using default host for project ', app.options.projectId);\r\n dbUrl = `${app.options.projectId}-default-rtdb.firebaseio.com`;\r\n }\r\n let parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\r\n let repoInfo = parsedUrl.repoInfo;\r\n let isEmulator;\r\n let dbEmulatorHost = undefined;\r\n if (typeof process !== 'undefined' && process.env) {\r\n dbEmulatorHost = process.env[FIREBASE_DATABASE_EMULATOR_HOST_VAR];\r\n }\r\n if (dbEmulatorHost) {\r\n isEmulator = true;\r\n dbUrl = `http://${dbEmulatorHost}?ns=${repoInfo.namespace}`;\r\n parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\r\n repoInfo = parsedUrl.repoInfo;\r\n }\r\n else {\r\n isEmulator = !parsedUrl.repoInfo.secure;\r\n }\r\n const authTokenProvider = nodeAdmin && isEmulator\r\n ? new EmulatorTokenProvider(EmulatorTokenProvider.OWNER)\r\n : new FirebaseAuthTokenProvider(app.name, app.options, authProvider);\r\n validateUrl('Invalid Firebase Database URL', parsedUrl);\r\n if (!pathIsEmpty(parsedUrl.path)) {\r\n fatal('Database URL must point to the root of a Firebase Database ' +\r\n '(not including a child path).');\r\n }\r\n const repo = repoManagerCreateRepo(repoInfo, app, authTokenProvider, new AppCheckTokenProvider(app.name, appCheckProvider));\r\n return new Database(repo, app);\r\n}\r\n/**\r\n * Remove the repo and make sure it is disconnected.\r\n *\r\n */\r\nfunction repoManagerDeleteRepo(repo, appName) {\r\n const appRepos = repos[appName];\r\n // This should never happen...\r\n if (!appRepos || appRepos[repo.key] !== repo) {\r\n fatal(`Database ${appName}(${repo.repoInfo_}) has already been deleted.`);\r\n }\r\n repoInterrupt(repo);\r\n delete appRepos[repo.key];\r\n}\r\n/**\r\n * Ensures a repo doesn't already exist and then creates one using the\r\n * provided app.\r\n *\r\n * @param repoInfo - The metadata about the Repo\r\n * @returns The Repo object for the specified server / repoName.\r\n */\r\nfunction repoManagerCreateRepo(repoInfo, app, authTokenProvider, appCheckProvider) {\r\n let appRepos = repos[app.name];\r\n if (!appRepos) {\r\n appRepos = {};\r\n repos[app.name] = appRepos;\r\n }\r\n let repo = appRepos[repoInfo.toURLString()];\r\n if (repo) {\r\n fatal('Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.');\r\n }\r\n repo = new Repo(repoInfo, useRestClient, authTokenProvider, appCheckProvider);\r\n appRepos[repoInfo.toURLString()] = repo;\r\n return repo;\r\n}\r\n/**\r\n * Forces us to use ReadonlyRestClient instead of PersistentConnection for new Repos.\r\n */\r\nfunction repoManagerForceRestClient(forceRestClient) {\r\n useRestClient = forceRestClient;\r\n}\r\n/**\r\n * Class representing a Firebase Realtime Database.\r\n */\r\nclass Database {\r\n /** @hideconstructor */\r\n constructor(_repoInternal, \r\n /** The {@link @firebase/app#FirebaseApp} associated with this Realtime Database instance. */\r\n app) {\r\n this._repoInternal = _repoInternal;\r\n this.app = app;\r\n /** Represents a `Database` instance. */\r\n this['type'] = 'database';\r\n /** Track if the instance has been used (root or repo accessed) */\r\n this._instanceStarted = false;\r\n }\r\n get _repo() {\r\n if (!this._instanceStarted) {\r\n repoStart(this._repoInternal, this.app.options.appId, this.app.options['databaseAuthVariableOverride']);\r\n this._instanceStarted = true;\r\n }\r\n return this._repoInternal;\r\n }\r\n get _root() {\r\n if (!this._rootInternal) {\r\n this._rootInternal = new ReferenceImpl(this._repo, newEmptyPath());\r\n }\r\n return this._rootInternal;\r\n }\r\n _delete() {\r\n if (this._rootInternal !== null) {\r\n repoManagerDeleteRepo(this._repo, this.app.name);\r\n this._repoInternal = null;\r\n this._rootInternal = null;\r\n }\r\n return Promise.resolve();\r\n }\r\n _checkNotDeleted(apiName) {\r\n if (this._rootInternal === null) {\r\n fatal('Cannot call ' + apiName + ' on a deleted database.');\r\n }\r\n }\r\n}\r\nfunction checkTransportInit() {\r\n if (TransportManager.IS_TRANSPORT_INITIALIZED) {\r\n warn('Transport has already been initialized. Please call this function before calling ref or setting up a listener');\r\n }\r\n}\r\n/**\r\n * Force the use of websockets instead of longPolling.\r\n */\r\nfunction forceWebSockets() {\r\n checkTransportInit();\r\n BrowserPollConnection.forceDisallow();\r\n}\r\n/**\r\n * Force the use of longPolling instead of websockets. This will be ignored if websocket protocol is used in databaseURL.\r\n */\r\nfunction forceLongPolling() {\r\n checkTransportInit();\r\n WebSocketConnection.forceDisallow();\r\n BrowserPollConnection.forceAllow();\r\n}\r\n/**\r\n * Returns the instance of the Realtime Database SDK that is associated\r\n * with the provided {@link @firebase/app#FirebaseApp}. Initializes a new instance with\r\n * with default settings if no instance exists or if the existing instance uses\r\n * a custom database URL.\r\n *\r\n * @param app - The {@link @firebase/app#FirebaseApp} instance that the returned Realtime\r\n * Database instance is associated with.\r\n * @param url - The URL of the Realtime Database instance to connect to. If not\r\n * provided, the SDK connects to the default instance of the Firebase App.\r\n * @returns The `Database` instance of the provided app.\r\n */\r\nfunction getDatabase(app = getApp(), url) {\r\n const db = _getProvider(app, 'database').getImmediate({\r\n identifier: url\r\n });\r\n if (!db._instanceStarted) {\r\n const emulator = getDefaultEmulatorHostnameAndPort('database');\r\n if (emulator) {\r\n connectDatabaseEmulator(db, ...emulator);\r\n }\r\n }\r\n return db;\r\n}\r\n/**\r\n * Modify the provided instance to communicate with the Realtime Database\r\n * emulator.\r\n *\r\n *

Note: This method must be called before performing any other operation.\r\n *\r\n * @param db - The instance to modify.\r\n * @param host - The emulator host (ex: localhost)\r\n * @param port - The emulator port (ex: 8080)\r\n * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules\r\n */\r\nfunction connectDatabaseEmulator(db, host, port, options = {}) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('useEmulator');\r\n if (db._instanceStarted) {\r\n fatal('Cannot call useEmulator() after instance has already been initialized.');\r\n }\r\n const repo = db._repoInternal;\r\n let tokenProvider = undefined;\r\n if (repo.repoInfo_.nodeAdmin) {\r\n if (options.mockUserToken) {\r\n fatal('mockUserToken is not supported by the Admin SDK. For client access with mock users, please use the \"firebase\" package instead of \"firebase-admin\".');\r\n }\r\n tokenProvider = new EmulatorTokenProvider(EmulatorTokenProvider.OWNER);\r\n }\r\n else if (options.mockUserToken) {\r\n const token = typeof options.mockUserToken === 'string'\r\n ? options.mockUserToken\r\n : createMockUserToken(options.mockUserToken, db.app.options.projectId);\r\n tokenProvider = new EmulatorTokenProvider(token);\r\n }\r\n // Modify the repo to apply emulator settings\r\n repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider);\r\n}\r\n/**\r\n * Disconnects from the server (all Database operations will be completed\r\n * offline).\r\n *\r\n * The client automatically maintains a persistent connection to the Database\r\n * server, which will remain active indefinitely and reconnect when\r\n * disconnected. However, the `goOffline()` and `goOnline()` methods may be used\r\n * to control the client connection in cases where a persistent connection is\r\n * undesirable.\r\n *\r\n * While offline, the client will no longer receive data updates from the\r\n * Database. However, all Database operations performed locally will continue to\r\n * immediately fire events, allowing your application to continue behaving\r\n * normally. Additionally, each operation performed locally will automatically\r\n * be queued and retried upon reconnection to the Database server.\r\n *\r\n * To reconnect to the Database and begin receiving remote events, see\r\n * `goOnline()`.\r\n *\r\n * @param db - The instance to disconnect.\r\n */\r\nfunction goOffline(db) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('goOffline');\r\n repoInterrupt(db._repo);\r\n}\r\n/**\r\n * Reconnects to the server and synchronizes the offline Database state\r\n * with the server state.\r\n *\r\n * This method should be used after disabling the active connection with\r\n * `goOffline()`. Once reconnected, the client will transmit the proper data\r\n * and fire the appropriate events so that your client \"catches up\"\r\n * automatically.\r\n *\r\n * @param db - The instance to reconnect.\r\n */\r\nfunction goOnline(db) {\r\n db = getModularInstance(db);\r\n db._checkNotDeleted('goOnline');\r\n repoResume(db._repo);\r\n}\r\nfunction enableLogging(logger, persistent) {\r\n enableLogging$1(logger, persistent);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerDatabase(variant) {\r\n setSDKVersion(SDK_VERSION$1);\r\n _registerComponent(new Component('database', (container, { instanceIdentifier: url }) => {\r\n const app = container.getProvider('app').getImmediate();\r\n const authProvider = container.getProvider('auth-internal');\r\n const appCheckProvider = container.getProvider('app-check-internal');\r\n return repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url);\r\n }, \"PUBLIC\" /* ComponentType.PUBLIC */).setMultipleInstances(true));\r\n registerVersion(name, version, variant);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name, version, 'esm2017');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst SERVER_TIMESTAMP = {\r\n '.sv': 'timestamp'\r\n};\r\n/**\r\n * Returns a placeholder value for auto-populating the current timestamp (time\r\n * since the Unix epoch, in milliseconds) as determined by the Firebase\r\n * servers.\r\n */\r\nfunction serverTimestamp() {\r\n return SERVER_TIMESTAMP;\r\n}\r\n/**\r\n * Returns a placeholder value that can be used to atomically increment the\r\n * current database value by the provided delta.\r\n *\r\n * @param delta - the amount to modify the current value atomically.\r\n * @returns A placeholder value for modifying data atomically server-side.\r\n */\r\nfunction increment(delta) {\r\n return {\r\n '.sv': {\r\n 'increment': delta\r\n }\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A type for the resolve value of {@link runTransaction}.\r\n */\r\nclass TransactionResult {\r\n /** @hideconstructor */\r\n constructor(\r\n /** Whether the transaction was successfully committed. */\r\n committed, \r\n /** The resulting data snapshot. */\r\n snapshot) {\r\n this.committed = committed;\r\n this.snapshot = snapshot;\r\n }\r\n /** Returns a JSON-serializable representation of this object. */\r\n toJSON() {\r\n return { committed: this.committed, snapshot: this.snapshot.toJSON() };\r\n }\r\n}\r\n/**\r\n * Atomically modifies the data at this location.\r\n *\r\n * Atomically modify the data at this location. Unlike a normal `set()`, which\r\n * just overwrites the data regardless of its previous value, `runTransaction()` is\r\n * used to modify the existing value to a new value, ensuring there are no\r\n * conflicts with other clients writing to the same location at the same time.\r\n *\r\n * To accomplish this, you pass `runTransaction()` an update function which is\r\n * used to transform the current value into a new value. If another client\r\n * writes to the location before your new value is successfully written, your\r\n * update function will be called again with the new current value, and the\r\n * write will be retried. This will happen repeatedly until your write succeeds\r\n * without conflict or you abort the transaction by not returning a value from\r\n * your update function.\r\n *\r\n * Note: Modifying data with `set()` will cancel any pending transactions at\r\n * that location, so extreme care should be taken if mixing `set()` and\r\n * `runTransaction()` to update the same data.\r\n *\r\n * Note: When using transactions with Security and Firebase Rules in place, be\r\n * aware that a client needs `.read` access in addition to `.write` access in\r\n * order to perform a transaction. This is because the client-side nature of\r\n * transactions requires the client to read the data in order to transactionally\r\n * update it.\r\n *\r\n * @param ref - The location to atomically modify.\r\n * @param transactionUpdate - A developer-supplied function which will be passed\r\n * the current data stored at this location (as a JavaScript object). The\r\n * function should return the new value it would like written (as a JavaScript\r\n * object). If `undefined` is returned (i.e. you return with no arguments) the\r\n * transaction will be aborted and the data at this location will not be\r\n * modified.\r\n * @param options - An options object to configure transactions.\r\n * @returns A `Promise` that can optionally be used instead of the `onComplete`\r\n * callback to handle success and failure.\r\n */\r\nfunction runTransaction(ref, \r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntransactionUpdate, options) {\r\n var _a;\r\n ref = getModularInstance(ref);\r\n validateWritablePath('Reference.transaction', ref._path);\r\n if (ref.key === '.length' || ref.key === '.keys') {\r\n throw ('Reference.transaction failed: ' + ref.key + ' is a read-only object.');\r\n }\r\n const applyLocally = (_a = options === null || options === void 0 ? void 0 : options.applyLocally) !== null && _a !== void 0 ? _a : true;\r\n const deferred = new Deferred();\r\n const promiseComplete = (error, committed, node) => {\r\n let dataSnapshot = null;\r\n if (error) {\r\n deferred.reject(error);\r\n }\r\n else {\r\n dataSnapshot = new DataSnapshot(node, new ReferenceImpl(ref._repo, ref._path), PRIORITY_INDEX);\r\n deferred.resolve(new TransactionResult(committed, dataSnapshot));\r\n }\r\n };\r\n // Add a watch to make sure we get server updates.\r\n const unwatcher = onValue(ref, () => { });\r\n repoStartTransaction(ref._repo, ref._path, transactionUpdate, promiseComplete, unwatcher, applyLocally);\r\n return deferred.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nPersistentConnection;\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nPersistentConnection.prototype.simpleListen = function (pathString, onComplete) {\r\n this.sendRequest('q', { p: pathString }, onComplete);\r\n};\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nPersistentConnection.prototype.echo = function (data, onEcho) {\r\n this.sendRequest('echo', { d: data }, onEcho);\r\n};\r\n// RealTimeConnection properties that we use in tests.\r\nConnection;\r\n/**\r\n * @internal\r\n */\r\nconst hijackHash = function (newHash) {\r\n const oldPut = PersistentConnection.prototype.put;\r\n PersistentConnection.prototype.put = function (pathString, data, onComplete, hash) {\r\n if (hash !== undefined) {\r\n hash = newHash();\r\n }\r\n oldPut.call(this, pathString, data, onComplete, hash);\r\n };\r\n return function () {\r\n PersistentConnection.prototype.put = oldPut;\r\n };\r\n};\r\nRepoInfo;\r\n/**\r\n * Forces the RepoManager to create Repos that use ReadonlyRestClient instead of PersistentConnection.\r\n * @internal\r\n */\r\nconst forceRestClient = function (forceRestClient) {\r\n repoManagerForceRestClient(forceRestClient);\r\n};\n\n/**\r\n * Firebase Realtime Database\r\n *\r\n * @packageDocumentation\r\n */\r\nregisterDatabase();\n\nexport { DataSnapshot, Database, OnDisconnect, QueryConstraint, TransactionResult, QueryImpl as _QueryImpl, QueryParams as _QueryParams, ReferenceImpl as _ReferenceImpl, forceRestClient as _TEST_ACCESS_forceRestClient, hijackHash as _TEST_ACCESS_hijackHash, repoManagerDatabaseFromApp as _repoManagerDatabaseFromApp, setSDKVersion as _setSDKVersion, validatePathString as _validatePathString, validateWritablePath as _validateWritablePath, child, connectDatabaseEmulator, enableLogging, endAt, endBefore, equalTo, forceLongPolling, forceWebSockets, get, getDatabase, goOffline, goOnline, increment, limitToFirst, limitToLast, off, onChildAdded, onChildChanged, onChildMoved, onChildRemoved, onDisconnect, onValue, orderByChild, orderByKey, orderByPriority, orderByValue, push, query, ref, refFromURL, remove, runTransaction, serverTimestamp, set, setPriority, setWithPriority, startAfter, startAt, update };\n\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A container for all of the Logger instances\r\n */\r\nconst instances = [];\r\n/**\r\n * The JS SDK supports 5 log levels and also allows a user the ability to\r\n * silence the logs altogether.\r\n *\r\n * The order is a follows:\r\n * DEBUG < VERBOSE < INFO < WARN < ERROR\r\n *\r\n * All of the log types above the current log level will be captured (i.e. if\r\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\r\n * `VERBOSE` logs will not)\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\r\n LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\r\n LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\r\n LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\r\n LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\r\n LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\r\n})(LogLevel || (LogLevel = {}));\r\nconst levelStringToEnum = {\r\n 'debug': LogLevel.DEBUG,\r\n 'verbose': LogLevel.VERBOSE,\r\n 'info': LogLevel.INFO,\r\n 'warn': LogLevel.WARN,\r\n 'error': LogLevel.ERROR,\r\n 'silent': LogLevel.SILENT\r\n};\r\n/**\r\n * The default log level\r\n */\r\nconst defaultLogLevel = LogLevel.INFO;\r\n/**\r\n * By default, `console.debug` is not displayed in the developer console (in\r\n * chrome). To avoid forcing users to have to opt-in to these logs twice\r\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\r\n * logs to the `console.log` function.\r\n */\r\nconst ConsoleMethod = {\r\n [LogLevel.DEBUG]: 'log',\r\n [LogLevel.VERBOSE]: 'log',\r\n [LogLevel.INFO]: 'info',\r\n [LogLevel.WARN]: 'warn',\r\n [LogLevel.ERROR]: 'error'\r\n};\r\n/**\r\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\r\n * messages on to their corresponding console counterparts (if the log method\r\n * is supported by the current log level)\r\n */\r\nconst defaultLogHandler = (instance, logType, ...args) => {\r\n if (logType < instance.logLevel) {\r\n return;\r\n }\r\n const now = new Date().toISOString();\r\n const method = ConsoleMethod[logType];\r\n if (method) {\r\n console[method](`[${now}] ${instance.name}:`, ...args);\r\n }\r\n else {\r\n throw new Error(`Attempted to log a message with an invalid logType (value: ${logType})`);\r\n }\r\n};\r\nclass Logger {\r\n /**\r\n * Gives you an instance of a Logger to capture messages according to\r\n * Firebase's logging scheme.\r\n *\r\n * @param name The name that the logs will be associated with\r\n */\r\n constructor(name) {\r\n this.name = name;\r\n /**\r\n * The log level of the given Logger instance.\r\n */\r\n this._logLevel = defaultLogLevel;\r\n /**\r\n * The main (internal) log handler for the Logger instance.\r\n * Can be set to a new function in internal package code but not by user.\r\n */\r\n this._logHandler = defaultLogHandler;\r\n /**\r\n * The optional, additional, user-defined log handler for the Logger instance.\r\n */\r\n this._userLogHandler = null;\r\n /**\r\n * Capture the current instance for later use\r\n */\r\n instances.push(this);\r\n }\r\n get logLevel() {\r\n return this._logLevel;\r\n }\r\n set logLevel(val) {\r\n if (!(val in LogLevel)) {\r\n throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\r\n }\r\n this._logLevel = val;\r\n }\r\n // Workaround for setter/getter having to be the same type.\r\n setLogLevel(val) {\r\n this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\r\n }\r\n get logHandler() {\r\n return this._logHandler;\r\n }\r\n set logHandler(val) {\r\n if (typeof val !== 'function') {\r\n throw new TypeError('Value assigned to `logHandler` must be a function');\r\n }\r\n this._logHandler = val;\r\n }\r\n get userLogHandler() {\r\n return this._userLogHandler;\r\n }\r\n set userLogHandler(val) {\r\n this._userLogHandler = val;\r\n }\r\n /**\r\n * The functions below are all based on the `console` interface\r\n */\r\n debug(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\r\n this._logHandler(this, LogLevel.DEBUG, ...args);\r\n }\r\n log(...args) {\r\n this._userLogHandler &&\r\n this._userLogHandler(this, LogLevel.VERBOSE, ...args);\r\n this._logHandler(this, LogLevel.VERBOSE, ...args);\r\n }\r\n info(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\r\n this._logHandler(this, LogLevel.INFO, ...args);\r\n }\r\n warn(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\r\n this._logHandler(this, LogLevel.WARN, ...args);\r\n }\r\n error(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\r\n this._logHandler(this, LogLevel.ERROR, ...args);\r\n }\r\n}\r\nfunction setLogLevel(level) {\r\n instances.forEach(inst => {\r\n inst.setLogLevel(level);\r\n });\r\n}\r\nfunction setUserLogHandler(logCallback, options) {\r\n for (const instance of instances) {\r\n let customLogLevel = null;\r\n if (options && options.level) {\r\n customLogLevel = levelStringToEnum[options.level];\r\n }\r\n if (logCallback === null) {\r\n instance.userLogHandler = null;\r\n }\r\n else {\r\n instance.userLogHandler = (instance, level, ...args) => {\r\n const message = args\r\n .map(arg => {\r\n if (arg == null) {\r\n return null;\r\n }\r\n else if (typeof arg === 'string') {\r\n return arg;\r\n }\r\n else if (typeof arg === 'number' || typeof arg === 'boolean') {\r\n return arg.toString();\r\n }\r\n else if (arg instanceof Error) {\r\n return arg.message;\r\n }\r\n else {\r\n try {\r\n return JSON.stringify(arg);\r\n }\r\n catch (ignored) {\r\n return null;\r\n }\r\n }\r\n })\r\n .filter(arg => arg)\r\n .join(' ');\r\n if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\r\n logCallback({\r\n level: LogLevel[level].toLowerCase(),\r\n message,\r\n args,\r\n type: instance.name\r\n });\r\n }\r\n };\r\n }\r\n }\r\n}\n\nexport { LogLevel, Logger, setLogLevel, setUserLogHandler };\n\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.\r\n */\r\nconst CONSTANTS = {\r\n /**\r\n * @define {boolean} Whether this is the client Node.js SDK.\r\n */\r\n NODE_CLIENT: false,\r\n /**\r\n * @define {boolean} Whether this is the Admin Node.js SDK.\r\n */\r\n NODE_ADMIN: false,\r\n /**\r\n * Firebase SDK Version\r\n */\r\n SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws an error if the provided assertion is falsy\r\n */\r\nconst assert = function (assertion, message) {\r\n if (!assertion) {\r\n throw assertionError(message);\r\n }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n */\r\nconst assertionError = function (message) {\r\n return new Error('Firebase Database (' +\r\n CONSTANTS.SDK_VERSION +\r\n ') INTERNAL ASSERT FAILED: ' +\r\n message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst stringToByteArray$1 = function (str) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if ((c & 0xfc00) === 0xd800 &&\r\n i + 1 < str.length &&\r\n (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\r\n // Surrogate Pair\r\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param bytes Array of numbers representing characters.\r\n * @return Stringification of the array.\r\n */\r\nconst byteArrayToString = function (bytes) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let pos = 0, c = 0;\r\n while (pos < bytes.length) {\r\n const c1 = bytes[pos++];\r\n if (c1 < 128) {\r\n out[c++] = String.fromCharCode(c1);\r\n }\r\n else if (c1 > 191 && c1 < 224) {\r\n const c2 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n }\r\n else if (c1 > 239 && c1 < 365) {\r\n // Surrogate Pair\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n const c4 = bytes[pos++];\r\n const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n 0x10000;\r\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n }\r\n else {\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n }\r\n }\r\n return out.join('');\r\n};\r\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\r\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\r\n// Static lookup maps, lazily populated by init_()\r\nconst base64 = {\r\n /**\r\n * Maps bytes to characters.\r\n */\r\n byteToCharMap_: null,\r\n /**\r\n * Maps characters to bytes.\r\n */\r\n charToByteMap_: null,\r\n /**\r\n * Maps bytes to websafe characters.\r\n * @private\r\n */\r\n byteToCharMapWebSafe_: null,\r\n /**\r\n * Maps websafe characters to bytes.\r\n * @private\r\n */\r\n charToByteMapWebSafe_: null,\r\n /**\r\n * Our default alphabet, shared between\r\n * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n */\r\n ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n /**\r\n * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n */\r\n get ENCODED_VALS() {\r\n return this.ENCODED_VALS_BASE + '+/=';\r\n },\r\n /**\r\n * Our websafe alphabet.\r\n */\r\n get ENCODED_VALS_WEBSAFE() {\r\n return this.ENCODED_VALS_BASE + '-_.';\r\n },\r\n /**\r\n * Whether this browser supports the atob and btoa functions. This extension\r\n * started at Mozilla but is now implemented by many browsers. We use the\r\n * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n * but still allowing the standard per-browser compilations.\r\n *\r\n */\r\n HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n /**\r\n * Base64-encode an array of bytes.\r\n *\r\n * @param input An array of bytes (numbers with\r\n * value in [0, 255]) to encode.\r\n * @param webSafe Boolean indicating we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeByteArray(input, webSafe) {\r\n if (!Array.isArray(input)) {\r\n throw Error('encodeByteArray takes an array as a parameter');\r\n }\r\n this.init_();\r\n const byteToCharMap = webSafe\r\n ? this.byteToCharMapWebSafe_\r\n : this.byteToCharMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length; i += 3) {\r\n const byte1 = input[i];\r\n const haveByte2 = i + 1 < input.length;\r\n const byte2 = haveByte2 ? input[i + 1] : 0;\r\n const haveByte3 = i + 2 < input.length;\r\n const byte3 = haveByte3 ? input[i + 2] : 0;\r\n const outByte1 = byte1 >> 2;\r\n const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n let outByte4 = byte3 & 0x3f;\r\n if (!haveByte3) {\r\n outByte4 = 64;\r\n if (!haveByte2) {\r\n outByte3 = 64;\r\n }\r\n }\r\n output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n }\r\n return output.join('');\r\n },\r\n /**\r\n * Base64-encode a string.\r\n *\r\n * @param input A string to encode.\r\n * @param webSafe If true, we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return btoa(input);\r\n }\r\n return this.encodeByteArray(stringToByteArray$1(input), webSafe);\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * @param input to decode.\r\n * @param webSafe True if we should use the\r\n * alternative alphabet.\r\n * @return string representing the decoded value.\r\n */\r\n decodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return atob(input);\r\n }\r\n return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * In base-64 decoding, groups of four characters are converted into three\r\n * bytes. If the encoder did not apply padding, the input length may not\r\n * be a multiple of 4.\r\n *\r\n * In this case, the last group will have fewer than 4 characters, and\r\n * padding will be inferred. If the group has one or two characters, it decodes\r\n * to one byte. If the group has three characters, it decodes to two bytes.\r\n *\r\n * @param input Input to decode.\r\n * @param webSafe True if we should use the web-safe alphabet.\r\n * @return bytes representing the decoded value.\r\n */\r\n decodeStringToByteArray(input, webSafe) {\r\n this.init_();\r\n const charToByteMap = webSafe\r\n ? this.charToByteMapWebSafe_\r\n : this.charToByteMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length;) {\r\n const byte1 = charToByteMap[input.charAt(i++)];\r\n const haveByte2 = i < input.length;\r\n const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n ++i;\r\n const haveByte3 = i < input.length;\r\n const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n const haveByte4 = i < input.length;\r\n const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n throw new DecodeBase64StringError();\r\n }\r\n const outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n output.push(outByte1);\r\n if (byte3 !== 64) {\r\n const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n output.push(outByte2);\r\n if (byte4 !== 64) {\r\n const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n output.push(outByte3);\r\n }\r\n }\r\n }\r\n return output;\r\n },\r\n /**\r\n * Lazy static initialization function. Called before\r\n * accessing any of the static map variables.\r\n * @private\r\n */\r\n init_() {\r\n if (!this.byteToCharMap_) {\r\n this.byteToCharMap_ = {};\r\n this.charToByteMap_ = {};\r\n this.byteToCharMapWebSafe_ = {};\r\n this.charToByteMapWebSafe_ = {};\r\n // We want quick mappings back and forth, so we precompute two maps.\r\n for (let i = 0; i < this.ENCODED_VALS.length; i++) {\r\n this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n // Be forgiving when decoding and correctly decode both encodings.\r\n if (i >= this.ENCODED_VALS_BASE.length) {\r\n this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n/**\r\n * An error encountered while decoding base64 string.\r\n */\r\nclass DecodeBase64StringError extends Error {\r\n constructor() {\r\n super(...arguments);\r\n this.name = 'DecodeBase64StringError';\r\n }\r\n}\r\n/**\r\n * URL-safe base64 encoding\r\n */\r\nconst base64Encode = function (str) {\r\n const utf8Bytes = stringToByteArray$1(str);\r\n return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 encoding (without \".\" padding in the end).\r\n * e.g. Used in JSON Web Token (JWT) parts.\r\n */\r\nconst base64urlEncodeWithoutPadding = function (str) {\r\n // Use base64url encoding and remove padding in the end (dot characters).\r\n return base64Encode(str).replace(/\\./g, '');\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param str To be decoded\r\n * @return Decoded result, if possible\r\n */\r\nconst base64Decode = function (str) {\r\n try {\r\n return base64.decodeString(str, true);\r\n }\r\n catch (e) {\r\n console.error('base64Decode failed: ', e);\r\n }\r\n return null;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays). Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n *\r\n * Note: we don't merge __proto__ to prevent prototype pollution\r\n */\r\nfunction deepExtend(target, source) {\r\n if (!(source instanceof Object)) {\r\n return source;\r\n }\r\n switch (source.constructor) {\r\n case Date:\r\n // Treat Dates like scalars; if the target date object had any child\r\n // properties - they will be lost!\r\n const dateValue = source;\r\n return new Date(dateValue.getTime());\r\n case Object:\r\n if (target === undefined) {\r\n target = {};\r\n }\r\n break;\r\n case Array:\r\n // Always copy the array source and overwrite the target.\r\n target = [];\r\n break;\r\n default:\r\n // Not a plain Object - treat it as a scalar.\r\n return source;\r\n }\r\n for (const prop in source) {\r\n // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\r\n if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\r\n continue;\r\n }\r\n target[prop] = deepExtend(target[prop], source[prop]);\r\n }\r\n return target;\r\n}\r\nfunction isValidKey(key) {\r\n return key !== '__proto__';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Polyfill for `globalThis` object.\r\n * @returns the `globalThis` object for the given environment.\r\n * @public\r\n */\r\nfunction getGlobal() {\r\n if (typeof self !== 'undefined') {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined') {\r\n return window;\r\n }\r\n if (typeof global !== 'undefined') {\r\n return global;\r\n }\r\n throw new Error('Unable to locate global object.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;\r\n/**\r\n * Attempt to read defaults from a JSON string provided to\r\n * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in\r\n * process(.)env(.)__FIREBASE_DEFAULTS_PATH__\r\n * The dots are in parens because certain compilers (Vite?) cannot\r\n * handle seeing that variable in comments.\r\n * See https://github.com/firebase/firebase-js-sdk/issues/6838\r\n */\r\nconst getDefaultsFromEnvVariable = () => {\r\n if (typeof process === 'undefined' || typeof process.env === 'undefined') {\r\n return;\r\n }\r\n const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\r\n if (defaultsJsonString) {\r\n return JSON.parse(defaultsJsonString);\r\n }\r\n};\r\nconst getDefaultsFromCookie = () => {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n let match;\r\n try {\r\n match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\r\n }\r\n catch (e) {\r\n // Some environments such as Angular Universal SSR have a\r\n // `document` object but error on accessing `document.cookie`.\r\n return;\r\n }\r\n const decoded = match && base64Decode(match[1]);\r\n return decoded && JSON.parse(decoded);\r\n};\r\n/**\r\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\r\n * (1) if such an object exists as a property of `globalThis`\r\n * (2) if such an object was provided on a shell environment variable\r\n * (3) if such an object exists in a cookie\r\n * @public\r\n */\r\nconst getDefaults = () => {\r\n try {\r\n return (getDefaultsFromGlobal() ||\r\n getDefaultsFromEnvVariable() ||\r\n getDefaultsFromCookie());\r\n }\r\n catch (e) {\r\n /**\r\n * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\r\n * to any environment case we have not accounted for. Log to\r\n * info instead of swallowing so we can find these unknown cases\r\n * and add paths for them if needed.\r\n */\r\n console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\r\n return;\r\n }\r\n};\r\n/**\r\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHost = (productName) => { var _a, _b; return (_b = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.emulatorHosts) === null || _b === void 0 ? void 0 : _b[productName]; };\r\n/**\r\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHostnameAndPort = (productName) => {\r\n const host = getDefaultEmulatorHost(productName);\r\n if (!host) {\r\n return undefined;\r\n }\r\n const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\r\n if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\r\n throw new Error(`Invalid host ${host} with no separate hostname and port!`);\r\n }\r\n // eslint-disable-next-line no-restricted-globals\r\n const port = parseInt(host.substring(separatorIndex + 1), 10);\r\n if (host[0] === '[') {\r\n // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\r\n return [host.substring(1, separatorIndex - 1), port];\r\n }\r\n else {\r\n return [host.substring(0, separatorIndex), port];\r\n }\r\n};\r\n/**\r\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\r\n * @public\r\n */\r\nconst getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };\r\n/**\r\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\r\n * prefixed by \"_\")\r\n * @public\r\n */\r\nconst getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Deferred {\r\n constructor() {\r\n this.reject = () => { };\r\n this.resolve = () => { };\r\n this.promise = new Promise((resolve, reject) => {\r\n this.resolve = resolve;\r\n this.reject = reject;\r\n });\r\n }\r\n /**\r\n * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n */\r\n wrapCallback(callback) {\r\n return (error, value) => {\r\n if (error) {\r\n this.reject(error);\r\n }\r\n else {\r\n this.resolve(value);\r\n }\r\n if (typeof callback === 'function') {\r\n // Attaching noop handler just in case developer wasn't expecting\r\n // promises\r\n this.promise.catch(() => { });\r\n // Some of our callbacks don't expect a value and our own tests\r\n // assert that the parameter length is 1\r\n if (callback.length === 1) {\r\n callback(error);\r\n }\r\n else {\r\n callback(error, value);\r\n }\r\n }\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction createMockUserToken(token, projectId) {\r\n if (token.uid) {\r\n throw new Error('The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.');\r\n }\r\n // Unsecured JWTs use \"none\" as the algorithm.\r\n const header = {\r\n alg: 'none',\r\n type: 'JWT'\r\n };\r\n const project = projectId || 'demo-project';\r\n const iat = token.iat || 0;\r\n const sub = token.sub || token.user_id;\r\n if (!sub) {\r\n throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\r\n }\r\n const payload = Object.assign({ \r\n // Set all required fields to decent defaults\r\n iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {\r\n sign_in_provider: 'custom',\r\n identities: {}\r\n } }, token);\r\n // Unsecured JWTs use the empty string as a signature.\r\n const signature = '';\r\n return [\r\n base64urlEncodeWithoutPadding(JSON.stringify(header)),\r\n base64urlEncodeWithoutPadding(JSON.stringify(payload)),\r\n signature\r\n ].join('.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns navigator.userAgent string or '' if it's not defined.\r\n * @return user agent string\r\n */\r\nfunction getUA() {\r\n if (typeof navigator !== 'undefined' &&\r\n typeof navigator['userAgent'] === 'string') {\r\n return navigator['userAgent'];\r\n }\r\n else {\r\n return '';\r\n }\r\n}\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\r\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\r\n * wait for a callback.\r\n */\r\nfunction isMobileCordova() {\r\n return (typeof window !== 'undefined' &&\r\n // @ts-ignore Setting up an broadly applicable index signature for Window\r\n // just to deal with this case would probably be a bad idea.\r\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n}\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return true if Node.js environment is detected or specified.\r\n */\r\n// Node detection logic from: https://github.com/iliakan/detect-node/\r\nfunction isNode() {\r\n var _a;\r\n const forceEnvironment = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.forceEnvironment;\r\n if (forceEnvironment === 'node') {\r\n return true;\r\n }\r\n else if (forceEnvironment === 'browser') {\r\n return false;\r\n }\r\n try {\r\n return (Object.prototype.toString.call(global.process) === '[object process]');\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Detect Browser Environment\r\n */\r\nfunction isBrowser() {\r\n return typeof self === 'object' && self.self === self;\r\n}\r\nfunction isBrowserExtension() {\r\n const runtime = typeof chrome === 'object'\r\n ? chrome.runtime\r\n : typeof browser === 'object'\r\n ? browser.runtime\r\n : undefined;\r\n return typeof runtime === 'object' && runtime.id !== undefined;\r\n}\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return true if ReactNative environment is detected.\r\n */\r\nfunction isReactNative() {\r\n return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n}\r\n/** Detects Electron apps. */\r\nfunction isElectron() {\r\n return getUA().indexOf('Electron/') >= 0;\r\n}\r\n/** Detects Internet Explorer. */\r\nfunction isIE() {\r\n const ua = getUA();\r\n return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\r\n}\r\n/** Detects Universal Windows Platform apps. */\r\nfunction isUWP() {\r\n return getUA().indexOf('MSAppHost/') >= 0;\r\n}\r\n/**\r\n * Detect whether the current SDK build is the Node version.\r\n *\r\n * @return true if it's the Node SDK build.\r\n */\r\nfunction isNodeSdk() {\r\n return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n}\r\n/** Returns true if we are running in Safari. */\r\nfunction isSafari() {\r\n return (!isNode() &&\r\n navigator.userAgent.includes('Safari') &&\r\n !navigator.userAgent.includes('Chrome'));\r\n}\r\n/**\r\n * This method checks if indexedDB is supported by current browser/service worker context\r\n * @return true if indexedDB is supported by current browser/service worker context\r\n */\r\nfunction isIndexedDBAvailable() {\r\n try {\r\n return typeof indexedDB === 'object';\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\r\n * if errors occur during the database open operation.\r\n *\r\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\r\n * private browsing)\r\n */\r\nfunction validateIndexedDBOpenable() {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n let preExist = true;\r\n const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';\r\n const request = self.indexedDB.open(DB_CHECK_NAME);\r\n request.onsuccess = () => {\r\n request.result.close();\r\n // delete database only when it doesn't pre-exist\r\n if (!preExist) {\r\n self.indexedDB.deleteDatabase(DB_CHECK_NAME);\r\n }\r\n resolve(true);\r\n };\r\n request.onupgradeneeded = () => {\r\n preExist = false;\r\n };\r\n request.onerror = () => {\r\n var _a;\r\n reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');\r\n };\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n });\r\n}\r\n/**\r\n *\r\n * This method checks whether cookie is enabled within current browser\r\n * @return true if cookie is enabled within current browser\r\n */\r\nfunction areCookiesEnabled() {\r\n if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\r\n return false;\r\n }\r\n return true;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Standardized Firebase Error.\r\n *\r\n * Usage:\r\n *\r\n * // Typescript string literals for type-safe codes\r\n * type Err =\r\n * 'unknown' |\r\n * 'object-not-found'\r\n * ;\r\n *\r\n * // Closure enum for type-safe error codes\r\n * // at-enum {string}\r\n * var Err = {\r\n * UNKNOWN: 'unknown',\r\n * OBJECT_NOT_FOUND: 'object-not-found',\r\n * }\r\n *\r\n * let errors: Map = {\r\n * 'generic-error': \"Unknown error\",\r\n * 'file-not-found': \"Could not find file: {$file}\",\r\n * };\r\n *\r\n * // Type-safe function - must pass a valid error code as param.\r\n * let error = new ErrorFactory('service', 'Service', errors);\r\n *\r\n * ...\r\n * throw error.create(Err.GENERIC);\r\n * ...\r\n * throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\r\n * ...\r\n * // Service: Could not file file: foo.txt (service/file-not-found).\r\n *\r\n * catch (e) {\r\n * assert(e.message === \"Could not find file: foo.txt.\");\r\n * if ((e as FirebaseError)?.code === 'service/file-not-found') {\r\n * console.log(\"Could not read file: \" + e['file']);\r\n * }\r\n * }\r\n */\r\nconst ERROR_NAME = 'FirebaseError';\r\n// Based on code from:\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\r\nclass FirebaseError extends Error {\r\n constructor(\r\n /** The error code for this error. */\r\n code, message, \r\n /** Custom data for this error. */\r\n customData) {\r\n super(message);\r\n this.code = code;\r\n this.customData = customData;\r\n /** The custom name for all FirebaseErrors. */\r\n this.name = ERROR_NAME;\r\n // Fix For ES5\r\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n Object.setPrototypeOf(this, FirebaseError.prototype);\r\n // Maintains proper stack trace for where our error was thrown.\r\n // Only available on V8.\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, ErrorFactory.prototype.create);\r\n }\r\n }\r\n}\r\nclass ErrorFactory {\r\n constructor(service, serviceName, errors) {\r\n this.service = service;\r\n this.serviceName = serviceName;\r\n this.errors = errors;\r\n }\r\n create(code, ...data) {\r\n const customData = data[0] || {};\r\n const fullCode = `${this.service}/${code}`;\r\n const template = this.errors[code];\r\n const message = template ? replaceTemplate(template, customData) : 'Error';\r\n // Service Name: Error message (service/code).\r\n const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\r\n const error = new FirebaseError(fullCode, fullMessage, customData);\r\n return error;\r\n }\r\n}\r\nfunction replaceTemplate(template, data) {\r\n return template.replace(PATTERN, (_, key) => {\r\n const value = data[key];\r\n return value != null ? String(value) : `<${key}?>`;\r\n });\r\n}\r\nconst PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Evaluates a JSON string into a javascript object.\r\n *\r\n * @param {string} str A string containing JSON.\r\n * @return {*} The javascript object representing the specified JSON.\r\n */\r\nfunction jsonEval(str) {\r\n return JSON.parse(str);\r\n}\r\n/**\r\n * Returns JSON representing a javascript object.\r\n * @param {*} data Javascript object to be stringified.\r\n * @return {string} The JSON contents of the object.\r\n */\r\nfunction stringify(data) {\r\n return JSON.stringify(data);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Decodes a Firebase auth. token into constituent parts.\r\n *\r\n * Notes:\r\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst decode = function (token) {\r\n let header = {}, claims = {}, data = {}, signature = '';\r\n try {\r\n const parts = token.split('.');\r\n header = jsonEval(base64Decode(parts[0]) || '');\r\n claims = jsonEval(base64Decode(parts[1]) || '');\r\n signature = parts[2];\r\n data = claims['d'] || {};\r\n delete claims['d'];\r\n }\r\n catch (e) { }\r\n return {\r\n header,\r\n claims,\r\n data,\r\n signature\r\n };\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidTimestamp = function (token) {\r\n const claims = decode(token).claims;\r\n const now = Math.floor(new Date().getTime() / 1000);\r\n let validSince = 0, validUntil = 0;\r\n if (typeof claims === 'object') {\r\n if (claims.hasOwnProperty('nbf')) {\r\n validSince = claims['nbf'];\r\n }\r\n else if (claims.hasOwnProperty('iat')) {\r\n validSince = claims['iat'];\r\n }\r\n if (claims.hasOwnProperty('exp')) {\r\n validUntil = claims['exp'];\r\n }\r\n else {\r\n // token will expire after 24h by default\r\n validUntil = validSince + 86400;\r\n }\r\n }\r\n return (!!now &&\r\n !!validSince &&\r\n !!validUntil &&\r\n now >= validSince &&\r\n now <= validUntil);\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n *\r\n * Notes:\r\n * - May return null if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst issuedAtTime = function (token) {\r\n const claims = decode(token).claims;\r\n if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n return claims['iat'];\r\n }\r\n return null;\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidFormat = function (token) {\r\n const decoded = decode(token), claims = decoded.claims;\r\n return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\r\n};\r\n/**\r\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isAdmin = function (token) {\r\n const claims = decode(token).claims;\r\n return typeof claims === 'object' && claims['admin'] === true;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction contains(obj, key) {\r\n return Object.prototype.hasOwnProperty.call(obj, key);\r\n}\r\nfunction safeGet(obj, key) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return obj[key];\r\n }\r\n else {\r\n return undefined;\r\n }\r\n}\r\nfunction isEmpty(obj) {\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction map(obj, fn, contextObj) {\r\n const res = {};\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n res[key] = fn.call(contextObj, obj[key], key, obj);\r\n }\r\n }\r\n return res;\r\n}\r\n/**\r\n * Deep equal two objects. Support Arrays and Objects.\r\n */\r\nfunction deepEqual(a, b) {\r\n if (a === b) {\r\n return true;\r\n }\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n for (const k of aKeys) {\r\n if (!bKeys.includes(k)) {\r\n return false;\r\n }\r\n const aProp = a[k];\r\n const bProp = b[k];\r\n if (isObject(aProp) && isObject(bProp)) {\r\n if (!deepEqual(aProp, bProp)) {\r\n return false;\r\n }\r\n }\r\n else if (aProp !== bProp) {\r\n return false;\r\n }\r\n }\r\n for (const k of bKeys) {\r\n if (!aKeys.includes(k)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction isObject(thing) {\r\n return thing !== null && typeof thing === 'object';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Rejects if the given promise doesn't resolve in timeInMS milliseconds.\r\n * @internal\r\n */\r\nfunction promiseWithTimeout(promise, timeInMS = 2000) {\r\n const deferredPromise = new Deferred();\r\n setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);\r\n promise.then(deferredPromise.resolve, deferredPromise.reject);\r\n return deferredPromise.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a\r\n * params object (e.g. {arg: 'val', arg2: 'val2'})\r\n * Note: You must prepend it with ? when adding it to a URL.\r\n */\r\nfunction querystring(querystringParams) {\r\n const params = [];\r\n for (const [key, value] of Object.entries(querystringParams)) {\r\n if (Array.isArray(value)) {\r\n value.forEach(arrayVal => {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n });\r\n }\r\n else {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n }\r\n }\r\n return params.length ? '&' + params.join('&') : '';\r\n}\r\n/**\r\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\r\n * (e.g. {arg: 'val', arg2: 'val2'})\r\n */\r\nfunction querystringDecode(querystring) {\r\n const obj = {};\r\n const tokens = querystring.replace(/^\\?/, '').split('&');\r\n tokens.forEach(token => {\r\n if (token) {\r\n const [key, value] = token.split('=');\r\n obj[decodeURIComponent(key)] = decodeURIComponent(value);\r\n }\r\n });\r\n return obj;\r\n}\r\n/**\r\n * Extract the query string part of a URL, including the leading question mark (if present).\r\n */\r\nfunction extractQuerystring(url) {\r\n const queryStart = url.indexOf('?');\r\n if (!queryStart) {\r\n return '';\r\n }\r\n const fragmentStart = url.indexOf('#', queryStart);\r\n return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview SHA-1 cryptographic hash.\r\n * Variable names follow the notation in FIPS PUB 180-3:\r\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n *\r\n * Usage:\r\n * var sha1 = new sha1();\r\n * sha1.update(bytes);\r\n * var hash = sha1.digest();\r\n *\r\n * Performance:\r\n * Chrome 23: ~400 Mbit/s\r\n * Firefox 16: ~250 Mbit/s\r\n *\r\n */\r\n/**\r\n * SHA-1 cryptographic hash constructor.\r\n *\r\n * The properties declared here are discussed in the above algorithm document.\r\n * @constructor\r\n * @final\r\n * @struct\r\n */\r\nclass Sha1 {\r\n constructor() {\r\n /**\r\n * Holds the previous values of accumulated variables a-e in the compress_\r\n * function.\r\n * @private\r\n */\r\n this.chain_ = [];\r\n /**\r\n * A buffer holding the partially computed hash result.\r\n * @private\r\n */\r\n this.buf_ = [];\r\n /**\r\n * An array of 80 bytes, each a part of the message to be hashed. Referred to\r\n * as the message schedule in the docs.\r\n * @private\r\n */\r\n this.W_ = [];\r\n /**\r\n * Contains data needed to pad messages less than 64 bytes.\r\n * @private\r\n */\r\n this.pad_ = [];\r\n /**\r\n * @private {number}\r\n */\r\n this.inbuf_ = 0;\r\n /**\r\n * @private {number}\r\n */\r\n this.total_ = 0;\r\n this.blockSize = 512 / 8;\r\n this.pad_[0] = 128;\r\n for (let i = 1; i < this.blockSize; ++i) {\r\n this.pad_[i] = 0;\r\n }\r\n this.reset();\r\n }\r\n reset() {\r\n this.chain_[0] = 0x67452301;\r\n this.chain_[1] = 0xefcdab89;\r\n this.chain_[2] = 0x98badcfe;\r\n this.chain_[3] = 0x10325476;\r\n this.chain_[4] = 0xc3d2e1f0;\r\n this.inbuf_ = 0;\r\n this.total_ = 0;\r\n }\r\n /**\r\n * Internal compress helper function.\r\n * @param buf Block to compress.\r\n * @param offset Offset of the block in the buffer.\r\n * @private\r\n */\r\n compress_(buf, offset) {\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n const W = this.W_;\r\n // get 16 big endian words\r\n if (typeof buf === 'string') {\r\n for (let i = 0; i < 16; i++) {\r\n // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n // have a bug that turns the post-increment ++ operator into pre-increment\r\n // during JIT compilation. We have code that depends heavily on SHA-1 for\r\n // correctness and which is affected by this bug, so I've removed all uses\r\n // of post-increment ++ in which the result value is used. We can revert\r\n // this change once the Safari bug\r\n // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n // most clients have been updated.\r\n W[i] =\r\n (buf.charCodeAt(offset) << 24) |\r\n (buf.charCodeAt(offset + 1) << 16) |\r\n (buf.charCodeAt(offset + 2) << 8) |\r\n buf.charCodeAt(offset + 3);\r\n offset += 4;\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < 16; i++) {\r\n W[i] =\r\n (buf[offset] << 24) |\r\n (buf[offset + 1] << 16) |\r\n (buf[offset + 2] << 8) |\r\n buf[offset + 3];\r\n offset += 4;\r\n }\r\n }\r\n // expand to 80 words\r\n for (let i = 16; i < 80; i++) {\r\n const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n }\r\n let a = this.chain_[0];\r\n let b = this.chain_[1];\r\n let c = this.chain_[2];\r\n let d = this.chain_[3];\r\n let e = this.chain_[4];\r\n let f, k;\r\n // TODO(user): Try to unroll this loop to speed up the computation.\r\n for (let i = 0; i < 80; i++) {\r\n if (i < 40) {\r\n if (i < 20) {\r\n f = d ^ (b & (c ^ d));\r\n k = 0x5a827999;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0x6ed9eba1;\r\n }\r\n }\r\n else {\r\n if (i < 60) {\r\n f = (b & c) | (d & (b | c));\r\n k = 0x8f1bbcdc;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0xca62c1d6;\r\n }\r\n }\r\n const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n e = d;\r\n d = c;\r\n c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n b = a;\r\n a = t;\r\n }\r\n this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n }\r\n update(bytes, length) {\r\n // TODO(johnlenz): tighten the function signature and remove this check\r\n if (bytes == null) {\r\n return;\r\n }\r\n if (length === undefined) {\r\n length = bytes.length;\r\n }\r\n const lengthMinusBlock = length - this.blockSize;\r\n let n = 0;\r\n // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n const buf = this.buf_;\r\n let inbuf = this.inbuf_;\r\n // The outer while loop should execute at most twice.\r\n while (n < length) {\r\n // When we have no data in the block to top up, we can directly process the\r\n // input buffer (assuming it contains sufficient data). This gives ~25%\r\n // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n // the data is provided in large chunks (or in multiples of 64 bytes).\r\n if (inbuf === 0) {\r\n while (n <= lengthMinusBlock) {\r\n this.compress_(bytes, n);\r\n n += this.blockSize;\r\n }\r\n }\r\n if (typeof bytes === 'string') {\r\n while (n < length) {\r\n buf[inbuf] = bytes.charCodeAt(n);\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n while (n < length) {\r\n buf[inbuf] = bytes[n];\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.inbuf_ = inbuf;\r\n this.total_ += length;\r\n }\r\n /** @override */\r\n digest() {\r\n const digest = [];\r\n let totalBits = this.total_ * 8;\r\n // Add pad 0x80 0x00*.\r\n if (this.inbuf_ < 56) {\r\n this.update(this.pad_, 56 - this.inbuf_);\r\n }\r\n else {\r\n this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n }\r\n // Add # bits.\r\n for (let i = this.blockSize - 1; i >= 56; i--) {\r\n this.buf_[i] = totalBits & 255;\r\n totalBits /= 256; // Don't use bit-shifting here!\r\n }\r\n this.compress_(this.buf_);\r\n let n = 0;\r\n for (let i = 0; i < 5; i++) {\r\n for (let j = 24; j >= 0; j -= 8) {\r\n digest[n] = (this.chain_[i] >> j) & 255;\r\n ++n;\r\n }\r\n }\r\n return digest;\r\n }\r\n}\n\n/**\r\n * Helper to make a Subscribe function (just like Promise helps make a\r\n * Thenable).\r\n *\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\nfunction createSubscribe(executor, onNoObservers) {\r\n const proxy = new ObserverProxy(executor, onNoObservers);\r\n return proxy.subscribe.bind(proxy);\r\n}\r\n/**\r\n * Implement fan-out for any number of Observers attached via a subscribe\r\n * function.\r\n */\r\nclass ObserverProxy {\r\n /**\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\n constructor(executor, onNoObservers) {\r\n this.observers = [];\r\n this.unsubscribes = [];\r\n this.observerCount = 0;\r\n // Micro-task scheduling by calling task.then().\r\n this.task = Promise.resolve();\r\n this.finalized = false;\r\n this.onNoObservers = onNoObservers;\r\n // Call the executor asynchronously so subscribers that are called\r\n // synchronously after the creation of the subscribe function\r\n // can still receive the very first value generated in the executor.\r\n this.task\r\n .then(() => {\r\n executor(this);\r\n })\r\n .catch(e => {\r\n this.error(e);\r\n });\r\n }\r\n next(value) {\r\n this.forEachObserver((observer) => {\r\n observer.next(value);\r\n });\r\n }\r\n error(error) {\r\n this.forEachObserver((observer) => {\r\n observer.error(error);\r\n });\r\n this.close(error);\r\n }\r\n complete() {\r\n this.forEachObserver((observer) => {\r\n observer.complete();\r\n });\r\n this.close();\r\n }\r\n /**\r\n * Subscribe function that can be used to add an Observer to the fan-out list.\r\n *\r\n * - We require that no event is sent to a subscriber sychronously to their\r\n * call to subscribe().\r\n */\r\n subscribe(nextOrObserver, error, complete) {\r\n let observer;\r\n if (nextOrObserver === undefined &&\r\n error === undefined &&\r\n complete === undefined) {\r\n throw new Error('Missing Observer.');\r\n }\r\n // Assemble an Observer object when passed as callback functions.\r\n if (implementsAnyMethods(nextOrObserver, [\r\n 'next',\r\n 'error',\r\n 'complete'\r\n ])) {\r\n observer = nextOrObserver;\r\n }\r\n else {\r\n observer = {\r\n next: nextOrObserver,\r\n error,\r\n complete\r\n };\r\n }\r\n if (observer.next === undefined) {\r\n observer.next = noop;\r\n }\r\n if (observer.error === undefined) {\r\n observer.error = noop;\r\n }\r\n if (observer.complete === undefined) {\r\n observer.complete = noop;\r\n }\r\n const unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n // Attempt to subscribe to a terminated Observable - we\r\n // just respond to the Observer with the final error or complete\r\n // event.\r\n if (this.finalized) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n try {\r\n if (this.finalError) {\r\n observer.error(this.finalError);\r\n }\r\n else {\r\n observer.complete();\r\n }\r\n }\r\n catch (e) {\r\n // nothing\r\n }\r\n return;\r\n });\r\n }\r\n this.observers.push(observer);\r\n return unsub;\r\n }\r\n // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n // any unsubscribed Observer.\r\n unsubscribeOne(i) {\r\n if (this.observers === undefined || this.observers[i] === undefined) {\r\n return;\r\n }\r\n delete this.observers[i];\r\n this.observerCount -= 1;\r\n if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n this.onNoObservers(this);\r\n }\r\n }\r\n forEachObserver(fn) {\r\n if (this.finalized) {\r\n // Already closed by previous event....just eat the additional values.\r\n return;\r\n }\r\n // Since sendOne calls asynchronously - there is no chance that\r\n // this.observers will become undefined.\r\n for (let i = 0; i < this.observers.length; i++) {\r\n this.sendOne(i, fn);\r\n }\r\n }\r\n // Call the Observer via one of it's callback function. We are careful to\r\n // confirm that the observe has not been unsubscribed since this asynchronous\r\n // function had been queued.\r\n sendOne(i, fn) {\r\n // Execute the callback asynchronously\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n if (this.observers !== undefined && this.observers[i] !== undefined) {\r\n try {\r\n fn(this.observers[i]);\r\n }\r\n catch (e) {\r\n // Ignore exceptions raised in Observers or missing methods of an\r\n // Observer.\r\n // Log error to console. b/31404806\r\n if (typeof console !== 'undefined' && console.error) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n close(err) {\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n if (err !== undefined) {\r\n this.finalError = err;\r\n }\r\n // Proxy is no longer needed - garbage collect references\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(() => {\r\n this.observers = undefined;\r\n this.onNoObservers = undefined;\r\n });\r\n }\r\n}\r\n/** Turn synchronous function into one called asynchronously. */\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction async(fn, onError) {\r\n return (...args) => {\r\n Promise.resolve(true)\r\n .then(() => {\r\n fn(...args);\r\n })\r\n .catch((error) => {\r\n if (onError) {\r\n onError(error);\r\n }\r\n });\r\n };\r\n}\r\n/**\r\n * Return true if the object passed in implements any of the named methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return false;\r\n }\r\n for (const method of methods) {\r\n if (method in obj && typeof obj[method] === 'function') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction noop() {\r\n // do nothing\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Check to make sure the appropriate number of arguments are provided for a public function.\r\n * Throws an error if it fails.\r\n *\r\n * @param fnName The function name\r\n * @param minCount The minimum number of arguments to allow for the function call\r\n * @param maxCount The maximum number of argument to allow for the function call\r\n * @param argCount The actual number of arguments provided.\r\n */\r\nconst validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n let argError;\r\n if (argCount < minCount) {\r\n argError = 'at least ' + minCount;\r\n }\r\n else if (argCount > maxCount) {\r\n argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n }\r\n if (argError) {\r\n const error = fnName +\r\n ' failed: Was called with ' +\r\n argCount +\r\n (argCount === 1 ? ' argument.' : ' arguments.') +\r\n ' Expects ' +\r\n argError +\r\n '.';\r\n throw new Error(error);\r\n }\r\n};\r\n/**\r\n * Generates a string to prefix an error message about failed argument validation\r\n *\r\n * @param fnName The function name\r\n * @param argName The name of the argument\r\n * @return The prefix to add to the error thrown for validation.\r\n */\r\nfunction errorPrefix(fnName, argName) {\r\n return `${fnName} failed: ${argName} argument `;\r\n}\r\n/**\r\n * @param fnName\r\n * @param argumentNumber\r\n * @param namespace\r\n * @param optional\r\n */\r\nfunction validateNamespace(fnName, namespace, optional) {\r\n if (optional && !namespace) {\r\n return;\r\n }\r\n if (typeof namespace !== 'string') {\r\n //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');\r\n }\r\n}\r\nfunction validateCallback(fnName, argumentName, \r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\ncallback, optional) {\r\n if (optional && !callback) {\r\n return;\r\n }\r\n if (typeof callback !== 'function') {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');\r\n }\r\n}\r\nfunction validateContextObject(fnName, argumentName, context, optional) {\r\n if (optional && !context) {\r\n return;\r\n }\r\n if (typeof context !== 'object' || context === null) {\r\n throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n// so it's been modified.\r\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n// use 2 characters in Javascript. All 4-byte UTF-8 characters begin with a first\r\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n// pair).\r\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n/**\r\n * @param {string} str\r\n * @return {Array}\r\n */\r\nconst stringToByteArray = function (str) {\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n // Is this the lead surrogate in a surrogate pair?\r\n if (c >= 0xd800 && c <= 0xdbff) {\r\n const high = c - 0xd800; // the high 10 bits.\r\n i++;\r\n assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n c = 0x10000 + (high << 10) + low;\r\n }\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if (c < 65536) {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Calculate length without actually converting; useful for doing cheaper validation.\r\n * @param {string} str\r\n * @return {number}\r\n */\r\nconst stringLength = function (str) {\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n const c = str.charCodeAt(i);\r\n if (c < 128) {\r\n p++;\r\n }\r\n else if (c < 2048) {\r\n p += 2;\r\n }\r\n else if (c >= 0xd800 && c <= 0xdbff) {\r\n // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\r\n p += 4;\r\n i++; // skip trail surrogate.\r\n }\r\n else {\r\n p += 3;\r\n }\r\n }\r\n return p;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Copied from https://stackoverflow.com/a/2117523\r\n * Generates a new uuid.\r\n * @public\r\n */\r\nconst uuidv4 = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n const r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The amount of milliseconds to exponentially increase.\r\n */\r\nconst DEFAULT_INTERVAL_MILLIS = 1000;\r\n/**\r\n * The factor to backoff by.\r\n * Should be a number greater than 1.\r\n */\r\nconst DEFAULT_BACKOFF_FACTOR = 2;\r\n/**\r\n * The maximum milliseconds to increase to.\r\n *\r\n *

Visible for testing\r\n */\r\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\r\n/**\r\n * The percentage of backoff time to randomize by.\r\n * See\r\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\r\n * for context.\r\n *\r\n *

Visible for testing\r\n */\r\nconst RANDOM_FACTOR = 0.5;\r\n/**\r\n * Based on the backoff method from\r\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\r\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\r\n */\r\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\r\n // Calculates an exponentially increasing value.\r\n // Deviation: calculates value from count and a constant interval, so we only need to save value\r\n // and count to restore state.\r\n const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\r\n // A random \"fuzz\" to avoid waves of retries.\r\n // Deviation: randomFactor is required.\r\n const randomWait = Math.round(\r\n // A fraction of the backoff value to add/subtract.\r\n // Deviation: changes multiplication order to improve readability.\r\n RANDOM_FACTOR *\r\n currBaseValue *\r\n // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\r\n // if we add or subtract.\r\n (Math.random() - 0.5) *\r\n 2);\r\n // Limits backoff to max to avoid effectively permanent backoff.\r\n return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provide English ordinal letters after a number\r\n */\r\nfunction ordinal(i) {\r\n if (!Number.isFinite(i)) {\r\n return `${i}`;\r\n }\r\n return i + indicator(i);\r\n}\r\nfunction indicator(i) {\r\n i = Math.abs(i);\r\n const cent = i % 100;\r\n if (cent >= 10 && cent <= 20) {\r\n return 'th';\r\n }\r\n const dec = i % 10;\r\n if (dec === 1) {\r\n return 'st';\r\n }\r\n if (dec === 2) {\r\n return 'nd';\r\n }\r\n if (dec === 3) {\r\n return 'rd';\r\n }\r\n return 'th';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getModularInstance(service) {\r\n if (service && service._delegate) {\r\n return service._delegate;\r\n }\r\n else {\r\n return service;\r\n }\r\n}\n\nexport { CONSTANTS, DecodeBase64StringError, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getDefaults, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, uuidv4, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n\n","var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","var asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n var named;\n try {\n named = require('vm').runInThisContext(\n '(function ' + this.name + '(entity) {\\n' +\n ' this._initNamed(entity);\\n' +\n '})'\n );\n } catch (e) {\n named = function (entity) {\n this._initNamed(entity);\n };\n }\n inherits(named, base);\n named.prototype._initNamed = function initnamed(entity) {\n base.call(this, entity);\n };\n\n return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n var res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n var res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!(item instanceof EncoderBuffer))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = new Buffer(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","var Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n var state = {};\n this._baseState = state;\n\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n var state = this._baseState;\n var cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n var res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n var state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n var clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n var state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n var state = this._baseState;\n\n // Filter children and args\n var children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n var res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n var value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n var state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n var state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n var state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n var state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n var state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n var state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n var state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n var state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n var result = state['default'];\n var present = true;\n\n var prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n var tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n var save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n var prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n var explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n var start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n if (state.any)\n var save = input.save();\n var body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any)\n result = result;\n else if (state.choice === null)\n result = this._decodeGeneric(state.tag, input, options);\n else\n result = this._decodeChoice(input, options);\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n var data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n var state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n var state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n var state = this._baseState;\n var result = null;\n var match = false;\n\n Object.keys(state.choice).some(function(key) {\n var save = input.save();\n var node = state.choice[key];\n try {\n var value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n var state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n var result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n var result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default']\n else\n return;\n }\n\n // Encode children first\n var content = null;\n var primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n var prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n var res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n var child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n var state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n var result;\n if (!state.any && state.choice === null) {\n var tag = state.implicit !== null ? state.implicit : state.tag;\n var cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n var state = this._baseState;\n\n var node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n var state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n","var inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n var state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n var state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n var state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n var state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n var state = this._reporterState;\n\n var prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n var state = this._reporterState;\n\n var now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n var err;\n var state = this._reporterState;\n\n var inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n var state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","var constants = require('../constants');\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\n","var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n var res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n var value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!(data instanceof base.DecoderBuffer))\n data = new base.DecoderBuffer(data, options);\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n var state = buffer.save();\n var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n var decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n var len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n var state = buffer.save();\n var res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n while (true) {\n var tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n var len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n var res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len)\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n var result = [];\n while (!buffer.isEmpty()) {\n var possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n var res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n var unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n var raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n var str = '';\n for (var i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n var numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n var printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n var result;\n var identifiers = [];\n var ident = 0;\n while (!buffer.isEmpty()) {\n var subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n var first = (identifiers[0] / 40) | 0;\n var second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n var tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n var str = buffer.raw().toString();\n if (tag === 'gentime') {\n var year = str.slice(0, 4) | 0;\n var mon = str.slice(4, 6) | 0;\n var day = str.slice(6, 8) | 0;\n var hour = str.slice(8, 10) | 0;\n var min = str.slice(10, 12) | 0;\n var sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n var year = str.slice(0, 2) | 0;\n var mon = str.slice(2, 4) | 0;\n var day = str.slice(4, 6) | 0;\n var hour = str.slice(6, 8) | 0;\n var min = str.slice(8, 10) | 0;\n var sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n var res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n var raw = buffer.raw();\n var res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n var tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n var cls = der.tagClass[tag >> 6];\n var primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n var oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n var tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n var len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n var num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (var i = 0; i < num; i++) {\n len <<= 8;\n var j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","var decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n var lines = data.toString().split(/[\\r\\n]+/g);\n\n var label = options.label.toUpperCase();\n\n var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n var start = -1;\n var end = -1;\n for (var i = 0; i < lines.length; i++) {\n var match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n var base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n var input = new Buffer(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n var header = new Buffer(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n var lenOctets = 1;\n for (var i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n var header = new Buffer(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n var buf = new Buffer(str.length * 2);\n for (var i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s\\.]+/g);\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n var size = 0;\n for (var i = 0; i < id.length; i++) {\n var ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n var objid = new Buffer(size);\n var offset = objid.length - 1;\n for (var i = id.length - 1; i >= 0; i--) {\n var ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n var str;\n var date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n var numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = new Buffer(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n var size = num.length;\n if (num.length === 0)\n size++;\n\n var out = new Buffer(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n var size = 1;\n for (var i = num; i >= 0x100; i >>= 8)\n size++;\n\n var out = new Array(size);\n for (var i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n var state = this._baseState;\n var i;\n if (state['default'] === null)\n return false;\n\n var data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n var res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","var encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n var buf = DEREncoder.prototype.encode.call(this, data);\n\n var p = buf.toString('base64');\n var out = [ '-----BEGIN ' + options.label + '-----' ];\n for (var i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n r.strip();\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var bn = require('bn.js');\nvar randomBytes = require('randombytes');\nmodule.exports = crt;\nfunction blind(priv) {\n var r = getr(priv);\n var blinder = r.toRed(bn.mont(priv.modulus))\n .redPow(new bn(priv.publicExponent)).fromRed();\n return {\n blinder: blinder,\n unblinder:r.invm(priv.modulus)\n };\n}\nfunction crt(msg, priv) {\n var blinds = blind(priv);\n var len = priv.modulus.byteLength();\n var mod = bn.mont(priv.modulus);\n var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);\n var c1 = blinded.toRed(bn.mont(priv.prime1));\n var c2 = blinded.toRed(bn.mont(priv.prime2));\n var qinv = priv.coefficient;\n var p = priv.prime1;\n var q = priv.prime2;\n var m1 = c1.redPow(priv.exponent1);\n var m2 = c2.redPow(priv.exponent2);\n m1 = m1.fromRed();\n m2 = m2.fromRed();\n var h = m1.isub(m2).imul(qinv).umod(p);\n h.imul(q);\n m2.iadd(h);\n return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));\n}\ncrt.getr = getr;\nfunction getr(priv) {\n var len = priv.modulus.byteLength();\n var r = new bn(randomBytes(len));\n while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {\n r = new bn(randomBytes(len));\n }\n return r;\n}\n","module.exports = require('./browser/algorithms.json')\n","var createHash = require('create-hash')\nvar stream = require('stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = new Buffer(algorithms[key].id, 'hex')\n algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hashType = data.hash\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nSign.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = new Buffer(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n this.end()\n var hash = this._hash.digest()\n var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = new Buffer(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = new Buffer(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n return new Verify(algorithm)\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n}\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [ 0, 1 ]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return new Buffer(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [ 0 ].concat(r)\n if (s[0] & 0x80) s = [ 0 ].concat(s)\n\n var total = r.length + s.length + 4\n var res = [ 0x30, total, 0x02, r.length ]\n res = res.concat(r, [ 0x02, s.length ], s)\n return new Buffer(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = new Buffer(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = new Buffer(q.byteLength() - x.length)\n zeros.fill(0)\n x = Buffer.concat([ zeros, x ])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = new Buffer(hlen)\n v.fill(1)\n var k = new Buffer(hlen)\n k.fill(0)\n k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = new Buffer(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = new Buffer(q.byteLength() - out.length)\n zeros.fill(0)\n out = Buffer.concat([ zeros, out ])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = new Buffer(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([ t, kv.v ])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n var pub = parseKeys(key)\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n return ecVerify(sig, hash, pub)\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong public key type')\n return dsaVerify(sig, hash, pub)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = pub.modulus.byteLength()\n var pad = [ 1 ]\n var padNum = 0\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff)\n padNum++\n }\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) {\n pad.push(hash[i])\n }\n pad = new Buffer(pad)\n var red = BN.mont(pub.modulus)\n sig = new BN(sig).toRed(red)\n\n sig = sig.redPow(new BN(pub.publicExponent))\n sig = new Buffer(sig.fromRed().toArray())\n var out = padNum < 8 ? 1 : 0\n len = Math.min(sig.length, pad.length)\n if (sig.length !== pad.length) out = 1\n\n i = -1\n while (++i < len) out |= sig[i] ^ pad[i]\n return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n var curve = new EC(curveId)\n var pubkey = pub.data.subjectPrivateKey.data\n\n return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n var p = pub.data.p\n var q = pub.data.q\n var g = pub.data.g\n var y = pub.data.pub_key\n var unpacked = parseKeys.signature.decode(sig, 'der')\n var s = unpacked.s\n var r = unpacked.r\n checkValue(s, q)\n checkValue(r, q)\n var montp = BN.mont(p)\n var w = s.invm(q)\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q)\n return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","require('../../modules/es7.array.flat-map');\nmodule.exports = require('../../modules/_core').Array.flatMap;\n","require('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","'use strict';\nrequire('../../modules/es6.promise');\nrequire('../../modules/es7.promise.finally');\nmodule.exports = require('../../modules/_core').Promise['finally'];\n","require('../../modules/es7.string.pad-end');\nmodule.exports = require('../../modules/_core').String.padEnd;\n","require('../../modules/es7.string.pad-start');\nmodule.exports = require('../../modules/_core').String.padStart;\n","require('../../modules/es7.string.trim-right');\nmodule.exports = require('../../modules/_core').String.trimRight;\n","require('../../modules/es7.string.trim-left');\nmodule.exports = require('../../modules/_core').String.trimLeft;\n","require('../../modules/es7.symbol.async-iterator');\nmodule.exports = require('../../modules/_wks-ext').f('asyncIterator');\n","require('../modules/es7.global');\nmodule.exports = require('../modules/_core').global;\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","module.exports = {};\n","module.exports = false;\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = require('./_wks');\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","require('./_set-species')('Array');\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","require('./_wks-define')('asyncIterator');\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","require('../modules/web.timers');\nrequire('../modules/web.immediate');\nrequire('../modules/web.dom.iterable');\nmodule.exports = require('../modules/_core');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar utils = des.utils;\nvar Cipher = des.Cipher;\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar des = require('../des');\nvar Cipher = des.Cipher;\nvar DES = des.DES;\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n for (var j = 0; j < naf.length; j += doubles.step) {\n var nafW = 0;\n for (var k = j + doubles.step - 1; k >= j; k--)\n nafW = (nafW << 1) + naf[k];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (var j = 0; j < repr.length; j++) {\n var nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\n k++;\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n for (var i = 0; i < len; i++) {\n var p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (var i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a]);\n naf[b] = getNAF(coeffs[b], wndWidth[b]);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b] /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3 /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (var j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (var i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (var j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (var j = 0; j < len; j++) {\n var z = tmp[j];\n var p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (var i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n if (this.curve.twisted) {\n // E = a * C\n var e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n var h = this.z.redSqr();\n // J = F - 2 * H\n var j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n var e = c.redAdd(d);\n // H = (c * Z1)^2\n var h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n var j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16)\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 }\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul)\n }\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1)\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1)\n }\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point))\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point))\n }\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate)\n }\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (var i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (var i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve\n });\n return curve;\n }\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n ]\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n ]\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n ]\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n ]\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n ]\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9'\n ]\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658'\n ]\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre\n ]\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray()\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n do {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8'\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; true; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n\n if (!this.curve._maxwellTrick) {\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n }\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0 && (r[1] & 0x80)) {\n r = r.slice(1);\n }\n if (s[0] === 0 && (s[1] & 0x80)) {\n s = s.slice(1);\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n var curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength)\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n ]\n ]\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n ]\n ]\n }\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w) {\n var naf = [];\n var ws = 1 << (w + 1);\n var k = num.clone();\n while (k.cmpn(1) >= 0) {\n var z;\n if (k.isOdd()) {\n var mod = k.andln(ws - 1);\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n naf.push(z);\n\n // Optimization, shift by word if possible\n var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\n for (var i = 1; i < shift; i++)\n naf.push(0);\n k.iushrn(shift);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n []\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n var m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n var m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","module.exports = global[\"IntlMessageFormat\"] = require(\"-!/code/scratchjr/node_modules/strip-sourcemap-loader/index.js!./index.js\");","export default __webpack_public_path__ + \"sql-wasm-057823fecaede6350cf9941c7d4c7ce3.wasm\";","import { registerVersion } from '@firebase/app';\nexport * from '@firebase/app';\n\nvar name = \"firebase\";\nvar version = \"9.19.1\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nregisterVersion(name, version, 'app');\n\n","export * from '@firebase/database';\n\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nexports = module.exports = require('./lib/parser')['default'];\nexports['default'] = exports;\n","\"use strict\";\n\nexports[\"default\"] = (function() {\n /*\n * Generated by PEG.js 0.8.0.\n *\n * http://pegjs.majda.cz/\n */\n\n function peg$subclass(child, parent) {\n function ctor() { this.constructor = child; }\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n }\n\n function SyntaxError(message, expected, found, offset, line, column) {\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.offset = offset;\n this.line = line;\n this.column = column;\n\n this.name = \"SyntaxError\";\n }\n\n peg$subclass(SyntaxError, Error);\n\n function parse(input) {\n var options = arguments.length > 1 ? arguments[1] : {},\n\n peg$FAILED = {},\n\n peg$startRuleFunctions = { start: peg$parsestart },\n peg$startRuleFunction = peg$parsestart,\n\n peg$c0 = [],\n peg$c1 = function(elements) {\n return {\n type : 'messageFormatPattern',\n elements: elements\n };\n },\n peg$c2 = peg$FAILED,\n peg$c3 = function(text) {\n var string = '',\n i, j, outerLen, inner, innerLen;\n\n for (i = 0, outerLen = text.length; i < outerLen; i += 1) {\n inner = text[i];\n\n for (j = 0, innerLen = inner.length; j < innerLen; j += 1) {\n string += inner[j];\n }\n }\n\n return string;\n },\n peg$c4 = function(messageText) {\n return {\n type : 'messageTextElement',\n value: messageText\n };\n },\n peg$c5 = /^[^ \\t\\n\\r,.+={}#]/,\n peg$c6 = { type: \"class\", value: \"[^ \\\\t\\\\n\\\\r,.+={}#]\", description: \"[^ \\\\t\\\\n\\\\r,.+={}#]\" },\n peg$c7 = \"{\",\n peg$c8 = { type: \"literal\", value: \"{\", description: \"\\\"{\\\"\" },\n peg$c9 = null,\n peg$c10 = \",\",\n peg$c11 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n peg$c12 = \"}\",\n peg$c13 = { type: \"literal\", value: \"}\", description: \"\\\"}\\\"\" },\n peg$c14 = function(id, format) {\n return {\n type : 'argumentElement',\n id : id,\n format: format && format[2]\n };\n },\n peg$c15 = \"number\",\n peg$c16 = { type: \"literal\", value: \"number\", description: \"\\\"number\\\"\" },\n peg$c17 = \"date\",\n peg$c18 = { type: \"literal\", value: \"date\", description: \"\\\"date\\\"\" },\n peg$c19 = \"time\",\n peg$c20 = { type: \"literal\", value: \"time\", description: \"\\\"time\\\"\" },\n peg$c21 = function(type, style) {\n return {\n type : type + 'Format',\n style: style && style[2]\n };\n },\n peg$c22 = \"plural\",\n peg$c23 = { type: \"literal\", value: \"plural\", description: \"\\\"plural\\\"\" },\n peg$c24 = function(pluralStyle) {\n return {\n type : pluralStyle.type,\n ordinal: false,\n offset : pluralStyle.offset || 0,\n options: pluralStyle.options\n };\n },\n peg$c25 = \"selectordinal\",\n peg$c26 = { type: \"literal\", value: \"selectordinal\", description: \"\\\"selectordinal\\\"\" },\n peg$c27 = function(pluralStyle) {\n return {\n type : pluralStyle.type,\n ordinal: true,\n offset : pluralStyle.offset || 0,\n options: pluralStyle.options\n }\n },\n peg$c28 = \"select\",\n peg$c29 = { type: \"literal\", value: \"select\", description: \"\\\"select\\\"\" },\n peg$c30 = function(options) {\n return {\n type : 'selectFormat',\n options: options\n };\n },\n peg$c31 = \"=\",\n peg$c32 = { type: \"literal\", value: \"=\", description: \"\\\"=\\\"\" },\n peg$c33 = function(selector, pattern) {\n return {\n type : 'optionalFormatPattern',\n selector: selector,\n value : pattern\n };\n },\n peg$c34 = \"offset:\",\n peg$c35 = { type: \"literal\", value: \"offset:\", description: \"\\\"offset:\\\"\" },\n peg$c36 = function(number) {\n return number;\n },\n peg$c37 = function(offset, options) {\n return {\n type : 'pluralFormat',\n offset : offset,\n options: options\n };\n },\n peg$c38 = { type: \"other\", description: \"whitespace\" },\n peg$c39 = /^[ \\t\\n\\r]/,\n peg$c40 = { type: \"class\", value: \"[ \\\\t\\\\n\\\\r]\", description: \"[ \\\\t\\\\n\\\\r]\" },\n peg$c41 = { type: \"other\", description: \"optionalWhitespace\" },\n peg$c42 = /^[0-9]/,\n peg$c43 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n peg$c44 = /^[0-9a-f]/i,\n peg$c45 = { type: \"class\", value: \"[0-9a-f]i\", description: \"[0-9a-f]i\" },\n peg$c46 = \"0\",\n peg$c47 = { type: \"literal\", value: \"0\", description: \"\\\"0\\\"\" },\n peg$c48 = /^[1-9]/,\n peg$c49 = { type: \"class\", value: \"[1-9]\", description: \"[1-9]\" },\n peg$c50 = function(digits) {\n return parseInt(digits, 10);\n },\n peg$c51 = /^[^{}\\\\\\0-\\x1F \\t\\n\\r]/,\n peg$c52 = { type: \"class\", value: \"[^{}\\\\\\\\\\\\0-\\\\x1F \\\\t\\\\n\\\\r]\", description: \"[^{}\\\\\\\\\\\\0-\\\\x1F \\\\t\\\\n\\\\r]\" },\n peg$c53 = \"\\\\\\\\\",\n peg$c54 = { type: \"literal\", value: \"\\\\\\\\\", description: \"\\\"\\\\\\\\\\\\\\\\\\\"\" },\n peg$c55 = function() { return '\\\\'; },\n peg$c56 = \"\\\\#\",\n peg$c57 = { type: \"literal\", value: \"\\\\#\", description: \"\\\"\\\\\\\\#\\\"\" },\n peg$c58 = function() { return '\\\\#'; },\n peg$c59 = \"\\\\{\",\n peg$c60 = { type: \"literal\", value: \"\\\\{\", description: \"\\\"\\\\\\\\{\\\"\" },\n peg$c61 = function() { return '\\u007B'; },\n peg$c62 = \"\\\\}\",\n peg$c63 = { type: \"literal\", value: \"\\\\}\", description: \"\\\"\\\\\\\\}\\\"\" },\n peg$c64 = function() { return '\\u007D'; },\n peg$c65 = \"\\\\u\",\n peg$c66 = { type: \"literal\", value: \"\\\\u\", description: \"\\\"\\\\\\\\u\\\"\" },\n peg$c67 = function(digits) {\n return String.fromCharCode(parseInt(digits, 16));\n },\n peg$c68 = function(chars) { return chars.join(''); },\n\n peg$currPos = 0,\n peg$reportedPos = 0,\n peg$cachedPos = 0,\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n peg$maxFailPos = 0,\n peg$maxFailExpected = [],\n peg$silentFails = 0,\n\n peg$result;\n\n if (\"startRule\" in options) {\n if (!(options.startRule in peg$startRuleFunctions)) {\n throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n }\n\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n\n function text() {\n return input.substring(peg$reportedPos, peg$currPos);\n }\n\n function offset() {\n return peg$reportedPos;\n }\n\n function line() {\n return peg$computePosDetails(peg$reportedPos).line;\n }\n\n function column() {\n return peg$computePosDetails(peg$reportedPos).column;\n }\n\n function expected(description) {\n throw peg$buildException(\n null,\n [{ type: \"other\", description: description }],\n peg$reportedPos\n );\n }\n\n function error(message) {\n throw peg$buildException(message, null, peg$reportedPos);\n }\n\n function peg$computePosDetails(pos) {\n function advance(details, startPos, endPos) {\n var p, ch;\n\n for (p = startPos; p < endPos; p++) {\n ch = input.charAt(p);\n if (ch === \"\\n\") {\n if (!details.seenCR) { details.line++; }\n details.column = 1;\n details.seenCR = false;\n } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n details.line++;\n details.column = 1;\n details.seenCR = true;\n } else {\n details.column++;\n details.seenCR = false;\n }\n }\n }\n\n if (peg$cachedPos !== pos) {\n if (peg$cachedPos > pos) {\n peg$cachedPos = 0;\n peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n }\n advance(peg$cachedPosDetails, peg$cachedPos, pos);\n peg$cachedPos = pos;\n }\n\n return peg$cachedPosDetails;\n }\n\n function peg$fail(expected) {\n if (peg$currPos < peg$maxFailPos) { return; }\n\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n\n peg$maxFailExpected.push(expected);\n }\n\n function peg$buildException(message, expected, pos) {\n function cleanupExpected(expected) {\n var i = 1;\n\n expected.sort(function(a, b) {\n if (a.description < b.description) {\n return -1;\n } else if (a.description > b.description) {\n return 1;\n } else {\n return 0;\n }\n });\n\n while (i < expected.length) {\n if (expected[i - 1] === expected[i]) {\n expected.splice(i, 1);\n } else {\n i++;\n }\n }\n }\n\n function buildMessage(expected, found) {\n function stringEscape(s) {\n function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\x08/g, '\\\\b')\n .replace(/\\t/g, '\\\\t')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\f/g, '\\\\f')\n .replace(/\\r/g, '\\\\r')\n .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n .replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(ch) { return '\\\\x' + hex(ch); })\n .replace(/[\\u0180-\\u0FFF]/g, function(ch) { return '\\\\u0' + hex(ch); })\n .replace(/[\\u1080-\\uFFFF]/g, function(ch) { return '\\\\u' + hex(ch); });\n }\n\n var expectedDescs = new Array(expected.length),\n expectedDesc, foundDesc, i;\n\n for (i = 0; i < expected.length; i++) {\n expectedDescs[i] = expected[i].description;\n }\n\n expectedDesc = expected.length > 1\n ? expectedDescs.slice(0, -1).join(\", \")\n + \" or \"\n + expectedDescs[expected.length - 1]\n : expectedDescs[0];\n\n foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n }\n\n var posDetails = peg$computePosDetails(pos),\n found = pos < input.length ? input.charAt(pos) : null;\n\n if (expected !== null) {\n cleanupExpected(expected);\n }\n\n return new SyntaxError(\n message !== null ? message : buildMessage(expected, found),\n expected,\n found,\n pos,\n posDetails.line,\n posDetails.column\n );\n }\n\n function peg$parsestart() {\n var s0;\n\n s0 = peg$parsemessageFormatPattern();\n\n return s0;\n }\n\n function peg$parsemessageFormatPattern() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsemessageFormatElement();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsemessageFormatElement();\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c1(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsemessageFormatElement() {\n var s0;\n\n s0 = peg$parsemessageTextElement();\n if (s0 === peg$FAILED) {\n s0 = peg$parseargumentElement();\n }\n\n return s0;\n }\n\n function peg$parsemessageText() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$currPos;\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsechars();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s3 = [s3, s4, s5];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$currPos;\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n s4 = peg$parsechars();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s3 = [s3, s4, s5];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c3(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parsews();\n if (s1 !== peg$FAILED) {\n s1 = input.substring(s0, peg$currPos);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parsemessageTextElement() {\n var s0, s1;\n\n s0 = peg$currPos;\n s1 = peg$parsemessageText();\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c4(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parseargument() {\n var s0, s1, s2;\n\n s0 = peg$parsenumber();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = [];\n if (peg$c5.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c6); }\n }\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n if (peg$c5.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c6); }\n }\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n s1 = input.substring(s0, peg$currPos);\n }\n s0 = s1;\n }\n\n return s0;\n }\n\n function peg$parseargumentElement() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c8); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseargument();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s6 = peg$c10;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseelementFormat();\n if (s8 !== peg$FAILED) {\n s6 = [s6, s7, s8];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$c2;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c2;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$c2;\n }\n if (s5 === peg$FAILED) {\n s5 = peg$c9;\n }\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c12;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c13); }\n }\n if (s7 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c14(s3, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseelementFormat() {\n var s0;\n\n s0 = peg$parsesimpleFormat();\n if (s0 === peg$FAILED) {\n s0 = peg$parsepluralFormat();\n if (s0 === peg$FAILED) {\n s0 = peg$parseselectOrdinalFormat();\n if (s0 === peg$FAILED) {\n s0 = peg$parseselectFormat();\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsesimpleFormat() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c15) {\n s1 = peg$c15;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c16); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c17) {\n s1 = peg$c17;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c18); }\n }\n if (s1 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c19) {\n s1 = peg$c19;\n peg$currPos += 4;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c20); }\n }\n }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 44) {\n s4 = peg$c10;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsechars();\n if (s6 !== peg$FAILED) {\n s4 = [s4, s5, s6];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n if (s3 === peg$FAILED) {\n s3 = peg$c9;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c21(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parsepluralFormat() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c22) {\n s1 = peg$c22;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c23); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s3 = peg$c10;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsepluralStyle();\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c24(s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseselectOrdinalFormat() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 13) === peg$c25) {\n s1 = peg$c25;\n peg$currPos += 13;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c26); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s3 = peg$c10;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsepluralStyle();\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c27(s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseselectFormat() {\n var s0, s1, s2, s3, s4, s5, s6;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 6) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 6;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c29); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 44) {\n s3 = peg$c10;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c11); }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseoptionalFormatPattern();\n if (s6 !== peg$FAILED) {\n while (s6 !== peg$FAILED) {\n s5.push(s6);\n s6 = peg$parseoptionalFormatPattern();\n }\n } else {\n s5 = peg$c2;\n }\n if (s5 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c30(s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseselector() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s2 = peg$c31;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c32); }\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenumber();\n if (s3 !== peg$FAILED) {\n s2 = [s2, s3];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n s1 = input.substring(s0, peg$currPos);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$parsechars();\n }\n\n return s0;\n }\n\n function peg$parseoptionalFormatPattern() {\n var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseselector();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_();\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 123) {\n s4 = peg$c7;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c8); }\n }\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsemessageFormatPattern();\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c12;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c13); }\n }\n if (s8 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c33(s2, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parseoffset() {\n var s0, s1, s2, s3;\n\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 7) === peg$c34) {\n s1 = peg$c34;\n peg$currPos += 7;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c35); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parsenumber();\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c36(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parsepluralStyle() {\n var s0, s1, s2, s3, s4;\n\n s0 = peg$currPos;\n s1 = peg$parseoffset();\n if (s1 === peg$FAILED) {\n s1 = peg$c9;\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseoptionalFormatPattern();\n if (s4 !== peg$FAILED) {\n while (s4 !== peg$FAILED) {\n s3.push(s4);\n s4 = peg$parseoptionalFormatPattern();\n }\n } else {\n s3 = peg$c2;\n }\n if (s3 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c37(s1, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n\n return s0;\n }\n\n function peg$parsews() {\n var s0, s1;\n\n peg$silentFails++;\n s0 = [];\n if (peg$c39.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n if (s1 !== peg$FAILED) {\n while (s1 !== peg$FAILED) {\n s0.push(s1);\n if (peg$c39.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c40); }\n }\n }\n } else {\n s0 = peg$c2;\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c38); }\n }\n\n return s0;\n }\n\n function peg$parse_() {\n var s0, s1, s2;\n\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsews();\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsews();\n }\n if (s1 !== peg$FAILED) {\n s1 = input.substring(s0, peg$currPos);\n }\n s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c41); }\n }\n\n return s0;\n }\n\n function peg$parsedigit() {\n var s0;\n\n if (peg$c42.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c43); }\n }\n\n return s0;\n }\n\n function peg$parsehexDigit() {\n var s0;\n\n if (peg$c44.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c45); }\n }\n\n return s0;\n }\n\n function peg$parsenumber() {\n var s0, s1, s2, s3, s4, s5;\n\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c46;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c47); }\n }\n if (s1 === peg$FAILED) {\n s1 = peg$currPos;\n s2 = peg$currPos;\n if (peg$c48.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c49); }\n }\n if (s3 !== peg$FAILED) {\n s4 = [];\n s5 = peg$parsedigit();\n while (s5 !== peg$FAILED) {\n s4.push(s5);\n s5 = peg$parsedigit();\n }\n if (s4 !== peg$FAILED) {\n s3 = [s3, s4];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$c2;\n }\n if (s2 !== peg$FAILED) {\n s2 = input.substring(s1, peg$currPos);\n }\n s1 = s2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c50(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n function peg$parsechar() {\n var s0, s1, s2, s3, s4, s5, s6, s7;\n\n if (peg$c51.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c52); }\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c53) {\n s1 = peg$c53;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c54); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c55();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c56) {\n s1 = peg$c56;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c57); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c58();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c59) {\n s1 = peg$c59;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c60); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c61();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c62) {\n s1 = peg$c62;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c63); }\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c64();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c65) {\n s1 = peg$c65;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) { peg$fail(peg$c66); }\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = peg$currPos;\n s4 = peg$parsehexDigit();\n if (s4 !== peg$FAILED) {\n s5 = peg$parsehexDigit();\n if (s5 !== peg$FAILED) {\n s6 = peg$parsehexDigit();\n if (s6 !== peg$FAILED) {\n s7 = peg$parsehexDigit();\n if (s7 !== peg$FAILED) {\n s4 = [s4, s5, s6, s7];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$c2;\n }\n if (s3 !== peg$FAILED) {\n s3 = input.substring(s2, peg$currPos);\n }\n s2 = s3;\n if (s2 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c67(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$c2;\n }\n }\n }\n }\n }\n }\n\n return s0;\n }\n\n function peg$parsechars() {\n var s0, s1, s2;\n\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parsechar();\n if (s2 !== peg$FAILED) {\n while (s2 !== peg$FAILED) {\n s1.push(s2);\n s2 = peg$parsechar();\n }\n } else {\n s1 = peg$c2;\n }\n if (s1 !== peg$FAILED) {\n peg$reportedPos = s0;\n s1 = peg$c68(s1);\n }\n s0 = s1;\n\n return s0;\n }\n\n peg$result = peg$startRuleFunction();\n\n if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n return peg$result;\n } else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n peg$fail({ type: \"end\", description: \"end of input\" });\n }\n\n throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);\n }\n }\n\n return {\n SyntaxError: SyntaxError,\n parse: parse\n };\n})();\n\n","IntlMessageFormat.__addLocaleData({\"locale\":\"ca\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1];if(ord)return n==1||n==3?\"one\":n==2?\"two\":n==4?\"few\":\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"ca-AD\",\"parentLocale\":\"ca\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"ca-ES-VALENCIA\",\"parentLocale\":\"ca-ES\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"ca-ES\",\"parentLocale\":\"ca\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"ca-FR\",\"parentLocale\":\"ca\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"ca-IT\",\"parentLocale\":\"ca\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"de\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1];if(ord)return\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"de-AT\",\"parentLocale\":\"de\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"de-BE\",\"parentLocale\":\"de\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"de-CH\",\"parentLocale\":\"de\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"de-LI\",\"parentLocale\":\"de\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"de-LU\",\"parentLocale\":\"de\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"en\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return n10==1&&n100!=11?\"one\":n10==2&&n100!=12?\"two\":n10==3&&n100!=13?\"few\":\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-001\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-150\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-AG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-AI\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-AS\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-AT\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-AU\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BB\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BE\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BI\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BS\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BW\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-BZ\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CA\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CC\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CH\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CK\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CX\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-CY\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-DE\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-DG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-DK\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-DM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-Dsrt\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-ER\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-FI\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-FJ\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-FK\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-FM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GB\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GD\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GH\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GI\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GU\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-GY\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-HK\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-IE\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-IL\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-IM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-IN\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-IO\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-JE\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-JM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-KE\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-KI\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-KN\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-KY\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-LC\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-LR\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-LS\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MH\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MO\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MP\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MS\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MT\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MU\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MW\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-MY\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NA\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NF\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NL\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NR\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NU\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-NZ\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-PG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-PH\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-PK\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-PN\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-PR\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-PW\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-RW\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SB\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SC\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SD\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SE\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SH\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SI\",\"parentLocale\":\"en-150\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SL\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SS\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SX\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-SZ\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-Shaw\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-TC\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-TK\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-TO\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-TT\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-TV\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-TZ\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-UG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-UM\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-US\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-VC\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-VG\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-VI\",\"parentLocale\":\"en\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-VU\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-WS\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-ZA\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-ZM\",\"parentLocale\":\"en-001\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"en-ZW\",\"parentLocale\":\"en-001\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"es\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return n==1?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-419\",\"parentLocale\":\"es\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-AR\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-BO\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-CL\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-CO\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-CR\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-CU\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-DO\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-EA\",\"parentLocale\":\"es\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-EC\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-GQ\",\"parentLocale\":\"es\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-GT\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-HN\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-IC\",\"parentLocale\":\"es\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-MX\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-NI\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-PA\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-PE\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-PH\",\"parentLocale\":\"es\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-PR\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-PY\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-SV\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-US\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-UY\",\"parentLocale\":\"es-419\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"es-VE\",\"parentLocale\":\"es-419\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"fr\",\"pluralRuleFunction\":function (n,ord){if(ord)return n==1?\"one\":\"other\";return n>=0&&n<2?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-BE\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-BF\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-BI\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-BJ\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-BL\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CA\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CD\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CF\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CG\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CH\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CI\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-CM\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-DJ\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-DZ\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-GA\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-GF\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-GN\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-GP\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-GQ\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-HT\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-KM\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-LU\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MA\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MC\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MF\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MG\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-ML\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MQ\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MR\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-MU\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-NC\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-NE\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-PF\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-PM\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-RE\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-RW\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-SC\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-SN\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-SY\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-TD\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-TG\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-TN\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-VU\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-WF\",\"parentLocale\":\"fr\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"fr-YT\",\"parentLocale\":\"fr\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"it\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1];if(ord)return n==11||n==8||n==80||n==800?\"many\":\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"it-CH\",\"parentLocale\":\"it\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"it-SM\",\"parentLocale\":\"it\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"ja\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return\"other\"}});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"nl\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1];if(ord)return\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"nl-AW\",\"parentLocale\":\"nl\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"nl-BE\",\"parentLocale\":\"nl\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"nl-BQ\",\"parentLocale\":\"nl\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"nl-CW\",\"parentLocale\":\"nl\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"nl-SR\",\"parentLocale\":\"nl\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"nl-SX\",\"parentLocale\":\"nl\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"pt\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),t0=Number(s[0])==n;if(ord)return\"other\";return t0&&n>=0&&n<=2&&n!=2?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-AO\",\"parentLocale\":\"pt-PT\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-PT\",\"parentLocale\":\"pt\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1];if(ord)return\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-CV\",\"parentLocale\":\"pt-PT\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-GW\",\"parentLocale\":\"pt-PT\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-MO\",\"parentLocale\":\"pt-PT\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-MZ\",\"parentLocale\":\"pt-PT\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-ST\",\"parentLocale\":\"pt-PT\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"pt-TL\",\"parentLocale\":\"pt-PT\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"sv\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return(n10==1||n10==2)&&n100!=11&&n100!=12?\"one\":\"other\";return n==1&&v0?\"one\":\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"sv-AX\",\"parentLocale\":\"sv\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"sv-FI\",\"parentLocale\":\"sv\"});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"th\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return\"other\"}});\n","IntlMessageFormat.__addLocaleData({\"locale\":\"zh\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hans\",\"parentLocale\":\"zh\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hans-HK\",\"parentLocale\":\"zh-Hans\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hans-MO\",\"parentLocale\":\"zh-Hans\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hans-SG\",\"parentLocale\":\"zh-Hans\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hant\",\"pluralRuleFunction\":function (n,ord){if(ord)return\"other\";return\"other\"}});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hant-HK\",\"parentLocale\":\"zh-Hant\"});\nIntlMessageFormat.__addLocaleData({\"locale\":\"zh-Hant-MO\",\"parentLocale\":\"zh-Hant-HK\"});\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\n\"use strict\";\nexports[\"default\"] = Compiler;\n\nfunction Compiler(locales, formats, pluralFn) {\n this.locales = locales;\n this.formats = formats;\n this.pluralFn = pluralFn;\n}\n\nCompiler.prototype.compile = function (ast) {\n this.pluralStack = [];\n this.currentPlural = null;\n this.pluralNumberFormat = null;\n\n return this.compileMessage(ast);\n};\n\nCompiler.prototype.compileMessage = function (ast) {\n if (!(ast && ast.type === 'messageFormatPattern')) {\n throw new Error('Message AST is not of type: \"messageFormatPattern\"');\n }\n\n var elements = ast.elements,\n pattern = [];\n\n var i, len, element;\n\n for (i = 0, len = elements.length; i < len; i += 1) {\n element = elements[i];\n\n switch (element.type) {\n case 'messageTextElement':\n pattern.push(this.compileMessageText(element));\n break;\n\n case 'argumentElement':\n pattern.push(this.compileArgument(element));\n break;\n\n default:\n throw new Error('Message element does not have a valid type');\n }\n }\n\n return pattern;\n};\n\nCompiler.prototype.compileMessageText = function (element) {\n // When this `element` is part of plural sub-pattern and its value contains\n // an unescaped '#', use a `PluralOffsetString` helper to properly output\n // the number with the correct offset in the string.\n if (this.currentPlural && /(^|[^\\\\])#/g.test(element.value)) {\n // Create a cache a NumberFormat instance that can be reused for any\n // PluralOffsetString instance in this message.\n if (!this.pluralNumberFormat) {\n this.pluralNumberFormat = new Intl.NumberFormat(this.locales);\n }\n\n return new PluralOffsetString(\n this.currentPlural.id,\n this.currentPlural.format.offset,\n this.pluralNumberFormat,\n element.value);\n }\n\n // Unescape the escaped '#'s in the message text.\n return element.value.replace(/\\\\#/g, '#');\n};\n\nCompiler.prototype.compileArgument = function (element) {\n var format = element.format;\n\n if (!format) {\n return new StringFormat(element.id);\n }\n\n var formats = this.formats,\n locales = this.locales,\n pluralFn = this.pluralFn,\n options;\n\n switch (format.type) {\n case 'numberFormat':\n options = formats.number[format.style];\n return {\n id : element.id,\n format: new Intl.NumberFormat(locales, options).format\n };\n\n case 'dateFormat':\n options = formats.date[format.style];\n return {\n id : element.id,\n format: new Intl.DateTimeFormat(locales, options).format\n };\n\n case 'timeFormat':\n options = formats.time[format.style];\n return {\n id : element.id,\n format: new Intl.DateTimeFormat(locales, options).format\n };\n\n case 'pluralFormat':\n options = this.compileOptions(element);\n return new PluralFormat(\n element.id, format.ordinal, format.offset, options, pluralFn\n );\n\n case 'selectFormat':\n options = this.compileOptions(element);\n return new SelectFormat(element.id, options);\n\n default:\n throw new Error('Message element does not have a valid format type');\n }\n};\n\nCompiler.prototype.compileOptions = function (element) {\n var format = element.format,\n options = format.options,\n optionsHash = {};\n\n // Save the current plural element, if any, then set it to a new value when\n // compiling the options sub-patterns. This conforms the spec's algorithm\n // for handling `\"#\"` syntax in message text.\n this.pluralStack.push(this.currentPlural);\n this.currentPlural = format.type === 'pluralFormat' ? element : null;\n\n var i, len, option;\n\n for (i = 0, len = options.length; i < len; i += 1) {\n option = options[i];\n\n // Compile the sub-pattern and save it under the options's selector.\n optionsHash[option.selector] = this.compileMessage(option.value);\n }\n\n // Pop the plural stack to put back the original current plural value.\n this.currentPlural = this.pluralStack.pop();\n\n return optionsHash;\n};\n\n// -- Compiler Helper Classes --------------------------------------------------\n\nfunction StringFormat(id) {\n this.id = id;\n}\n\nStringFormat.prototype.format = function (value) {\n if (!value) {\n return '';\n }\n\n return typeof value === 'string' ? value : String(value);\n};\n\nfunction PluralFormat(id, useOrdinal, offset, options, pluralFn) {\n this.id = id;\n this.useOrdinal = useOrdinal;\n this.offset = offset;\n this.options = options;\n this.pluralFn = pluralFn;\n}\n\nPluralFormat.prototype.getOption = function (value) {\n var options = this.options;\n\n var option = options['=' + value] ||\n options[this.pluralFn(value - this.offset, this.useOrdinal)];\n\n return option || options.other;\n};\n\nfunction PluralOffsetString(id, offset, numberFormat, string) {\n this.id = id;\n this.offset = offset;\n this.numberFormat = numberFormat;\n this.string = string;\n}\n\nPluralOffsetString.prototype.format = function (value) {\n var number = this.numberFormat.format(value - this.offset);\n\n return this.string\n .replace(/(^|[^\\\\])#/g, '$1' + number)\n .replace(/\\\\#/g, '#');\n};\n\nfunction SelectFormat(id, options) {\n this.id = id;\n this.options = options;\n}\n\nSelectFormat.prototype.getOption = function (value) {\n var options = this.options;\n return options[value] || options.other;\n};\n\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\n\"use strict\";\nvar src$utils$$ = require(\"./utils\"), src$es5$$ = require(\"./es5\"), src$compiler$$ = require(\"./compiler\"), intl$messageformat$parser$$ = require(\"intl-messageformat-parser\");\nexports[\"default\"] = MessageFormat;\n\n// -- MessageFormat --------------------------------------------------------\n\nfunction MessageFormat(message, locales, formats) {\n // Parse string messages into an AST.\n var ast = typeof message === 'string' ?\n MessageFormat.__parse(message) : message;\n\n if (!(ast && ast.type === 'messageFormatPattern')) {\n throw new TypeError('A message must be provided as a String or AST.');\n }\n\n // Creates a new object with the specified `formats` merged with the default\n // formats.\n formats = this._mergeFormats(MessageFormat.formats, formats);\n\n // Defined first because it's used to build the format pattern.\n src$es5$$.defineProperty(this, '_locale', {value: this._resolveLocale(locales)});\n\n // Compile the `ast` to a pattern that is highly optimized for repeated\n // `format()` invocations. **Note:** This passes the `locales` set provided\n // to the constructor instead of just the resolved locale.\n var pluralFn = this._findPluralRuleFunction(this._locale);\n var pattern = this._compilePattern(ast, locales, formats, pluralFn);\n\n // \"Bind\" `format()` method to `this` so it can be passed by reference like\n // the other `Intl` APIs.\n var messageFormat = this;\n this.format = function (values) {\n return messageFormat._format(pattern, values);\n };\n}\n\n// Default format options used as the prototype of the `formats` provided to the\n// constructor. These are used when constructing the internal Intl.NumberFormat\n// and Intl.DateTimeFormat instances.\nsrc$es5$$.defineProperty(MessageFormat, 'formats', {\n enumerable: true,\n\n value: {\n number: {\n 'currency': {\n style: 'currency'\n },\n\n 'percent': {\n style: 'percent'\n }\n },\n\n date: {\n 'short': {\n month: 'numeric',\n day : 'numeric',\n year : '2-digit'\n },\n\n 'medium': {\n month: 'short',\n day : 'numeric',\n year : 'numeric'\n },\n\n 'long': {\n month: 'long',\n day : 'numeric',\n year : 'numeric'\n },\n\n 'full': {\n weekday: 'long',\n month : 'long',\n day : 'numeric',\n year : 'numeric'\n }\n },\n\n time: {\n 'short': {\n hour : 'numeric',\n minute: 'numeric'\n },\n\n 'medium': {\n hour : 'numeric',\n minute: 'numeric',\n second: 'numeric'\n },\n\n 'long': {\n hour : 'numeric',\n minute : 'numeric',\n second : 'numeric',\n timeZoneName: 'short'\n },\n\n 'full': {\n hour : 'numeric',\n minute : 'numeric',\n second : 'numeric',\n timeZoneName: 'short'\n }\n }\n }\n});\n\n// Define internal private properties for dealing with locale data.\nsrc$es5$$.defineProperty(MessageFormat, '__localeData__', {value: src$es5$$.objCreate(null)});\nsrc$es5$$.defineProperty(MessageFormat, '__addLocaleData', {value: function (data) {\n if (!(data && data.locale)) {\n throw new Error(\n 'Locale data provided to IntlMessageFormat is missing a ' +\n '`locale` property'\n );\n }\n\n MessageFormat.__localeData__[data.locale.toLowerCase()] = data;\n}});\n\n// Defines `__parse()` static method as an exposed private.\nsrc$es5$$.defineProperty(MessageFormat, '__parse', {value: intl$messageformat$parser$$[\"default\"].parse});\n\n// Define public `defaultLocale` property which defaults to English, but can be\n// set by the developer.\nsrc$es5$$.defineProperty(MessageFormat, 'defaultLocale', {\n enumerable: true,\n writable : true,\n value : undefined\n});\n\nMessageFormat.prototype.resolvedOptions = function () {\n // TODO: Provide anything else?\n return {\n locale: this._locale\n };\n};\n\nMessageFormat.prototype._compilePattern = function (ast, locales, formats, pluralFn) {\n var compiler = new src$compiler$$[\"default\"](locales, formats, pluralFn);\n return compiler.compile(ast);\n};\n\nMessageFormat.prototype._findPluralRuleFunction = function (locale) {\n var localeData = MessageFormat.__localeData__;\n var data = localeData[locale.toLowerCase()];\n\n // The locale data is de-duplicated, so we have to traverse the locale's\n // hierarchy until we find a `pluralRuleFunction` to return.\n while (data) {\n if (data.pluralRuleFunction) {\n return data.pluralRuleFunction;\n }\n\n data = data.parentLocale && localeData[data.parentLocale.toLowerCase()];\n }\n\n throw new Error(\n 'Locale data added to IntlMessageFormat is missing a ' +\n '`pluralRuleFunction` for :' + locale\n );\n};\n\nMessageFormat.prototype._format = function (pattern, values) {\n var result = '',\n i, len, part, id, value;\n\n for (i = 0, len = pattern.length; i < len; i += 1) {\n part = pattern[i];\n\n // Exist early for string parts.\n if (typeof part === 'string') {\n result += part;\n continue;\n }\n\n id = part.id;\n\n // Enforce that all required values are provided by the caller.\n if (!(values && src$utils$$.hop.call(values, id))) {\n throw new Error('A value must be provided for: ' + id);\n }\n\n value = values[id];\n\n // Recursively format plural and select parts' option — which can be a\n // nested pattern structure. The choosing of the option to use is\n // abstracted-by and delegated-to the part helper object.\n if (part.options) {\n result += this._format(part.getOption(value), values);\n } else {\n result += part.format(value);\n }\n }\n\n return result;\n};\n\nMessageFormat.prototype._mergeFormats = function (defaults, formats) {\n var mergedFormats = {},\n type, mergedType;\n\n for (type in defaults) {\n if (!src$utils$$.hop.call(defaults, type)) { continue; }\n\n mergedFormats[type] = mergedType = src$es5$$.objCreate(defaults[type]);\n\n if (formats && src$utils$$.hop.call(formats, type)) {\n src$utils$$.extend(mergedType, formats[type]);\n }\n }\n\n return mergedFormats;\n};\n\nMessageFormat.prototype._resolveLocale = function (locales) {\n if (typeof locales === 'string') {\n locales = [locales];\n }\n\n // Create a copy of the array so we can push on the default locale.\n locales = (locales || []).concat(MessageFormat.defaultLocale);\n\n var localeData = MessageFormat.__localeData__;\n var i, len, localeParts, data;\n\n // Using the set of locales + the default locale, we look for the first one\n // which that has been registered. When data does not exist for a locale, we\n // traverse its ancestors to find something that's been registered within\n // its hierarchy of locales. Since we lack the proper `parentLocale` data\n // here, we must take a naive approach to traversal.\n for (i = 0, len = locales.length; i < len; i += 1) {\n localeParts = locales[i].toLowerCase().split('-');\n\n while (localeParts.length) {\n data = localeData[localeParts.join('-')];\n if (data) {\n // Return the normalized locale string; e.g., we return \"en-US\",\n // instead of \"en-us\".\n return data.locale;\n }\n\n localeParts.pop();\n }\n }\n\n var defaultLocale = locales.pop();\n throw new Error(\n 'No locale data has been added to IntlMessageFormat for: ' +\n locales.join(', ') + ', or the default locale: ' + defaultLocale\n );\n};\n\n","// GENERATED FILE\n\"use strict\";\nexports[\"default\"] = {\"locale\":\"en\",\"pluralRuleFunction\":function (n,ord){var s=String(n).split(\".\"),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return n10==1&&n100!=11?\"one\":n10==2&&n100!=12?\"two\":n10==3&&n100!=13?\"few\":\"other\";return n==1&&v0?\"one\":\"other\"}};\n\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\n\"use strict\";\nvar src$utils$$ = require(\"./utils\");\n\n// Purposely using the same implementation as the Intl.js `Intl` polyfill.\n// Copyright 2013 Andy Earnshaw, MIT License\n\nvar realDefineProp = (function () {\n try { return !!Object.defineProperty({}, 'a', {}); }\n catch (e) { return false; }\n})();\n\nvar es3 = !realDefineProp && !Object.prototype.__defineGetter__;\n\nvar defineProperty = realDefineProp ? Object.defineProperty :\n function (obj, name, desc) {\n\n if ('get' in desc && obj.__defineGetter__) {\n obj.__defineGetter__(name, desc.get);\n } else if (!src$utils$$.hop.call(obj, name) || 'value' in desc) {\n obj[name] = desc.value;\n }\n};\n\nvar objCreate = Object.create || function (proto, props) {\n var obj, k;\n\n function F() {}\n F.prototype = proto;\n obj = new F();\n\n for (k in props) {\n if (src$utils$$.hop.call(props, k)) {\n defineProperty(obj, k, props[k]);\n }\n }\n\n return obj;\n};\nexports.defineProperty = defineProperty, exports.objCreate = objCreate;\n\n","/* jslint esnext: true */\n\n\"use strict\";\nvar src$core$$ = require(\"./core\"), src$en$$ = require(\"./en\");\n\nsrc$core$$[\"default\"].__addLocaleData(src$en$$[\"default\"]);\nsrc$core$$[\"default\"].defaultLocale = 'en';\n\nexports[\"default\"] = src$core$$[\"default\"];\n\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\n\"use strict\";\nexports.extend = extend;\nvar hop = Object.prototype.hasOwnProperty;\n\nfunction extend(obj) {\n var sources = Array.prototype.slice.call(arguments, 1),\n i, len, source, key;\n\n for (i = 0, len = sources.length; i < len; i += 1) {\n source = sources[i];\n if (!source) { continue; }\n\n for (key in source) {\n if (hop.call(source, key)) {\n obj[key] = source[key];\n }\n }\n }\n\n return obj;\n}\nexports.hop = hop;\n\n","// Expose `IntlPolyfill` as global to add locale data into runtime later on.\nglobal.IntlPolyfill = require('./lib/core.js');\n\n// Require all locale data for `Intl`. This module will be\n// ignored when bundling for the browser with Browserify/Webpack.\nrequire('./locale-data/complete.js');\n\n// hack to export the polyfill as global Intl if needed\nif (!global.Intl) {\n global.Intl = global.IntlPolyfill;\n global.IntlPolyfill.__applyLocaleSensitivePrototypes();\n}\n\n// providing an idiomatic api for the nodejs version of this module\nmodule.exports = global.IntlPolyfill;\n","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n};\n\nvar jsx = function () {\n var REACT_ELEMENT_TYPE = typeof Symbol === \"function\" && Symbol.for && Symbol.for(\"react.element\") || 0xeac7;\n return function createRawReactElement(type, props, key, children) {\n var defaultProps = type && type.defaultProps;\n var childrenLength = arguments.length - 3;\n\n if (!props && childrenLength !== 0) {\n props = {};\n }\n\n if (props && defaultProps) {\n for (var propName in defaultProps) {\n if (props[propName] === void 0) {\n props[propName] = defaultProps[propName];\n }\n }\n } else if (!props) {\n props = defaultProps || {};\n }\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 3];\n }\n\n props.children = childArray;\n }\n\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key === undefined ? null : '' + key,\n ref: null,\n props: props,\n _owner: null\n };\n };\n}();\n\nvar asyncToGenerator = function (fn) {\n return function () {\n var gen = fn.apply(this, arguments);\n return new Promise(function (resolve, reject) {\n function step(key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n return Promise.resolve(value).then(function (value) {\n return step(\"next\", value);\n }, function (err) {\n return step(\"throw\", err);\n });\n }\n }\n\n return step(\"next\");\n });\n };\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar defineEnumerableProperties = function (obj, descs) {\n for (var key in descs) {\n var desc = descs[key];\n desc.configurable = desc.enumerable = true;\n if (\"value\" in desc) desc.writable = true;\n Object.defineProperty(obj, key, desc);\n }\n\n return obj;\n};\n\nvar defaults = function (obj, defaults) {\n var keys = Object.getOwnPropertyNames(defaults);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = Object.getOwnPropertyDescriptor(defaults, key);\n\n if (value && value.configurable && obj[key] === undefined) {\n Object.defineProperty(obj, key, value);\n }\n }\n\n return obj;\n};\n\nvar defineProperty$1 = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar _instanceof = function (left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n};\n\nvar interopRequireDefault = function (obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n};\n\nvar interopRequireWildcard = function (obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n return newObj;\n }\n};\n\nvar newArrowCheck = function (innerThis, boundThis) {\n if (innerThis !== boundThis) {\n throw new TypeError(\"Cannot instantiate an arrow function\");\n }\n};\n\nvar objectDestructuringEmpty = function (obj) {\n if (obj == null) throw new TypeError(\"Cannot destructure undefined\");\n};\n\nvar objectWithoutProperties = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar selfGlobal = typeof global === \"undefined\" ? self : global;\n\nvar set = function set(object, property, value, receiver) {\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent !== null) {\n set(parent, property, value, receiver);\n }\n } else if (\"value\" in desc && desc.writable) {\n desc.value = value;\n } else {\n var setter = desc.set;\n\n if (setter !== undefined) {\n setter.call(receiver, value);\n }\n }\n\n return value;\n};\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\nvar slicedToArrayLoose = function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n var _arr = [];\n\n for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {\n _arr.push(_step.value);\n\n if (i && _arr.length === i) break;\n }\n\n return _arr;\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n};\n\nvar taggedTemplateLiteral = function (strings, raw) {\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n};\n\nvar taggedTemplateLiteralLoose = function (strings, raw) {\n strings.raw = raw;\n return strings;\n};\n\nvar temporalRef = function (val, name, undef) {\n if (val === undef) {\n throw new ReferenceError(name + \" is not defined - temporal dead zone\");\n } else {\n return val;\n }\n};\n\nvar temporalUndefined = {};\n\nvar toArray = function (arr) {\n return Array.isArray(arr) ? arr : Array.from(arr);\n};\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\n\n\nvar babelHelpers$1 = Object.freeze({\n jsx: jsx,\n asyncToGenerator: asyncToGenerator,\n classCallCheck: classCallCheck,\n createClass: createClass,\n defineEnumerableProperties: defineEnumerableProperties,\n defaults: defaults,\n defineProperty: defineProperty$1,\n get: get,\n inherits: inherits,\n interopRequireDefault: interopRequireDefault,\n interopRequireWildcard: interopRequireWildcard,\n newArrowCheck: newArrowCheck,\n objectDestructuringEmpty: objectDestructuringEmpty,\n objectWithoutProperties: objectWithoutProperties,\n possibleConstructorReturn: possibleConstructorReturn,\n selfGlobal: selfGlobal,\n set: set,\n slicedToArray: slicedToArray,\n slicedToArrayLoose: slicedToArrayLoose,\n taggedTemplateLiteral: taggedTemplateLiteral,\n taggedTemplateLiteralLoose: taggedTemplateLiteralLoose,\n temporalRef: temporalRef,\n temporalUndefined: temporalUndefined,\n toArray: toArray,\n toConsumableArray: toConsumableArray,\n typeof: _typeof,\n extends: _extends,\n instanceof: _instanceof\n});\n\nvar realDefineProp = function () {\n var sentinel = function sentinel() {};\n try {\n Object.defineProperty(sentinel, 'a', {\n get: function get() {\n return 1;\n }\n });\n Object.defineProperty(sentinel, 'prototype', { writable: false });\n return sentinel.a === 1 && sentinel.prototype instanceof Object;\n } catch (e) {\n return false;\n }\n}();\n\n// Need a workaround for getters in ES3\nvar es3 = !realDefineProp && !Object.prototype.__defineGetter__;\n\n// We use this a lot (and need it for proto-less objects)\nvar hop = Object.prototype.hasOwnProperty;\n\n// Naive defineProperty for compatibility\nvar defineProperty = realDefineProp ? Object.defineProperty : function (obj, name, desc) {\n if ('get' in desc && obj.__defineGetter__) obj.__defineGetter__(name, desc.get);else if (!hop.call(obj, name) || 'value' in desc) obj[name] = desc.value;\n};\n\n// Array.prototype.indexOf, as good as we need it to be\nvar arrIndexOf = Array.prototype.indexOf || function (search) {\n /*jshint validthis:true */\n var t = this;\n if (!t.length) return -1;\n\n for (var i = arguments[1] || 0, max = t.length; i < max; i++) {\n if (t[i] === search) return i;\n }\n\n return -1;\n};\n\n// Create an object with the specified prototype (2nd arg required for Record)\nvar objCreate = Object.create || function (proto, props) {\n var obj = void 0;\n\n function F() {}\n F.prototype = proto;\n obj = new F();\n\n for (var k in props) {\n if (hop.call(props, k)) defineProperty(obj, k, props[k]);\n }\n\n return obj;\n};\n\n// Snapshot some (hopefully still) native built-ins\nvar arrSlice = Array.prototype.slice;\nvar arrConcat = Array.prototype.concat;\nvar arrPush = Array.prototype.push;\nvar arrJoin = Array.prototype.join;\nvar arrShift = Array.prototype.shift;\n\n// Naive Function.prototype.bind for compatibility\nvar fnBind = Function.prototype.bind || function (thisObj) {\n var fn = this,\n args = arrSlice.call(arguments, 1);\n\n // All our (presently) bound functions have either 1 or 0 arguments. By returning\n // different function signatures, we can pass some tests in ES3 environments\n if (fn.length === 1) {\n return function () {\n return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));\n };\n }\n return function () {\n return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));\n };\n};\n\n// Object housing internal properties for constructors\nvar internals = objCreate(null);\n\n// Keep internal properties internal\nvar secret = Math.random();\n\n// Helper functions\n// ================\n\n/**\n * A function to deal with the inaccuracy of calculating log10 in pre-ES6\n * JavaScript environments. Math.log(num) / Math.LN10 was responsible for\n * causing issue #62.\n */\nfunction log10Floor(n) {\n // ES6 provides the more accurate Math.log10\n if (typeof Math.log10 === 'function') return Math.floor(Math.log10(n));\n\n var x = Math.round(Math.log(n) * Math.LOG10E);\n return x - (Number('1e' + x) > n);\n}\n\n/**\n * A map that doesn't contain Object in its prototype chain\n */\nfunction Record(obj) {\n // Copy only own properties over unless this object is already a Record instance\n for (var k in obj) {\n if (obj instanceof Record || hop.call(obj, k)) defineProperty(this, k, { value: obj[k], enumerable: true, writable: true, configurable: true });\n }\n}\nRecord.prototype = objCreate(null);\n\n/**\n * An ordered list\n */\nfunction List() {\n defineProperty(this, 'length', { writable: true, value: 0 });\n\n if (arguments.length) arrPush.apply(this, arrSlice.call(arguments));\n}\nList.prototype = objCreate(null);\n\n/**\n * Constructs a regular expression to restore tainted RegExp properties\n */\nfunction createRegExpRestore() {\n if (internals.disableRegExpRestore) {\n return function () {/* no-op */};\n }\n\n var regExpCache = {\n lastMatch: RegExp.lastMatch || '',\n leftContext: RegExp.leftContext,\n multiline: RegExp.multiline,\n input: RegExp.input\n },\n has = false;\n\n // Create a snapshot of all the 'captured' properties\n for (var i = 1; i <= 9; i++) {\n has = (regExpCache['$' + i] = RegExp['$' + i]) || has;\n }return function () {\n // Now we've snapshotted some properties, escape the lastMatch string\n var esc = /[.?*+^$[\\]\\\\(){}|-]/g,\n lm = regExpCache.lastMatch.replace(esc, '\\\\$&'),\n reg = new List();\n\n // If any of the captured strings were non-empty, iterate over them all\n if (has) {\n for (var _i = 1; _i <= 9; _i++) {\n var m = regExpCache['$' + _i];\n\n // If it's empty, add an empty capturing group\n if (!m) lm = '()' + lm;\n\n // Else find the string in lm and escape & wrap it to capture it\n else {\n m = m.replace(esc, '\\\\$&');\n lm = lm.replace(m, '(' + m + ')');\n }\n\n // Push it to the reg and chop lm to make sure further groups come after\n arrPush.call(reg, lm.slice(0, lm.indexOf('(') + 1));\n lm = lm.slice(lm.indexOf('(') + 1);\n }\n }\n\n var exprStr = arrJoin.call(reg, '') + lm;\n\n // Shorten the regex by replacing each part of the expression with a match\n // for a string of that exact length. This is safe for the type of\n // expressions generated above, because the expression matches the whole\n // match string, so we know each group and each segment between capturing\n // groups can be matched by its length alone.\n exprStr = exprStr.replace(/(\\\\\\(|\\\\\\)|[^()])+/g, function (match) {\n return '[\\\\s\\\\S]{' + match.replace('\\\\', '').length + '}';\n });\n\n // Create the regular expression that will reconstruct the RegExp properties\n var expr = new RegExp(exprStr, regExpCache.multiline ? 'gm' : 'g');\n\n // Set the lastIndex of the generated expression to ensure that the match\n // is found in the correct index.\n expr.lastIndex = regExpCache.leftContext.length;\n\n expr.exec(regExpCache.input);\n };\n}\n\n/**\n * Mimics ES5's abstract ToObject() function\n */\nfunction toObject(arg) {\n if (arg === null) throw new TypeError('Cannot convert null or undefined to object');\n\n if ((typeof arg === 'undefined' ? 'undefined' : babelHelpers$1['typeof'](arg)) === 'object') return arg;\n return Object(arg);\n}\n\nfunction toNumber(arg) {\n if (typeof arg === 'number') return arg;\n return Number(arg);\n}\n\nfunction toInteger(arg) {\n var number = toNumber(arg);\n if (isNaN(number)) return 0;\n if (number === +0 || number === -0 || number === +Infinity || number === -Infinity) return number;\n if (number < 0) return Math.floor(Math.abs(number)) * -1;\n return Math.floor(Math.abs(number));\n}\n\nfunction toLength(arg) {\n var len = toInteger(arg);\n if (len <= 0) return 0;\n if (len === Infinity) return Math.pow(2, 53) - 1;\n return Math.min(len, Math.pow(2, 53) - 1);\n}\n\n/**\n * Returns \"internal\" properties for an object\n */\nfunction getInternalProperties(obj) {\n if (hop.call(obj, '__getInternalProperties')) return obj.__getInternalProperties(secret);\n\n return objCreate(null);\n}\n\n/**\n* Defines regular expressions for various operations related to the BCP 47 syntax,\n* as defined at http://tools.ietf.org/html/bcp47#section-2.1\n*/\n\n// extlang = 3ALPHA ; selected ISO 639 codes\n// *2(\"-\" 3ALPHA) ; permanently reserved\nvar extlang = '[a-z]{3}(?:-[a-z]{3}){0,2}';\n\n// language = 2*3ALPHA ; shortest ISO 639 code\n// [\"-\" extlang] ; sometimes followed by\n// ; extended language subtags\n// / 4ALPHA ; or reserved for future use\n// / 5*8ALPHA ; or registered language subtag\nvar language = '(?:[a-z]{2,3}(?:-' + extlang + ')?|[a-z]{4}|[a-z]{5,8})';\n\n// script = 4ALPHA ; ISO 15924 code\nvar script = '[a-z]{4}';\n\n// region = 2ALPHA ; ISO 3166-1 code\n// / 3DIGIT ; UN M.49 code\nvar region = '(?:[a-z]{2}|\\\\d{3})';\n\n// variant = 5*8alphanum ; registered variants\n// / (DIGIT 3alphanum)\nvar variant = '(?:[a-z0-9]{5,8}|\\\\d[a-z0-9]{3})';\n\n// ; Single alphanumerics\n// ; \"x\" reserved for private use\n// singleton = DIGIT ; 0 - 9\n// / %x41-57 ; A - W\n// / %x59-5A ; Y - Z\n// / %x61-77 ; a - w\n// / %x79-7A ; y - z\nvar singleton = '[0-9a-wy-z]';\n\n// extension = singleton 1*(\"-\" (2*8alphanum))\nvar extension = singleton + '(?:-[a-z0-9]{2,8})+';\n\n// privateuse = \"x\" 1*(\"-\" (1*8alphanum))\nvar privateuse = 'x(?:-[a-z0-9]{1,8})+';\n\n// irregular = \"en-GB-oed\" ; irregular tags do not match\n// / \"i-ami\" ; the 'langtag' production and\n// / \"i-bnn\" ; would not otherwise be\n// / \"i-default\" ; considered 'well-formed'\n// / \"i-enochian\" ; These tags are all valid,\n// / \"i-hak\" ; but most are deprecated\n// / \"i-klingon\" ; in favor of more modern\n// / \"i-lux\" ; subtags or subtag\n// / \"i-mingo\" ; combination\n// / \"i-navajo\"\n// / \"i-pwn\"\n// / \"i-tao\"\n// / \"i-tay\"\n// / \"i-tsu\"\n// / \"sgn-BE-FR\"\n// / \"sgn-BE-NL\"\n// / \"sgn-CH-DE\"\nvar irregular = '(?:en-GB-oed' + '|i-(?:ami|bnn|default|enochian|hak|klingon|lux|mingo|navajo|pwn|tao|tay|tsu)' + '|sgn-(?:BE-FR|BE-NL|CH-DE))';\n\n// regular = \"art-lojban\" ; these tags match the 'langtag'\n// / \"cel-gaulish\" ; production, but their subtags\n// / \"no-bok\" ; are not extended language\n// / \"no-nyn\" ; or variant subtags: their meaning\n// / \"zh-guoyu\" ; is defined by their registration\n// / \"zh-hakka\" ; and all of these are deprecated\n// / \"zh-min\" ; in favor of a more modern\n// / \"zh-min-nan\" ; subtag or sequence of subtags\n// / \"zh-xiang\"\nvar regular = '(?:art-lojban|cel-gaulish|no-bok|no-nyn' + '|zh-(?:guoyu|hakka|min|min-nan|xiang))';\n\n// grandfathered = irregular ; non-redundant tags registered\n// / regular ; during the RFC 3066 era\nvar grandfathered = '(?:' + irregular + '|' + regular + ')';\n\n// langtag = language\n// [\"-\" script]\n// [\"-\" region]\n// *(\"-\" variant)\n// *(\"-\" extension)\n// [\"-\" privateuse]\nvar langtag = language + '(?:-' + script + ')?(?:-' + region + ')?(?:-' + variant + ')*(?:-' + extension + ')*(?:-' + privateuse + ')?';\n\n// Language-Tag = langtag ; normal language tags\n// / privateuse ; private use tag\n// / grandfathered ; grandfathered tags\nvar expBCP47Syntax = RegExp('^(?:' + langtag + '|' + privateuse + '|' + grandfathered + ')$', 'i');\n\n// Match duplicate variants in a language tag\nvar expVariantDupes = RegExp('^(?!x).*?-(' + variant + ')-(?:\\\\w{4,8}-(?!x-))*\\\\1\\\\b', 'i');\n\n// Match duplicate singletons in a language tag (except in private use)\nvar expSingletonDupes = RegExp('^(?!x).*?-(' + singleton + ')-(?:\\\\w+-(?!x-))*\\\\1\\\\b', 'i');\n\n// Match all extension sequences\nvar expExtSequences = RegExp('-' + extension, 'ig');\n\n// Default locale is the first-added locale data for us\nvar defaultLocale = void 0;\nfunction setDefaultLocale(locale) {\n defaultLocale = locale;\n}\n\n// IANA Subtag Registry redundant tag and subtag maps\nvar redundantTags = {\n tags: {\n \"art-lojban\": \"jbo\",\n \"i-ami\": \"ami\",\n \"i-bnn\": \"bnn\",\n \"i-hak\": \"hak\",\n \"i-klingon\": \"tlh\",\n \"i-lux\": \"lb\",\n \"i-navajo\": \"nv\",\n \"i-pwn\": \"pwn\",\n \"i-tao\": \"tao\",\n \"i-tay\": \"tay\",\n \"i-tsu\": \"tsu\",\n \"no-bok\": \"nb\",\n \"no-nyn\": \"nn\",\n \"sgn-BE-FR\": \"sfb\",\n \"sgn-BE-NL\": \"vgt\",\n \"sgn-CH-DE\": \"sgg\",\n \"zh-guoyu\": \"cmn\",\n \"zh-hakka\": \"hak\",\n \"zh-min-nan\": \"nan\",\n \"zh-xiang\": \"hsn\",\n \"sgn-BR\": \"bzs\",\n \"sgn-CO\": \"csn\",\n \"sgn-DE\": \"gsg\",\n \"sgn-DK\": \"dsl\",\n \"sgn-ES\": \"ssp\",\n \"sgn-FR\": \"fsl\",\n \"sgn-GB\": \"bfi\",\n \"sgn-GR\": \"gss\",\n \"sgn-IE\": \"isg\",\n \"sgn-IT\": \"ise\",\n \"sgn-JP\": \"jsl\",\n \"sgn-MX\": \"mfs\",\n \"sgn-NI\": \"ncs\",\n \"sgn-NL\": \"dse\",\n \"sgn-NO\": \"nsl\",\n \"sgn-PT\": \"psr\",\n \"sgn-SE\": \"swl\",\n \"sgn-US\": \"ase\",\n \"sgn-ZA\": \"sfs\",\n \"zh-cmn\": \"cmn\",\n \"zh-cmn-Hans\": \"cmn-Hans\",\n \"zh-cmn-Hant\": \"cmn-Hant\",\n \"zh-gan\": \"gan\",\n \"zh-wuu\": \"wuu\",\n \"zh-yue\": \"yue\"\n },\n subtags: {\n BU: \"MM\",\n DD: \"DE\",\n FX: \"FR\",\n TP: \"TL\",\n YD: \"YE\",\n ZR: \"CD\",\n heploc: \"alalc97\",\n 'in': \"id\",\n iw: \"he\",\n ji: \"yi\",\n jw: \"jv\",\n mo: \"ro\",\n ayx: \"nun\",\n bjd: \"drl\",\n ccq: \"rki\",\n cjr: \"mom\",\n cka: \"cmr\",\n cmk: \"xch\",\n drh: \"khk\",\n drw: \"prs\",\n gav: \"dev\",\n hrr: \"jal\",\n ibi: \"opa\",\n kgh: \"kml\",\n lcq: \"ppr\",\n mst: \"mry\",\n myt: \"mry\",\n sca: \"hle\",\n tie: \"ras\",\n tkk: \"twm\",\n tlw: \"weo\",\n tnf: \"prs\",\n ybd: \"rki\",\n yma: \"lrr\"\n },\n extLang: {\n aao: [\"aao\", \"ar\"],\n abh: [\"abh\", \"ar\"],\n abv: [\"abv\", \"ar\"],\n acm: [\"acm\", \"ar\"],\n acq: [\"acq\", \"ar\"],\n acw: [\"acw\", \"ar\"],\n acx: [\"acx\", \"ar\"],\n acy: [\"acy\", \"ar\"],\n adf: [\"adf\", \"ar\"],\n ads: [\"ads\", \"sgn\"],\n aeb: [\"aeb\", \"ar\"],\n aec: [\"aec\", \"ar\"],\n aed: [\"aed\", \"sgn\"],\n aen: [\"aen\", \"sgn\"],\n afb: [\"afb\", \"ar\"],\n afg: [\"afg\", \"sgn\"],\n ajp: [\"ajp\", \"ar\"],\n apc: [\"apc\", \"ar\"],\n apd: [\"apd\", \"ar\"],\n arb: [\"arb\", \"ar\"],\n arq: [\"arq\", \"ar\"],\n ars: [\"ars\", \"ar\"],\n ary: [\"ary\", \"ar\"],\n arz: [\"arz\", \"ar\"],\n ase: [\"ase\", \"sgn\"],\n asf: [\"asf\", \"sgn\"],\n asp: [\"asp\", \"sgn\"],\n asq: [\"asq\", \"sgn\"],\n asw: [\"asw\", \"sgn\"],\n auz: [\"auz\", \"ar\"],\n avl: [\"avl\", \"ar\"],\n ayh: [\"ayh\", \"ar\"],\n ayl: [\"ayl\", \"ar\"],\n ayn: [\"ayn\", \"ar\"],\n ayp: [\"ayp\", \"ar\"],\n bbz: [\"bbz\", \"ar\"],\n bfi: [\"bfi\", \"sgn\"],\n bfk: [\"bfk\", \"sgn\"],\n bjn: [\"bjn\", \"ms\"],\n bog: [\"bog\", \"sgn\"],\n bqn: [\"bqn\", \"sgn\"],\n bqy: [\"bqy\", \"sgn\"],\n btj: [\"btj\", \"ms\"],\n bve: [\"bve\", \"ms\"],\n bvl: [\"bvl\", \"sgn\"],\n bvu: [\"bvu\", \"ms\"],\n bzs: [\"bzs\", \"sgn\"],\n cdo: [\"cdo\", \"zh\"],\n cds: [\"cds\", \"sgn\"],\n cjy: [\"cjy\", \"zh\"],\n cmn: [\"cmn\", \"zh\"],\n coa: [\"coa\", \"ms\"],\n cpx: [\"cpx\", \"zh\"],\n csc: [\"csc\", \"sgn\"],\n csd: [\"csd\", \"sgn\"],\n cse: [\"cse\", \"sgn\"],\n csf: [\"csf\", \"sgn\"],\n csg: [\"csg\", \"sgn\"],\n csl: [\"csl\", \"sgn\"],\n csn: [\"csn\", \"sgn\"],\n csq: [\"csq\", \"sgn\"],\n csr: [\"csr\", \"sgn\"],\n czh: [\"czh\", \"zh\"],\n czo: [\"czo\", \"zh\"],\n doq: [\"doq\", \"sgn\"],\n dse: [\"dse\", \"sgn\"],\n dsl: [\"dsl\", \"sgn\"],\n dup: [\"dup\", \"ms\"],\n ecs: [\"ecs\", \"sgn\"],\n esl: [\"esl\", \"sgn\"],\n esn: [\"esn\", \"sgn\"],\n eso: [\"eso\", \"sgn\"],\n eth: [\"eth\", \"sgn\"],\n fcs: [\"fcs\", \"sgn\"],\n fse: [\"fse\", \"sgn\"],\n fsl: [\"fsl\", \"sgn\"],\n fss: [\"fss\", \"sgn\"],\n gan: [\"gan\", \"zh\"],\n gds: [\"gds\", \"sgn\"],\n gom: [\"gom\", \"kok\"],\n gse: [\"gse\", \"sgn\"],\n gsg: [\"gsg\", \"sgn\"],\n gsm: [\"gsm\", \"sgn\"],\n gss: [\"gss\", \"sgn\"],\n gus: [\"gus\", \"sgn\"],\n hab: [\"hab\", \"sgn\"],\n haf: [\"haf\", \"sgn\"],\n hak: [\"hak\", \"zh\"],\n hds: [\"hds\", \"sgn\"],\n hji: [\"hji\", \"ms\"],\n hks: [\"hks\", \"sgn\"],\n hos: [\"hos\", \"sgn\"],\n hps: [\"hps\", \"sgn\"],\n hsh: [\"hsh\", \"sgn\"],\n hsl: [\"hsl\", \"sgn\"],\n hsn: [\"hsn\", \"zh\"],\n icl: [\"icl\", \"sgn\"],\n ils: [\"ils\", \"sgn\"],\n inl: [\"inl\", \"sgn\"],\n ins: [\"ins\", \"sgn\"],\n ise: [\"ise\", \"sgn\"],\n isg: [\"isg\", \"sgn\"],\n isr: [\"isr\", \"sgn\"],\n jak: [\"jak\", \"ms\"],\n jax: [\"jax\", \"ms\"],\n jcs: [\"jcs\", \"sgn\"],\n jhs: [\"jhs\", \"sgn\"],\n jls: [\"jls\", \"sgn\"],\n jos: [\"jos\", \"sgn\"],\n jsl: [\"jsl\", \"sgn\"],\n jus: [\"jus\", \"sgn\"],\n kgi: [\"kgi\", \"sgn\"],\n knn: [\"knn\", \"kok\"],\n kvb: [\"kvb\", \"ms\"],\n kvk: [\"kvk\", \"sgn\"],\n kvr: [\"kvr\", \"ms\"],\n kxd: [\"kxd\", \"ms\"],\n lbs: [\"lbs\", \"sgn\"],\n lce: [\"lce\", \"ms\"],\n lcf: [\"lcf\", \"ms\"],\n liw: [\"liw\", \"ms\"],\n lls: [\"lls\", \"sgn\"],\n lsg: [\"lsg\", \"sgn\"],\n lsl: [\"lsl\", \"sgn\"],\n lso: [\"lso\", \"sgn\"],\n lsp: [\"lsp\", \"sgn\"],\n lst: [\"lst\", \"sgn\"],\n lsy: [\"lsy\", \"sgn\"],\n ltg: [\"ltg\", \"lv\"],\n lvs: [\"lvs\", \"lv\"],\n lzh: [\"lzh\", \"zh\"],\n max: [\"max\", \"ms\"],\n mdl: [\"mdl\", \"sgn\"],\n meo: [\"meo\", \"ms\"],\n mfa: [\"mfa\", \"ms\"],\n mfb: [\"mfb\", \"ms\"],\n mfs: [\"mfs\", \"sgn\"],\n min: [\"min\", \"ms\"],\n mnp: [\"mnp\", \"zh\"],\n mqg: [\"mqg\", \"ms\"],\n mre: [\"mre\", \"sgn\"],\n msd: [\"msd\", \"sgn\"],\n msi: [\"msi\", \"ms\"],\n msr: [\"msr\", \"sgn\"],\n mui: [\"mui\", \"ms\"],\n mzc: [\"mzc\", \"sgn\"],\n mzg: [\"mzg\", \"sgn\"],\n mzy: [\"mzy\", \"sgn\"],\n nan: [\"nan\", \"zh\"],\n nbs: [\"nbs\", \"sgn\"],\n ncs: [\"ncs\", \"sgn\"],\n nsi: [\"nsi\", \"sgn\"],\n nsl: [\"nsl\", \"sgn\"],\n nsp: [\"nsp\", \"sgn\"],\n nsr: [\"nsr\", \"sgn\"],\n nzs: [\"nzs\", \"sgn\"],\n okl: [\"okl\", \"sgn\"],\n orn: [\"orn\", \"ms\"],\n ors: [\"ors\", \"ms\"],\n pel: [\"pel\", \"ms\"],\n pga: [\"pga\", \"ar\"],\n pks: [\"pks\", \"sgn\"],\n prl: [\"prl\", \"sgn\"],\n prz: [\"prz\", \"sgn\"],\n psc: [\"psc\", \"sgn\"],\n psd: [\"psd\", \"sgn\"],\n pse: [\"pse\", \"ms\"],\n psg: [\"psg\", \"sgn\"],\n psl: [\"psl\", \"sgn\"],\n pso: [\"pso\", \"sgn\"],\n psp: [\"psp\", \"sgn\"],\n psr: [\"psr\", \"sgn\"],\n pys: [\"pys\", \"sgn\"],\n rms: [\"rms\", \"sgn\"],\n rsi: [\"rsi\", \"sgn\"],\n rsl: [\"rsl\", \"sgn\"],\n sdl: [\"sdl\", \"sgn\"],\n sfb: [\"sfb\", \"sgn\"],\n sfs: [\"sfs\", \"sgn\"],\n sgg: [\"sgg\", \"sgn\"],\n sgx: [\"sgx\", \"sgn\"],\n shu: [\"shu\", \"ar\"],\n slf: [\"slf\", \"sgn\"],\n sls: [\"sls\", \"sgn\"],\n sqk: [\"sqk\", \"sgn\"],\n sqs: [\"sqs\", \"sgn\"],\n ssh: [\"ssh\", \"ar\"],\n ssp: [\"ssp\", \"sgn\"],\n ssr: [\"ssr\", \"sgn\"],\n svk: [\"svk\", \"sgn\"],\n swc: [\"swc\", \"sw\"],\n swh: [\"swh\", \"sw\"],\n swl: [\"swl\", \"sgn\"],\n syy: [\"syy\", \"sgn\"],\n tmw: [\"tmw\", \"ms\"],\n tse: [\"tse\", \"sgn\"],\n tsm: [\"tsm\", \"sgn\"],\n tsq: [\"tsq\", \"sgn\"],\n tss: [\"tss\", \"sgn\"],\n tsy: [\"tsy\", \"sgn\"],\n tza: [\"tza\", \"sgn\"],\n ugn: [\"ugn\", \"sgn\"],\n ugy: [\"ugy\", \"sgn\"],\n ukl: [\"ukl\", \"sgn\"],\n uks: [\"uks\", \"sgn\"],\n urk: [\"urk\", \"ms\"],\n uzn: [\"uzn\", \"uz\"],\n uzs: [\"uzs\", \"uz\"],\n vgt: [\"vgt\", \"sgn\"],\n vkk: [\"vkk\", \"ms\"],\n vkt: [\"vkt\", \"ms\"],\n vsi: [\"vsi\", \"sgn\"],\n vsl: [\"vsl\", \"sgn\"],\n vsv: [\"vsv\", \"sgn\"],\n wuu: [\"wuu\", \"zh\"],\n xki: [\"xki\", \"sgn\"],\n xml: [\"xml\", \"sgn\"],\n xmm: [\"xmm\", \"ms\"],\n xms: [\"xms\", \"sgn\"],\n yds: [\"yds\", \"sgn\"],\n ysl: [\"ysl\", \"sgn\"],\n yue: [\"yue\", \"zh\"],\n zib: [\"zib\", \"sgn\"],\n zlm: [\"zlm\", \"ms\"],\n zmi: [\"zmi\", \"ms\"],\n zsl: [\"zsl\", \"sgn\"],\n zsm: [\"zsm\", \"ms\"]\n }\n};\n\n/**\n * Convert only a-z to uppercase as per section 6.1 of the spec\n */\nfunction toLatinUpperCase(str) {\n var i = str.length;\n\n while (i--) {\n var ch = str.charAt(i);\n\n if (ch >= \"a\" && ch <= \"z\") str = str.slice(0, i) + ch.toUpperCase() + str.slice(i + 1);\n }\n\n return str;\n}\n\n/**\n * The IsStructurallyValidLanguageTag abstract operation verifies that the locale\n * argument (which must be a String value)\n *\n * - represents a well-formed BCP 47 language tag as specified in RFC 5646 section\n * 2.1, or successor,\n * - does not include duplicate variant subtags, and\n * - does not include duplicate singleton subtags.\n *\n * The abstract operation returns true if locale can be generated from the ABNF\n * grammar in section 2.1 of the RFC, starting with Language-Tag, and does not\n * contain duplicate variant or singleton subtags (other than as a private use\n * subtag). It returns false otherwise. Terminal value characters in the grammar are\n * interpreted as the Unicode equivalents of the ASCII octet values given.\n */\nfunction /* 6.2.2 */IsStructurallyValidLanguageTag(locale) {\n // represents a well-formed BCP 47 language tag as specified in RFC 5646\n if (!expBCP47Syntax.test(locale)) return false;\n\n // does not include duplicate variant subtags, and\n if (expVariantDupes.test(locale)) return false;\n\n // does not include duplicate singleton subtags.\n if (expSingletonDupes.test(locale)) return false;\n\n return true;\n}\n\n/**\n * The CanonicalizeLanguageTag abstract operation returns the canonical and case-\n * regularized form of the locale argument (which must be a String value that is\n * a structurally valid BCP 47 language tag as verified by the\n * IsStructurallyValidLanguageTag abstract operation). It takes the steps\n * specified in RFC 5646 section 4.5, or successor, to bring the language tag\n * into canonical form, and to regularize the case of the subtags, but does not\n * take the steps to bring a language tag into “extlang form” and to reorder\n * variant subtags.\n\n * The specifications for extensions to BCP 47 language tags, such as RFC 6067,\n * may include canonicalization rules for the extension subtag sequences they\n * define that go beyond the canonicalization rules of RFC 5646 section 4.5.\n * Implementations are allowed, but not required, to apply these additional rules.\n */\nfunction /* 6.2.3 */CanonicalizeLanguageTag(locale) {\n var match = void 0,\n parts = void 0;\n\n // A language tag is in 'canonical form' when the tag is well-formed\n // according to the rules in Sections 2.1 and 2.2\n\n // Section 2.1 says all subtags use lowercase...\n locale = locale.toLowerCase();\n\n // ...with 2 exceptions: 'two-letter and four-letter subtags that neither\n // appear at the start of the tag nor occur after singletons. Such two-letter\n // subtags are all uppercase (as in the tags \"en-CA-x-ca\" or \"sgn-BE-FR\") and\n // four-letter subtags are titlecase (as in the tag \"az-Latn-x-latn\").\n parts = locale.split('-');\n for (var i = 1, max = parts.length; i < max; i++) {\n // Two-letter subtags are all uppercase\n if (parts[i].length === 2) parts[i] = parts[i].toUpperCase();\n\n // Four-letter subtags are titlecase\n else if (parts[i].length === 4) parts[i] = parts[i].charAt(0).toUpperCase() + parts[i].slice(1);\n\n // Is it a singleton?\n else if (parts[i].length === 1 && parts[i] !== 'x') break;\n }\n locale = arrJoin.call(parts, '-');\n\n // The steps laid out in RFC 5646 section 4.5 are as follows:\n\n // 1. Extension sequences are ordered into case-insensitive ASCII order\n // by singleton subtag.\n if ((match = locale.match(expExtSequences)) && match.length > 1) {\n // The built-in sort() sorts by ASCII order, so use that\n match.sort();\n\n // Replace all extensions with the joined, sorted array\n locale = locale.replace(RegExp('(?:' + expExtSequences.source + ')+', 'i'), arrJoin.call(match, ''));\n }\n\n // 2. Redundant or grandfathered tags are replaced by their 'Preferred-\n // Value', if there is one.\n if (hop.call(redundantTags.tags, locale)) locale = redundantTags.tags[locale];\n\n // 3. Subtags are replaced by their 'Preferred-Value', if there is one.\n // For extlangs, the original primary language subtag is also\n // replaced if there is a primary language subtag in the 'Preferred-\n // Value'.\n parts = locale.split('-');\n\n for (var _i = 1, _max = parts.length; _i < _max; _i++) {\n if (hop.call(redundantTags.subtags, parts[_i])) parts[_i] = redundantTags.subtags[parts[_i]];else if (hop.call(redundantTags.extLang, parts[_i])) {\n parts[_i] = redundantTags.extLang[parts[_i]][0];\n\n // For extlang tags, the prefix needs to be removed if it is redundant\n if (_i === 1 && redundantTags.extLang[parts[1]][1] === parts[0]) {\n parts = arrSlice.call(parts, _i++);\n _max -= 1;\n }\n }\n }\n\n return arrJoin.call(parts, '-');\n}\n\n/**\n * The DefaultLocale abstract operation returns a String value representing the\n * structurally valid (6.2.2) and canonicalized (6.2.3) BCP 47 language tag for the\n * host environment’s current locale.\n */\nfunction /* 6.2.4 */DefaultLocale() {\n return defaultLocale;\n}\n\n// Sect 6.3 Currency Codes\n// =======================\n\nvar expCurrencyCode = /^[A-Z]{3}$/;\n\n/**\n * The IsWellFormedCurrencyCode abstract operation verifies that the currency argument\n * (after conversion to a String value) represents a well-formed 3-letter ISO currency\n * code. The following steps are taken:\n */\nfunction /* 6.3.1 */IsWellFormedCurrencyCode(currency) {\n // 1. Let `c` be ToString(currency)\n var c = String(currency);\n\n // 2. Let `normalized` be the result of mapping c to upper case as described\n // in 6.1.\n var normalized = toLatinUpperCase(c);\n\n // 3. If the string length of normalized is not 3, return false.\n // 4. If normalized contains any character that is not in the range \"A\" to \"Z\"\n // (U+0041 to U+005A), return false.\n if (expCurrencyCode.test(normalized) === false) return false;\n\n // 5. Return true\n return true;\n}\n\nvar expUnicodeExSeq = /-u(?:-[0-9a-z]{2,8})+/gi; // See `extension` below\n\nfunction /* 9.2.1 */CanonicalizeLocaleList(locales) {\n // The abstract operation CanonicalizeLocaleList takes the following steps:\n\n // 1. If locales is undefined, then a. Return a new empty List\n if (locales === undefined) return new List();\n\n // 2. Let seen be a new empty List.\n var seen = new List();\n\n // 3. If locales is a String value, then\n // a. Let locales be a new array created as if by the expression new\n // Array(locales) where Array is the standard built-in constructor with\n // that name and locales is the value of locales.\n locales = typeof locales === 'string' ? [locales] : locales;\n\n // 4. Let O be ToObject(locales).\n var O = toObject(locales);\n\n // 5. Let lenValue be the result of calling the [[Get]] internal method of\n // O with the argument \"length\".\n // 6. Let len be ToUint32(lenValue).\n var len = toLength(O.length);\n\n // 7. Let k be 0.\n var k = 0;\n\n // 8. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ToString(k).\n var Pk = String(k);\n\n // b. Let kPresent be the result of calling the [[HasProperty]] internal\n // method of O with argument Pk.\n var kPresent = Pk in O;\n\n // c. If kPresent is true, then\n if (kPresent) {\n // i. Let kValue be the result of calling the [[Get]] internal\n // method of O with argument Pk.\n var kValue = O[Pk];\n\n // ii. If the type of kValue is not String or Object, then throw a\n // TypeError exception.\n if (kValue === null || typeof kValue !== 'string' && (typeof kValue === \"undefined\" ? \"undefined\" : babelHelpers$1[\"typeof\"](kValue)) !== 'object') throw new TypeError('String or Object type expected');\n\n // iii. Let tag be ToString(kValue).\n var tag = String(kValue);\n\n // iv. If the result of calling the abstract operation\n // IsStructurallyValidLanguageTag (defined in 6.2.2), passing tag as\n // the argument, is false, then throw a RangeError exception.\n if (!IsStructurallyValidLanguageTag(tag)) throw new RangeError(\"'\" + tag + \"' is not a structurally valid language tag\");\n\n // v. Let tag be the result of calling the abstract operation\n // CanonicalizeLanguageTag (defined in 6.2.3), passing tag as the\n // argument.\n tag = CanonicalizeLanguageTag(tag);\n\n // vi. If tag is not an element of seen, then append tag as the last\n // element of seen.\n if (arrIndexOf.call(seen, tag) === -1) arrPush.call(seen, tag);\n }\n\n // d. Increase k by 1.\n k++;\n }\n\n // 9. Return seen.\n return seen;\n}\n\n/**\n * The BestAvailableLocale abstract operation compares the provided argument\n * locale, which must be a String value with a structurally valid and\n * canonicalized BCP 47 language tag, against the locales in availableLocales and\n * returns either the longest non-empty prefix of locale that is an element of\n * availableLocales, or undefined if there is no such element. It uses the\n * fallback mechanism of RFC 4647, section 3.4. The following steps are taken:\n */\nfunction /* 9.2.2 */BestAvailableLocale(availableLocales, locale) {\n // 1. Let candidate be locale\n var candidate = locale;\n\n // 2. Repeat\n while (candidate) {\n // a. If availableLocales contains an element equal to candidate, then return\n // candidate.\n if (arrIndexOf.call(availableLocales, candidate) > -1) return candidate;\n\n // b. Let pos be the character index of the last occurrence of \"-\"\n // (U+002D) within candidate. If that character does not occur, return\n // undefined.\n var pos = candidate.lastIndexOf('-');\n\n if (pos < 0) return;\n\n // c. If pos ≥ 2 and the character \"-\" occurs at index pos-2 of candidate,\n // then decrease pos by 2.\n if (pos >= 2 && candidate.charAt(pos - 2) === '-') pos -= 2;\n\n // d. Let candidate be the substring of candidate from position 0, inclusive,\n // to position pos, exclusive.\n candidate = candidate.substring(0, pos);\n }\n}\n\n/**\n * The LookupMatcher abstract operation compares requestedLocales, which must be\n * a List as returned by CanonicalizeLocaleList, against the locales in\n * availableLocales and determines the best available language to meet the\n * request. The following steps are taken:\n */\nfunction /* 9.2.3 */LookupMatcher(availableLocales, requestedLocales) {\n // 1. Let i be 0.\n var i = 0;\n\n // 2. Let len be the number of elements in requestedLocales.\n var len = requestedLocales.length;\n\n // 3. Let availableLocale be undefined.\n var availableLocale = void 0;\n\n var locale = void 0,\n noExtensionsLocale = void 0;\n\n // 4. Repeat while i < len and availableLocale is undefined:\n while (i < len && !availableLocale) {\n // a. Let locale be the element of requestedLocales at 0-origined list\n // position i.\n locale = requestedLocales[i];\n\n // b. Let noExtensionsLocale be the String value that is locale with all\n // Unicode locale extension sequences removed.\n noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');\n\n // c. Let availableLocale be the result of calling the\n // BestAvailableLocale abstract operation (defined in 9.2.2) with\n // arguments availableLocales and noExtensionsLocale.\n availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);\n\n // d. Increase i by 1.\n i++;\n }\n\n // 5. Let result be a new Record.\n var result = new Record();\n\n // 6. If availableLocale is not undefined, then\n if (availableLocale !== undefined) {\n // a. Set result.[[locale]] to availableLocale.\n result['[[locale]]'] = availableLocale;\n\n // b. If locale and noExtensionsLocale are not the same String value, then\n if (String(locale) !== String(noExtensionsLocale)) {\n // i. Let extension be the String value consisting of the first\n // substring of locale that is a Unicode locale extension sequence.\n var extension = locale.match(expUnicodeExSeq)[0];\n\n // ii. Let extensionIndex be the character position of the initial\n // \"-\" of the first Unicode locale extension sequence within locale.\n var extensionIndex = locale.indexOf('-u-');\n\n // iii. Set result.[[extension]] to extension.\n result['[[extension]]'] = extension;\n\n // iv. Set result.[[extensionIndex]] to extensionIndex.\n result['[[extensionIndex]]'] = extensionIndex;\n }\n }\n // 7. Else\n else\n // a. Set result.[[locale]] to the value returned by the DefaultLocale abstract\n // operation (defined in 6.2.4).\n result['[[locale]]'] = DefaultLocale();\n\n // 8. Return result\n return result;\n}\n\n/**\n * The BestFitMatcher abstract operation compares requestedLocales, which must be\n * a List as returned by CanonicalizeLocaleList, against the locales in\n * availableLocales and determines the best available language to meet the\n * request. The algorithm is implementation dependent, but should produce results\n * that a typical user of the requested locales would perceive as at least as\n * good as those produced by the LookupMatcher abstract operation. Options\n * specified through Unicode locale extension sequences must be ignored by the\n * algorithm. Information about such subsequences is returned separately.\n * The abstract operation returns a record with a [[locale]] field, whose value\n * is the language tag of the selected locale, which must be an element of\n * availableLocales. If the language tag of the request locale that led to the\n * selected locale contained a Unicode locale extension sequence, then the\n * returned record also contains an [[extension]] field whose value is the first\n * Unicode locale extension sequence, and an [[extensionIndex]] field whose value\n * is the index of the first Unicode locale extension sequence within the request\n * locale language tag.\n */\nfunction /* 9.2.4 */BestFitMatcher(availableLocales, requestedLocales) {\n return LookupMatcher(availableLocales, requestedLocales);\n}\n\n/**\n * The ResolveLocale abstract operation compares a BCP 47 language priority list\n * requestedLocales against the locales in availableLocales and determines the\n * best available language to meet the request. availableLocales and\n * requestedLocales must be provided as List values, options as a Record.\n */\nfunction /* 9.2.5 */ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData) {\n if (availableLocales.length === 0) {\n throw new ReferenceError('No locale data has been provided for this object yet.');\n }\n\n // The following steps are taken:\n // 1. Let matcher be the value of options.[[localeMatcher]].\n var matcher = options['[[localeMatcher]]'];\n\n var r = void 0;\n\n // 2. If matcher is \"lookup\", then\n if (matcher === 'lookup')\n // a. Let r be the result of calling the LookupMatcher abstract operation\n // (defined in 9.2.3) with arguments availableLocales and\n // requestedLocales.\n r = LookupMatcher(availableLocales, requestedLocales);\n\n // 3. Else\n else\n // a. Let r be the result of calling the BestFitMatcher abstract\n // operation (defined in 9.2.4) with arguments availableLocales and\n // requestedLocales.\n r = BestFitMatcher(availableLocales, requestedLocales);\n\n // 4. Let foundLocale be the value of r.[[locale]].\n var foundLocale = r['[[locale]]'];\n\n var extensionSubtags = void 0,\n extensionSubtagsLength = void 0;\n\n // 5. If r has an [[extension]] field, then\n if (hop.call(r, '[[extension]]')) {\n // a. Let extension be the value of r.[[extension]].\n var extension = r['[[extension]]'];\n // b. Let split be the standard built-in function object defined in ES5,\n // 15.5.4.14.\n var split = String.prototype.split;\n // c. Let extensionSubtags be the result of calling the [[Call]] internal\n // method of split with extension as the this value and an argument\n // list containing the single item \"-\".\n extensionSubtags = split.call(extension, '-');\n // d. Let extensionSubtagsLength be the result of calling the [[Get]]\n // internal method of extensionSubtags with argument \"length\".\n extensionSubtagsLength = extensionSubtags.length;\n }\n\n // 6. Let result be a new Record.\n var result = new Record();\n\n // 7. Set result.[[dataLocale]] to foundLocale.\n result['[[dataLocale]]'] = foundLocale;\n\n // 8. Let supportedExtension be \"-u\".\n var supportedExtension = '-u';\n // 9. Let i be 0.\n var i = 0;\n // 10. Let len be the result of calling the [[Get]] internal method of\n // relevantExtensionKeys with argument \"length\".\n var len = relevantExtensionKeys.length;\n\n // 11 Repeat while i < len:\n while (i < len) {\n // a. Let key be the result of calling the [[Get]] internal method of\n // relevantExtensionKeys with argument ToString(i).\n var key = relevantExtensionKeys[i];\n // b. Let foundLocaleData be the result of calling the [[Get]] internal\n // method of localeData with the argument foundLocale.\n var foundLocaleData = localeData[foundLocale];\n // c. Let keyLocaleData be the result of calling the [[Get]] internal\n // method of foundLocaleData with the argument key.\n var keyLocaleData = foundLocaleData[key];\n // d. Let value be the result of calling the [[Get]] internal method of\n // keyLocaleData with argument \"0\".\n var value = keyLocaleData['0'];\n // e. Let supportedExtensionAddition be \"\".\n var supportedExtensionAddition = '';\n // f. Let indexOf be the standard built-in function object defined in\n // ES5, 15.4.4.14.\n var indexOf = arrIndexOf;\n\n // g. If extensionSubtags is not undefined, then\n if (extensionSubtags !== undefined) {\n // i. Let keyPos be the result of calling the [[Call]] internal\n // method of indexOf with extensionSubtags as the this value and\n // an argument list containing the single item key.\n var keyPos = indexOf.call(extensionSubtags, key);\n\n // ii. If keyPos ≠ -1, then\n if (keyPos !== -1) {\n // 1. If keyPos + 1 < extensionSubtagsLength and the length of the\n // result of calling the [[Get]] internal method of\n // extensionSubtags with argument ToString(keyPos +1) is greater\n // than 2, then\n if (keyPos + 1 < extensionSubtagsLength && extensionSubtags[keyPos + 1].length > 2) {\n // a. Let requestedValue be the result of calling the [[Get]]\n // internal method of extensionSubtags with argument\n // ToString(keyPos + 1).\n var requestedValue = extensionSubtags[keyPos + 1];\n // b. Let valuePos be the result of calling the [[Call]]\n // internal method of indexOf with keyLocaleData as the\n // this value and an argument list containing the single\n // item requestedValue.\n var valuePos = indexOf.call(keyLocaleData, requestedValue);\n\n // c. If valuePos ≠ -1, then\n if (valuePos !== -1) {\n // i. Let value be requestedValue.\n value = requestedValue,\n // ii. Let supportedExtensionAddition be the\n // concatenation of \"-\", key, \"-\", and value.\n supportedExtensionAddition = '-' + key + '-' + value;\n }\n }\n // 2. Else\n else {\n // a. Let valuePos be the result of calling the [[Call]]\n // internal method of indexOf with keyLocaleData as the this\n // value and an argument list containing the single item\n // \"true\".\n var _valuePos = indexOf(keyLocaleData, 'true');\n\n // b. If valuePos ≠ -1, then\n if (_valuePos !== -1)\n // i. Let value be \"true\".\n value = 'true';\n }\n }\n }\n // h. If options has a field [[]], then\n if (hop.call(options, '[[' + key + ']]')) {\n // i. Let optionsValue be the value of options.[[]].\n var optionsValue = options['[[' + key + ']]'];\n\n // ii. If the result of calling the [[Call]] internal method of indexOf\n // with keyLocaleData as the this value and an argument list\n // containing the single item optionsValue is not -1, then\n if (indexOf.call(keyLocaleData, optionsValue) !== -1) {\n // 1. If optionsValue is not equal to value, then\n if (optionsValue !== value) {\n // a. Let value be optionsValue.\n value = optionsValue;\n // b. Let supportedExtensionAddition be \"\".\n supportedExtensionAddition = '';\n }\n }\n }\n // i. Set result.[[]] to value.\n result['[[' + key + ']]'] = value;\n\n // j. Append supportedExtensionAddition to supportedExtension.\n supportedExtension += supportedExtensionAddition;\n\n // k. Increase i by 1.\n i++;\n }\n // 12. If the length of supportedExtension is greater than 2, then\n if (supportedExtension.length > 2) {\n // a.\n var privateIndex = foundLocale.indexOf(\"-x-\");\n // b.\n if (privateIndex === -1) {\n // i.\n foundLocale = foundLocale + supportedExtension;\n }\n // c.\n else {\n // i.\n var preExtension = foundLocale.substring(0, privateIndex);\n // ii.\n var postExtension = foundLocale.substring(privateIndex);\n // iii.\n foundLocale = preExtension + supportedExtension + postExtension;\n }\n // d. asserting - skipping\n // e.\n foundLocale = CanonicalizeLanguageTag(foundLocale);\n }\n // 13. Set result.[[locale]] to foundLocale.\n result['[[locale]]'] = foundLocale;\n\n // 14. Return result.\n return result;\n}\n\n/**\n * The LookupSupportedLocales abstract operation returns the subset of the\n * provided BCP 47 language priority list requestedLocales for which\n * availableLocales has a matching locale when using the BCP 47 Lookup algorithm.\n * Locales appear in the same order in the returned list as in requestedLocales.\n * The following steps are taken:\n */\nfunction /* 9.2.6 */LookupSupportedLocales(availableLocales, requestedLocales) {\n // 1. Let len be the number of elements in requestedLocales.\n var len = requestedLocales.length;\n // 2. Let subset be a new empty List.\n var subset = new List();\n // 3. Let k be 0.\n var k = 0;\n\n // 4. Repeat while k < len\n while (k < len) {\n // a. Let locale be the element of requestedLocales at 0-origined list\n // position k.\n var locale = requestedLocales[k];\n // b. Let noExtensionsLocale be the String value that is locale with all\n // Unicode locale extension sequences removed.\n var noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');\n // c. Let availableLocale be the result of calling the\n // BestAvailableLocale abstract operation (defined in 9.2.2) with\n // arguments availableLocales and noExtensionsLocale.\n var availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);\n\n // d. If availableLocale is not undefined, then append locale to the end of\n // subset.\n if (availableLocale !== undefined) arrPush.call(subset, locale);\n\n // e. Increment k by 1.\n k++;\n }\n\n // 5. Let subsetArray be a new Array object whose elements are the same\n // values in the same order as the elements of subset.\n var subsetArray = arrSlice.call(subset);\n\n // 6. Return subsetArray.\n return subsetArray;\n}\n\n/**\n * The BestFitSupportedLocales abstract operation returns the subset of the\n * provided BCP 47 language priority list requestedLocales for which\n * availableLocales has a matching locale when using the Best Fit Matcher\n * algorithm. Locales appear in the same order in the returned list as in\n * requestedLocales. The steps taken are implementation dependent.\n */\nfunction /*9.2.7 */BestFitSupportedLocales(availableLocales, requestedLocales) {\n // ###TODO: implement this function as described by the specification###\n return LookupSupportedLocales(availableLocales, requestedLocales);\n}\n\n/**\n * The SupportedLocales abstract operation returns the subset of the provided BCP\n * 47 language priority list requestedLocales for which availableLocales has a\n * matching locale. Two algorithms are available to match the locales: the Lookup\n * algorithm described in RFC 4647 section 3.4, and an implementation dependent\n * best-fit algorithm. Locales appear in the same order in the returned list as\n * in requestedLocales. The following steps are taken:\n */\nfunction /*9.2.8 */SupportedLocales(availableLocales, requestedLocales, options) {\n var matcher = void 0,\n subset = void 0;\n\n // 1. If options is not undefined, then\n if (options !== undefined) {\n // a. Let options be ToObject(options).\n options = new Record(toObject(options));\n // b. Let matcher be the result of calling the [[Get]] internal method of\n // options with argument \"localeMatcher\".\n matcher = options.localeMatcher;\n\n // c. If matcher is not undefined, then\n if (matcher !== undefined) {\n // i. Let matcher be ToString(matcher).\n matcher = String(matcher);\n\n // ii. If matcher is not \"lookup\" or \"best fit\", then throw a RangeError\n // exception.\n if (matcher !== 'lookup' && matcher !== 'best fit') throw new RangeError('matcher should be \"lookup\" or \"best fit\"');\n }\n }\n // 2. If matcher is undefined or \"best fit\", then\n if (matcher === undefined || matcher === 'best fit')\n // a. Let subset be the result of calling the BestFitSupportedLocales\n // abstract operation (defined in 9.2.7) with arguments\n // availableLocales and requestedLocales.\n subset = BestFitSupportedLocales(availableLocales, requestedLocales);\n // 3. Else\n else\n // a. Let subset be the result of calling the LookupSupportedLocales\n // abstract operation (defined in 9.2.6) with arguments\n // availableLocales and requestedLocales.\n subset = LookupSupportedLocales(availableLocales, requestedLocales);\n\n // 4. For each named own property name P of subset,\n for (var P in subset) {\n if (!hop.call(subset, P)) continue;\n\n // a. Let desc be the result of calling the [[GetOwnProperty]] internal\n // method of subset with P.\n // b. Set desc.[[Writable]] to false.\n // c. Set desc.[[Configurable]] to false.\n // d. Call the [[DefineOwnProperty]] internal method of subset with P, desc,\n // and true as arguments.\n defineProperty(subset, P, {\n writable: false, configurable: false, value: subset[P]\n });\n }\n // \"Freeze\" the array so no new elements can be added\n defineProperty(subset, 'length', { writable: false });\n\n // 5. Return subset\n return subset;\n}\n\n/**\n * The GetOption abstract operation extracts the value of the property named\n * property from the provided options object, converts it to the required type,\n * checks whether it is one of a List of allowed values, and fills in a fallback\n * value if necessary.\n */\nfunction /*9.2.9 */GetOption(options, property, type, values, fallback) {\n // 1. Let value be the result of calling the [[Get]] internal method of\n // options with argument property.\n var value = options[property];\n\n // 2. If value is not undefined, then\n if (value !== undefined) {\n // a. Assert: type is \"boolean\" or \"string\".\n // b. If type is \"boolean\", then let value be ToBoolean(value).\n // c. If type is \"string\", then let value be ToString(value).\n value = type === 'boolean' ? Boolean(value) : type === 'string' ? String(value) : value;\n\n // d. If values is not undefined, then\n if (values !== undefined) {\n // i. If values does not contain an element equal to value, then throw a\n // RangeError exception.\n if (arrIndexOf.call(values, value) === -1) throw new RangeError(\"'\" + value + \"' is not an allowed value for `\" + property + '`');\n }\n\n // e. Return value.\n return value;\n }\n // Else return fallback.\n return fallback;\n}\n\n/**\n * The GetNumberOption abstract operation extracts a property value from the\n * provided options object, converts it to a Number value, checks whether it is\n * in the allowed range, and fills in a fallback value if necessary.\n */\nfunction /* 9.2.10 */GetNumberOption(options, property, minimum, maximum, fallback) {\n // 1. Let value be the result of calling the [[Get]] internal method of\n // options with argument property.\n var value = options[property];\n\n // 2. If value is not undefined, then\n if (value !== undefined) {\n // a. Let value be ToNumber(value).\n value = Number(value);\n\n // b. If value is NaN or less than minimum or greater than maximum, throw a\n // RangeError exception.\n if (isNaN(value) || value < minimum || value > maximum) throw new RangeError('Value is not a number or outside accepted range');\n\n // c. Return floor(value).\n return Math.floor(value);\n }\n // 3. Else return fallback.\n return fallback;\n}\n\n// 8 The Intl Object\nvar Intl = {};\n\n// 8.2 Function Properties of the Intl Object\n\n// 8.2.1\n// @spec[tc39/ecma402/master/spec/intl.html]\n// @clause[sec-intl.getcanonicallocales]\nfunction getCanonicalLocales(locales) {\n // 1. Let ll be ? CanonicalizeLocaleList(locales).\n var ll = CanonicalizeLocaleList(locales);\n // 2. Return CreateArrayFromList(ll).\n {\n var result = [];\n\n var len = ll.length;\n var k = 0;\n\n while (k < len) {\n result[k] = ll[k];\n k++;\n }\n return result;\n }\n}\n\nObject.defineProperty(Intl, 'getCanonicalLocales', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: getCanonicalLocales\n});\n\n// Currency minor units output from get-4217 grunt task, formatted\nvar currencyMinorUnits = {\n BHD: 3, BYR: 0, XOF: 0, BIF: 0, XAF: 0, CLF: 4, CLP: 0, KMF: 0, DJF: 0,\n XPF: 0, GNF: 0, ISK: 0, IQD: 3, JPY: 0, JOD: 3, KRW: 0, KWD: 3, LYD: 3,\n OMR: 3, PYG: 0, RWF: 0, TND: 3, UGX: 0, UYI: 0, VUV: 0, VND: 0\n};\n\n// Define the NumberFormat constructor internally so it cannot be tainted\nfunction NumberFormatConstructor() {\n var locales = arguments[0];\n var options = arguments[1];\n\n if (!this || this === Intl) {\n return new Intl.NumberFormat(locales, options);\n }\n\n return InitializeNumberFormat(toObject(this), locales, options);\n}\n\ndefineProperty(Intl, 'NumberFormat', {\n configurable: true,\n writable: true,\n value: NumberFormatConstructor\n});\n\n// Must explicitly set prototypes as unwritable\ndefineProperty(Intl.NumberFormat, 'prototype', {\n writable: false\n});\n\n/**\n * The abstract operation InitializeNumberFormat accepts the arguments\n * numberFormat (which must be an object), locales, and options. It initializes\n * numberFormat as a NumberFormat object.\n */\nfunction /*11.1.1.1 */InitializeNumberFormat(numberFormat, locales, options) {\n // This will be a internal properties object if we're not already initialized\n var internal = getInternalProperties(numberFormat);\n\n // Create an object whose props can be used to restore the values of RegExp props\n var regexpRestore = createRegExpRestore();\n\n // 1. If numberFormat has an [[initializedIntlObject]] internal property with\n // value true, throw a TypeError exception.\n if (internal['[[initializedIntlObject]]'] === true) throw new TypeError('`this` object has already been initialized as an Intl object');\n\n // Need this to access the `internal` object\n defineProperty(numberFormat, '__getInternalProperties', {\n value: function value() {\n // NOTE: Non-standard, for internal use only\n if (arguments[0] === secret) return internal;\n }\n });\n\n // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.\n internal['[[initializedIntlObject]]'] = true;\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n var requestedLocales = CanonicalizeLocaleList(locales);\n\n // 4. If options is undefined, then\n if (options === undefined)\n // a. Let options be the result of creating a new object as if by the\n // expression new Object() where Object is the standard built-in constructor\n // with that name.\n options = {};\n\n // 5. Else\n else\n // a. Let options be ToObject(options).\n options = toObject(options);\n\n // 6. Let opt be a new Record.\n var opt = new Record(),\n\n\n // 7. Let matcher be the result of calling the GetOption abstract operation\n // (defined in 9.2.9) with the arguments options, \"localeMatcher\", \"string\",\n // a List containing the two String values \"lookup\" and \"best fit\", and\n // \"best fit\".\n matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');\n\n // 8. Set opt.[[localeMatcher]] to matcher.\n opt['[[localeMatcher]]'] = matcher;\n\n // 9. Let NumberFormat be the standard built-in object that is the initial value\n // of Intl.NumberFormat.\n // 10. Let localeData be the value of the [[localeData]] internal property of\n // NumberFormat.\n var localeData = internals.NumberFormat['[[localeData]]'];\n\n // 11. Let r be the result of calling the ResolveLocale abstract operation\n // (defined in 9.2.5) with the [[availableLocales]] internal property of\n // NumberFormat, requestedLocales, opt, the [[relevantExtensionKeys]]\n // internal property of NumberFormat, and localeData.\n var r = ResolveLocale(internals.NumberFormat['[[availableLocales]]'], requestedLocales, opt, internals.NumberFormat['[[relevantExtensionKeys]]'], localeData);\n\n // 12. Set the [[locale]] internal property of numberFormat to the value of\n // r.[[locale]].\n internal['[[locale]]'] = r['[[locale]]'];\n\n // 13. Set the [[numberingSystem]] internal property of numberFormat to the value\n // of r.[[nu]].\n internal['[[numberingSystem]]'] = r['[[nu]]'];\n\n // The specification doesn't tell us to do this, but it's helpful later on\n internal['[[dataLocale]]'] = r['[[dataLocale]]'];\n\n // 14. Let dataLocale be the value of r.[[dataLocale]].\n var dataLocale = r['[[dataLocale]]'];\n\n // 15. Let s be the result of calling the GetOption abstract operation with the\n // arguments options, \"style\", \"string\", a List containing the three String\n // values \"decimal\", \"percent\", and \"currency\", and \"decimal\".\n var s = GetOption(options, 'style', 'string', new List('decimal', 'percent', 'currency'), 'decimal');\n\n // 16. Set the [[style]] internal property of numberFormat to s.\n internal['[[style]]'] = s;\n\n // 17. Let c be the result of calling the GetOption abstract operation with the\n // arguments options, \"currency\", \"string\", undefined, and undefined.\n var c = GetOption(options, 'currency', 'string');\n\n // 18. If c is not undefined and the result of calling the\n // IsWellFormedCurrencyCode abstract operation (defined in 6.3.1) with\n // argument c is false, then throw a RangeError exception.\n if (c !== undefined && !IsWellFormedCurrencyCode(c)) throw new RangeError(\"'\" + c + \"' is not a valid currency code\");\n\n // 19. If s is \"currency\" and c is undefined, throw a TypeError exception.\n if (s === 'currency' && c === undefined) throw new TypeError('Currency code is required when style is currency');\n\n var cDigits = void 0;\n\n // 20. If s is \"currency\", then\n if (s === 'currency') {\n // a. Let c be the result of converting c to upper case as specified in 6.1.\n c = c.toUpperCase();\n\n // b. Set the [[currency]] internal property of numberFormat to c.\n internal['[[currency]]'] = c;\n\n // c. Let cDigits be the result of calling the CurrencyDigits abstract\n // operation (defined below) with argument c.\n cDigits = CurrencyDigits(c);\n }\n\n // 21. Let cd be the result of calling the GetOption abstract operation with the\n // arguments options, \"currencyDisplay\", \"string\", a List containing the\n // three String values \"code\", \"symbol\", and \"name\", and \"symbol\".\n var cd = GetOption(options, 'currencyDisplay', 'string', new List('code', 'symbol', 'name'), 'symbol');\n\n // 22. If s is \"currency\", then set the [[currencyDisplay]] internal property of\n // numberFormat to cd.\n if (s === 'currency') internal['[[currencyDisplay]]'] = cd;\n\n // 23. Let mnid be the result of calling the GetNumberOption abstract operation\n // (defined in 9.2.10) with arguments options, \"minimumIntegerDigits\", 1, 21,\n // and 1.\n var mnid = GetNumberOption(options, 'minimumIntegerDigits', 1, 21, 1);\n\n // 24. Set the [[minimumIntegerDigits]] internal property of numberFormat to mnid.\n internal['[[minimumIntegerDigits]]'] = mnid;\n\n // 25. If s is \"currency\", then let mnfdDefault be cDigits; else let mnfdDefault\n // be 0.\n var mnfdDefault = s === 'currency' ? cDigits : 0;\n\n // 26. Let mnfd be the result of calling the GetNumberOption abstract operation\n // with arguments options, \"minimumFractionDigits\", 0, 20, and mnfdDefault.\n var mnfd = GetNumberOption(options, 'minimumFractionDigits', 0, 20, mnfdDefault);\n\n // 27. Set the [[minimumFractionDigits]] internal property of numberFormat to mnfd.\n internal['[[minimumFractionDigits]]'] = mnfd;\n\n // 28. If s is \"currency\", then let mxfdDefault be max(mnfd, cDigits); else if s\n // is \"percent\", then let mxfdDefault be max(mnfd, 0); else let mxfdDefault\n // be max(mnfd, 3).\n var mxfdDefault = s === 'currency' ? Math.max(mnfd, cDigits) : s === 'percent' ? Math.max(mnfd, 0) : Math.max(mnfd, 3);\n\n // 29. Let mxfd be the result of calling the GetNumberOption abstract operation\n // with arguments options, \"maximumFractionDigits\", mnfd, 20, and mxfdDefault.\n var mxfd = GetNumberOption(options, 'maximumFractionDigits', mnfd, 20, mxfdDefault);\n\n // 30. Set the [[maximumFractionDigits]] internal property of numberFormat to mxfd.\n internal['[[maximumFractionDigits]]'] = mxfd;\n\n // 31. Let mnsd be the result of calling the [[Get]] internal method of options\n // with argument \"minimumSignificantDigits\".\n var mnsd = options.minimumSignificantDigits;\n\n // 32. Let mxsd be the result of calling the [[Get]] internal method of options\n // with argument \"maximumSignificantDigits\".\n var mxsd = options.maximumSignificantDigits;\n\n // 33. If mnsd is not undefined or mxsd is not undefined, then:\n if (mnsd !== undefined || mxsd !== undefined) {\n // a. Let mnsd be the result of calling the GetNumberOption abstract\n // operation with arguments options, \"minimumSignificantDigits\", 1, 21,\n // and 1.\n mnsd = GetNumberOption(options, 'minimumSignificantDigits', 1, 21, 1);\n\n // b. Let mxsd be the result of calling the GetNumberOption abstract\n // operation with arguments options, \"maximumSignificantDigits\", mnsd,\n // 21, and 21.\n mxsd = GetNumberOption(options, 'maximumSignificantDigits', mnsd, 21, 21);\n\n // c. Set the [[minimumSignificantDigits]] internal property of numberFormat\n // to mnsd, and the [[maximumSignificantDigits]] internal property of\n // numberFormat to mxsd.\n internal['[[minimumSignificantDigits]]'] = mnsd;\n internal['[[maximumSignificantDigits]]'] = mxsd;\n }\n // 34. Let g be the result of calling the GetOption abstract operation with the\n // arguments options, \"useGrouping\", \"boolean\", undefined, and true.\n var g = GetOption(options, 'useGrouping', 'boolean', undefined, true);\n\n // 35. Set the [[useGrouping]] internal property of numberFormat to g.\n internal['[[useGrouping]]'] = g;\n\n // 36. Let dataLocaleData be the result of calling the [[Get]] internal method of\n // localeData with argument dataLocale.\n var dataLocaleData = localeData[dataLocale];\n\n // 37. Let patterns be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"patterns\".\n var patterns = dataLocaleData.patterns;\n\n // 38. Assert: patterns is an object (see 11.2.3)\n\n // 39. Let stylePatterns be the result of calling the [[Get]] internal method of\n // patterns with argument s.\n var stylePatterns = patterns[s];\n\n // 40. Set the [[positivePattern]] internal property of numberFormat to the\n // result of calling the [[Get]] internal method of stylePatterns with the\n // argument \"positivePattern\".\n internal['[[positivePattern]]'] = stylePatterns.positivePattern;\n\n // 41. Set the [[negativePattern]] internal property of numberFormat to the\n // result of calling the [[Get]] internal method of stylePatterns with the\n // argument \"negativePattern\".\n internal['[[negativePattern]]'] = stylePatterns.negativePattern;\n\n // 42. Set the [[boundFormat]] internal property of numberFormat to undefined.\n internal['[[boundFormat]]'] = undefined;\n\n // 43. Set the [[initializedNumberFormat]] internal property of numberFormat to\n // true.\n internal['[[initializedNumberFormat]]'] = true;\n\n // In ES3, we need to pre-bind the format() function\n if (es3) numberFormat.format = GetFormatNumber.call(numberFormat);\n\n // Restore the RegExp properties\n regexpRestore();\n\n // Return the newly initialised object\n return numberFormat;\n}\n\nfunction CurrencyDigits(currency) {\n // When the CurrencyDigits abstract operation is called with an argument currency\n // (which must be an upper case String value), the following steps are taken:\n\n // 1. If the ISO 4217 currency and funds code list contains currency as an\n // alphabetic code, then return the minor unit value corresponding to the\n // currency from the list; else return 2.\n return currencyMinorUnits[currency] !== undefined ? currencyMinorUnits[currency] : 2;\n}\n\n/* 11.2.3 */internals.NumberFormat = {\n '[[availableLocales]]': [],\n '[[relevantExtensionKeys]]': ['nu'],\n '[[localeData]]': {}\n};\n\n/**\n * When the supportedLocalesOf method of Intl.NumberFormat is called, the\n * following steps are taken:\n */\n/* 11.2.2 */\ndefineProperty(Intl.NumberFormat, 'supportedLocalesOf', {\n configurable: true,\n writable: true,\n value: fnBind.call(function (locales) {\n // Bound functions only have the `this` value altered if being used as a constructor,\n // this lets us imitate a native function that has no constructor\n if (!hop.call(this, '[[availableLocales]]')) throw new TypeError('supportedLocalesOf() is not a constructor');\n\n // Create an object whose props can be used to restore the values of RegExp props\n var regexpRestore = createRegExpRestore(),\n\n\n // 1. If options is not provided, then let options be undefined.\n options = arguments[1],\n\n\n // 2. Let availableLocales be the value of the [[availableLocales]] internal\n // property of the standard built-in object that is the initial value of\n // Intl.NumberFormat.\n\n availableLocales = this['[[availableLocales]]'],\n\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n requestedLocales = CanonicalizeLocaleList(locales);\n\n // Restore the RegExp properties\n regexpRestore();\n\n // 4. Return the result of calling the SupportedLocales abstract operation\n // (defined in 9.2.8) with arguments availableLocales, requestedLocales,\n // and options.\n return SupportedLocales(availableLocales, requestedLocales, options);\n }, internals.NumberFormat)\n});\n\n/**\n * This named accessor property returns a function that formats a number\n * according to the effective locale and the formatting options of this\n * NumberFormat object.\n */\n/* 11.3.2 */defineProperty(Intl.NumberFormat.prototype, 'format', {\n configurable: true,\n get: GetFormatNumber\n});\n\nfunction GetFormatNumber() {\n var internal = this !== null && babelHelpers$1[\"typeof\"](this) === 'object' && getInternalProperties(this);\n\n // Satisfy test 11.3_b\n if (!internal || !internal['[[initializedNumberFormat]]']) throw new TypeError('`this` value for format() is not an initialized Intl.NumberFormat object.');\n\n // The value of the [[Get]] attribute is a function that takes the following\n // steps:\n\n // 1. If the [[boundFormat]] internal property of this NumberFormat object\n // is undefined, then:\n if (internal['[[boundFormat]]'] === undefined) {\n // a. Let F be a Function object, with internal properties set as\n // specified for built-in functions in ES5, 15, or successor, and the\n // length property set to 1, that takes the argument value and\n // performs the following steps:\n var F = function F(value) {\n // i. If value is not provided, then let value be undefined.\n // ii. Let x be ToNumber(value).\n // iii. Return the result of calling the FormatNumber abstract\n // operation (defined below) with arguments this and x.\n return FormatNumber(this, /* x = */Number(value));\n };\n\n // b. Let bind be the standard built-in function object defined in ES5,\n // 15.3.4.5.\n // c. Let bf be the result of calling the [[Call]] internal method of\n // bind with F as the this value and an argument list containing\n // the single item this.\n var bf = fnBind.call(F, this);\n\n // d. Set the [[boundFormat]] internal property of this NumberFormat\n // object to bf.\n internal['[[boundFormat]]'] = bf;\n }\n // Return the value of the [[boundFormat]] internal property of this\n // NumberFormat object.\n return internal['[[boundFormat]]'];\n}\n\nfunction formatToParts() {\n var value = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0];\n\n var internal = this !== null && babelHelpers$1[\"typeof\"](this) === 'object' && getInternalProperties(this);\n if (!internal || !internal['[[initializedNumberFormat]]']) throw new TypeError('`this` value for formatToParts() is not an initialized Intl.NumberFormat object.');\n\n var x = Number(value);\n return FormatNumberToParts(this, x);\n}\n\nObject.defineProperty(Intl.NumberFormat.prototype, 'formatToParts', {\n configurable: true,\n enumerable: false,\n writable: true,\n value: formatToParts\n});\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-formatnumbertoparts]\n */\nfunction FormatNumberToParts(numberFormat, x) {\n // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).\n var parts = PartitionNumberPattern(numberFormat, x);\n // 2. Let result be ArrayCreate(0).\n var result = [];\n // 3. Let n be 0.\n var n = 0;\n // 4. For each part in parts, do:\n for (var i = 0; parts.length > i; i++) {\n var part = parts[i];\n // a. Let O be ObjectCreate(%ObjectPrototype%).\n var O = {};\n // a. Perform ? CreateDataPropertyOrThrow(O, \"type\", part.[[type]]).\n O.type = part['[[type]]'];\n // a. Perform ? CreateDataPropertyOrThrow(O, \"value\", part.[[value]]).\n O.value = part['[[value]]'];\n // a. Perform ? CreateDataPropertyOrThrow(result, ? ToString(n), O).\n result[n] = O;\n // a. Increment n by 1.\n n += 1;\n }\n // 5. Return result.\n return result;\n}\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-partitionnumberpattern]\n */\nfunction PartitionNumberPattern(numberFormat, x) {\n\n var internal = getInternalProperties(numberFormat),\n locale = internal['[[dataLocale]]'],\n nums = internal['[[numberingSystem]]'],\n data = internals.NumberFormat['[[localeData]]'][locale],\n ild = data.symbols[nums] || data.symbols.latn,\n pattern = void 0;\n\n // 1. If x is not NaN and x < 0, then:\n if (!isNaN(x) && x < 0) {\n // a. Let x be -x.\n x = -x;\n // a. Let pattern be the value of numberFormat.[[negativePattern]].\n pattern = internal['[[negativePattern]]'];\n }\n // 2. Else,\n else {\n // a. Let pattern be the value of numberFormat.[[positivePattern]].\n pattern = internal['[[positivePattern]]'];\n }\n // 3. Let result be a new empty List.\n var result = new List();\n // 4. Let beginIndex be Call(%StringProto_indexOf%, pattern, \"{\", 0).\n var beginIndex = pattern.indexOf('{', 0);\n // 5. Let endIndex be 0.\n var endIndex = 0;\n // 6. Let nextIndex be 0.\n var nextIndex = 0;\n // 7. Let length be the number of code units in pattern.\n var length = pattern.length;\n // 8. Repeat while beginIndex is an integer index into pattern:\n while (beginIndex > -1 && beginIndex < length) {\n // a. Set endIndex to Call(%StringProto_indexOf%, pattern, \"}\", beginIndex)\n endIndex = pattern.indexOf('}', beginIndex);\n // a. If endIndex = -1, throw new Error exception.\n if (endIndex === -1) throw new Error();\n // a. If beginIndex is greater than nextIndex, then:\n if (beginIndex > nextIndex) {\n // i. Let literal be a substring of pattern from position nextIndex, inclusive, to position beginIndex, exclusive.\n var literal = pattern.substring(nextIndex, beginIndex);\n // ii. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // a. Let p be the substring of pattern from position beginIndex, exclusive, to position endIndex, exclusive.\n var p = pattern.substring(beginIndex + 1, endIndex);\n // a. If p is equal \"number\", then:\n if (p === \"number\") {\n // i. If x is NaN,\n if (isNaN(x)) {\n // 1. Let n be an ILD String value indicating the NaN value.\n var n = ild.nan;\n // 2. Add new part record { [[type]]: \"nan\", [[value]]: n } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'nan', '[[value]]': n });\n }\n // ii. Else if isFinite(x) is false,\n else if (!isFinite(x)) {\n // 1. Let n be an ILD String value indicating infinity.\n var _n = ild.infinity;\n // 2. Add new part record { [[type]]: \"infinity\", [[value]]: n } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'infinity', '[[value]]': _n });\n }\n // iii. Else,\n else {\n // 1. If the value of numberFormat.[[style]] is \"percent\" and isFinite(x), let x be 100 × x.\n if (internal['[[style]]'] === 'percent' && isFinite(x)) x *= 100;\n\n var _n2 = void 0;\n // 2. If the numberFormat.[[minimumSignificantDigits]] and numberFormat.[[maximumSignificantDigits]] are present, then\n if (hop.call(internal, '[[minimumSignificantDigits]]') && hop.call(internal, '[[maximumSignificantDigits]]')) {\n // a. Let n be ToRawPrecision(x, numberFormat.[[minimumSignificantDigits]], numberFormat.[[maximumSignificantDigits]]).\n _n2 = ToRawPrecision(x, internal['[[minimumSignificantDigits]]'], internal['[[maximumSignificantDigits]]']);\n }\n // 3. Else,\n else {\n // a. Let n be ToRawFixed(x, numberFormat.[[minimumIntegerDigits]], numberFormat.[[minimumFractionDigits]], numberFormat.[[maximumFractionDigits]]).\n _n2 = ToRawFixed(x, internal['[[minimumIntegerDigits]]'], internal['[[minimumFractionDigits]]'], internal['[[maximumFractionDigits]]']);\n }\n // 4. If the value of the numberFormat.[[numberingSystem]] matches one of the values in the \"Numbering System\" column of Table 2 below, then\n if (numSys[nums]) {\n (function () {\n // a. Let digits be an array whose 10 String valued elements are the UTF-16 string representations of the 10 digits specified in the \"Digits\" column of the matching row in Table 2.\n var digits = numSys[nums];\n // a. Replace each digit in n with the value of digits[digit].\n _n2 = String(_n2).replace(/\\d/g, function (digit) {\n return digits[digit];\n });\n })();\n }\n // 5. Else use an implementation dependent algorithm to map n to the appropriate representation of n in the given numbering system.\n else _n2 = String(_n2); // ###TODO###\n\n var integer = void 0;\n var fraction = void 0;\n // 6. Let decimalSepIndex be Call(%StringProto_indexOf%, n, \".\", 0).\n var decimalSepIndex = _n2.indexOf('.', 0);\n // 7. If decimalSepIndex > 0, then:\n if (decimalSepIndex > 0) {\n // a. Let integer be the substring of n from position 0, inclusive, to position decimalSepIndex, exclusive.\n integer = _n2.substring(0, decimalSepIndex);\n // a. Let fraction be the substring of n from position decimalSepIndex, exclusive, to the end of n.\n fraction = _n2.substring(decimalSepIndex + 1, decimalSepIndex.length);\n }\n // 8. Else:\n else {\n // a. Let integer be n.\n integer = _n2;\n // a. Let fraction be undefined.\n fraction = undefined;\n }\n // 9. If the value of the numberFormat.[[useGrouping]] is true,\n if (internal['[[useGrouping]]'] === true) {\n // a. Let groupSepSymbol be the ILND String representing the grouping separator.\n var groupSepSymbol = ild.group;\n // a. Let groups be a List whose elements are, in left to right order, the substrings defined by ILND set of locations within the integer.\n var groups = [];\n // ----> implementation:\n // Primary group represents the group closest to the decimal\n var pgSize = data.patterns.primaryGroupSize || 3;\n // Secondary group is every other group\n var sgSize = data.patterns.secondaryGroupSize || pgSize;\n // Group only if necessary\n if (integer.length > pgSize) {\n // Index of the primary grouping separator\n var end = integer.length - pgSize;\n // Starting index for our loop\n var idx = end % sgSize;\n var start = integer.slice(0, idx);\n if (start.length) arrPush.call(groups, start);\n // Loop to separate into secondary grouping digits\n while (idx < end) {\n arrPush.call(groups, integer.slice(idx, idx + sgSize));\n idx += sgSize;\n }\n // Add the primary grouping digits\n arrPush.call(groups, integer.slice(end));\n } else {\n arrPush.call(groups, integer);\n }\n // a. Assert: The number of elements in groups List is greater than 0.\n if (groups.length === 0) throw new Error();\n // a. Repeat, while groups List is not empty:\n while (groups.length) {\n // i. Remove the first element from groups and let integerGroup be the value of that element.\n var integerGroup = arrShift.call(groups);\n // ii. Add new part record { [[type]]: \"integer\", [[value]]: integerGroup } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integerGroup });\n // iii. If groups List is not empty, then:\n if (groups.length) {\n // 1. Add new part record { [[type]]: \"group\", [[value]]: groupSepSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'group', '[[value]]': groupSepSymbol });\n }\n }\n }\n // 10. Else,\n else {\n // a. Add new part record { [[type]]: \"integer\", [[value]]: integer } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integer });\n }\n // 11. If fraction is not undefined, then:\n if (fraction !== undefined) {\n // a. Let decimalSepSymbol be the ILND String representing the decimal separator.\n var decimalSepSymbol = ild.decimal;\n // a. Add new part record { [[type]]: \"decimal\", [[value]]: decimalSepSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'decimal', '[[value]]': decimalSepSymbol });\n // a. Add new part record { [[type]]: \"fraction\", [[value]]: fraction } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'fraction', '[[value]]': fraction });\n }\n }\n }\n // a. Else if p is equal \"plusSign\", then:\n else if (p === \"plusSign\") {\n // i. Let plusSignSymbol be the ILND String representing the plus sign.\n var plusSignSymbol = ild.plusSign;\n // ii. Add new part record { [[type]]: \"plusSign\", [[value]]: plusSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'plusSign', '[[value]]': plusSignSymbol });\n }\n // a. Else if p is equal \"minusSign\", then:\n else if (p === \"minusSign\") {\n // i. Let minusSignSymbol be the ILND String representing the minus sign.\n var minusSignSymbol = ild.minusSign;\n // ii. Add new part record { [[type]]: \"minusSign\", [[value]]: minusSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'minusSign', '[[value]]': minusSignSymbol });\n }\n // a. Else if p is equal \"percentSign\" and numberFormat.[[style]] is \"percent\", then:\n else if (p === \"percentSign\" && internal['[[style]]'] === \"percent\") {\n // i. Let percentSignSymbol be the ILND String representing the percent sign.\n var percentSignSymbol = ild.percentSign;\n // ii. Add new part record { [[type]]: \"percentSign\", [[value]]: percentSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': percentSignSymbol });\n }\n // a. Else if p is equal \"currency\" and numberFormat.[[style]] is \"currency\", then:\n else if (p === \"currency\" && internal['[[style]]'] === \"currency\") {\n // i. Let currency be the value of numberFormat.[[currency]].\n var currency = internal['[[currency]]'];\n\n var cd = void 0;\n\n // ii. If numberFormat.[[currencyDisplay]] is \"code\", then\n if (internal['[[currencyDisplay]]'] === \"code\") {\n // 1. Let cd be currency.\n cd = currency;\n }\n // iii. Else if numberFormat.[[currencyDisplay]] is \"symbol\", then\n else if (internal['[[currencyDisplay]]'] === \"symbol\") {\n // 1. Let cd be an ILD string representing currency in short form. If the implementation does not have such a representation of currency, use currency itself.\n cd = data.currencies[currency] || currency;\n }\n // iv. Else if numberFormat.[[currencyDisplay]] is \"name\", then\n else if (internal['[[currencyDisplay]]'] === \"name\") {\n // 1. Let cd be an ILD string representing currency in long form. If the implementation does not have such a representation of currency, then use currency itself.\n cd = currency;\n }\n // v. Add new part record { [[type]]: \"currency\", [[value]]: cd } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'currency', '[[value]]': cd });\n }\n // a. Else,\n else {\n // i. Let literal be the substring of pattern from position beginIndex, inclusive, to position endIndex, inclusive.\n var _literal = pattern.substring(beginIndex, endIndex);\n // ii. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': _literal });\n }\n // a. Set nextIndex to endIndex + 1.\n nextIndex = endIndex + 1;\n // a. Set beginIndex to Call(%StringProto_indexOf%, pattern, \"{\", nextIndex)\n beginIndex = pattern.indexOf('{', nextIndex);\n }\n // 9. If nextIndex is less than length, then:\n if (nextIndex < length) {\n // a. Let literal be the substring of pattern from position nextIndex, inclusive, to position length, exclusive.\n var _literal2 = pattern.substring(nextIndex, length);\n // a. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': _literal2 });\n }\n // 10. Return result.\n return result;\n}\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-formatnumber]\n */\nfunction FormatNumber(numberFormat, x) {\n // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).\n var parts = PartitionNumberPattern(numberFormat, x);\n // 2. Let result be an empty String.\n var result = '';\n // 3. For each part in parts, do:\n for (var i = 0; parts.length > i; i++) {\n var part = parts[i];\n // a. Set result to a String value produced by concatenating result and part.[[value]].\n result += part['[[value]]'];\n }\n // 4. Return result.\n return result;\n}\n\n/**\n * When the ToRawPrecision abstract operation is called with arguments x (which\n * must be a finite non-negative number), minPrecision, and maxPrecision (both\n * must be integers between 1 and 21) the following steps are taken:\n */\nfunction ToRawPrecision(x, minPrecision, maxPrecision) {\n // 1. Let p be maxPrecision.\n var p = maxPrecision;\n\n var m = void 0,\n e = void 0;\n\n // 2. If x = 0, then\n if (x === 0) {\n // a. Let m be the String consisting of p occurrences of the character \"0\".\n m = arrJoin.call(Array(p + 1), '0');\n // b. Let e be 0.\n e = 0;\n }\n // 3. Else\n else {\n // a. Let e and n be integers such that 10ᵖ⁻¹ ≤ n < 10ᵖ and for which the\n // exact mathematical value of n × 10ᵉ⁻ᵖ⁺¹ – x is as close to zero as\n // possible. If there are two such sets of e and n, pick the e and n for\n // which n × 10ᵉ⁻ᵖ⁺¹ is larger.\n e = log10Floor(Math.abs(x));\n\n // Easier to get to m from here\n var f = Math.round(Math.exp(Math.abs(e - p + 1) * Math.LN10));\n\n // b. Let m be the String consisting of the digits of the decimal\n // representation of n (in order, with no leading zeroes)\n m = String(Math.round(e - p + 1 < 0 ? x * f : x / f));\n }\n\n // 4. If e ≥ p, then\n if (e >= p)\n // a. Return the concatenation of m and e-p+1 occurrences of the character \"0\".\n return m + arrJoin.call(Array(e - p + 1 + 1), '0');\n\n // 5. If e = p-1, then\n else if (e === p - 1)\n // a. Return m.\n return m;\n\n // 6. If e ≥ 0, then\n else if (e >= 0)\n // a. Let m be the concatenation of the first e+1 characters of m, the character\n // \".\", and the remaining p–(e+1) characters of m.\n m = m.slice(0, e + 1) + '.' + m.slice(e + 1);\n\n // 7. If e < 0, then\n else if (e < 0)\n // a. Let m be the concatenation of the String \"0.\", –(e+1) occurrences of the\n // character \"0\", and the string m.\n m = '0.' + arrJoin.call(Array(-(e + 1) + 1), '0') + m;\n\n // 8. If m contains the character \".\", and maxPrecision > minPrecision, then\n if (m.indexOf(\".\") >= 0 && maxPrecision > minPrecision) {\n // a. Let cut be maxPrecision – minPrecision.\n var cut = maxPrecision - minPrecision;\n\n // b. Repeat while cut > 0 and the last character of m is \"0\":\n while (cut > 0 && m.charAt(m.length - 1) === '0') {\n // i. Remove the last character from m.\n m = m.slice(0, -1);\n\n // ii. Decrease cut by 1.\n cut--;\n }\n\n // c. If the last character of m is \".\", then\n if (m.charAt(m.length - 1) === '.')\n // i. Remove the last character from m.\n m = m.slice(0, -1);\n }\n // 9. Return m.\n return m;\n}\n\n/**\n * @spec[tc39/ecma402/master/spec/numberformat.html]\n * @clause[sec-torawfixed]\n * When the ToRawFixed abstract operation is called with arguments x (which must\n * be a finite non-negative number), minInteger (which must be an integer between\n * 1 and 21), minFraction, and maxFraction (which must be integers between 0 and\n * 20) the following steps are taken:\n */\nfunction ToRawFixed(x, minInteger, minFraction, maxFraction) {\n // 1. Let f be maxFraction.\n var f = maxFraction;\n // 2. Let n be an integer for which the exact mathematical value of n ÷ 10f – x is as close to zero as possible. If there are two such n, pick the larger n.\n var n = Math.pow(10, f) * x; // diverging...\n // 3. If n = 0, let m be the String \"0\". Otherwise, let m be the String consisting of the digits of the decimal representation of n (in order, with no leading zeroes).\n var m = n === 0 ? \"0\" : n.toFixed(0); // divering...\n\n {\n // this diversion is needed to take into consideration big numbers, e.g.:\n // 1.2344501e+37 -> 12344501000000000000000000000000000000\n var idx = void 0;\n var exp = (idx = m.indexOf('e')) > -1 ? m.slice(idx + 1) : 0;\n if (exp) {\n m = m.slice(0, idx).replace('.', '');\n m += arrJoin.call(Array(exp - (m.length - 1) + 1), '0');\n }\n }\n\n var int = void 0;\n // 4. If f ≠ 0, then\n if (f !== 0) {\n // a. Let k be the number of characters in m.\n var k = m.length;\n // a. If k ≤ f, then\n if (k <= f) {\n // i. Let z be the String consisting of f+1–k occurrences of the character \"0\".\n var z = arrJoin.call(Array(f + 1 - k + 1), '0');\n // ii. Let m be the concatenation of Strings z and m.\n m = z + m;\n // iii. Let k be f+1.\n k = f + 1;\n }\n // a. Let a be the first k–f characters of m, and let b be the remaining f characters of m.\n var a = m.substring(0, k - f),\n b = m.substring(k - f, m.length);\n // a. Let m be the concatenation of the three Strings a, \".\", and b.\n m = a + \".\" + b;\n // a. Let int be the number of characters in a.\n int = a.length;\n }\n // 5. Else, let int be the number of characters in m.\n else int = m.length;\n // 6. Let cut be maxFraction – minFraction.\n var cut = maxFraction - minFraction;\n // 7. Repeat while cut > 0 and the last character of m is \"0\":\n while (cut > 0 && m.slice(-1) === \"0\") {\n // a. Remove the last character from m.\n m = m.slice(0, -1);\n // a. Decrease cut by 1.\n cut--;\n }\n // 8. If the last character of m is \".\", then\n if (m.slice(-1) === \".\") {\n // a. Remove the last character from m.\n m = m.slice(0, -1);\n }\n // 9. If int < minInteger, then\n if (int < minInteger) {\n // a. Let z be the String consisting of minInteger–int occurrences of the character \"0\".\n var _z = arrJoin.call(Array(minInteger - int + 1), '0');\n // a. Let m be the concatenation of Strings z and m.\n m = _z + m;\n }\n // 10. Return m.\n return m;\n}\n\n// Sect 11.3.2 Table 2, Numbering systems\n// ======================================\nvar numSys = {\n arab: [\"٠\", \"١\", \"٢\", \"٣\", \"٤\", \"٥\", \"٦\", \"٧\", \"٨\", \"٩\"],\n arabext: [\"۰\", \"۱\", \"۲\", \"۳\", \"۴\", \"۵\", \"۶\", \"۷\", \"۸\", \"۹\"],\n bali: [\"᭐\", \"᭑\", \"᭒\", \"᭓\", \"᭔\", \"᭕\", \"᭖\", \"᭗\", \"᭘\", \"᭙\"],\n beng: [\"০\", \"১\", \"২\", \"৩\", \"৪\", \"৫\", \"৬\", \"৭\", \"৮\", \"৯\"],\n deva: [\"०\", \"१\", \"२\", \"३\", \"४\", \"५\", \"६\", \"७\", \"८\", \"९\"],\n fullwide: [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"],\n gujr: [\"૦\", \"૧\", \"૨\", \"૩\", \"૪\", \"૫\", \"૬\", \"૭\", \"૮\", \"૯\"],\n guru: [\"੦\", \"੧\", \"੨\", \"੩\", \"੪\", \"੫\", \"੬\", \"੭\", \"੮\", \"੯\"],\n hanidec: [\"〇\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"七\", \"八\", \"九\"],\n khmr: [\"០\", \"១\", \"២\", \"៣\", \"៤\", \"៥\", \"៦\", \"៧\", \"៨\", \"៩\"],\n knda: [\"೦\", \"೧\", \"೨\", \"೩\", \"೪\", \"೫\", \"೬\", \"೭\", \"೮\", \"೯\"],\n laoo: [\"໐\", \"໑\", \"໒\", \"໓\", \"໔\", \"໕\", \"໖\", \"໗\", \"໘\", \"໙\"],\n latn: [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"],\n limb: [\"᥆\", \"᥇\", \"᥈\", \"᥉\", \"᥊\", \"᥋\", \"᥌\", \"᥍\", \"᥎\", \"᥏\"],\n mlym: [\"൦\", \"൧\", \"൨\", \"൩\", \"൪\", \"൫\", \"൬\", \"൭\", \"൮\", \"൯\"],\n mong: [\"᠐\", \"᠑\", \"᠒\", \"᠓\", \"᠔\", \"᠕\", \"᠖\", \"᠗\", \"᠘\", \"᠙\"],\n mymr: [\"၀\", \"၁\", \"၂\", \"၃\", \"၄\", \"၅\", \"၆\", \"၇\", \"၈\", \"၉\"],\n orya: [\"୦\", \"୧\", \"୨\", \"୩\", \"୪\", \"୫\", \"୬\", \"୭\", \"୮\", \"୯\"],\n tamldec: [\"௦\", \"௧\", \"௨\", \"௩\", \"௪\", \"௫\", \"௬\", \"௭\", \"௮\", \"௯\"],\n telu: [\"౦\", \"౧\", \"౨\", \"౩\", \"౪\", \"౫\", \"౬\", \"౭\", \"౮\", \"౯\"],\n thai: [\"๐\", \"๑\", \"๒\", \"๓\", \"๔\", \"๕\", \"๖\", \"๗\", \"๘\", \"๙\"],\n tibt: [\"༠\", \"༡\", \"༢\", \"༣\", \"༤\", \"༥\", \"༦\", \"༧\", \"༨\", \"༩\"]\n};\n\n/**\n * This function provides access to the locale and formatting options computed\n * during initialization of the object.\n *\n * The function returns a new object whose properties and attributes are set as\n * if constructed by an object literal assigning to each of the following\n * properties the value of the corresponding internal property of this\n * NumberFormat object (see 11.4): locale, numberingSystem, style, currency,\n * currencyDisplay, minimumIntegerDigits, minimumFractionDigits,\n * maximumFractionDigits, minimumSignificantDigits, maximumSignificantDigits, and\n * useGrouping. Properties whose corresponding internal properties are not present\n * are not assigned.\n */\n/* 11.3.3 */defineProperty(Intl.NumberFormat.prototype, 'resolvedOptions', {\n configurable: true,\n writable: true,\n value: function value() {\n var prop = void 0,\n descs = new Record(),\n props = ['locale', 'numberingSystem', 'style', 'currency', 'currencyDisplay', 'minimumIntegerDigits', 'minimumFractionDigits', 'maximumFractionDigits', 'minimumSignificantDigits', 'maximumSignificantDigits', 'useGrouping'],\n internal = this !== null && babelHelpers$1[\"typeof\"](this) === 'object' && getInternalProperties(this);\n\n // Satisfy test 11.3_b\n if (!internal || !internal['[[initializedNumberFormat]]']) throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.NumberFormat object.');\n\n for (var i = 0, max = props.length; i < max; i++) {\n if (hop.call(internal, prop = '[[' + props[i] + ']]')) descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };\n }\n\n return objCreate({}, descs);\n }\n});\n\n/* jslint esnext: true */\n\n// Match these datetime components in a CLDR pattern, except those in single quotes\nvar expDTComponents = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n// trim patterns after transformations\nvar expPatternTrimmer = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n// Skip over patterns with these datetime components because we don't have data\n// to back them up:\n// timezone, weekday, amoung others\nvar unwantedDTCs = /[rqQASjJgwWIQq]/; // xXVO were removed from this list in favor of computing matches with timeZoneName values but printing as empty string\n\nvar dtKeys = [\"era\", \"year\", \"month\", \"day\", \"weekday\", \"quarter\"];\nvar tmKeys = [\"hour\", \"minute\", \"second\", \"hour12\", \"timeZoneName\"];\n\nfunction isDateFormatOnly(obj) {\n for (var i = 0; i < tmKeys.length; i += 1) {\n if (obj.hasOwnProperty(tmKeys[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction isTimeFormatOnly(obj) {\n for (var i = 0; i < dtKeys.length; i += 1) {\n if (obj.hasOwnProperty(dtKeys[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction joinDateAndTimeFormats(dateFormatObj, timeFormatObj) {\n var o = { _: {} };\n for (var i = 0; i < dtKeys.length; i += 1) {\n if (dateFormatObj[dtKeys[i]]) {\n o[dtKeys[i]] = dateFormatObj[dtKeys[i]];\n }\n if (dateFormatObj._[dtKeys[i]]) {\n o._[dtKeys[i]] = dateFormatObj._[dtKeys[i]];\n }\n }\n for (var j = 0; j < tmKeys.length; j += 1) {\n if (timeFormatObj[tmKeys[j]]) {\n o[tmKeys[j]] = timeFormatObj[tmKeys[j]];\n }\n if (timeFormatObj._[tmKeys[j]]) {\n o._[tmKeys[j]] = timeFormatObj._[tmKeys[j]];\n }\n }\n return o;\n}\n\nfunction computeFinalPatterns(formatObj) {\n // From http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns:\n // 'In patterns, two single quotes represents a literal single quote, either\n // inside or outside single quotes. Text within single quotes is not\n // interpreted in any way (except for two adjacent single quotes).'\n formatObj.pattern12 = formatObj.extendedPattern.replace(/'([^']*)'/g, function ($0, literal) {\n return literal ? literal : \"'\";\n });\n\n // pattern 12 is always the default. we can produce the 24 by removing {ampm}\n formatObj.pattern = formatObj.pattern12.replace('{ampm}', '').replace(expPatternTrimmer, '');\n return formatObj;\n}\n\nfunction expDTComponentsMeta($0, formatObj) {\n switch ($0.charAt(0)) {\n // --- Era\n case 'G':\n formatObj.era = ['short', 'short', 'short', 'long', 'narrow'][$0.length - 1];\n return '{era}';\n\n // --- Year\n case 'y':\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n formatObj.year = $0.length === 2 ? '2-digit' : 'numeric';\n return '{year}';\n\n // --- Quarter (not supported in this polyfill)\n case 'Q':\n case 'q':\n formatObj.quarter = ['numeric', '2-digit', 'short', 'long', 'narrow'][$0.length - 1];\n return '{quarter}';\n\n // --- Month\n case 'M':\n case 'L':\n formatObj.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][$0.length - 1];\n return '{month}';\n\n // --- Week (not supported in this polyfill)\n case 'w':\n // week of the year\n formatObj.week = $0.length === 2 ? '2-digit' : 'numeric';\n return '{weekday}';\n case 'W':\n // week of the month\n formatObj.week = 'numeric';\n return '{weekday}';\n\n // --- Day\n case 'd':\n // day of the month\n formatObj.day = $0.length === 2 ? '2-digit' : 'numeric';\n return '{day}';\n case 'D': // day of the year\n case 'F': // day of the week\n case 'g':\n // 1..n: Modified Julian day\n formatObj.day = 'numeric';\n return '{day}';\n\n // --- Week Day\n case 'E':\n // day of the week\n formatObj.weekday = ['short', 'short', 'short', 'long', 'narrow', 'short'][$0.length - 1];\n return '{weekday}';\n case 'e':\n // local day of the week\n formatObj.weekday = ['numeric', '2-digit', 'short', 'long', 'narrow', 'short'][$0.length - 1];\n return '{weekday}';\n case 'c':\n // stand alone local day of the week\n formatObj.weekday = ['numeric', undefined, 'short', 'long', 'narrow', 'short'][$0.length - 1];\n return '{weekday}';\n\n // --- Period\n case 'a': // AM, PM\n case 'b': // am, pm, noon, midnight\n case 'B':\n // flexible day periods\n formatObj.hour12 = true;\n return '{ampm}';\n\n // --- Hour\n case 'h':\n case 'H':\n formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';\n return '{hour}';\n case 'k':\n case 'K':\n formatObj.hour12 = true; // 12-hour-cycle time formats (using h or K)\n formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';\n return '{hour}';\n\n // --- Minute\n case 'm':\n formatObj.minute = $0.length === 2 ? '2-digit' : 'numeric';\n return '{minute}';\n\n // --- Second\n case 's':\n formatObj.second = $0.length === 2 ? '2-digit' : 'numeric';\n return '{second}';\n case 'S':\n case 'A':\n formatObj.second = 'numeric';\n return '{second}';\n\n // --- Timezone\n case 'z': // 1..3, 4: specific non-location format\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n case 'O': // 1, 4: miliseconds in day short, long\n case 'v': // 1, 4: generic non-location format\n case 'V': // 1, 2, 3, 4: time zone ID or city\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n case 'x':\n // 1, 2, 3, 4: The ISO8601 varios formats\n // this polyfill only supports much, for now, we are just doing something dummy\n formatObj.timeZoneName = $0.length < 4 ? 'short' : 'long';\n return '{timeZoneName}';\n }\n}\n\n/**\n * Converts the CLDR availableFormats into the objects and patterns required by\n * the ECMAScript Internationalization API specification.\n */\nfunction createDateTimeFormat(skeleton, pattern) {\n // we ignore certain patterns that are unsupported to avoid this expensive op.\n if (unwantedDTCs.test(pattern)) return undefined;\n\n var formatObj = {\n originalPattern: pattern,\n _: {}\n };\n\n // Replace the pattern string with the one required by the specification, whilst\n // at the same time evaluating it for the subsets and formats\n formatObj.extendedPattern = pattern.replace(expDTComponents, function ($0) {\n // See which symbol we're dealing with\n return expDTComponentsMeta($0, formatObj._);\n });\n\n // Match the skeleton string with the one required by the specification\n // this implementation is based on the Date Field Symbol Table:\n // http://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n // Note: we are adding extra data to the formatObject even though this polyfill\n // might not support it.\n skeleton.replace(expDTComponents, function ($0) {\n // See which symbol we're dealing with\n return expDTComponentsMeta($0, formatObj);\n });\n\n return computeFinalPatterns(formatObj);\n}\n\n/**\n * Processes DateTime formats from CLDR to an easier-to-parse format.\n * the result of this operation should be cached the first time a particular\n * calendar is analyzed.\n *\n * The specification requires we support at least the following subsets of\n * date/time components:\n *\n * - 'weekday', 'year', 'month', 'day', 'hour', 'minute', 'second'\n * - 'weekday', 'year', 'month', 'day'\n * - 'year', 'month', 'day'\n * - 'year', 'month'\n * - 'month', 'day'\n * - 'hour', 'minute', 'second'\n * - 'hour', 'minute'\n *\n * We need to cherry pick at least these subsets from the CLDR data and convert\n * them into the pattern objects used in the ECMA-402 API.\n */\nfunction createDateTimeFormats(formats) {\n var availableFormats = formats.availableFormats;\n var timeFormats = formats.timeFormats;\n var dateFormats = formats.dateFormats;\n var result = [];\n var skeleton = void 0,\n pattern = void 0,\n computed = void 0,\n i = void 0,\n j = void 0;\n var timeRelatedFormats = [];\n var dateRelatedFormats = [];\n\n // Map available (custom) formats into a pattern for createDateTimeFormats\n for (skeleton in availableFormats) {\n if (availableFormats.hasOwnProperty(skeleton)) {\n pattern = availableFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n // in some cases, the format is only displaying date specific props\n // or time specific props, in which case we need to also produce the\n // combined formats.\n if (isDateFormatOnly(computed)) {\n dateRelatedFormats.push(computed);\n } else if (isTimeFormatOnly(computed)) {\n timeRelatedFormats.push(computed);\n }\n }\n }\n }\n\n // Map time formats into a pattern for createDateTimeFormats\n for (skeleton in timeFormats) {\n if (timeFormats.hasOwnProperty(skeleton)) {\n pattern = timeFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n timeRelatedFormats.push(computed);\n }\n }\n }\n\n // Map date formats into a pattern for createDateTimeFormats\n for (skeleton in dateFormats) {\n if (dateFormats.hasOwnProperty(skeleton)) {\n pattern = dateFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n dateRelatedFormats.push(computed);\n }\n }\n }\n\n // combine custom time and custom date formats when they are orthogonals to complete the\n // formats supported by CLDR.\n // This Algo is based on section \"Missing Skeleton Fields\" from:\n // http://unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\n for (i = 0; i < timeRelatedFormats.length; i += 1) {\n for (j = 0; j < dateRelatedFormats.length; j += 1) {\n if (dateRelatedFormats[j].month === 'long') {\n pattern = dateRelatedFormats[j].weekday ? formats.full : formats.long;\n } else if (dateRelatedFormats[j].month === 'short') {\n pattern = formats.medium;\n } else {\n pattern = formats.short;\n }\n computed = joinDateAndTimeFormats(dateRelatedFormats[j], timeRelatedFormats[i]);\n computed.originalPattern = pattern;\n computed.extendedPattern = pattern.replace('{0}', timeRelatedFormats[i].extendedPattern).replace('{1}', dateRelatedFormats[j].extendedPattern).replace(/^[,\\s]+|[,\\s]+$/gi, '');\n result.push(computeFinalPatterns(computed));\n }\n }\n\n return result;\n}\n\n// this represents the exceptions of the rule that are not covered by CLDR availableFormats\n// for single property configurations, they play no role when using multiple properties, and\n// those that are not in this table, are not exceptions or are not covered by the data we\n// provide.\nvar validSyntheticProps = {\n second: {\n numeric: 's',\n '2-digit': 'ss'\n },\n minute: {\n numeric: 'm',\n '2-digit': 'mm'\n },\n year: {\n numeric: 'y',\n '2-digit': 'yy'\n },\n day: {\n numeric: 'd',\n '2-digit': 'dd'\n },\n month: {\n numeric: 'L',\n '2-digit': 'LL',\n narrow: 'LLLLL',\n short: 'LLL',\n long: 'LLLL'\n },\n weekday: {\n narrow: 'ccccc',\n short: 'ccc',\n long: 'cccc'\n }\n};\n\nfunction generateSyntheticFormat(propName, propValue) {\n if (validSyntheticProps[propName] && validSyntheticProps[propName][propValue]) {\n var _ref2;\n\n return _ref2 = {\n originalPattern: validSyntheticProps[propName][propValue],\n _: defineProperty$1({}, propName, propValue),\n extendedPattern: \"{\" + propName + \"}\"\n }, defineProperty$1(_ref2, propName, propValue), defineProperty$1(_ref2, \"pattern12\", \"{\" + propName + \"}\"), defineProperty$1(_ref2, \"pattern\", \"{\" + propName + \"}\"), _ref2;\n }\n}\n\n// An object map of date component keys, saves using a regex later\nvar dateWidths = objCreate(null, { narrow: {}, short: {}, long: {} });\n\n/**\n * Returns a string for a date component, resolved using multiple inheritance as specified\n * as specified in the Unicode Technical Standard 35.\n */\nfunction resolveDateString(data, ca, component, width, key) {\n // From http://www.unicode.org/reports/tr35/tr35.html#Multiple_Inheritance:\n // 'In clearly specified instances, resources may inherit from within the same locale.\n // For example, ... the Buddhist calendar inherits from the Gregorian calendar.'\n var obj = data[ca] && data[ca][component] ? data[ca][component] : data.gregory[component],\n\n\n // \"sideways\" inheritance resolves strings when a key doesn't exist\n alts = {\n narrow: ['short', 'long'],\n short: ['long', 'narrow'],\n long: ['short', 'narrow']\n },\n\n\n //\n resolved = hop.call(obj, width) ? obj[width] : hop.call(obj, alts[width][0]) ? obj[alts[width][0]] : obj[alts[width][1]];\n\n // `key` wouldn't be specified for components 'dayPeriods'\n return key !== null ? resolved[key] : resolved;\n}\n\n// Define the DateTimeFormat constructor internally so it cannot be tainted\nfunction DateTimeFormatConstructor() {\n var locales = arguments[0];\n var options = arguments[1];\n\n if (!this || this === Intl) {\n return new Intl.DateTimeFormat(locales, options);\n }\n return InitializeDateTimeFormat(toObject(this), locales, options);\n}\n\ndefineProperty(Intl, 'DateTimeFormat', {\n configurable: true,\n writable: true,\n value: DateTimeFormatConstructor\n});\n\n// Must explicitly set prototypes as unwritable\ndefineProperty(DateTimeFormatConstructor, 'prototype', {\n writable: false\n});\n\n/**\n * The abstract operation InitializeDateTimeFormat accepts the arguments dateTimeFormat\n * (which must be an object), locales, and options. It initializes dateTimeFormat as a\n * DateTimeFormat object.\n */\nfunction /* 12.1.1.1 */InitializeDateTimeFormat(dateTimeFormat, locales, options) {\n // This will be a internal properties object if we're not already initialized\n var internal = getInternalProperties(dateTimeFormat);\n\n // Create an object whose props can be used to restore the values of RegExp props\n var regexpRestore = createRegExpRestore();\n\n // 1. If dateTimeFormat has an [[initializedIntlObject]] internal property with\n // value true, throw a TypeError exception.\n if (internal['[[initializedIntlObject]]'] === true) throw new TypeError('`this` object has already been initialized as an Intl object');\n\n // Need this to access the `internal` object\n defineProperty(dateTimeFormat, '__getInternalProperties', {\n value: function value() {\n // NOTE: Non-standard, for internal use only\n if (arguments[0] === secret) return internal;\n }\n });\n\n // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.\n internal['[[initializedIntlObject]]'] = true;\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n var requestedLocales = CanonicalizeLocaleList(locales);\n\n // 4. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined below) with arguments options, \"any\", and \"date\".\n options = ToDateTimeOptions(options, 'any', 'date');\n\n // 5. Let opt be a new Record.\n var opt = new Record();\n\n // 6. Let matcher be the result of calling the GetOption abstract operation\n // (defined in 9.2.9) with arguments options, \"localeMatcher\", \"string\", a List\n // containing the two String values \"lookup\" and \"best fit\", and \"best fit\".\n var matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');\n\n // 7. Set opt.[[localeMatcher]] to matcher.\n opt['[[localeMatcher]]'] = matcher;\n\n // 8. Let DateTimeFormat be the standard built-in object that is the initial\n // value of Intl.DateTimeFormat.\n var DateTimeFormat = internals.DateTimeFormat; // This is what we *really* need\n\n // 9. Let localeData be the value of the [[localeData]] internal property of\n // DateTimeFormat.\n var localeData = DateTimeFormat['[[localeData]]'];\n\n // 10. Let r be the result of calling the ResolveLocale abstract operation\n // (defined in 9.2.5) with the [[availableLocales]] internal property of\n // DateTimeFormat, requestedLocales, opt, the [[relevantExtensionKeys]]\n // internal property of DateTimeFormat, and localeData.\n var r = ResolveLocale(DateTimeFormat['[[availableLocales]]'], requestedLocales, opt, DateTimeFormat['[[relevantExtensionKeys]]'], localeData);\n\n // 11. Set the [[locale]] internal property of dateTimeFormat to the value of\n // r.[[locale]].\n internal['[[locale]]'] = r['[[locale]]'];\n\n // 12. Set the [[calendar]] internal property of dateTimeFormat to the value of\n // r.[[ca]].\n internal['[[calendar]]'] = r['[[ca]]'];\n\n // 13. Set the [[numberingSystem]] internal property of dateTimeFormat to the value of\n // r.[[nu]].\n internal['[[numberingSystem]]'] = r['[[nu]]'];\n\n // The specification doesn't tell us to do this, but it's helpful later on\n internal['[[dataLocale]]'] = r['[[dataLocale]]'];\n\n // 14. Let dataLocale be the value of r.[[dataLocale]].\n var dataLocale = r['[[dataLocale]]'];\n\n // 15. Let tz be the result of calling the [[Get]] internal method of options with\n // argument \"timeZone\".\n var tz = options.timeZone;\n\n // 16. If tz is not undefined, then\n if (tz !== undefined) {\n // a. Let tz be ToString(tz).\n // b. Convert tz to upper case as described in 6.1.\n // NOTE: If an implementation accepts additional time zone values, as permitted\n // under certain conditions by the Conformance clause, different casing\n // rules apply.\n tz = toLatinUpperCase(tz);\n\n // c. If tz is not \"UTC\", then throw a RangeError exception.\n // ###TODO: accept more time zones###\n if (tz !== 'UTC') throw new RangeError('timeZone is not supported.');\n }\n\n // 17. Set the [[timeZone]] internal property of dateTimeFormat to tz.\n internal['[[timeZone]]'] = tz;\n\n // 18. Let opt be a new Record.\n opt = new Record();\n\n // 19. For each row of Table 3, except the header row, do:\n for (var prop in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, prop)) continue;\n\n // 20. Let prop be the name given in the Property column of the row.\n // 21. Let value be the result of calling the GetOption abstract operation,\n // passing as argument options, the name given in the Property column of the\n // row, \"string\", a List containing the strings given in the Values column of\n // the row, and undefined.\n var value = GetOption(options, prop, 'string', dateTimeComponents[prop]);\n\n // 22. Set opt.[[]] to value.\n opt['[[' + prop + ']]'] = value;\n }\n\n // Assigned a value below\n var bestFormat = void 0;\n\n // 23. Let dataLocaleData be the result of calling the [[Get]] internal method of\n // localeData with argument dataLocale.\n var dataLocaleData = localeData[dataLocale];\n\n // 24. Let formats be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"formats\".\n // Note: we process the CLDR formats into the spec'd structure\n var formats = ToDateTimeFormats(dataLocaleData.formats);\n\n // 25. Let matcher be the result of calling the GetOption abstract operation with\n // arguments options, \"formatMatcher\", \"string\", a List containing the two String\n // values \"basic\" and \"best fit\", and \"best fit\".\n matcher = GetOption(options, 'formatMatcher', 'string', new List('basic', 'best fit'), 'best fit');\n\n // Optimization: caching the processed formats as a one time operation by\n // replacing the initial structure from localeData\n dataLocaleData.formats = formats;\n\n // 26. If matcher is \"basic\", then\n if (matcher === 'basic') {\n // 27. Let bestFormat be the result of calling the BasicFormatMatcher abstract\n // operation (defined below) with opt and formats.\n bestFormat = BasicFormatMatcher(opt, formats);\n\n // 28. Else\n } else {\n {\n // diverging\n var _hr = GetOption(options, 'hour12', 'boolean' /*, undefined, undefined*/);\n opt.hour12 = _hr === undefined ? dataLocaleData.hour12 : _hr;\n }\n // 29. Let bestFormat be the result of calling the BestFitFormatMatcher\n // abstract operation (defined below) with opt and formats.\n bestFormat = BestFitFormatMatcher(opt, formats);\n }\n\n // 30. For each row in Table 3, except the header row, do\n for (var _prop in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, _prop)) continue;\n\n // a. Let prop be the name given in the Property column of the row.\n // b. Let pDesc be the result of calling the [[GetOwnProperty]] internal method of\n // bestFormat with argument prop.\n // c. If pDesc is not undefined, then\n if (hop.call(bestFormat, _prop)) {\n // i. Let p be the result of calling the [[Get]] internal method of bestFormat\n // with argument prop.\n var p = bestFormat[_prop];\n {\n // diverging\n p = bestFormat._ && hop.call(bestFormat._, _prop) ? bestFormat._[_prop] : p;\n }\n\n // ii. Set the [[]] internal property of dateTimeFormat to p.\n internal['[[' + _prop + ']]'] = p;\n }\n }\n\n var pattern = void 0; // Assigned a value below\n\n // 31. Let hr12 be the result of calling the GetOption abstract operation with\n // arguments options, \"hour12\", \"boolean\", undefined, and undefined.\n var hr12 = GetOption(options, 'hour12', 'boolean' /*, undefined, undefined*/);\n\n // 32. If dateTimeFormat has an internal property [[hour]], then\n if (internal['[[hour]]']) {\n // a. If hr12 is undefined, then let hr12 be the result of calling the [[Get]]\n // internal method of dataLocaleData with argument \"hour12\".\n hr12 = hr12 === undefined ? dataLocaleData.hour12 : hr12;\n\n // b. Set the [[hour12]] internal property of dateTimeFormat to hr12.\n internal['[[hour12]]'] = hr12;\n\n // c. If hr12 is true, then\n if (hr12 === true) {\n // i. Let hourNo0 be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"hourNo0\".\n var hourNo0 = dataLocaleData.hourNo0;\n\n // ii. Set the [[hourNo0]] internal property of dateTimeFormat to hourNo0.\n internal['[[hourNo0]]'] = hourNo0;\n\n // iii. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern12\".\n pattern = bestFormat.pattern12;\n }\n\n // d. Else\n else\n // i. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern\".\n pattern = bestFormat.pattern;\n }\n\n // 33. Else\n else\n // a. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern\".\n pattern = bestFormat.pattern;\n\n // 34. Set the [[pattern]] internal property of dateTimeFormat to pattern.\n internal['[[pattern]]'] = pattern;\n\n // 35. Set the [[boundFormat]] internal property of dateTimeFormat to undefined.\n internal['[[boundFormat]]'] = undefined;\n\n // 36. Set the [[initializedDateTimeFormat]] internal property of dateTimeFormat to\n // true.\n internal['[[initializedDateTimeFormat]]'] = true;\n\n // In ES3, we need to pre-bind the format() function\n if (es3) dateTimeFormat.format = GetFormatDateTime.call(dateTimeFormat);\n\n // Restore the RegExp properties\n regexpRestore();\n\n // Return the newly initialised object\n return dateTimeFormat;\n}\n\n/**\n * Several DateTimeFormat algorithms use values from the following table, which provides\n * property names and allowable values for the components of date and time formats:\n */\nvar dateTimeComponents = {\n weekday: [\"narrow\", \"short\", \"long\"],\n era: [\"narrow\", \"short\", \"long\"],\n year: [\"2-digit\", \"numeric\"],\n month: [\"2-digit\", \"numeric\", \"narrow\", \"short\", \"long\"],\n day: [\"2-digit\", \"numeric\"],\n hour: [\"2-digit\", \"numeric\"],\n minute: [\"2-digit\", \"numeric\"],\n second: [\"2-digit\", \"numeric\"],\n timeZoneName: [\"short\", \"long\"]\n};\n\n/**\n * When the ToDateTimeOptions abstract operation is called with arguments options,\n * required, and defaults, the following steps are taken:\n */\nfunction ToDateTimeFormats(formats) {\n if (Object.prototype.toString.call(formats) === '[object Array]') {\n return formats;\n }\n return createDateTimeFormats(formats);\n}\n\n/**\n * When the ToDateTimeOptions abstract operation is called with arguments options,\n * required, and defaults, the following steps are taken:\n */\nfunction ToDateTimeOptions(options, required, defaults) {\n // 1. If options is undefined, then let options be null, else let options be\n // ToObject(options).\n if (options === undefined) options = null;else {\n // (#12) options needs to be a Record, but it also needs to inherit properties\n var opt2 = toObject(options);\n options = new Record();\n\n for (var k in opt2) {\n options[k] = opt2[k];\n }\n }\n\n // 2. Let create be the standard built-in function object defined in ES5, 15.2.3.5.\n var create = objCreate;\n\n // 3. Let options be the result of calling the [[Call]] internal method of create with\n // undefined as the this value and an argument list containing the single item\n // options.\n options = create(options);\n\n // 4. Let needDefaults be true.\n var needDefaults = true;\n\n // 5. If required is \"date\" or \"any\", then\n if (required === 'date' || required === 'any') {\n // a. For each of the property names \"weekday\", \"year\", \"month\", \"day\":\n // i. If the result of calling the [[Get]] internal method of options with the\n // property name is not undefined, then let needDefaults be false.\n if (options.weekday !== undefined || options.year !== undefined || options.month !== undefined || options.day !== undefined) needDefaults = false;\n }\n\n // 6. If required is \"time\" or \"any\", then\n if (required === 'time' || required === 'any') {\n // a. For each of the property names \"hour\", \"minute\", \"second\":\n // i. If the result of calling the [[Get]] internal method of options with the\n // property name is not undefined, then let needDefaults be false.\n if (options.hour !== undefined || options.minute !== undefined || options.second !== undefined) needDefaults = false;\n }\n\n // 7. If needDefaults is true and defaults is either \"date\" or \"all\", then\n if (needDefaults && (defaults === 'date' || defaults === 'all'))\n // a. For each of the property names \"year\", \"month\", \"day\":\n // i. Call the [[DefineOwnProperty]] internal method of options with the\n // property name, Property Descriptor {[[Value]]: \"numeric\", [[Writable]]:\n // true, [[Enumerable]]: true, [[Configurable]]: true}, and false.\n options.year = options.month = options.day = 'numeric';\n\n // 8. If needDefaults is true and defaults is either \"time\" or \"all\", then\n if (needDefaults && (defaults === 'time' || defaults === 'all'))\n // a. For each of the property names \"hour\", \"minute\", \"second\":\n // i. Call the [[DefineOwnProperty]] internal method of options with the\n // property name, Property Descriptor {[[Value]]: \"numeric\", [[Writable]]:\n // true, [[Enumerable]]: true, [[Configurable]]: true}, and false.\n options.hour = options.minute = options.second = 'numeric';\n\n // 9. Return options.\n return options;\n}\n\n/**\n * When the BasicFormatMatcher abstract operation is called with two arguments options and\n * formats, the following steps are taken:\n */\nfunction BasicFormatMatcher(options, formats) {\n // 1. Let removalPenalty be 120.\n var removalPenalty = 120;\n\n // 2. Let additionPenalty be 20.\n var additionPenalty = 20;\n\n // 3. Let longLessPenalty be 8.\n var longLessPenalty = 8;\n\n // 4. Let longMorePenalty be 6.\n var longMorePenalty = 6;\n\n // 5. Let shortLessPenalty be 6.\n var shortLessPenalty = 6;\n\n // 6. Let shortMorePenalty be 3.\n var shortMorePenalty = 3;\n\n // 7. Let bestScore be -Infinity.\n var bestScore = -Infinity;\n\n // 8. Let bestFormat be undefined.\n var bestFormat = void 0;\n\n // 9. Let i be 0.\n var i = 0;\n\n // 10. Assert: formats is an Array object.\n\n // 11. Let len be the result of calling the [[Get]] internal method of formats with argument \"length\".\n var len = formats.length;\n\n // 12. Repeat while i < len:\n while (i < len) {\n // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).\n var format = formats[i];\n\n // b. Let score be 0.\n var score = 0;\n\n // c. For each property shown in Table 3:\n for (var property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, property)) continue;\n\n // i. Let optionsProp be options.[[]].\n var optionsProp = options['[[' + property + ']]'];\n\n // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format\n // with argument property.\n // iii. If formatPropDesc is not undefined, then\n // 1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.\n var formatProp = hop.call(format, property) ? format[property] : undefined;\n\n // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by\n // additionPenalty.\n if (optionsProp === undefined && formatProp !== undefined) score -= additionPenalty;\n\n // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by\n // removalPenalty.\n else if (optionsProp !== undefined && formatProp === undefined) score -= removalPenalty;\n\n // vi. Else\n else {\n // 1. Let values be the array [\"2-digit\", \"numeric\", \"narrow\", \"short\",\n // \"long\"].\n var values = ['2-digit', 'numeric', 'narrow', 'short', 'long'];\n\n // 2. Let optionsPropIndex be the index of optionsProp within values.\n var optionsPropIndex = arrIndexOf.call(values, optionsProp);\n\n // 3. Let formatPropIndex be the index of formatProp within values.\n var formatPropIndex = arrIndexOf.call(values, formatProp);\n\n // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).\n var delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);\n\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta === 2) score -= longMorePenalty;\n\n // 6. Else if delta = 1, decrease score by shortMorePenalty.\n else if (delta === 1) score -= shortMorePenalty;\n\n // 7. Else if delta = -1, decrease score by shortLessPenalty.\n else if (delta === -1) score -= shortLessPenalty;\n\n // 8. Else if delta = -2, decrease score by longLessPenalty.\n else if (delta === -2) score -= longLessPenalty;\n }\n }\n\n // d. If score > bestScore, then\n if (score > bestScore) {\n // i. Let bestScore be score.\n bestScore = score;\n\n // ii. Let bestFormat be format.\n bestFormat = format;\n }\n\n // e. Increase i by 1.\n i++;\n }\n\n // 13. Return bestFormat.\n return bestFormat;\n}\n\n/**\n * When the BestFitFormatMatcher abstract operation is called with two arguments options\n * and formats, it performs implementation dependent steps, which should return a set of\n * component representations that a typical user of the selected locale would perceive as\n * at least as good as the one returned by BasicFormatMatcher.\n *\n * This polyfill defines the algorithm to be the same as BasicFormatMatcher,\n * with the addition of bonus points awarded where the requested format is of\n * the same data type as the potentially matching format.\n *\n * This algo relies on the concept of closest distance matching described here:\n * http://unicode.org/reports/tr35/tr35-dates.html#Matching_Skeletons\n * Typically a “best match” is found using a closest distance match, such as:\n *\n * Symbols requesting a best choice for the locale are replaced.\n * j → one of {H, k, h, K}; C → one of {a, b, B}\n * -> Covered by cldr.js matching process\n *\n * For fields with symbols representing the same type (year, month, day, etc):\n * Most symbols have a small distance from each other.\n * M ≅ L; E ≅ c; a ≅ b ≅ B; H ≅ k ≅ h ≅ K; ...\n * -> Covered by cldr.js matching process\n *\n * Width differences among fields, other than those marking text vs numeric, are given small distance from each other.\n * MMM ≅ MMMM\n * MM ≅ M\n * Numeric and text fields are given a larger distance from each other.\n * MMM ≈ MM\n * Symbols representing substantial differences (week of year vs week of month) are given much larger a distances from each other.\n * d ≋ D; ...\n * Missing or extra fields cause a match to fail. (But see Missing Skeleton Fields).\n *\n *\n * For example,\n *\n * { month: 'numeric', day: 'numeric' }\n *\n * should match\n *\n * { month: '2-digit', day: '2-digit' }\n *\n * rather than\n *\n * { month: 'short', day: 'numeric' }\n *\n * This makes sense because a user requesting a formatted date with numeric parts would\n * not expect to see the returned format containing narrow, short or long part names\n */\nfunction BestFitFormatMatcher(options, formats) {\n /** Diverging: this block implements the hack for single property configuration, eg.:\n *\n * `new Intl.DateTimeFormat('en', {day: 'numeric'})`\n *\n * should produce a single digit with the day of the month. This is needed because\n * CLDR `availableFormats` data structure doesn't cover these cases.\n */\n {\n var optionsPropNames = [];\n for (var property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, property)) continue;\n\n if (options['[[' + property + ']]'] !== undefined) {\n optionsPropNames.push(property);\n }\n }\n if (optionsPropNames.length === 1) {\n var _bestFormat = generateSyntheticFormat(optionsPropNames[0], options['[[' + optionsPropNames[0] + ']]']);\n if (_bestFormat) {\n return _bestFormat;\n }\n }\n }\n\n // 1. Let removalPenalty be 120.\n var removalPenalty = 120;\n\n // 2. Let additionPenalty be 20.\n var additionPenalty = 20;\n\n // 3. Let longLessPenalty be 8.\n var longLessPenalty = 8;\n\n // 4. Let longMorePenalty be 6.\n var longMorePenalty = 6;\n\n // 5. Let shortLessPenalty be 6.\n var shortLessPenalty = 6;\n\n // 6. Let shortMorePenalty be 3.\n var shortMorePenalty = 3;\n\n var patternPenalty = 2;\n\n var hour12Penalty = 1;\n\n // 7. Let bestScore be -Infinity.\n var bestScore = -Infinity;\n\n // 8. Let bestFormat be undefined.\n var bestFormat = void 0;\n\n // 9. Let i be 0.\n var i = 0;\n\n // 10. Assert: formats is an Array object.\n\n // 11. Let len be the result of calling the [[Get]] internal method of formats with argument \"length\".\n var len = formats.length;\n\n // 12. Repeat while i < len:\n while (i < len) {\n // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).\n var format = formats[i];\n\n // b. Let score be 0.\n var score = 0;\n\n // c. For each property shown in Table 3:\n for (var _property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, _property)) continue;\n\n // i. Let optionsProp be options.[[]].\n var optionsProp = options['[[' + _property + ']]'];\n\n // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format\n // with argument property.\n // iii. If formatPropDesc is not undefined, then\n // 1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.\n var formatProp = hop.call(format, _property) ? format[_property] : undefined;\n\n // Diverging: using the default properties produced by the pattern/skeleton\n // to match it with user options, and apply a penalty\n var patternProp = hop.call(format._, _property) ? format._[_property] : undefined;\n if (optionsProp !== patternProp) {\n score -= patternPenalty;\n }\n\n // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by\n // additionPenalty.\n if (optionsProp === undefined && formatProp !== undefined) score -= additionPenalty;\n\n // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by\n // removalPenalty.\n else if (optionsProp !== undefined && formatProp === undefined) score -= removalPenalty;\n\n // vi. Else\n else {\n // 1. Let values be the array [\"2-digit\", \"numeric\", \"narrow\", \"short\",\n // \"long\"].\n var values = ['2-digit', 'numeric', 'narrow', 'short', 'long'];\n\n // 2. Let optionsPropIndex be the index of optionsProp within values.\n var optionsPropIndex = arrIndexOf.call(values, optionsProp);\n\n // 3. Let formatPropIndex be the index of formatProp within values.\n var formatPropIndex = arrIndexOf.call(values, formatProp);\n\n // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).\n var delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);\n\n {\n // diverging from spec\n // When the bestFit argument is true, subtract additional penalty where data types are not the same\n if (formatPropIndex <= 1 && optionsPropIndex >= 2 || formatPropIndex >= 2 && optionsPropIndex <= 1) {\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta > 0) score -= longMorePenalty;else if (delta < 0) score -= longLessPenalty;\n } else {\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta > 1) score -= shortMorePenalty;else if (delta < -1) score -= shortLessPenalty;\n }\n }\n }\n }\n\n {\n // diverging to also take into consideration differences between 12 or 24 hours\n // which is special for the best fit only.\n if (format._.hour12 !== options.hour12) {\n score -= hour12Penalty;\n }\n }\n\n // d. If score > bestScore, then\n if (score > bestScore) {\n // i. Let bestScore be score.\n bestScore = score;\n // ii. Let bestFormat be format.\n bestFormat = format;\n }\n\n // e. Increase i by 1.\n i++;\n }\n\n // 13. Return bestFormat.\n return bestFormat;\n}\n\n/* 12.2.3 */internals.DateTimeFormat = {\n '[[availableLocales]]': [],\n '[[relevantExtensionKeys]]': ['ca', 'nu'],\n '[[localeData]]': {}\n};\n\n/**\n * When the supportedLocalesOf method of Intl.DateTimeFormat is called, the\n * following steps are taken:\n */\n/* 12.2.2 */\ndefineProperty(Intl.DateTimeFormat, 'supportedLocalesOf', {\n configurable: true,\n writable: true,\n value: fnBind.call(function (locales) {\n // Bound functions only have the `this` value altered if being used as a constructor,\n // this lets us imitate a native function that has no constructor\n if (!hop.call(this, '[[availableLocales]]')) throw new TypeError('supportedLocalesOf() is not a constructor');\n\n // Create an object whose props can be used to restore the values of RegExp props\n var regexpRestore = createRegExpRestore(),\n\n\n // 1. If options is not provided, then let options be undefined.\n options = arguments[1],\n\n\n // 2. Let availableLocales be the value of the [[availableLocales]] internal\n // property of the standard built-in object that is the initial value of\n // Intl.NumberFormat.\n\n availableLocales = this['[[availableLocales]]'],\n\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n requestedLocales = CanonicalizeLocaleList(locales);\n\n // Restore the RegExp properties\n regexpRestore();\n\n // 4. Return the result of calling the SupportedLocales abstract operation\n // (defined in 9.2.8) with arguments availableLocales, requestedLocales,\n // and options.\n return SupportedLocales(availableLocales, requestedLocales, options);\n }, internals.NumberFormat)\n});\n\n/**\n * This named accessor property returns a function that formats a number\n * according to the effective locale and the formatting options of this\n * DateTimeFormat object.\n */\n/* 12.3.2 */defineProperty(Intl.DateTimeFormat.prototype, 'format', {\n configurable: true,\n get: GetFormatDateTime\n});\n\nfunction GetFormatDateTime() {\n var internal = this !== null && babelHelpers$1[\"typeof\"](this) === 'object' && getInternalProperties(this);\n\n // Satisfy test 12.3_b\n if (!internal || !internal['[[initializedDateTimeFormat]]']) throw new TypeError('`this` value for format() is not an initialized Intl.DateTimeFormat object.');\n\n // The value of the [[Get]] attribute is a function that takes the following\n // steps:\n\n // 1. If the [[boundFormat]] internal property of this DateTimeFormat object\n // is undefined, then:\n if (internal['[[boundFormat]]'] === undefined) {\n // a. Let F be a Function object, with internal properties set as\n // specified for built-in functions in ES5, 15, or successor, and the\n // length property set to 0, that takes the argument date and\n // performs the following steps:\n var F = function F() {\n var date = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0];\n\n // i. If date is not provided or is undefined, then let x be the\n // result as if by the expression Date.now() where Date.now is\n // the standard built-in function defined in ES5, 15.9.4.4.\n // ii. Else let x be ToNumber(date).\n // iii. Return the result of calling the FormatDateTime abstract\n // operation (defined below) with arguments this and x.\n var x = date === undefined ? Date.now() : toNumber(date);\n return FormatDateTime(this, x);\n };\n // b. Let bind be the standard built-in function object defined in ES5,\n // 15.3.4.5.\n // c. Let bf be the result of calling the [[Call]] internal method of\n // bind with F as the this value and an argument list containing\n // the single item this.\n var bf = fnBind.call(F, this);\n // d. Set the [[boundFormat]] internal property of this NumberFormat\n // object to bf.\n internal['[[boundFormat]]'] = bf;\n }\n // Return the value of the [[boundFormat]] internal property of this\n // NumberFormat object.\n return internal['[[boundFormat]]'];\n}\n\nfunction formatToParts$1() {\n var date = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0];\n\n var internal = this !== null && babelHelpers$1[\"typeof\"](this) === 'object' && getInternalProperties(this);\n\n if (!internal || !internal['[[initializedDateTimeFormat]]']) throw new TypeError('`this` value for formatToParts() is not an initialized Intl.DateTimeFormat object.');\n\n var x = date === undefined ? Date.now() : toNumber(date);\n return FormatToPartsDateTime(this, x);\n}\n\nObject.defineProperty(Intl.DateTimeFormat.prototype, 'formatToParts', {\n enumerable: false,\n writable: true,\n configurable: true,\n value: formatToParts$1\n});\n\nfunction CreateDateTimeParts(dateTimeFormat, x) {\n // 1. If x is not a finite Number, then throw a RangeError exception.\n if (!isFinite(x)) throw new RangeError('Invalid valid date passed to format');\n\n var internal = dateTimeFormat.__getInternalProperties(secret);\n\n // Creating restore point for properties on the RegExp object... please wait\n /* let regexpRestore = */createRegExpRestore(); // ###TODO: review this\n\n // 2. Let locale be the value of the [[locale]] internal property of dateTimeFormat.\n var locale = internal['[[locale]]'];\n\n // 3. Let nf be the result of creating a new NumberFormat object as if by the\n // expression new Intl.NumberFormat([locale], {useGrouping: false}) where\n // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.\n var nf = new Intl.NumberFormat([locale], { useGrouping: false });\n\n // 4. Let nf2 be the result of creating a new NumberFormat object as if by the\n // expression new Intl.NumberFormat([locale], {minimumIntegerDigits: 2, useGrouping:\n // false}) where Intl.NumberFormat is the standard built-in constructor defined in\n // 11.1.3.\n var nf2 = new Intl.NumberFormat([locale], { minimumIntegerDigits: 2, useGrouping: false });\n\n // 5. Let tm be the result of calling the ToLocalTime abstract operation (defined\n // below) with x, the value of the [[calendar]] internal property of dateTimeFormat,\n // and the value of the [[timeZone]] internal property of dateTimeFormat.\n var tm = ToLocalTime(x, internal['[[calendar]]'], internal['[[timeZone]]']);\n\n // 6. Let result be the value of the [[pattern]] internal property of dateTimeFormat.\n var pattern = internal['[[pattern]]'];\n\n // 7.\n var result = new List();\n\n // 8.\n var index = 0;\n\n // 9.\n var beginIndex = pattern.indexOf('{');\n\n // 10.\n var endIndex = 0;\n\n // Need the locale minus any extensions\n var dataLocale = internal['[[dataLocale]]'];\n\n // Need the calendar data from CLDR\n var localeData = internals.DateTimeFormat['[[localeData]]'][dataLocale].calendars;\n var ca = internal['[[calendar]]'];\n\n // 11.\n while (beginIndex !== -1) {\n var fv = void 0;\n // a.\n endIndex = pattern.indexOf('}', beginIndex);\n // b.\n if (endIndex === -1) {\n throw new Error('Unclosed pattern');\n }\n // c.\n if (beginIndex > index) {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substring(index, beginIndex)\n });\n }\n // d.\n var p = pattern.substring(beginIndex + 1, endIndex);\n // e.\n if (dateTimeComponents.hasOwnProperty(p)) {\n // i. Let f be the value of the [[

]] internal property of dateTimeFormat.\n var f = internal['[[' + p + ']]'];\n // ii. Let v be the value of tm.[[

]].\n var v = tm['[[' + p + ']]'];\n // iii. If p is \"year\" and v ≤ 0, then let v be 1 - v.\n if (p === 'year' && v <= 0) {\n v = 1 - v;\n }\n // iv. If p is \"month\", then increase v by 1.\n else if (p === 'month') {\n v++;\n }\n // v. If p is \"hour\" and the value of the [[hour12]] internal property of\n // dateTimeFormat is true, then\n else if (p === 'hour' && internal['[[hour12]]'] === true) {\n // 1. Let v be v modulo 12.\n v = v % 12;\n // 2. If v is 0 and the value of the [[hourNo0]] internal property of\n // dateTimeFormat is true, then let v be 12.\n if (v === 0 && internal['[[hourNo0]]'] === true) {\n v = 12;\n }\n }\n\n // vi. If f is \"numeric\", then\n if (f === 'numeric') {\n // 1. Let fv be the result of calling the FormatNumber abstract operation\n // (defined in 11.3.2) with arguments nf and v.\n fv = FormatNumber(nf, v);\n }\n // vii. Else if f is \"2-digit\", then\n else if (f === '2-digit') {\n // 1. Let fv be the result of calling the FormatNumber abstract operation\n // with arguments nf2 and v.\n fv = FormatNumber(nf2, v);\n // 2. If the length of fv is greater than 2, let fv be the substring of fv\n // containing the last two characters.\n if (fv.length > 2) {\n fv = fv.slice(-2);\n }\n }\n // viii. Else if f is \"narrow\", \"short\", or \"long\", then let fv be a String\n // value representing f in the desired form; the String value depends upon\n // the implementation and the effective locale and calendar of\n // dateTimeFormat. If p is \"month\", then the String value may also depend\n // on whether dateTimeFormat has a [[day]] internal property. If p is\n // \"timeZoneName\", then the String value may also depend on the value of\n // the [[inDST]] field of tm.\n else if (f in dateWidths) {\n switch (p) {\n case 'month':\n fv = resolveDateString(localeData, ca, 'months', f, tm['[[' + p + ']]']);\n break;\n\n case 'weekday':\n try {\n fv = resolveDateString(localeData, ca, 'days', f, tm['[[' + p + ']]']);\n // fv = resolveDateString(ca.days, f)[tm['[['+ p +']]']];\n } catch (e) {\n throw new Error('Could not find weekday data for locale ' + locale);\n }\n break;\n\n case 'timeZoneName':\n fv = ''; // ###TODO\n break;\n\n case 'era':\n try {\n fv = resolveDateString(localeData, ca, 'eras', f, tm['[[' + p + ']]']);\n } catch (e) {\n throw new Error('Could not find era data for locale ' + locale);\n }\n break;\n\n default:\n fv = tm['[[' + p + ']]'];\n }\n }\n // ix\n arrPush.call(result, {\n type: p,\n value: fv\n });\n // f.\n } else if (p === 'ampm') {\n // i.\n var _v = tm['[[hour]]'];\n // ii./iii.\n fv = resolveDateString(localeData, ca, 'dayPeriods', _v > 11 ? 'pm' : 'am', null);\n // iv.\n arrPush.call(result, {\n type: 'dayPeriod',\n value: fv\n });\n // g.\n } else {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substring(beginIndex, endIndex + 1)\n });\n }\n // h.\n index = endIndex + 1;\n // i.\n beginIndex = pattern.indexOf('{', index);\n }\n // 12.\n if (endIndex < pattern.length - 1) {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substr(endIndex + 1)\n });\n }\n // 13.\n return result;\n}\n\n/**\n * When the FormatDateTime abstract operation is called with arguments dateTimeFormat\n * (which must be an object initialized as a DateTimeFormat) and x (which must be a Number\n * value), it returns a String value representing x (interpreted as a time value as\n * specified in ES5, 15.9.1.1) according to the effective locale and the formatting\n * options of dateTimeFormat.\n */\nfunction FormatDateTime(dateTimeFormat, x) {\n var parts = CreateDateTimeParts(dateTimeFormat, x);\n var result = '';\n\n for (var i = 0; parts.length > i; i++) {\n var part = parts[i];\n result += part.value;\n }\n return result;\n}\n\nfunction FormatToPartsDateTime(dateTimeFormat, x) {\n var parts = CreateDateTimeParts(dateTimeFormat, x);\n var result = [];\n for (var i = 0; parts.length > i; i++) {\n var part = parts[i];\n result.push({\n type: part.type,\n value: part.value\n });\n }\n return result;\n}\n\n/**\n * When the ToLocalTime abstract operation is called with arguments date, calendar, and\n * timeZone, the following steps are taken:\n */\nfunction ToLocalTime(date, calendar, timeZone) {\n // 1. Apply calendrical calculations on date for the given calendar and time zone to\n // produce weekday, era, year, month, day, hour, minute, second, and inDST values.\n // The calculations should use best available information about the specified\n // calendar and time zone. If the calendar is \"gregory\", then the calculations must\n // match the algorithms specified in ES5, 15.9.1, except that calculations are not\n // bound by the restrictions on the use of best available information on time zones\n // for local time zone adjustment and daylight saving time adjustment imposed by\n // ES5, 15.9.1.7 and 15.9.1.8.\n // ###TODO###\n var d = new Date(date),\n m = 'get' + (timeZone || '');\n\n // 2. Return a Record with fields [[weekday]], [[era]], [[year]], [[month]], [[day]],\n // [[hour]], [[minute]], [[second]], and [[inDST]], each with the corresponding\n // calculated value.\n return new Record({\n '[[weekday]]': d[m + 'Day'](),\n '[[era]]': +(d[m + 'FullYear']() >= 0),\n '[[year]]': d[m + 'FullYear'](),\n '[[month]]': d[m + 'Month'](),\n '[[day]]': d[m + 'Date'](),\n '[[hour]]': d[m + 'Hours'](),\n '[[minute]]': d[m + 'Minutes'](),\n '[[second]]': d[m + 'Seconds'](),\n '[[inDST]]': false // ###TODO###\n });\n}\n\n/**\n * The function returns a new object whose properties and attributes are set as if\n * constructed by an object literal assigning to each of the following properties the\n * value of the corresponding internal property of this DateTimeFormat object (see 12.4):\n * locale, calendar, numberingSystem, timeZone, hour12, weekday, era, year, month, day,\n * hour, minute, second, and timeZoneName. Properties whose corresponding internal\n * properties are not present are not assigned.\n */\n/* 12.3.3 */defineProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', {\n writable: true,\n configurable: true,\n value: function value() {\n var prop = void 0,\n descs = new Record(),\n props = ['locale', 'calendar', 'numberingSystem', 'timeZone', 'hour12', 'weekday', 'era', 'year', 'month', 'day', 'hour', 'minute', 'second', 'timeZoneName'],\n internal = this !== null && babelHelpers$1[\"typeof\"](this) === 'object' && getInternalProperties(this);\n\n // Satisfy test 12.3_b\n if (!internal || !internal['[[initializedDateTimeFormat]]']) throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.DateTimeFormat object.');\n\n for (var i = 0, max = props.length; i < max; i++) {\n if (hop.call(internal, prop = '[[' + props[i] + ']]')) descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };\n }\n\n return objCreate({}, descs);\n }\n});\n\nvar ls = Intl.__localeSensitiveProtos = {\n Number: {},\n Date: {}\n};\n\n/**\n * When the toLocaleString method is called with optional arguments locales and options,\n * the following steps are taken:\n */\n/* 13.2.1 */ls.Number.toLocaleString = function () {\n // Satisfy test 13.2.1_1\n if (Object.prototype.toString.call(this) !== '[object Number]') throw new TypeError('`this` value must be a number for Number.prototype.toLocaleString()');\n\n // 1. Let x be this Number value (as defined in ES5, 15.7.4).\n // 2. If locales is not provided, then let locales be undefined.\n // 3. If options is not provided, then let options be undefined.\n // 4. Let numberFormat be the result of creating a new object as if by the\n // expression new Intl.NumberFormat(locales, options) where\n // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.\n // 5. Return the result of calling the FormatNumber abstract operation\n // (defined in 11.3.2) with arguments numberFormat and x.\n return FormatNumber(new NumberFormatConstructor(arguments[0], arguments[1]), this);\n};\n\n/**\n * When the toLocaleString method is called with optional arguments locales and options,\n * the following steps are taken:\n */\n/* 13.3.1 */ls.Date.toLocaleString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]') throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n var x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x)) return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n var locales = arguments[0];\n\n // 4. If options is not provided, then let options be undefined.\n var options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"any\", and \"all\".\n options = ToDateTimeOptions(options, 'any', 'all');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n var dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\n/**\n * When the toLocaleDateString method is called with optional arguments locales and\n * options, the following steps are taken:\n */\n/* 13.3.2 */ls.Date.toLocaleDateString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]') throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleDateString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n var x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x)) return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n var locales = arguments[0],\n\n\n // 4. If options is not provided, then let options be undefined.\n options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"date\", and \"date\".\n options = ToDateTimeOptions(options, 'date', 'date');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n var dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\n/**\n * When the toLocaleTimeString method is called with optional arguments locales and\n * options, the following steps are taken:\n */\n/* 13.3.3 */ls.Date.toLocaleTimeString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]') throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleTimeString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n var x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x)) return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n var locales = arguments[0];\n\n // 4. If options is not provided, then let options be undefined.\n var options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"time\", and \"time\".\n options = ToDateTimeOptions(options, 'time', 'time');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n var dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\ndefineProperty(Intl, '__applyLocaleSensitivePrototypes', {\n writable: true,\n configurable: true,\n value: function value() {\n defineProperty(Number.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Number.toLocaleString });\n // Need this here for IE 8, to avoid the _DontEnum_ bug\n defineProperty(Date.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Date.toLocaleString });\n\n for (var k in ls.Date) {\n if (hop.call(ls.Date, k)) defineProperty(Date.prototype, k, { writable: true, configurable: true, value: ls.Date[k] });\n }\n }\n});\n\n/**\n * Can't really ship a single script with data for hundreds of locales, so we provide\n * this __addLocaleData method as a means for the developer to add the data on an\n * as-needed basis\n */\ndefineProperty(Intl, '__addLocaleData', {\n value: function value(data) {\n if (!IsStructurallyValidLanguageTag(data.locale)) throw new Error(\"Object passed doesn't identify itself with a valid language tag\");\n\n addLocaleData(data, data.locale);\n }\n});\n\nfunction addLocaleData(data, tag) {\n // Both NumberFormat and DateTimeFormat require number data, so throw if it isn't present\n if (!data.number) throw new Error(\"Object passed doesn't contain locale data for Intl.NumberFormat\");\n\n var locale = void 0,\n locales = [tag],\n parts = tag.split('-');\n\n // Create fallbacks for locale data with scripts, e.g. Latn, Hans, Vaii, etc\n if (parts.length > 2 && parts[1].length === 4) arrPush.call(locales, parts[0] + '-' + parts[2]);\n\n while (locale = arrShift.call(locales)) {\n // Add to NumberFormat internal properties as per 11.2.3\n arrPush.call(internals.NumberFormat['[[availableLocales]]'], locale);\n internals.NumberFormat['[[localeData]]'][locale] = data.number;\n\n // ...and DateTimeFormat internal properties as per 12.2.3\n if (data.date) {\n data.date.nu = data.number.nu;\n arrPush.call(internals.DateTimeFormat['[[availableLocales]]'], locale);\n internals.DateTimeFormat['[[localeData]]'][locale] = data.date;\n }\n }\n\n // If this is the first set of locale data added, make it the default\n if (defaultLocale === undefined) setDefaultLocale(tag);\n}\n\ndefineProperty(Intl, '__disableRegExpRestore', {\n value: function value() {\n internals.disableRegExpRestore = true;\n }\n});\n\nmodule.exports = Intl;","IntlPolyfill.__addLocaleData({locale:\"ca\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1}, {0}\",full:\"{1} 'a' 'les' {0}\",long:\"{1}, {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E d\",Ehm:\"E h:mm a\",EHm:\"E H:mm\",Ehms:\"E h:mm:ss a\",EHms:\"E H:mm:ss\",Gy:\"y G\",GyMMM:\"LLL y G\",GyMMMd:\"d MMM y G\",GyMMMEd:\"E, d MMM y G\",GyMMMM:\"LLLL 'de' y G\",GyMMMMd:\"d MMMM 'de' y G\",GyMMMMEd:\"E, d MMMM 'de' y G\",\"h\":\"h a\",\"H\":\"H\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d/M\",MEd:\"E d/M\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E, d MMM\",MMMMd:\"d MMMM\",MMMMEd:\"E, d MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M/y\",yMd:\"d/M/y\",yMEd:\"E, d/M/y\",yMMM:\"LLL 'de' y\",yMMMd:\"d MMM y\",yMMMEd:\"E, d MMM y\",yMMMM:\"LLLL 'de' y\",yMMMMd:\"d MMMM 'de' y\",yMMMMEd:\"E, d MMMM 'de' y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE, d MMMM 'de' y\",yMMMMd:\"d MMMM 'de' y\",yMMMd:\"d MMM y\",yMd:\"d/M/yy\"},timeFormats:{hmmsszzzz:\"H:mm:ss zzzz\",hmsz:\"H:mm:ss z\",hms:\"H:mm:ss\",hm:\"H:mm\"}},calendars:{buddhist:{months:{narrow:[\"GN\",\"FB\",\"MÇ\",\"AB\",\"MG\",\"JN\",\"JL\",\"AG\",\"ST\",\"OC\",\"NV\",\"DS\"],short:[\"gen.\",\"febr.\",\"març\",\"abr.\",\"maig\",\"juny\",\"jul.\",\"ag.\",\"set.\",\"oct.\",\"nov.\",\"des.\"],long:[\"de gener\",\"de febrer\",\"de març\",\"d’abril\",\"de maig\",\"de juny\",\"de juliol\",\"d’agost\",\"de setembre\",\"d’octubre\",\"de novembre\",\"de desembre\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"eB\"],short:[\"eB\"],long:[\"eB\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],long:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],long:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},gregory:{months:{narrow:[\"GN\",\"FB\",\"MÇ\",\"AB\",\"MG\",\"JN\",\"JL\",\"AG\",\"ST\",\"OC\",\"NV\",\"DS\"],short:[\"gen.\",\"febr.\",\"març\",\"abr.\",\"maig\",\"juny\",\"jul.\",\"ag.\",\"set.\",\"oct.\",\"nov.\",\"des.\"],long:[\"de gener\",\"de febrer\",\"de març\",\"d’abril\",\"de maig\",\"de juny\",\"de juliol\",\"d’agost\",\"de setembre\",\"d’octubre\",\"de novembre\",\"de desembre\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"aC\",\"dC\",\"AEC\",\"EC\"],short:[\"aC\",\"dC\",\"AEC\",\"EC\"],long:[\"abans de Crist\",\"després de Crist\",\"abans de l’Era Comuna\",\"Era Comuna\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"],long:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},japanese:{months:{narrow:[\"GN\",\"FB\",\"MÇ\",\"AB\",\"MG\",\"JN\",\"JL\",\"AG\",\"ST\",\"OC\",\"NV\",\"DS\"],short:[\"gen.\",\"febr.\",\"març\",\"abr.\",\"maig\",\"juny\",\"jul.\",\"ag.\",\"set.\",\"oct.\",\"nov.\",\"des.\"],long:[\"de gener\",\"de febrer\",\"de març\",\"d’abril\",\"de maig\",\"de juny\",\"de juliol\",\"d’agost\",\"de setembre\",\"d’octubre\",\"de novembre\",\"de desembre\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},roc:{months:{narrow:[\"GN\",\"FB\",\"MÇ\",\"AB\",\"MG\",\"JN\",\"JL\",\"AG\",\"ST\",\"OC\",\"NV\",\"DS\"],short:[\"gen.\",\"febr.\",\"març\",\"abr.\",\"maig\",\"juny\",\"jul.\",\"ag.\",\"set.\",\"oct.\",\"nov.\",\"des.\"],long:[\"de gener\",\"de febrer\",\"de març\",\"d’abril\",\"de maig\",\"de juny\",\"de juliol\",\"d’agost\",\"de setembre\",\"d’octubre\",\"de novembre\",\"de desembre\"]},days:{narrow:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],short:[\"dg.\",\"dl.\",\"dt.\",\"dc.\",\"dj.\",\"dv.\",\"ds.\"],long:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"]},eras:{narrow:[\"Before R.O.C.\",\"R.O.C.\"],short:[\"Before R.O.C.\",\"R.O.C.\"],long:[\"Before R.O.C.\",\"R.O.C.\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{number} {currency}\",negativePattern:\"{minusSign}{number} {currency}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\",\",group:\".\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"AU$\",CNY:\"¥\",ESP:\"₧\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"JP¥\",KRW:\"₩\",NZD:\"NZ$\",THB:\"฿\",TWD:\"NT$\",VND:\"₫\",XAF:\"FCFA\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"de\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1}, {0}\",medium:\"{1}, {0}\",full:\"{1} 'um' {0}\",long:\"{1} 'um' {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E, d.\",Ehm:\"E h:mm a\",EHm:\"E, HH:mm\",Ehms:\"E, h:mm:ss a\",EHms:\"E, HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"d. MMM y G\",GyMMMEd:\"E, d. MMM y G\",\"h\":\"h a\",\"H\":\"HH 'Uhr'\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d.M.\",MEd:\"E, d.M.\",MMd:\"d.MM.\",MMdd:\"dd.MM.\",MMM:\"LLL\",MMMd:\"d. MMM\",MMMEd:\"E, d. MMM\",MMMMd:\"d. MMMM\",MMMMEd:\"E, d. MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M.y\",yMd:\"d.M.y\",yMEd:\"E, d.M.y\",yMM:\"MM.y\",yMMdd:\"dd.MM.y\",yMMM:\"MMM y\",yMMMd:\"d. MMM y\",yMMMEd:\"E, d. MMM y\",yMMMM:\"MMMM y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE, d. MMMM y\",yMMMMd:\"d. MMMM y\",yMMMd:\"dd.MM.y\",yMd:\"dd.MM.yy\"},timeFormats:{hmmsszzzz:\"HH:mm:ss zzzz\",hmsz:\"HH:mm:ss z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan.\",\"Feb.\",\"März\",\"Apr.\",\"Mai\",\"Juni\",\"Juli\",\"Aug.\",\"Sep.\",\"Okt.\",\"Nov.\",\"Dez.\"],long:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"BE\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},gregory:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan.\",\"Feb.\",\"März\",\"Apr.\",\"Mai\",\"Juni\",\"Juli\",\"Aug.\",\"Sep.\",\"Okt.\",\"Nov.\",\"Dez.\"],long:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"v. Chr.\",\"n. Chr.\",\"v. u. Z.\",\"u. Z.\"],short:[\"v. Chr.\",\"n. Chr.\",\"v. u. Z.\",\"u. Z.\"],long:[\"v. Chr.\",\"n. Chr.\",\"vor unserer Zeitrechnung\",\"unserer Zeitrechnung\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"],long:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},japanese:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan.\",\"Feb.\",\"März\",\"Apr.\",\"Mai\",\"Juni\",\"Juli\",\"Aug.\",\"Sep.\",\"Okt.\",\"Nov.\",\"Dez.\"],long:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}},roc:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan.\",\"Feb.\",\"März\",\"Apr.\",\"Mai\",\"Juni\",\"Juli\",\"Aug.\",\"Sep.\",\"Okt.\",\"Nov.\",\"Dez.\"],long:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"]},days:{narrow:[\"S\",\"M\",\"D\",\"M\",\"D\",\"F\",\"S\"],short:[\"So.\",\"Mo.\",\"Di.\",\"Mi.\",\"Do.\",\"Fr.\",\"Sa.\"],long:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"]},eras:{narrow:[\"Before R.O.C.\",\"Minguo\"],short:[\"Before R.O.C.\",\"Minguo\"],long:[\"Before R.O.C.\",\"Minguo\"]},dayPeriods:{am:\"vorm.\",pm:\"nachm.\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{number} {currency}\",negativePattern:\"{minusSign}{number} {currency}\"},percent:{positivePattern:\"{number} {percentSign}\",negativePattern:\"{minusSign}{number} {percentSign}\"}},symbols:{latn:{decimal:\",\",group:\".\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{ATS:\"öS\",AUD:\"AU$\",BGM:\"BGK\",BGO:\"BGJ\",BRL:\"R$\",CAD:\"CA$\",CNY:\"CN¥\",DEM:\"DM\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",THB:\"฿\",TWD:\"NT$\",USD:\"$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"en\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:true,formats:{short:\"{1}, {0}\",medium:\"{1}, {0}\",full:\"{1} 'at' {0}\",long:\"{1} 'at' {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"d E\",Ehm:\"E h:mm a\",EHm:\"E HH:mm\",Ehms:\"E h:mm:ss a\",EHms:\"E HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"MMM d, y G\",GyMMMEd:\"E, MMM d, y G\",\"h\":\"h a\",\"H\":\"HH\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"M/d\",MEd:\"E, M/d\",MMM:\"LLL\",MMMd:\"MMM d\",MMMEd:\"E, MMM d\",MMMMd:\"MMMM d\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M/y\",yMd:\"M/d/y\",yMEd:\"E, M/d/y\",yMMM:\"MMM y\",yMMMd:\"MMM d, y\",yMMMEd:\"E, MMM d, y\",yMMMM:\"MMMM y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE, MMMM d, y\",yMMMMd:\"MMMM d, y\",yMMMd:\"MMM d, y\",yMd:\"M/d/yy\"},timeFormats:{hmmsszzzz:\"h:mm:ss a zzzz\",hmsz:\"h:mm:ss a z\",hms:\"h:mm:ss a\",hm:\"h:mm a\"}},calendars:{buddhist:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],long:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"BE\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Mo1\",\"Mo2\",\"Mo3\",\"Mo4\",\"Mo5\",\"Mo6\",\"Mo7\",\"Mo8\",\"Mo9\",\"Mo10\",\"Mo11\",\"Mo12\"],long:[\"Month1\",\"Month2\",\"Month3\",\"Month4\",\"Month5\",\"Month6\",\"Month7\",\"Month8\",\"Month9\",\"Month10\",\"Month11\",\"Month12\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Mo1\",\"Mo2\",\"Mo3\",\"Mo4\",\"Mo5\",\"Mo6\",\"Mo7\",\"Mo8\",\"Mo9\",\"Mo10\",\"Mo11\",\"Mo12\"],long:[\"Month1\",\"Month2\",\"Month3\",\"Month4\",\"Month5\",\"Month6\",\"Month7\",\"Month8\",\"Month9\",\"Month10\",\"Month11\",\"Month12\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},gregory:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],long:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"B\",\"A\",\"BCE\",\"CE\"],short:[\"BC\",\"AD\",\"BCE\",\"CE\"],long:[\"Before Christ\",\"Anno Domini\",\"Before Common Era\",\"Common Era\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"],long:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},japanese:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],long:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},roc:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],long:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]},days:{narrow:[\"S\",\"M\",\"T\",\"W\",\"T\",\"F\",\"S\"],short:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],long:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},eras:{narrow:[\"Before R.O.C.\",\"Minguo\"],short:[\"Before R.O.C.\",\"Minguo\"],long:[\"Before R.O.C.\",\"Minguo\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{currency}{number}\",negativePattern:\"{minusSign}{currency}{number}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\".\",group:\",\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"A$\",BRL:\"R$\",CAD:\"CA$\",CNY:\"CN¥\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",TWD:\"NT$\",USD:\"$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"es\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1}, {0}\",long:\"{1}, {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E d\",Ehm:\"E, h:mm a\",EHm:\"E, H:mm\",Ehms:\"E, h:mm:ss a\",EHms:\"E, H:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"d MMM y G\",GyMMMEd:\"E, d MMM y G\",GyMMMM:\"MMMM 'de' y G\",GyMMMMd:\"d 'de' MMMM 'de' y G\",GyMMMMEd:\"E, d 'de' MMMM 'de' y G\",\"h\":\"h a\",\"H\":\"H\",hm:\"h:mm a\",Hm:\"H:mm\",hms:\"h:mm:ss a\",Hms:\"H:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"H:mm:ss v\",hmsvvvv:\"h:mm:ss a (vvvv)\",Hmsvvvv:\"H:mm:ss (vvvv)\",hmv:\"h:mm a v\",Hmv:\"H:mm v\",\"M\":\"L\",Md:\"d/M\",MEd:\"E, d/M\",MMd:\"d/M\",MMdd:\"d/M\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E, d MMM\",MMMMd:\"d 'de' MMMM\",MMMMEd:\"E, d 'de' MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M/y\",yMd:\"d/M/y\",yMEd:\"EEE, d/M/y\",yMM:\"M/y\",yMMM:\"MMM y\",yMMMd:\"d MMM y\",yMMMEd:\"EEE, d MMM y\",yMMMM:\"MMMM 'de' y\",yMMMMd:\"d 'de' MMMM 'de' y\",yMMMMEd:\"EEE, d 'de' MMMM 'de' y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ 'de' y\"},dateFormats:{yMMMMEEEEd:\"EEEE, d 'de' MMMM 'de' y\",yMMMMd:\"d 'de' MMMM 'de' y\",yMMMd:\"d MMM y\",yMd:\"d/M/yy\"},timeFormats:{hmmsszzzz:\"H:mm:ss (zzzz)\",hmsz:\"H:mm:ss z\",hms:\"H:mm:ss\",hm:\"H:mm\"}},calendars:{buddhist:{months:{narrow:[\"E\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"ene.\",\"feb.\",\"mar.\",\"abr.\",\"may.\",\"jun.\",\"jul.\",\"ago.\",\"sept.\",\"oct.\",\"nov.\",\"dic.\"],long:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"BE\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},gregory:{months:{narrow:[\"E\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"ene.\",\"feb.\",\"mar.\",\"abr.\",\"may.\",\"jun.\",\"jul.\",\"ago.\",\"sept.\",\"oct.\",\"nov.\",\"dic.\"],long:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"a. C.\",\"d. C.\",\"a. e. c.\",\"e. c.\"],short:[\"a. C.\",\"d. C.\",\"a. e. c.\",\"e. c.\"],long:[\"antes de Cristo\",\"después de Cristo\",\"antes de la era común\",\"era común\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"],long:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},japanese:{months:{narrow:[\"E\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"ene.\",\"feb.\",\"mar.\",\"abr.\",\"may.\",\"jun.\",\"jul.\",\"ago.\",\"sept.\",\"oct.\",\"nov.\",\"dic.\"],long:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}},roc:{months:{narrow:[\"E\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"ene.\",\"feb.\",\"mar.\",\"abr.\",\"may.\",\"jun.\",\"jul.\",\"ago.\",\"sept.\",\"oct.\",\"nov.\",\"dic.\"],long:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],short:[\"dom.\",\"lun.\",\"mar.\",\"mié.\",\"jue.\",\"vie.\",\"sáb.\"],long:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"]},eras:{narrow:[\"antes de R.O.C.\",\"R.O.C.\"],short:[\"antes de R.O.C.\",\"R.O.C.\"],long:[\"antes de R.O.C.\",\"R.O.C.\"]},dayPeriods:{am:\"a. m.\",pm:\"p. m.\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{number} {currency}\",negativePattern:\"{minusSign}{number} {currency}\"},percent:{positivePattern:\"{number} {percentSign}\",negativePattern:\"{minusSign}{number} {percentSign}\"}},symbols:{latn:{decimal:\",\",group:\".\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{CAD:\"CA$\",ESP:\"₧\",EUR:\"€\",THB:\"฿\",USD:\"$\",VND:\"₫\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"fr\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} 'à' {0}\",full:\"{1} 'à' {0}\",long:\"{1} 'à' {0}\",availableFormats:{\"d\":\"d\",\"E\":\"E\",Ed:\"E d\",Ehm:\"E h:mm a\",EHm:\"E HH:mm\",Ehms:\"E h:mm:ss a\",EHms:\"E HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"d MMM y G\",GyMMMEd:\"E d MMM y G\",\"h\":\"h a\",\"H\":\"HH 'h'\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"dd/MM\",MEd:\"E dd/MM\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E d MMM\",MMMMd:\"d MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"MM/y\",yMd:\"dd/MM/y\",yMEd:\"E dd/MM/y\",yMMM:\"MMM y\",yMMMd:\"d MMM y\",yMMMEd:\"E d MMM y\",yMMMM:\"MMMM y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE d MMMM y\",yMMMMd:\"d MMMM y\",yMMMd:\"d MMM y\",yMd:\"dd/MM/y\"},timeFormats:{hmmsszzzz:\"HH:mm:ss zzzz\",hmsz:\"HH:mm:ss z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"janv.\",\"févr.\",\"mars\",\"avr.\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],long:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"E.B.\"],short:[\"ère b.\"],long:[\"ère bouddhiste\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1yuè\",\"2yuè\",\"3yuè\",\"4yuè\",\"5yuè\",\"6yuè\",\"7yuè\",\"8yuè\",\"9yuè\",\"10yuè\",\"11yuè\",\"12yuè\"],long:[\"zhēngyuè\",\"èryuè\",\"sānyuè\",\"sìyuè\",\"wǔyuè\",\"liùyuè\",\"qīyuè\",\"bāyuè\",\"jiǔyuè\",\"shíyuè\",\"shíyīyuè\",\"shí’èryuè\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1yuè\",\"2yuè\",\"3yuè\",\"4yuè\",\"5yuè\",\"6yuè\",\"7yuè\",\"8yuè\",\"9yuè\",\"10yuè\",\"11yuè\",\"12yuè\"],long:[\"zhēngyuè\",\"èryuè\",\"sānyuè\",\"sìyuè\",\"wǔyuè\",\"liùyuè\",\"qīyuè\",\"bāyuè\",\"jiǔyuè\",\"shíyuè\",\"shíyīyuè\",\"shí’èryuè\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},gregory:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"janv.\",\"févr.\",\"mars\",\"avr.\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],long:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"av. J.-C.\",\"ap. J.-C.\",\"AEC\",\"EC\"],short:[\"av. J.-C.\",\"ap. J.-C.\",\"AEC\",\"EC\"],long:[\"avant Jésus-Christ\",\"après Jésus-Christ\",\"avant l’ère commune\",\"de l’ère commune\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tisseri\",\"Hesvan\",\"Kislev\",\"Tébeth\",\"Schébat\",\"Adar I\",\"Adar\",\"Nissan\",\"Iyar\",\"Sivan\",\"Tamouz\",\"Ab\",\"Elloul\",\"Adar II\"],long:[\"Tisseri\",\"Hesvan\",\"Kislev\",\"Tébeth\",\"Schébat\",\"Adar I\",\"Adar\",\"Nissan\",\"Iyar\",\"Sivan\",\"Tamouz\",\"Ab\",\"Elloul\",\"Adar II\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"mouh.\",\"saf.\",\"rab. aw.\",\"rab. th.\",\"joum. oul.\",\"joum. tha.\",\"raj.\",\"chaa.\",\"ram.\",\"chaw.\",\"dhou. q.\",\"dhou. h.\"],long:[\"mouharram\",\"safar\",\"rabia al awal\",\"rabia ath-thani\",\"joumada al oula\",\"joumada ath-thania\",\"rajab\",\"chaabane\",\"ramadan\",\"chawwal\",\"dhou al qi`da\",\"dhou al-hijja\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"mouh.\",\"saf.\",\"rab. aw.\",\"rab. th.\",\"joum. oul.\",\"joum. tha.\",\"raj.\",\"chaa.\",\"ram.\",\"chaw.\",\"dhou. q.\",\"dhou. h.\"],long:[\"mouharram\",\"safar\",\"rabia al awal\",\"rabia ath-thani\",\"joumada al oula\",\"joumada ath-thania\",\"rajab\",\"chaabane\",\"ramadan\",\"chawwal\",\"dhou al qi`da\",\"dhou al-hijja\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},japanese:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"janv.\",\"févr.\",\"mars\",\"avr.\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],long:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},roc:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"janv.\",\"févr.\",\"mars\",\"avr.\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],long:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],short:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],long:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"]},eras:{narrow:[\"avant RdC\",\"RdC\"],short:[\"avant RdC\",\"RdC\"],long:[\"avant RdC\",\"RdC\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{number} {currency}\",negativePattern:\"{minusSign}{number} {currency}\"},percent:{positivePattern:\"{number} {percentSign}\",negativePattern:\"{minusSign}{number} {percentSign}\"}},symbols:{latn:{decimal:\",\",group:\" \",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{ARS:\"$AR\",AUD:\"$AU\",BEF:\"FB\",BMD:\"$BM\",BND:\"$BN\",BRL:\"R$\",BSD:\"$BS\",BZD:\"$BZ\",CAD:\"$CA\",CLP:\"$CL\",COP:\"$CO\",CYP:\"£CY\",EUR:\"€\",FJD:\"$FJ\",FKP:\"£FK\",FRF:\"F\",GBP:\"£GB\",GIP:\"£GI\",IEP:\"£IE\",ILP:\"£IL\",ILS:\"₪\",INR:\"₹\",ITL:\"₤IT\",KRW:\"₩\",LBP:\"£LB\",MTP:\"£MT\",MXN:\"$MX\",NAD:\"$NA\",NZD:\"$NZ\",RHD:\"$RH\",SBD:\"$SB\",SGD:\"$SG\",SRD:\"$SR\",TTD:\"$TT\",USD:\"$US\",UYU:\"$UY\",VND:\"₫\",WST:\"WS$\",XAF:\"FCFA\",XOF:\"CFA\",XPF:\"FCFP\"}}});","IntlPolyfill.__addLocaleData({locale:\"it\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1}, {0}\",medium:\"{1}, {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E d\",Ehm:\"E h:mm a\",EHm:\"E HH:mm\",Ehms:\"E h:mm:ss a\",EHms:\"E HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"d MMM y G\",GyMMMEd:\"E d MMM y G\",\"h\":\"h a\",\"H\":\"HH\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d/M\",MEd:\"E d/M\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E d MMM\",MMMMd:\"d MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M/y\",yMd:\"d/M/y\",yMEd:\"E d/M/y\",yMMM:\"MMM y\",yMMMd:\"d MMM y\",yMMMEd:\"E d MMM y\",yMMMM:\"MMMM y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE d MMMM y\",yMMMMd:\"d MMMM y\",yMMMd:\"dd MMM y\",yMd:\"dd/MM/yy\"},timeFormats:{hmmsszzzz:\"HH:mm:ss zzzz\",hmsz:\"HH:mm:ss z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"G\",\"F\",\"M\",\"A\",\"M\",\"G\",\"L\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"gen\",\"feb\",\"mar\",\"apr\",\"mag\",\"giu\",\"lug\",\"ago\",\"set\",\"ott\",\"nov\",\"dic\"],long:[\"gennaio\",\"febbraio\",\"marzo\",\"aprile\",\"maggio\",\"giugno\",\"luglio\",\"agosto\",\"settembre\",\"ottobre\",\"novembre\",\"dicembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"EB\"],short:[\"EB\"],long:[\"EB\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},gregory:{months:{narrow:[\"G\",\"F\",\"M\",\"A\",\"M\",\"G\",\"L\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"gen\",\"feb\",\"mar\",\"apr\",\"mag\",\"giu\",\"lug\",\"ago\",\"set\",\"ott\",\"nov\",\"dic\"],long:[\"gennaio\",\"febbraio\",\"marzo\",\"aprile\",\"maggio\",\"giugno\",\"luglio\",\"agosto\",\"settembre\",\"ottobre\",\"novembre\",\"dicembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"aC\",\"dC\",\"BCE\",\"CE\"],short:[\"a.C.\",\"d.C.\",\"a.E.V.\",\"E.V.\"],long:[\"a.C.\",\"d.C.\",\"avanti Era Volgare\",\"Era Volgare\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"],long:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},japanese:{months:{narrow:[\"G\",\"F\",\"M\",\"A\",\"M\",\"G\",\"L\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"gen\",\"feb\",\"mar\",\"apr\",\"mag\",\"giu\",\"lug\",\"ago\",\"set\",\"ott\",\"nov\",\"dic\"],long:[\"gennaio\",\"febbraio\",\"marzo\",\"aprile\",\"maggio\",\"giugno\",\"luglio\",\"agosto\",\"settembre\",\"ottobre\",\"novembre\",\"dicembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},roc:{months:{narrow:[\"G\",\"F\",\"M\",\"A\",\"M\",\"G\",\"L\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"gen\",\"feb\",\"mar\",\"apr\",\"mag\",\"giu\",\"lug\",\"ago\",\"set\",\"ott\",\"nov\",\"dic\"],long:[\"gennaio\",\"febbraio\",\"marzo\",\"aprile\",\"maggio\",\"giugno\",\"luglio\",\"agosto\",\"settembre\",\"ottobre\",\"novembre\",\"dicembre\"]},days:{narrow:[\"D\",\"L\",\"M\",\"M\",\"G\",\"V\",\"S\"],short:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],long:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"]},eras:{narrow:[\"Prima di R.O.C.\",\"Minguo\"],short:[\"Prima di R.O.C.\",\"Minguo\"],long:[\"Prima di R.O.C.\",\"Minguo\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{number} {currency}\",negativePattern:\"{minusSign}{number} {currency}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\",\",group:\".\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"A$\",CAD:\"CA$\",CNY:\"CN¥\",EUR:\"€\",GBP:\"£\",ILS:\"₪\",INR:\"₹\",NZD:\"NZ$\",THB:\"฿\",USD:\"US$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"ja\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:false,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d日\",\"E\":\"ccc\",Ed:\"d日(E)\",EEEEd:\"d日EEEE\",Ehm:\"aK:mm (E)\",EHm:\"H:mm (E)\",Ehms:\"aK:mm:ss (E)\",EHms:\"H:mm:ss (E)\",Gy:\"Gy年\",GyMMM:\"Gy年M月\",GyMMMd:\"Gy年M月d日\",GyMMMEd:\"Gy年M月d日(E)\",GyMMMEEEEd:\"Gy年M月d日EEEE\",\"h\":\"aK時\",\"H\":\"H時\",hm:\"aK:mm\",Hm:\"H:mm\",hms:\"aK:mm:ss\",Hms:\"H:mm:ss\",hmsv:\"aK:mm:ss v\",Hmsv:\"H:mm:ss v\",hmv:\"aK:mm v\",Hmv:\"H:mm v\",\"M\":\"M月\",Md:\"M/d\",MEd:\"M/d(E)\",MEEEEd:\"M/dEEEE\",MMM:\"M月\",MMMd:\"M月d日\",MMMEd:\"M月d日(E)\",MMMEEEEd:\"M月d日EEEE\",MMMMd:\"M月d日\",ms:\"mm:ss\",\"y\":\"y年\",yM:\"y/M\",yMd:\"y/M/d\",yMEd:\"y/M/d(E)\",yMEEEEd:\"y/M/dEEEE\",yMM:\"y/MM\",yMMM:\"y年M月\",yMMMd:\"y年M月d日\",yMMMEd:\"y年M月d日(E)\",yMMMEEEEd:\"y年M月d日EEEE\",yMMMM:\"y年M月\",yQQQ:\"y/QQQ\",yQQQQ:\"yQQQQ\"},dateFormats:{yMMMMEEEEd:\"y年M月d日EEEE\",yMMMMd:\"y年M月d日\",yMMMd:\"y/MM/dd\",yMd:\"y/MM/dd\"},timeFormats:{hmmsszzzz:\"H時mm分ss秒 zzzz\",hmsz:\"H:mm:ss z\",hms:\"H:mm:ss\",hm:\"H:mm\"}},calendars:{buddhist:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"仏暦\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},chinese:{months:{narrow:[\"正\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"十一\",\"十二\"],short:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],long:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"トウト\",\"ババ\",\"ハトール\",\"キアック\",\"トーバ\",\"アムシール\",\"バラムハート\",\"バラモウダ\",\"バシャンス\",\"パオーナ\",\"エペープ\",\"メスラ\",\"ナシエ\"],long:[\"トウト\",\"ババ\",\"ハトール\",\"キアック\",\"トーバ\",\"アムシール\",\"バラムハート\",\"バラモウダ\",\"バシャンス\",\"パオーナ\",\"エペープ\",\"メスラ\",\"ナシエ\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},dangi:{months:{narrow:[\"正\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"十一\",\"十二\"],short:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],long:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"メスケレム\",\"テケムト\",\"ヘダル\",\"ターサス\",\"テル\",\"イェカティト\",\"メガビト\",\"ミアジア\",\"ゲンボト\",\"セネ\",\"ハムレ\",\"ネハッセ\",\"パグメン\"],long:[\"メスケレム\",\"テケムト\",\"ヘダル\",\"ターサス\",\"テル\",\"イェカティト\",\"メガビト\",\"ミアジア\",\"ゲンボト\",\"セネ\",\"ハムレ\",\"ネハッセ\",\"パグメン\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"メスケレム\",\"テケムト\",\"ヘダル\",\"ターサス\",\"テル\",\"イェカティト\",\"メガビト\",\"ミアジア\",\"ゲンボト\",\"セネ\",\"ハムレ\",\"ネハッセ\",\"パグメン\"],long:[\"メスケレム\",\"テケムト\",\"ヘダル\",\"ターサス\",\"テル\",\"イェカティト\",\"メガビト\",\"ミアジア\",\"ゲンボト\",\"セネ\",\"ハムレ\",\"ネハッセ\",\"パグメン\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},gregory:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"BC\",\"AD\",\"BCE\",\"CE\"],short:[\"紀元前\",\"西暦\",\"西暦紀元前\",\"西暦紀元\"],long:[\"紀元前\",\"西暦\",\"西暦紀元前\",\"西暦紀元\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"ティスレ\",\"へシボン\",\"キスレブ\",\"テベット\",\"シバット\",\"アダル I\",\"アダル\",\"ニサン\",\"イヤル\",\"シバン\",\"タムズ\",\"アヴ\",\"エルル\",\"アダル II\"],long:[\"ティスレ\",\"へシボン\",\"キスレブ\",\"テベット\",\"シバット\",\"アダル I\",\"アダル\",\"ニサン\",\"イヤル\",\"シバン\",\"タムズ\",\"アヴ\",\"エルル\",\"アダル II\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"カイトラ\",\"ヴァイサカ\",\"ジャイスタ\",\"アーサダ\",\"スラバナ\",\"バードラ\",\"アスビナ\",\"カルディカ\",\"アヴラハヤナ\",\"パウサ\",\"マーガ\",\"パルグナ\"],long:[\"カイトラ\",\"ヴァイサカ\",\"ジャイスタ\",\"アーサダ\",\"スラバナ\",\"バードラ\",\"アスビナ\",\"カルディカ\",\"アヴラハヤナ\",\"パウサ\",\"マーガ\",\"パルグナ\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"サカ\"],short:[\"サカ\"],long:[\"サカ\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"ムハッラム\",\"サフアル\",\"ラビー・ウル・アウワル\",\"ラビー・ウッ・サーニー\",\"ジュマーダル・アウワル\",\"ジュマーダッサーニー\",\"ラジャブ\",\"シャアバーン\",\"ラマダーン\",\"シャウワール\",\"ズル・カイダ\",\"ズル・ヒッジャ\"],long:[\"ムハッラム\",\"サフアル\",\"ラビー・ウル・アウワル\",\"ラビー・ウッ・サーニー\",\"ジュマーダル・アウワル\",\"ジュマーダッサーニー\",\"ラジャブ\",\"シャアバーン\",\"ラマダーン\",\"シャウワール\",\"ズル・カイダ\",\"ズル・ヒッジャ\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"ムハッラム\",\"サフアル\",\"ラビー・ウル・アウワル\",\"ラビー・ウッ・サーニー\",\"ジュマーダル・アウワル\",\"ジュマーダッサーニー\",\"ラジャブ\",\"シャアバーン\",\"ラマダーン\",\"シャウワール\",\"ズル・カイダ\",\"ズル・ヒッジャ\"],long:[\"ムハッラム\",\"サフアル\",\"ラビー・ウル・アウワル\",\"ラビー・ウッ・サーニー\",\"ジュマーダル・アウワル\",\"ジュマーダッサーニー\",\"ラジャブ\",\"シャアバーン\",\"ラマダーン\",\"シャウワール\",\"ズル・カイダ\",\"ズル・ヒッジャ\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},japanese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"大化\",\"白雉\",\"白鳯\",\"朱鳥\",\"大宝\",\"慶雲\",\"和銅\",\"霊亀\",\"養老\",\"神亀\",\"天平\",\"天平感宝\",\"天平勝宝\",\"天平宝字\",\"天平神護\",\"神護景雲\",\"宝亀\",\"天応\",\"延暦\",\"大同\",\"弘仁\",\"天長\",\"承和\",\"嘉祥\",\"仁寿\",\"斉衡\",\"天安\",\"貞観\",\"元慶\",\"仁和\",\"寛平\",\"昌泰\",\"延喜\",\"延長\",\"承平\",\"天慶\",\"天暦\",\"天徳\",\"応和\",\"康保\",\"安和\",\"天禄\",\"天延\",\"貞元\",\"天元\",\"永観\",\"寛和\",\"永延\",\"永祚\",\"正暦\",\"長徳\",\"長保\",\"寛弘\",\"長和\",\"寛仁\",\"治安\",\"万寿\",\"長元\",\"長暦\",\"長久\",\"寛徳\",\"永承\",\"天喜\",\"康平\",\"治暦\",\"延久\",\"承保\",\"承暦\",\"永保\",\"応徳\",\"寛治\",\"嘉保\",\"永長\",\"承徳\",\"康和\",\"長治\",\"嘉承\",\"天仁\",\"天永\",\"永久\",\"元永\",\"保安\",\"天治\",\"大治\",\"天承\",\"長承\",\"保延\",\"永治\",\"康治\",\"天養\",\"久安\",\"仁平\",\"久寿\",\"保元\",\"平治\",\"永暦\",\"応保\",\"長寛\",\"永万\",\"仁安\",\"嘉応\",\"承安\",\"安元\",\"治承\",\"養和\",\"寿永\",\"元暦\",\"文治\",\"建久\",\"正治\",\"建仁\",\"元久\",\"建永\",\"承元\",\"建暦\",\"建保\",\"承久\",\"貞応\",\"元仁\",\"嘉禄\",\"安貞\",\"寛喜\",\"貞永\",\"天福\",\"文暦\",\"嘉禎\",\"暦仁\",\"延応\",\"仁治\",\"寛元\",\"宝治\",\"建長\",\"康元\",\"正嘉\",\"正元\",\"文応\",\"弘長\",\"文永\",\"建治\",\"弘安\",\"正応\",\"永仁\",\"正安\",\"乾元\",\"嘉元\",\"徳治\",\"延慶\",\"応長\",\"正和\",\"文保\",\"元応\",\"元亨\",\"正中\",\"嘉暦\",\"元徳\",\"元弘\",\"建武\",\"延元\",\"興国\",\"正平\",\"建徳\",\"文中\",\"天授\",\"康暦\",\"弘和\",\"元中\",\"至徳\",\"嘉慶\",\"康応\",\"明徳\",\"応永\",\"正長\",\"永享\",\"嘉吉\",\"文安\",\"宝徳\",\"享徳\",\"康正\",\"長禄\",\"寛正\",\"文正\",\"応仁\",\"文明\",\"長享\",\"延徳\",\"明応\",\"文亀\",\"永正\",\"大永\",\"享禄\",\"天文\",\"弘治\",\"永禄\",\"元亀\",\"天正\",\"文禄\",\"慶長\",\"元和\",\"寛永\",\"正保\",\"慶安\",\"承応\",\"明暦\",\"万治\",\"寛文\",\"延宝\",\"天和\",\"貞享\",\"元禄\",\"宝永\",\"正徳\",\"享保\",\"元文\",\"寛保\",\"延享\",\"寛延\",\"宝暦\",\"明和\",\"安永\",\"天明\",\"寛政\",\"享和\",\"文化\",\"文政\",\"天保\",\"弘化\",\"嘉永\",\"安政\",\"万延\",\"文久\",\"元治\",\"慶応\",\"M\",\"T\",\"S\",\"H\"],short:[\"大化\",\"白雉\",\"白鳯\",\"朱鳥\",\"大宝\",\"慶雲\",\"和銅\",\"霊亀\",\"養老\",\"神亀\",\"天平\",\"天平感宝\",\"天平勝宝\",\"天平宝字\",\"天平神護\",\"神護景雲\",\"宝亀\",\"天応\",\"延暦\",\"大同\",\"弘仁\",\"天長\",\"承和\",\"嘉祥\",\"仁寿\",\"斉衡\",\"天安\",\"貞観\",\"元慶\",\"仁和\",\"寛平\",\"昌泰\",\"延喜\",\"延長\",\"承平\",\"天慶\",\"天暦\",\"天徳\",\"応和\",\"康保\",\"安和\",\"天禄\",\"天延\",\"貞元\",\"天元\",\"永観\",\"寛和\",\"永延\",\"永祚\",\"正暦\",\"長徳\",\"長保\",\"寛弘\",\"長和\",\"寛仁\",\"治安\",\"万寿\",\"長元\",\"長暦\",\"長久\",\"寛徳\",\"永承\",\"天喜\",\"康平\",\"治暦\",\"延久\",\"承保\",\"承暦\",\"永保\",\"応徳\",\"寛治\",\"嘉保\",\"永長\",\"承徳\",\"康和\",\"長治\",\"嘉承\",\"天仁\",\"天永\",\"永久\",\"元永\",\"保安\",\"天治\",\"大治\",\"天承\",\"長承\",\"保延\",\"永治\",\"康治\",\"天養\",\"久安\",\"仁平\",\"久寿\",\"保元\",\"平治\",\"永暦\",\"応保\",\"長寛\",\"永万\",\"仁安\",\"嘉応\",\"承安\",\"安元\",\"治承\",\"養和\",\"寿永\",\"元暦\",\"文治\",\"建久\",\"正治\",\"建仁\",\"元久\",\"建永\",\"承元\",\"建暦\",\"建保\",\"承久\",\"貞応\",\"元仁\",\"嘉禄\",\"安貞\",\"寛喜\",\"貞永\",\"天福\",\"文暦\",\"嘉禎\",\"暦仁\",\"延応\",\"仁治\",\"寛元\",\"宝治\",\"建長\",\"康元\",\"正嘉\",\"正元\",\"文応\",\"弘長\",\"文永\",\"建治\",\"弘安\",\"正応\",\"永仁\",\"正安\",\"乾元\",\"嘉元\",\"徳治\",\"延慶\",\"応長\",\"正和\",\"文保\",\"元応\",\"元亨\",\"正中\",\"嘉暦\",\"元徳\",\"元弘\",\"建武\",\"延元\",\"興国\",\"正平\",\"建徳\",\"文中\",\"天授\",\"康暦\",\"弘和\",\"元中\",\"至徳\",\"嘉慶\",\"康応\",\"明徳\",\"応永\",\"正長\",\"永享\",\"嘉吉\",\"文安\",\"宝徳\",\"享徳\",\"康正\",\"長禄\",\"寛正\",\"文正\",\"応仁\",\"文明\",\"長享\",\"延徳\",\"明応\",\"文亀\",\"永正\",\"大永\",\"享禄\",\"天文\",\"弘治\",\"永禄\",\"元亀\",\"天正\",\"文禄\",\"慶長\",\"元和\",\"寛永\",\"正保\",\"慶安\",\"承応\",\"明暦\",\"万治\",\"寛文\",\"延宝\",\"天和\",\"貞享\",\"元禄\",\"宝永\",\"正徳\",\"享保\",\"元文\",\"寛保\",\"延享\",\"寛延\",\"宝暦\",\"明和\",\"安永\",\"天明\",\"寛政\",\"享和\",\"文化\",\"文政\",\"天保\",\"弘化\",\"嘉永\",\"安政\",\"万延\",\"文久\",\"元治\",\"慶応\",\"明治\",\"大正\",\"昭和\",\"平成\"],long:[\"大化\",\"白雉\",\"白鳯\",\"朱鳥\",\"大宝\",\"慶雲\",\"和銅\",\"霊亀\",\"養老\",\"神亀\",\"天平\",\"天平感宝\",\"天平勝宝\",\"天平宝字\",\"天平神護\",\"神護景雲\",\"宝亀\",\"天応\",\"延暦\",\"大同\",\"弘仁\",\"天長\",\"承和\",\"嘉祥\",\"仁寿\",\"斉衡\",\"天安\",\"貞観\",\"元慶\",\"仁和\",\"寛平\",\"昌泰\",\"延喜\",\"延長\",\"承平\",\"天慶\",\"天暦\",\"天徳\",\"応和\",\"康保\",\"安和\",\"天禄\",\"天延\",\"貞元\",\"天元\",\"永観\",\"寛和\",\"永延\",\"永祚\",\"正暦\",\"長徳\",\"長保\",\"寛弘\",\"長和\",\"寛仁\",\"治安\",\"万寿\",\"長元\",\"長暦\",\"長久\",\"寛徳\",\"永承\",\"天喜\",\"康平\",\"治暦\",\"延久\",\"承保\",\"承暦\",\"永保\",\"応徳\",\"寛治\",\"嘉保\",\"永長\",\"承徳\",\"康和\",\"長治\",\"嘉承\",\"天仁\",\"天永\",\"永久\",\"元永\",\"保安\",\"天治\",\"大治\",\"天承\",\"長承\",\"保延\",\"永治\",\"康治\",\"天養\",\"久安\",\"仁平\",\"久寿\",\"保元\",\"平治\",\"永暦\",\"応保\",\"長寛\",\"永万\",\"仁安\",\"嘉応\",\"承安\",\"安元\",\"治承\",\"養和\",\"寿永\",\"元暦\",\"文治\",\"建久\",\"正治\",\"建仁\",\"元久\",\"建永\",\"承元\",\"建暦\",\"建保\",\"承久\",\"貞応\",\"元仁\",\"嘉禄\",\"安貞\",\"寛喜\",\"貞永\",\"天福\",\"文暦\",\"嘉禎\",\"暦仁\",\"延応\",\"仁治\",\"寛元\",\"宝治\",\"建長\",\"康元\",\"正嘉\",\"正元\",\"文応\",\"弘長\",\"文永\",\"建治\",\"弘安\",\"正応\",\"永仁\",\"正安\",\"乾元\",\"嘉元\",\"徳治\",\"延慶\",\"応長\",\"正和\",\"文保\",\"元応\",\"元亨\",\"正中\",\"嘉暦\",\"元徳\",\"元弘\",\"建武\",\"延元\",\"興国\",\"正平\",\"建徳\",\"文中\",\"天授\",\"康暦\",\"弘和\",\"元中\",\"至徳\",\"嘉慶\",\"康応\",\"明徳\",\"応永\",\"正長\",\"永享\",\"嘉吉\",\"文安\",\"宝徳\",\"享徳\",\"康正\",\"長禄\",\"寛正\",\"文正\",\"応仁\",\"文明\",\"長享\",\"延徳\",\"明応\",\"文亀\",\"永正\",\"大永\",\"享禄\",\"天文\",\"弘治\",\"永禄\",\"元亀\",\"天正\",\"文禄\",\"慶長\",\"元和\",\"寛永\",\"正保\",\"慶安\",\"承応\",\"明暦\",\"万治\",\"寛文\",\"延宝\",\"天和\",\"貞享\",\"元禄\",\"宝永\",\"正徳\",\"享保\",\"元文\",\"寛保\",\"延享\",\"寛延\",\"宝暦\",\"明和\",\"安永\",\"天明\",\"寛政\",\"享和\",\"文化\",\"文政\",\"天保\",\"弘化\",\"嘉永\",\"安政\",\"万延\",\"文久\",\"元治\",\"慶応\",\"明治\",\"大正\",\"昭和\",\"平成\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"ファルヴァルディーン\",\"オルディーベヘシュト\",\"ホルダード\",\"ティール\",\"モルダード\",\"シャハリーヴァル\",\"メフル\",\"アーバーン\",\"アーザル\",\"デイ\",\"バフマン\",\"エスファンド\"],long:[\"ファルヴァルディーン\",\"オルディーベヘシュト\",\"ホルダード\",\"ティール\",\"モルダード\",\"シャハリーヴァル\",\"メフル\",\"アーバーン\",\"アーザル\",\"デイ\",\"バフマン\",\"エスファンド\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}},roc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"]},days:{narrow:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],short:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],long:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"]},eras:{narrow:[\"民国前\",\"民国\"],short:[\"民国前\",\"民国\"],long:[\"民国前\",\"民国\"]},dayPeriods:{am:\"午前\",pm:\"午後\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{currency}{number}\",negativePattern:\"{minusSign}{currency}{number}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\".\",group:\",\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"AU$\",BRL:\"R$\",CAD:\"CA$\",CNY:\"元\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",THB:\"฿\",TWD:\"NT$\",USD:\"$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"nl\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E d\",Ehm:\"E h:mm a\",EHm:\"E HH:mm\",Ehms:\"E h:mm:ss a\",EHms:\"E HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"d MMM y G\",GyMMMEd:\"E d MMM y G\",\"h\":\"h a\",\"H\":\"HH\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d-M\",MEd:\"E d-M\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E d MMM\",MMMMd:\"d MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M-y\",yMd:\"d-M-y\",yMEd:\"E d-M-y\",yMMM:\"MMM y\",yMMMd:\"d MMM y\",yMMMEd:\"E d MMM y\",yMMMM:\"MMMM y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE d MMMM y\",yMMMMd:\"d MMMM y\",yMMMd:\"d MMM y\",yMd:\"dd-MM-yy\"},timeFormats:{hmmsszzzz:\"HH:mm:ss zzzz\",hmsz:\"HH:mm:ss z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mrt.\",\"apr.\",\"mei\",\"jun.\",\"jul.\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"BE\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"mnd 1\",\"mnd 2\",\"mnd 3\",\"mnd 4\",\"mnd 5\",\"mnd 6\",\"mnd 7\",\"mnd 8\",\"mnd 9\",\"mnd 10\",\"mnd 11\",\"mnd 12\"],long:[\"maand 1\",\"maand 2\",\"maand 3\",\"maand 4\",\"maand 5\",\"maand 6\",\"maand 7\",\"maand 8\",\"maand 9\",\"maand 10\",\"maand 11\",\"maand 12\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tut\",\"Babah\",\"Hatur\",\"Kiyahk\",\"Tubah\",\"Amshir\",\"Baramhat\",\"Baramundah\",\"Bashans\",\"Ba’unah\",\"Abib\",\"Misra\",\"Nasi\"],long:[\"Tut\",\"Babah\",\"Hatur\",\"Kiyahk\",\"Tubah\",\"Amshir\",\"Baramhat\",\"Baramundah\",\"Bashans\",\"Ba’unah\",\"Abib\",\"Misra\",\"Nasi\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"mnd 1\",\"mnd 2\",\"mnd 3\",\"mnd 4\",\"mnd 5\",\"mnd 6\",\"mnd 7\",\"mnd 8\",\"mnd 9\",\"mnd 10\",\"mnd 11\",\"mnd 12\"],long:[\"maand 1\",\"maand 2\",\"maand 3\",\"maand 4\",\"maand 5\",\"maand 6\",\"maand 7\",\"maand 8\",\"maand 9\",\"maand 10\",\"maand 11\",\"maand 12\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Mäskäräm\",\"Teqemt\",\"Hedar\",\"Tahsas\",\"T’er\",\"Yäkatit\",\"Mägabit\",\"Miyazya\",\"Genbot\",\"Säne\",\"Hamle\",\"Nähase\",\"Pagumän\"],long:[\"Mäskäräm\",\"Teqemt\",\"Hedar\",\"Tahsas\",\"T’er\",\"Yäkatit\",\"Mägabit\",\"Miyazya\",\"Genbot\",\"Säne\",\"Hamle\",\"Nähase\",\"Pagumän\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Mäskäräm\",\"Teqemt\",\"Hedar\",\"Tahsas\",\"T’er\",\"Yäkatit\",\"Mägabit\",\"Miyazya\",\"Genbot\",\"Säne\",\"Hamle\",\"Nähase\",\"Pagumän\"],long:[\"Mäskäräm\",\"Teqemt\",\"Hedar\",\"Tahsas\",\"T’er\",\"Yäkatit\",\"Mägabit\",\"Miyazya\",\"Genbot\",\"Säne\",\"Hamle\",\"Nähase\",\"Pagumän\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},gregory:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mrt.\",\"apr.\",\"mei\",\"jun.\",\"jul.\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"v.C.\",\"n.C.\",\"vgj\",\"gj\"],short:[\"v.Chr.\",\"n.Chr.\",\"v.g.j.\",\"g.j.\"],long:[\"voor Christus\",\"na Christus\",\"vóór gewone jaartelling\",\"gewone jaartelling\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tisjrie\",\"Chesjwan\",\"Kislev\",\"Tevet\",\"Sjevat\",\"Adar A\",\"Adar\",\"Nisan\",\"Ijar\",\"Sivan\",\"Tammoez\",\"Av\",\"Elloel\",\"Adar B\"],long:[\"Tisjrie\",\"Chesjwan\",\"Kislev\",\"Tevet\",\"Sjevat\",\"Adar A\",\"Adar\",\"Nisan\",\"Ijar\",\"Sivan\",\"Tammoez\",\"Av\",\"Elloel\",\"Adar B\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaishakha\",\"Jyeshtha\",\"Aashaadha\",\"Shraavana\",\"Bhaadrapada\",\"Ashvina\",\"Kaartika\",\"Agrahayana\",\"Pausha\",\"Maagha\",\"Phaalguna\"],long:[\"Chaitra\",\"Vaishakha\",\"Jyeshtha\",\"Aashaadha\",\"Shraavana\",\"Bhaadrapada\",\"Ashvina\",\"Kaartika\",\"Agrahayana\",\"Pausha\",\"Maagha\",\"Phaalguna\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"SAKA\"],short:[\"SAKA\"],long:[\"SAKA\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Moeh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Joem. I\",\"Joem. II\",\"Raj.\",\"Sja.\",\"Ram.\",\"Sjaw.\",\"Doe al k.\",\"Doe al h.\"],long:[\"Moeharram\",\"Safar\",\"Rabiʻa al awal\",\"Rabiʻa al thani\",\"Joemadʻal awal\",\"Joemadʻal thani\",\"Rajab\",\"Sjaʻaban\",\"Ramadan\",\"Sjawal\",\"Doe al kaʻaba\",\"Doe al hizja\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"Saʻna Hizjria\"],short:[\"Saʻna Hizjria\"],long:[\"Saʻna Hizjria\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Moeh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Joem. I\",\"Joem. II\",\"Raj.\",\"Sja.\",\"Ram.\",\"Sjaw.\",\"Doe al k.\",\"Doe al h.\"],long:[\"Moeharram\",\"Safar\",\"Rabiʻa al awal\",\"Rabiʻa al thani\",\"Joemadʻal awal\",\"Joemadʻal thani\",\"Rajab\",\"Sjaʻaban\",\"Ramadan\",\"Sjawal\",\"Doe al kaʻaba\",\"Doe al hizja\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"Saʻna Hizjria\"],short:[\"Saʻna Hizjria\"],long:[\"Saʻna Hizjria\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},japanese:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mrt.\",\"apr.\",\"mei\",\"jun.\",\"jul.\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kaho (1094–1096)\",\"Eichō (1096–1097)\",\"Shōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen-ei (1118-1120)\",\"Hoan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hoen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hogen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken-ei (1206-1207)\",\"Shōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Shōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tempuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En-ō (1239-1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun-ō (1260-1261)\",\"Kōchō (1261–1264)\",\"Bun-ei (1264-1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkei (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkyō (1321–1324)\",\"Shōchū (1324–1326)\",\"Kareki (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kemmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun-an (1444-1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenmon (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genwa (1615–1624)\",\"Kan-ei (1624-1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Shōō (1652–1655)\",\"Meiryaku (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenwa (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan-en (1748-1751)\",\"Hōryaku (1751–1764)\",\"Meiwa (1764–1772)\",\"An-ei (1772-1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man-en (1860-1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kaho (1094–1096)\",\"Eichō (1096–1097)\",\"Shōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen-ei (1118-1120)\",\"Hoan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hoen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hogen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken-ei (1206-1207)\",\"Shōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Shōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tempuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En-ō (1239-1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun-ō (1260-1261)\",\"Kōchō (1261–1264)\",\"Bun-ei (1264-1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkei (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkyō (1321–1324)\",\"Shōchū (1324–1326)\",\"Kareki (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kemmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun-an (1444-1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenmon (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genwa (1615–1624)\",\"Kan-ei (1624-1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Shōō (1652–1655)\",\"Meiryaku (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenwa (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan-en (1748-1751)\",\"Hōryaku (1751–1764)\",\"Meiwa (1764–1772)\",\"An-ei (1772-1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man-en (1860-1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}},roc:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mrt.\",\"apr.\",\"mei\",\"jun.\",\"jul.\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"Z\",\"M\",\"D\",\"W\",\"D\",\"V\",\"Z\"],short:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],long:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"]},eras:{narrow:[\"voor R.O.C.\",\"Minguo\"],short:[\"voor R.O.C.\",\"Minguo\"],long:[\"voor R.O.C.\",\"Minguo\"]},dayPeriods:{am:\"a.m.\",pm:\"p.m.\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{currency} {number}\",negativePattern:\"{currency} {minusSign}{number}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\",\",group:\".\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"AU$\",BRL:\"R$\",CAD:\"C$\",CNY:\"CN¥\",EUR:\"€\",FJD:\"FJ$\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"JP¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",SBD:\"SI$\",THB:\"฿\",TWD:\"NT$\",USD:\"US$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\"}}});","IntlPolyfill.__addLocaleData({locale:\"pt\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E, d\",Ehm:\"E, h:mm a\",EHm:\"E, HH:mm\",Ehms:\"E, h:mm:ss a\",EHms:\"E, HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM 'de' y G\",GyMMMd:\"d 'de' MMM 'de' y G\",GyMMMEd:\"E, d 'de' MMM 'de' y G\",\"h\":\"h a\",\"H\":\"HH\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d/M\",MEd:\"E, dd/MM\",MMdd:\"dd/MM\",MMM:\"LLL\",MMMd:\"d 'de' MMM\",MMMEd:\"E, d 'de' MMM\",MMMMd:\"d 'de' MMMM\",MMMMEd:\"E, d 'de' MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"MM/y\",yMd:\"dd/MM/y\",yMEd:\"E, dd/MM/y\",yMM:\"MM/y\",yMMM:\"MMM 'de' y\",yMMMd:\"d 'de' MMM 'de' y\",yMMMEd:\"E, d 'de' MMM 'de' y\",yMMMM:\"MMMM 'de' y\",yMMMMd:\"d 'de' MMMM 'de' y\",yMMMMEd:\"E, d 'de' MMMM 'de' y\",yQQQ:\"y QQQ\",yQQQQ:\"y QQQQ\"},dateFormats:{yMMMMEEEEd:\"EEEE, d 'de' MMMM 'de' y\",yMMMMd:\"d 'de' MMMM 'de' y\",yMMMd:\"d 'de' MMM 'de' y\",yMd:\"dd/MM/yy\"},timeFormats:{hmmsszzzz:\"HH:mm:ss zzzz\",hmsz:\"HH:mm:ss z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan\",\"fev\",\"mar\",\"abr\",\"mai\",\"jun\",\"jul\",\"ago\",\"set\",\"out\",\"nov\",\"dez\"],long:[\"janeiro\",\"fevereiro\",\"março\",\"abril\",\"maio\",\"junho\",\"julho\",\"agosto\",\"setembro\",\"outubro\",\"novembro\",\"dezembro\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"BE\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Mês 1\",\"Mês 2\",\"Mês 3\",\"Mês 4\",\"Mês 5\",\"Mês 6\",\"Mês 7\",\"Mês 8\",\"Mês 9\",\"Mês 10\",\"Mês 11\",\"Mês 12\"],long:[\"Mês 1\",\"Mês 2\",\"Mês 3\",\"Mês 4\",\"Mês 5\",\"Mês 6\",\"Mês 7\",\"Mês 8\",\"Mês 9\",\"Mês 10\",\"Mês 11\",\"Mês 12\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"],long:[\"Tout\",\"Baba\",\"Hator\",\"Kiahk\",\"Toba\",\"Amshir\",\"Baramhat\",\"Baramouda\",\"Bashans\",\"Paona\",\"Epep\",\"Mesra\",\"Nasie\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Mês 1\",\"Mês 2\",\"Mês 3\",\"Mês 4\",\"Mês 5\",\"Mês 6\",\"Mês 7\",\"Mês 8\",\"Mês 9\",\"Mês 10\",\"Mês 11\",\"Mês 12\"],long:[\"Mês 1\",\"Mês 2\",\"Mês 3\",\"Mês 4\",\"Mês 5\",\"Mês 6\",\"Mês 7\",\"Mês 8\",\"Mês 9\",\"Mês 10\",\"Mês 11\",\"Mês 12\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"],long:[\"Meskerem\",\"Tekemt\",\"Hedar\",\"Tahsas\",\"Ter\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehasse\",\"Pagumen\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},gregory:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan\",\"fev\",\"mar\",\"abr\",\"mai\",\"jun\",\"jul\",\"ago\",\"set\",\"out\",\"nov\",\"dez\"],long:[\"janeiro\",\"fevereiro\",\"março\",\"abril\",\"maio\",\"junho\",\"julho\",\"agosto\",\"setembro\",\"outubro\",\"novembro\",\"dezembro\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"a.C.\",\"d.C.\",\"AEC\",\"EC\"],short:[\"a.C.\",\"d.C.\",\"AEC\",\"EC\"],long:[\"antes de Cristo\",\"depois de Cristo\",\"antes da Era Comum\",\"Era Comum\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"],long:[\"Tishri\",\"Heshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar I\",\"Adar\",\"Nisan\",\"Iyar\",\"Sivan\",\"Tamuz\",\"Av\",\"Elul\",\"Adar II\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"],long:[\"Chaitra\",\"Vaisakha\",\"Jyaistha\",\"Asadha\",\"Sravana\",\"Bhadra\",\"Asvina\",\"Kartika\",\"Agrahayana\",\"Pausa\",\"Magha\",\"Phalguna\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"Saka\"],short:[\"Saka\"],long:[\"Saka\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"Muharram\",\"Safar\",\"Rabiʻ I\",\"Rabiʻ II\",\"Jumada I\",\"Jumada II\",\"Rajab\",\"Shaʻban\",\"Ramadan\",\"Shawwal\",\"Dhuʻl-Qiʻdah\",\"Dhuʻl-Hijjah\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},japanese:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan\",\"fev\",\"mar\",\"abr\",\"mai\",\"jun\",\"jul\",\"ago\",\"set\",\"out\",\"nov\",\"dez\"],long:[\"janeiro\",\"fevereiro\",\"março\",\"abril\",\"maio\",\"junho\",\"julho\",\"agosto\",\"setembro\",\"outubro\",\"novembro\",\"dezembro\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"],long:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Dey\",\"Bahman\",\"Esfand\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}},roc:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan\",\"fev\",\"mar\",\"abr\",\"mai\",\"jun\",\"jul\",\"ago\",\"set\",\"out\",\"nov\",\"dez\"],long:[\"janeiro\",\"fevereiro\",\"março\",\"abril\",\"maio\",\"junho\",\"julho\",\"agosto\",\"setembro\",\"outubro\",\"novembro\",\"dezembro\"]},days:{narrow:[\"D\",\"S\",\"T\",\"Q\",\"Q\",\"S\",\"S\"],short:[\"dom\",\"seg\",\"ter\",\"qua\",\"qui\",\"sex\",\"sáb\"],long:[\"domingo\",\"segunda-feira\",\"terça-feira\",\"quarta-feira\",\"quinta-feira\",\"sexta-feira\",\"sábado\"]},eras:{narrow:[\"Antes de R.O.C.\",\"R.O.C.\"],short:[\"Antes de R.O.C.\",\"R.O.C.\"],long:[\"Antes de R.O.C.\",\"R.O.C.\"]},dayPeriods:{am:\"AM\",pm:\"PM\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{currency}{number}\",negativePattern:\"{minusSign}{currency}{number}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\",\",group:\".\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"AU$\",BRL:\"R$\",CAD:\"CA$\",CNY:\"CN¥\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"JP¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",PTE:\"Esc.\",THB:\"฿\",TWD:\"NT$\",USD:\"US$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"sv\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E d\",Ehm:\"E h:mm a\",EHm:\"E HH:mm\",Ehms:\"E h:mm:ss a\",EHms:\"E HH:mm:ss\",Gy:\"y G\",GyMMM:\"MMM y G\",GyMMMd:\"d MMM y G\",GyMMMEd:\"E d MMM y G\",\"h\":\"h a\",\"H\":\"HH\",hm:\"h:mm a\",Hm:\"HH:mm\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d/M\",MEd:\"E d/M\",MMd:\"d/M\",MMdd:\"dd/MM\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E d MMM\",MMMMd:\"d MMMM\",MMMMEd:\"E d MMMM\",ms:\"mm:ss\",\"y\":\"y\",yM:\"y-MM\",yMd:\"y-MM-dd\",yMEd:\"E, y-MM-dd\",yMM:\"y-MM\",yMMM:\"MMM y\",yMMMd:\"d MMM y\",yMMMEd:\"E d MMM y\",yMMMM:\"MMMM y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ y\"},dateFormats:{yMMMMEEEEd:\"EEEE d MMMM y\",yMMMMd:\"d MMMM y\",yMMMd:\"d MMM y\",yMd:\"y-MM-dd\"},timeFormats:{hmmsszzzz:\"'kl'. HH:mm:ss zzzz\",hmsz:\"HH:mm:ss z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mars\",\"apr.\",\"maj\",\"juni\",\"juli\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"mars\",\"april\",\"maj\",\"juni\",\"juli\",\"augusti\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"BE\"],short:[\"BE\"],long:[\"BE\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"tout\",\"bâbâ\",\"hâtour\",\"kiahk\",\"toubah\",\"amshîr\",\"barmahât\",\"barmoudah\",\"bashans\",\"ba’ounah\",\"abîb\",\"misra\",\"al-nasi\"],long:[\"tout\",\"bâbâ\",\"hâtour\",\"kiahk\",\"toubah\",\"amshîr\",\"barmahât\",\"barmoudah\",\"bashans\",\"ba’ounah\",\"abîb\",\"misra\",\"al-nasi\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"mäskäräm\",\"teqemt\",\"hedar\",\"tahesas\",\"ter\",\"yäkatit\",\"mägabit\",\"miyazya\",\"guenbot\",\"säné\",\"hamlé\",\"nähasé\",\"pagumén\"],long:[\"mäskäräm\",\"teqemt\",\"hedar\",\"tahesas\",\"ter\",\"yäkatit\",\"mägabit\",\"miyazya\",\"guenbot\",\"säné\",\"hamlé\",\"nähasé\",\"pagumén\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"mäskäräm\",\"teqemt\",\"hedar\",\"tahesas\",\"ter\",\"yäkatit\",\"mägabit\",\"miyazya\",\"guenbot\",\"säné\",\"hamlé\",\"nähasé\",\"pagumén\"],long:[\"mäskäräm\",\"teqemt\",\"hedar\",\"tahesas\",\"ter\",\"yäkatit\",\"mägabit\",\"miyazya\",\"guenbot\",\"säné\",\"hamlé\",\"nähasé\",\"pagumén\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},gregory:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mars\",\"apr.\",\"maj\",\"juni\",\"juli\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"mars\",\"april\",\"maj\",\"juni\",\"juli\",\"augusti\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"f.Kr.\",\"e.Kr.\",\"fvt\",\"vt\"],short:[\"f.Kr.\",\"e.Kr.\",\"f.v.t.\",\"v.t.\"],long:[\"före Kristus\",\"efter Kristus\",\"före västerländsk tideräkning\",\"västerländsk tideräkning\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"tishrí\",\"heshván\",\"kislév\",\"tevét\",\"shevát\",\"adár I\",\"adár\",\"nisán\",\"ijjár\",\"siván\",\"tammúz\",\"ab\",\"elúl\",\"adár II\"],long:[\"tishrí\",\"heshván\",\"kislév\",\"tevét\",\"shevát\",\"adár I\",\"adár\",\"nisán\",\"ijjár\",\"siván\",\"tammúz\",\"ab\",\"elúl\",\"adár II\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"AM\"],short:[\"AM\"],long:[\"AM\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"chaitra\",\"vaishākh\",\"jyaishtha\",\"āshādha\",\"shrāvana\",\"bhādrapad\",\"āshwin\",\"kārtik\",\"mārgashīrsha\",\"paush\",\"māgh\",\"phālgun\"],long:[\"chaitra\",\"vaishākh\",\"jyaishtha\",\"āshādha\",\"shrāvana\",\"bhādrapad\",\"āshwin\",\"kārtik\",\"mārgashīrsha\",\"paush\",\"māgh\",\"phālgun\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"SAKA\"],short:[\"SAKA\"],long:[\"Saka-eran\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"muharram\",\"safar\",\"rabi’ al-awwal\",\"rabi’ al-akhir\",\"jumada-l-ula\",\"jumada-l-akhira\",\"rajab\",\"sha’ban\",\"ramadan\",\"shawwal\",\"dhu-l-ga’da\",\"dhu-l-hijja\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"Muh.\",\"Saf.\",\"Rab. I\",\"Rab. II\",\"Jum. I\",\"Jum. II\",\"Raj.\",\"Sha.\",\"Ram.\",\"Shaw.\",\"Dhuʻl-Q.\",\"Dhuʻl-H.\"],long:[\"muharram\",\"safar\",\"rabi’ al-awwal\",\"rabi’ al-akhir\",\"jumada-l-ula\",\"jumada-l-akhira\",\"rajab\",\"sha’ban\",\"ramadan\",\"shawwal\",\"dhu-l-ga’da\",\"dhu-l-hijja\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"AH\"],short:[\"AH\"],long:[\"AH\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},japanese:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mars\",\"apr.\",\"maj\",\"juni\",\"juli\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"mars\",\"april\",\"maj\",\"juni\",\"juli\",\"augusti\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tempyō (729–749)\",\"Tempyō-kampō (749–749)\",\"Tempyō-shōhō (749–757)\",\"Tempyō-hōji (757–765)\",\"Temphō-jingo (765–767)\",\"Jingo-keiun (767–770)\",\"Hōki (770–780)\",\"Ten-ō (781–782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saiko (854–857)\",\"Tennan (857–859)\",\"Jōgan (859–877)\",\"Genkei (877–885)\",\"Ninna (885–889)\",\"Kampyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Shōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten-en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Ei-en (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eiho (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kaho (1094–1096)\",\"Eichō (1096–1097)\",\"Shōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110–1113)\",\"Eikyū (1113–1118)\",\"Gen-ei (1118–1120)\",\"Hoan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hoen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Tenyō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hogen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin-an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryuku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken-ei (1206–1207)\",\"Shōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Shōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tempuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En-ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun-ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun-ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkei (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkyō (1321–1324)\",\"Shōchū (1324–1326)\",\"Kareki (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kemmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun-an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenmon (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genwa (1615–1624)\",\"Kan-ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Shōō (1652–1655)\",\"Meiryaku (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenwa (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan-en (1748–1751)\",\"Hōryaku (1751–1764)\",\"Meiwa (1764–1772)\",\"An-ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man-en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"],long:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tempyō (729–749)\",\"Tempyō-kampō (749–749)\",\"Tempyō-shōhō (749–757)\",\"Tempyō-hōji (757–765)\",\"Temphō-jingo (765–767)\",\"Jingo-keiun (767–770)\",\"Hōki (770–780)\",\"Ten-ō (781–782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saiko (854–857)\",\"Tennan (857–859)\",\"Jōgan (859–877)\",\"Genkei (877–885)\",\"Ninna (885–889)\",\"Kampyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Shōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten-en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Ei-en (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eiho (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kaho (1094–1096)\",\"Eichō (1096–1097)\",\"Shōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110–1113)\",\"Eikyū (1113–1118)\",\"Gen-ei (1118–1120)\",\"Hoan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hoen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Tenyō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hogen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin-an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryuku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken-ei (1206–1207)\",\"Shōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Shōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tempuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En-ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun-ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun-ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkei (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkyō (1321–1324)\",\"Shōchū (1324–1326)\",\"Kareki (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kemmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun-an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenmon (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genwa (1615–1624)\",\"Kan-ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Shōō (1652–1655)\",\"Meiryaku (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenwa (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan-en (1748–1751)\",\"Hōryaku (1751–1764)\",\"Meiwa (1764–1772)\",\"An-ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man-en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"Meiji\",\"Taishō\",\"Shōwa\",\"Heisei\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"farvardin\",\"ordibehesht\",\"khordād\",\"tir\",\"mordād\",\"shahrivar\",\"mehr\",\"ābān\",\"āzar\",\"dey\",\"bahman\",\"esfand\"],long:[\"farvardin\",\"ordibehesht\",\"khordād\",\"tir\",\"mordād\",\"shahrivar\",\"mehr\",\"ābān\",\"āzar\",\"dey\",\"bahman\",\"esfand\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"AP\"],short:[\"AP\"],long:[\"AP\"]},dayPeriods:{am:\"fm\",pm:\"em\"}},roc:{months:{narrow:[\"J\",\"F\",\"M\",\"A\",\"M\",\"J\",\"J\",\"A\",\"S\",\"O\",\"N\",\"D\"],short:[\"jan.\",\"feb.\",\"mars\",\"apr.\",\"maj\",\"juni\",\"juli\",\"aug.\",\"sep.\",\"okt.\",\"nov.\",\"dec.\"],long:[\"januari\",\"februari\",\"mars\",\"april\",\"maj\",\"juni\",\"juli\",\"augusti\",\"september\",\"oktober\",\"november\",\"december\"]},days:{narrow:[\"S\",\"M\",\"T\",\"O\",\"T\",\"F\",\"L\"],short:[\"sön\",\"mån\",\"tis\",\"ons\",\"tors\",\"fre\",\"lör\"],long:[\"söndag\",\"måndag\",\"tisdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lördag\"]},eras:{narrow:[\"före R.K.\",\"R.K.\"],short:[\"före R.K.\",\"R.K.\"],long:[\"före R.K.\",\"R.K.\"]},dayPeriods:{am:\"fm\",pm:\"em\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{number} {currency}\",negativePattern:\"{minusSign}{number} {currency}\"},percent:{positivePattern:\"{number} {percentSign}\",negativePattern:\"{minusSign}{number} {percentSign}\"}},symbols:{latn:{decimal:\",\",group:\" \",nan:\"¤¤¤\",plusSign:\"+\",minusSign:\"−\",percentSign:\"%\",infinity:\"∞\"}},currencies:{BBD:\"Bds$\",BMD:\"BM$\",BRL:\"BR$\",BSD:\"BS$\",BZD:\"BZ$\",CAD:\"CA$\",DKK:\"Dkr\",DOP:\"RD$\",EEK:\"Ekr\",EGP:\"EG£\",EUR:\"€\",ILS:\"₪\",ISK:\"Ikr\",JMD:\"JM$\",MXN:\"MX$\",NOK:\"Nkr\",SEK:\"kr\",USD:\"US$\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"th\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:false,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d\",\"E\":\"ccc\",Ed:\"E d\",Ehm:\"E h:mm a\",EHm:\"E HH:mm น.\",Ehms:\"E h:mm:ss a\",EHms:\"E HH:mm:ss\",Gy:\"G y\",GyMMM:\"MMM G y\",GyMMMd:\"d MMM G y\",GyMMMEd:\"E d MMM G y\",GyMMMEEEEd:\"EEEEที่ d MMM G y\",\"h\":\"h a\",\"H\":\"HH\",hm:\"h:mm a\",Hm:\"HH:mm น.\",hms:\"h:mm:ss a\",Hms:\"HH:mm:ss\",hmsv:\"h:mm:ss a v\",Hmsv:\"HH:mm:ss v\",hmv:\"h:mm a v\",Hmv:\"HH:mm v\",\"M\":\"L\",Md:\"d/M\",MEd:\"E d/M\",MMM:\"LLL\",MMMd:\"d MMM\",MMMEd:\"E d MMM\",MMMEEEEd:\"EEEEที่ d MMM\",MMMMd:\"d MMMM\",MMMMEd:\"E d MMMM\",MMMMEEEEd:\"EEEEที่ d MMMM\",mmss:\"mm:ss\",ms:\"mm:ss\",\"y\":\"y\",yM:\"M/y\",yMd:\"d/M/y\",yMEd:\"E d/M/y\",yMMM:\"MMM y\",yMMMd:\"d MMM y\",yMMMEd:\"E d MMM y\",yMMMEEEEd:\"EEEEที่ d MMM y\",yMMMM:\"MMMM G y\",yMMMMd:\"d MMMM G y\",yMMMMEd:\"E d MMMM G y\",yMMMMEEEEd:\"EEEEที่ d MMMM G y\",yQQQ:\"QQQ y\",yQQQQ:\"QQQQ G y\"},dateFormats:{yMMMMEEEEd:\"EEEEที่ d MMMM G y\",yMMMMd:\"d MMMM G y\",yMMMd:\"d MMM y\",yMd:\"d/M/yy\"},timeFormats:{hmmsszzzz:\"H นาฬิกา mm นาที ss วินาที zzzz\",hmsz:\"H นาฬิกา mm นาที ss วินาที z\",hms:\"HH:mm:ss\",hm:\"HH:mm\"}},calendars:{buddhist:{months:{narrow:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],short:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],long:[\"มกราคม\",\"กุมภาพันธ์\",\"มีนาคม\",\"เมษายน\",\"พฤษภาคม\",\"มิถุนายน\",\"กรกฎาคม\",\"สิงหาคม\",\"กันยายน\",\"ตุลาคม\",\"พฤศจิกายน\",\"ธันวาคม\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"พ.ศ.\"],short:[\"พ.ศ.\"],long:[\"พุทธศักราช\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},chinese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],long:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"เทาท์\",\"บาบา\",\"ฮาเทอร์\",\"เคียฟ\",\"โทบา\",\"อัมเชอร์\",\"บารัมฮัท\",\"บาราเมาดา\",\"บาชันส์\",\"พาโอนา\",\"อีเปป\",\"เมสรา\",\"นาซี\"],long:[\"เทาท์\",\"บาบา\",\"ฮาเทอร์\",\"เคียฟ\",\"โทบา\",\"อัมเชอร์\",\"บารัมฮัท\",\"บาราเมาดา\",\"บาชันส์\",\"พาโอนา\",\"อีเปป\",\"เมสรา\",\"นาซี\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},dangi:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],long:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"เมสเคอเรม\",\"เตเกมท\",\"เฮดาร์\",\"ทาฮ์ซัส\",\"เทอร์\",\"เยคาทิท\",\"เมกาบิต\",\"เมียเซีย\",\"เจนบอต\",\"เซเน\",\"ฮัมเล\",\"เนแฮซ\",\"พากูเมน\"],long:[\"เมสเคอเรม\",\"เตเกมท\",\"เฮดาร์\",\"ทาฮ์ซัส\",\"เทอร์\",\"เยคาทิท\",\"เมกาบิต\",\"เมียเซีย\",\"เจนบอต\",\"เซเน\",\"ฮัมเล\",\"เนแฮซ\",\"พากูเมน\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"เมสเคอเรม\",\"เตเกมท\",\"เฮดาร์\",\"ทาฮ์ซัส\",\"เทอร์\",\"เยคาทิท\",\"เมกาบิต\",\"เมียเซีย\",\"เจนบอต\",\"เซเน\",\"ฮัมเล\",\"เนแฮซ\",\"พากูเมน\"],long:[\"เมสเคอเรม\",\"เตเกมท\",\"เฮดาร์\",\"ทาฮ์ซัส\",\"เทอร์\",\"เยคาทิท\",\"เมกาบิต\",\"เมียเซีย\",\"เจนบอต\",\"เซเน\",\"ฮัมเล\",\"เนแฮซ\",\"พากูเมน\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},gregory:{months:{narrow:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],short:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],long:[\"มกราคม\",\"กุมภาพันธ์\",\"มีนาคม\",\"เมษายน\",\"พฤษภาคม\",\"มิถุนายน\",\"กรกฎาคม\",\"สิงหาคม\",\"กันยายน\",\"ตุลาคม\",\"พฤศจิกายน\",\"ธันวาคม\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ก่อน ค.ศ.\",\"ค.ศ.\",\"ก.ส.ศ.\",\"ส.ศ.\"],short:[\"ปีก่อน ค.ศ.\",\"ค.ศ.\",\"ก.ส.ศ.\",\"ส.ศ.\"],long:[\"ปีก่อนคริสต์ศักราช\",\"คริสต์ศักราช\",\"ก่อนสามัญศักราช\",\"สามัญศักราช\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"ทิชรี\",\"เฮวาน\",\"กีสเลฟ\",\"เตเวต\",\"เชวัต\",\"อาดาร์ I\",\"อาดาร์\",\"นิสซาน\",\"อิยาร์\",\"สีวัน\",\"ตามูซ\",\"อัฟ\",\"เอลอุล\",\"อาดาร์ II\"],long:[\"ทิชรี\",\"เฮวาน\",\"กีสเลฟ\",\"เตเวต\",\"เชวัต\",\"อาดาร์ I\",\"อาดาร์\",\"นิสซาน\",\"อิยาร์\",\"สีวัน\",\"ตามูซ\",\"อัฟ\",\"เอลอุล\",\"อาดาร์ II\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ย.ศ.\"],short:[\"ย.ศ.\"],long:[\"ย.ศ.\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"จิตรา\",\"วิสาขา\",\"เชษฐา\",\"อัษฎา\",\"ศรวณา\",\"พัตรา\",\"อัศวิชา\",\"การติกา\",\"มฤคศิรา\",\"ปุษยา\",\"มาฆะ\",\"ผลคุณี\"],long:[\"จิตรา\",\"วิสาขา\",\"เชษฐา\",\"อัษฎา\",\"ศรวณา\",\"พัตรา\",\"อัศวิชา\",\"การติกา\",\"มฤคศิรา\",\"ปุษยา\",\"มาฆะ\",\"ผลคุณี\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ม.ศ.\"],short:[\"ม.ศ.\"],long:[\"ม.ศ.\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"มุฮัร.\",\"เศาะ.\",\"รอบี I\",\"รอบี II\",\"จุมาดา I\",\"จุมาดา II\",\"เราะ.\",\"ชะอ์.\",\"เราะมะ.\",\"เชาว.\",\"ซุลกิอฺ.\",\"ซุลหิจ.\"],long:[\"มุฮะร์รอม\",\"ซอฟาร์\",\"รอบี I\",\"รอบี II\",\"จุมาดา I\",\"จุมาดา II\",\"รอจับ\",\"ชะอะบาน\",\"รอมะดอน\",\"เชาวัล\",\"ซุลกิอฺดะฮฺ\",\"ซุลหิจญะฮฺ\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ฮ.ศ.\"],short:[\"ฮ.ศ.\"],long:[\"ฮิจเราะห์ศักราช\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"มุฮัร.\",\"เศาะ.\",\"รอบี I\",\"รอบี II\",\"จุมาดา I\",\"จุมาดา II\",\"เราะ.\",\"ชะอ์.\",\"เราะมะ.\",\"เชาว.\",\"ซุลกิอฺ.\",\"ซุลหิจ.\"],long:[\"มุฮะร์รอม\",\"ซอฟาร์\",\"รอบี I\",\"รอบี II\",\"จุมาดา I\",\"จุมาดา II\",\"รอจับ\",\"ชะอะบาน\",\"รอมะดอน\",\"เชาวัล\",\"ซุลกิอฺดะฮฺ\",\"ซุลหิจญะฮฺ\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ฮ.ศ.\"],short:[\"ฮ.ศ.\"],long:[\"ฮิจเราะห์ศักราช\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},japanese:{months:{narrow:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],short:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],long:[\"มกราคม\",\"กุมภาพันธ์\",\"มีนาคม\",\"เมษายน\",\"พฤษภาคม\",\"มิถุนายน\",\"กรกฎาคม\",\"สิงหาคม\",\"กันยายน\",\"ตุลาคม\",\"พฤศจิกายน\",\"ธันวาคม\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"ทะอิกะ (645–650)\",\"ฮะกุชิ (650–671)\",\"ฮากุโฮ (672–686)\",\"ชุโช (686–701)\",\"ทะอิโฮ (701–704)\",\"เคอุง (704–708)\",\"วะโด (708–715)\",\"เรกิ (715–717)\",\"โยโร (717–724)\",\"จิงกิ (724–729)\",\"เท็มเพียว (729–749)\",\"เท็มเพียว-คัมโป (749-749)\",\"เท็มเพียว-โชโฮ (749-757)\",\"เท็มเพียว-โฮจิ (757-765)\",\"เท็มเพียว-จิงโงะ (765-767)\",\"จิงโงะ-เคอุง (767-770)\",\"โฮกิ (770–780)\",\"เท็นโอ (781–782)\",\"เอ็นเรียะกุ (782–806)\",\"ดะอิโด (806–810)\",\"โคนิง (810–824)\",\"เท็นโช (824–834)\",\"โชวะ (834–848)\",\"คะโจ (848–851)\",\"นินจุ (851–854)\",\"ซะอิโกะ (854–857)\",\"เท็นนัง (857–859)\",\"โจงัง (859–877)\",\"เก็งเก (877–885)\",\"นินนะ (885–889)\",\"คัมเพียว (889–898)\",\"โชตะอิ (898–901)\",\"เอ็งงิ (901–923)\",\"เอ็นโช (923–931)\",\"โชเฮ (931–938)\",\"เท็งเงียว (938–947)\",\"เท็นเรียะกุ (947–957)\",\"เท็นโตะกุ (957–961)\",\"โอวะ (961–964)\",\"โคโฮ (964–968)\",\"อันนะ (968–970)\",\"เท็นโระกุ (970–973)\",\"เท็นเอ็ง (973–976)\",\"โจเง็ง (976–978)\",\"เท็งเง็ง (978–983)\",\"เอกัง (983–985)\",\"คันนะ (985–987)\",\"เอเอ็ง (987–989)\",\"เอโซ (989–990)\",\"โชเรียะกุ (990–995)\",\"โชโตะกุ (995–999)\",\"โชโฮ (999–1004)\",\"คันโก (1004–1012)\",\"โชวะ (1012–1017)\",\"คันนิง (1017–1021)\",\"จิอัง (1021–1024)\",\"มันจุ (1024–1028)\",\"โชเง็ง (1028–1037)\",\"โชเรียะกุ (1037–1040)\",\"โชคีว (1040–1044)\",\"คันโตะกุ (1044–1046)\",\"เอโช (1046–1053)\",\"เท็งงิ (1053–1058)\",\"โคเฮ (1058–1065)\",\"จิเรียะกุ (1065–1069)\",\"เอ็งคีว (1069–1074)\",\"โชโฮ (1074–1077)\",\"โชเรียะกุ (1077–1081)\",\"เอโฮะ (1081–1084)\",\"โอโตะกุ (1084–1087)\",\"คันจิ (1087–1094)\",\"คะโฮะ (1094–1096)\",\"เอโช (1096–1097)\",\"โชโตะกุ (1097–1099)\",\"โควะ (1099–1104)\",\"โชจิ (1104–1106)\",\"คะโช (1106–1108)\",\"เท็นนิง (1108–1110)\",\"เท็นเอ (1110–1113)\",\"เอกีว (1113–1118)\",\"เก็นเอ (1118–1120)\",\"โฮะอัง (1120–1124)\",\"เท็นจิ (1124–1126)\",\"ดะอิจิ (1126–1131)\",\"เท็นโช (1131–1132)\",\"โชโช (1132–1135)\",\"โฮะเอ็ง (1135–1141)\",\"เอจิ (1141–1142)\",\"โคจิ (1142–1144)\",\"เท็นโย (1144–1145)\",\"คีวอัง (1145–1151)\",\"นิมเป (1151–1154)\",\"คีวจุ (1154–1156)\",\"โฮะเง็ง (1156–1159)\",\"เฮจิ (1159–1160)\",\"เอเรียะกุ (1160–1161)\",\"โอโฮ (1161–1163)\",\"โชกัง (1163–1165)\",\"เอมัง (1165–1166)\",\"นินอัง (1166–1169)\",\"คะโอ (1169–1171)\",\"โชอัง (1171–1175)\",\"อังเง็ง (1175–1177)\",\"จิโช (1177–1181)\",\"โยวะ (1181–1182)\",\"จุเอ (1182–1184)\",\"เก็นเรียะกุ (1184–1185)\",\"บุนจิ (1185–1190)\",\"เค็งกีว (1190–1199)\",\"โชจิ (1199–1201)\",\"เค็นนิง (1201–1204)\",\"เก็งกีว (1204–1206)\",\"เค็นเอ (1206–1207)\",\"โชเก็ง (1207–1211)\",\"เค็นเรียะกุ (1211–1213)\",\"เค็มโป (1213–1219)\",\"โชกีว (1219–1222)\",\"โจโอ (1222–1224)\",\"เก็นนิง (1224–1225)\",\"คะโระกุ (1225–1227)\",\"อันเต (1227–1229)\",\"คังกิ (1229–1232)\",\"โจเอ (1232–1233)\",\"เท็มปุกุ (1233–1234)\",\"บุนเรียะกุ (1234–1235)\",\"คะเต (1235–1238)\",\"เรียะกุนิง (1238–1239)\",\"เอ็นโอ (1239–1240)\",\"นินจิ (1240–1243)\",\"คังเง็ง (1243–1247)\",\"โฮจิ (1247–1249)\",\"เค็นโช (1249–1256)\",\"โคเง็ง (1256–1257)\",\"โชกะ (1257–1259)\",\"โชเง็ง (1259–1260)\",\"บุนโอ (1260–1261)\",\"โคโช (1261–1264)\",\"บุนเอ (1264–1275)\",\"เค็นจิ (1275–1278)\",\"โคอัง (1278–1288)\",\"โชโอ (1288–1293)\",\"เอนิง (1293–1299)\",\"โชอัง (1299–1302)\",\"เค็งเง็ง (1302–1303)\",\"คะเง็ง (1303–1306)\",\"โทะกุจิ (1306–1308)\",\"เอ็งเก (1308–1311)\",\"โอโช (1311–1312)\",\"โชวะ (1312–1317)\",\"บุมโป (1317–1319)\",\"เก็นโอ (1319–1321)\",\"เก็งเกียว (1321–1324)\",\"โชชู (1324–1326)\",\"คะเระกิ (1326–1329)\",\"เก็นโตะกุ (1329–1331)\",\"เก็งโก (1331–1334)\",\"เค็มมุ (1334–1336)\",\"เอ็งเง็ง (1336–1340)\",\"โคโกะกุ (1340–1346)\",\"โชเฮ (1346–1370)\",\"เค็นโตะกุ (1370–1372)\",\"บุนชู (1372–1375)\",\"เท็นจุ (1375–1379)\",\"โคเรียะกุ (1379–1381)\",\"โควะ (1381–1384)\",\"เก็นชู (1384–1392)\",\"เมโตะกุ (1384–1387)\",\"คะเค (1387–1389)\",\"โคโอ (1389–1390)\",\"เมโตะกุ (1390–1394)\",\"โอเอ (1394–1428)\",\"โชโช (1428–1429)\",\"เอเกียว (1429–1441)\",\"คะกิสึ (1441–1444)\",\"บุนอัง (1444–1449)\",\"โฮโตะกุ (1449–1452)\",\"เคียวโตะกุ (1452–1455)\",\"โคโช (1455–1457)\",\"โชโระกุ (1457–1460)\",\"คันโช (1460–1466)\",\"บุนโช (1466–1467)\",\"โอนิง (1467–1469)\",\"บุมเม (1469–1487)\",\"โชเกียว (1487–1489)\",\"เอ็นโตะกุ (1489–1492)\",\"เมโอ (1492–1501)\",\"บุงกิ (1501–1504)\",\"เอโช (1504–1521)\",\"ทะอิเอ (1521–1528)\",\"เคียวโระกุ (1528–1532)\",\"เท็มมน (1532–1555)\",\"โคจิ (1555–1558)\",\"เอโระกุ (1558–1570)\",\"เก็งกิ (1570–1573)\",\"เท็นโช (1573–1592)\",\"บุนโระกุ (1592–1596)\",\"เคโช (1596–1615)\",\"เก็งวะ (1615–1624)\",\"คันเอ (1624–1644)\",\"โชโฮ (1644–1648)\",\"เคอัง (1648–1652)\",\"โชโอ (1652–1655)\",\"เมเรียะกุ (1655–1658)\",\"มันจิ (1658–1661)\",\"คัมบุง (1661–1673)\",\"เอ็มโป (1673–1681)\",\"เท็นวะ (1681–1684)\",\"โจเกียว (1684–1688)\",\"เก็นโระกุ (1688–1704)\",\"โฮเอ (1704–1711)\",\"โชโตะกุ (1711–1716)\",\"เคียวโฮ (1716–1736)\",\"เก็มบุง (1736–1741)\",\"คัมโป (1741–1744)\",\"เอ็งเกียว (1744–1748)\",\"คันเอ็ง (1748–1751)\",\"โฮเรียะกุ (1751–1764)\",\"เมวะ (1764–1772)\",\"อันเอ (1772–1781)\",\"เท็มเม (1781–1789)\",\"คันเซ (1789–1801)\",\"เคียววะ (1801–1804)\",\"บุงกะ (1804–1818)\",\"บุนเซ (1818–1830)\",\"เท็มโป (1830–1844)\",\"โคกะ (1844–1848)\",\"คะเอ (1848–1854)\",\"อันเซ (1854–1860)\",\"มันเอ็ง (1860–1861)\",\"บุงกีว (1861–1864)\",\"เก็นจิ (1864–1865)\",\"เคโอ (1865–1868)\",\"เมจิ\",\"ทะอิโช\",\"โชวะ\",\"เฮเซ\"],long:[\"ทะอิกะ (645–650)\",\"ฮะกุชิ (650–671)\",\"ฮากุโฮ (672–686)\",\"ชุโช (686–701)\",\"ทะอิโฮ (701–704)\",\"เคอุง (704–708)\",\"วะโด (708–715)\",\"เรกิ (715–717)\",\"โยโร (717–724)\",\"จิงกิ (724–729)\",\"เท็มเพียว (729–749)\",\"เท็มเพียว-คัมโป (749-749)\",\"เท็มเพียว-โชโฮ (749-757)\",\"เท็มเพียว-โฮจิ (757-765)\",\"เท็มเพียว-จิงโงะ (765-767)\",\"จิงโงะ-เคอุง (767-770)\",\"โฮกิ (770–780)\",\"เท็นโอ (781–782)\",\"เอ็นเรียะกุ (782–806)\",\"ดะอิโด (806–810)\",\"โคนิง (810–824)\",\"เท็นโช (824–834)\",\"โชวะ (834–848)\",\"คะโจ (848–851)\",\"นินจุ (851–854)\",\"ซะอิโกะ (854–857)\",\"เท็นนัง (857–859)\",\"โจงัง (859–877)\",\"เก็งเก (877–885)\",\"นินนะ (885–889)\",\"คัมเพียว (889–898)\",\"โชตะอิ (898–901)\",\"เอ็งงิ (901–923)\",\"เอ็นโช (923–931)\",\"โชเฮ (931–938)\",\"เท็งเงียว (938–947)\",\"เท็นเรียะกุ (947–957)\",\"เท็นโตะกุ (957–961)\",\"โอวะ (961–964)\",\"โคโฮ (964–968)\",\"อันนะ (968–970)\",\"เท็นโระกุ (970–973)\",\"เท็นเอ็ง (973–976)\",\"โจเง็ง (976–978)\",\"เท็งเง็ง (978–983)\",\"เอกัง (983–985)\",\"คันนะ (985–987)\",\"เอเอ็ง (987–989)\",\"เอโซ (989–990)\",\"โชเรียะกุ (990–995)\",\"โชโตะกุ (995–999)\",\"โชโฮ (999–1004)\",\"คันโก (1004–1012)\",\"โชวะ (1012–1017)\",\"คันนิง (1017–1021)\",\"จิอัง (1021–1024)\",\"มันจุ (1024–1028)\",\"โชเง็ง (1028–1037)\",\"โชเรียะกุ (1037–1040)\",\"โชคีว (1040–1044)\",\"คันโตะกุ (1044–1046)\",\"เอโช (1046–1053)\",\"เท็งงิ (1053–1058)\",\"โคเฮ (1058–1065)\",\"จิเรียะกุ (1065–1069)\",\"เอ็งคีว (1069–1074)\",\"โชโฮ (1074–1077)\",\"โชเรียะกุ (1077–1081)\",\"เอโฮะ (1081–1084)\",\"โอโตะกุ (1084–1087)\",\"คันจิ (1087–1094)\",\"คะโฮะ (1094–1096)\",\"เอโช (1096–1097)\",\"โชโตะกุ (1097–1099)\",\"โควะ (1099–1104)\",\"โชจิ (1104–1106)\",\"คะโช (1106–1108)\",\"เท็นนิง (1108–1110)\",\"เท็นเอ (1110–1113)\",\"เอกีว (1113–1118)\",\"เก็นเอ (1118–1120)\",\"โฮะอัง (1120–1124)\",\"เท็นจิ (1124–1126)\",\"ดะอิจิ (1126–1131)\",\"เท็นโช (1131–1132)\",\"โชโช (1132–1135)\",\"โฮะเอ็ง (1135–1141)\",\"เอจิ (1141–1142)\",\"โคจิ (1142–1144)\",\"เท็นโย (1144–1145)\",\"คีวอัง (1145–1151)\",\"นิมเป (1151–1154)\",\"คีวจุ (1154–1156)\",\"โฮะเง็ง (1156–1159)\",\"เฮจิ (1159–1160)\",\"เอเรียะกุ (1160–1161)\",\"โอโฮ (1161–1163)\",\"โชกัง (1163–1165)\",\"เอมัง (1165–1166)\",\"นินอัง (1166–1169)\",\"คะโอ (1169–1171)\",\"โชอัง (1171–1175)\",\"อังเง็ง (1175–1177)\",\"จิโช (1177–1181)\",\"โยวะ (1181–1182)\",\"จุเอ (1182–1184)\",\"เก็นเรียะกุ (1184–1185)\",\"บุนจิ (1185–1190)\",\"เค็งกีว (1190–1199)\",\"โชจิ (1199–1201)\",\"เค็นนิง (1201–1204)\",\"เก็งกีว (1204–1206)\",\"เค็นเอ (1206–1207)\",\"โชเก็ง (1207–1211)\",\"เค็นเรียะกุ (1211–1213)\",\"เค็มโป (1213–1219)\",\"โชกีว (1219–1222)\",\"โจโอ (1222–1224)\",\"เก็นนิง (1224–1225)\",\"คะโระกุ (1225–1227)\",\"อันเต (1227–1229)\",\"คังกิ (1229–1232)\",\"โจเอ (1232–1233)\",\"เท็มปุกุ (1233–1234)\",\"บุนเรียะกุ (1234–1235)\",\"คะเต (1235–1238)\",\"เรียะกุนิง (1238–1239)\",\"เอ็นโอ (1239–1240)\",\"นินจิ (1240–1243)\",\"คังเง็ง (1243–1247)\",\"โฮจิ (1247–1249)\",\"เค็นโช (1249–1256)\",\"โคเง็ง (1256–1257)\",\"โชกะ (1257–1259)\",\"โชเง็ง (1259–1260)\",\"บุนโอ (1260–1261)\",\"โคโช (1261–1264)\",\"บุนเอ (1264–1275)\",\"เค็นจิ (1275–1278)\",\"โคอัง (1278–1288)\",\"โชโอ (1288–1293)\",\"เอนิง (1293–1299)\",\"โชอัง (1299–1302)\",\"เค็งเง็ง (1302–1303)\",\"คะเง็ง (1303–1306)\",\"โทะกุจิ (1306–1308)\",\"เอ็งเก (1308–1311)\",\"โอโช (1311–1312)\",\"โชวะ (1312–1317)\",\"บุมโป (1317–1319)\",\"เก็นโอ (1319–1321)\",\"เก็งเกียว (1321–1324)\",\"โชชู (1324–1326)\",\"คะเระกิ (1326–1329)\",\"เก็นโตะกุ (1329–1331)\",\"เก็งโก (1331–1334)\",\"เค็มมุ (1334–1336)\",\"เอ็งเง็ง (1336–1340)\",\"โคโกะกุ (1340–1346)\",\"โชเฮ (1346–1370)\",\"เค็นโตะกุ (1370–1372)\",\"บุนชู (1372–1375)\",\"เท็นจุ (1375–1379)\",\"โคเรียะกุ (1379–1381)\",\"โควะ (1381–1384)\",\"เก็นชู (1384–1392)\",\"เมโตะกุ (1384–1387)\",\"คะเค (1387–1389)\",\"โคโอ (1389–1390)\",\"เมโตะกุ (1390–1394)\",\"โอเอ (1394–1428)\",\"โชโช (1428–1429)\",\"เอเกียว (1429–1441)\",\"คะกิสึ (1441–1444)\",\"บุนอัง (1444–1449)\",\"โฮโตะกุ (1449–1452)\",\"เคียวโตะกุ (1452–1455)\",\"โคโช (1455–1457)\",\"โชโระกุ (1457–1460)\",\"คันโช (1460–1466)\",\"บุนโช (1466–1467)\",\"โอนิง (1467–1469)\",\"บุมเม (1469–1487)\",\"โชเกียว (1487–1489)\",\"เอ็นโตะกุ (1489–1492)\",\"เมโอ (1492–1501)\",\"บุงกิ (1501–1504)\",\"เอโช (1504–1521)\",\"ทะอิเอ (1521–1528)\",\"เคียวโระกุ (1528–1532)\",\"เท็มมน (1532–1555)\",\"โคจิ (1555–1558)\",\"เอโระกุ (1558–1570)\",\"เก็งกิ (1570–1573)\",\"เท็นโช (1573–1592)\",\"บุนโระกุ (1592–1596)\",\"เคโช (1596–1615)\",\"เก็งวะ (1615–1624)\",\"คันเอ (1624–1644)\",\"โชโฮ (1644–1648)\",\"เคอัง (1648–1652)\",\"โชโอ (1652–1655)\",\"เมเรียะกุ (1655–1658)\",\"มันจิ (1658–1661)\",\"คัมบุง (1661–1673)\",\"เอ็มโป (1673–1681)\",\"เท็นวะ (1681–1684)\",\"โจเกียว (1684–1688)\",\"เก็นโระกุ (1688–1704)\",\"โฮเอ (1704–1711)\",\"โชโตะกุ (1711–1716)\",\"เคียวโฮ (1716–1736)\",\"เก็มบุง (1736–1741)\",\"คัมโป (1741–1744)\",\"เอ็งเกียว (1744–1748)\",\"คันเอ็ง (1748–1751)\",\"โฮเรียะกุ (1751–1764)\",\"เมวะ (1764–1772)\",\"อันเอ (1772–1781)\",\"เท็มเม (1781–1789)\",\"คันเซ (1789–1801)\",\"เคียววะ (1801–1804)\",\"บุงกะ (1804–1818)\",\"บุนเซ (1818–1830)\",\"เท็มโป (1830–1844)\",\"โคกะ (1844–1848)\",\"คะเอ (1848–1854)\",\"อันเซ (1854–1860)\",\"มันเอ็ง (1860–1861)\",\"บุงกีว (1861–1864)\",\"เก็นจิ (1864–1865)\",\"เคโอ (1865–1868)\",\"เมจิ\",\"ทะอิโช\",\"โชวะ\",\"เฮเซ\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"ฟาร์วาร์ดิน\",\"ออร์ดิเบเฮชต์\",\"คอร์แดด\",\"เตอร์\",\"มอร์แดด\",\"ชาหริวาร์\",\"เมฮร์\",\"อะบาน\",\"อะซาร์\",\"เดย์\",\"บาฮ์มาน\",\"เอสฟานด์\"],long:[\"ฟาร์วาร์ดิน\",\"ออร์ดิเบเฮชต์\",\"คอร์แดด\",\"เตอร์\",\"มอร์แดด\",\"ชาหริวาร์\",\"เมฮร์\",\"อะบาน\",\"อะซาร์\",\"เดย์\",\"บาฮ์มาน\",\"เอสฟานด์\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ปีเปอร์เซีย\"],short:[\"ปีเปอร์เซีย\"],long:[\"ปีเปอร์เซีย\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}},roc:{months:{narrow:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],short:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],long:[\"มกราคม\",\"กุมภาพันธ์\",\"มีนาคม\",\"เมษายน\",\"พฤษภาคม\",\"มิถุนายน\",\"กรกฎาคม\",\"สิงหาคม\",\"กันยายน\",\"ตุลาคม\",\"พฤศจิกายน\",\"ธันวาคม\"]},days:{narrow:[\"อา\",\"จ\",\"อ\",\"พ\",\"พฤ\",\"ศ\",\"ส\"],short:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],long:[\"วันอาทิตย์\",\"วันจันทร์\",\"วันอังคาร\",\"วันพุธ\",\"วันพฤหัสบดี\",\"วันศุกร์\",\"วันเสาร์\"]},eras:{narrow:[\"ปีก่อนไต้หวัน\",\"ไต้หวัน\"],short:[\"ปีก่อนไต้หวัน\",\"ไต้หวัน\"],long:[\"ปีก่อนไต้หวัน\",\"ไต้หวัน\"]},dayPeriods:{am:\"ก่อนเที่ยง\",pm:\"หลังเที่ยง\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{currency}{number}\",negativePattern:\"{minusSign}{currency}{number}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{latn:{decimal:\".\",group:\",\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"},thai:{decimal:\".\",group:\",\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"AU$\",BRL:\"R$\",CAD:\"CA$\",CNY:\"CN¥\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILS:\"₪\",INR:\"₹\",JPY:\"¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",TWD:\"NT$\",USD:\"US$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","IntlPolyfill.__addLocaleData({locale:\"zh\",date:{ca:[\"gregory\",\"buddhist\",\"chinese\",\"coptic\",\"dangi\",\"ethioaa\",\"ethiopic\",\"generic\",\"hebrew\",\"indian\",\"islamic\",\"islamicc\",\"japanese\",\"persian\",\"roc\"],hourNo0:true,hour12:true,formats:{short:\"{1} {0}\",medium:\"{1} {0}\",full:\"{1} {0}\",long:\"{1} {0}\",availableFormats:{\"d\":\"d日\",\"E\":\"ccc\",Ed:\"d日E\",Ehm:\"E ah:mm\",EHm:\"EHH:mm\",Ehms:\"E ah:mm:ss\",EHms:\"EHH:mm:ss\",Gy:\"Gy年\",GyMMM:\"Gy年M月\",GyMMMd:\"Gy年M月d日\",GyMMMEd:\"Gy年M月d日E\",\"h\":\"ah时\",\"H\":\"H时\",hm:\"ah:mm\",Hm:\"HH:mm\",hms:\"ah:mm:ss\",Hms:\"HH:mm:ss\",hmsv:\"v ah:mm:ss\",Hmsv:\"v HH:mm:ss\",hmv:\"v ah:mm\",Hmv:\"v HH:mm\",\"M\":\"M月\",Md:\"M/d\",MEd:\"M/dE\",MMdd:\"MM/dd\",MMM:\"LLL\",MMMd:\"M月d日\",MMMEd:\"M月d日E\",MMMMd:\"M月d日\",ms:\"mm:ss\",\"y\":\"y年\",yM:\"y年M月\",yMd:\"y/M/d\",yMEd:\"y/M/dE\",yMM:\"y年M月\",yMMM:\"y年M月\",yMMMd:\"y年M月d日\",yMMMEd:\"y年M月d日E\",yMMMM:\"y年M月\",yQQQ:\"y年第Q季度\",yQQQQ:\"y年第Q季度\"},dateFormats:{yMMMMEEEEd:\"y年M月d日EEEE\",yMMMMd:\"y年M月d日\",yMMMd:\"y年M月d日\",yMd:\"y/M/d\"},timeFormats:{hmmsszzzz:\"zzzz ah:mm:ss\",hmsz:\"z ah:mm:ss\",hms:\"ah:mm:ss\",hm:\"ah:mm\"}},calendars:{buddhist:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"佛历\"],short:[\"佛历\"],long:[\"佛历\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},chinese:{months:{narrow:[\"正\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"冬\",\"腊\"],short:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"冬月\",\"腊月\"],long:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"冬月\",\"腊月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},coptic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\",\"13月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\",\"十三月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},dangi:{months:{narrow:[\"正\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\",\"十\",\"冬\",\"腊\"],short:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"冬月\",\"腊月\"],long:[\"正月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"冬月\",\"腊月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},ethiopic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\",\"13月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\",\"十三月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},ethioaa:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\",\"13月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\",\"十三月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"ERA0\"],short:[\"ERA0\"],long:[\"ERA0\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},generic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"],long:[\"M01\",\"M02\",\"M03\",\"M04\",\"M05\",\"M06\",\"M07\",\"M08\",\"M09\",\"M10\",\"M11\",\"M12\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"ERA0\",\"ERA1\"],short:[\"ERA0\",\"ERA1\"],long:[\"ERA0\",\"ERA1\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},gregory:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"公元前\",\"公元\",\"西元前\",\"西元\"],short:[\"公元前\",\"公元\",\"西元前\",\"西元\"],long:[\"公元前\",\"公元\",\"西元前\",\"西元\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},hebrew:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"7\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\",\"13月\",\"闰7月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\",\"十三月\",\"闰七月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"希伯来历\"],short:[\"希伯来历\"],long:[\"希伯来历\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},indian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"印度历\"],short:[\"印度历\"],long:[\"印度历\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},islamic:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"伊斯兰历\"],short:[\"伊斯兰历\"],long:[\"伊斯兰历\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},islamicc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"伊斯兰历\"],short:[\"伊斯兰历\"],long:[\"伊斯兰历\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},japanese:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"Taika (645–650)\",\"Hakuchi (650–671)\",\"Hakuhō (672–686)\",\"Shuchō (686–701)\",\"Taihō (701–704)\",\"Keiun (704–708)\",\"Wadō (708–715)\",\"Reiki (715–717)\",\"Yōrō (717–724)\",\"Jinki (724–729)\",\"Tenpyō (729–749)\",\"Tenpyō-kampō (749-749)\",\"Tenpyō-shōhō (749-757)\",\"Tenpyō-hōji (757-765)\",\"Tenpyō-jingo (765-767)\",\"Jingo-keiun (767-770)\",\"Hōki (770–780)\",\"Ten-ō (781-782)\",\"Enryaku (782–806)\",\"Daidō (806–810)\",\"Kōnin (810–824)\",\"Tenchō (824–834)\",\"Jōwa (834–848)\",\"Kajō (848–851)\",\"Ninju (851–854)\",\"Saikō (854–857)\",\"Ten-an (857-859)\",\"Jōgan (859–877)\",\"Gangyō (877–885)\",\"Ninna (885–889)\",\"Kanpyō (889–898)\",\"Shōtai (898–901)\",\"Engi (901–923)\",\"Enchō (923–931)\",\"Jōhei (931–938)\",\"Tengyō (938–947)\",\"Tenryaku (947–957)\",\"Tentoku (957–961)\",\"Ōwa (961–964)\",\"Kōhō (964–968)\",\"Anna (968–970)\",\"Tenroku (970–973)\",\"Ten’en (973–976)\",\"Jōgen (976–978)\",\"Tengen (978–983)\",\"Eikan (983–985)\",\"Kanna (985–987)\",\"Eien (987–989)\",\"Eiso (989–990)\",\"Shōryaku (990–995)\",\"Chōtoku (995–999)\",\"Chōhō (999–1004)\",\"Kankō (1004–1012)\",\"Chōwa (1012–1017)\",\"Kannin (1017–1021)\",\"Jian (1021–1024)\",\"Manju (1024–1028)\",\"Chōgen (1028–1037)\",\"Chōryaku (1037–1040)\",\"Chōkyū (1040–1044)\",\"Kantoku (1044–1046)\",\"Eishō (1046–1053)\",\"Tengi (1053–1058)\",\"Kōhei (1058–1065)\",\"Jiryaku (1065–1069)\",\"Enkyū (1069–1074)\",\"Shōho (1074–1077)\",\"Shōryaku (1077–1081)\",\"Eihō (1081–1084)\",\"Ōtoku (1084–1087)\",\"Kanji (1087–1094)\",\"Kahō (1094–1096)\",\"Eichō (1096–1097)\",\"Jōtoku (1097–1099)\",\"Kōwa (1099–1104)\",\"Chōji (1104–1106)\",\"Kashō (1106–1108)\",\"Tennin (1108–1110)\",\"Ten-ei (1110-1113)\",\"Eikyū (1113–1118)\",\"Gen’ei (1118–1120)\",\"Hōan (1120–1124)\",\"Tenji (1124–1126)\",\"Daiji (1126–1131)\",\"Tenshō (1131–1132)\",\"Chōshō (1132–1135)\",\"Hōen (1135–1141)\",\"Eiji (1141–1142)\",\"Kōji (1142–1144)\",\"Ten’yō (1144–1145)\",\"Kyūan (1145–1151)\",\"Ninpei (1151–1154)\",\"Kyūju (1154–1156)\",\"Hōgen (1156–1159)\",\"Heiji (1159–1160)\",\"Eiryaku (1160–1161)\",\"Ōho (1161–1163)\",\"Chōkan (1163–1165)\",\"Eiman (1165–1166)\",\"Nin’an (1166–1169)\",\"Kaō (1169–1171)\",\"Shōan (1171–1175)\",\"Angen (1175–1177)\",\"Jishō (1177–1181)\",\"Yōwa (1181–1182)\",\"Juei (1182–1184)\",\"Genryaku (1184–1185)\",\"Bunji (1185–1190)\",\"Kenkyū (1190–1199)\",\"Shōji (1199–1201)\",\"Kennin (1201–1204)\",\"Genkyū (1204–1206)\",\"Ken’ei (1206–1207)\",\"Jōgen (1207–1211)\",\"Kenryaku (1211–1213)\",\"Kenpō (1213–1219)\",\"Jōkyū (1219–1222)\",\"Jōō (1222–1224)\",\"Gennin (1224–1225)\",\"Karoku (1225–1227)\",\"Antei (1227–1229)\",\"Kanki (1229–1232)\",\"Jōei (1232–1233)\",\"Tenpuku (1233–1234)\",\"Bunryaku (1234–1235)\",\"Katei (1235–1238)\",\"Ryakunin (1238–1239)\",\"En’ō (1239–1240)\",\"Ninji (1240–1243)\",\"Kangen (1243–1247)\",\"Hōji (1247–1249)\",\"Kenchō (1249–1256)\",\"Kōgen (1256–1257)\",\"Shōka (1257–1259)\",\"Shōgen (1259–1260)\",\"Bun’ō (1260–1261)\",\"Kōchō (1261–1264)\",\"Bun’ei (1264–1275)\",\"Kenji (1275–1278)\",\"Kōan (1278–1288)\",\"Shōō (1288–1293)\",\"Einin (1293–1299)\",\"Shōan (1299–1302)\",\"Kengen (1302–1303)\",\"Kagen (1303–1306)\",\"Tokuji (1306–1308)\",\"Enkyō (1308–1311)\",\"Ōchō (1311–1312)\",\"Shōwa (1312–1317)\",\"Bunpō (1317–1319)\",\"Genō (1319–1321)\",\"Genkō (1321–1324)\",\"Shōchū (1324–1326)\",\"Karyaku (1326–1329)\",\"Gentoku (1329–1331)\",\"Genkō (1331–1334)\",\"Kenmu (1334–1336)\",\"Engen (1336–1340)\",\"Kōkoku (1340–1346)\",\"Shōhei (1346–1370)\",\"Kentoku (1370–1372)\",\"Bunchū (1372–1375)\",\"Tenju (1375–1379)\",\"Kōryaku (1379–1381)\",\"Kōwa (1381–1384)\",\"Genchū (1384–1392)\",\"Meitoku (1384–1387)\",\"Kakei (1387–1389)\",\"Kōō (1389–1390)\",\"Meitoku (1390–1394)\",\"Ōei (1394–1428)\",\"Shōchō (1428–1429)\",\"Eikyō (1429–1441)\",\"Kakitsu (1441–1444)\",\"Bun’an (1444–1449)\",\"Hōtoku (1449–1452)\",\"Kyōtoku (1452–1455)\",\"Kōshō (1455–1457)\",\"Chōroku (1457–1460)\",\"Kanshō (1460–1466)\",\"Bunshō (1466–1467)\",\"Ōnin (1467–1469)\",\"Bunmei (1469–1487)\",\"Chōkyō (1487–1489)\",\"Entoku (1489–1492)\",\"Meiō (1492–1501)\",\"Bunki (1501–1504)\",\"Eishō (1504–1521)\",\"Taiei (1521–1528)\",\"Kyōroku (1528–1532)\",\"Tenbun (1532–1555)\",\"Kōji (1555–1558)\",\"Eiroku (1558–1570)\",\"Genki (1570–1573)\",\"Tenshō (1573–1592)\",\"Bunroku (1592–1596)\",\"Keichō (1596–1615)\",\"Genna (1615–1624)\",\"Kan’ei (1624–1644)\",\"Shōho (1644–1648)\",\"Keian (1648–1652)\",\"Jōō (1652–1655)\",\"Meireki (1655–1658)\",\"Manji (1658–1661)\",\"Kanbun (1661–1673)\",\"Enpō (1673–1681)\",\"Tenna (1681–1684)\",\"Jōkyō (1684–1688)\",\"Genroku (1688–1704)\",\"Hōei (1704–1711)\",\"Shōtoku (1711–1716)\",\"Kyōhō (1716–1736)\",\"Genbun (1736–1741)\",\"Kanpō (1741–1744)\",\"Enkyō (1744–1748)\",\"Kan’en (1748–1751)\",\"Hōreki (1751–1764)\",\"Meiwa (1764–1772)\",\"An’ei (1772–1781)\",\"Tenmei (1781–1789)\",\"Kansei (1789–1801)\",\"Kyōwa (1801–1804)\",\"Bunka (1804–1818)\",\"Bunsei (1818–1830)\",\"Tenpō (1830–1844)\",\"Kōka (1844–1848)\",\"Kaei (1848–1854)\",\"Ansei (1854–1860)\",\"Man’en (1860–1861)\",\"Bunkyū (1861–1864)\",\"Genji (1864–1865)\",\"Keiō (1865–1868)\",\"M\",\"T\",\"S\",\"H\"],short:[\"大化 (645–650)\",\"白雉 (650–671)\",\"白凤 (672–686)\",\"朱鸟 (686–701)\",\"大宝 (701–704)\",\"庆云 (704–708)\",\"和铜 (708–715)\",\"灵龟 (715–717)\",\"养老 (717–724)\",\"神龟 (724–729)\",\"天平 (729–749)\",\"天平感宝 (749–749)\",\"天平胜宝 (749–757)\",\"天平宝字 (757–765)\",\"天平神护 (765–767)\",\"神护景云 (767–770)\",\"宝龟 (770–780)\",\"天应 (781–782)\",\"延历 (782–806)\",\"大同 (806–810)\",\"弘仁 (810–824)\",\"天长 (824–834)\",\"承和 (834–848)\",\"嘉祥 (848–851)\",\"仁寿 (851–854)\",\"齐衡 (854–857)\",\"天安 (857–859)\",\"贞观 (859–877)\",\"元庆 (877–885)\",\"仁和 (885–889)\",\"宽平 (889–898)\",\"昌泰 (898–901)\",\"延喜 (901–923)\",\"延长 (923–931)\",\"承平 (931–938)\",\"天庆 (938–947)\",\"天历 (947–957)\",\"天德 (957–961)\",\"应和 (961–964)\",\"康保 (964–968)\",\"安和 (968–970)\",\"天禄 (970–973)\",\"天延 (973–976)\",\"贞元 (976–978)\",\"天元 (978–983)\",\"永观 (983–985)\",\"宽和 (985–987)\",\"永延 (987–989)\",\"永祚 (989–990)\",\"正历 (990–995)\",\"长德 (995–999)\",\"长保 (999–1004)\",\"宽弘 (1004–1012)\",\"长和 (1012–1017)\",\"宽仁 (1017–1021)\",\"治安 (1021–1024)\",\"万寿 (1024–1028)\",\"长元 (1028–1037)\",\"长历 (1037–1040)\",\"长久 (1040–1044)\",\"宽德 (1044–1046)\",\"永承 (1046–1053)\",\"天喜 (1053–1058)\",\"康平 (1058–1065)\",\"治历 (1065–1069)\",\"延久 (1069–1074)\",\"承保 (1074–1077)\",\"正历 (1077–1081)\",\"永保 (1081–1084)\",\"应德 (1084–1087)\",\"宽治 (1087–1094)\",\"嘉保 (1094–1096)\",\"永长 (1096–1097)\",\"承德 (1097–1099)\",\"康和 (1099–1104)\",\"长治 (1104–1106)\",\"嘉承 (1106–1108)\",\"天仁 (1108–1110)\",\"天永 (1110–1113)\",\"永久 (1113–1118)\",\"元永 (1118–1120)\",\"保安 (1120–1124)\",\"天治 (1124–1126)\",\"大治 (1126–1131)\",\"天承 (1131–1132)\",\"长承 (1132–1135)\",\"保延 (1135–1141)\",\"永治 (1141–1142)\",\"康治 (1142–1144)\",\"天养 (1144–1145)\",\"久安 (1145–1151)\",\"仁平 (1151–1154)\",\"久寿 (1154–1156)\",\"保元 (1156–1159)\",\"平治 (1159–1160)\",\"永历 (1160–1161)\",\"应保 (1161–1163)\",\"长宽 (1163–1165)\",\"永万 (1165–1166)\",\"仁安 (1166–1169)\",\"嘉应 (1169–1171)\",\"承安 (1171–1175)\",\"安元 (1175–1177)\",\"治承 (1177–1181)\",\"养和 (1181–1182)\",\"寿永 (1182–1184)\",\"元历 (1184–1185)\",\"文治 (1185–1190)\",\"建久 (1190–1199)\",\"正治 (1199–1201)\",\"建仁 (1201–1204)\",\"元久 (1204–1206)\",\"建永 (1206–1207)\",\"承元 (1207–1211)\",\"建历 (1211–1213)\",\"建保 (1213–1219)\",\"承久 (1219–1222)\",\"贞应 (1222–1224)\",\"元仁 (1224–1225)\",\"嘉禄 (1225–1227)\",\"安贞 (1227–1229)\",\"宽喜 (1229–1232)\",\"贞永 (1232–1233)\",\"天福 (1233–1234)\",\"文历 (1234–1235)\",\"嘉祯 (1235–1238)\",\"历仁 (1238–1239)\",\"延应 (1239–1240)\",\"仁治 (1240–1243)\",\"宽元 (1243–1247)\",\"宝治 (1247–1249)\",\"建长 (1249–1256)\",\"康元 (1256–1257)\",\"正嘉 (1257–1259)\",\"正元 (1259–1260)\",\"文应 (1260–1261)\",\"弘长 (1261–1264)\",\"文永 (1264–1275)\",\"建治 (1275–1278)\",\"弘安 (1278–1288)\",\"正应 (1288–1293)\",\"永仁 (1293–1299)\",\"正安 (1299–1302)\",\"干元 (1302–1303)\",\"嘉元 (1303–1306)\",\"德治 (1306–1308)\",\"延庆 (1308–1311)\",\"应长 (1311–1312)\",\"正和 (1312–1317)\",\"文保 (1317–1319)\",\"元应 (1319–1321)\",\"元亨 (1321–1324)\",\"正中 (1324–1326)\",\"嘉历 (1326–1329)\",\"元德 (1329–1331)\",\"元弘 (1331–1334)\",\"建武 (1334–1336)\",\"延元 (1336–1340)\",\"兴国 (1340–1346)\",\"正平 (1346–1370)\",\"建德 (1370–1372)\",\"文中 (1372–1375)\",\"天授 (1375–1379)\",\"康历 (1379–1381)\",\"弘和 (1381–1384)\",\"元中 (1384–1392)\",\"至德 (1384–1387)\",\"嘉庆 (1387–1389)\",\"康应 (1389–1390)\",\"明德 (1390–1394)\",\"应永 (1394–1428)\",\"正长 (1428–1429)\",\"永享 (1429–1441)\",\"嘉吉 (1441–1444)\",\"文安 (1444–1449)\",\"宝德 (1449–1452)\",\"享德 (1452–1455)\",\"康正 (1455–1457)\",\"长禄 (1457–1460)\",\"宽正 (1460–1466)\",\"文正 (1466–1467)\",\"应仁 (1467–1469)\",\"文明 (1469–1487)\",\"长享 (1487–1489)\",\"延德 (1489–1492)\",\"明应 (1492–1501)\",\"文龟 (1501–1504)\",\"永正 (1504–1521)\",\"大永 (1521–1528)\",\"享禄 (1528–1532)\",\"天文 (1532–1555)\",\"弘治 (1555–1558)\",\"永禄 (1558–1570)\",\"元龟 (1570–1573)\",\"天正 (1573–1592)\",\"文禄 (1592–1596)\",\"庆长 (1596–1615)\",\"元和 (1615–1624)\",\"宽永 (1624–1644)\",\"正保 (1644–1648)\",\"庆安 (1648–1652)\",\"承应 (1652–1655)\",\"明历 (1655–1658)\",\"万治 (1658–1661)\",\"宽文 (1661–1673)\",\"延宝 (1673–1681)\",\"天和 (1681–1684)\",\"贞享 (1684–1688)\",\"元禄 (1688–1704)\",\"宝永 (1704–1711)\",\"正德 (1711–1716)\",\"享保 (1716–1736)\",\"元文 (1736–1741)\",\"宽保 (1741–1744)\",\"延享 (1744–1748)\",\"宽延 (1748–1751)\",\"宝历 (1751–1764)\",\"明和 (1764–1772)\",\"安永 (1772–1781)\",\"天明 (1781–1789)\",\"宽政 (1789–1801)\",\"享和 (1801–1804)\",\"文化 (1804–1818)\",\"文政 (1818–1830)\",\"天保 (1830–1844)\",\"弘化 (1844–1848)\",\"嘉永 (1848–1854)\",\"安政 (1854–1860)\",\"万延 (1860–1861)\",\"文久 (1861–1864)\",\"元治 (1864–1865)\",\"庆应 (1865–1868)\",\"明治\",\"大正\",\"昭和\",\"平成\"],long:[\"大化 (645–650)\",\"白雉 (650–671)\",\"白凤 (672–686)\",\"朱鸟 (686–701)\",\"大宝 (701–704)\",\"庆云 (704–708)\",\"和铜 (708–715)\",\"灵龟 (715–717)\",\"养老 (717–724)\",\"神龟 (724–729)\",\"天平 (729–749)\",\"天平感宝 (749–749)\",\"天平胜宝 (749–757)\",\"天平宝字 (757–765)\",\"天平神护 (765–767)\",\"神护景云 (767–770)\",\"宝龟 (770–780)\",\"天应 (781–782)\",\"延历 (782–806)\",\"大同 (806–810)\",\"弘仁 (810–824)\",\"天长 (824–834)\",\"承和 (834–848)\",\"嘉祥 (848–851)\",\"仁寿 (851–854)\",\"齐衡 (854–857)\",\"天安 (857–859)\",\"贞观 (859–877)\",\"元庆 (877–885)\",\"仁和 (885–889)\",\"宽平 (889–898)\",\"昌泰 (898–901)\",\"延喜 (901–923)\",\"延长 (923–931)\",\"承平 (931–938)\",\"天庆 (938–947)\",\"天历 (947–957)\",\"天德 (957–961)\",\"应和 (961–964)\",\"康保 (964–968)\",\"安和 (968–970)\",\"天禄 (970–973)\",\"天延 (973–976)\",\"贞元 (976–978)\",\"天元 (978–983)\",\"永观 (983–985)\",\"宽和 (985–987)\",\"永延 (987–989)\",\"永祚 (989–990)\",\"正历 (990–995)\",\"长德 (995–999)\",\"长保 (999–1004)\",\"宽弘 (1004–1012)\",\"长和 (1012–1017)\",\"宽仁 (1017–1021)\",\"治安 (1021–1024)\",\"万寿 (1024–1028)\",\"长元 (1028–1037)\",\"长历 (1037–1040)\",\"长久 (1040–1044)\",\"宽德 (1044–1046)\",\"永承 (1046–1053)\",\"天喜 (1053–1058)\",\"康平 (1058–1065)\",\"治历 (1065–1069)\",\"延久 (1069–1074)\",\"承保 (1074–1077)\",\"正历 (1077–1081)\",\"永保 (1081–1084)\",\"应德 (1084–1087)\",\"宽治 (1087–1094)\",\"嘉保 (1094–1096)\",\"永长 (1096–1097)\",\"承德 (1097–1099)\",\"康和 (1099–1104)\",\"长治 (1104–1106)\",\"嘉承 (1106–1108)\",\"天仁 (1108–1110)\",\"天永 (1110–1113)\",\"永久 (1113–1118)\",\"元永 (1118–1120)\",\"保安 (1120–1124)\",\"天治 (1124–1126)\",\"大治 (1126–1131)\",\"天承 (1131–1132)\",\"长承 (1132–1135)\",\"保延 (1135–1141)\",\"永治 (1141–1142)\",\"康治 (1142–1144)\",\"天养 (1144–1145)\",\"久安 (1145–1151)\",\"仁平 (1151–1154)\",\"久寿 (1154–1156)\",\"保元 (1156–1159)\",\"平治 (1159–1160)\",\"永历 (1160–1161)\",\"应保 (1161–1163)\",\"长宽 (1163–1165)\",\"永万 (1165–1166)\",\"仁安 (1166–1169)\",\"嘉应 (1169–1171)\",\"承安 (1171–1175)\",\"安元 (1175–1177)\",\"治承 (1177–1181)\",\"养和 (1181–1182)\",\"寿永 (1182–1184)\",\"元历 (1184–1185)\",\"文治 (1185–1190)\",\"建久 (1190–1199)\",\"正治 (1199–1201)\",\"建仁 (1201–1204)\",\"元久 (1204–1206)\",\"建永 (1206–1207)\",\"承元 (1207–1211)\",\"建历 (1211–1213)\",\"建保 (1213–1219)\",\"承久 (1219–1222)\",\"贞应 (1222–1224)\",\"元仁 (1224–1225)\",\"嘉禄 (1225–1227)\",\"安贞 (1227–1229)\",\"宽喜 (1229–1232)\",\"贞永 (1232–1233)\",\"天福 (1233–1234)\",\"文历 (1234–1235)\",\"嘉祯 (1235–1238)\",\"历仁 (1238–1239)\",\"延应 (1239–1240)\",\"仁治 (1240–1243)\",\"宽元 (1243–1247)\",\"宝治 (1247–1249)\",\"建长 (1249–1256)\",\"康元 (1256–1257)\",\"正嘉 (1257–1259)\",\"正元 (1259–1260)\",\"文应 (1260–1261)\",\"弘长 (1261–1264)\",\"文永 (1264–1275)\",\"建治 (1275–1278)\",\"弘安 (1278–1288)\",\"正应 (1288–1293)\",\"永仁 (1293–1299)\",\"正安 (1299–1302)\",\"干元 (1302–1303)\",\"嘉元 (1303–1306)\",\"德治 (1306–1308)\",\"延庆 (1308–1311)\",\"应长 (1311–1312)\",\"正和 (1312–1317)\",\"文保 (1317–1319)\",\"元应 (1319–1321)\",\"元亨 (1321–1324)\",\"正中 (1324–1326)\",\"嘉历 (1326–1329)\",\"元德 (1329–1331)\",\"元弘 (1331–1334)\",\"建武 (1334–1336)\",\"延元 (1336–1340)\",\"兴国 (1340–1346)\",\"正平 (1346–1370)\",\"建德 (1370–1372)\",\"文中 (1372–1375)\",\"天授 (1375–1379)\",\"康历 (1379–1381)\",\"弘和 (1381–1384)\",\"元中 (1384–1392)\",\"至德 (1384–1387)\",\"嘉庆 (1387–1389)\",\"康应 (1389–1390)\",\"明德 (1390–1394)\",\"应永 (1394–1428)\",\"正长 (1428–1429)\",\"永享 (1429–1441)\",\"嘉吉 (1441–1444)\",\"文安 (1444–1449)\",\"宝德 (1449–1452)\",\"享德 (1452–1455)\",\"康正 (1455–1457)\",\"长禄 (1457–1460)\",\"宽正 (1460–1466)\",\"文正 (1466–1467)\",\"应仁 (1467–1469)\",\"文明 (1469–1487)\",\"长享 (1487–1489)\",\"延德 (1489–1492)\",\"明应 (1492–1501)\",\"文龟 (1501–1504)\",\"永正 (1504–1521)\",\"大永 (1521–1528)\",\"享禄 (1528–1532)\",\"天文 (1532–1555)\",\"弘治 (1555–1558)\",\"永禄 (1558–1570)\",\"元龟 (1570–1573)\",\"天正 (1573–1592)\",\"文禄 (1592–1596)\",\"庆长 (1596–1615)\",\"元和 (1615–1624)\",\"宽永 (1624–1644)\",\"正保 (1644–1648)\",\"庆安 (1648–1652)\",\"承应 (1652–1655)\",\"明历 (1655–1658)\",\"万治 (1658–1661)\",\"宽文 (1661–1673)\",\"延宝 (1673–1681)\",\"天和 (1681–1684)\",\"贞享 (1684–1688)\",\"元禄 (1688–1704)\",\"宝永 (1704–1711)\",\"正德 (1711–1716)\",\"享保 (1716–1736)\",\"元文 (1736–1741)\",\"宽保 (1741–1744)\",\"延享 (1744–1748)\",\"宽延 (1748–1751)\",\"宝历 (1751–1764)\",\"明和 (1764–1772)\",\"安永 (1772–1781)\",\"天明 (1781–1789)\",\"宽政 (1789–1801)\",\"享和 (1801–1804)\",\"文化 (1804–1818)\",\"文政 (1818–1830)\",\"天保 (1830–1844)\",\"弘化 (1844–1848)\",\"嘉永 (1848–1854)\",\"安政 (1854–1860)\",\"万延 (1860–1861)\",\"文久 (1861–1864)\",\"元治 (1864–1865)\",\"庆应 (1865–1868)\",\"明治\",\"大正\",\"昭和\",\"平成\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},persian:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"波斯历\"],short:[\"波斯历\"],long:[\"波斯历\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}},roc:{months:{narrow:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],short:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],long:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"]},days:{narrow:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],short:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],long:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"]},eras:{narrow:[\"民国前\",\"民国\"],short:[\"民国前\",\"民国\"],long:[\"民国前\",\"民国\"]},dayPeriods:{am:\"上午\",pm:\"下午\"}}}},number:{nu:[\"latn\"],patterns:{decimal:{positivePattern:\"{number}\",negativePattern:\"{minusSign}{number}\"},currency:{positivePattern:\"{currency}{number}\",negativePattern:\"{minusSign}{currency}{number}\"},percent:{positivePattern:\"{number}{percentSign}\",negativePattern:\"{minusSign}{number}{percentSign}\"}},symbols:{hanidec:{decimal:\".\",group:\",\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"},latn:{decimal:\".\",group:\",\",nan:\"NaN\",plusSign:\"+\",minusSign:\"-\",percentSign:\"%\",infinity:\"∞\"}},currencies:{AUD:\"AU$\",BRL:\"R$\",CAD:\"CA$\",CNY:\"¥\",EUR:\"€\",GBP:\"£\",HKD:\"HK$\",ILR:\"ILS\",ILS:\"₪\",INR:\"₹\",JPY:\"JP¥\",KRW:\"₩\",MXN:\"MX$\",NZD:\"NZ$\",TWD:\"NT$\",USD:\"US$\",VND:\"₫\",XAF:\"FCFA\",XCD:\"EC$\",XOF:\"CFA\",XPF:\"CFPF\"}}});","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\n","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r\\+\\/\\=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r\\+\\/\\=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = new Buffer(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n var f = basename(path);\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n 'sha': 'SHA-1',\n 'sha-1': 'SHA-1',\n 'sha1': 'SHA-1',\n 'sha256': 'SHA-256',\n 'sha-256': 'SHA-256',\n 'sha384': 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n 'sha512': 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\n\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n process.nextTick(function () {\n callback(null, out)\n })\n }, function (e) {\n process.nextTick(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n return process.nextTick(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n }\n\n checkParameters(password, salt, iterations, keylen)\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n defaultEncoding = 'utf-8'\n} else {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n}\nmodule.exports = defaultEncoding\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nfunction checkBuffer (buf, name) {\n if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) {\n throw new TypeError(name + ' must be a buffer or string')\n }\n}\n\nmodule.exports = function (password, salt, iterations, keylen) {\n checkBuffer(password, 'Password')\n checkBuffer(salt, 'Salt')\n\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar Buffer = require('safe-buffer').Buffer\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(password, salt, iterations, keylen)\n\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","module.exports = require('./lib/_stream_duplex.js');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","module.exports = require('events').EventEmitter;\n","module.exports = require('./readable').PassThrough\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","module.exports = require('./readable').Transform\n","module.exports = require('./lib/_stream_writable.js');\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a