Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/photos.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2020-10-10 12:30:39 +0300
committernpmbuildbot[bot] <npmbuildbot[bot]@users.noreply.github.com>2020-10-10 12:32:58 +0300
commit20d8d3ee94205de1d34bdea5b963d78880066934 (patch)
tree5218ddbf1a91bf78d282be7849f6acb5b7a50162 /js/photos-2.js.map
parent38461b618b5899af839ba1beb06ac649ffe06df0 (diff)
Bump @nextcloud/vue from 2.6.8 to 2.7.0
Bumps [@nextcloud/vue](https://github.com/nextcloud/nextcloud-vue) from 2.6.8 to 2.7.0. - [Release notes](https://github.com/nextcloud/nextcloud-vue/releases) - [Commits](https://github.com/nextcloud/nextcloud-vue/compare/v2.6.8...v2.7.0) Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: npmbuildbot[bot] <npmbuildbot[bot]@users.noreply.github.com>
Diffstat (limited to 'js/photos-2.js.map')
-rw-r--r--js/photos-2.js.map2
1 files changed, 1 insertions, 1 deletions
diff --git a/js/photos-2.js.map b/js/photos-2.js.map
index 5301440e..15d16262 100644
--- a/js/photos-2.js.map
+++ b/js/photos-2.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/minimalistic-assert/index.js","webpack:///./node_modules/elliptic/lib/elliptic/utils.js","webpack:///./node_modules/webdav/dist/node/response.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/hash.js/lib/hash/utils.js","webpack:///./node_modules/elliptic/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/fast-xml-parser/src/util.js","webpack:///./node_modules/cipher-base/index.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/webdav/dist/node/merge.js","webpack:///./node_modules/randombytes/browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/errors-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/sha.js/hash.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/create-hash/browser.js","webpack:///./node_modules/core-util-is/lib/util.js","webpack:///./node_modules/buffer-xor/index.js","webpack:///./node_modules/hash.js/lib/hash/common.js","webpack:///./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///./node_modules/webdav/dist/node/encode.js","webpack:///./node_modules/stream-browserify/index.js","webpack:///./node_modules/process-nextick-args/index.js","webpack:///./node_modules/browserify-aes/aes.js","webpack:///./node_modules/evp_bytestokey/index.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///./node_modules/parse-asn1/index.js","webpack:///./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js","webpack:///./node_modules/md5.js/index.js","webpack:///./node_modules/util-deprecate/browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///./node_modules/ripemd160/index.js","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/des.js/lib/des/cipher.js","webpack:///./node_modules/browserify-aes/browser.js","webpack:///./node_modules/browserify-aes/modes/index.js","webpack:///./node_modules/brorand/index.js","webpack:///./node_modules/browserify-sign/node_modules/safe-buffer/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///./node_modules/browserify-rsa/index.js","webpack:///./node_modules/elliptic/lib/elliptic.js","webpack:///./node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/hash.js/lib/hash.js","webpack:///./node_modules/safer-buffer/safer.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/public-encrypt/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/webdav/dist/node/url.js","webpack:///./node_modules/url-parse/index.js","webpack:///./node_modules/webdav/dist/node/interface/dav.js","webpack:///./node_modules/webdav/dist/node/index.js","webpack:///./node_modules/webdav/dist/node/request.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/webdav/dist/node/patcher.js","webpack:///./node_modules/webdav/dist/node/auth.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/hash-base/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/create-hmac/browser.js","webpack:///./node_modules/create-hash/md5.js","webpack:///./node_modules/pbkdf2/browser.js","webpack:///./node_modules/pbkdf2/lib/precondition.js","webpack:///./node_modules/pbkdf2/lib/default-encoding.js","webpack:///./node_modules/pbkdf2/lib/sync-browser.js","webpack:///./node_modules/pbkdf2/lib/to-buffer.js","webpack:///./node_modules/des.js/lib/des/utils.js","webpack:///./node_modules/des.js/lib/des/des.js","webpack:///./node_modules/browserify-aes/modes/ctr.js","webpack:///./node_modules/browserify-aes/incr32.js","webpack:///./node_modules/browserify-aes/authCipher.js","webpack:///./node_modules/browserify-aes/streamCipher.js","webpack:///./node_modules/diffie-hellman/lib/generatePrime.js","webpack:///./node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/miller-rabin/lib/mr.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///./node_modules/hash.js/lib/hash/sha/common.js","webpack:///./node_modules/hash.js/lib/hash/sha/256.js","webpack:///./node_modules/hash.js/lib/hash/sha/512.js","webpack:///./node_modules/bn.js/lib/bn.js","webpack:///./node_modules/asn1.js/lib/asn1.js","webpack:///./node_modules/asn1.js/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///./node_modules/public-encrypt/mgf.js","webpack:///./node_modules/public-encrypt/xor.js","webpack:///./node_modules/public-encrypt/withPublic.js","webpack:///./node_modules/path-posix/index.js","webpack:///./node_modules/webdav/dist/node/interface/stat.js","webpack:///./node_modules/webdav/dist/node/interface/createStream.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/url-join/lib/url-join.js","webpack:///./node_modules/webdav/dist/node/fetch.js","webpack:///./node_modules/hot-patcher/source/index.js","webpack:///./node_modules/hot-patcher/source/functions.js","webpack:///./node_modules/base-64/base64.js","webpack:///./node_modules/he/he.js","webpack:///./node_modules/webdav/dist/node/crypto.js","webpack:///./node_modules/crypto-browserify/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/hash-base/node_modules/safe-buffer/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.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/sha384.js","webpack:///./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack:///./node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/readable-stream/writable-browser.js","webpack:///./node_modules/readable-stream/duplex-browser.js","webpack:///./node_modules/readable-stream/transform.js","webpack:///./node_modules/readable-stream/passthrough.js","webpack:///./node_modules/create-hmac/legacy.js","webpack:///./node_modules/browserify-sign/algos.js","webpack:///./node_modules/pbkdf2/lib/async.js","webpack:///./node_modules/browserify-cipher/browser.js","webpack:///./node_modules/browserify-des/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/ede.js","webpack:///./node_modules/browserify-aes/encrypter.js","webpack:///./node_modules/browserify-aes/modes/ecb.js","webpack:///./node_modules/browserify-aes/modes/cbc.js","webpack:///./node_modules/browserify-aes/modes/cfb.js","webpack:///./node_modules/browserify-aes/modes/cfb8.js","webpack:///./node_modules/browserify-aes/modes/cfb1.js","webpack:///./node_modules/browserify-aes/modes/ofb.js","webpack:///./node_modules/browserify-aes/ghash.js","webpack:///./node_modules/browserify-aes/decrypter.js","webpack:///./node_modules/browserify-des/modes.js","webpack:///./node_modules/diffie-hellman/browser.js","webpack:///./node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/diffie-hellman/lib/dh.js","webpack:///./node_modules/browserify-sign/browser/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///./node_modules/browserify-sign/browser/sign.js","webpack:///./node_modules/browserify-rsa/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/edwards.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/384.js","webpack:///./node_modules/hash.js/lib/hash/ripemd.js","webpack:///./node_modules/hash.js/lib/hash/hmac.js","webpack:///./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///./node_modules/hmac-drbg/lib/hmac-drbg.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/parse-asn1/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/api.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/base/index.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///./node_modules/parse-asn1/certificate.js","webpack:///./node_modules/parse-asn1/fixProc.js","webpack:///./node_modules/browserify-sign/browser/verify.js","webpack:///./node_modules/create-ecdh/browser.js","webpack:///./node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/public-encrypt/browser.js","webpack:///./node_modules/public-encrypt/publicEncrypt.js","webpack:///./node_modules/public-encrypt/privateDecrypt.js","webpack:///./node_modules/randomfill/browser.js","webpack:///./node_modules/webdav/dist/node/factory.js","webpack:///./node_modules/requires-port/index.js","webpack:///./node_modules/querystringify/index.js","webpack:///./node_modules/webdav/dist/node/interface/directoryContents.js","webpack:///./node_modules/util/util.js","webpack:///./node_modules/util/support/isBufferBrowser.js","webpack:///./node_modules/util/node_modules/inherits/inherits_browser.js","webpack:///./node_modules/minimatch/minimatch.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/brace-expansion/index.js","webpack:///./node_modules/concat-map/index.js","webpack:///./node_modules/balanced-match/index.js","webpack:///./node_modules/fast-xml-parser/src/parser.js","webpack:///./node_modules/fast-xml-parser/src/node2json.js","webpack:///./node_modules/fast-xml-parser/src/xmlNode.js","webpack:///./node_modules/fast-xml-parser/src/validator.js","webpack:///./node_modules/fast-xml-parser/src/nimndata.js","webpack:///./node_modules/fast-xml-parser/src/node2json_str.js","webpack:///./node_modules/fast-xml-parser/src/json2xml.js","webpack:///./node_modules/nested-property/index.js","webpack:///./node_modules/webdav/dist/node/interface/createDirectory.js","webpack:///./node_modules/webdav/dist/node/interface/custom.js","webpack:///./node_modules/webdav/dist/node/interface/delete.js","webpack:///./node_modules/webdav/dist/node/interface/exists.js","webpack:///./node_modules/webdav/dist/node/interface/getFile.js","webpack:///./node_modules/webdav/dist/node/interface/quota.js","webpack:///./node_modules/webdav/dist/node/interface/moveFile.js","webpack:///./node_modules/webdav/dist/node/interface/copyFile.js","webpack:///./node_modules/webdav/dist/node/interface/putFile.js"],"names":["Object","create","module","exports","ctor","superCtor","super_","prototype","constructor","value","enumerable","writable","configurable","TempCtor","buffer","Buffer","copyProps","src","dst","key","SafeBuffer","arg","encodingOrOffset","length","from","alloc","allocUnsafe","allocUnsafeSlow","TypeError","size","fill","encoding","buf","undefined","SlowBuffer","base64","ieee754","isArray","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","Uint8Array","__proto__","this","Error","ArrayBuffer","array","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","string","isEncoding","actual","write","slice","fromString","obj","isBuffer","len","checked","copy","val","type","data","fromObject","assertSize","i","toString","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","start","end","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","b","n","m","bidirectionalIndexOf","dir","isNaN","arrayIndexOf","indexOf","call","lastIndexOf","arr","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","push","charCodeAt","asciiToBytes","latin1Write","base64Write","ucs2Write","units","c","hi","lo","utf16leToBytes","fromByteArray","Math","min","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","fromCharCode","apply","decodeCodePointsArray","INSPECT_MAX_BYTES","global","foo","subarray","e","typedArraySupport","poolSize","_augment","Symbol","species","defineProperty","_isBuffer","compare","a","x","y","concat","list","pos","swap16","swap32","swap64","arguments","equals","inspect","max","match","join","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","Array","_arr","ret","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","floor","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","set","code","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","trim","replace","stringtrim","base64clean","bind","isUndefined","isObject","isFunction","forEach","fn","l","hasOwnProperty","isArrayBuffer","isFormData","FormData","isArrayBufferView","isString","isNumber","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","window","document","merge","result","assignValue","deepMerge","extend","thisArg","assert","msg","equal","r","utils","BN","minAssert","minUtils","toArray","zero2","encode","getNAF","num","w","bits","naf","bitLength","ws","k","clone","z","mod","andln","isOdd","isubn","iushrn","getJSF","k1","k2","jsf","d1","d2","cmpn","u1","u2","m8","m14","m24","cachedProperty","name","computer","parseBytes","intFromLE","minimatch","require","handleResponseCode","response","err","status","statusText","processGlobFilter","files","glob","filter","file","filename","matchBase","processResponsePayload","isDetailed","headers","webpackPolyfill","deprecate","paths","children","get","inherits","isSurrogatePair","htonl","word","zero8","enc","p","toHex32","endian","join32","split32","rotr32","rotl32","sum32","sum32_3","sum32_4","d","sum32_5","sum64","ah","al","bh","sum64_hi","bl","sum64_lo","sum64_4_hi","ch","cl","dh","dl","carry","sum64_4_lo","sum64_5_hi","eh","el","sum64_5_lo","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","number","base","isBN","negative","words","red","_init","wordSize","parseHex","parseBase","left","right","cmp","_initNumber","_initArray","_parseHex","_parseBase","strip","ceil","off","limbLen","limbPow","total","imuln","_iaddn","dest","_expand","_normSign","zeros","groupSizes","groupBases","smallMulTo","self","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","toBuffer","toArrayLike","ArrayType","reqLength","q","clz32","_countBits","t","_zeroBits","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","add","comb10MulTo","mid","o","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","odd","conjugate","normalize13b","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","addn","subn","iabs","_ishlnsubmul","shift","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","D","g","isEven","yp","xp","im","jm","gcd","_invmp","x1","x2","delta","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","tmp","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","_strip","input","output","outLen","prev","next","mod3","one","nOne","lpow","inv","wnd","current","currentLen","mont","u","nameStartChar","nameRegexp","regexName","RegExp","isExist","v","isEmptyObject","keys","arrayMode","getValue","buildOptions","options","defaultOptions","props","newOptions","isName","exec","getAllMatches","regex","matches","allmatches","index","Transform","StringDecoder","CipherBase","hashMode","_finalOrDigest","final","_final","__final","_decoder","_encoding","update","inputEnc","outputEnc","outData","_update","_toString","setAutoPadding","getAuthTag","setAuthTag","setAAD","_transform","_flush","done","fin","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","args","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","EventEmitter","init","once","emitter","Promise","resolve","reject","eventListener","errorListener","removeListener","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","_addListener","prepend","events","existing","warning","newListener","emit","unshift","warned","count","console","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","getPrototypeOf","setMaxListeners","getMaxListeners","doError","error","er","message","context","handler","listeners","addListener","on","prependListener","prependOnceListener","position","originalListener","pop","spliceOne","removeAllListeners","rawListeners","eventNames","nb","nenc","retried","_normalizeEncoding","normalizeEncoding","text","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8CheckIncomplete","pna","objectKeys","Duplex","util","Readable","Writable","method","readable","allowHalfOpen","onend","_writableState","ended","nextTick","onEndNT","highWaterMark","_readableState","destroyed","_destroy","cb","proto","isPlainObject","assign","setPrototypeOf","mergeObjects","obj1","obj2","items","nextItem","crypto","msCrypto","getRandomValues","generated","process","codes","createErrorType","Base","NodeError","_Base","subClass","superClass","arg1","arg2","arg3","getMessage","oneOf","expected","thing","map","determiner","search","this_len","substring","endsWith","getBuffer","Hash","blockSize","finalSize","_block","_finalSize","_blockSize","_len","block","accum","assigned","remainder","digest","rem","lowBits","highBits","hash","_hash","MD5","RIPEMD160","sha","alg","objectToString","isBoolean","isNull","isNullOrUndefined","isSymbol","isRegExp","isError","isPrimitive","BlockHash","pending","pendingTotal","outSize","hmacStrength","padLength","_delta8","_delta32","_pad","_digest","Reporter","DecoderBuffer","EncoderBuffer","reporter","item","isEncoderBuffer","isDecoderBuffer","save","restore","isEmpty","skip","raw","fail","_reporterState","decode","decodeHTMLEntities","WEB","txt","createElement","innerHTML","fromBase64","toBase64","Stream","EE","PassThrough","source","ondata","chunk","pause","ondrain","resume","_isStdio","onclose","didOnEnd","destroy","onerror","cleanup","version","asUInt32Array","scrubVec","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","AES","_key","_reset","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","decryptBlock","m1","scrub","password","salt","keyBits","ivLen","keyLen","iv","used","keyStart","ivStart","BaseCurve","conf","zero","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","curve","precomputed","point","validate","_fixedNafMul","doubles","_getDoubles","I","step","repr","nafW","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","ja","jb","decodePoint","pointFromX","encodeCompressed","_encode","compact","getX","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","asn1","aesid","fixProc","ciphers","compat","parseKeys","passphrase","subtype","ndata","stripped","tag","certificate","tbsCertificate","subjectPublicKeyInfo","PublicKey","algorithm","RSAPublicKey","subjectPublicKey","subjectPrivateKey","params","pub_key","DSAparam","decrypt","kde","kdeparams","iters","algo","cipher","cipherText","keylen","pbkdf2Sync","createDecipheriv","EncryptedPrivateKey","PrivateKey","RSAPrivateKey","privateKey","ECPrivateKey","priv_key","DSAPrivateKey","parameters","signature","xmlNode","TagType","regx","parseFloat","attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","ignoreNameSpace","allowBooleanAttributes","parseNodeValue","parseAttributeValue","trimValues","cdataTagName","cdataPositionChar","tagValueProcessor","tagName","attrValueProcessor","attrName","stopNodes","processTagValue","parsedTags","parentTagName","parseValue","parseTrueNumberOnly","checkForTagType","resolveNameSpace","tagname","tags","prefix","charAt","shouldParse","attrsRegx","buildAttributesMap","attrStr","attrs","attrCollection","getTraversalObj","xmlData","xmlObj","currentNode","tagsRegx","nextTag","tagType","parent","child","attrsMap","startIndex","childNode","addChild","HashBase","ARRAY16","_a","_b","_c","_d","rotl","fnF","fnG","fnH","fnI","_blockOffset","_length","config","localStorage","trace","ERR_STREAM_PREMATURE_CLOSE","noop","eos","stream","opts","callback","called","onlegacyfinish","onfinish","writableEnded","finished","readableEnded","endEmitted","onrequest","req","setHeader","abort","isRequest","zl","zr","sl","sr","hl","hr","_e","fn1","fn2","fn3","fn4","fn5","ar","br","cr","dr","tl","tr","Algorithm","sha1","sha224","sha256","sha384","sha512","CorkedRequest","_this","entry","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","browser","setImmediate","WritableState","internalUtil","OurUint8Array","realHasInstance","destroyImpl","nop","isDuplex","objectMode","writableObjectMode","hwm","writableHwm","writableHighWaterMark","defaultHwm","finalCalled","needDrain","ending","noDecode","decodeStrings","defaultEncoding","writing","corked","sync","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","_write","writev","_writev","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","prefinish","hasInstance","object","_uint8ArrayToBuffer","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","last","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_undestroy","undestroy","Cipher","bufferOff","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","inputOff","outputOff","first","_finalEncrypt","_finalDecrypt","_unpad","deciphers","modes","createCipher","createCipheriv","Cipheriv","createDecipher","Decipher","Decipheriv","listCiphers","getCiphers","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","Rand","rand","generate","_rand","getBytes","getByte","randomBytes","crt","priv","blinds","getr","blinder","bn","modulus","publicExponent","unblinder","blind","blinded","c1","prime1","c2","prime2","qinv","coefficient","exponent1","m2","exponent2","elliptic","curves","ec","eddsa","pre","PresetCurve","short","edwards","isInfinity","defineCurve","lambda","basis","common","ripemd","hmac","ripemd160","safer","Safer","kStringMaxLength","binding","constants","MAX_LENGTH","MAX_STRING_LENGTH","methods","Node","_baseState","reverseArgs","choice","optional","any","use","useDecoder","explicit","implicit","contains","_wrap","stateProps","cstate","prop","body","_useArgs","def","newKey","_decode","wrapResult","prevObj","present","prevKey","enterKey","_peekTag","_decodeGeneric","_decodeChoice","enterObject","_decodeTag","track","path","_getUse","leaveObject","exitKey","leaveKey","_decodeList","test","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","entity","_use","some","node","_createEncoderBuffer","_encodeValue","_skipDefault","content","primitive","_encodeChoice","_encodePrimitive","cls","_encodeComposite","JSON","stringify","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","_isPrintstr","errors","ReporterError","rethrow","pathLen","now","inherited","elem","stack","partial","captureStackTrace","reverse","tagClass","0","1","2","3","tagClassByName","tagByName","URL","normalisePath","pathStr","normalisedPath","decodeURIComponent","extractURLPath","fullURL","urlPath","pathname","normaliseHREF","href","required","qs","slashes","protocolre","trimLeft","rules","address","NaN","ignore","query","lolcation","loc","location","finaldestination","protocol","Url","unescape","extractProtocol","rest","parser","relative","extracted","parse","instruction","instructions","url","up","splice","port","host","hostname","username","auth","origin","part","char","ins","xmlParser","nestedProp","getPropertyOfType","normaliseResult","multistatus","normaliseResponse","parseXML","xml","prepareFileFromProps","rawFilename","getlastmodified","lastMod","getcontentlength","rawSize","resourcetype","resourceType","getcontenttype","mimeType","getetag","etag","collection","stat","basename","lastmod","mime","translateDiskSpace","axios","createClient","getPatcher","joinURLParts","fetch","encodePath","replaced","encodeURIComponent","joinURL","parts","reduce","nextPart","partIndex","prepareRequestOptions","requestOptions","methodOptions","httpAgent","httpsAgent","withCredentials","maxContentLength","onUploadProgress","validateStatus","request","paramsSerializer","serializedParams","toISOString","hashmarkIndex","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","defaults","XMLHttpRequest","transformRequest","transformResponse","timeout","xsrfCookieName","xsrfHeaderName","settle","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","requestData","requestHeaders","Authorization","btoa","fullPath","baseURL","open","toUpperCase","onreadystatechange","readyState","responseURL","responseHeaders","getAllResponseHeaders","responseType","responseText","onabort","ontimeout","timeoutErrorMessage","cookies","xsrfValue","setRequestHeader","onDownloadProgress","addEventListener","upload","cancelToken","promise","then","cancel","send","enhanceError","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","axiosKeys","otherKeys","Cancel","HotPatcher","__patcher","md5","ha1Compute","generateBasicAuthHeader","encoded","generateTokenAuthHeader","tokenInfo","token_type","access_token","generateDigestAuthHeader","uri","qop","ncString","nc","ha1","cnonce","realm","nonce","ha2","digestResponse","authValues","opaque","authHeader","_finalized","throwIfNotStringOrBuffer","ReadableState","EElistenerCount","debug","debugUtil","debuglog","createReadableStreamAsyncIterator","BufferList","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","readableObjectMode","pipes","pipesCount","flowing","reading","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","awaitDrain","readingMore","decoder","_read","readableAddChunk","addToFront","skipChunkCheck","emitReadable","emitReadable_","onEofChunk","chunkInvalid","addChunk","maybeReadMore","isPaused","setEncoding","head","clear","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","cleanedUp","pipeOnDrain","event","dests","ev","wrap","asyncIterator","_fromList","iterable","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","rState","ERR_INVALID_OPT_VALUE","duplexKey","highWaterMarkFrom","ERR_MULTIPLE_CALLBACK","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writechunk","rs","needTransform","writeencoding","flush","err2","K","W","Sha256","_w","maj","sigma0","sigma1","gamma0","_f","_g","_h","f","T1","T2","H","Sha512","Ch","xl","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","fh","gh","hh","fl","gl","xh","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","writeInt64BE","readableHwm","readableHighWaterMark","needMoreData","hasStrings","tail","copyFromBufferString","copyFromBuffer","fromListPartial","increasedAwaitDrain","_this2","Legacy","ZEROS","Hmac","blocksize","_alg","ipad","_ipad","opad","_opad","pbkdf2","MAX_ALLOC","iterations","checkParameters","sizes","rmd160","saltLen","shaFunc","getDigest","ipad1","ipad2","run","DK","block1","destPos","hLen","T","U","ip","inL","inR","outL","outR","rip","pc1","r28shl","pc2table","pc2","expand","sTable","substitute","permuteTable","padSplit","group","DESState","DES","_desState","deriveKeys","shiftTable","kL","kR","inp","inOff","outOff","_encrypt","_decrypt","pad","lStart","rStart","keyL","keyR","incr32","getBlock","_cipher","_prev","encrypt","chunkNum","_cache","aes","GHASH","StreamCipher","ck","_ghash","_finID","ghash","toPad","ivBits","calcIv","_secCache","_alen","_mode","_authTag","_called","rump","xorTest","findPrime","simpleSieve","fermatTest","TWENTYFOUR","millerRabin","ONE","TWO","FIVE","TEN","THREE","ELEVEN","FOUR","_getPrimes","gen","n2","brorand","MillerRabin","_randbelow","min_bytes","_randrange","stop","rone","n1","rn1","getDivisor","ch32","maj32","p32","ft_1","s0_256","s1_256","g0_256","g1_256","shaCommon","sha256_K","SHA256","sha512_K","SHA512","ch64_hi","yh","yl","zh","ch64_lo","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","move","_move","for","modrn","allocate","_toArrayLikeLE","_toArrayLikeBE","isNegNum","bignum","define","decoders","encoders","der","pem","DEREncoder","tree","DERNode","encodedTag","encodeTag","header","lenOctets","unused","id","values","ident","objid","time","date","Date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","sign","_getEncoder","dataBuffer","defaultBuffer","DERDecoder","derDecodeTag","oct","tagStr","derDecodeLen","decodedTag","_skipUntilEnd","possibleEnd","numstr","printstr","identifiers","subident","second","year","mon","day","hour","sec","UTC","_getDecoder","createHash","i2ops","seed","paddedMsg","normalizeArray","allowAboveRoot","splitPathRe","posix","posixSplitPath","resolvedPath","resolvedAbsolute","cwd","normalize","isAbsolute","trailingSlash","segment","to","fromParts","toParts","samePartsLength","outputParts","_makeLong","dirname","root","extname","format","pathObject","sep","pathString","allParts","delimiter","urlTools","parseStat","responseItem","propstat","filePath","getStat","remoteURL","Accept","Depth","details","responseHandlers","NOOP","createReadStream","outStream","PassThroughStream","rangeHeader","range","Range","getFileStream","catch","createWriteStream","writeStream","overwrite","setTimeout","Axios","mergeConfig","createInstance","defaultConfig","instance","instanceConfig","CancelToken","isCancel","all","promises","spread","default","InterceptorManager","dispatchRequest","interceptors","chain","interceptor","fulfilled","rejected","getUri","handlers","eject","transformData","throwIfCancellationRequested","throwIfRequested","reason","fns","normalizedName","isAxiosError","description","fileName","lineNumber","columnNumber","isAbsoluteURL","combineURLs","requestedURL","relativeURL","ignoreDuplicateOf","line","originURL","msie","userAgent","urlParsingNode","resolveURL","setAttribute","requestURL","expires","domain","secure","cookie","toGMTString","remove","executor","resolvePromise","token","strArray","resultArray","component","definition","parseAuth","uid","random","makeNonce","patchInline","hasDigestAuth","response2","sequence","createNewItem","original","_configuration","registry","getEmptyAction","__type__","allowTargetOverrides","configuration","foreignKey","isPatched","patch","execute","newAction","freeExports","freeGlobal","InvalidCharacterError","TABLE","REGEX_SPACE_CHARACTERS","bitStorage","bitCounter","regexAstralSymbols","regexAsciiWhitelist","regexBmpWhitelist","regexEncodeNonAscii","encodeMap","'","regexEscape","escapeMap","regexInvalidEntity","regexInvalidRawCodePoint","regexDecode","decodeMap","decodeMapLegacy","decodeMapNumeric","invalidReferenceCodePoints","stringFromCharCode","has","propertyName","codePointToSymbol","strict","parseError","hexEscape","decEscape","encodeEverything","useNamedReferences","allowUnsafeSymbols","escapeCodePoint","decimal","escapeBmpSymbol","symbol","$0","high","low","html","$1","$2","$3","$4","$5","$6","$7","$8","semicolon","decDigits","hexDigits","reference","isAttributeValue","he","user","pass","rng","pseudoRandomBytes","prng","createHmac","algos","algoKeys","hashes","getHashes","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createSign","Sign","createVerify","Verify","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","lookup","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","log","LN2","pipeline","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","_defineProperty","_defineProperties","descriptor","custom","Constructor","_classCallCheck","protoProps","staticProps","_getString","_getBuffer","getOwnPropertyDescriptors","defineProperties","_objectSpread","depth","customInspect","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","iter","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","lastPromise","wrapForNext","_Object$create","iterator","ERR_MISSING_ARGS","destroyer","closed","popCallback","streams","destroys","Sha","rotl30","ft","Sha1","rotl5","Sha224","Sha384","ZERO_BUF","subtle","toBrowser","checks","browserPbkdf2","importKey","deriveBits","prom","checkNative","resp","aesModes","desModes","ebtk","suite","des","instantiate","EDE","modeName","_des","des3","CBCState","_cbcInit","_cbcState","superProto","EDEState","k3","_edeState","MODES","AuthCipher","Splitter","_autopadding","PADDING","cache","setTo","padBuff","encryptStart","encryptByte","byteParam","shiftIn","ZEROES","fromArray","_multiply","lsbVi","Vi","Zi","abl","_last","padded","unpad","autoPadding","DH","ENCODINGS","generator","genc","generatePrime","SEVEN","setPublicKey","pub","_pub","setPrivateKey","_priv","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","formatReturnValue","hex","checkPrime","__gen","generateKeys","_gen","getPublicKey","computeSecret","other","secret","getPrime","front","getPrivateKey","getGenerator","verify","algorithms","_hashType","_tag","_signType","sig","EC","getKey","hlen","hbits","bits2int","bits2octets","obits","makeKey","kv","makeR","hashType","signType","curveId","keyFromPrivate","toDER","ecSign","dsaSign","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","Point","isRed","inf","JPoint","zOne","betas","_getEndoRoots","lambdas","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","y2","len1","_endoSplit","v1","v2","p1","p2","q1","q2","ax","rhs","_endoWnafMulAdd","npoints","ncoeffs","fromJSON","endoMul","obj2point","nx","ny","ys1","dyinv","mulAdd","jmulAdd","_precompute","negate","zinv","zinv2","ay","pz2","z2","h2","h3","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","eqXToP","zs","xc","MontCurve","i4","a24","aa","bb","diffAdd","da","jumlAdd","EdwardsCurve","twisted","mOneA","dd","oneC","_mulA","_mulC","lhs","pointFromY","_extDbl","nt","_projDbl","_extAdd","_projAdd","zi","sha1_K","SHA1","SHA224","SHA384","Kh","E","Ah","Bh","Dh","Eh","rh","sh","inner","outer","HmacDRBG","KeyPair","Signature","nh","keyPair","fromPrivate","keyFromPublic","fromPublic","genKeyPair","drbg","pers","persEnc","entropy","entropyEnc","ns2","_truncateToN","truncOnly","bkey","getPrivate","ns1","kp","kpX","recoveryParam","canonical","sinv","getPublic","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","predResist","minEntropy","_reseed","reseedInterval","V","nonceEnc","_hmac","kmac","reseed","addEnc","temp","_importPrivate","privEnc","_importPublic","pubEnc","derive","_importDER","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","slen","backHalf","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","messagePrefix","Rencoded","encodePoint","s_","pubBytes","S","makeSignature","SG","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","seq","int","AlgorithmIdentifier","bitstr","null_","PrivateKeyInfo","octstr","EncryptedPrivateKeyInfo","ECParameters","namedCurve","Entity","_createNamed","Generated","_initNamed","PEMEncoder","label","PEMDecoder","lines","_reverse","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","bool","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherKey","match2","checkValue","pubkey","ecVerify","unpacked","montp","dsaVerify","padNum","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","p256","secp256r1","secp192r1","p384","p521","inenc","mgf","withPublic","publicKey","iHash","hLen2","ps","dblen","maskedDb","maskedSeed","oaep","cur","nonZero","pkcs1","zBuffer","db","dif","oldBrowser","safeBuffer","randombytes","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","authTools","directoryContents","createDir","deletion","pathsExist","getFile","quota","putFile","stats","runtimeOptions","remotePath","copyFile","targetRemotePath","copyOptions","createDirectory","dirPath","createOptions","remoteFilename","createStream","customRequest","customOptions","deleteFile","deleteOptions","exists","existsOptions","pathExists","getDirectoryContents","getOptions","getFileContents","getFileContentsString","getFileContentsBuffer","getFileDownloadLink","getFileLink","getFileUploadLink","putOptions","getQuota","moveFile","moveOptions","putFileContents","pairs","pathPosix","deep","serverBasePath","requestPath","remoteTargetPath","serverBase","responseItems","getDirectoryFiles","descriptors","formatRegExp","objects","noDeprecation","throwDeprecation","traceDeprecation","debugEnviron","debugs","seen","stylize","stylizeNoColor","colors","showHidden","_extend","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","simple","formatPrimitive","visibleKeys","idx","arrayToHash","formatError","braces","toUTCString","formatProperty","formatArray","numLinesEst","reduceToSingleString","desc","env","NODE_DEBUG","pid","months","timestamp","getHours","getMinutes","getSeconds","getDate","getMonth","kCustomPromisifiedSymbol","callbackifyOnRejected","newReason","promisify","promiseResolve","promiseReject","callbackify","callbackified","maybeCb","rej","Minimatch","GLOBSTAR","plTypes","close","reSpecials","slashSplit","pattern","nocomment","regexp","comment","empty","make","braceExpand","nobrace","orig","_made","parseNegate","globSet","globParts","si","negateOffset","nonegate","isSub","noglobstar","stateChar","hasMagic","nocase","escaping","patternListStack","negativeLists","inClass","reClassStart","classStart","patternStart","dot","clearStateChar","qmark","noext","reStart","pl","reEnd","cs","sp","SUBPARSE","addPatternStart","nl","nlBefore","nlFirst","nlLast","nlAfter","openParensBefore","cleanAfter","dollar","globUnescape","flags","regExp","_glob","_src","makeRe","twoStar","regExpEscape","ex","nonull","matchOne","flipNegate","fi","pi","hit","fr","pr","swallowee","hasRoot","matchedSlash","startDot","startPart","preDotState","concatMap","balanced","isTop","expansions","isNumericSequence","isAlphaSequence","isSequence","isOptions","post","escClose","parseCommaParts","postParts","embrace","numeric","incr","isPadded","expansion","escSlash","escOpen","escComma","escPeriod","escapeBraces","unescapeBraces","maybeMatch","reg","begs","beg","ai","bi","nodeToJson","xmlToNodeobj","x2xmlnode","validator","validationOption","convertToJson","convertTonimn","convert2nimn","convertToJsonString","j2xParser","parseToNimn","schema","jObj","readPI","getErrorObject","getLineNumberForPosition","readCommentAndCDATA","angleBracketsCount","tagFound","reachedRoot","closingTag","readAttributeStr","isValid","validateAttributeString","tagClosed","otg","afterAmp","validateAmpersand","startChar","validAttrStrRegxp","attrNames","getPositionFromMatch","validateAttrName","validateNumberAmpersand","chars","nilChar","missingChar","nilPremitive","missingPremitive","emptyChar","emptyValue","boundryChar","objStart","arrStart","arrayEnd","charsArr","e_schema","hasValidData","itemSchema","arr_len","arr_i","processValue","isAppChar","x2j","_cToJsonStr","level","indentBy","supressEmptyNode","Parser","isAttribute","attrPrefixLen","isCDATA","replaceCDATAstr","replaceCDATAarr","indentate","tagEndChar","newLine","buildTextNode","buildEmptyTextNode","buildObjNode","buildEmptyObjNode","buildTextValNode","buildObjectNode","cdata","repeat","startsWith","j2x","attr","arrLen","Ks","L","property","nextPropIsNumber","isInteger","own","hasOwn","isIn","objectInPath","validPath","authPart","authContents","parseQuota","quotaUsed","quotaAvail","available","destination","Destination"],"mappings":"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S,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,KAAe,SAAS,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAO,SAAS,IAAO,OAAO,EAAI,SAAS,IAAO,QAAQ,IAAO,MAAM,IAAS,OAAO,IAAO,OAAO,IAAO,OAAO,IAAS,SAAS,IAAO,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,OAAO,IAAS,SAAS,IAAS,SAAS,IAAO,OAAO,IAAO,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAO,OAAO,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,QAAQ,IAAO,QAAQ,IAAO,QAAQ,IAAO,QAAQ,IAAO,OAAO,IAAO,OAAO,IAAO,SAAS,IAAO,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAO,QAAQ,IAAO,QAAQ,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,OAAO,KAAe,MAAM,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,IAAS,MAAM,KAAe,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAO,SAAS,IAAO,SAAS,IAAS,SAAS,KAAe,MAAM,IAAS,KAAK,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,KAAK,KAAe,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,MAAM,IAAO,MAAM,IAAS,KAAK,IAAS,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,OAAO,KAAe,MAAM,KAAe,OAAO,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,QAAQ,IAAO,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAO,OAAO,IAAO,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,GAAK,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,KAAe,MAAM,IAAS,UAAU,KAAe,OAAO,KAAe,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,SAAS,IAAS,SAAS,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,KAAK,KAAe,OAAO,IAAS,OAAO,IAAS,KAAK,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,QAAQ,IAAO,QAAQ,IAAO,OAAO,IAAO,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,SAAS,IAAS,SAAS,KAAe,MAAM,KAAe,OAAO,IAAS,MAAM,KAAe,OAAO,IAAS,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,IAAS,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,SAAS,IAAO,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,IAAS,MAAM,KAAe,OAAO,KAAe,MAAM,IAAS,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAO,OAAO,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,QAAQ,IAAO,QAAQ,IAAO,OAAO,IAAO,OAAO,IAAS,SAAS,IAAS,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,IAAS,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,OAAO,IAAS,SAAS,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,IAAS,OAAO,IAAS,KAAK,IAAS,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,KAAK,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,QAAQ,IAAO,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAO,OAAO,IAAO,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,QAAQ,IAAS,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAO,SAAS,IAAO,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAO,OAAO,IAAS,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,MAAM,IAAS,OAAO,KAAe,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAO,QAAQ,IAAO,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,KAAK,IAAO,QAAQ,IAAS,KAAK,IAAS,KAAK,IAAS,KAAK,IAAS,KAAK,IAAS,KAAK,IAAS,UAAU,IAAS,UAAU,IAAS,KAAK,IAAS,MAAM,IAAS,KAAK,IAAS,MAAM,IAAS,OAAO,IAAS,MAAM,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,UAAU,IAAS,OAAO,IAAS,MAAM,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAA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,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINtxB,IAAK,CACH8a,IAAK,EACLwW,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,wE,6BCrwBR,IAAIhyB,EAAK,EAAQ,KACbixE,EAAW,EAAQ,KACnBlxE,EAAQ,EAAQ,KAChBwlC,EAAS,EAAQ,KACjB3B,EAAO,EAAQ,KACfjkC,EAASI,EAAMJ,OAEfuxE,EAAU,EAAQ,KAClBC,EAAY,EAAQ,KAExB,SAASnJ,EAAGxrD,GACV,KAAM1rB,gBAAgBk3E,GACpB,OAAO,IAAIA,EAAGxrD,GAGO,iBAAZA,IACT7c,EAAO4lC,EAAOrnC,eAAese,GAAU,iBAAmBA,GAE1DA,EAAU+oB,EAAO/oB,IAIfA,aAAmB+oB,EAAOI,cAC5BnpB,EAAU,CAAE2U,MAAO3U,IAErB1rB,KAAKqgC,MAAQ3U,EAAQ2U,MAAMA,MAC3BrgC,KAAK0C,EAAI1C,KAAKqgC,MAAM39B,EACpB1C,KAAKsgF,GAAKtgF,KAAK0C,EAAEkhB,MAAM,GACvB5jB,KAAKwlB,EAAIxlB,KAAKqgC,MAAM7a,EAGpBxlB,KAAKwlB,EAAIkG,EAAQ2U,MAAM7a,EACvBxlB,KAAKwlB,EAAEgd,WAAW9W,EAAQ2U,MAAM39B,EAAEmN,YAAc,GAGhD7P,KAAKg4B,KAAOtM,EAAQsM,MAAQtM,EAAQ2U,MAAMrI,KAE5C36B,EAAOC,QAAU45E,EAEjBA,EAAGx5E,UAAU6iF,QAAU,SAAiB70D,GACtC,OAAO,IAAI00D,EAAQpgF,KAAM0rB,IAG3BwrD,EAAGx5E,UAAUq6E,eAAiB,SAAwB1kC,EAAMlgC,GAC1D,OAAOitE,EAAQI,YAAYxgF,KAAMqzC,EAAMlgC,IAGzC+jE,EAAGx5E,UAAU+iF,cAAgB,SAAuBrL,EAAKjiE,GACvD,OAAOitE,EAAQM,WAAW1gF,KAAMo1E,EAAKjiE,IAGvC+jE,EAAGx5E,UAAUijF,WAAa,SAAoBj1D,GACvCA,IACHA,EAAU,IAcZ,IAXA,IAAIk1D,EAAO,IAAIT,EAAS,CACtBnoD,KAAMh4B,KAAKg4B,KACX6oD,KAAMn1D,EAAQm1D,KACdC,QAASp1D,EAAQo1D,SAAW,OAC5BC,QAASr1D,EAAQq1D,SAAWjuC,EAAK9yC,KAAKg4B,KAAKkB,cAC3C8nD,WAAYt1D,EAAQq1D,SAAWr1D,EAAQs1D,YAAc,OACrD56B,MAAOpmD,KAAK0C,EAAE2M,YAGZxG,EAAQ7I,KAAK0C,EAAErC,aACf4gF,EAAMjhF,KAAK0C,EAAE6I,IAAI,IAAI2D,EAAG,MACzB,CACD,IAAImkC,EAAO,IAAInkC,EAAG0xE,EAAK7tC,SAASlqC,IAChC,KAAIwqC,EAAKn9B,IAAI+qE,GAAO,GAIpB,OADA5tC,EAAKt6B,MAAM,GACJ/Y,KAAK+3E,eAAe1kC,KAI/B6jC,EAAGx5E,UAAUwjF,aAAe,SAAqBpyE,EAAKqyE,GACpD,IAAIj7D,EAA2B,EAAnBpX,EAAIzO,aAAmBL,KAAK0C,EAAEmN,YAG1C,OAFIqW,EAAQ,IACVpX,EAAMA,EAAI8U,MAAMsC,KACbi7D,GAAaryE,EAAIoH,IAAIlW,KAAK0C,IAAM,EAC5BoM,EAAIvD,IAAIvL,KAAK0C,GAEboM,GAGXooE,EAAGx5E,UAAUogE,KAAO,SAAchvD,EAAKxQ,EAAK6U,EAAKuY,GAC5B,iBAARvY,IACTuY,EAAUvY,EACVA,EAAM,MAEHuY,IACHA,EAAU,IAEZptB,EAAM0B,KAAK+3E,eAAez5E,EAAK6U,GAC/BrE,EAAM9O,KAAKkhF,aAAa,IAAIhyE,EAAGJ,EAAK,KAqBpC,IAlBA,IAAIjG,EAAQ7I,KAAK0C,EAAErC,aACf+gF,EAAO9iF,EAAI+iF,aAAahyE,QAAQ,KAAMxG,GAGtCu9C,EAAQt3C,EAAIO,QAAQ,KAAMxG,GAG1B+3E,EAAO,IAAIT,EAAS,CACtBnoD,KAAMh4B,KAAKg4B,KACX+oD,QAASK,EACTh7B,MAAOA,EACPy6B,KAAMn1D,EAAQm1D,KACdC,QAASp1D,EAAQo1D,SAAW,SAI1BQ,EAAMthF,KAAK0C,EAAE6I,IAAI,IAAI2D,EAAG,IAEnBohE,EAAO,GAASA,IAAQ,CAC/B,IAAIvgE,EAAI2b,EAAQ3b,EACZ2b,EAAQ3b,EAAEugE,GACV,IAAIphE,EAAG0xE,EAAK7tC,SAAS/yC,KAAK0C,EAAErC,eAEhC,MADA0P,EAAI/P,KAAKkhF,aAAanxE,GAAG,IACnBc,KAAK,IAAM,GAAKd,EAAEmG,IAAIorE,IAAQ,GAApC,CAGA,IAAIC,EAAKvhF,KAAKwlB,EAAE7b,IAAIoG,GACpB,IAAIwxE,EAAGvsC,aAAP,CAGA,IAAIwsC,EAAMD,EAAGj/C,OACTtzB,EAAIwyE,EAAI38D,KAAK7kB,KAAK0C,GACtB,GAAkB,IAAdsM,EAAE6B,KAAK,GAAX,CAGA,IAAIiQ,EAAI/Q,EAAEoW,KAAKnmB,KAAK0C,GAAGiH,IAAIqF,EAAErF,IAAIrL,EAAI+iF,cAAc9mE,KAAKzL,IAExD,GAAkB,KADlBgS,EAAIA,EAAE+D,KAAK7kB,KAAK0C,IACVmO,KAAK,GAAX,CAGA,IAAI4wE,GAAiBF,EAAGh/C,OAAOnyB,QAAU,EAAI,IACT,IAAfoxE,EAAItrE,IAAIlH,GAAW,EAAI,GAQ5C,OALI0c,EAAQg2D,WAAa5gE,EAAE5K,IAAIlW,KAAKsgF,IAAM,IACxCx/D,EAAI9gB,KAAK0C,EAAE6I,IAAIuV,GACf2gE,GAAiB,GAGZ,IAAIpB,EAAU,CAAErxE,EAAGA,EAAG8R,EAAGA,EAAG2gE,cAAeA,UAItDvK,EAAGx5E,UAAUk5E,OAAS,SAAgB9nE,EAAKw2B,EAAWhnC,EAAK6U,GACzDrE,EAAM9O,KAAKkhF,aAAa,IAAIhyE,EAAGJ,EAAK,KACpCxQ,EAAM0B,KAAKygF,cAAcniF,EAAK6U,GAI9B,IAAInE,GAHJs2B,EAAY,IAAI+6C,EAAU/6C,EAAW,QAGnBt2B,EACd8R,EAAIwkB,EAAUxkB,EAClB,GAAI9R,EAAE6B,KAAK,GAAK,GAAK7B,EAAEkH,IAAIlW,KAAK0C,IAAM,EACpC,OAAO,EACT,GAAIoe,EAAEjQ,KAAK,GAAK,GAAKiQ,EAAE5K,IAAIlW,KAAK0C,IAAM,EACpC,OAAO,EAGT,IAeI0Q,EAfAuuE,EAAO7gE,EAAEqF,KAAKnmB,KAAK0C,GACnBoO,EAAK6wE,EAAKh4E,IAAImF,GAAK+V,KAAK7kB,KAAK0C,GAC7BqO,EAAK4wE,EAAKh4E,IAAIqF,GAAG6V,KAAK7kB,KAAK0C,GAE/B,OAAK1C,KAAKqgC,MAAMF,gBAWZ/sB,EAAIpT,KAAKwlB,EAAEu1D,QAAQjqE,EAAIxS,EAAIsjF,YAAa7wE,IACtCikC,cAMC5hC,EAAEuqE,OAAO3uE,KAjBVoE,EAAIpT,KAAKwlB,EAAEs1D,OAAOhqE,EAAIxS,EAAIsjF,YAAa7wE,IACrCikC,cAGkC,IAAjC5hC,EAAEkvB,OAAOzd,KAAK7kB,KAAK0C,GAAGwT,IAAIlH,IAgBrCkoE,EAAGx5E,UAAUmkF,cAAgB,SAAS/yE,EAAKw2B,EAAW1hC,EAAGuP,GACvDtE,GAAQ,EAAIjL,KAAOA,EAAG,4CACtB0hC,EAAY,IAAI+6C,EAAU/6C,EAAWnyB,GAErC,IAAIzQ,EAAI1C,KAAK0C,EACT8D,EAAI,IAAI0I,EAAGJ,GACXE,EAAIs2B,EAAUt2B,EACd8R,EAAIwkB,EAAUxkB,EAGdghE,EAAa,EAAJl+E,EACTm+E,EAAcn+E,GAAK,EACvB,GAAIoL,EAAEkH,IAAIlW,KAAKqgC,MAAMjtB,EAAEyR,KAAK7kB,KAAKqgC,MAAM39B,KAAO,GAAKq/E,EACjD,MAAM,IAAI9hF,MAAM,wCAIhB+O,EADE+yE,EACE/hF,KAAKqgC,MAAM6B,WAAWlzB,EAAEyL,IAAIza,KAAKqgC,MAAM39B,GAAIo/E,GAE3C9hF,KAAKqgC,MAAM6B,WAAWlzB,EAAG8yE,GAE/B,IAAIE,EAAO18C,EAAUt2B,EAAEmX,KAAKzjB,GACxBq6B,EAAKr6B,EAAE6I,IAAI/E,GAAGmD,IAAIq4E,GAAMn9D,KAAKniB,GAC7Bs6B,EAAKlc,EAAEnX,IAAIq4E,GAAMn9D,KAAKniB,GAI1B,OAAO1C,KAAKwlB,EAAEs1D,OAAO/9C,EAAI/tB,EAAGguB,IAG9Bk6C,EAAGx5E,UAAUukF,oBAAsB,SAASz7E,EAAG8+B,EAAW48C,EAAG/uE,GAE3D,GAAgC,QADhCmyB,EAAY,IAAI+6C,EAAU/6C,EAAWnyB,IACvBsuE,cACZ,OAAOn8C,EAAUm8C,cAEnB,IAAK,IAAIjgF,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAI2gF,EACJ,IACEA,EAASniF,KAAK6hF,cAAcr7E,EAAG8+B,EAAW9jC,GAC1C,MAAOgF,GACP,SAGF,GAAI27E,EAAOp7D,GAAGm7D,GACZ,OAAO1gF,EAEX,MAAM,IAAIvB,MAAM,0C,6BC7OlB,IAAI+3B,EAAO,EAAQ,KACf/oB,EAAQ,EAAQ,KAChBJ,EAAS,EAAQ,KAErB,SAASsxE,EAASz0D,GAChB,KAAM1rB,gBAAgBmgF,GACpB,OAAO,IAAIA,EAASz0D,GACtB1rB,KAAKg4B,KAAOtM,EAAQsM,KACpBh4B,KAAKoiF,aAAe12D,EAAQ02D,WAE5BpiF,KAAKkqB,OAASlqB,KAAKg4B,KAAKiB,QACxBj5B,KAAKqiF,WAAa32D,EAAQ22D,YAAcriF,KAAKg4B,KAAKkB,aAElDl5B,KAAKsiF,QAAU,KACftiF,KAAKuiF,eAAiB,KACtBviF,KAAKmtD,EAAI,KACTntD,KAAKwiF,EAAI,KAET,IAAIzB,EAAU9xE,EAAMI,QAAQqc,EAAQq1D,QAASr1D,EAAQs1D,YAAc,OAC/D56B,EAAQn3C,EAAMI,QAAQqc,EAAQ06B,MAAO16B,EAAQ+2D,UAAY,OACzD5B,EAAO5xE,EAAMI,QAAQqc,EAAQm1D,KAAMn1D,EAAQo1D,SAAW,OAC1DjyE,EAAOkyE,EAAQriF,QAAWsB,KAAKqiF,WAAa,EACrC,mCAAqCriF,KAAKqiF,WAAa,SAC9DriF,KAAK4V,MAAMmrE,EAAS36B,EAAOy6B,GAE7BxjF,EAAOC,QAAU6iF,EAEjBA,EAASziF,UAAUkY,MAAQ,SAAcmrE,EAAS36B,EAAOy6B,GACvD,IAAIrhB,EAAOuhB,EAAQ35E,OAAOg/C,GAAOh/C,OAAOy5E,GAExC7gF,KAAKmtD,EAAI,IAAI3kD,MAAMxI,KAAKkqB,OAAS,GACjClqB,KAAKwiF,EAAI,IAAIh6E,MAAMxI,KAAKkqB,OAAS,GACjC,IAAK,IAAI1oB,EAAI,EAAGA,EAAIxB,KAAKwiF,EAAE9jF,OAAQ8C,IACjCxB,KAAKmtD,EAAE3rD,GAAK,EACZxB,KAAKwiF,EAAEhhF,GAAK,EAGdxB,KAAKmtB,QAAQqyC,GACbx/D,KAAKsiF,QAAU,EACftiF,KAAKuiF,eAAiB,iBAGxBpC,EAASziF,UAAUglF,MAAQ,WACzB,OAAO,IAAI1qD,EAAKsd,KAAKt1C,KAAKg4B,KAAMh4B,KAAKmtD,IAGvCgzB,EAASziF,UAAUyvB,QAAU,SAAgBqyC,GAC3C,IAAImjB,EAAO3iF,KAAK0iF,QACA31D,OAAO/sB,KAAKwiF,GACZz1D,OAAO,CAAE,IACrByyC,IACFmjB,EAAOA,EAAK51D,OAAOyyC,IACrBx/D,KAAKmtD,EAAIw1B,EAAK/qD,SACd53B,KAAKwiF,EAAIxiF,KAAK0iF,QAAQ31D,OAAO/sB,KAAKwiF,GAAG5qD,SAChC4nC,IAGLx/D,KAAKmtD,EAAIntD,KAAK0iF,QACA31D,OAAO/sB,KAAKwiF,GACZz1D,OAAO,CAAE,IACTA,OAAOyyC,GACP5nC,SACd53B,KAAKwiF,EAAIxiF,KAAK0iF,QAAQ31D,OAAO/sB,KAAKwiF,GAAG5qD,WAGvCuoD,EAASziF,UAAUklF,OAAS,SAAgB7B,EAASC,EAAYvmE,EAAKooE,GAE1C,iBAAf7B,IACT6B,EAASpoE,EACTA,EAAMumE,EACNA,EAAa,MAGfD,EAAU9xE,EAAMI,QAAQ0xE,EAASC,GACjCvmE,EAAMxL,EAAMI,QAAQoL,EAAKooE,GAEzBh0E,EAAOkyE,EAAQriF,QAAWsB,KAAKqiF,WAAa,EACrC,mCAAqCriF,KAAKqiF,WAAa,SAE9DriF,KAAKmtB,QAAQ4zD,EAAQ35E,OAAOqT,GAAO,KACnCza,KAAKsiF,QAAU,GAGjBnC,EAASziF,UAAUq1C,SAAW,SAAkB/xC,EAAKmS,EAAKsH,EAAKooE,GAC7D,GAAI7iF,KAAKsiF,QAAUtiF,KAAKuiF,eACtB,MAAM,IAAItiF,MAAM,sBAGC,iBAARkT,IACT0vE,EAASpoE,EACTA,EAAMtH,EACNA,EAAM,MAIJsH,IACFA,EAAMxL,EAAMI,QAAQoL,EAAKooE,GAAU,OACnC7iF,KAAKmtB,QAAQ1S,IAIf,IADA,IAAIqoE,EAAO,GACJA,EAAKpkF,OAASsC,GACnBhB,KAAKwiF,EAAIxiF,KAAK0iF,QAAQ31D,OAAO/sB,KAAKwiF,GAAG5qD,SACrCkrD,EAAOA,EAAK17E,OAAOpH,KAAKwiF,GAG1B,IAAIh9E,EAAMs9E,EAAKliF,MAAM,EAAGI,GAGxB,OAFAhB,KAAKmtB,QAAQ1S,GACbza,KAAKsiF,UACErzE,EAAMM,OAAO/J,EAAK2N,K,6BC7G3B,IAAIjE,EAAK,EAAQ,KAEbL,EADQ,EAAQ,KACDA,OAEnB,SAASuxE,EAAQ1rC,EAAIhpB,GACnB1rB,KAAK00C,GAAKA,EACV10C,KAAKqzC,KAAO,KACZrzC,KAAKo1E,IAAM,KAGP1pD,EAAQ2nB,MACVrzC,KAAK+iF,eAAer3D,EAAQ2nB,KAAM3nB,EAAQs3D,SACxCt3D,EAAQ0pD,KACVp1E,KAAKijF,cAAcv3D,EAAQ0pD,IAAK1pD,EAAQw3D,QAE5C7lF,EAAOC,QAAU8iF,EAEjBA,EAAQM,WAAa,SAAoBhsC,EAAI0gC,EAAKjiE,GAChD,OAAIiiE,aAAegL,EACVhL,EAEF,IAAIgL,EAAQ1rC,EAAI,CACrB0gC,IAAKA,EACL8N,OAAQ/vE,KAIZitE,EAAQI,YAAc,SAAqB9rC,EAAIrB,EAAMlgC,GACnD,OAAIkgC,aAAgB+sC,EACX/sC,EAEF,IAAI+sC,EAAQ1rC,EAAI,CACrBrB,KAAMA,EACN2vC,QAAS7vE,KAIbitE,EAAQ1iF,UAAU8iC,SAAW,WAC3B,IAAI40C,EAAMp1E,KAAK4hF,YAEf,OAAIxM,EAAIpgC,aACC,CAAExmC,QAAQ,EAAO81D,OAAQ,sBAC7B8Q,EAAI50C,WAEJ40C,EAAIzrE,IAAI3J,KAAK00C,GAAGrU,MAAM39B,GAAGsyC,aAGvB,CAAExmC,QAAQ,EAAM81D,OAAQ,MAFtB,CAAE91D,QAAQ,EAAO81D,OAAQ,uBAFzB,CAAE91D,QAAQ,EAAO81D,OAAQ,8BAOpC8b,EAAQ1iF,UAAUkkF,UAAY,SAAmBv/C,EAASlvB,GAUxD,MARuB,iBAAZkvB,IACTlvB,EAAMkvB,EACNA,EAAU,MAGPriC,KAAKo1E,MACRp1E,KAAKo1E,IAAMp1E,KAAK00C,GAAGlvB,EAAE7b,IAAI3J,KAAKqzC,OAE3BlgC,EAGEnT,KAAKo1E,IAAI7lE,OAAO4D,EAAKkvB,GAFnBriC,KAAKo1E,KAKhBgL,EAAQ1iF,UAAU2jF,WAAa,SAAoBluE,GACjD,MAAY,QAARA,EACKnT,KAAKqzC,KAAK5xC,SAAS,GAAI,GAEvBzB,KAAKqzC,MAGhB+sC,EAAQ1iF,UAAUqlF,eAAiB,SAAwBzkF,EAAK6U,GAC9DnT,KAAKqzC,KAAO,IAAInkC,EAAG5Q,EAAK6U,GAAO,IAI/BnT,KAAKqzC,KAAOrzC,KAAKqzC,KAAKxuB,KAAK7kB,KAAK00C,GAAGrU,MAAM39B,IAG3C09E,EAAQ1iF,UAAUulF,cAAgB,SAAuB3kF,EAAK6U,GAC5D,GAAI7U,EAAI4I,GAAK5I,EAAI6I,EAWf,MAP2B,SAAvBnH,KAAK00C,GAAGrU,MAAMj/B,KAChByN,EAAOvQ,EAAI4I,EAAG,qBACkB,UAAvBlH,KAAK00C,GAAGrU,MAAMj/B,MACS,YAAvBpB,KAAK00C,GAAGrU,MAAMj/B,MACvByN,EAAOvQ,EAAI4I,GAAK5I,EAAI6I,EAAG,qCAEzBnH,KAAKo1E,IAAMp1E,KAAK00C,GAAGrU,MAAME,MAAMjiC,EAAI4I,EAAG5I,EAAI6I,IAG5CnH,KAAKo1E,IAAMp1E,KAAK00C,GAAGrU,MAAM4B,YAAY3jC,EAAK6U,IAI5CitE,EAAQ1iF,UAAUylF,OAAS,SAAgB/N,GACzC,OAAOA,EAAIzrE,IAAI3J,KAAKqzC,MAAM/Q,QAI5B89C,EAAQ1iF,UAAUogE,KAAO,SAAchvD,EAAKqE,EAAKuY,GAC/C,OAAO1rB,KAAK00C,GAAGopB,KAAKhvD,EAAK9O,KAAMmT,EAAKuY,IAGtC00D,EAAQ1iF,UAAUk5E,OAAS,SAAgB9nE,EAAKw2B,GAC9C,OAAOtlC,KAAK00C,GAAGkiC,OAAO9nE,EAAKw2B,EAAWtlC,OAGxCogF,EAAQ1iF,UAAUkK,QAAU,WAC1B,MAAO,eAAiB5H,KAAKqzC,MAAQrzC,KAAKqzC,KAAK5xC,SAAS,GAAI,IACrD,UAAYzB,KAAKo1E,KAAOp1E,KAAKo1E,IAAIxtE,WAAa,O,6BClHvD,IAAIsH,EAAK,EAAQ,KAEbD,EAAQ,EAAQ,KAChBJ,EAASI,EAAMJ,OAEnB,SAASwxE,EAAU30D,EAASvY,GAC1B,GAAIuY,aAAmB20D,EACrB,OAAO30D,EAEL1rB,KAAKojF,WAAW13D,EAASvY,KAG7BtE,EAAO6c,EAAQ1c,GAAK0c,EAAQ5K,EAAG,4BAC/B9gB,KAAKgP,EAAI,IAAIE,EAAGwc,EAAQ1c,EAAG,IAC3BhP,KAAK8gB,EAAI,IAAI5R,EAAGwc,EAAQ5K,EAAG,SACG1hB,IAA1BssB,EAAQ+1D,cACVzhF,KAAKyhF,cAAgB,KAErBzhF,KAAKyhF,cAAgB/1D,EAAQ+1D,eAIjC,SAAS4B,IACPrjF,KAAKsjF,MAAQ,EAGf,SAASC,EAAUpkF,EAAKiU,GACtB,IAAIowE,EAAUrkF,EAAIiU,EAAEkwE,SACpB,KAAgB,IAAVE,GACJ,OAAOA,EAET,IAAIC,EAAqB,GAAVD,EAGf,GAAiB,IAAbC,GAAkBA,EAAW,EAC/B,OAAO,EAIT,IADA,IAAItiF,EAAM,EACDK,EAAI,EAAGiV,EAAMrD,EAAEkwE,MAAO9hF,EAAIiiF,EAAUjiF,IAAKiV,IAChDtV,IAAQ,EACRA,GAAOhC,EAAIsX,GACXtV,KAAS,EAIX,QAAIA,GAAO,OAIXiS,EAAEkwE,MAAQ7sE,EACHtV,GAGT,SAASuiF,EAAUvkF,GAGjB,IAFA,IAAIqC,EAAI,EACJR,EAAM7B,EAAIT,OAAS,GACfS,EAAIqC,MAAqB,IAAbrC,EAAIqC,EAAI,KAAcA,EAAIR,GAC5CQ,IAEF,OAAU,IAANA,EACKrC,EAEFA,EAAIyB,MAAMY,GA4DnB,SAASmiF,EAAgBxgF,EAAKnC,GAC5B,GAAIA,EAAM,IACRmC,EAAIuB,KAAK1D,OADX,CAIA,IAAI4iF,EAAS,GAAKt+E,KAAKgpE,IAAIttE,GAAOsE,KAAKipE,MAAQ,GAE/C,IADAprE,EAAIuB,KAAc,IAATk/E,KACAA,GACPzgF,EAAIuB,KAAM1D,KAAS4iF,GAAU,GAAM,KAErCzgF,EAAIuB,KAAK1D,IAjHX3D,EAAOC,QAAU+iF,EA8CjBA,EAAU3iF,UAAU0lF,WAAa,SAAoB/hF,EAAM8R,GACzD9R,EAAO4N,EAAMI,QAAQhO,EAAM8R,GAC3B,IAAIC,EAAI,IAAIiwE,EACZ,GAAwB,KAApBhiF,EAAK+R,EAAEkwE,SACT,OAAO,EAET,IAAItiF,EAAMuiF,EAAUliF,EAAM+R,GAC1B,IAAY,IAARpS,EACF,OAAO,EAET,GAAKA,EAAMoS,EAAEkwE,QAAWjiF,EAAK3C,OAC3B,OAAO,EAET,GAAwB,IAApB2C,EAAK+R,EAAEkwE,SACT,OAAO,EAET,IAAI15D,EAAO25D,EAAUliF,EAAM+R,GAC3B,IAAa,IAATwW,EACF,OAAO,EAET,IAAI5a,EAAI3N,EAAKT,MAAMwS,EAAEkwE,MAAO15D,EAAOxW,EAAEkwE,OAErC,GADAlwE,EAAEkwE,OAAS15D,EACa,IAApBvoB,EAAK+R,EAAEkwE,SACT,OAAO,EAET,IAAIO,EAAON,EAAUliF,EAAM+R,GAC3B,IAAa,IAATywE,EACF,OAAO,EAET,GAAIxiF,EAAK3C,SAAWmlF,EAAOzwE,EAAEkwE,MAC3B,OAAO,EAET,IAAIxiE,EAAIzf,EAAKT,MAAMwS,EAAEkwE,MAAOO,EAAOzwE,EAAEkwE,OACrC,GAAa,IAATt0E,EAAE,GAAU,CACd,KAAW,IAAPA,EAAE,IAIJ,OAAO,EAHPA,EAAIA,EAAEpO,MAAM,GAMhB,GAAa,IAATkgB,EAAE,GAAU,CACd,KAAW,IAAPA,EAAE,IAIJ,OAAO,EAHPA,EAAIA,EAAElgB,MAAM,GAWhB,OAJAZ,KAAKgP,EAAI,IAAIE,EAAGF,GAChBhP,KAAK8gB,EAAI,IAAI5R,EAAG4R,GAChB9gB,KAAKyhF,cAAgB,MAEd,GAgBTpB,EAAU3iF,UAAUs6E,MAAQ,SAAe7kE,GACzC,IAAInE,EAAIhP,KAAKgP,EAAEK,UACXyR,EAAI9gB,KAAK8gB,EAAEzR,UAYf,IATW,IAAPL,EAAE,KACJA,EAAI,CAAE,GAAI5H,OAAO4H,IAER,IAAP8R,EAAE,KACJA,EAAI,CAAE,GAAI1Z,OAAO0Z,IAEnB9R,EAAI00E,EAAU10E,GACd8R,EAAI4iE,EAAU5iE,KAENA,EAAE,IAAe,IAAPA,EAAE,KAClBA,EAAIA,EAAElgB,MAAM,GAEd,IAAIuC,EAAM,CAAE,GACZwgF,EAAgBxgF,EAAK6L,EAAEtQ,SACvByE,EAAMA,EAAIiE,OAAO4H,IACbtK,KAAK,GACTi/E,EAAgBxgF,EAAK2d,EAAEpiB,QACvB,IAAIolF,EAAW3gF,EAAIiE,OAAO0Z,GACtBtb,EAAM,CAAE,IAGZ,OAFAm+E,EAAgBn+E,EAAKs+E,EAASplF,QAC9B8G,EAAMA,EAAI4B,OAAO08E,GACV70E,EAAMM,OAAO/J,EAAK2N,K,6BClK3B,IAAI6kB,EAAO,EAAQ,KACfyc,EAAS,EAAQ,KACjBxlC,EAAQ,EAAQ,KAChBJ,EAASI,EAAMJ,OACfyC,EAAarC,EAAMqC,WACnB8uE,EAAU,EAAQ,KAClBC,EAAY,EAAQ,KAExB,SAAS0D,EAAM1jD,GAGb,GAFAxxB,EAAiB,YAAVwxB,EAAqB,qCAEtBrgC,gBAAgB+jF,GACpB,OAAO,IAAIA,EAAM1jD,GAEfA,EAAQoU,EAAOpU,GAAOA,MAC1BrgC,KAAKqgC,MAAQA,EACbrgC,KAAKwlB,EAAI6a,EAAM7a,EACfxlB,KAAKwlB,EAAEgd,WAAWnC,EAAM39B,EAAEmN,YAAc,GAExC7P,KAAKgkF,WAAa3jD,EAAME,QAAQ5iC,YAChCqC,KAAKikF,eAAiB3+E,KAAKkR,KAAK6pB,EAAM39B,EAAEmN,YAAc,GACtD7P,KAAKg4B,KAAOA,EAAKkU,OAGnB7uC,EAAOC,QAAUymF,EAOjBA,EAAMrmF,UAAUogE,KAAO,SAAcvsC,EAASglD,GAC5ChlD,EAAUjgB,EAAWigB,GACrB,IAAIjzB,EAAM0B,KAAKkkF,cAAc3N,GACzBvnE,EAAIhP,KAAKmkF,QAAQ7lF,EAAI8lF,gBAAiB7yD,GACtCzD,EAAI9tB,KAAKwlB,EAAE7b,IAAIqF,GACfq1E,EAAWrkF,KAAKskF,YAAYx2D,GAC5By2D,EAAKvkF,KAAKmkF,QAAQE,EAAU/lF,EAAIkmF,WAAYjzD,GAClC5nB,IAAIrL,EAAI+0C,QAClBoxC,EAAIz1E,EAAEyL,IAAI8pE,GAAI1/D,KAAK7kB,KAAKqgC,MAAM39B,GAClC,OAAO1C,KAAK0kF,cAAc,CAAE52D,EAAGA,EAAG22D,EAAGA,EAAGJ,SAAUA,KASpDN,EAAMrmF,UAAUk5E,OAAS,SAAgBrlD,EAAS0lD,EAAK7B,GACrD7jD,EAAUjgB,EAAWigB,GACrB0lD,EAAMj3E,KAAK0kF,cAAczN,GACzB,IAAI34E,EAAM0B,KAAKygF,cAAcrL,GACzB/xD,EAAIrjB,KAAKmkF,QAAQlN,EAAIoN,WAAY/lF,EAAIkmF,WAAYjzD,GACjDozD,EAAK3kF,KAAKwlB,EAAE7b,IAAIstE,EAAIwN,KAExB,OADcxN,EAAInpD,IAAIrT,IAAInc,EAAI82E,MAAMzrE,IAAI0Z,IACzB0D,GAAG49D,IAGpBZ,EAAMrmF,UAAUymF,QAAU,WAExB,IADA,IAAInsD,EAAOh4B,KAAKg4B,OACPx2B,EAAI,EAAGA,EAAIkG,UAAUhJ,OAAQ8C,IACpCw2B,EAAKjL,OAAOrlB,UAAUlG,IACxB,OAAOyN,EAAMsC,UAAUymB,EAAKJ,UAAU/S,KAAK7kB,KAAKqgC,MAAM39B,IAGxDqhF,EAAMrmF,UAAU+iF,cAAgB,SAAuBrL,GACrD,OAAOgL,EAAQM,WAAW1gF,KAAMo1E,IAGlC2O,EAAMrmF,UAAUwmF,cAAgB,SAAuB3N,GACrD,OAAO6J,EAAQwE,WAAW5kF,KAAMu2E,IAGlCwN,EAAMrmF,UAAUgnF,cAAgB,SAAuBzN,GACrD,OAAIA,aAAeoJ,EACVpJ,EACF,IAAIoJ,EAAUrgF,KAAMi3E,IAW7B8M,EAAMrmF,UAAU4mF,YAAc,SAAqB/jD,GACjD,IAAIptB,EAAMotB,EAAMgC,OAAOlzB,QAAQ,KAAMrP,KAAKikF,gBAE1C,OADA9wE,EAAInT,KAAKikF,eAAiB,IAAM1jD,EAAM+B,OAAOlyB,QAAU,IAAO,EACvD+C,GAGT4wE,EAAMrmF,UAAUukC,YAAc,SAAqBp5B,GAGjD,IAAIg8E,GAFJh8E,EAAQoG,EAAMqC,WAAWzI,IAENnK,OAAS,EACxBomF,EAASj8E,EAAMjI,MAAM,EAAGikF,GAAQz9E,QAAuB,IAAhByB,EAAMg8E,IAC7CE,EAAoC,IAAV,IAAhBl8E,EAAMg8E,IAEhB19E,EAAI8H,EAAMsC,UAAUuzE,GACxB,OAAO9kF,KAAKqgC,MAAMy+C,WAAW33E,EAAG49E,IAGlChB,EAAMrmF,UAAUsnF,UAAY,SAAmBv1E,GAC7C,OAAOA,EAAIJ,QAAQ,KAAMrP,KAAKikF,iBAGhCF,EAAMrmF,UAAUunF,UAAY,SAAmBp8E,GAC7C,OAAOoG,EAAMsC,UAAU1I,IAGzBk7E,EAAMrmF,UAAUwnF,QAAU,SAAiB/jF,GACzC,OAAOA,aAAenB,KAAKgkF,a,6BClH7B,IAAI/0E,EAAQ,EAAQ,KAChBJ,EAASI,EAAMJ,OACfyC,EAAarC,EAAMqC,WACnBH,EAAiBlC,EAAMkC,eAW3B,SAASivE,EAAQzrC,EAAO1Q,GACtBjkC,KAAK20C,MAAQA,EACb30C,KAAKmlF,QAAU7zE,EAAW2yB,EAAOsyC,QAC7B5hC,EAAMuwC,QAAQjhD,EAAOmxC,KACvBp1E,KAAKq1E,KAAOpxC,EAAOmxC,IAEnBp1E,KAAKolF,UAAY9zE,EAAW2yB,EAAOmxC,KAGvCgL,EAAQM,WAAa,SAAoB/rC,EAAOygC,GAC9C,OAAIA,aAAegL,EACVhL,EACF,IAAIgL,EAAQzrC,EAAO,CAAEygC,IAAKA,KAGnCgL,EAAQwE,WAAa,SAAoBjwC,EAAO4hC,GAC9C,OAAIA,aAAkB6J,EACb7J,EACF,IAAI6J,EAAQzrC,EAAO,CAAE4hC,OAAQA,KAGtC6J,EAAQ1iF,UAAU64E,OAAS,WACzB,OAAOv2E,KAAKmlF,SAGdh0E,EAAeivE,EAAS,YAAY,WAClC,OAAOpgF,KAAK20C,MAAM2vC,YAAYtkF,KAAKo1E,UAGrCjkE,EAAeivE,EAAS,OAAO,WAC7B,OAAIpgF,KAAKolF,UACAplF,KAAK20C,MAAM1S,YAAYjiC,KAAKolF,WAC9BplF,KAAK20C,MAAMnvB,EAAE7b,IAAI3J,KAAKqzC,WAG/BliC,EAAeivE,EAAS,aAAa,WACnC,IAAIzrC,EAAQ30C,KAAK20C,MACb3c,EAAOh4B,KAAKg4B,OACZ6sD,EAASlwC,EAAMsvC,eAAiB,EAEhCh9E,EAAI+wB,EAAKp3B,MAAM,EAAG+zC,EAAMsvC,gBAK5B,OAJAh9E,EAAE,IAAM,IACRA,EAAE49E,IAAW,IACb59E,EAAE49E,IAAW,GAEN59E,KAGTkK,EAAeivE,EAAS,QAAQ,WAC9B,OAAOpgF,KAAK20C,MAAMswC,UAAUjlF,KAAKqlF,gBAGnCl0E,EAAeivE,EAAS,QAAQ,WAC9B,OAAOpgF,KAAK20C,MAAM3c,OAAOjL,OAAO/sB,KAAKu2E,UAAU3+C,YAGjDzmB,EAAeivE,EAAS,iBAAiB,WACvC,OAAOpgF,KAAKg4B,OAAOp3B,MAAMZ,KAAK20C,MAAMsvC,mBAGtC7D,EAAQ1iF,UAAUogE,KAAO,SAAcvsC,GAErC,OADA1iB,EAAO7O,KAAKmlF,QAAS,2BACdnlF,KAAK20C,MAAMmpB,KAAKvsC,EAASvxB,OAGlCogF,EAAQ1iF,UAAUk5E,OAAS,SAAgBrlD,EAAS0lD,GAClD,OAAOj3E,KAAK20C,MAAMiiC,OAAOrlD,EAAS0lD,EAAKj3E,OAGzCogF,EAAQ1iF,UAAU4nF,UAAY,SAAmBnyE,GAE/C,OADAtE,EAAO7O,KAAKmlF,QAAS,0BACdl2E,EAAMM,OAAOvP,KAAKu2E,SAAUpjE,IAGrCitE,EAAQ1iF,UAAUkkF,UAAY,SAAmBzuE,GAC/C,OAAOlE,EAAMM,OAAOvP,KAAKwkF,WAAYrxE,IAGvC9V,EAAOC,QAAU8iF,G,6BC5FjB,IAAIlxE,EAAK,EAAQ,KACbD,EAAQ,EAAQ,KAChBJ,EAASI,EAAMJ,OACfsC,EAAiBlC,EAAMkC,eACvBG,EAAarC,EAAMqC,WAUvB,SAAS+uE,EAAU1rC,EAAOsiC,GACxBj3E,KAAK20C,MAAQA,EAEM,iBAARsiC,IACTA,EAAM3lE,EAAW2lE,IAEfzuE,MAAMhJ,QAAQy3E,KAChBA,EAAM,CACJnpD,EAAGmpD,EAAIr2E,MAAM,EAAG+zC,EAAMsvC,gBACtBQ,EAAGxN,EAAIr2E,MAAM+zC,EAAMsvC,kBAIvBp1E,EAAOooE,EAAInpD,GAAKmpD,EAAIwN,EAAG,4BAEnB9vC,EAAMuwC,QAAQjO,EAAInpD,KACpB9tB,KAAKulF,GAAKtO,EAAInpD,GACZmpD,EAAIwN,aAAav1E,IACnBlP,KAAKwlF,GAAKvO,EAAIwN,GAEhBzkF,KAAKylF,UAAYj9E,MAAMhJ,QAAQy3E,EAAInpD,GAAKmpD,EAAInpD,EAAImpD,EAAIoN,SACpDrkF,KAAK0lF,UAAYl9E,MAAMhJ,QAAQy3E,EAAIwN,GAAKxN,EAAIwN,EAAIxN,EAAI0O,SAGtDx0E,EAAekvE,EAAW,KAAK,WAC7B,OAAOrgF,KAAK20C,MAAMswC,UAAUjlF,KAAK2lF,eAGnCx0E,EAAekvE,EAAW,KAAK,WAC7B,OAAOrgF,KAAK20C,MAAM1S,YAAYjiC,KAAKqkF,eAGrClzE,EAAekvE,EAAW,YAAY,WACpC,OAAOrgF,KAAK20C,MAAM2vC,YAAYtkF,KAAK8tB,QAGrC3c,EAAekvE,EAAW,YAAY,WACpC,OAAOrgF,KAAK20C,MAAMqwC,UAAUhlF,KAAKykF,QAGnCpE,EAAU3iF,UAAUkoF,QAAU,WAC5B,OAAO5lF,KAAKqkF,WAAWj9E,OAAOpH,KAAK2lF,aAGrCtF,EAAU3iF,UAAUkL,MAAQ,WAC1B,OAAOqG,EAAMM,OAAOvP,KAAK4lF,UAAW,OAAOziC,eAG7C9lD,EAAOC,QAAU+iF,G,6BC5DjB,IAAIv9C,EAAO,EAAQ,KAEnBxlC,EAAQmmC,YAAc,EAAQ,KAE9B,IAAIuB,EAAgBlC,EAAKq5B,OAAO,iBAAiB,WAC/Cn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,WAAWwnF,MACpB9lF,KAAK1B,IAAI,WAAWwnF,MACpB9lF,KAAK1B,IAAI,kBAAkBwnF,MAC3B9lF,KAAK1B,IAAI,mBAAmBwnF,MAC5B9lF,KAAK1B,IAAI,UAAUwnF,MACnB9lF,KAAK1B,IAAI,UAAUwnF,MACnB9lF,KAAK1B,IAAI,aAAawnF,MACtB9lF,KAAK1B,IAAI,aAAawnF,MACtB9lF,KAAK1B,IAAI,eAAewnF,UAG5BxoF,EAAQ0nC,cAAgBA,EAExB,IAAIlB,EAAehB,EAAKq5B,OAAO,gBAAgB,WAC7Cn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,WAAWwnF,MACpB9lF,KAAK1B,IAAI,kBAAkBwnF,UAG/BxoF,EAAQwmC,aAAeA,EAEvB,IAAIF,EAAYd,EAAKq5B,OAAO,wBAAwB,WAClDn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,aAAag4C,IAAIyvC,GAC1B/lF,KAAK1B,IAAI,oBAAoB0nF,aAGjC1oF,EAAQsmC,UAAYA,EAEpB,IAAImiD,EAAsBjjD,EAAKq5B,OAAO,uBAAuB,WAC3Dn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,aAAa6+D,QACtBn9D,KAAK1B,IAAI,QAAQ2nF,QAAQ7vC,WACzBp2C,KAAK1B,IAAI,SAAS6+D,QAAQ/mB,WAC1Bp2C,KAAK1B,IAAI,UAAUunF,MAAM/kF,IACvBd,KAAK1B,IAAI,KAAKwnF,MACd9lF,KAAK1B,IAAI,KAAKwnF,MACd9lF,KAAK1B,IAAI,KAAKwnF,OACd1vC,eAIF8vC,EAAiBpjD,EAAKq5B,OAAO,kBAAkB,WACjDn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,WAAWwnF,MACpB9lF,KAAK1B,IAAI,aAAag4C,IAAIyvC,GAC1B/lF,KAAK1B,IAAI,qBAAqB6nF,aAGlC7oF,EAAQynC,WAAamhD,EACrB,IAAIE,EAA0BtjD,EAAKq5B,OAAO,2BAA2B,WACnEn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,aAAaunF,MAAM/kF,IAC1Bd,KAAK1B,IAAI,MAAM6+D,QACfn9D,KAAK1B,IAAI,WAAWunF,MAAM/kF,IACxBd,KAAK1B,IAAI,OAAOunF,MAAM/kF,IACpBd,KAAK1B,IAAI,MAAM6+D,QACfn9D,KAAK1B,IAAI,aAAaunF,MAAM/kF,IAC1Bd,KAAK1B,IAAI,QAAQ6nF,SACjBnmF,KAAK1B,IAAI,SAASwnF,QAGtB9lF,KAAK1B,IAAI,UAAUunF,MAAM/kF,IACvBd,KAAK1B,IAAI,QAAQ6+D,QACjBn9D,KAAK1B,IAAI,MAAM6nF,YAIrBnmF,KAAK1B,IAAI,qBAAqB6nF,aAIlC7oF,EAAQwnC,oBAAsBshD,EAE9B,IAAIhhD,EAAgBtC,EAAKq5B,OAAO,iBAAiB,WAC/Cn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,WAAWwnF,MACpB9lF,KAAK1B,IAAI,KAAKwnF,MACd9lF,KAAK1B,IAAI,KAAKwnF,MACd9lF,KAAK1B,IAAI,KAAKwnF,MACd9lF,KAAK1B,IAAI,WAAWwnF,MACpB9lF,KAAK1B,IAAI,YAAYwnF,UAGzBxoF,EAAQ8nC,cAAgBA,EAExB9nC,EAAQ6mC,SAAWrB,EAAKq5B,OAAO,YAAY,WACzCn8D,KAAK8lF,SAGP,IAAI5gD,EAAepC,EAAKq5B,OAAO,gBAAgB,WAC7Cn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,WAAWwnF,MACpB9lF,KAAK1B,IAAI,cAAc6nF,SACvBnmF,KAAK1B,IAAI,cAAc83C,WAAWI,SAAS,GAAGF,IAAI+vC,GAClDrmF,KAAK1B,IAAI,aAAa83C,WAAWI,SAAS,GAAGwvC,aAGjD1oF,EAAQ4nC,aAAeA,EAEvB,IAAImhD,EAAevjD,EAAKq5B,OAAO,gBAAgB,WAC7Cn8D,KAAKm2C,OAAO,CACVmwC,WAAYtmF,KAAKm9D,aAIrB7/D,EAAQgoC,UAAYxC,EAAKq5B,OAAO,aAAa,WAC3Cn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,KAAKwnF,MACd9lF,KAAK1B,IAAI,KAAKwnF,W,6BCrHlB,MAAMzpB,EAAW,EAAQ,KACnBD,EAAW,EAAQ,KACnBtpD,EAAW,EAAQ,KAQzB,SAASyzE,EAAOn1E,EAAM2lC,GACpB/2C,KAAKoR,KAAOA,EACZpR,KAAK+2C,KAAOA,EAEZ/2C,KAAKo8D,SAAW,GAChBp8D,KAAKq8D,SAAW,GAXN/+D,EAER6+D,OAAS,SAAgB/qD,EAAM2lC,GACjC,OAAO,IAAIwvC,EAAOn1E,EAAM2lC,IAW1BwvC,EAAO7oF,UAAU8oF,aAAe,SAAqB1wD,GACnD,MAAM1kB,EAAOpR,KAAKoR,KAElB,SAASq1E,EAAU7tC,GACjB54C,KAAK0mF,WAAW9tC,EAAQxnC,GAO1B,OALA0B,EAAS2zE,EAAW3wD,GACpB2wD,EAAU/oF,UAAUgpF,WAAa,SAAoB9tC,EAAQxnC,GAC3D0kB,EAAK7yB,KAAKjD,KAAM44C,EAAQxnC,IAGnB,IAAIq1E,EAAUzmF,OAGvBumF,EAAO7oF,UAAU2hE,YAAc,SAAqBlsD,GAKlD,OAJAA,EAAMA,GAAO,MAERnT,KAAKo8D,SAAShvD,eAAe+F,KAChCnT,KAAKo8D,SAASjpD,GAAOnT,KAAKwmF,aAAapqB,EAASjpD,KAC3CnT,KAAKo8D,SAASjpD,IAGvBozE,EAAO7oF,UAAU48B,OAAS,SAAgBj5B,EAAM8R,EAAKuY,GACnD,OAAO1rB,KAAKq/D,YAAYlsD,GAAKmnB,OAAOj5B,EAAMqqB,IAG5C66D,EAAO7oF,UAAUqgE,YAAc,SAAqB5qD,GAKlD,OAJAA,EAAMA,GAAO,MAERnT,KAAKq8D,SAASjvD,eAAe+F,KAChCnT,KAAKq8D,SAASlpD,GAAOnT,KAAKwmF,aAAanqB,EAASlpD,KAC3CnT,KAAKq8D,SAASlpD,IAGvBozE,EAAO7oF,UAAU6R,OAAS,SAAgBlO,EAAM8R,EAAoBwmB,GAClE,OAAO35B,KAAK+9D,YAAY5qD,GAAK5D,OAAOlO,EAAMs4B,K,6BCrD5C,MAAM7mB,EAAW,EAAQ,KAEnB0pD,EAAa,EAAQ,KAE3B,SAASmqB,EAAW/tC,GAClB4jB,EAAWv5D,KAAKjD,KAAM44C,GACtB54C,KAAKmT,IAAM,MAEbL,EAAS6zE,EAAYnqB,GACrBn/D,EAAOC,QAAUqpF,EAEjBA,EAAWjpF,UAAU6R,OAAS,SAAgBlO,EAAMqqB,GAClD,MAEMtY,EAFMopD,EAAW9+D,UAAU6R,OAAOtM,KAAKjD,KAAMqB,GAErCI,SAAS,UACjBkH,EAAM,CAAE,cAAgB+iB,EAAQk7D,MAAQ,SAC9C,IAAK,IAAIplF,EAAI,EAAGA,EAAI4R,EAAE1U,OAAQ8C,GAAK,GACjCmH,EAAIjE,KAAK0O,EAAExS,MAAMY,EAAGA,EAAI,KAE1B,OADAmH,EAAIjE,KAAK,YAAcgnB,EAAQk7D,MAAQ,SAChCj+E,EAAIZ,KAAK,Q,6BCnBlB,MAAM+K,EAAW,EAAQ,KACnB5U,EAAS,EAAQ,KAAgBA,OAEjCggE,EAAa,EAAQ,KAE3B,SAAS2oB,EAAWjuC,GAClBslB,EAAWj7D,KAAKjD,KAAM44C,GACtB54C,KAAKmT,IAAM,MAEbL,EAAS+zE,EAAY3oB,GACrB7gE,EAAOC,QAAUupF,EAEjBA,EAAWnpF,UAAU48B,OAAS,SAAgBj5B,EAAMqqB,GAClD,MAAMo7D,EAAQzlF,EAAKI,WAAWooB,MAAM,YAE9B+8D,EAAQl7D,EAAQk7D,MAAMzjC,cAEtB7hC,EAAK,kCACX,IAAItf,GAAS,EACTC,GAAO,EACX,IAAK,IAAIT,EAAI,EAAGA,EAAIslF,EAAMpoF,OAAQ8C,IAAK,CACrC,MAAMsG,EAAQg/E,EAAMtlF,GAAGsG,MAAMwZ,GAC7B,GAAc,OAAVxZ,GAGAA,EAAM,KAAO8+E,EAAjB,CAGA,IAAe,IAAX5kF,EAIG,CACL,GAAiB,QAAb8F,EAAM,GACR,MACF7F,EAAMT,EACN,MAPA,GAAiB,UAAbsG,EAAM,GACR,MACF9F,EAAQR,GAQZ,IAAe,IAAXQ,IAAyB,IAATC,EAClB,MAAM,IAAIhC,MAAM,8BAAgC2mF,GAElD,MAAMtnF,EAASwnF,EAAMlmF,MAAMoB,EAAQ,EAAGC,GAAK8F,KAAK,IAEhDzI,EAAOoN,QAAQ,kBAAmB,IAElC,MAAMsd,EAAQ9rB,EAAOS,KAAKW,EAAQ,UAClC,OAAO4+D,EAAWxgE,UAAU48B,OAAOr3B,KAAKjD,KAAMgqB,EAAO0B,K,6BC/CvD,MAAMnW,EAAOjY,EAEbiY,EAAKikB,SAAW,EAAQ,KAAcA,SACtCjkB,EAAKkkB,cAAgB,EAAQ,KAAYA,cACzClkB,EAAKmkB,cAAgB,EAAQ,KAAYA,cACzCnkB,EAAKygC,KAAO,EAAQ,M,6BCLpB,MAAMJ,EAAYt4C,EAGlBs4C,EAAUmxC,SAAW,SAAiBrwD,GACpC,MAAMlxB,EAAM,GAWZ,OATArI,OAAOmuB,KAAKoL,GAAKzpB,SAAQ,SAAS3O,IAErB,EAANA,IAAYA,IACfA,GAAY,GAEd,MAAMV,EAAQ84B,EAAIp4B,GAClBkH,EAAI5H,GAASU,KAGRkH,GAGTowC,EAAU0mB,IAAM,EAAQ,M,6BCfxB,IAAI0qB,EAAM,EAAQ,KAEdC,EAAOD,EAAI7qB,OAAO,QAAQ,WAC5Bn8D,KAAKm2C,OAAO,CACV+wC,QAASlnF,KAAKmnF,UACdC,YAAapnF,KAAKqnF,eAIlBC,EAAqBN,EAAI7qB,OAAO,sBAAsB,WACxDn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,QAAQ6+D,QACjBn9D,KAAK1B,IAAI,SAAS+3C,UAIlB0vC,EAAsBiB,EAAI7qB,OAAO,uBAAuB,WAC1Dn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,aAAa6+D,QACtBn9D,KAAK1B,IAAI,cAAc83C,WACvBp2C,KAAK1B,IAAI,SAAS6+D,QAAQ/mB,eAI1BmxC,EAAuBP,EAAI7qB,OAAO,wBAAwB,WAC5Dn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,aAAag4C,IAAIyvC,GAC1B/lF,KAAK1B,IAAI,oBAAoB0nF,aAI7BwB,EAA4BR,EAAI7qB,OAAO,6BAA6B,WACtEn8D,KAAKynF,MAAMH,MAGTI,EAAcV,EAAI7qB,OAAO,eAAe,WAC1Cn8D,KAAK2nF,MAAMH,MAGTI,EAAOZ,EAAI7qB,OAAO,QAAQ,WAC5Bn8D,KAAKm2C,OAAO,CACV0xC,YAAa7nF,KAAKs2C,IAAIoxC,QAItBI,EAAWd,EAAI7qB,OAAO,YAAY,WACpCn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,aAAag4C,IAAI2wC,GAC1BjnF,KAAK1B,IAAI,YAAYg4C,IAAI2wC,OAIzBc,EAAYf,EAAI7qB,OAAO,aAAa,WACtCn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,UAAU6+D,QACnBn9D,KAAK1B,IAAI,YAAY0pF,OAAO/wC,KAAI,GAChCj3C,KAAK1B,IAAI,aAAa6nF,aAItB8B,EAAiBjB,EAAI7qB,OAAO,kBAAkB,WAChDn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,WAAWk4C,SAAS,GAAGsvC,MAAM1vC,WACtCp2C,KAAK1B,IAAI,gBAAgBwnF,MACzB9lF,KAAK1B,IAAI,aAAag4C,IAAIyvC,GAC1B/lF,KAAK1B,IAAI,UAAUg4C,IAAIsxC,GACvB5nF,KAAK1B,IAAI,YAAYg4C,IAAIwxC,GACzB9nF,KAAK1B,IAAI,WAAWg4C,IAAIsxC,GACxB5nF,KAAK1B,IAAI,wBAAwBg4C,IAAIixC,GACrCvnF,KAAK1B,IAAI,kBAAkBm4C,SAAS,GAAGuvC,SAAS5vC,WAChDp2C,KAAK1B,IAAI,mBAAmBm4C,SAAS,GAAGuvC,SAAS5vC,WACjDp2C,KAAK1B,IAAI,cAAck4C,SAAS,GAAGmxC,MAAMI,GAAW3xC,eAIpD8xC,EAAkBlB,EAAI7qB,OAAO,mBAAmB,WAClDn8D,KAAK6lF,MAAM/kF,IACTd,KAAK1B,IAAI,kBAAkBg4C,IAAI2xC,GAC/BjoF,KAAK1B,IAAI,sBAAsBg4C,IAAIyvC,GACnC/lF,KAAK1B,IAAI,kBAAkB0nF,aAI/B3oF,EAAOC,QAAU4qF,G,mhBCvFjB,IAAIC,EAAW,wHACXC,EAAa,8CACbC,EAAY,iFACZC,EAAM,EAAQ,KACdrlD,EAAU,EAAQ,KAClB/kC,EAAS,EAAQ,KAAeA,OACpCb,EAAOC,QAAU,SAAUirF,EAAM1pD,GAC/B,IAEI2pD,EAFAlqF,EAAMiqF,EAAK9mF,WACXqG,EAAQxJ,EAAIwJ,MAAMqgF,GAEtB,GAAKrgF,EAGE,CACL,IAAI0qE,EAAQ,MAAQ1qE,EAAM,GACtBo3B,EAAKhhC,EAAOS,KAAKmJ,EAAM,GAAI,OAC3B48B,EAAaxmC,EAAOS,KAAKmJ,EAAM,GAAG4E,QAAQ,UAAW,IAAK,UAC1D+7E,EAAYH,EAAIzpD,EAAUK,EAAGt+B,MAAM,EAAG,GAAIuD,SAAS2D,EAAM,GAAI,KAAKxJ,IAClEqK,EAAM,GACN87B,EAASxB,EAAQ4B,iBAAiB2tC,EAAOiW,EAAWvpD,GACxDv2B,EAAIjE,KAAK+/B,EAAO1X,OAAO2X,IACvB/7B,EAAIjE,KAAK+/B,EAAO/X,SAChB87D,EAAYtqF,EAAOkJ,OAAOuB,OAZhB,CACV,IAAI+/E,EAASpqF,EAAIwJ,MAAMugF,GACvBG,EAAYtqF,EAAOS,KAAK+pF,EAAO,GAAGh8E,QAAQ,UAAW,IAAK,UAa5D,MAAO,CACL82B,IAFQllC,EAAIwJ,MAAMsgF,GAAY,GAG9B/mF,KAAMmnF,K,gBC3BV,IAAItqF,EAAS,EAAQ,KAAeA,OAChCgR,EAAK,EAAQ,KACbgoE,EAAK,EAAQ,KAAYxiC,GACzBvR,EAAY,EAAQ,KACpBsR,EAAS,EAAQ,KAyErB,SAASk0C,EAAYlmF,EAAG4V,GACtB,GAAI5V,EAAEoO,KAAK,IAAM,EAAG,MAAM,IAAI5Q,MAAM,eACpC,GAAIwC,EAAEyT,IAAImC,IAAMA,EAAG,MAAM,IAAIpY,MAAM,eAGrC5C,EAAOC,QA5EP,SAAiB25E,EAAKj/C,EAAM15B,EAAKu5E,EAAUr0C,GACzC,IAAI4xC,EAAMjyC,EAAU7kC,GACpB,GAAiB,OAAb82E,EAAIh0E,KAAe,CAErB,GAAiB,UAAby2E,GAAqC,cAAbA,EAA0B,MAAM,IAAI53E,MAAM,yBACtE,OAmCJ,SAAmBg3E,EAAKj/C,EAAMo9C,GAC5B,IAAI0C,EAAUrjC,EAAO2gC,EAAI/zE,KAAKwiC,UAAUxD,MAAMt4B,KAAK,MACnD,IAAK+vE,EAAS,MAAM,IAAI73E,MAAM,iBAAmBm1E,EAAI/zE,KAAKwiC,UAAUxD,MAAMt4B,KAAK,MAE/E,IAAIs4B,EAAQ,IAAI62C,EAAGY,GACf8Q,EAASxT,EAAI/zE,KAAK2iC,kBAAkB3iC,KAExC,OAAOg/B,EAAMu2C,OAAO5+C,EAAMi/C,EAAK2R,GA1CtBC,CAAS5R,EAAKj/C,EAAMo9C,GACtB,GAAiB,QAAbA,EAAIh0E,KAAgB,CAC7B,GAAiB,QAAby2E,EAAoB,MAAM,IAAI53E,MAAM,yBACxC,OA0CJ,SAAoBg3E,EAAKj/C,EAAMo9C,GAC7B,IAAIhiE,EAAIgiE,EAAI/zE,KAAK+R,EACbiF,EAAI+8D,EAAI/zE,KAAKgX,EACbmN,EAAI4vD,EAAI/zE,KAAKmkB,EACbre,EAAIiuE,EAAI/zE,KAAK6iC,QACb4kD,EAAW3lD,EAAUmC,UAAUhL,OAAO28C,EAAK,OAC3Cn2D,EAAIgoE,EAAShoE,EACb9R,EAAI85E,EAAS95E,EACjB25E,EAAW7nE,EAAGzI,GACdswE,EAAW35E,EAAGqJ,GACd,IAAI0wE,EAAQ75E,EAAG2b,KAAKzX,GAChB1D,EAAIoR,EAAEqF,KAAK9N,GAOf,OAAoB,IANZmN,EAAEyB,MAAM8hE,GACbvgE,OAAO,IAAItZ,EAAG8oB,GAAMruB,IAAI+F,GAAGQ,IAAImI,IAC/BgP,UACA1d,IAAIxC,EAAE8f,MAAM8hE,GAAOvgE,OAAOxZ,EAAErF,IAAI+F,GAAGQ,IAAImI,IAAIgP,WAC3CnX,IAAIkD,GACJlD,IAAImI,GACEnC,IAAIlH,GA5DJg6E,CAAU/R,EAAKj/C,EAAMo9C,GAE5B,GAAiB,QAAbyC,GAAmC,cAAbA,EAA0B,MAAM,IAAI53E,MAAM,yBAEtE+3B,EAAO95B,EAAOkJ,OAAO,CAACo8B,EAAKxL,IAI3B,IAHA,IAAIh3B,EAAMo0E,EAAI1hC,QAAQrzC,aAClBo1D,EAAM,CAAC,GACPwzB,EAAS,EACNjxD,EAAKt5B,OAAS+2D,EAAI/2D,OAAS,EAAIsC,GACpCy0D,EAAI/wD,KAAK,KACTukF,IAEFxzB,EAAI/wD,KAAK,GAET,IADA,IAAIlD,GAAK,IACAA,EAAIw2B,EAAKt5B,QAChB+2D,EAAI/wD,KAAKszB,EAAKx2B,IAEhBi0D,EAAMv3D,EAAOS,KAAK82D,GAClB,IAAI9/C,EAAMzG,EAAG2b,KAAKuqD,EAAI1hC,SAGtBujC,GAFAA,EAAM,IAAI/nE,EAAG+nE,GAAKhwD,MAAMtR,IAEd6S,OAAO,IAAItZ,EAAGkmE,EAAIzhC,iBAC5BsjC,EAAM/4E,EAAOS,KAAKs4E,EAAI5vD,UAAUhY,WAChC,IAAI1G,EAAMsgF,EAAS,EAAI,EAAI,EAK3B,IAJAjoF,EAAMsE,KAAKC,IAAI0xE,EAAIv4E,OAAQ+2D,EAAI/2D,QAC3Bu4E,EAAIv4E,SAAW+2D,EAAI/2D,SAAQiK,EAAM,GAErCnH,GAAK,IACIA,EAAIR,GAAK2H,GAAOsuE,EAAIz1E,GAAKi0D,EAAIj0D,GACtC,OAAe,IAARmH,I,iBC5CT,kBAAe,EAAQ,KACnBuG,EAAK,EAAQ,KAEjB7R,EAAOC,QAAU,SAAqB+iC,GACpC,OAAO,IAAI6oD,EAAK7oD,IAGlB,IAAI8oD,EAAU,CACZC,UAAW,CACTh4E,KAAM,YACN/Q,WAAY,IAEdgpF,UAAW,CACTj4E,KAAM,OACN/Q,WAAY,IAEdipF,WAAY,CACVl4E,KAAM,OACN/Q,WAAY,IAEdkpF,WAAY,CACVn4E,KAAM,OACN/Q,WAAY,IAEdmpF,QAAS,CACPp4E,KAAM,UACN/Q,WAAY,IAEdopF,UAAW,CACTr4E,KAAM,OACN/Q,WAAY,IAEdqpF,UAAW,CACTt4E,KAAM,OACN/Q,WAAY,KAUhB,SAAS6oF,EAAM7oD,GACbrgC,KAAK2pF,UAAYR,EAAQ9oD,GACpBrgC,KAAK2pF,YACR3pF,KAAK2pF,UAAY,CACfv4E,KAAMivB,IAGVrgC,KAAKqgC,MAAQ,IAAImU,EAASE,GAAG10C,KAAK2pF,UAAUv4E,MAC5CpR,KAAKsrB,UAAO,EAwDd,SAASwqD,EAAmBriC,EAAItgC,EAAKnS,GAC9BwH,MAAMhJ,QAAQi0C,KACjBA,EAAKA,EAAGpkC,WAEV,IAAIlQ,EAAM,IAAIjB,EAAOu1C,GACrB,GAAIzyC,GAAO7B,EAAIT,OAASsC,EAAK,CAC3B,IAAIkW,EAAQ,IAAIhZ,EAAO8C,EAAM7B,EAAIT,QACjCwY,EAAMjY,KAAK,GACXE,EAAMjB,EAAOkJ,OAAO,CAAC8P,EAAO/X,IAE9B,OAAKgU,EAGIhU,EAAIsC,SAAS0R,GAFbhU,EAjFXgqF,EAAQxgE,KAAOwgE,EAAQE,UACvBF,EAAQS,KAAOT,EAAQU,UAAYV,EAAQG,WAC3CH,EAAQvgE,KAAOugE,EAAQW,UAAYX,EAAQI,WAC3CJ,EAAQY,KAAOZ,EAAQM,UACvBN,EAAQa,KAAOb,EAAQO,UAavBR,EAAKxrF,UAAUw4E,aAAe,SAAU/iE,EAAK4tD,GAE3C,OADA/gE,KAAKsrB,KAAOtrB,KAAKqgC,MAAMsgD,aAChB3gF,KAAKo2E,aAAajjE,EAAK4tD,IAGhCmoB,EAAKxrF,UAAU24E,cAAgB,SAAUC,EAAO2T,EAAO92E,GAOrD,OANA82E,EAAQA,GAAS,OACZ/rF,EAAO6C,SAASu1E,KACnBA,EAAQ,IAAIp4E,EAAOo4E,EAAO2T,IAIrBnU,EAFQ91E,KAAKqgC,MAAMogD,cAAcnK,GAAOsL,YAC5Bj4E,IAAI3J,KAAKsrB,KAAK+1D,cAAc/+C,OACjBnvB,EAAKnT,KAAK2pF,UAAUtpF,aAGpD6oF,EAAKxrF,UAAU04E,aAAe,SAAUjjE,EAAK4tD,GAC3C,IAAIziE,EAAM0B,KAAKsrB,KAAKs2D,UAAqB,eAAX7gB,GAAyB,GAQvD,MAPe,WAAXA,IACEziE,EAAIA,EAAII,OAAS,GAAK,EACxBJ,EAAI,GAAK,EAETA,EAAI,GAAK,GAGNw3E,EAAkBx3E,EAAK6U,IAGhC+1E,EAAKxrF,UAAUg5E,cAAgB,SAAUvjE,GACvC,OAAO2iE,EAAkB91E,KAAKsrB,KAAK+1D,aAAcluE,IAGnD+1E,EAAKxrF,UAAUy3E,aAAe,SAAUC,EAAKjiE,GAM3C,OALAA,EAAMA,GAAO,OACRjV,EAAO6C,SAASq0E,KACnBA,EAAM,IAAIl3E,EAAOk3E,EAAKjiE,IAExBnT,KAAKsrB,KAAK23D,cAAc7N,GACjBp1E,MAGTkpF,EAAKxrF,UAAU43E,cAAgB,SAAUjiC,EAAMlgC,GAC7CA,EAAMA,GAAO,OACRjV,EAAO6C,SAASsyC,KACnBA,EAAO,IAAIn1C,EAAOm1C,EAAMlgC,IAG1B,IAAIoiE,EAAQ,IAAIrmE,EAAGmkC,GAInB,OAHAkiC,EAAQA,EAAM9zE,SAAS,IACvBzB,KAAKsrB,KAAOtrB,KAAKqgC,MAAMsgD,aACvB3gF,KAAKsrB,KAAKy3D,eAAexN,GAClBv1E,Q,2CCzGT,2BACE,aAGA,SAAS6O,EAAQ1N,EAAK2N,GACpB,IAAK3N,EAAK,MAAM,IAAIlB,MAAM6O,GAAO,oBAKnC,SAASgE,EAAUvV,EAAMC,GACvBD,EAAKE,OAASD,EACd,IAAIQ,EAAW,aACfA,EAASN,UAAYF,EAAUE,UAC/BH,EAAKG,UAAY,IAAIM,EACrBT,EAAKG,UAAUC,YAAcJ,EAK/B,SAAS2R,EAAIoG,EAAQC,EAAMjC,GACzB,GAAIpE,EAAGsG,KAAKF,GACV,OAAOA,EAGTtV,KAAKyV,SAAW,EAChBzV,KAAK0V,MAAQ,KACb1V,KAAKtB,OAAS,EAGdsB,KAAK2V,IAAM,KAEI,OAAXL,IACW,OAATC,GAA0B,OAATA,IACnBjC,EAASiC,EACTA,EAAO,IAGTvV,KAAK4V,MAAMN,GAAU,EAAGC,GAAQ,GAAIjC,GAAU,OAYlD,IAAIpV,EATkB,iBAAXb,EACTA,EAAOC,QAAU4R,EAEjB5R,EAAQ4R,GAAKA,EAGfA,EAAGA,GAAKA,EACRA,EAAG2G,SAAW,GAGd,IACE3X,EAAS,EAAQ,KAAUA,OAC3B,MAAOsI,IAoIT,SAASsP,EAAUtR,EAAKxC,EAAOC,GAG7B,IAFA,IAAI+M,EAAI,EACJhO,EAAMsE,KAAKC,IAAIf,EAAI9F,OAAQuD,GACtBT,EAAIQ,EAAOR,EAAIR,EAAKQ,IAAK,CAChC,IAAIyD,EAAIT,EAAIG,WAAWnD,GAAK,GAE5BwN,IAAM,EAIJA,GADE/J,GAAK,IAAMA,GAAK,GACbA,EAAI,GAAK,GAGLA,GAAK,IAAMA,GAAK,GACpBA,EAAI,GAAK,GAIL,GAAJA,EAGT,OAAO+J,EAiCT,SAAS+G,EAAWvR,EAAKxC,EAAOC,EAAK0H,GAGnC,IAFA,IAAIqF,EAAI,EACJhO,EAAMsE,KAAKC,IAAIf,EAAI9F,OAAQuD,GACtBT,EAAIQ,EAAOR,EAAIR,EAAKQ,IAAK,CAChC,IAAIyD,EAAIT,EAAIG,WAAWnD,GAAK,GAE5BwN,GAAKrF,EAIHqF,GADE/J,GAAK,GACFA,EAAI,GAAK,GAGLA,GAAK,GACTA,EAAI,GAAK,GAITA,EAGT,OAAO+J,EA5MTE,EAAGsG,KAAO,SAAe/F,GACvB,OAAIA,aAAeP,GAIJ,OAARO,GAA+B,iBAARA,GAC5BA,EAAI9R,YAAYkY,WAAa3G,EAAG2G,UAAYrN,MAAMhJ,QAAQiQ,EAAIiG,QAGlExG,EAAGrH,IAAM,SAAcmO,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGT/G,EAAG3J,IAAM,SAAcyQ,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGT/G,EAAGxR,UAAUkY,MAAQ,SAAeN,EAAQC,EAAMjC,GAChD,GAAsB,iBAAXgC,EACT,OAAOtV,KAAKmW,YAAYb,EAAQC,EAAMjC,GAGxC,GAAsB,iBAAXgC,EACT,OAAOtV,KAAKoW,WAAWd,EAAQC,EAAMjC,GAG1B,QAATiC,IACFA,EAAO,IAET1G,EAAO0G,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,IAGnD,IAAIvT,EAAQ,EACM,OAFlBsT,EAASA,EAAO7T,WAAWiL,QAAQ,OAAQ,KAEhC,IACT1K,IAGW,KAATuT,EACFvV,KAAKqW,UAAUf,EAAQtT,GAEvBhC,KAAKsW,WAAWhB,EAAQC,EAAMvT,GAGd,MAAdsT,EAAO,KACTtV,KAAKyV,SAAW,GAGlBzV,KAAKuW,QAEU,OAAXjD,GAEJtT,KAAKoW,WAAWpW,KAAKqP,UAAWkG,EAAMjC,IAGxCpE,EAAGxR,UAAUyY,YAAc,SAAsBb,EAAQC,EAAMjC,GACzDgC,EAAS,IACXtV,KAAKyV,SAAW,EAChBH,GAAUA,GAERA,EAAS,UACXtV,KAAK0V,MAAQ,CAAW,SAATJ,GACftV,KAAKtB,OAAS,GACL4W,EAAS,kBAClBtV,KAAK0V,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,UAEzBtV,KAAKtB,OAAS,IAEdmQ,EAAOyG,EAAS,kBAChBtV,KAAK0V,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,SACvB,GAEFtV,KAAKtB,OAAS,GAGD,OAAX4U,GAGJtT,KAAKoW,WAAWpW,KAAKqP,UAAWkG,EAAMjC,IAGxCpE,EAAGxR,UAAU0Y,WAAa,SAAqBd,EAAQC,EAAMjC,GAG3D,GADAzE,EAAgC,iBAAlByG,EAAO5W,QACjB4W,EAAO5W,QAAU,EAGnB,OAFAsB,KAAK0V,MAAQ,CAAE,GACf1V,KAAKtB,OAAS,EACPsB,KAGTA,KAAKtB,OAAS4G,KAAKkR,KAAKlB,EAAO5W,OAAS,GACxCsB,KAAK0V,MAAQ,IAAIlN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BxB,KAAK0V,MAAMlU,GAAK,EAGlB,IAAIoC,EAAG8L,EACH+G,EAAM,EACV,GAAe,OAAXnD,EACF,IAAK9R,EAAI8T,EAAO5W,OAAS,EAAGkF,EAAI,EAAGpC,GAAK,EAAGA,GAAK,EAC9CkO,EAAI4F,EAAO9T,GAAM8T,EAAO9T,EAAI,IAAM,EAAM8T,EAAO9T,EAAI,IAAM,GACzDxB,KAAK0V,MAAM9R,IAAO8L,GAAK+G,EAAO,SAC9BzW,KAAK0V,MAAM9R,EAAI,GAAM8L,IAAO,GAAK+G,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACP7S,UAGC,GAAe,OAAX0P,EACT,IAAK9R,EAAI,EAAGoC,EAAI,EAAGpC,EAAI8T,EAAO5W,OAAQ8C,GAAK,EACzCkO,EAAI4F,EAAO9T,GAAM8T,EAAO9T,EAAI,IAAM,EAAM8T,EAAO9T,EAAI,IAAM,GACzDxB,KAAK0V,MAAM9R,IAAO8L,GAAK+G,EAAO,SAC9BzW,KAAK0V,MAAM9R,EAAI,GAAM8L,IAAO,GAAK+G,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACP7S,KAIN,OAAO5D,KAAKuW,SA2BdrH,EAAGxR,UAAU2Y,UAAY,SAAoBf,EAAQtT,GAEnDhC,KAAKtB,OAAS4G,KAAKkR,MAAMlB,EAAO5W,OAASsD,GAAS,GAClDhC,KAAK0V,MAAQ,IAAIlN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BxB,KAAK0V,MAAMlU,GAAK,EAGlB,IAAIoC,EAAG8L,EAEH+G,EAAM,EACV,IAAKjV,EAAI8T,EAAO5W,OAAS,EAAGkF,EAAI,EAAGpC,GAAKQ,EAAOR,GAAK,EAClDkO,EAAIoG,EAASR,EAAQ9T,EAAGA,EAAI,GAC5BxB,KAAK0V,MAAM9R,IAAO8L,GAAK+G,EAAO,SAE9BzW,KAAK0V,MAAM9R,EAAI,IAAM8L,IAAO,GAAK+G,EAAO,SACxCA,GAAO,KACI,KACTA,GAAO,GACP7S,KAGApC,EAAI,IAAMQ,IACZ0N,EAAIoG,EAASR,EAAQtT,EAAOR,EAAI,GAChCxB,KAAK0V,MAAM9R,IAAO8L,GAAK+G,EAAO,SAC9BzW,KAAK0V,MAAM9R,EAAI,IAAM8L,IAAO,GAAK+G,EAAO,SAE1CzW,KAAKuW,SA2BPrH,EAAGxR,UAAU4Y,WAAa,SAAqBhB,EAAQC,EAAMvT,GAE3DhC,KAAK0V,MAAQ,CAAE,GACf1V,KAAKtB,OAAS,EAGd,IAAK,IAAIgY,EAAU,EAAGC,EAAU,EAAGA,GAAW,SAAWA,GAAWpB,EAClEmB,IAEFA,IACAC,EAAWA,EAAUpB,EAAQ,EAO7B,IALA,IAAIqB,EAAQtB,EAAO5W,OAASsD,EACxBkO,EAAM0G,EAAQF,EACdzU,EAAMqD,KAAKC,IAAIqR,EAAOA,EAAQ1G,GAAOlO,EAErCiR,EAAO,EACFzR,EAAIQ,EAAOR,EAAIS,EAAKT,GAAKkV,EAChCzD,EAAO8C,EAAUT,EAAQ9T,EAAGA,EAAIkV,EAASnB,GAEzCvV,KAAK6W,MAAMF,GACP3W,KAAK0V,MAAM,GAAKzC,EAAO,SACzBjT,KAAK0V,MAAM,IAAMzC,EAEjBjT,KAAK8W,OAAO7D,GAIhB,GAAY,IAAR/C,EAAW,CACb,IAAIhG,EAAM,EAGV,IAFA+I,EAAO8C,EAAUT,EAAQ9T,EAAG8T,EAAO5W,OAAQ6W,GAEtC/T,EAAI,EAAGA,EAAI0O,EAAK1O,IACnB0I,GAAOqL,EAGTvV,KAAK6W,MAAM3M,GACPlK,KAAK0V,MAAM,GAAKzC,EAAO,SACzBjT,KAAK0V,MAAM,IAAMzC,EAEjBjT,KAAK8W,OAAO7D,KAKlB/D,EAAGxR,UAAUwD,KAAO,SAAe6V,GACjCA,EAAKrB,MAAQ,IAAIlN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BuV,EAAKrB,MAAMlU,GAAKxB,KAAK0V,MAAMlU,GAE7BuV,EAAKrY,OAASsB,KAAKtB,OACnBqY,EAAKtB,SAAWzV,KAAKyV,SACrBsB,EAAKpB,IAAM3V,KAAK2V,KAGlBzG,EAAGxR,UAAUsS,MAAQ,WACnB,IAAIhB,EAAI,IAAIE,EAAG,MAEf,OADAlP,KAAKkB,KAAK8N,GACHA,GAGTE,EAAGxR,UAAUsZ,QAAU,SAAkBhY,GACvC,KAAOgB,KAAKtB,OAASM,GACnBgB,KAAK0V,MAAM1V,KAAKtB,UAAY,EAE9B,OAAOsB,MAITkP,EAAGxR,UAAU6Y,MAAQ,WACnB,KAAOvW,KAAKtB,OAAS,GAAqC,IAAhCsB,KAAK0V,MAAM1V,KAAKtB,OAAS,IACjDsB,KAAKtB,SAEP,OAAOsB,KAAKiX,aAGd/H,EAAGxR,UAAUuZ,UAAY,WAKvB,OAHoB,IAAhBjX,KAAKtB,QAAkC,IAAlBsB,KAAK0V,MAAM,KAClC1V,KAAKyV,SAAW,GAEXzV,MAGTkP,EAAGxR,UAAUkK,QAAU,WACrB,OAAQ5H,KAAK2V,IAAM,UAAY,SAAW3V,KAAKyB,SAAS,IAAM,KAiChE,IAAIyV,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UAsjB9D,SAASC,EAAYC,EAAM7H,EAAK9G,GAC9BA,EAAI8M,SAAWhG,EAAIgG,SAAW6B,EAAK7B,SACnC,IAAIzU,EAAOsW,EAAK5Y,OAAS+Q,EAAI/Q,OAAU,EACvCiK,EAAIjK,OAASsC,EACbA,EAAOA,EAAM,EAAK,EAGlB,IAAIiG,EAAoB,EAAhBqQ,EAAK5B,MAAM,GACfjT,EAAmB,EAAfgN,EAAIiG,MAAM,GACd1G,EAAI/H,EAAIxE,EAER0C,EAAS,SAAJ6J,EACL4F,EAAS5F,EAAI,SAAa,EAC9BrG,EAAI+M,MAAM,GAAKvQ,EAEf,IAAK,IAAI4K,EAAI,EAAGA,EAAI/O,EAAK+O,IAAK,CAM5B,IAHA,IAAIwH,EAAS3C,IAAU,GACnB4C,EAAgB,SAAR5C,EACR6C,EAAOnS,KAAKC,IAAIwK,EAAGN,EAAI/Q,OAAS,GAC3BkF,EAAI0B,KAAKuC,IAAI,EAAGkI,EAAIuH,EAAK5Y,OAAS,GAAIkF,GAAK6T,EAAM7T,IAAK,CAC7D,IAAIpC,EAAKuO,EAAInM,EAAK,EAIlB2T,IADAvI,GAFA/H,EAAoB,EAAhBqQ,EAAK5B,MAAMlU,KACfiB,EAAmB,EAAfgN,EAAIiG,MAAM9R,IACF4T,GACG,SAAa,EAC5BA,EAAY,SAAJxI,EAEVrG,EAAI+M,MAAM3F,GAAa,EAARyH,EACf5C,EAAiB,EAAT2C,EAQV,OANc,IAAV3C,EACFjM,EAAI+M,MAAM3F,GAAa,EAAR6E,EAEfjM,EAAIjK,SAGCiK,EAAI4N,QAzlBbrH,EAAGxR,UAAU+D,SAAW,SAAmB8T,EAAMmC,GAI/C,IAAI/O,EACJ,GAHA+O,EAAoB,EAAVA,GAAe,EAGZ,MAJbnC,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjC5M,EAAM,GAGN,IAFA,IAAI8N,EAAM,EACN7B,EAAQ,EACHpT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIkO,EAAI1P,KAAK0V,MAAMlU,GACfyR,GAA+B,UAArBvD,GAAK+G,EAAO7B,IAAmBnT,SAAS,IAGpDkH,EADY,KADdiM,EAASlF,IAAO,GAAK+G,EAAQ,WACVjV,IAAMxB,KAAKtB,OAAS,EAC/BwY,EAAM,EAAIjE,EAAKvU,QAAUuU,EAAOtK,EAEhCsK,EAAOtK,GAEf8N,GAAO,IACI,KACTA,GAAO,GACPjV,KAMJ,IAHc,IAAVoT,IACFjM,EAAMiM,EAAMnT,SAAS,IAAMkH,GAEtBA,EAAIjK,OAASgZ,GAAY,GAC9B/O,EAAM,IAAMA,EAKd,OAHsB,IAAlB3I,KAAKyV,WACP9M,EAAM,IAAMA,GAEPA,EAGT,GAAI4M,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,GAAI,CAElD,IAAIoC,EAAYR,EAAW5B,GAEvBqC,EAAYR,EAAW7B,GAC3B5M,EAAM,GACN,IAAI1D,EAAIjF,KAAKgQ,QAEb,IADA/K,EAAEwQ,SAAW,GACLxQ,EAAE4S,UAAU,CAClB,IAAI7I,EAAI/J,EAAE6S,KAAKF,GAAWnW,SAAS8T,GAMjC5M,GALF1D,EAAIA,EAAE8S,MAAMH,IAELC,SAGC7I,EAAIrG,EAFJuO,EAAMS,EAAY3I,EAAEtQ,QAAUsQ,EAAIrG,EAQ5C,IAHI3I,KAAK6X,WACPlP,EAAM,IAAMA,GAEPA,EAAIjK,OAASgZ,GAAY,GAC9B/O,EAAM,IAAMA,EAKd,OAHsB,IAAlB3I,KAAKyV,WACP9M,EAAM,IAAMA,GAEPA,EAGTkG,GAAO,EAAO,oCAGhBK,EAAGxR,UAAUsa,SAAW,WACtB,IAAItP,EAAM1I,KAAK0V,MAAM,GASrB,OARoB,IAAhB1V,KAAKtB,OACPgK,GAAuB,SAAhB1I,KAAK0V,MAAM,GACO,IAAhB1V,KAAKtB,QAAkC,IAAlBsB,KAAK0V,MAAM,GAEzChN,GAAO,iBAAoC,SAAhB1I,KAAK0V,MAAM,GAC7B1V,KAAKtB,OAAS,GACvBmQ,GAAO,EAAO,8CAEU,IAAlB7O,KAAKyV,UAAmB/M,EAAMA,GAGxCwG,EAAGxR,UAAU6K,OAAS,WACpB,OAAOvI,KAAKyB,SAAS,KAGvByN,EAAGxR,UAAUua,SAAW,SAAmB3E,EAAQ5U,GAEjD,OADAmQ,OAAyB,IAAX3Q,GACP8B,KAAKkY,YAAYha,EAAQoV,EAAQ5U,IAG1CwQ,EAAGxR,UAAU2R,QAAU,SAAkBiE,EAAQ5U,GAC/C,OAAOsB,KAAKkY,YAAY1P,MAAO8K,EAAQ5U,IAGzCwQ,EAAGxR,UAAUwa,YAAc,SAAsBC,EAAW7E,EAAQ5U,GAClE,IAAI2B,EAAaL,KAAKK,aAClB+X,EAAY1Z,GAAU4G,KAAKuC,IAAI,EAAGxH,GACtCwO,EAAOxO,GAAc+X,EAAW,yCAChCvJ,EAAOuJ,EAAY,EAAG,+BAEtBpY,KAAKuW,QACL,IAGI9T,EAAGjB,EAHH0H,EAA0B,OAAXoK,EACf9N,EAAM,IAAI2S,EAAUC,GAGpBC,EAAIrY,KAAKgQ,QACb,GAAK9G,EAYE,CACL,IAAK1H,EAAI,GAAI6W,EAAER,SAAUrW,IACvBiB,EAAI4V,EAAElI,MAAM,KACZkI,EAAE/H,OAAO,GAET9K,EAAIhE,GAAKiB,EAGX,KAAOjB,EAAI4W,EAAW5W,IACpBgE,EAAIhE,GAAK,MArBM,CAEjB,IAAKA,EAAI,EAAGA,EAAI4W,EAAY/X,EAAYmB,IACtCgE,EAAIhE,GAAK,EAGX,IAAKA,EAAI,GAAI6W,EAAER,SAAUrW,IACvBiB,EAAI4V,EAAElI,MAAM,KACZkI,EAAE/H,OAAO,GAET9K,EAAI4S,EAAY5W,EAAI,GAAKiB,EAe7B,OAAO+C,GAGLF,KAAKgT,MACPpJ,EAAGxR,UAAU6a,WAAa,SAAqB7I,GAC7C,OAAO,GAAKpK,KAAKgT,MAAM5I,IAGzBR,EAAGxR,UAAU6a,WAAa,SAAqB7I,GAC7C,IAAI8I,EAAI9I,EACJV,EAAI,EAiBR,OAhBIwJ,GAAK,OACPxJ,GAAK,GACLwJ,KAAO,IAELA,GAAK,KACPxJ,GAAK,EACLwJ,KAAO,GAELA,GAAK,IACPxJ,GAAK,EACLwJ,KAAO,GAELA,GAAK,IACPxJ,GAAK,EACLwJ,KAAO,GAEFxJ,EAAIwJ,GAIftJ,EAAGxR,UAAU+a,UAAY,SAAoB/I,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAI8I,EAAI9I,EACJV,EAAI,EAoBR,OAnBqB,IAAZ,KAAJwJ,KACHxJ,GAAK,GACLwJ,KAAO,IAEU,IAAV,IAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,GAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,EAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,EAAJA,IACHxJ,IAEKA,GAITE,EAAGxR,UAAUmS,UAAY,WACvB,IAAIH,EAAI1P,KAAK0V,MAAM1V,KAAKtB,OAAS,GAC7BwG,EAAKlF,KAAKuY,WAAW7I,GACzB,OAA2B,IAAnB1P,KAAKtB,OAAS,GAAUwG,GAiBlCgK,EAAGxR,UAAUgb,SAAW,WACtB,GAAI1Y,KAAK6X,SAAU,OAAO,EAG1B,IADA,IAAI7I,EAAI,EACCxN,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIiB,EAAIzC,KAAKyY,UAAUzY,KAAK0V,MAAMlU,IAElC,GADAwN,GAAKvM,EACK,KAANA,EAAU,MAEhB,OAAOuM,GAGTE,EAAGxR,UAAU2C,WAAa,WACxB,OAAOiF,KAAKkR,KAAKxW,KAAK6P,YAAc,IAGtCX,EAAGxR,UAAUib,OAAS,SAAiBC,GACrC,OAAsB,IAAlB5Y,KAAKyV,SACAzV,KAAK6Y,MAAMC,MAAMF,GAAOG,MAAM,GAEhC/Y,KAAKgQ,SAGdd,EAAGxR,UAAUsb,SAAW,SAAmBJ,GACzC,OAAI5Y,KAAKiZ,MAAML,EAAQ,GACd5Y,KAAKkZ,KAAKN,GAAOG,MAAM,GAAGI,OAE5BnZ,KAAKgQ,SAGdd,EAAGxR,UAAU0b,MAAQ,WACnB,OAAyB,IAAlBpZ,KAAKyV,UAIdvG,EAAGxR,UAAU2b,IAAM,WACjB,OAAOrZ,KAAKgQ,QAAQmJ,QAGtBjK,EAAGxR,UAAUyb,KAAO,WAKlB,OAJKnZ,KAAK6X,WACR7X,KAAKyV,UAAY,GAGZzV,MAITkP,EAAGxR,UAAU4b,KAAO,SAAe7J,GACjC,KAAOzP,KAAKtB,OAAS+Q,EAAI/Q,QACvBsB,KAAK0V,MAAM1V,KAAKtB,UAAY,EAG9B,IAAK,IAAI8C,EAAI,EAAGA,EAAIiO,EAAI/Q,OAAQ8C,IAC9BxB,KAAK0V,MAAMlU,GAAKxB,KAAK0V,MAAMlU,GAAKiO,EAAIiG,MAAMlU,GAG5C,OAAOxB,KAAKuW,SAGdrH,EAAGxR,UAAU6b,IAAM,SAAc9J,GAE/B,OADAZ,EAA0C,IAAlC7O,KAAKyV,SAAWhG,EAAIgG,WACrBzV,KAAKsZ,KAAK7J,IAInBP,EAAGxR,UAAU8b,GAAK,SAAa/J,GAC7B,OAAIzP,KAAKtB,OAAS+Q,EAAI/Q,OAAesB,KAAKgQ,QAAQuJ,IAAI9J,GAC/CA,EAAIO,QAAQuJ,IAAIvZ,OAGzBkP,EAAGxR,UAAU+b,IAAM,SAAchK,GAC/B,OAAIzP,KAAKtB,OAAS+Q,EAAI/Q,OAAesB,KAAKgQ,QAAQsJ,KAAK7J,GAChDA,EAAIO,QAAQsJ,KAAKtZ,OAI1BkP,EAAGxR,UAAUgc,MAAQ,SAAgBjK,GAEnC,IAAIhN,EAEFA,EADEzC,KAAKtB,OAAS+Q,EAAI/Q,OAChB+Q,EAEAzP,KAGN,IAAK,IAAIwB,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BxB,KAAK0V,MAAMlU,GAAKxB,KAAK0V,MAAMlU,GAAKiO,EAAIiG,MAAMlU,GAK5C,OAFAxB,KAAKtB,OAAS+D,EAAE/D,OAETsB,KAAKuW,SAGdrH,EAAGxR,UAAUic,KAAO,SAAelK,GAEjC,OADAZ,EAA0C,IAAlC7O,KAAKyV,SAAWhG,EAAIgG,WACrBzV,KAAK0Z,MAAMjK,IAIpBP,EAAGxR,UAAUkc,IAAM,SAAcnK,GAC/B,OAAIzP,KAAKtB,OAAS+Q,EAAI/Q,OAAesB,KAAKgQ,QAAQ2J,KAAKlK,GAChDA,EAAIO,QAAQ2J,KAAK3Z,OAG1BkP,EAAGxR,UAAUmc,KAAO,SAAepK,GACjC,OAAIzP,KAAKtB,OAAS+Q,EAAI/Q,OAAesB,KAAKgQ,QAAQ0J,MAAMjK,GACjDA,EAAIO,QAAQ0J,MAAM1Z,OAI3BkP,EAAGxR,UAAUoc,MAAQ,SAAgBrK,GAEnC,IAAIxI,EACAxE,EACAzC,KAAKtB,OAAS+Q,EAAI/Q,QACpBuI,EAAIjH,KACJyC,EAAIgN,IAEJxI,EAAIwI,EACJhN,EAAIzC,MAGN,IAAK,IAAIwB,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BxB,KAAK0V,MAAMlU,GAAKyF,EAAEyO,MAAMlU,GAAKiB,EAAEiT,MAAMlU,GAGvC,GAAIxB,OAASiH,EACX,KAAOzF,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK0V,MAAMlU,GAAKyF,EAAEyO,MAAMlU,GAM5B,OAFAxB,KAAKtB,OAASuI,EAAEvI,OAETsB,KAAKuW,SAGdrH,EAAGxR,UAAUqc,KAAO,SAAetK,GAEjC,OADAZ,EAA0C,IAAlC7O,KAAKyV,SAAWhG,EAAIgG,WACrBzV,KAAK8Z,MAAMrK,IAIpBP,EAAGxR,UAAUsc,IAAM,SAAcvK,GAC/B,OAAIzP,KAAKtB,OAAS+Q,EAAI/Q,OAAesB,KAAKgQ,QAAQ+J,KAAKtK,GAChDA,EAAIO,QAAQ+J,KAAK/Z,OAG1BkP,EAAGxR,UAAUuc,KAAO,SAAexK,GACjC,OAAIzP,KAAKtB,OAAS+Q,EAAI/Q,OAAesB,KAAKgQ,QAAQ8J,MAAMrK,GACjDA,EAAIO,QAAQ8J,MAAM9Z,OAI3BkP,EAAGxR,UAAUob,MAAQ,SAAgBF,GACnC/J,EAAwB,iBAAV+J,GAAsBA,GAAS,GAE7C,IAAIsB,EAAsC,EAAxB5U,KAAKkR,KAAKoC,EAAQ,IAChCuB,EAAWvB,EAAQ,GAGvB5Y,KAAKgX,QAAQkD,GAETC,EAAW,GACbD,IAIF,IAAK,IAAI1Y,EAAI,EAAGA,EAAI0Y,EAAa1Y,IAC/BxB,KAAK0V,MAAMlU,GAAsB,UAAhBxB,KAAK0V,MAAMlU,GAS9B,OALI2Y,EAAW,IACbna,KAAK0V,MAAMlU,IAAMxB,KAAK0V,MAAMlU,GAAM,UAAc,GAAK2Y,GAIhDna,KAAKuW,SAGdrH,EAAGxR,UAAUwb,KAAO,SAAeN,GACjC,OAAO5Y,KAAKgQ,QAAQ8I,MAAMF,IAI5B1J,EAAGxR,UAAU0c,KAAO,SAAeC,EAAKlZ,GACtC0N,EAAsB,iBAARwL,GAAoBA,GAAO,GAEzC,IAAI5D,EAAO4D,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAUjB,OARAra,KAAKgX,QAAQP,EAAM,GAGjBzW,KAAK0V,MAAMe,GADTtV,EACgBnB,KAAK0V,MAAMe,GAAQ,GAAK6D,EAExBta,KAAK0V,MAAMe,KAAS,GAAK6D,GAGtCta,KAAKuW,SAIdrH,EAAGxR,UAAU6c,KAAO,SAAe9K,GACjC,IAAIT,EAkBA/H,EAAGxE,EAfP,GAAsB,IAAlBzC,KAAKyV,UAAmC,IAAjBhG,EAAIgG,SAI7B,OAHAzV,KAAKyV,SAAW,EAChBzG,EAAIhP,KAAKwa,KAAK/K,GACdzP,KAAKyV,UAAY,EACVzV,KAAKiX,YAGP,GAAsB,IAAlBjX,KAAKyV,UAAmC,IAAjBhG,EAAIgG,SAIpC,OAHAhG,EAAIgG,SAAW,EACfzG,EAAIhP,KAAKwa,KAAK/K,GACdA,EAAIgG,SAAW,EACRzG,EAAEiI,YAKPjX,KAAKtB,OAAS+Q,EAAI/Q,QACpBuI,EAAIjH,KACJyC,EAAIgN,IAEJxI,EAAIwI,EACJhN,EAAIzC,MAIN,IADA,IAAI4U,EAAQ,EACHpT,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BwN,GAAkB,EAAb/H,EAAEyO,MAAMlU,KAAwB,EAAbiB,EAAEiT,MAAMlU,IAAUoT,EAC1C5U,KAAK0V,MAAMlU,GAAS,SAAJwN,EAChB4F,EAAQ5F,IAAM,GAEhB,KAAiB,IAAV4F,GAAepT,EAAIyF,EAAEvI,OAAQ8C,IAClCwN,GAAkB,EAAb/H,EAAEyO,MAAMlU,IAAUoT,EACvB5U,KAAK0V,MAAMlU,GAAS,SAAJwN,EAChB4F,EAAQ5F,IAAM,GAIhB,GADAhP,KAAKtB,OAASuI,EAAEvI,OACF,IAAVkW,EACF5U,KAAK0V,MAAM1V,KAAKtB,QAAUkW,EAC1B5U,KAAKtB,cAEA,GAAIuI,IAAMjH,KACf,KAAOwB,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK0V,MAAMlU,GAAKyF,EAAEyO,MAAMlU,GAI5B,OAAOxB,MAITkP,EAAGxR,UAAU+c,IAAM,SAAchL,GAC/B,IAAIjK,EACJ,OAAqB,IAAjBiK,EAAIgG,UAAoC,IAAlBzV,KAAKyV,UAC7BhG,EAAIgG,SAAW,EACfjQ,EAAMxF,KAAKuL,IAAIkE,GACfA,EAAIgG,UAAY,EACTjQ,GACmB,IAAjBiK,EAAIgG,UAAoC,IAAlBzV,KAAKyV,UACpCzV,KAAKyV,SAAW,EAChBjQ,EAAMiK,EAAIlE,IAAIvL,MACdA,KAAKyV,SAAW,EACTjQ,GAGLxF,KAAKtB,OAAS+Q,EAAI/Q,OAAesB,KAAKgQ,QAAQuK,KAAK9K,GAEhDA,EAAIO,QAAQuK,KAAKva,OAI1BkP,EAAGxR,UAAU8c,KAAO,SAAe/K,GAEjC,GAAqB,IAAjBA,EAAIgG,SAAgB,CACtBhG,EAAIgG,SAAW,EACf,IAAIzG,EAAIhP,KAAKua,KAAK9K,GAElB,OADAA,EAAIgG,SAAW,EACRzG,EAAEiI,YAGJ,GAAsB,IAAlBjX,KAAKyV,SAId,OAHAzV,KAAKyV,SAAW,EAChBzV,KAAKua,KAAK9K,GACVzP,KAAKyV,SAAW,EACTzV,KAAKiX,YAId,IAWIhQ,EAAGxE,EAXHyT,EAAMlW,KAAKkW,IAAIzG,GAGnB,GAAY,IAARyG,EAIF,OAHAlW,KAAKyV,SAAW,EAChBzV,KAAKtB,OAAS,EACdsB,KAAK0V,MAAM,GAAK,EACT1V,KAKLkW,EAAM,GACRjP,EAAIjH,KACJyC,EAAIgN,IAEJxI,EAAIwI,EACJhN,EAAIzC,MAIN,IADA,IAAI4U,EAAQ,EACHpT,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAE5BoT,GADA5F,GAAkB,EAAb/H,EAAEyO,MAAMlU,KAAwB,EAAbiB,EAAEiT,MAAMlU,IAAUoT,IAC7B,GACb5U,KAAK0V,MAAMlU,GAAS,SAAJwN,EAElB,KAAiB,IAAV4F,GAAepT,EAAIyF,EAAEvI,OAAQ8C,IAElCoT,GADA5F,GAAkB,EAAb/H,EAAEyO,MAAMlU,IAAUoT,IACV,GACb5U,KAAK0V,MAAMlU,GAAS,SAAJwN,EAIlB,GAAc,IAAV4F,GAAepT,EAAIyF,EAAEvI,QAAUuI,IAAMjH,KACvC,KAAOwB,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK0V,MAAMlU,GAAKyF,EAAEyO,MAAMlU,GAU5B,OANAxB,KAAKtB,OAAS4G,KAAKuC,IAAI7H,KAAKtB,OAAQ8C,GAEhCyF,IAAMjH,OACRA,KAAKyV,SAAW,GAGXzV,KAAKuW,SAIdrH,EAAGxR,UAAU6N,IAAM,SAAckE,GAC/B,OAAOzP,KAAKgQ,QAAQwK,KAAK/K,IA+C3B,IAAIiL,EAAc,SAAsBpD,EAAM7H,EAAK9G,GACjD,IAIIxD,EACAwV,EACAzV,EANA+B,EAAIqQ,EAAK5B,MACTjT,EAAIgN,EAAIiG,MACRkF,EAAIjS,EAAI+M,MACRzQ,EAAI,EAIJ4V,EAAY,EAAP5T,EAAE,GACP6T,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP/T,EAAE,GACPgU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPlU,EAAE,GACPmU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPrU,EAAE,GACPsU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxU,EAAE,GACPyU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3U,EAAE,GACP4U,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9U,EAAE,GACP+U,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjV,EAAE,GACPkV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPpV,EAAE,GACPqV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPvV,EAAE,GACPwV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPla,EAAE,GACPma,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPra,EAAE,GACPsa,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxa,EAAE,GACPya,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3a,EAAE,GACP4a,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9a,EAAE,GACP+a,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAPjb,EAAE,GACPkb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPpb,EAAE,GACPqb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPvb,EAAE,GACPwb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP1b,EAAE,GACP2b,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP7b,EAAE,GACP8b,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjB3V,EAAI8M,SAAW6B,EAAK7B,SAAWhG,EAAIgG,SACnC9M,EAAIjK,OAAS,GAMb,IAAI+f,IAAQxZ,GAJZE,EAAKG,KAAKoZ,KAAK5D,EAAK8B,IAIE,KAAa,MAFnCjC,GADAA,EAAMrV,KAAKoZ,KAAK5D,EAAK+B,IACRvX,KAAKoZ,KAAK3D,EAAK6B,GAAQ,KAEU,IAAO,EACrD3X,IAFAC,EAAKI,KAAKoZ,KAAK3D,EAAK8B,KAEPlC,IAAQ,IAAO,IAAM8D,KAAO,IAAO,EAChDA,IAAM,SAENtZ,EAAKG,KAAKoZ,KAAKzD,EAAK2B,GAEpBjC,GADAA,EAAMrV,KAAKoZ,KAAKzD,EAAK4B,IACRvX,KAAKoZ,KAAKxD,EAAK0B,GAAQ,EACpC1X,EAAKI,KAAKoZ,KAAKxD,EAAK2B,GAKpB,IAAI8B,IAAQ1Z,GAJZE,EAAMA,EAAKG,KAAKoZ,KAAK5D,EAAKiC,GAAQ,GAIZ,KAAa,MAFnCpC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK5D,EAAKkC,GAAQ,GACvB1X,KAAKoZ,KAAK3D,EAAKgC,GAAQ,KAEU,IAAO,EACrD9X,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAK3D,EAAKiC,GAAQ,IAErBrC,IAAQ,IAAO,IAAMgE,KAAO,IAAO,EAChDA,IAAM,SAENxZ,EAAKG,KAAKoZ,KAAKtD,EAAKwB,GAEpBjC,GADAA,EAAMrV,KAAKoZ,KAAKtD,EAAKyB,IACRvX,KAAKoZ,KAAKrD,EAAKuB,GAAQ,EACpC1X,EAAKI,KAAKoZ,KAAKrD,EAAKwB,GACpB1X,EAAMA,EAAKG,KAAKoZ,KAAKzD,EAAK8B,GAAQ,EAElCpC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKzD,EAAK+B,GAAQ,GACvB1X,KAAKoZ,KAAKxD,EAAK6B,GAAQ,EACpC7X,EAAMA,EAAKI,KAAKoZ,KAAKxD,EAAK8B,GAAQ,EAKlC,IAAI4B,IAAQ3Z,GAJZE,EAAMA,EAAKG,KAAKoZ,KAAK5D,EAAKoC,GAAQ,GAIZ,KAAa,MAFnCvC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK5D,EAAKqC,GAAQ,GACvB7X,KAAKoZ,KAAK3D,EAAKmC,GAAQ,KAEU,IAAO,EACrDjY,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAK3D,EAAKoC,GAAQ,IAErBxC,IAAQ,IAAO,IAAMiE,KAAO,IAAO,EAChDA,IAAM,SAENzZ,EAAKG,KAAKoZ,KAAKnD,EAAKqB,GAEpBjC,GADAA,EAAMrV,KAAKoZ,KAAKnD,EAAKsB,IACRvX,KAAKoZ,KAAKlD,EAAKoB,GAAQ,EACpC1X,EAAKI,KAAKoZ,KAAKlD,EAAKqB,GACpB1X,EAAMA,EAAKG,KAAKoZ,KAAKtD,EAAK2B,GAAQ,EAElCpC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKtD,EAAK4B,GAAQ,GACvB1X,KAAKoZ,KAAKrD,EAAK0B,GAAQ,EACpC7X,EAAMA,EAAKI,KAAKoZ,KAAKrD,EAAK2B,GAAQ,EAClC7X,EAAMA,EAAKG,KAAKoZ,KAAKzD,EAAKiC,GAAQ,EAElCvC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKzD,EAAKkC,GAAQ,GACvB7X,KAAKoZ,KAAKxD,EAAKgC,GAAQ,EACpChY,EAAMA,EAAKI,KAAKoZ,KAAKxD,EAAKiC,GAAQ,EAKlC,IAAI0B,IAAQ5Z,GAJZE,EAAMA,EAAKG,KAAKoZ,KAAK5D,EAAKuC,GAAQ,GAIZ,KAAa,MAFnC1C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK5D,EAAKwC,GAAQ,GACvBhY,KAAKoZ,KAAK3D,EAAKsC,GAAQ,KAEU,IAAO,EACrDpY,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAK3D,EAAKuC,GAAQ,IAErB3C,IAAQ,IAAO,IAAMkE,KAAO,IAAO,EAChDA,IAAM,SAEN1Z,EAAKG,KAAKoZ,KAAKhD,EAAKkB,GAEpBjC,GADAA,EAAMrV,KAAKoZ,KAAKhD,EAAKmB,IACRvX,KAAKoZ,KAAK/C,EAAKiB,GAAQ,EACpC1X,EAAKI,KAAKoZ,KAAK/C,EAAKkB,GACpB1X,EAAMA,EAAKG,KAAKoZ,KAAKnD,EAAKwB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKnD,EAAKyB,GAAQ,GACvB1X,KAAKoZ,KAAKlD,EAAKuB,GAAQ,EACpC7X,EAAMA,EAAKI,KAAKoZ,KAAKlD,EAAKwB,GAAQ,EAClC7X,EAAMA,EAAKG,KAAKoZ,KAAKtD,EAAK8B,GAAQ,EAElCvC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKtD,EAAK+B,GAAQ,GACvB7X,KAAKoZ,KAAKrD,EAAK6B,GAAQ,EACpChY,EAAMA,EAAKI,KAAKoZ,KAAKrD,EAAK8B,GAAQ,EAClChY,EAAMA,EAAKG,KAAKoZ,KAAKzD,EAAKoC,GAAQ,EAElC1C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKzD,EAAKqC,GAAQ,GACvBhY,KAAKoZ,KAAKxD,EAAKmC,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKoZ,KAAKxD,EAAKoC,GAAQ,EAKlC,IAAIwB,IAAQ7Z,GAJZE,EAAMA,EAAKG,KAAKoZ,KAAK5D,EAAK0C,GAAQ,GAIZ,KAAa,MAFnC7C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK5D,EAAK2C,IAAQ,GACvBnY,KAAKoZ,KAAK3D,EAAKyC,GAAQ,KAEU,IAAO,EACrDvY,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAK3D,EAAK0C,IAAQ,IAErB9C,IAAQ,IAAO,IAAMmE,KAAO,IAAO,EAChDA,IAAM,SAEN3Z,EAAKG,KAAKoZ,KAAK7C,EAAKe,GAEpBjC,GADAA,EAAMrV,KAAKoZ,KAAK7C,EAAKgB,IACRvX,KAAKoZ,KAAK5C,EAAKc,GAAQ,EACpC1X,EAAKI,KAAKoZ,KAAK5C,EAAKe,GACpB1X,EAAMA,EAAKG,KAAKoZ,KAAKhD,EAAKqB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKhD,EAAKsB,GAAQ,GACvB1X,KAAKoZ,KAAK/C,EAAKoB,GAAQ,EACpC7X,EAAMA,EAAKI,KAAKoZ,KAAK/C,EAAKqB,GAAQ,EAClC7X,EAAMA,EAAKG,KAAKoZ,KAAKnD,EAAK2B,GAAQ,EAElCvC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKnD,EAAK4B,GAAQ,GACvB7X,KAAKoZ,KAAKlD,EAAK0B,GAAQ,EACpChY,EAAMA,EAAKI,KAAKoZ,KAAKlD,EAAK2B,GAAQ,EAClChY,EAAMA,EAAKG,KAAKoZ,KAAKtD,EAAKiC,GAAQ,EAElC1C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKtD,EAAKkC,GAAQ,GACvBhY,KAAKoZ,KAAKrD,EAAKgC,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKoZ,KAAKrD,EAAKiC,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKoZ,KAAKzD,EAAKuC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKzD,EAAKwC,IAAQ,GACvBnY,KAAKoZ,KAAKxD,EAAKsC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKoZ,KAAKxD,EAAKuC,IAAQ,EAKlC,IAAIsB,IAAQ9Z,GAJZE,EAAMA,EAAKG,KAAKoZ,KAAK5D,EAAK6C,IAAQ,GAIZ,KAAa,MAFnChD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK5D,EAAK8C,IAAQ,GACvBtY,KAAKoZ,KAAK3D,EAAK4C,IAAQ,KAEU,IAAO,EACrD1Y,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAK3D,EAAK6C,IAAQ,IAErBjD,IAAQ,IAAO,IAAMoE,KAAO,IAAO,EAChDA,IAAM,SAEN5Z,EAAKG,KAAKoZ,KAAK1C,EAAKY,GAEpBjC,GADAA,EAAMrV,KAAKoZ,KAAK1C,EAAKa,IACRvX,KAAKoZ,KAAKzC,EAAKW,GAAQ,EACpC1X,EAAKI,KAAKoZ,KAAKzC,EAAKY,GACpB1X,EAAMA,EAAKG,KAAKoZ,KAAK7C,EAAKkB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK7C,EAAKmB,GAAQ,GACvB1X,KAAKoZ,KAAK5C,EAAKiB,GAAQ,EACpC7X,EAAMA,EAAKI,KAAKoZ,KAAK5C,EAAKkB,GAAQ,EAClC7X,EAAMA,EAAKG,KAAKoZ,KAAKhD,EAAKwB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKhD,EAAKyB,GAAQ,GACvB7X,KAAKoZ,KAAK/C,EAAKuB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKoZ,KAAK/C,EAAKwB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKoZ,KAAKnD,EAAK8B,GAAQ,EAElC1C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKnD,EAAK+B,GAAQ,GACvBhY,KAAKoZ,KAAKlD,EAAK6B,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKoZ,KAAKlD,EAAK8B,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKoZ,KAAKtD,EAAKoC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKtD,EAAKqC,IAAQ,GACvBnY,KAAKoZ,KAAKrD,EAAKmC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKoZ,KAAKrD,EAAKoC,IAAQ,EAClCtY,EAAMA,EAAKG,KAAKoZ,KAAKzD,EAAK0C,IAAQ,EAElChD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKzD,EAAK2C,IAAQ,GACvBtY,KAAKoZ,KAAKxD,EAAKyC,IAAQ,EACpCzY,EAAMA,EAAKI,KAAKoZ,KAAKxD,EAAK0C,IAAQ,EAKlC,IAAIoB,IAAQ/Z,GAJZE,EAAMA,EAAKG,KAAKoZ,KAAK5D,EAAKgD,IAAQ,GAIZ,KAAa,MAFnCnD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK5D,EAAKiD,IAAQ,GACvBzY,KAAKoZ,KAAK3D,EAAK+C,IAAQ,KAEU,IAAO,EACrD7Y,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAK3D,EAAKgD,IAAQ,IAErBpD,IAAQ,IAAO,IAAMqE,KAAO,IAAO,EAChDA,IAAM,SAEN7Z,EAAKG,KAAKoZ,KAAKvC,EAAKS,GAEpBjC,GADAA,EAAMrV,KAAKoZ,KAAKvC,EAAKU,IACRvX,KAAKoZ,KAAKtC,EAAKQ,GAAQ,EACpC1X,EAAKI,KAAKoZ,KAAKtC,EAAKS,GACpB1X,EAAMA,EAAKG,KAAKoZ,KAAK1C,EAAKe,GAAQ,EAElCpC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK1C,EAAKgB,GAAQ,GACvB1X,KAAKoZ,KAAKzC,EAAKc,GAAQ,EACpC7X,EAAMA,EAAKI,KAAKoZ,KAAKzC,EAAKe,GAAQ,EAClC7X,EAAMA,EAAKG,KAAKoZ,KAAK7C,EAAKqB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK7C,EAAKsB,GAAQ,GACvB7X,KAAKoZ,KAAK5C,EAAKoB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKoZ,KAAK5C,EAAKqB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKoZ,KAAKhD,EAAK2B,GAAQ,EAElC1C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKhD,EAAK4B,GAAQ,GACvBhY,KAAKoZ,KAAK/C,EAAK0B,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKoZ,KAAK/C,EAAK2B,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKoZ,KAAKnD,EAAKiC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKnD,EAAKkC,IAAQ,GACvBnY,KAAKoZ,KAAKlD,EAAKgC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKoZ,KAAKlD,EAAKiC,IAAQ,EAClCtY,EAAMA,EAAKG,KAAKoZ,KAAKtD,EAAKuC,IAAQ,EAElChD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKtD,EAAKwC,IAAQ,GACvBtY,KAAKoZ,KAAKrD,EAAKsC,IAAQ,EACpCzY,EAAMA,EAAKI,KAAKoZ,KAAKrD,EAAKuC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKoZ,KAAKzD,EAAK6C,IAAQ,EAElCnD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKzD,EAAK8C,IAAQ,GACvBzY,KAAKoZ,KAAKxD,EAAK4C,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKoZ,KAAKxD,EAAK6C,IAAQ,EAKlC,IAAIkB,IAAQha,GAJZE,EAAMA,EAAKG,KAAKoZ,KAAK5D,EAAKmD,IAAQ,GAIZ,KAAa,MAFnCtD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK5D,EAAKoD,IAAQ,GACvB5Y,KAAKoZ,KAAK3D,EAAKkD,IAAQ,KAEU,IAAO,EACrDhZ,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAK3D,EAAKmD,IAAQ,IAErBvD,IAAQ,IAAO,IAAMsE,KAAO,IAAO,EAChDA,IAAM,SAEN9Z,EAAKG,KAAKoZ,KAAKpC,EAAKM,GAEpBjC,GADAA,EAAMrV,KAAKoZ,KAAKpC,EAAKO,IACRvX,KAAKoZ,KAAKnC,EAAKK,GAAQ,EACpC1X,EAAKI,KAAKoZ,KAAKnC,EAAKM,GACpB1X,EAAMA,EAAKG,KAAKoZ,KAAKvC,EAAKY,GAAQ,EAElCpC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKvC,EAAKa,GAAQ,GACvB1X,KAAKoZ,KAAKtC,EAAKW,GAAQ,EACpC7X,EAAMA,EAAKI,KAAKoZ,KAAKtC,EAAKY,GAAQ,EAClC7X,EAAMA,EAAKG,KAAKoZ,KAAK1C,EAAKkB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK1C,EAAKmB,GAAQ,GACvB7X,KAAKoZ,KAAKzC,EAAKiB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKoZ,KAAKzC,EAAKkB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKoZ,KAAK7C,EAAKwB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK7C,EAAKyB,GAAQ,GACvBhY,KAAKoZ,KAAK5C,EAAKuB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKoZ,KAAK5C,EAAKwB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKoZ,KAAKhD,EAAK8B,GAAQ,EAElC7C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKhD,EAAK+B,IAAQ,GACvBnY,KAAKoZ,KAAK/C,EAAK6B,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKoZ,KAAK/C,EAAK8B,IAAQ,EAClCtY,EAAMA,EAAKG,KAAKoZ,KAAKnD,EAAKoC,IAAQ,EAElChD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKnD,EAAKqC,IAAQ,GACvBtY,KAAKoZ,KAAKlD,EAAKmC,IAAQ,EACpCzY,EAAMA,EAAKI,KAAKoZ,KAAKlD,EAAKoC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKoZ,KAAKtD,EAAK0C,IAAQ,EAElCnD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKtD,EAAK2C,IAAQ,GACvBzY,KAAKoZ,KAAKrD,EAAKyC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKoZ,KAAKrD,EAAK0C,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKoZ,KAAKzD,EAAKgD,IAAQ,EAElCtD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKzD,EAAKiD,IAAQ,GACvB5Y,KAAKoZ,KAAKxD,EAAK+C,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKoZ,KAAKxD,EAAKgD,IAAQ,EAKlC,IAAIgB,IAAQja,GAJZE,EAAMA,EAAKG,KAAKoZ,KAAK5D,EAAKsD,IAAQ,GAIZ,KAAa,MAFnCzD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK5D,EAAKuD,IAAQ,GACvB/Y,KAAKoZ,KAAK3D,EAAKqD,IAAQ,KAEU,IAAO,EACrDnZ,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAK3D,EAAKsD,IAAQ,IAErB1D,IAAQ,IAAO,IAAMuE,KAAO,IAAO,EAChDA,IAAM,SAEN/Z,EAAKG,KAAKoZ,KAAKjC,EAAKG,GAEpBjC,GADAA,EAAMrV,KAAKoZ,KAAKjC,EAAKI,IACRvX,KAAKoZ,KAAKhC,EAAKE,GAAQ,EACpC1X,EAAKI,KAAKoZ,KAAKhC,EAAKG,GACpB1X,EAAMA,EAAKG,KAAKoZ,KAAKpC,EAAKS,GAAQ,EAElCpC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKpC,EAAKU,GAAQ,GACvB1X,KAAKoZ,KAAKnC,EAAKQ,GAAQ,EACpC7X,EAAMA,EAAKI,KAAKoZ,KAAKnC,EAAKS,GAAQ,EAClC7X,EAAMA,EAAKG,KAAKoZ,KAAKvC,EAAKe,GAAQ,EAElCvC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKvC,EAAKgB,GAAQ,GACvB7X,KAAKoZ,KAAKtC,EAAKc,GAAQ,EACpChY,EAAMA,EAAKI,KAAKoZ,KAAKtC,EAAKe,GAAQ,EAClChY,EAAMA,EAAKG,KAAKoZ,KAAK1C,EAAKqB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK1C,EAAKsB,GAAQ,GACvBhY,KAAKoZ,KAAKzC,EAAKoB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKoZ,KAAKzC,EAAKqB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKoZ,KAAK7C,EAAK2B,GAAQ,EAElC7C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK7C,EAAK4B,IAAQ,GACvBnY,KAAKoZ,KAAK5C,EAAK0B,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKoZ,KAAK5C,EAAK2B,IAAQ,EAClCtY,EAAMA,EAAKG,KAAKoZ,KAAKhD,EAAKiC,IAAQ,EAElChD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKhD,EAAKkC,IAAQ,GACvBtY,KAAKoZ,KAAK/C,EAAKgC,IAAQ,EACpCzY,EAAMA,EAAKI,KAAKoZ,KAAK/C,EAAKiC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKoZ,KAAKnD,EAAKuC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKnD,EAAKwC,IAAQ,GACvBzY,KAAKoZ,KAAKlD,EAAKsC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKoZ,KAAKlD,EAAKuC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKoZ,KAAKtD,EAAK6C,IAAQ,EAElCtD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKtD,EAAK8C,IAAQ,GACvB5Y,KAAKoZ,KAAKrD,EAAK4C,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKoZ,KAAKrD,EAAK6C,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKoZ,KAAKzD,EAAKmD,IAAQ,EAElCzD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKzD,EAAKoD,IAAQ,GACvB/Y,KAAKoZ,KAAKxD,EAAKkD,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKoZ,KAAKxD,EAAKmD,IAAQ,EAKlC,IAAIc,IAAQla,GAJZE,EAAMA,EAAKG,KAAKoZ,KAAK5D,EAAKyD,IAAQ,GAIZ,KAAa,MAFnC5D,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK5D,EAAK0D,IAAQ,GACvBlZ,KAAKoZ,KAAK3D,EAAKwD,IAAQ,KAEU,IAAO,EACrDtZ,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAK3D,EAAKyD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMwE,KAAO,IAAO,EAChDA,IAAM,SAENha,EAAKG,KAAKoZ,KAAKjC,EAAKM,GAEpBpC,GADAA,EAAMrV,KAAKoZ,KAAKjC,EAAKO,IACR1X,KAAKoZ,KAAKhC,EAAKK,GAAQ,EACpC7X,EAAKI,KAAKoZ,KAAKhC,EAAKM,GACpB7X,EAAMA,EAAKG,KAAKoZ,KAAKpC,EAAKY,GAAQ,EAElCvC,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKpC,EAAKa,GAAQ,GACvB7X,KAAKoZ,KAAKnC,EAAKW,GAAQ,EACpChY,EAAMA,EAAKI,KAAKoZ,KAAKnC,EAAKY,GAAQ,EAClChY,EAAMA,EAAKG,KAAKoZ,KAAKvC,EAAKkB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKvC,EAAKmB,GAAQ,GACvBhY,KAAKoZ,KAAKtC,EAAKiB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKoZ,KAAKtC,EAAKkB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKoZ,KAAK1C,EAAKwB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK1C,EAAKyB,IAAQ,GACvBnY,KAAKoZ,KAAKzC,EAAKuB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKoZ,KAAKzC,EAAKwB,IAAQ,EAClCtY,EAAMA,EAAKG,KAAKoZ,KAAK7C,EAAK8B,IAAQ,EAElChD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK7C,EAAK+B,IAAQ,GACvBtY,KAAKoZ,KAAK5C,EAAK6B,IAAQ,EACpCzY,EAAMA,EAAKI,KAAKoZ,KAAK5C,EAAK8B,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKoZ,KAAKhD,EAAKoC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKhD,EAAKqC,IAAQ,GACvBzY,KAAKoZ,KAAK/C,EAAKmC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKoZ,KAAK/C,EAAKoC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKoZ,KAAKnD,EAAK0C,IAAQ,EAElCtD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKnD,EAAK2C,IAAQ,GACvB5Y,KAAKoZ,KAAKlD,EAAKyC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKoZ,KAAKlD,EAAK0C,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKoZ,KAAKtD,EAAKgD,IAAQ,EAElCzD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKtD,EAAKiD,IAAQ,GACvB/Y,KAAKoZ,KAAKrD,EAAK+C,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKoZ,KAAKrD,EAAKgD,IAAQ,EAKlC,IAAIe,IAASna,GAJbE,EAAMA,EAAKG,KAAKoZ,KAAKzD,EAAKsD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKzD,EAAKuD,IAAQ,GACvBlZ,KAAKoZ,KAAKxD,EAAKqD,IAAQ,KAEW,IAAO,EACtDtZ,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAKxD,EAAKsD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMyE,KAAQ,IAAO,EACjDA,IAAO,SAEPja,EAAKG,KAAKoZ,KAAKjC,EAAKS,GAEpBvC,GADAA,EAAMrV,KAAKoZ,KAAKjC,EAAKU,IACR7X,KAAKoZ,KAAKhC,EAAKQ,GAAQ,EACpChY,EAAKI,KAAKoZ,KAAKhC,EAAKS,GACpBhY,EAAMA,EAAKG,KAAKoZ,KAAKpC,EAAKe,GAAQ,EAElC1C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKpC,EAAKgB,GAAQ,GACvBhY,KAAKoZ,KAAKnC,EAAKc,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKoZ,KAAKnC,EAAKe,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKoZ,KAAKvC,EAAKqB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKvC,EAAKsB,IAAQ,GACvBnY,KAAKoZ,KAAKtC,EAAKoB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKoZ,KAAKtC,EAAKqB,IAAQ,EAClCtY,EAAMA,EAAKG,KAAKoZ,KAAK1C,EAAK2B,IAAQ,EAElChD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK1C,EAAK4B,IAAQ,GACvBtY,KAAKoZ,KAAKzC,EAAK0B,IAAQ,EACpCzY,EAAMA,EAAKI,KAAKoZ,KAAKzC,EAAK2B,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKoZ,KAAK7C,EAAKiC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK7C,EAAKkC,IAAQ,GACvBzY,KAAKoZ,KAAK5C,EAAKgC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKoZ,KAAK5C,EAAKiC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKoZ,KAAKhD,EAAKuC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKhD,EAAKwC,IAAQ,GACvB5Y,KAAKoZ,KAAK/C,EAAKsC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKoZ,KAAK/C,EAAKuC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKoZ,KAAKnD,EAAK6C,IAAQ,EAElCzD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKnD,EAAK8C,IAAQ,GACvB/Y,KAAKoZ,KAAKlD,EAAK4C,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKoZ,KAAKlD,EAAK6C,IAAQ,EAKlC,IAAIgB,IAASpa,GAJbE,EAAMA,EAAKG,KAAKoZ,KAAKtD,EAAKmD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKtD,EAAKoD,IAAQ,GACvBlZ,KAAKoZ,KAAKrD,EAAKkD,IAAQ,KAEW,IAAO,EACtDtZ,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAKrD,EAAKmD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM0E,KAAQ,IAAO,EACjDA,IAAO,SAEPla,EAAKG,KAAKoZ,KAAKjC,EAAKY,GAEpB1C,GADAA,EAAMrV,KAAKoZ,KAAKjC,EAAKa,IACRhY,KAAKoZ,KAAKhC,EAAKW,GAAQ,EACpCnY,EAAKI,KAAKoZ,KAAKhC,EAAKY,GACpBnY,EAAMA,EAAKG,KAAKoZ,KAAKpC,EAAKkB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKpC,EAAKmB,IAAQ,GACvBnY,KAAKoZ,KAAKnC,EAAKiB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKoZ,KAAKnC,EAAKkB,IAAQ,EAClCtY,EAAMA,EAAKG,KAAKoZ,KAAKvC,EAAKwB,IAAQ,EAElChD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKvC,EAAKyB,IAAQ,GACvBtY,KAAKoZ,KAAKtC,EAAKuB,IAAQ,EACpCzY,EAAMA,EAAKI,KAAKoZ,KAAKtC,EAAKwB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKoZ,KAAK1C,EAAK8B,IAAQ,EAElCnD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK1C,EAAK+B,IAAQ,GACvBzY,KAAKoZ,KAAKzC,EAAK6B,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKoZ,KAAKzC,EAAK8B,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKoZ,KAAK7C,EAAKoC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK7C,EAAKqC,IAAQ,GACvB5Y,KAAKoZ,KAAK5C,EAAKmC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKoZ,KAAK5C,EAAKoC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKoZ,KAAKhD,EAAK0C,IAAQ,EAElCzD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKhD,EAAK2C,IAAQ,GACvB/Y,KAAKoZ,KAAK/C,EAAKyC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKoZ,KAAK/C,EAAK0C,IAAQ,EAKlC,IAAIiB,IAASra,GAJbE,EAAMA,EAAKG,KAAKoZ,KAAKnD,EAAKgD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKnD,EAAKiD,IAAQ,GACvBlZ,KAAKoZ,KAAKlD,EAAK+C,IAAQ,KAEW,IAAO,EACtDtZ,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAKlD,EAAKgD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM2E,KAAQ,IAAO,EACjDA,IAAO,SAEPna,EAAKG,KAAKoZ,KAAKjC,EAAKe,GAEpB7C,GADAA,EAAMrV,KAAKoZ,KAAKjC,EAAKgB,KACRnY,KAAKoZ,KAAKhC,EAAKc,GAAQ,EACpCtY,EAAKI,KAAKoZ,KAAKhC,EAAKe,IACpBtY,EAAMA,EAAKG,KAAKoZ,KAAKpC,EAAKqB,IAAQ,EAElChD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKpC,EAAKsB,IAAQ,GACvBtY,KAAKoZ,KAAKnC,EAAKoB,IAAQ,EACpCzY,EAAMA,EAAKI,KAAKoZ,KAAKnC,EAAKqB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKoZ,KAAKvC,EAAK2B,IAAQ,EAElCnD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKvC,EAAK4B,IAAQ,GACvBzY,KAAKoZ,KAAKtC,EAAK0B,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKoZ,KAAKtC,EAAK2B,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKoZ,KAAK1C,EAAKiC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK1C,EAAKkC,IAAQ,GACvB5Y,KAAKoZ,KAAKzC,EAAKgC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKoZ,KAAKzC,EAAKiC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKoZ,KAAK7C,EAAKuC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK7C,EAAKwC,IAAQ,GACvB/Y,KAAKoZ,KAAK5C,EAAKsC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKoZ,KAAK5C,EAAKuC,IAAQ,EAKlC,IAAIkB,IAASta,GAJbE,EAAMA,EAAKG,KAAKoZ,KAAKhD,EAAK6C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKhD,EAAK8C,IAAQ,GACvBlZ,KAAKoZ,KAAK/C,EAAK4C,IAAQ,KAEW,IAAO,EACtDtZ,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAK/C,EAAK6C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM4E,KAAQ,IAAO,EACjDA,IAAO,SAEPpa,EAAKG,KAAKoZ,KAAKjC,EAAKkB,IAEpBhD,GADAA,EAAMrV,KAAKoZ,KAAKjC,EAAKmB,KACRtY,KAAKoZ,KAAKhC,EAAKiB,IAAQ,EACpCzY,EAAKI,KAAKoZ,KAAKhC,EAAKkB,IACpBzY,EAAMA,EAAKG,KAAKoZ,KAAKpC,EAAKwB,IAAQ,EAElCnD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKpC,EAAKyB,IAAQ,GACvBzY,KAAKoZ,KAAKnC,EAAKuB,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKoZ,KAAKnC,EAAKwB,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKoZ,KAAKvC,EAAK8B,IAAQ,EAElCtD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKvC,EAAK+B,IAAQ,GACvB5Y,KAAKoZ,KAAKtC,EAAK6B,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKoZ,KAAKtC,EAAK8B,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKoZ,KAAK1C,EAAKoC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK1C,EAAKqC,IAAQ,GACvB/Y,KAAKoZ,KAAKzC,EAAKmC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKoZ,KAAKzC,EAAKoC,IAAQ,EAKlC,IAAImB,IAASva,GAJbE,EAAMA,EAAKG,KAAKoZ,KAAK7C,EAAK0C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK7C,EAAK2C,IAAQ,GACvBlZ,KAAKoZ,KAAK5C,EAAKyC,IAAQ,KAEW,IAAO,EACtDtZ,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAK5C,EAAK0C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM6E,KAAQ,IAAO,EACjDA,IAAO,SAEPra,EAAKG,KAAKoZ,KAAKjC,EAAKqB,IAEpBnD,GADAA,EAAMrV,KAAKoZ,KAAKjC,EAAKsB,KACRzY,KAAKoZ,KAAKhC,EAAKoB,IAAQ,EACpC5Y,EAAKI,KAAKoZ,KAAKhC,EAAKqB,IACpB5Y,EAAMA,EAAKG,KAAKoZ,KAAKpC,EAAK2B,IAAQ,EAElCtD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKpC,EAAK4B,IAAQ,GACvB5Y,KAAKoZ,KAAKnC,EAAK0B,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKoZ,KAAKnC,EAAK2B,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKoZ,KAAKvC,EAAKiC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKvC,EAAKkC,IAAQ,GACvB/Y,KAAKoZ,KAAKtC,EAAKgC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKoZ,KAAKtC,EAAKiC,IAAQ,EAKlC,IAAIoB,IAASxa,GAJbE,EAAMA,EAAKG,KAAKoZ,KAAK1C,EAAKuC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAK1C,EAAKwC,IAAQ,GACvBlZ,KAAKoZ,KAAKzC,EAAKsC,IAAQ,KAEW,IAAO,EACtDtZ,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAKzC,EAAKuC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM8E,KAAQ,IAAO,EACjDA,IAAO,SAEPta,EAAKG,KAAKoZ,KAAKjC,EAAKwB,IAEpBtD,GADAA,EAAMrV,KAAKoZ,KAAKjC,EAAKyB,KACR5Y,KAAKoZ,KAAKhC,EAAKuB,IAAQ,EACpC/Y,EAAKI,KAAKoZ,KAAKhC,EAAKwB,IACpB/Y,EAAMA,EAAKG,KAAKoZ,KAAKpC,EAAK8B,IAAQ,EAElCzD,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKpC,EAAK+B,IAAQ,GACvB/Y,KAAKoZ,KAAKnC,EAAK6B,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKoZ,KAAKnC,EAAK8B,IAAQ,EAKlC,IAAIqB,IAASza,GAJbE,EAAMA,EAAKG,KAAKoZ,KAAKvC,EAAKoC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKvC,EAAKqC,IAAQ,GACvBlZ,KAAKoZ,KAAKtC,EAAKmC,IAAQ,KAEW,IAAO,EACtDtZ,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAKtC,EAAKoC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM+E,KAAQ,IAAO,EACjDA,IAAO,SAEPva,EAAKG,KAAKoZ,KAAKjC,EAAK2B,IAEpBzD,GADAA,EAAMrV,KAAKoZ,KAAKjC,EAAK4B,KACR/Y,KAAKoZ,KAAKhC,EAAK0B,IAAQ,EACpClZ,EAAKI,KAAKoZ,KAAKhC,EAAK2B,IAKpB,IAAIsB,IAAS1a,GAJbE,EAAMA,EAAKG,KAAKoZ,KAAKpC,EAAKiC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMrV,KAAKoZ,KAAKpC,EAAKkC,IAAQ,GACvBlZ,KAAKoZ,KAAKnC,EAAKgC,IAAQ,KAEW,IAAO,EACtDtZ,IAFAC,EAAMA,EAAKI,KAAKoZ,KAAKnC,EAAKiC,IAAQ,IAErB7D,IAAQ,IAAO,IAAMgF,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAAS3a,GAJbE,EAAKG,KAAKoZ,KAAKjC,EAAK8B,KAIG,KAAa,MAFpC5D,GADAA,EAAMrV,KAAKoZ,KAAKjC,EAAK+B,KACRlZ,KAAKoZ,KAAKhC,EAAK6B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAtZ,IAFAC,EAAKI,KAAKoZ,KAAKhC,EAAK8B,MAEP7D,IAAQ,IAAO,IAAMiF,KAAQ,IAAO,EACjDA,IAAO,SACPhF,EAAE,GAAK6D,GACP7D,EAAE,GAAK+D,GACP/D,EAAE,GAAKgE,GACPhE,EAAE,GAAKiE,GACPjE,EAAE,GAAKkE,GACPlE,EAAE,GAAKmE,GACPnE,EAAE,GAAKoE,GACPpE,EAAE,GAAKqE,GACPrE,EAAE,GAAKsE,GACPtE,EAAE,GAAKuE,GACPvE,EAAE,IAAMwE,GACRxE,EAAE,IAAMyE,GACRzE,EAAE,IAAM0E,GACR1E,EAAE,IAAM2E,GACR3E,EAAE,IAAM4E,GACR5E,EAAE,IAAM6E,GACR7E,EAAE,IAAM8E,GACR9E,EAAE,IAAM+E,GACR/E,EAAE,IAAMgF,GACE,IAAN3a,IACF2V,EAAE,IAAM3V,EACR0D,EAAIjK,UAECiK,GAiDT,SAASkX,EAAYvI,EAAM7H,EAAK9G,GAE9B,OADW,IAAImX,GACHC,KAAKzI,EAAM7H,EAAK9G,GAsB9B,SAASmX,EAAM5Y,EAAGC,GAChBnH,KAAKkH,EAAIA,EACTlH,KAAKmH,EAAIA,EAvEN7B,KAAKoZ,OACRhE,EAAcrD,GAiDhBnI,EAAGxR,UAAUsiB,MAAQ,SAAgBvQ,EAAK9G,GACxC,IACI3H,EAAMhB,KAAKtB,OAAS+Q,EAAI/Q,OAW5B,OAVoB,KAAhBsB,KAAKtB,QAAgC,KAAf+Q,EAAI/Q,OACtBgc,EAAY1a,KAAMyP,EAAK9G,GACpB3H,EAAM,GACTqW,EAAWrX,KAAMyP,EAAK9G,GACnB3H,EAAM,KArDnB,SAAmBsW,EAAM7H,EAAK9G,GAC5BA,EAAI8M,SAAWhG,EAAIgG,SAAW6B,EAAK7B,SACnC9M,EAAIjK,OAAS4Y,EAAK5Y,OAAS+Q,EAAI/Q,OAI/B,IAFA,IAAIkW,EAAQ,EACRqL,EAAU,EACLlQ,EAAI,EAAGA,EAAIpH,EAAIjK,OAAS,EAAGqR,IAAK,CAGvC,IAAIwH,EAAS0I,EACbA,EAAU,EAGV,IAFA,IAAIzI,EAAgB,SAAR5C,EACR6C,EAAOnS,KAAKC,IAAIwK,EAAGN,EAAI/Q,OAAS,GAC3BkF,EAAI0B,KAAKuC,IAAI,EAAGkI,EAAIuH,EAAK5Y,OAAS,GAAIkF,GAAK6T,EAAM7T,IAAK,CAC7D,IAAIpC,EAAIuO,EAAInM,EAGRoL,GAFoB,EAAhBsI,EAAK5B,MAAMlU,KACI,EAAfiO,EAAIiG,MAAM9R,IAGduB,EAAS,SAAJ6J,EAGTwI,EAAa,UADbrS,EAAMA,EAAKqS,EAAS,GAIpByI,IAFA1I,GAHAA,EAAUA,GAAWvI,EAAI,SAAa,GAAM,IAGxB7J,IAAO,IAAO,KAEZ,GACtBoS,GAAU,SAEZ5O,EAAI+M,MAAM3F,GAAKyH,EACf5C,EAAQ2C,EACRA,EAAS0I,EAQX,OANc,IAAVrL,EACFjM,EAAI+M,MAAM3F,GAAK6E,EAEfjM,EAAIjK,SAGCiK,EAAI4N,QAgBH2J,CAASlgB,KAAMyP,EAAK9G,GAEpBkX,EAAW7f,KAAMyP,EAAK9G,IAchCmX,EAAKpiB,UAAUyiB,QAAU,SAAkBC,GAGzC,IAFA,IAAI5H,EAAI,IAAIhQ,MAAM4X,GACdjT,EAAI+B,EAAGxR,UAAU6a,WAAW6H,GAAK,EAC5B5e,EAAI,EAAGA,EAAI4e,EAAG5e,IACrBgX,EAAEhX,GAAKxB,KAAKqgB,OAAO7e,EAAG2L,EAAGiT,GAG3B,OAAO5H,GAITsH,EAAKpiB,UAAU2iB,OAAS,SAAiBnZ,EAAGiG,EAAGiT,GAC7C,GAAU,IAANlZ,GAAWA,IAAMkZ,EAAI,EAAG,OAAOlZ,EAGnC,IADA,IAAIoZ,EAAK,EACA9e,EAAI,EAAGA,EAAI2L,EAAG3L,IACrB8e,IAAW,EAAJpZ,IAAWiG,EAAI3L,EAAI,EAC1B0F,IAAM,EAGR,OAAOoZ,GAKTR,EAAKpiB,UAAU6iB,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GACpE,IAAK,IAAI5e,EAAI,EAAGA,EAAI4e,EAAG5e,IACrBmf,EAAKnf,GAAKif,EAAID,EAAIhf,IAClBof,EAAKpf,GAAKkf,EAAIF,EAAIhf,KAItBse,EAAKpiB,UAAUmjB,UAAY,SAAoBJ,EAAKC,EAAKC,EAAMC,EAAMR,EAAGI,GACtExgB,KAAKugB,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GAExC,IAAK,IAAIU,EAAI,EAAGA,EAAIV,EAAGU,IAAM,EAM3B,IALA,IAAI3T,EAAI2T,GAAK,EAETC,EAAQzb,KAAK0b,IAAI,EAAI1b,KAAK2b,GAAK9T,GAC/B+T,EAAQ5b,KAAK6b,IAAI,EAAI7b,KAAK2b,GAAK9T,GAE1BiG,EAAI,EAAGA,EAAIgN,EAAGhN,GAAKjG,EAI1B,IAHA,IAAIiU,EAASL,EACTM,EAASH,EAEJtd,EAAI,EAAGA,EAAIkd,EAAGld,IAAK,CAC1B,IAAI0d,EAAKX,EAAKvN,EAAIxP,GACd2d,EAAKX,EAAKxN,EAAIxP,GAEd4d,EAAKb,EAAKvN,EAAIxP,EAAIkd,GAClBW,EAAKb,EAAKxN,EAAIxP,EAAIkd,GAElBY,EAAKN,EAASI,EAAKH,EAASI,EAEhCA,EAAKL,EAASK,EAAKJ,EAASG,EAC5BA,EAAKE,EAELf,EAAKvN,EAAIxP,GAAK0d,EAAKE,EACnBZ,EAAKxN,EAAIxP,GAAK2d,EAAKE,EAEnBd,EAAKvN,EAAIxP,EAAIkd,GAAKQ,EAAKE,EACvBZ,EAAKxN,EAAIxP,EAAIkd,GAAKS,EAAKE,EAGnB7d,IAAMuJ,IACRuU,EAAKX,EAAQK,EAASF,EAAQG,EAE9BA,EAASN,EAAQM,EAASH,EAAQE,EAClCA,EAASM,KAOnB5B,EAAKpiB,UAAUikB,YAAc,SAAsBjf,EAAGC,GACpD,IAAIyd,EAAqB,EAAjB9a,KAAKuC,IAAIlF,EAAGD,GAChBkf,EAAU,EAAJxB,EACN5e,EAAI,EACR,IAAK4e,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/B5e,IAGF,OAAO,GAAKA,EAAI,EAAIogB,GAGtB9B,EAAKpiB,UAAUmkB,UAAY,SAAoBpB,EAAKC,EAAKN,GACvD,KAAIA,GAAK,GAET,IAAK,IAAI5e,EAAI,EAAGA,EAAI4e,EAAI,EAAG5e,IAAK,CAC9B,IAAIgX,EAAIiI,EAAIjf,GAEZif,EAAIjf,GAAKif,EAAIL,EAAI5e,EAAI,GACrBif,EAAIL,EAAI5e,EAAI,GAAKgX,EAEjBA,EAAIkI,EAAIlf,GAERkf,EAAIlf,IAAMkf,EAAIN,EAAI5e,EAAI,GACtBkf,EAAIN,EAAI5e,EAAI,IAAMgX,IAItBsH,EAAKpiB,UAAUokB,aAAe,SAAuBhS,EAAIsQ,GAEvD,IADA,IAAIxL,EAAQ,EACHpT,EAAI,EAAGA,EAAI4e,EAAI,EAAG5e,IAAK,CAC9B,IAAIkO,EAAoC,KAAhCpK,KAAKyc,MAAMjS,EAAG,EAAItO,EAAI,GAAK4e,GACjC9a,KAAKyc,MAAMjS,EAAG,EAAItO,GAAK4e,GACvBxL,EAEF9E,EAAGtO,GAAS,SAAJkO,EAGNkF,EADElF,EAAI,SACE,EAEAA,EAAI,SAAY,EAI5B,OAAOI,GAGTgQ,EAAKpiB,UAAUskB,WAAa,SAAqBlS,EAAI9O,EAAKyf,EAAKL,GAE7D,IADA,IAAIxL,EAAQ,EACHpT,EAAI,EAAGA,EAAIR,EAAKQ,IACvBoT,GAAyB,EAAR9E,EAAGtO,GAEpBif,EAAI,EAAIjf,GAAa,KAARoT,EAAgBA,KAAkB,GAC/C6L,EAAI,EAAIjf,EAAI,GAAa,KAARoT,EAAgBA,KAAkB,GAIrD,IAAKpT,EAAI,EAAIR,EAAKQ,EAAI4e,IAAK5e,EACzBif,EAAIjf,GAAK,EAGXqN,EAAiB,IAAV+F,GACP/F,EAA6B,KAAb,KAAR+F,KAGVkL,EAAKpiB,UAAUukB,KAAO,SAAe7B,GAEnC,IADA,IAAI8B,EAAK,IAAI1Z,MAAM4X,GACV5e,EAAI,EAAGA,EAAI4e,EAAG5e,IACrB0gB,EAAG1gB,GAAK,EAGV,OAAO0gB,GAGTpC,EAAKpiB,UAAUqiB,KAAO,SAAe7Y,EAAGC,EAAGwB,GACzC,IAAIyX,EAAI,EAAIpgB,KAAK2hB,YAAYza,EAAExI,OAAQyI,EAAEzI,QAErC8hB,EAAMxgB,KAAKmgB,QAAQC,GAEnB+B,EAAIniB,KAAKiiB,KAAK7B,GAEdK,EAAM,IAAIjY,MAAM4X,GAChBgC,EAAO,IAAI5Z,MAAM4X,GACjBiC,EAAO,IAAI7Z,MAAM4X,GAEjBkC,EAAO,IAAI9Z,MAAM4X,GACjBmC,EAAQ,IAAI/Z,MAAM4X,GAClBoC,EAAQ,IAAIha,MAAM4X,GAElBqC,EAAO9Z,EAAI+M,MACf+M,EAAK/jB,OAAS0hB,EAEdpgB,KAAKgiB,WAAW9a,EAAEwO,MAAOxO,EAAExI,OAAQ+hB,EAAKL,GACxCpgB,KAAKgiB,WAAW7a,EAAEuO,MAAOvO,EAAEzI,OAAQ4jB,EAAMlC,GAEzCpgB,KAAK6gB,UAAUJ,EAAK0B,EAAGC,EAAMC,EAAMjC,EAAGI,GACtCxgB,KAAK6gB,UAAUyB,EAAMH,EAAGI,EAAOC,EAAOpC,EAAGI,GAEzC,IAAK,IAAIhf,EAAI,EAAGA,EAAI4e,EAAG5e,IAAK,CAC1B,IAAIkgB,EAAKU,EAAK5gB,GAAK+gB,EAAM/gB,GAAK6gB,EAAK7gB,GAAKghB,EAAMhhB,GAC9C6gB,EAAK7gB,GAAK4gB,EAAK5gB,GAAKghB,EAAMhhB,GAAK6gB,EAAK7gB,GAAK+gB,EAAM/gB,GAC/C4gB,EAAK5gB,GAAKkgB,EAUZ,OAPA1hB,KAAK6hB,UAAUO,EAAMC,EAAMjC,GAC3BpgB,KAAK6gB,UAAUuB,EAAMC,EAAMI,EAAMN,EAAG/B,EAAGI,GACvCxgB,KAAK6hB,UAAUY,EAAMN,EAAG/B,GACxBpgB,KAAK8hB,aAAaW,EAAMrC,GAExBzX,EAAI8M,SAAWvO,EAAEuO,SAAWtO,EAAEsO,SAC9B9M,EAAIjK,OAASwI,EAAExI,OAASyI,EAAEzI,OACnBiK,EAAI4N,SAIbrH,EAAGxR,UAAUiM,IAAM,SAAc8F,GAC/B,IAAI9G,EAAM,IAAIuG,EAAG,MAEjB,OADAvG,EAAI+M,MAAQ,IAAIlN,MAAMxI,KAAKtB,OAAS+Q,EAAI/Q,QACjCsB,KAAKggB,MAAMvQ,EAAK9G,IAIzBuG,EAAGxR,UAAUglB,KAAO,SAAejT,GACjC,IAAI9G,EAAM,IAAIuG,EAAG,MAEjB,OADAvG,EAAI+M,MAAQ,IAAIlN,MAAMxI,KAAKtB,OAAS+Q,EAAI/Q,QACjCmhB,EAAW7f,KAAMyP,EAAK9G,IAI/BuG,EAAGxR,UAAUghB,KAAO,SAAejP,GACjC,OAAOzP,KAAKgQ,QAAQgQ,MAAMvQ,EAAKzP,OAGjCkP,EAAGxR,UAAUmZ,MAAQ,SAAgBpH,GACnCZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UAIb,IADA,IAAImF,EAAQ,EACHpT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIkO,GAAqB,EAAhB1P,KAAK0V,MAAMlU,IAAUiO,EAC1BtK,GAAU,SAAJuK,IAA0B,SAARkF,GAC5BA,IAAU,GACVA,GAAUlF,EAAI,SAAa,EAE3BkF,GAASzP,IAAO,GAChBnF,KAAK0V,MAAMlU,GAAU,SAAL2D,EAQlB,OALc,IAAVyP,IACF5U,KAAK0V,MAAMlU,GAAKoT,EAChB5U,KAAKtB,UAGAsB,MAGTkP,EAAGxR,UAAUilB,KAAO,SAAelT,GACjC,OAAOzP,KAAKgQ,QAAQ6G,MAAMpH,IAI5BP,EAAGxR,UAAUklB,IAAM,WACjB,OAAO5iB,KAAK2J,IAAI3J,OAIlBkP,EAAGxR,UAAUmlB,KAAO,WAClB,OAAO7iB,KAAK0e,KAAK1e,KAAKgQ,UAIxBd,EAAGxR,UAAUwM,IAAM,SAAcuF,GAC/B,IAAIC,EAxxCN,SAAqBD,GAGnB,IAFA,IAAIC,EAAI,IAAIlH,MAAMiH,EAAII,aAEbwK,EAAM,EAAGA,EAAM3K,EAAEhR,OAAQ2b,IAAO,CACvC,IAAI5D,EAAO4D,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAEjB3K,EAAE2K,IAAQ5K,EAAIiG,MAAMe,GAAQ,GAAK6D,KAAWA,EAG9C,OAAO5K,EA8wCCoT,CAAWrT,GACnB,GAAiB,IAAbC,EAAEhR,OAAc,OAAO,IAAIwQ,EAAG,GAIlC,IADA,IAAI1J,EAAMxF,KACDwB,EAAI,EAAGA,EAAIkO,EAAEhR,QACP,IAATgR,EAAElO,GADsBA,IAAKgE,EAAMA,EAAIod,OAI7C,KAAMphB,EAAIkO,EAAEhR,OACV,IAAK,IAAI2Z,EAAI7S,EAAIod,MAAOphB,EAAIkO,EAAEhR,OAAQ8C,IAAK6W,EAAIA,EAAEuK,MAClC,IAATlT,EAAElO,KAENgE,EAAMA,EAAImE,IAAI0O,IAIlB,OAAO7S,GAIT0J,EAAGxR,UAAUqlB,OAAS,SAAiBpT,GACrCd,EAAuB,iBAATc,GAAqBA,GAAQ,GAC3C,IAGInO,EAHAwN,EAAIW,EAAO,GACXmR,GAAKnR,EAAOX,GAAK,GACjBgU,EAAa,WAAe,GAAKhU,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAI4F,EAAQ,EAEZ,IAAKpT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CAChC,IAAIyhB,EAAWjjB,KAAK0V,MAAMlU,GAAKwhB,EAC3B/d,GAAsB,EAAhBjF,KAAK0V,MAAMlU,IAAUyhB,GAAajU,EAC5ChP,KAAK0V,MAAMlU,GAAKyD,EAAI2P,EACpBA,EAAQqO,IAAc,GAAKjU,EAGzB4F,IACF5U,KAAK0V,MAAMlU,GAAKoT,EAChB5U,KAAKtB,UAIT,GAAU,IAANoiB,EAAS,CACX,IAAKtf,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAChCxB,KAAK0V,MAAMlU,EAAIsf,GAAK9gB,KAAK0V,MAAMlU,GAGjC,IAAKA,EAAI,EAAGA,EAAIsf,EAAGtf,IACjBxB,KAAK0V,MAAMlU,GAAK,EAGlBxB,KAAKtB,QAAUoiB,EAGjB,OAAO9gB,KAAKuW,SAGdrH,EAAGxR,UAAUwlB,MAAQ,SAAgBvT,GAGnC,OADAd,EAAyB,IAAlB7O,KAAKyV,UACLzV,KAAK+iB,OAAOpT,IAMrBT,EAAGxR,UAAU4S,OAAS,SAAiBX,EAAMwT,EAAMC,GAEjD,IAAIC,EADJxU,EAAuB,iBAATc,GAAqBA,GAAQ,GAGzC0T,EADEF,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAInU,EAAIW,EAAO,GACXmR,EAAIxb,KAAKC,KAAKoK,EAAOX,GAAK,GAAIhP,KAAKtB,QACnC4kB,EAAO,SAAc,WAActU,GAAMA,EACzCuU,EAAcH,EAMlB,GAJAC,GAAKvC,EACLuC,EAAI/d,KAAKuC,IAAI,EAAGwb,GAGZE,EAAa,CACf,IAAK,IAAI/hB,EAAI,EAAGA,EAAIsf,EAAGtf,IACrB+hB,EAAY7N,MAAMlU,GAAKxB,KAAK0V,MAAMlU,GAEpC+hB,EAAY7kB,OAASoiB,EAGvB,GAAU,IAANA,QAEG,GAAI9gB,KAAKtB,OAASoiB,EAEvB,IADA9gB,KAAKtB,QAAUoiB,EACVtf,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC3BxB,KAAK0V,MAAMlU,GAAKxB,KAAK0V,MAAMlU,EAAIsf,QAGjC9gB,KAAK0V,MAAM,GAAK,EAChB1V,KAAKtB,OAAS,EAGhB,IAAIkW,EAAQ,EACZ,IAAKpT,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,IAAgB,IAAVoT,GAAepT,GAAK6hB,GAAI7hB,IAAK,CAChE,IAAIyR,EAAuB,EAAhBjT,KAAK0V,MAAMlU,GACtBxB,KAAK0V,MAAMlU,GAAMoT,GAAU,GAAK5F,EAAOiE,IAASjE,EAChD4F,EAAQ3B,EAAOqQ,EAajB,OATIC,GAAyB,IAAV3O,IACjB2O,EAAY7N,MAAM6N,EAAY7kB,UAAYkW,GAGxB,IAAhB5U,KAAKtB,SACPsB,KAAK0V,MAAM,GAAK,EAChB1V,KAAKtB,OAAS,GAGTsB,KAAKuW,SAGdrH,EAAGxR,UAAU8lB,MAAQ,SAAgB7T,EAAMwT,EAAMC,GAG/C,OADAvU,EAAyB,IAAlB7O,KAAKyV,UACLzV,KAAKsQ,OAAOX,EAAMwT,EAAMC,IAIjClU,EAAGxR,UAAU+lB,KAAO,SAAe9T,GACjC,OAAO3P,KAAKgQ,QAAQkT,MAAMvT,IAG5BT,EAAGxR,UAAUgmB,MAAQ,SAAgB/T,GACnC,OAAO3P,KAAKgQ,QAAQ+S,OAAOpT,IAI7BT,EAAGxR,UAAUimB,KAAO,SAAehU,GACjC,OAAO3P,KAAKgQ,QAAQwT,MAAM7T,IAG5BT,EAAGxR,UAAUkmB,MAAQ,SAAgBjU,GACnC,OAAO3P,KAAKgQ,QAAQM,OAAOX,IAI7BT,EAAGxR,UAAUub,MAAQ,SAAgBoB,GACnCxL,EAAsB,iBAARwL,GAAoBA,GAAO,GACzC,IAAIrL,EAAIqL,EAAM,GACVyG,GAAKzG,EAAMrL,GAAK,GAChBqJ,EAAI,GAAKrJ,EAGb,QAAIhP,KAAKtB,QAAUoiB,OAGX9gB,KAAK0V,MAAMoL,GAELzI,IAIhBnJ,EAAGxR,UAAUmmB,OAAS,SAAiBlU,GACrCd,EAAuB,iBAATc,GAAqBA,GAAQ,GAC3C,IAAIX,EAAIW,EAAO,GACXmR,GAAKnR,EAAOX,GAAK,GAIrB,GAFAH,EAAyB,IAAlB7O,KAAKyV,SAAgB,2CAExBzV,KAAKtB,QAAUoiB,EACjB,OAAO9gB,KAQT,GALU,IAANgP,GACF8R,IAEF9gB,KAAKtB,OAAS4G,KAAKC,IAAIub,EAAG9gB,KAAKtB,QAErB,IAANsQ,EAAS,CACX,IAAIsU,EAAO,SAAc,WAActU,GAAMA,EAC7ChP,KAAK0V,MAAM1V,KAAKtB,OAAS,IAAM4kB,EAGjC,OAAOtjB,KAAKuW,SAIdrH,EAAGxR,UAAUomB,MAAQ,SAAgBnU,GACnC,OAAO3P,KAAKgQ,QAAQ6T,OAAOlU,IAI7BT,EAAGxR,UAAUqb,MAAQ,SAAgBtJ,GAGnC,OAFAZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UACTA,EAAM,EAAUzP,KAAKqQ,OAAOZ,GAGV,IAAlBzP,KAAKyV,SACa,IAAhBzV,KAAKtB,SAAiC,EAAhBsB,KAAK0V,MAAM,IAAUjG,GAC7CzP,KAAK0V,MAAM,GAAKjG,GAAuB,EAAhBzP,KAAK0V,MAAM,IAClC1V,KAAKyV,SAAW,EACTzV,OAGTA,KAAKyV,SAAW,EAChBzV,KAAKqQ,MAAMZ,GACXzP,KAAKyV,SAAW,EACTzV,MAIFA,KAAK8W,OAAOrH,IAGrBP,EAAGxR,UAAUoZ,OAAS,SAAiBrH,GACrCzP,KAAK0V,MAAM,IAAMjG,EAGjB,IAAK,IAAIjO,EAAI,EAAGA,EAAIxB,KAAKtB,QAAUsB,KAAK0V,MAAMlU,IAAM,SAAWA,IAC7DxB,KAAK0V,MAAMlU,IAAM,SACbA,IAAMxB,KAAKtB,OAAS,EACtBsB,KAAK0V,MAAMlU,EAAI,GAAK,EAEpBxB,KAAK0V,MAAMlU,EAAI,KAKnB,OAFAxB,KAAKtB,OAAS4G,KAAKuC,IAAI7H,KAAKtB,OAAQ8C,EAAI,GAEjCxB,MAITkP,EAAGxR,UAAU2S,MAAQ,SAAgBZ,GAGnC,GAFAZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UACTA,EAAM,EAAG,OAAOzP,KAAK+Y,OAAOtJ,GAEhC,GAAsB,IAAlBzP,KAAKyV,SAIP,OAHAzV,KAAKyV,SAAW,EAChBzV,KAAK+Y,MAAMtJ,GACXzP,KAAKyV,SAAW,EACTzV,KAKT,GAFAA,KAAK0V,MAAM,IAAMjG,EAEG,IAAhBzP,KAAKtB,QAAgBsB,KAAK0V,MAAM,GAAK,EACvC1V,KAAK0V,MAAM,IAAM1V,KAAK0V,MAAM,GAC5B1V,KAAKyV,SAAW,OAGhB,IAAK,IAAIjU,EAAI,EAAGA,EAAIxB,KAAKtB,QAAUsB,KAAK0V,MAAMlU,GAAK,EAAGA,IACpDxB,KAAK0V,MAAMlU,IAAM,SACjBxB,KAAK0V,MAAMlU,EAAI,IAAM,EAIzB,OAAOxB,KAAKuW,SAGdrH,EAAGxR,UAAUqmB,KAAO,SAAetU,GACjC,OAAOzP,KAAKgQ,QAAQ+I,MAAMtJ,IAG5BP,EAAGxR,UAAUsmB,KAAO,SAAevU,GACjC,OAAOzP,KAAKgQ,QAAQK,MAAMZ,IAG5BP,EAAGxR,UAAUumB,KAAO,WAGlB,OAFAjkB,KAAKyV,SAAW,EAETzV,MAGTkP,EAAGxR,UAAUmb,IAAM,WACjB,OAAO7Y,KAAKgQ,QAAQiU,QAGtB/U,EAAGxR,UAAUwmB,aAAe,SAAuBzU,EAAK9F,EAAKwa,GAC3D,IACI3iB,EAIAkO,EALA1O,EAAMyO,EAAI/Q,OAASylB,EAGvBnkB,KAAKgX,QAAQhW,GAGb,IAAI4T,EAAQ,EACZ,IAAKpT,EAAI,EAAGA,EAAIiO,EAAI/Q,OAAQ8C,IAAK,CAC/BkO,GAA6B,EAAxB1P,KAAK0V,MAAMlU,EAAI2iB,IAAcvP,EAClC,IAAIqB,GAAwB,EAAfxG,EAAIiG,MAAMlU,IAAUmI,EAEjCiL,IADAlF,GAAa,SAARuG,IACS,KAAQA,EAAQ,SAAa,GAC3CjW,KAAK0V,MAAMlU,EAAI2iB,GAAa,SAAJzU,EAE1B,KAAOlO,EAAIxB,KAAKtB,OAASylB,EAAO3iB,IAE9BoT,GADAlF,GAA6B,EAAxB1P,KAAK0V,MAAMlU,EAAI2iB,IAAcvP,IACrB,GACb5U,KAAK0V,MAAMlU,EAAI2iB,GAAa,SAAJzU,EAG1B,GAAc,IAAVkF,EAAa,OAAO5U,KAAKuW,QAK7B,IAFA1H,GAAkB,IAAX+F,GACPA,EAAQ,EACHpT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAE3BoT,GADAlF,IAAsB,EAAhB1P,KAAK0V,MAAMlU,IAAUoT,IACd,GACb5U,KAAK0V,MAAMlU,GAAS,SAAJkO,EAIlB,OAFA1P,KAAKyV,SAAW,EAETzV,KAAKuW,SAGdrH,EAAGxR,UAAU0mB,SAAW,SAAmB3U,EAAK4U,GAC9C,IAAIF,GAAQnkB,KAAKtB,OAAS+Q,EAAI/Q,QAE1BuI,EAAIjH,KAAKgQ,QACTvN,EAAIgN,EAGJ6U,EAA8B,EAAxB7hB,EAAEiT,MAAMjT,EAAE/D,OAAS,GAGf,KADdylB,EAAQ,GADMnkB,KAAKuY,WAAW+L,MAG5B7hB,EAAIA,EAAEihB,MAAMS,GACZld,EAAE8b,OAAOoB,GACTG,EAA8B,EAAxB7hB,EAAEiT,MAAMjT,EAAE/D,OAAS,IAI3B,IACI2Z,EADA1V,EAAIsE,EAAEvI,OAAS+D,EAAE/D,OAGrB,GAAa,QAAT2lB,EAAgB,EAClBhM,EAAI,IAAInJ,EAAG,OACTxQ,OAASiE,EAAI,EACf0V,EAAE3C,MAAQ,IAAIlN,MAAM6P,EAAE3Z,QACtB,IAAK,IAAI8C,EAAI,EAAGA,EAAI6W,EAAE3Z,OAAQ8C,IAC5B6W,EAAE3C,MAAMlU,GAAK,EAIjB,IAAI+iB,EAAOtd,EAAE+I,QAAQkU,aAAazhB,EAAG,EAAGE,GAClB,IAAlB4hB,EAAK9O,WACPxO,EAAIsd,EACAlM,IACFA,EAAE3C,MAAM/S,GAAK,IAIjB,IAAK,IAAIiB,EAAIjB,EAAI,EAAGiB,GAAK,EAAGA,IAAK,CAC/B,IAAI4gB,EAAmC,UAAL,EAAxBvd,EAAEyO,MAAMjT,EAAE/D,OAASkF,KACE,EAA5BqD,EAAEyO,MAAMjT,EAAE/D,OAASkF,EAAI,IAO1B,IAHA4gB,EAAKlf,KAAKC,IAAKif,EAAKF,EAAO,EAAG,UAE9Brd,EAAEid,aAAazhB,EAAG+hB,EAAI5gB,GACA,IAAfqD,EAAEwO,UACP+O,IACAvd,EAAEwO,SAAW,EACbxO,EAAEid,aAAazhB,EAAG,EAAGmB,GAChBqD,EAAE4Q,WACL5Q,EAAEwO,UAAY,GAGd4C,IACFA,EAAE3C,MAAM9R,GAAK4gB,GAajB,OAVInM,GACFA,EAAE9B,QAEJtP,EAAEsP,QAGW,QAAT8N,GAA4B,IAAVF,GACpBld,EAAEqJ,OAAO6T,GAGJ,CACLM,IAAKpM,GAAK,KACVnI,IAAKjJ,IAQTiI,EAAGxR,UAAUgnB,OAAS,SAAiBjV,EAAK4U,EAAMM,GAGhD,OAFA9V,GAAQY,EAAIoI,UAER7X,KAAK6X,SACA,CACL4M,IAAK,IAAIvV,EAAG,GACZgB,IAAK,IAAIhB,EAAG,IAKM,IAAlBlP,KAAKyV,UAAmC,IAAjBhG,EAAIgG,UAC7BjQ,EAAMxF,KAAKqZ,MAAMqL,OAAOjV,EAAK4U,GAEhB,QAATA,IACFI,EAAMjf,EAAIif,IAAIpL,OAGH,QAATgL,IACFnU,EAAM1K,EAAI0K,IAAImJ,MACVsL,GAA6B,IAAjBzU,EAAIuF,UAClBvF,EAAIqK,KAAK9K,IAIN,CACLgV,IAAKA,EACLvU,IAAKA,IAIa,IAAlBlQ,KAAKyV,UAAmC,IAAjBhG,EAAIgG,UAC7BjQ,EAAMxF,KAAK0kB,OAAOjV,EAAI4J,MAAOgL,GAEhB,QAATA,IACFI,EAAMjf,EAAIif,IAAIpL,OAGT,CACLoL,IAAKA,EACLvU,IAAK1K,EAAI0K,MAI0B,IAAlClQ,KAAKyV,SAAWhG,EAAIgG,WACvBjQ,EAAMxF,KAAKqZ,MAAMqL,OAAOjV,EAAI4J,MAAOgL,GAEtB,QAATA,IACFnU,EAAM1K,EAAI0K,IAAImJ,MACVsL,GAA6B,IAAjBzU,EAAIuF,UAClBvF,EAAIsK,KAAK/K,IAIN,CACLgV,IAAKjf,EAAIif,IACTvU,IAAKA,IAOLT,EAAI/Q,OAASsB,KAAKtB,QAAUsB,KAAKkW,IAAIzG,GAAO,EACvC,CACLgV,IAAK,IAAIvV,EAAG,GACZgB,IAAKlQ,MAKU,IAAfyP,EAAI/Q,OACO,QAAT2lB,EACK,CACLI,IAAKzkB,KAAK4kB,KAAKnV,EAAIiG,MAAM,IACzBxF,IAAK,MAII,QAATmU,EACK,CACLI,IAAK,KACLvU,IAAK,IAAIhB,EAAGlP,KAAK8X,KAAKrI,EAAIiG,MAAM,MAI7B,CACL+O,IAAKzkB,KAAK4kB,KAAKnV,EAAIiG,MAAM,IACzBxF,IAAK,IAAIhB,EAAGlP,KAAK8X,KAAKrI,EAAIiG,MAAM,MAI7B1V,KAAKokB,SAAS3U,EAAK4U,GAlF1B,IAAII,EAAKvU,EAAK1K,GAsFhB0J,EAAGxR,UAAU+mB,IAAM,SAAchV,GAC/B,OAAOzP,KAAK0kB,OAAOjV,EAAK,OAAO,GAAOgV,KAIxCvV,EAAGxR,UAAUwS,IAAM,SAAcT,GAC/B,OAAOzP,KAAK0kB,OAAOjV,EAAK,OAAO,GAAOS,KAGxChB,EAAGxR,UAAUmnB,KAAO,SAAepV,GACjC,OAAOzP,KAAK0kB,OAAOjV,EAAK,OAAO,GAAMS,KAIvChB,EAAGxR,UAAUonB,SAAW,SAAmBrV,GACzC,IAAIsV,EAAK/kB,KAAK0kB,OAAOjV,GAGrB,GAAIsV,EAAG7U,IAAI2H,SAAU,OAAOkN,EAAGN,IAE/B,IAAIvU,EAA0B,IAApB6U,EAAGN,IAAIhP,SAAiBsP,EAAG7U,IAAIsK,KAAK/K,GAAOsV,EAAG7U,IAEpD8U,EAAOvV,EAAImU,MAAM,GACjBqB,EAAKxV,EAAIU,MAAM,GACf+F,EAAMhG,EAAIgG,IAAI8O,GAGlB,OAAI9O,EAAM,GAAY,IAAP+O,GAAoB,IAAR/O,EAAkB6O,EAAGN,IAGrB,IAApBM,EAAGN,IAAIhP,SAAiBsP,EAAGN,IAAIpU,MAAM,GAAK0U,EAAGN,IAAI1L,MAAM,IAGhE7J,EAAGxR,UAAUoa,KAAO,SAAerI,GACjCZ,EAAOY,GAAO,UAId,IAHA,IAAI2D,GAAK,GAAK,IAAM3D,EAEhByV,EAAM,EACD1jB,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IACpC0jB,GAAO9R,EAAI8R,GAAuB,EAAhBllB,KAAK0V,MAAMlU,KAAWiO,EAG1C,OAAOyV,GAIThW,EAAGxR,UAAUqa,MAAQ,SAAgBtI,GACnCZ,EAAOY,GAAO,UAGd,IADA,IAAImF,EAAQ,EACHpT,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACzC,IAAIkO,GAAqB,EAAhB1P,KAAK0V,MAAMlU,IAAkB,SAARoT,EAC9B5U,KAAK0V,MAAMlU,GAAMkO,EAAID,EAAO,EAC5BmF,EAAQlF,EAAID,EAGd,OAAOzP,KAAKuW,SAGdrH,EAAGxR,UAAUknB,KAAO,SAAenV,GACjC,OAAOzP,KAAKgQ,QAAQ+H,MAAMtI,IAG5BP,EAAGxR,UAAUynB,KAAO,SAAe/R,GACjCvE,EAAsB,IAAfuE,EAAEqC,UACT5G,GAAQuE,EAAEyE,UAEV,IAAI3Q,EAAIlH,KACJmH,EAAIiM,EAAEpD,QAGR9I,EADiB,IAAfA,EAAEuO,SACAvO,EAAE2d,KAAKzR,GAEPlM,EAAE8I,QAaR,IATA,IAAIoV,EAAI,IAAIlW,EAAG,GACXmW,EAAI,IAAInW,EAAG,GAGXoW,EAAI,IAAIpW,EAAG,GACXqW,EAAI,IAAIrW,EAAG,GAEXsW,EAAI,EAEDte,EAAEue,UAAYte,EAAEse,UACrBve,EAAEoJ,OAAO,GACTnJ,EAAEmJ,OAAO,KACPkV,EAMJ,IAHA,IAAIE,EAAKve,EAAE6I,QACP2V,EAAKze,EAAE8I,SAEH9I,EAAE2Q,UAAU,CAClB,IAAK,IAAIrW,EAAI,EAAGokB,EAAK,EAAyB,IAArB1e,EAAEwO,MAAM,GAAKkQ,IAAapkB,EAAI,KAAMA,EAAGokB,IAAO,GACvE,GAAIpkB,EAAI,EAEN,IADA0F,EAAEoJ,OAAO9O,GACFA,KAAM,IACP4jB,EAAEhV,SAAWiV,EAAEjV,WACjBgV,EAAE7K,KAAKmL,GACPL,EAAE7K,KAAKmL,IAGTP,EAAE9U,OAAO,GACT+U,EAAE/U,OAAO,GAIb,IAAK,IAAI1M,EAAI,EAAGiiB,EAAK,EAAyB,IAArB1e,EAAEuO,MAAM,GAAKmQ,IAAajiB,EAAI,KAAMA,EAAGiiB,IAAO,GACvE,GAAIjiB,EAAI,EAEN,IADAuD,EAAEmJ,OAAO1M,GACFA,KAAM,IACP0hB,EAAElV,SAAWmV,EAAEnV,WACjBkV,EAAE/K,KAAKmL,GACPH,EAAE/K,KAAKmL,IAGTL,EAAEhV,OAAO,GACTiV,EAAEjV,OAAO,GAITpJ,EAAEgP,IAAI/O,IAAM,GACdD,EAAEsT,KAAKrT,GACPie,EAAE5K,KAAK8K,GACPD,EAAE7K,KAAK+K,KAEPpe,EAAEqT,KAAKtT,GACPoe,EAAE9K,KAAK4K,GACPG,EAAE/K,KAAK6K,IAIX,MAAO,CACLpe,EAAGqe,EACH7iB,EAAG8iB,EACHO,IAAK3e,EAAE4b,OAAOyC,KAOlBtW,EAAGxR,UAAUqoB,OAAS,SAAiB3S,GACrCvE,EAAsB,IAAfuE,EAAEqC,UACT5G,GAAQuE,EAAEyE,UAEV,IAAI5Q,EAAIjH,KACJyC,EAAI2Q,EAAEpD,QAGR/I,EADiB,IAAfA,EAAEwO,SACAxO,EAAE4d,KAAKzR,GAEPnM,EAAE+I,QAQR,IALA,IAuCIxK,EAvCAwgB,EAAK,IAAI9W,EAAG,GACZ+W,EAAK,IAAI/W,EAAG,GAEZgX,EAAQzjB,EAAEuN,QAEP/I,EAAE4J,KAAK,GAAK,GAAKpO,EAAEoO,KAAK,GAAK,GAAG,CACrC,IAAK,IAAIrP,EAAI,EAAGokB,EAAK,EAAyB,IAArB3e,EAAEyO,MAAM,GAAKkQ,IAAapkB,EAAI,KAAMA,EAAGokB,IAAO,GACvE,GAAIpkB,EAAI,EAEN,IADAyF,EAAEqJ,OAAO9O,GACFA,KAAM,GACPwkB,EAAG5V,SACL4V,EAAGzL,KAAK2L,GAGVF,EAAG1V,OAAO,GAId,IAAK,IAAI1M,EAAI,EAAGiiB,EAAK,EAAyB,IAArBpjB,EAAEiT,MAAM,GAAKmQ,IAAajiB,EAAI,KAAMA,EAAGiiB,IAAO,GACvE,GAAIjiB,EAAI,EAEN,IADAnB,EAAE6N,OAAO1M,GACFA,KAAM,GACPqiB,EAAG7V,SACL6V,EAAG1L,KAAK2L,GAGVD,EAAG3V,OAAO,GAIVrJ,EAAEiP,IAAIzT,IAAM,GACdwE,EAAEuT,KAAK/X,GACPujB,EAAGxL,KAAKyL,KAERxjB,EAAE+X,KAAKvT,GACPgf,EAAGzL,KAAKwL,IAeZ,OATExgB,EADgB,IAAdyB,EAAE4J,KAAK,GACHmV,EAEAC,GAGApV,KAAK,GAAK,GAChBrL,EAAI+U,KAAKnH,GAGJ5N,GAGT0J,EAAGxR,UAAUooB,IAAM,SAAcrW,GAC/B,GAAIzP,KAAK6X,SAAU,OAAOpI,EAAIoJ,MAC9B,GAAIpJ,EAAIoI,SAAU,OAAO7X,KAAK6Y,MAE9B,IAAI5R,EAAIjH,KAAKgQ,QACTvN,EAAIgN,EAAIO,QACZ/I,EAAEwO,SAAW,EACbhT,EAAEgT,SAAW,EAGb,IAAK,IAAI0O,EAAQ,EAAGld,EAAEwe,UAAYhjB,EAAEgjB,SAAUtB,IAC5Cld,EAAEqJ,OAAO,GACT7N,EAAE6N,OAAO,GAGX,OAAG,CACD,KAAOrJ,EAAEwe,UACPxe,EAAEqJ,OAAO,GAEX,KAAO7N,EAAEgjB,UACPhjB,EAAE6N,OAAO,GAGX,IAAItB,EAAI/H,EAAEiP,IAAIzT,GACd,GAAIuM,EAAI,EAAG,CAET,IAAIwJ,EAAIvR,EACRA,EAAIxE,EACJA,EAAI+V,OACC,GAAU,IAANxJ,GAAyB,IAAdvM,EAAEoO,KAAK,GAC3B,MAGF5J,EAAEuT,KAAK/X,GAGT,OAAOA,EAAEsgB,OAAOoB,IAIlBjV,EAAGxR,UAAUyoB,KAAO,SAAe1W,GACjC,OAAOzP,KAAKmlB,KAAK1V,GAAKxI,EAAE4d,KAAKpV,IAG/BP,EAAGxR,UAAU+nB,OAAS,WACpB,OAA+B,IAAP,EAAhBzlB,KAAK0V,MAAM,KAGrBxG,EAAGxR,UAAU0S,MAAQ,WACnB,OAA+B,IAAP,EAAhBpQ,KAAK0V,MAAM,KAIrBxG,EAAGxR,UAAUyS,MAAQ,SAAgBV,GACnC,OAAOzP,KAAK0V,MAAM,GAAKjG,GAIzBP,EAAGxR,UAAU0oB,MAAQ,SAAgB/L,GACnCxL,EAAsB,iBAARwL,GACd,IAAIrL,EAAIqL,EAAM,GACVyG,GAAKzG,EAAMrL,GAAK,GAChBqJ,EAAI,GAAKrJ,EAGb,GAAIhP,KAAKtB,QAAUoiB,EAGjB,OAFA9gB,KAAKgX,QAAQ8J,EAAI,GACjB9gB,KAAK0V,MAAMoL,IAAMzI,EACVrY,KAKT,IADA,IAAI4U,EAAQyD,EACH7W,EAAIsf,EAAa,IAAVlM,GAAepT,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACnD,IAAIkO,EAAoB,EAAhB1P,KAAK0V,MAAMlU,GAEnBoT,GADAlF,GAAKkF,KACS,GACdlF,GAAK,SACL1P,KAAK0V,MAAMlU,GAAKkO,EAMlB,OAJc,IAAVkF,IACF5U,KAAK0V,MAAMlU,GAAKoT,EAChB5U,KAAKtB,UAEAsB,MAGTkP,EAAGxR,UAAUma,OAAS,WACpB,OAAuB,IAAhB7X,KAAKtB,QAAkC,IAAlBsB,KAAK0V,MAAM,IAGzCxG,EAAGxR,UAAUmT,KAAO,SAAepB,GACjC,IAOIjK,EAPAiQ,EAAWhG,EAAM,EAErB,GAAsB,IAAlBzP,KAAKyV,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlBzV,KAAKyV,UAAkBA,EAAU,OAAO,EAK5C,GAHAzV,KAAKuW,QAGDvW,KAAKtB,OAAS,EAChB8G,EAAM,MACD,CACDiQ,IACFhG,GAAOA,GAGTZ,EAAOY,GAAO,SAAW,qBAEzB,IAAIC,EAAoB,EAAhB1P,KAAK0V,MAAM,GACnBlQ,EAAMkK,IAAMD,EAAM,EAAIC,EAAID,GAAO,EAAI,EAEvC,OAAsB,IAAlBzP,KAAKyV,SAA8B,GAANjQ,EAC1BA,GAOT0J,EAAGxR,UAAUwY,IAAM,SAAczG,GAC/B,GAAsB,IAAlBzP,KAAKyV,UAAmC,IAAjBhG,EAAIgG,SAAgB,OAAQ,EACvD,GAAsB,IAAlBzV,KAAKyV,UAAmC,IAAjBhG,EAAIgG,SAAgB,OAAO,EAEtD,IAAIjQ,EAAMxF,KAAKqmB,KAAK5W,GACpB,OAAsB,IAAlBzP,KAAKyV,SAA8B,GAANjQ,EAC1BA,GAIT0J,EAAGxR,UAAU2oB,KAAO,SAAe5W,GAEjC,GAAIzP,KAAKtB,OAAS+Q,EAAI/Q,OAAQ,OAAO,EACrC,GAAIsB,KAAKtB,OAAS+Q,EAAI/Q,OAAQ,OAAQ,EAGtC,IADA,IAAI8G,EAAM,EACDhE,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACzC,IAAIyF,EAAoB,EAAhBjH,KAAK0V,MAAMlU,GACfiB,EAAmB,EAAfgN,EAAIiG,MAAMlU,GAElB,GAAIyF,IAAMxE,EAAV,CACIwE,EAAIxE,EACN+C,GAAO,EACEyB,EAAIxE,IACb+C,EAAM,GAER,OAEF,OAAOA,GAGT0J,EAAGxR,UAAU4oB,IAAM,SAAc7W,GAC/B,OAA0B,IAAnBzP,KAAK6Q,KAAKpB,IAGnBP,EAAGxR,UAAU6oB,GAAK,SAAa9W,GAC7B,OAAyB,IAAlBzP,KAAKkW,IAAIzG,IAGlBP,EAAGxR,UAAU8oB,KAAO,SAAe/W,GACjC,OAAOzP,KAAK6Q,KAAKpB,IAAQ,GAG3BP,EAAGxR,UAAU+oB,IAAM,SAAchX,GAC/B,OAAOzP,KAAKkW,IAAIzG,IAAQ,GAG1BP,EAAGxR,UAAUgpB,IAAM,SAAcjX,GAC/B,OAA2B,IAApBzP,KAAK6Q,KAAKpB,IAGnBP,EAAGxR,UAAUipB,GAAK,SAAalX,GAC7B,OAA0B,IAAnBzP,KAAKkW,IAAIzG,IAGlBP,EAAGxR,UAAUkpB,KAAO,SAAenX,GACjC,OAAOzP,KAAK6Q,KAAKpB,IAAQ,GAG3BP,EAAGxR,UAAUmpB,IAAM,SAAcpX,GAC/B,OAAOzP,KAAKkW,IAAIzG,IAAQ,GAG1BP,EAAGxR,UAAUopB,IAAM,SAAcrX,GAC/B,OAA0B,IAAnBzP,KAAK6Q,KAAKpB,IAGnBP,EAAGxR,UAAUqpB,GAAK,SAAatX,GAC7B,OAAyB,IAAlBzP,KAAKkW,IAAIzG,IAOlBP,EAAGyG,IAAM,SAAclG,GACrB,OAAO,IAAIuX,EAAIvX,IAGjBP,EAAGxR,UAAUupB,MAAQ,SAAgBC,GAGnC,OAFArY,GAAQ7O,KAAK2V,IAAK,yCAClB9G,EAAyB,IAAlB7O,KAAKyV,SAAgB,iCACrByR,EAAIC,UAAUnnB,MAAMonB,UAAUF,IAGvChY,EAAGxR,UAAU2pB,QAAU,WAErB,OADAxY,EAAO7O,KAAK2V,IAAK,wDACV3V,KAAK2V,IAAI2R,YAAYtnB,OAG9BkP,EAAGxR,UAAU0pB,UAAY,SAAoBF,GAE3C,OADAlnB,KAAK2V,IAAMuR,EACJlnB,MAGTkP,EAAGxR,UAAU6pB,SAAW,SAAmBL,GAEzC,OADArY,GAAQ7O,KAAK2V,IAAK,yCACX3V,KAAKonB,UAAUF,IAGxBhY,EAAGxR,UAAU8pB,OAAS,SAAiB/X,GAErC,OADAZ,EAAO7O,KAAK2V,IAAK,sCACV3V,KAAK2V,IAAI8E,IAAIza,KAAMyP,IAG5BP,EAAGxR,UAAU+pB,QAAU,SAAkBhY,GAEvC,OADAZ,EAAO7O,KAAK2V,IAAK,uCACV3V,KAAK2V,IAAI4E,KAAKva,KAAMyP,IAG7BP,EAAGxR,UAAUgqB,OAAS,SAAiBjY,GAErC,OADAZ,EAAO7O,KAAK2V,IAAK,sCACV3V,KAAK2V,IAAIpK,IAAIvL,KAAMyP,IAG5BP,EAAGxR,UAAUiqB,QAAU,SAAkBlY,GAEvC,OADAZ,EAAO7O,KAAK2V,IAAK,uCACV3V,KAAK2V,IAAI6E,KAAKxa,KAAMyP,IAG7BP,EAAGxR,UAAUkqB,OAAS,SAAiBnY,GAErC,OADAZ,EAAO7O,KAAK2V,IAAK,sCACV3V,KAAK2V,IAAIkS,IAAI7nB,KAAMyP,IAG5BP,EAAGxR,UAAUoqB,OAAS,SAAiBrY,GAGrC,OAFAZ,EAAO7O,KAAK2V,IAAK,sCACjB3V,KAAK2V,IAAIoS,SAAS/nB,KAAMyP,GACjBzP,KAAK2V,IAAIhM,IAAI3J,KAAMyP,IAG5BP,EAAGxR,UAAUsqB,QAAU,SAAkBvY,GAGvC,OAFAZ,EAAO7O,KAAK2V,IAAK,sCACjB3V,KAAK2V,IAAIoS,SAAS/nB,KAAMyP,GACjBzP,KAAK2V,IAAI+I,KAAK1e,KAAMyP,IAG7BP,EAAGxR,UAAUuqB,OAAS,WAGpB,OAFApZ,EAAO7O,KAAK2V,IAAK,sCACjB3V,KAAK2V,IAAIuS,SAASloB,MACXA,KAAK2V,IAAIiN,IAAI5iB,OAGtBkP,EAAGxR,UAAUyqB,QAAU,WAGrB,OAFAtZ,EAAO7O,KAAK2V,IAAK,uCACjB3V,KAAK2V,IAAIuS,SAASloB,MACXA,KAAK2V,IAAIkN,KAAK7iB,OAIvBkP,EAAGxR,UAAU0qB,QAAU,WAGrB,OAFAvZ,EAAO7O,KAAK2V,IAAK,uCACjB3V,KAAK2V,IAAIuS,SAASloB,MACXA,KAAK2V,IAAI0S,KAAKroB,OAGvBkP,EAAGxR,UAAU4qB,QAAU,WAGrB,OAFAzZ,EAAO7O,KAAK2V,IAAK,uCACjB3V,KAAK2V,IAAIuS,SAASloB,MACXA,KAAK2V,IAAIwQ,KAAKnmB,OAIvBkP,EAAGxR,UAAU6qB,OAAS,WAGpB,OAFA1Z,EAAO7O,KAAK2V,IAAK,sCACjB3V,KAAK2V,IAAIuS,SAASloB,MACXA,KAAK2V,IAAI0D,IAAIrZ,OAGtBkP,EAAGxR,UAAU8qB,OAAS,SAAiB/Y,GAGrC,OAFAZ,EAAO7O,KAAK2V,MAAQlG,EAAIkG,IAAK,qBAC7B3V,KAAK2V,IAAIuS,SAASloB,MACXA,KAAK2V,IAAIzL,IAAIlK,KAAMyP,IAI5B,IAAIgZ,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQ1X,EAAMgC,GAErBpT,KAAKoR,KAAOA,EACZpR,KAAKoT,EAAI,IAAIlE,EAAGkE,EAAG,IACnBpT,KAAK0C,EAAI1C,KAAKoT,EAAEvD,YAChB7P,KAAK+P,EAAI,IAAIb,EAAG,GAAG6T,OAAO/iB,KAAK0C,GAAG8X,KAAKxa,KAAKoT,GAE5CpT,KAAK+oB,IAAM/oB,KAAKgpB,OAiDlB,SAASC,IACPH,EAAO7lB,KACLjD,KACA,OACA,2EA+DJ,SAASkpB,IACPJ,EAAO7lB,KACLjD,KACA,OACA,kEAIJ,SAASmpB,IACPL,EAAO7lB,KACLjD,KACA,OACA,yDAIJ,SAASopB,IAEPN,EAAO7lB,KACLjD,KACA,QACA,uEA8CJ,SAASgnB,EAAKrkB,GACZ,GAAiB,iBAANA,EAAgB,CACzB,IAAI0mB,EAAQna,EAAGoa,OAAO3mB,GACtB3C,KAAK2C,EAAI0mB,EAAMjW,EACfpT,KAAKqpB,MAAQA,OAEbxa,EAAOlM,EAAE2jB,IAAI,GAAI,kCACjBtmB,KAAK2C,EAAIA,EACT3C,KAAKqpB,MAAQ,KAkOjB,SAASE,EAAM5mB,GACbqkB,EAAI/jB,KAAKjD,KAAM2C,GAEf3C,KAAKmkB,MAAQnkB,KAAK2C,EAAEkN,YAChB7P,KAAKmkB,MAAQ,IAAO,IACtBnkB,KAAKmkB,OAAS,GAAMnkB,KAAKmkB,MAAQ,IAGnCnkB,KAAKgP,EAAI,IAAIE,EAAG,GAAG6T,OAAO/iB,KAAKmkB,OAC/BnkB,KAAKilB,GAAKjlB,KAAKwpB,KAAKxpB,KAAKgP,EAAE4T,OAC3B5iB,KAAKypB,KAAOzpB,KAAKgP,EAAE+W,OAAO/lB,KAAK2C,GAE/B3C,KAAK0pB,KAAO1pB,KAAKypB,KAAK9f,IAAI3J,KAAKgP,GAAGqB,MAAM,GAAGoU,IAAIzkB,KAAK2C,GACpD3C,KAAK0pB,KAAO1pB,KAAK0pB,KAAK7E,KAAK7kB,KAAKgP,GAChChP,KAAK0pB,KAAO1pB,KAAKgP,EAAEzD,IAAIvL,KAAK0pB,MA5a9BZ,EAAOprB,UAAUsrB,KAAO,WACtB,IAAID,EAAM,IAAI7Z,EAAG,MAEjB,OADA6Z,EAAIrT,MAAQ,IAAIlN,MAAMlD,KAAKkR,KAAKxW,KAAK0C,EAAI,KAClCqmB,GAGTD,EAAOprB,UAAUisB,QAAU,SAAkBla,GAG3C,IACIma,EADA5a,EAAIS,EAGR,GACEzP,KAAK6pB,MAAM7a,EAAGhP,KAAK+oB,KAGnBa,GADA5a,GADAA,EAAIhP,KAAK8pB,MAAM9a,IACTuL,KAAKva,KAAK+oB,MACPlZ,kBACF+Z,EAAO5pB,KAAK0C,GAErB,IAAIwT,EAAM0T,EAAO5pB,KAAK0C,GAAK,EAAIsM,EAAEqX,KAAKrmB,KAAKoT,GAgB3C,OAfY,IAAR8C,GACFlH,EAAE0G,MAAM,GAAK,EACb1G,EAAEtQ,OAAS,GACFwX,EAAM,EACflH,EAAEwL,KAAKxa,KAAKoT,QAEIhU,IAAZ4P,EAAEuH,MAEJvH,EAAEuH,QAGFvH,EAAE+a,SAIC/a,GAGT8Z,EAAOprB,UAAUmsB,MAAQ,SAAgBG,EAAOrhB,GAC9CqhB,EAAM1Z,OAAOtQ,KAAK0C,EAAG,EAAGiG,IAG1BmgB,EAAOprB,UAAUosB,MAAQ,SAAgBra,GACvC,OAAOA,EAAIiP,KAAK1e,KAAK+P,IASvB+C,EAASmW,EAAMH,GAEfG,EAAKvrB,UAAUmsB,MAAQ,SAAgBG,EAAOC,GAK5C,IAHA,IAEIC,EAAS5kB,KAAKC,IAAIykB,EAAMtrB,OAAQ,GAC3B8C,EAAI,EAAGA,EAAI0oB,EAAQ1oB,IAC1ByoB,EAAOvU,MAAMlU,GAAKwoB,EAAMtU,MAAMlU,GAIhC,GAFAyoB,EAAOvrB,OAASwrB,EAEZF,EAAMtrB,QAAU,EAGlB,OAFAsrB,EAAMtU,MAAM,GAAK,OACjBsU,EAAMtrB,OAAS,GAKjB,IAAIyrB,EAAOH,EAAMtU,MAAM,GAGvB,IAFAuU,EAAOvU,MAAMuU,EAAOvrB,UAhBT,QAgBqByrB,EAE3B3oB,EAAI,GAAIA,EAAIwoB,EAAMtrB,OAAQ8C,IAAK,CAClC,IAAI4oB,EAAwB,EAAjBJ,EAAMtU,MAAMlU,GACvBwoB,EAAMtU,MAAMlU,EAAI,KApBP,QAoBe4oB,IAAgB,EAAMD,IAAS,GACvDA,EAAOC,EAETD,KAAU,GACVH,EAAMtU,MAAMlU,EAAI,IAAM2oB,EACT,IAATA,GAAcH,EAAMtrB,OAAS,GAC/BsrB,EAAMtrB,QAAU,GAEhBsrB,EAAMtrB,QAAU,GAIpBuqB,EAAKvrB,UAAUosB,MAAQ,SAAgBra,GAErCA,EAAIiG,MAAMjG,EAAI/Q,QAAU,EACxB+Q,EAAIiG,MAAMjG,EAAI/Q,OAAS,GAAK,EAC5B+Q,EAAI/Q,QAAU,EAId,IADA,IAAIyG,EAAK,EACA3D,EAAI,EAAGA,EAAIiO,EAAI/Q,OAAQ8C,IAAK,CACnC,IAAIkO,EAAmB,EAAfD,EAAIiG,MAAMlU,GAClB2D,GAAU,IAAJuK,EACND,EAAIiG,MAAMlU,GAAU,SAAL2D,EACfA,EAAS,GAAJuK,GAAavK,EAAK,SAAa,GAUtC,OANkC,IAA9BsK,EAAIiG,MAAMjG,EAAI/Q,OAAS,KACzB+Q,EAAI/Q,SAC8B,IAA9B+Q,EAAIiG,MAAMjG,EAAI/Q,OAAS,IACzB+Q,EAAI/Q,UAGD+Q,GASTqD,EAASoW,EAAMJ,GAQfhW,EAASqW,EAAML,GASfhW,EAASsW,EAAQN,GAEjBM,EAAO1rB,UAAUosB,MAAQ,SAAgBra,GAGvC,IADA,IAAImF,EAAQ,EACHpT,EAAI,EAAGA,EAAIiO,EAAI/Q,OAAQ8C,IAAK,CACnC,IAAI0D,EAA0B,IAAL,EAAfuK,EAAIiG,MAAMlU,IAAiBoT,EACjCzP,EAAU,SAALD,EACTA,KAAQ,GAERuK,EAAIiG,MAAMlU,GAAK2D,EACfyP,EAAQ1P,EAKV,OAHc,IAAV0P,IACFnF,EAAIiG,MAAMjG,EAAI/Q,UAAYkW,GAErBnF,GAITP,EAAGoa,OAAS,SAAgBlY,GAE1B,GAAIqX,EAAOrX,GAAO,OAAOqX,EAAOrX,GAEhC,IAAIiY,EACJ,GAAa,SAATjY,EACFiY,EAAQ,IAAIJ,OACP,GAAa,SAAT7X,EACTiY,EAAQ,IAAIH,OACP,GAAa,SAAT9X,EACTiY,EAAQ,IAAIF,MACP,IAAa,WAAT/X,EAGT,MAAM,IAAInR,MAAM,iBAAmBmR,GAFnCiY,EAAQ,IAAID,EAMd,OAFAX,EAAOrX,GAAQiY,EAERA,GAkBTrC,EAAItpB,UAAUwqB,SAAW,SAAmBjhB,GAC1C4H,EAAsB,IAAf5H,EAAEwO,SAAgB,iCACzB5G,EAAO5H,EAAE0O,IAAK,oCAGhBqR,EAAItpB,UAAUqqB,SAAW,SAAmB9gB,EAAGxE,GAC7CoM,EAAqC,IAA7B5H,EAAEwO,SAAWhT,EAAEgT,UAAiB,iCACxC5G,EAAO5H,EAAE0O,KAAO1O,EAAE0O,MAAQlT,EAAEkT,IAC1B,oCAGJqR,EAAItpB,UAAU8rB,KAAO,SAAeviB,GAClC,OAAIjH,KAAKqpB,MAAcrpB,KAAKqpB,MAAMM,QAAQ1iB,GAAGmgB,UAAUpnB,MAChDiH,EAAE4d,KAAK7kB,KAAK2C,GAAGykB,UAAUpnB,OAGlCgnB,EAAItpB,UAAU2b,IAAM,SAAcpS,GAChC,OAAIA,EAAE4Q,SACG5Q,EAAE+I,QAGJhQ,KAAK2C,EAAE4I,IAAItE,GAAGmgB,UAAUpnB,OAGjCgnB,EAAItpB,UAAU+c,IAAM,SAAcxT,EAAGxE,GACnCzC,KAAK+nB,SAAS9gB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEwT,IAAIhY,GAIhB,OAHI+C,EAAI0Q,IAAIlW,KAAK2C,IAAM,GACrB6C,EAAIgV,KAAKxa,KAAK2C,GAET6C,EAAI4hB,UAAUpnB,OAGvBgnB,EAAItpB,UAAU6c,KAAO,SAAetT,EAAGxE,GACrCzC,KAAK+nB,SAAS9gB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEsT,KAAK9X,GAIjB,OAHI+C,EAAI0Q,IAAIlW,KAAK2C,IAAM,GACrB6C,EAAIgV,KAAKxa,KAAK2C,GAET6C,GAGTwhB,EAAItpB,UAAU6N,IAAM,SAActE,EAAGxE,GACnCzC,KAAK+nB,SAAS9gB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEsE,IAAI9I,GAIhB,OAHI+C,EAAIqL,KAAK,GAAK,GAChBrL,EAAI+U,KAAKva,KAAK2C,GAET6C,EAAI4hB,UAAUpnB,OAGvBgnB,EAAItpB,UAAU8c,KAAO,SAAevT,EAAGxE,GACrCzC,KAAK+nB,SAAS9gB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEuT,KAAK/X,GAIjB,OAHI+C,EAAIqL,KAAK,GAAK,GAChBrL,EAAI+U,KAAKva,KAAK2C,GAET6C,GAGTwhB,EAAItpB,UAAUmqB,IAAM,SAAc5gB,EAAGwI,GAEnC,OADAzP,KAAKkoB,SAASjhB,GACPjH,KAAKwpB,KAAKviB,EAAEyc,MAAMjU,KAG3BuX,EAAItpB,UAAUghB,KAAO,SAAezX,EAAGxE,GAErC,OADAzC,KAAK+nB,SAAS9gB,EAAGxE,GACVzC,KAAKwpB,KAAKviB,EAAEyX,KAAKjc,KAG1BukB,EAAItpB,UAAUiM,IAAM,SAAc1C,EAAGxE,GAEnC,OADAzC,KAAK+nB,SAAS9gB,EAAGxE,GACVzC,KAAKwpB,KAAKviB,EAAE0C,IAAIlH,KAGzBukB,EAAItpB,UAAUmlB,KAAO,SAAe5b,GAClC,OAAOjH,KAAK0e,KAAKzX,EAAGA,EAAE+I,UAGxBgX,EAAItpB,UAAUklB,IAAM,SAAc3b,GAChC,OAAOjH,KAAK2J,IAAI1C,EAAGA,IAGrB+f,EAAItpB,UAAU2qB,KAAO,SAAephB,GAClC,GAAIA,EAAE4Q,SAAU,OAAO5Q,EAAE+I,QAEzB,IAAIqa,EAAOrqB,KAAK2C,EAAEwN,MAAM,GAIxB,GAHAtB,EAAOwb,EAAO,GAAM,GAGP,IAATA,EAAY,CACd,IAAIngB,EAAMlK,KAAK2C,EAAE8X,IAAI,IAAIvL,EAAG,IAAIoB,OAAO,GACvC,OAAOtQ,KAAKkK,IAAIjD,EAAGiD,GAQrB,IAFA,IAAImO,EAAIrY,KAAK2C,EAAEqhB,KAAK,GAChBlD,EAAI,GACAzI,EAAER,UAA2B,IAAfQ,EAAElI,MAAM,IAC5B2Q,IACAzI,EAAE/H,OAAO,GAEXzB,GAAQwJ,EAAER,UAEV,IAAIyS,EAAM,IAAIpb,EAAG,GAAG+X,MAAMjnB,MACtBuqB,EAAOD,EAAI/B,SAIXiC,EAAOxqB,KAAK2C,EAAEqhB,KAAK,GAAG1T,OAAO,GAC7BL,EAAIjQ,KAAK2C,EAAEkN,YAGf,IAFAI,EAAI,IAAIf,EAAG,EAAIe,EAAIA,GAAGgX,MAAMjnB,MAEW,IAAhCA,KAAKkK,IAAI+F,EAAGua,GAAMtU,IAAIqU,IAC3Bta,EAAEwX,QAAQ8C,GAOZ,IAJA,IAAItlB,EAAIjF,KAAKkK,IAAI+F,EAAGoI,GAChBrJ,EAAIhP,KAAKkK,IAAIjD,EAAGoR,EAAE0L,KAAK,GAAGzT,OAAO,IACjCkI,EAAIxY,KAAKkK,IAAIjD,EAAGoR,GAChB1V,EAAIme,EACc,IAAftI,EAAEtC,IAAIoU,IAAY,CAEvB,IADA,IAAIvB,EAAMvQ,EACDhX,EAAI,EAAoB,IAAjBunB,EAAI7S,IAAIoU,GAAY9oB,IAClCunB,EAAMA,EAAId,SAEZpZ,EAAOrN,EAAImB,GACX,IAAIF,EAAIzC,KAAKkK,IAAIjF,EAAG,IAAIiK,EAAG,GAAG6T,OAAOpgB,EAAInB,EAAI,IAE7CwN,EAAIA,EAAE8Y,OAAOrlB,GACbwC,EAAIxC,EAAEwlB,SACNzP,EAAIA,EAAEsP,OAAO7iB,GACbtC,EAAInB,EAGN,OAAOwN,GAGTgY,EAAItpB,UAAUyoB,KAAO,SAAelf,GAClC,IAAIwjB,EAAMxjB,EAAE8e,OAAO/lB,KAAK2C,GACxB,OAAqB,IAAjB8nB,EAAIhV,UACNgV,EAAIhV,SAAW,EACRzV,KAAKwpB,KAAKiB,GAAKlC,UAEfvoB,KAAKwpB,KAAKiB,IAIrBzD,EAAItpB,UAAUwM,IAAM,SAAcjD,EAAGwI,GACnC,GAAIA,EAAIoI,SAAU,OAAO,IAAI3I,EAAG,GAAG+X,MAAMjnB,MACzC,GAAoB,IAAhByP,EAAIoB,KAAK,GAAU,OAAO5J,EAAE+I,QAEhC,IACI0a,EAAM,IAAIliB,MAAM,IACpBkiB,EAAI,GAAK,IAAIxb,EAAG,GAAG+X,MAAMjnB,MACzB0qB,EAAI,GAAKzjB,EACT,IAAK,IAAIzF,EAAI,EAAGA,EAAIkpB,EAAIhsB,OAAQ8C,IAC9BkpB,EAAIlpB,GAAKxB,KAAK2J,IAAI+gB,EAAIlpB,EAAI,GAAIyF,GAGhC,IAAIzB,EAAMklB,EAAI,GACVC,EAAU,EACVC,EAAa,EACb5oB,EAAQyN,EAAII,YAAc,GAK9B,IAJc,IAAV7N,IACFA,EAAQ,IAGLR,EAAIiO,EAAI/Q,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CAEpC,IADA,IAAIyR,EAAOxD,EAAIiG,MAAMlU,GACZoC,EAAI5B,EAAQ,EAAG4B,GAAK,EAAGA,IAAK,CACnC,IAAIyW,EAAOpH,GAAQrP,EAAK,EACpB4B,IAAQklB,EAAI,KACdllB,EAAMxF,KAAK4iB,IAAIpd,IAGL,IAAR6U,GAAyB,IAAZsQ,GAKjBA,IAAY,EACZA,GAAWtQ,GA9BE,MA+BbuQ,GACwC,IAANppB,GAAiB,IAANoC,KAE7C4B,EAAMxF,KAAK2J,IAAInE,EAAKklB,EAAIC,IACxBC,EAAa,EACbD,EAAU,IAXRC,EAAa,EAajB5oB,EAAQ,GAGV,OAAOwD,GAGTwhB,EAAItpB,UAAUypB,UAAY,SAAoB1X,GAC5C,IAAIT,EAAIS,EAAIoV,KAAK7kB,KAAK2C,GAEtB,OAAOqM,IAAMS,EAAMT,EAAEgB,QAAUhB,GAGjCgY,EAAItpB,UAAU4pB,YAAc,SAAsB7X,GAChD,IAAIjK,EAAMiK,EAAIO,QAEd,OADAxK,EAAImQ,IAAM,KACHnQ,GAOT0J,EAAG2b,KAAO,SAAepb,GACvB,OAAO,IAAI8Z,EAAK9Z,IAmBlBqD,EAASyW,EAAMvC,GAEfuC,EAAK7rB,UAAUypB,UAAY,SAAoB1X,GAC7C,OAAOzP,KAAKwpB,KAAK/Z,EAAIiU,MAAM1jB,KAAKmkB,SAGlCoF,EAAK7rB,UAAU4pB,YAAc,SAAsB7X,GACjD,IAAIT,EAAIhP,KAAKwpB,KAAK/Z,EAAI9F,IAAI3J,KAAKypB,OAE/B,OADAza,EAAE2G,IAAM,KACD3G,GAGTua,EAAK7rB,UAAUghB,KAAO,SAAezX,EAAGxE,GACtC,GAAIwE,EAAE4Q,UAAYpV,EAAEoV,SAGlB,OAFA5Q,EAAEyO,MAAM,GAAK,EACbzO,EAAEvI,OAAS,EACJuI,EAGT,IAAIuR,EAAIvR,EAAEyX,KAAKjc,GACXwC,EAAIuT,EAAEsL,MAAM9jB,KAAKmkB,OAAOxa,IAAI3J,KAAK0pB,MAAM7F,OAAO7jB,KAAKmkB,OAAOxa,IAAI3J,KAAK2C,GACnEmoB,EAAItS,EAAEgC,KAAKvV,GAAGqL,OAAOtQ,KAAKmkB,OAC1B3e,EAAMslB,EAQV,OANIA,EAAE5U,IAAIlW,KAAK2C,IAAM,EACnB6C,EAAMslB,EAAEtQ,KAAKxa,KAAK2C,GACTmoB,EAAEja,KAAK,GAAK,IACrBrL,EAAMslB,EAAEvQ,KAAKva,KAAK2C,IAGb6C,EAAI4hB,UAAUpnB,OAGvBupB,EAAK7rB,UAAUiM,IAAM,SAAc1C,EAAGxE,GACpC,GAAIwE,EAAE4Q,UAAYpV,EAAEoV,SAAU,OAAO,IAAI3I,EAAG,GAAGkY,UAAUpnB,MAEzD,IAAIwY,EAAIvR,EAAE0C,IAAIlH,GACVwC,EAAIuT,EAAEsL,MAAM9jB,KAAKmkB,OAAOxa,IAAI3J,KAAK0pB,MAAM7F,OAAO7jB,KAAKmkB,OAAOxa,IAAI3J,KAAK2C,GACnEmoB,EAAItS,EAAEgC,KAAKvV,GAAGqL,OAAOtQ,KAAKmkB,OAC1B3e,EAAMslB,EAOV,OANIA,EAAE5U,IAAIlW,KAAK2C,IAAM,EACnB6C,EAAMslB,EAAEtQ,KAAKxa,KAAK2C,GACTmoB,EAAEja,KAAK,GAAK,IACrBrL,EAAMslB,EAAEvQ,KAAKva,KAAK2C,IAGb6C,EAAI4hB,UAAUpnB,OAGvBupB,EAAK7rB,UAAUyoB,KAAO,SAAelf,GAGnC,OADUjH,KAAKwpB,KAAKviB,EAAE8e,OAAO/lB,KAAK2C,GAAGgH,IAAI3J,KAAKilB,KACnCmC,UAAUpnB,OAt2GzB,CAw2GoC3C,EAAQ2C,Q,sCCx2G5C1C,EAAQkvE,cAAgB,EAAQ,KAChClvE,EAAQqvE,eAAiB,EAAQ,KAEjCrvE,EAAQmvE,eAAiB,SAAyBnuE,EAAKa,GACrD,OAAO7B,EAAQkvE,cAAcluE,EAAKa,GAAK,IAGzC7B,EAAQovE,cAAgB,SAAwBpuE,EAAKa,GACnD,OAAO7B,EAAQqvE,eAAeruE,EAAKa,GAAK,K,gBCR1C,IAAIgkC,EAAY,EAAQ,KACpBgQ,EAAc,EAAQ,KACtBmsB,EAAa,EAAQ,KACrB4qB,EAAM,EAAQ,KACdlwE,EAAM,EAAQ,KACd9K,EAAK,EAAQ,KACbi7E,EAAa,EAAQ,KACrB/2C,EAAM,EAAQ,KACdl1C,EAAS,EAAQ,KAAeA,OAEpCb,EAAOC,QAAU,SAAwB8sF,EAAWt7E,EAAK+rC,GACvD,IAAInjC,EAEFA,EADE0yE,EAAU1yE,QACF0yE,EAAU1yE,QACXmjC,EACC,EAEA,EAEZ,IACI4kB,EADAnhE,EAAM6kC,EAAUinD,GAEpB,GAAgB,IAAZ1yE,EACF+nD,EAkBJ,SAAenhE,EAAKwQ,GAClB,IAAIiB,EAAIzR,EAAIo1C,QAAQrzC,aAChB0tE,EAAOj/D,EAAIpQ,OACX2rF,EAAQ/qB,EAAW,QAAQvyC,OAAO7uB,EAAOU,MAAM,IAAIg5B,SACnD87B,EAAO22B,EAAM3rF,OACb4rF,EAAQ,EAAI52B,EAChB,GAAIqa,EAAOh+D,EAAIu6E,EAAQ,EACrB,MAAM,IAAIrqF,MAAM,oBAElB,IAAIsqF,EAAKrsF,EAAOU,MAAMmR,EAAIg+D,EAAOuc,EAAQ,GACrCE,EAAQz6E,EAAI2jD,EAAO,EACnB8L,EAAOrsB,EAAYugB,GACnB+2B,EAAWzwE,EAAI9b,EAAOkJ,OAAO,CAACijF,EAAOE,EAAIrsF,EAAOU,MAAM,EAAG,GAAIkQ,GAAM07E,GAAQN,EAAI1qB,EAAMgrB,IACrFE,EAAa1wE,EAAIwlD,EAAM0qB,EAAIO,EAAU/2B,IACzC,OAAO,IAAIxkD,EAAGhR,EAAOkJ,OAAO,CAAClJ,EAAOU,MAAM,GAAI8rF,EAAYD,GAAW16E,IAhCvD46E,CAAKrsF,EAAKwQ,QACjB,GAAgB,IAAZ4I,EACT+nD,EAgCJ,SAAgBnhE,EAAKwQ,EAAK+rC,GACxB,IAKI0vC,EALAxc,EAAOj/D,EAAIpQ,OACXqR,EAAIzR,EAAIo1C,QAAQrzC,aACpB,GAAI0tE,EAAOh+D,EAAI,GACb,MAAM,IAAI9P,MAAM,oBAIhBsqF,EADE1vC,EACG38C,EAAOU,MAAMmR,EAAIg+D,EAAO,EAAG,KAMpC,SAAkB/sE,GAChB,IAIIyO,EAJA9G,EAAMzK,EAAOW,YAAYmC,GACzBQ,EAAI,EACJmyE,EAAQxgC,EAAkB,EAANnyC,GACpB4pF,EAAM,EAEV,KAAOppF,EAAIR,GACL4pF,IAAQjX,EAAMj1E,SAChBi1E,EAAQxgC,EAAkB,EAANnyC,GACpB4pF,EAAM,IAERn7E,EAAMkkE,EAAMiX,QAEVjiF,EAAInH,KAAOiO,GAGf,OAAO9G,EApBAkiF,CAAQ96E,EAAIg+D,EAAO,GAE1B,OAAO,IAAI7+D,EAAGhR,EAAOkJ,OAAO,CAAClJ,EAAOS,KAAK,CAAC,EAAGk8C,EAAU,EAAI,IAAK0vC,EAAIrsF,EAAOU,MAAM,GAAIkQ,GAAMiB,IA5C7E+6E,CAAMxsF,EAAKwQ,EAAK+rC,OACvB,IAAgB,IAAZnjC,EAMT,MAAM,IAAIzX,MAAM,mBAJhB,IADAw/D,EAAY,IAAIvwD,EAAGJ,IACLoH,IAAI5X,EAAIo1C,UAAY,EAChC,MAAM,IAAIzzC,MAAM,6BAKpB,OAAI46C,EACKzH,EAAIqsB,EAAWnhE,GAEf6rF,EAAW1qB,EAAWnhE,K,gBCpCjC,IAAI6kC,EAAY,EAAQ,KACpB+mD,EAAM,EAAQ,KACdlwE,EAAM,EAAQ,KACd9K,EAAK,EAAQ,KACbkkC,EAAM,EAAQ,KACdksB,EAAa,EAAQ,KACrB6qB,EAAa,EAAQ,KACrBjsF,EAAS,EAAQ,KAAeA,OAEpCb,EAAOC,QAAU,SAAyB2nC,EAAY9xB,EAAK0nC,GACzD,IAAInjC,EAEFA,EADEutB,EAAWvtB,QACHutB,EAAWvtB,QACZmjC,EACC,EAEA,EAGZ,IAKI/rC,EALAxQ,EAAM6kC,EAAU8B,GAChBl1B,EAAIzR,EAAIo1C,QAAQrzC,aACpB,GAAI8S,EAAIzU,OAASqR,GAAK,IAAIb,EAAGiE,GAAK+C,IAAI5X,EAAIo1C,UAAY,EACpD,MAAM,IAAIzzC,MAAM,oBAIhB6O,EADE+rC,EACIsvC,EAAW,IAAIj7E,EAAGiE,GAAM7U,GAExB80C,EAAIjgC,EAAK7U,GAEjB,IAAIysF,EAAU7sF,EAAOU,MAAMmR,EAAIjB,EAAIpQ,QAEnC,GADAoQ,EAAM5Q,EAAOkJ,OAAO,CAAC2jF,EAASj8E,GAAMiB,GACpB,IAAZ2H,EACF,OAUJ,SAAepZ,EAAKwQ,GAClB,IAAIiB,EAAIzR,EAAIo1C,QAAQrzC,aAChBgqF,EAAQ/qB,EAAW,QAAQvyC,OAAO7uB,EAAOU,MAAM,IAAIg5B,SACnD87B,EAAO22B,EAAM3rF,OACjB,GAAe,IAAXoQ,EAAI,GACN,MAAM,IAAI7O,MAAM,oBAElB,IAAIyqF,EAAa57E,EAAIlO,MAAM,EAAG8yD,EAAO,GACjC+2B,EAAW37E,EAAIlO,MAAM8yD,EAAO,GAC5B8L,EAAOxlD,EAAI0wE,EAAYR,EAAIO,EAAU/2B,IACrCs3B,EAAKhxE,EAAIywE,EAAUP,EAAI1qB,EAAMzvD,EAAI2jD,EAAO,IAC5C,GAoCF,SAAkBzsD,EAAGxE,GACnBwE,EAAI/I,EAAOS,KAAKsI,GAChBxE,EAAIvE,EAAOS,KAAK8D,GAChB,IAAIwoF,EAAM,EACNjqF,EAAMiG,EAAEvI,OACRuI,EAAEvI,SAAW+D,EAAE/D,SACjBusF,IACAjqF,EAAMsE,KAAKC,IAAI0B,EAAEvI,OAAQ+D,EAAE/D,SAE7B,IAAI8C,GAAK,EACT,OAASA,EAAIR,GACXiqF,GAAQhkF,EAAEzF,GAAKiB,EAAEjB,GAEnB,OAAOypF,EAjDHjkF,CAAQqjF,EAAOW,EAAGpqF,MAAM,EAAG8yD,IAC7B,MAAM,IAAIzzD,MAAM,oBAElB,IAAIuB,EAAIkyD,EACR,KAAiB,IAAVs3B,EAAGxpF,IACRA,IAEF,GAAgB,IAAZwpF,EAAGxpF,KACL,MAAM,IAAIvB,MAAM,oBAElB,OAAO+qF,EAAGpqF,MAAMY,GA/BPmpF,CAAKrsF,EAAKwQ,GACZ,GAAgB,IAAZ4I,EACT,OAgCJ,SAAgBpZ,EAAKwQ,EAAK+rC,GACxB,IAAIi/B,EAAKhrE,EAAIlO,MAAM,EAAG,GAClBY,EAAI,EACJqQ,EAAS,EACb,KAAoB,IAAb/C,EAAItN,MACT,GAAIA,GAAKsN,EAAIpQ,OAAQ,CACnBmT,IACA,MAGJ,IAAI04E,EAAKz7E,EAAIlO,MAAM,EAAGY,EAAI,IAEE,SAAvBs4E,EAAGr4E,SAAS,SAAsBo5C,GAAoC,SAAvBi/B,EAAGr4E,SAAS,QAAqBo5C,IACnFhpC,IAEE04E,EAAG7rF,OAAS,GACdmT,IAEF,GAAIA,EACF,MAAM,IAAI5R,MAAM,oBAElB,OAAO6O,EAAIlO,MAAMY,GArDRspF,CAAMxsF,EAAKwQ,EAAK+rC,GAClB,GAAgB,IAAZnjC,EACT,OAAO5I,EAEP,MAAM,IAAI7O,MAAM,qB,8BCvCpB,cAEA,SAASirF,IACP,MAAM,IAAIjrF,MAAM,8GAElB,IAAIkrF,EAAa,EAAQ,KACrBC,EAAc,EAAQ,KACtBltF,EAASitF,EAAWjtF,OACpBmtF,EAAmBF,EAAW1rF,WAC9B81B,EAASlvB,EAAOkvB,QAAUlvB,EAAOmvB,SACjC81D,EAAahmF,KAAK4E,IAAI,EAAG,IAAM,EACnC,SAASqhF,EAAcznF,EAAQpF,GAC7B,GAAsB,iBAAXoF,GAAuBA,GAAWA,EAC3C,MAAM,IAAI/E,UAAU,2BAGtB,GAAI+E,EAASwnF,GAAcxnF,EAAS,EAClC,MAAM,IAAI/E,UAAU,2BAGtB,GAAI+E,EAASunF,GAAoBvnF,EAASpF,EACxC,MAAM,IAAImB,WAAW,uBAIzB,SAAS0B,EAAYvC,EAAM8E,EAAQpF,GACjC,GAAoB,iBAATM,GAAqBA,GAASA,EACvC,MAAM,IAAID,UAAU,yBAGtB,GAAIC,EAAOssF,GAActsF,EAAO,EAC9B,MAAM,IAAID,UAAU,yBAGtB,GAAIC,EAAO8E,EAASpF,GAAUM,EAAOqsF,EACnC,MAAM,IAAIxrF,WAAW,oBA8BzB,SAAS2rF,EAAYrsF,EAAK2E,EAAQ9E,EAAM61B,GACtC,GAAIc,EAAQiX,QAAS,CACnB,IAAI6+C,EAAStsF,EAAIlB,OACbytF,EAAO,IAAI5rF,WAAW2rF,EAAQ3nF,EAAQ9E,GAE1C,OADAu2B,EAAOE,gBAAgBi2D,GACnB72D,OACFc,EAAQpB,UAAS,WACfM,EAAG,KAAM11B,MAINA,EAET,IAAI01B,EAYJ,OAFYu2D,EAAYpsF,GAClBkC,KAAK/B,EAAK2E,GACT3E,EAXLisF,EAAYpsF,GAAM,SAAU4S,EAAK/I,GAC/B,GAAI+I,EACF,OAAOijB,EAAGjjB,GAEZ/I,EAAM3H,KAAK/B,EAAK2E,GAChB+wB,EAAG,KAAM11B,MA9CVo2B,GAAUA,EAAOE,kBAAqBE,EAAQiX,SACjDtvC,EAAQuvE,WAMV,SAAqB1tE,EAAK2E,EAAQ9E,EAAM61B,GACtC,KAAK32B,EAAO6C,SAAS5B,IAAUA,aAAekH,EAAOvG,YACnD,MAAM,IAAIf,UAAU,iDAGtB,GAAsB,mBAAX+E,EACT+wB,EAAK/wB,EACLA,EAAS,EACT9E,EAAOG,EAAIT,YACN,GAAoB,mBAATM,EAChB61B,EAAK71B,EACLA,EAAOG,EAAIT,OAASoF,OACf,GAAkB,mBAAP+wB,EAChB,MAAM,IAAI91B,UAAU,oCAItB,OAFAwsF,EAAaznF,EAAQ3E,EAAIT,QACzB6C,EAAWvC,EAAM8E,EAAQ3E,EAAIT,QACtB8sF,EAAWrsF,EAAK2E,EAAQ9E,EAAM61B,IAtBrCv3B,EAAQwvE,eAoDV,SAAyB3tE,EAAK2E,EAAQ9E,QACd,IAAX8E,IACTA,EAAS,GAEX,KAAK5F,EAAO6C,SAAS5B,IAAUA,aAAekH,EAAOvG,YACnD,MAAM,IAAIf,UAAU,iDAGtBwsF,EAAaznF,EAAQ3E,EAAIT,aAEZU,IAATJ,IAAoBA,EAAOG,EAAIT,OAASoF,GAI5C,OAFAvC,EAAWvC,EAAM8E,EAAQ3E,EAAIT,QAEtB8sF,EAAWrsF,EAAK2E,EAAQ9E,MAhE/B1B,EAAQuvE,WAAaqe,EACrB5tF,EAAQwvE,eAAiBoe,K,0RCzC3B,IAAMS,EAAYl6E,EAAQ,KAEpB4vD,EAAW5vD,EAAQ,KAGvBlD,EACEkD,EAAQ,KADVlD,MAGIq9E,EAAoBn6E,EAAQ,KAE5Bo6E,EAAYp6E,EAAQ,KAEpBu9D,EAASv9D,EAAQ,KAEjBq6E,EAAWr6E,EAAQ,KAEnBs6E,EAAat6E,EAAQ,KAErBu6E,EAAUv6E,EAAQ,KAElBw6E,EAAQx6E,EAAQ,KAEhBiqD,EAAOjqD,EAAQ,KAEfvQ,EAAOuQ,EAAQ,KAEfy6E,EAAUz6E,EAAQ,KAElB06E,EAAQ16E,EAAQ,KAEhBuwD,EAAO,aAmXb3kE,EAAOC,QAAU,CACf0iD,aA3RF,SAAsB2hB,GAAsB,IAAX93B,EAAW,uDAAJ,GACtC,IAAKA,GAAwB,WAAhB,EAAOA,GAClB,MAAM,IAAI5pC,MAAM,2CAFwB,IAMxC89C,EAMElU,EANFkU,SACAlf,EAKEgL,EALFhL,SACAkiB,EAIElX,EAJFkX,UACAC,EAGEnX,EAHFmX,WATwC,EAYtCnX,EAFFs8B,aAVwC,MAUhC,KAVgC,IAYtCt8B,EADFjS,cAXwC,SAapCw0D,EAAiB,CACrB55E,QAAS,GACT65E,WAAYhrB,EAAS3lB,eAAeimB,GACpCA,YACA5gB,YACAC,cAiBF,OAdIppB,EACFw0D,EAAe7yD,QAAU,CACvBwkB,WACAlf,WACAmnB,GAAI,EACJniB,UAAW,MACXgjC,eAAe,GAER9oB,EACTquC,EAAe55E,QAAQswC,cAAgB6oC,EAAUrmC,wBAAwBvH,EAAUlf,GAC1EsnC,GAA0B,WAAjB,EAAOA,KACzBimB,EAAe55E,QAAQswC,cAAgB6oC,EAAUnmC,wBAAwB2gB,IAGpE,CAWLmmB,SAAU,SAAkBD,EAAYE,EAAkB7gE,GACxD,IAAM8gE,EAAcj+E,EAAM69E,EAAgB1gE,GAAW,IACrD,OAAOxqB,EAAKorF,SAASD,EAAYE,EAAkBC,IAYrDC,gBAAiB,SAAyBC,EAAShhE,GACjD,IAAMihE,EAAgBp+E,EAAM69E,EAAgB1gE,GAAW,IACvD,OAAOmgE,EAAUY,gBAAgBC,EAASC,IAa5C1qB,iBAAkB,SAA0B2qB,EAAgBlhE,GAC1D,GAAmB,oBAAR8O,MAA+B,IAARA,IAChC,MAAM,IAAIv6B,MAAM,uDAEhB,IAAM4sF,EAAep7E,EAAQ,KAEvBk7E,EAAgBp+E,EAAM69E,EAAgB1gE,GAAW,IACvD,OAAOmhE,EAAa5qB,iBAAiB2qB,EAAgBD,IAgBzDlqB,kBAAmB,SAA2BmqB,EAAgBlhE,GAA0B,IAAjBoe,EAAiB,uDAANk4B,EAChF,GAAmB,oBAARxnC,MAA+B,IAARA,IAChC,MAAM,IAAIv6B,MAAM,wDAEhB,IAAM4sF,EAAep7E,EAAQ,KAEvBk7E,EAAgBp+E,EAAM69E,EAAgB1gE,GAAW,IACvD,OAAOmhE,EAAapqB,kBAAkBmqB,EAAgBD,EAAe7iD,IAqBzEgjD,cAAe,SAAuBT,EAAYxrC,EAAgBn1B,GAChE,IAAMqhE,EAAgBx+E,EAAM69E,EAAgB1gE,GAAW,IACvD,OAAOsjD,EAAO8d,cAAcT,EAAYxrC,EAAgBksC,IAY1DC,WAAY,SAAoBX,EAAY3gE,GAC1C,IAAMuhE,EAAgB1+E,EAAM69E,EAAgB1gE,GAAW,IACvD,OAAOogE,EAASkB,WAAWX,EAAYY,IAezCC,OAAQ,SAAgBb,EAAY3gE,GAClC,IAAMyhE,EAAgB5+E,EAAM69E,EAAgB1gE,GAAW,IACvD,OAAOqgE,EAAWqB,WAAWf,EAAYc,IAY3CE,qBAAsB,SAA8BhB,EAAY3gE,GAC9D,IAAM4hE,EAAa/+E,EAAM69E,EAAgB1gE,GAAW,IACpD,OAAOkgE,EAAkByB,qBAAqBhB,EAAYiB,IAe5DC,gBAAiB,SAAyBX,EAAgBlhE,GACxD,IAAM4hE,EAAa/+E,EAAM69E,EAAgB1gE,GAAW,IAGpD,GAFA4hE,EAAWvsB,OAASusB,EAAWvsB,QAAU,SAErC,CAAC,SAAU,QAAQ/9D,QAAQsqF,EAAWvsB,QAAU,EAClD,MAAM,IAAI9gE,MAAM,mBAAqBqtF,EAAWvsB,QAGlD,MAA6B,SAAtBusB,EAAWvsB,OAAoBirB,EAAQwB,sBAAsBZ,EAAgBU,GAActB,EAAQyB,sBAAsBb,EAAgBU,IAWlJI,oBAAqB,SAA6Bd,EAAgBlhE,GAChE,IAAM4hE,EAAa/+E,EAAM69E,EAAgB1gE,GAAW,IACpD,OAAOsgE,EAAQ2B,YAAYf,EAAgBU,IAW7CM,kBAAmB,SAA2BhB,EAAgBlhE,GAC5D,IAAImiE,EAAat/E,EAAM69E,EAAgB1gE,GAAW,IAClD,OAAOwgE,EAAQ0B,kBAAkBhB,EAAgBiB,IASnDC,SAAU,SAAkBpiE,GAC1B,IAAM4hE,EAAa/+E,EAAM69E,EAAgB1gE,GAAW,IACpD,OAAOugE,EAAM6B,SAASR,IAaxBS,SAAU,SAAkB1B,EAAYE,EAAkB7gE,GACxD,IAAMsiE,EAAcz/E,EAAM69E,EAAgB1gE,GAAW,IACrD,OAAOgwC,EAAKqyB,SAAS1B,EAAYE,EAAkByB,IAerDC,gBAAiB,SAAyBrB,EAAgBvrF,EAAMqqB,GAC9D,IAAMmiE,EAAat/E,EAAM69E,EAAgB1gE,GAAW,IACpD,OAAOwgE,EAAQ+B,gBAAgBrB,EAAgBvrF,EAAMwsF,IAUvDnuC,KAAM,SAAc2sC,EAAY3gE,GAC9B,IAAM4hE,EAAa/+E,EAAM69E,EAAgB1gE,GAAW,IACpD,OAAOygE,EAAMzqB,QAAQ2qB,EAAYiB,Q,6BCnYvCjwF,EAAOC,QAAU,SAAkBsgD,EAAMd,GAIvC,GAHAA,EAAWA,EAASjzB,MAAM,KAAK,KAC/B+zB,GAAQA,GAEG,OAAO,EAElB,OAAQd,GACN,IAAK,OACL,IAAK,KACL,OAAgB,KAATc,EAEP,IAAK,QACL,IAAK,MACL,OAAgB,MAATA,EAEP,IAAK,MACL,OAAgB,KAATA,EAEP,IAAK,SACL,OAAgB,KAATA,EAEP,IAAK,OACL,OAAO,EAGT,OAAgB,IAATA,I,6BClCT,IAAIwrB,EAAMjsE,OAAOO,UAAU0P,eAU3B,SAASktB,EAAOtQ,GACd,IACE,OAAOyxB,mBAAmBzxB,EAAMtd,QAAQ,MAAO,MAC/C,MAAOlG,GACP,OAAO,MAoGXlJ,EAAQo8C,UA1CR,SAAwB54C,EAAKsmC,GAC3BA,EAASA,GAAU,GAEnB,IACIxpC,EACAU,EAFA4vF,EAAQ,GASZ,IAAK5vF,IAFD,iBAAoB8oC,IAAQA,EAAS,KAE7BtmC,EACV,GAAIsoE,EAAInmE,KAAKnC,EAAKxC,GAAM,CAkBtB,IAjBAV,EAAQkD,EAAIxC,KAMGV,UAAqCkF,MAAMlF,KACxDA,EAAQ,IAGVU,EAAMgiD,mBAAmBhiD,GACzBV,EAAQ0iD,mBAAmB1iD,GAMf,OAARU,GAA0B,OAAVV,EAAgB,SACpCswF,EAAMxpF,KAAKpG,EAAK,IAAKV,GAIzB,OAAOswF,EAAMxvF,OAAS0oC,EAAS8mD,EAAMnmF,KAAK,KAAO,IAOnDzK,EAAQggD,MA3ER,SAAqBb,GAKnB,IAJA,IAEIyB,EAFAf,EAAS,sBACT3uC,EAAS,GAGN0vC,EAAOf,EAAOpxB,KAAK0wB,IAAQ,CAChC,IAAIn+C,EAAMg8B,EAAO4jB,EAAK,IAClBtgD,EAAQ08B,EAAO4jB,EAAK,IAUZ,OAAR5/C,GAA0B,OAAVV,GAAkBU,KAAOkQ,IAC7CA,EAAOlQ,GAAOV,GAGhB,OAAO4Q,I,6BC7DT,IAAM2/E,EAAY18E,EAAQ,K,GAItBA,EAAQ,KADVlD,MAOEkD,EAAQ,MAHVC,E,EAAAA,mBACAK,E,EAAAA,kBACAO,E,EAAAA,uB,EAMEb,EAAQ,KAFVqqC,E,EAAAA,cACAR,E,EAAAA,c,EAME7pC,EAAQ,KAFVktC,E,EAAAA,SACAE,E,EAAAA,qB,EAQEptC,EAAQ,KAJV2uC,E,EAAAA,WACAG,E,EAAAA,QACAK,E,EAAAA,sBACAS,E,EAAAA,QAmDFhkD,EAAOC,QAAU,CACf+vF,qBAjDF,SAA8BhB,EAAY3gE,GACxC,IAAMm1B,EAAiB,CACrBpD,IAAK8C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWisC,GAAa,KACxDp4D,OAAQ,WACRzhB,QAAS,CACPovD,OAAQ,aACRC,MAAOn2C,EAAQ0iE,KAAO,WAAa,GAErC3qC,aAAc,QAEZ9xC,EAAW,KAEf,OADAivC,EAAsBC,EAAgBn1B,GAC/B21B,EAAQR,GAAgByD,KAAK5yC,GAAoB4yC,MAAK,SAAA9+C,GAE3D,OADAmM,EAAWnM,EACJA,EAAInE,QACVijD,KAAK3F,GAAU2F,MAAK,SAAA91C,GAAM,OAG/B,SAA2BA,EAAQ6/E,EAAgBC,GAAiC,IAApB/7E,EAAoB,wDAC5Eg8E,EAAmBJ,EAAUpmF,KAAKsmF,EAAgBC,EAAa,KAC/DE,EAAaL,EAAUpmF,KAAKsmF,EAAgB,KAIpCI,EAEVjgF,EAHFiwC,YACE9sC,SAGJ,OAAO88E,EACNv8E,QAAO,SAAA0nB,GACN,IAAImiB,EAAOniB,EAAKmiB,KAEhB,OADAA,EAAOoyC,EAAUpmF,KAAKuzC,EAAcQ,EAAcC,IAAQ,QAC1CyyC,GAAczyC,IAASwyC,KAExC73D,KAAI,SAAAkD,GAEH,IAAMmiB,EAAOD,EAAcliB,EAAKmiB,MAItBnwB,EAENgO,EAHF4nC,SACE1qB,KAIE1kC,EAAgCkpC,EAAN,MAAfkzC,EAAmCzyC,EAAsBoyC,EAAU/wC,SAASoxC,EAAYzyC,IACzG,OAAO8C,EAAqBjzB,EAAOxZ,EAAUG,MA7Bdm8E,CAAkBlgF,EAAQkd,EAAQ2gE,WAAYA,EAAY3gE,EAAQo2C,YAAUxd,MAAK,SAAAtyC,GAAK,OAAIM,EAAuBX,EAAUK,EAAO0Z,EAAQo2C,YAAUxd,MAAK,SAAAtyC,GAAK,OAAI0Z,EAAQzZ,KAAOF,EAAkBC,EAAO0Z,EAAQzZ,MAAQD,Q,iBC9C7P,YAqBA,IAAIu9D,EAA4BpyE,OAAOoyE,2BACrC,SAAmCzuE,GAGjC,IAFA,IAAIwqB,EAAOnuB,OAAOmuB,KAAKxqB,GACnB6tF,EAAc,GACTntF,EAAI,EAAGA,EAAI8pB,EAAK5sB,OAAQ8C,IAC/BmtF,EAAYrjE,EAAK9pB,IAAMrE,OAAOyxE,yBAAyB9tE,EAAKwqB,EAAK9pB,IAEnE,OAAOmtF,GAGPC,EAAe,WACnBtxF,EAAQyjE,OAAS,SAASjT,GACxB,IAAKrgD,EAASqgD,GAAI,CAEhB,IADA,IAAI+gC,EAAU,GACLrtF,EAAI,EAAGA,EAAIkG,UAAUhJ,OAAQ8C,IACpCqtF,EAAQnqF,KAAKkD,EAAQF,UAAUlG,KAEjC,OAAOqtF,EAAQ9mF,KAAK,KAGlBvG,EAAI,EAmBR,IAnBA,IACI0sB,EAAOxmB,UACP1G,EAAMktB,EAAKxvB,OACX8F,EAAMjB,OAAOuqD,GAAGphD,QAAQkiF,GAAc,SAAS1nF,GACjD,GAAU,OAANA,EAAY,MAAO,IACvB,GAAI1F,GAAKR,EAAK,OAAOkG,EACrB,OAAQA,GACN,IAAK,KAAM,OAAO3D,OAAO2qB,EAAK1sB,MAC9B,IAAK,KAAM,OAAOuC,OAAOmqB,EAAK1sB,MAC9B,IAAK,KACH,IACE,OAAOi4C,KAAKC,UAAUxrB,EAAK1sB,MAC3B,MAAO2gB,GACP,MAAO,aAEX,QACE,OAAOjb,MAGJA,EAAIgnB,EAAK1sB,GAAIA,EAAIR,EAAKkG,EAAIgnB,IAAO1sB,GACpCg3B,EAAOtxB,KAAO6F,EAAS7F,GACzB1C,GAAO,IAAM0C,EAEb1C,GAAO,IAAMoD,EAAQV,GAGzB,OAAO1C,GAOTlH,EAAQoV,UAAY,SAASxF,EAAI4B,GAC/B,QAAuB,IAAZ6mB,IAAqD,IAA1BA,EAAQm5D,cAC5C,OAAO5hF,EAIT,QAAuB,IAAZyoB,EACT,OAAO,WACL,OAAOr4B,EAAQoV,UAAUxF,EAAI4B,GAAK5I,MAAMlG,KAAM0H,YAIlD,IAAIuoB,GAAS,EAeb,OAdA,WACE,IAAKA,EAAQ,CACX,GAAI0F,EAAQo5D,iBACV,MAAM,IAAI9uF,MAAM6O,GACP6mB,EAAQq5D,iBACjB7+D,QAAQqZ,MAAM16B,GAEdqhB,QAAQkB,MAAMviB,GAEhBmhB,GAAS,EAEX,OAAO/iB,EAAGhH,MAAMlG,KAAM0H,aAO1B,IACIunF,EADAC,EAAS,GA6Bb,SAAStnF,EAAQ9G,EAAK+oC,GAEpB,IAAI3iB,EAAM,CACRioE,KAAM,GACNC,QAASC,GAkBX,OAfI3nF,UAAUhJ,QAAU,IAAGwoB,EAAIwoD,MAAQhoE,UAAU,IAC7CA,UAAUhJ,QAAU,IAAGwoB,EAAIooE,OAAS5nF,UAAU,IAC9C6wB,EAAUsR,GAEZ3iB,EAAIqoE,WAAa1lD,EACRA,GAETvsC,EAAQkyF,QAAQtoE,EAAK2iB,GAGnB/8B,EAAYoa,EAAIqoE,cAAaroE,EAAIqoE,YAAa,GAC9CziF,EAAYoa,EAAIwoD,SAAQxoD,EAAIwoD,MAAQ,GACpC5iE,EAAYoa,EAAIooE,UAASpoE,EAAIooE,QAAS,GACtCxiF,EAAYoa,EAAIyoD,iBAAgBzoD,EAAIyoD,eAAgB,GACpDzoD,EAAIooE,SAAQpoE,EAAIkoE,QAAUK,GACvBC,EAAYxoE,EAAKpmB,EAAKomB,EAAIwoD,OAoCnC,SAAS+f,EAAiBjrF,EAAKmrF,GAC7B,IAAIC,EAAQhoF,EAAQioF,OAAOF,GAE3B,OAAIC,EACK,KAAYhoF,EAAQ0nF,OAAOM,GAAO,GAAK,IAAMprF,EAC7C,KAAYoD,EAAQ0nF,OAAOM,GAAO,GAAK,IAEvCprF,EAKX,SAAS6qF,EAAe7qF,EAAKmrF,GAC3B,OAAOnrF,EAeT,SAASkrF,EAAYxoE,EAAKtpB,EAAOkyF,GAG/B,GAAI5oE,EAAIyoD,eACJ/xE,GACAoP,EAAWpP,EAAMgK,UAEjBhK,EAAMgK,UAAYtK,EAAQsK,WAExBhK,EAAMD,aAAeC,EAAMD,YAAYD,YAAcE,GAAQ,CACjE,IAAI8K,EAAM9K,EAAMgK,QAAQkoF,EAAc5oE,GAItC,OAHKzZ,EAAS/E,KACZA,EAAMgnF,EAAYxoE,EAAKxe,EAAKonF,IAEvBpnF,EAIT,IAAI0wC,EA+FN,SAAyBlyB,EAAKtpB,GAC5B,GAAIkP,EAAYlP,GACd,OAAOspB,EAAIkoE,QAAQ,YAAa,aAClC,GAAI3hF,EAAS7P,GAAQ,CACnB,IAAImyF,EAAS,IAAOt2C,KAAKC,UAAU97C,GAAO8O,QAAQ,SAAU,IAClBA,QAAQ,KAAM,OACdA,QAAQ,OAAQ,KAAO,IACjE,OAAOwa,EAAIkoE,QAAQW,EAAQ,UAE7B,GAAIriF,EAAS9P,GACX,OAAOspB,EAAIkoE,QAAQ,GAAKxxF,EAAO,UACjC,GAAI26B,EAAU36B,GACZ,OAAOspB,EAAIkoE,QAAQ,GAAKxxF,EAAO,WAEjC,GAAI46B,EAAO56B,GACT,OAAOspB,EAAIkoE,QAAQ,OAAQ,QA9GbY,CAAgB9oE,EAAKtpB,GACrC,GAAIw7C,EACF,OAAOA,EAIT,IAAI9tB,EAAOnuB,OAAOmuB,KAAK1tB,GACnBqyF,EApCN,SAAqB9vF,GACnB,IAAI63B,EAAO,GAMX,OAJA73B,EAAM8M,SAAQ,SAAS9L,EAAK+uF,GAC1Bl4D,EAAK72B,IAAO,KAGP62B,EA6BWm4D,CAAY7kE,GAQ9B,GANIpE,EAAIqoE,aACNjkE,EAAOnuB,OAAOmxB,oBAAoB1wB,IAKhCg7B,EAAQh7B,KACJ0tB,EAAKtoB,QAAQ,YAAc,GAAKsoB,EAAKtoB,QAAQ,gBAAkB,GACrE,OAAOotF,EAAYxyF,GAIrB,GAAoB,IAAhB0tB,EAAK5sB,OAAc,CACrB,GAAIsO,EAAWpP,GAAQ,CACrB,IAAIwT,EAAOxT,EAAMwT,KAAO,KAAOxT,EAAMwT,KAAO,GAC5C,OAAO8V,EAAIkoE,QAAQ,YAAch+E,EAAO,IAAK,WAE/C,GAAIunB,EAAS/6B,GACX,OAAOspB,EAAIkoE,QAAQlkE,OAAOxtB,UAAU+D,SAASwB,KAAKrF,GAAQ,UAE5D,GAAI+P,EAAO/P,GACT,OAAOspB,EAAIkoE,QAAQ9xB,KAAK5/D,UAAU+D,SAASwB,KAAKrF,GAAQ,QAE1D,GAAIg7B,EAAQh7B,GACV,OAAOwyF,EAAYxyF,GAIvB,IA2CIqsB,EA3CA1U,EAAO,GAAIpV,GAAQ,EAAOkwF,EAAS,CAAC,IAAK,MAGzC7wF,EAAQ5B,KACVuC,GAAQ,EACRkwF,EAAS,CAAC,IAAK,MAIbrjF,EAAWpP,MAEb2X,EAAO,cADC3X,EAAMwT,KAAO,KAAOxT,EAAMwT,KAAO,IACf,KAkB5B,OAdIunB,EAAS/6B,KACX2X,EAAO,IAAM2V,OAAOxtB,UAAU+D,SAASwB,KAAKrF,IAI1C+P,EAAO/P,KACT2X,EAAO,IAAM+nD,KAAK5/D,UAAU4yF,YAAYrtF,KAAKrF,IAI3Cg7B,EAAQh7B,KACV2X,EAAO,IAAM66E,EAAYxyF,IAGP,IAAhB0tB,EAAK5sB,QAAkByB,GAAyB,GAAhBvC,EAAMc,OAItCoxF,EAAe,EACbn3D,EAAS/6B,GACJspB,EAAIkoE,QAAQlkE,OAAOxtB,UAAU+D,SAASwB,KAAKrF,GAAQ,UAEnDspB,EAAIkoE,QAAQ,WAAY,YAInCloE,EAAIioE,KAAKzqF,KAAK9G,GAIZqsB,EADE9pB,EAsCN,SAAqB+mB,EAAKtpB,EAAOkyF,EAAcG,EAAa3kE,GAE1D,IADA,IAAIrB,EAAS,GACJzoB,EAAI,EAAG2L,EAAIvP,EAAMc,OAAQ8C,EAAI2L,IAAK3L,EACrC4L,EAAexP,EAAO2F,OAAO/B,IAC/ByoB,EAAOvlB,KAAK6rF,EAAerpE,EAAKtpB,EAAOkyF,EAAcG,EACjD1sF,OAAO/B,IAAI,IAEfyoB,EAAOvlB,KAAK,IAShB,OANA4mB,EAAKre,SAAQ,SAAS3O,GACfA,EAAIwJ,MAAM,UACbmiB,EAAOvlB,KAAK6rF,EAAerpE,EAAKtpB,EAAOkyF,EAAcG,EACjD3xF,GAAK,OAGN2rB,EArDIumE,CAAYtpE,EAAKtpB,EAAOkyF,EAAcG,EAAa3kE,GAEnDA,EAAKoL,KAAI,SAASp4B,GACzB,OAAOiyF,EAAerpE,EAAKtpB,EAAOkyF,EAAcG,EAAa3xF,EAAK6B,MAItE+mB,EAAIioE,KAAKl9D,MA6GX,SAA8BhI,EAAQ1U,EAAM86E,GAQ1C,GANapmE,EAAOw2B,QAAO,SAASt2B,EAAMygE,GAGxC,OADIA,EAAI5nF,QAAQ,OAAS,GAAGytF,EACrBtmE,EAAOygE,EAAIl+E,QAAQ,kBAAmB,IAAIhO,OAAS,IACzD,GAEU,GACX,OAAO2xF,EAAO,IACG,KAAT96E,EAAc,GAAKA,EAAO,OAC3B,IACA0U,EAAOliB,KAAK,SACZ,IACAsoF,EAAO,GAGhB,OAAOA,EAAO,GAAK96E,EAAO,IAAM0U,EAAOliB,KAAK,MAAQ,IAAMsoF,EAAO,GA5H1DK,CAAqBzmE,EAAQ1U,EAAM86E,IAxBjCA,EAAO,GAAK96E,EAAO86E,EAAO,GA+CrC,SAASD,EAAYxyF,GACnB,MAAO,IAAMqC,MAAMvC,UAAU+D,SAASwB,KAAKrF,GAAS,IAwBtD,SAAS2yF,EAAerpE,EAAKtpB,EAAOkyF,EAAcG,EAAa3xF,EAAK6B,GAClE,IAAIiR,EAAM5M,EAAKmsF,EAsCf,IArCAA,EAAOxzF,OAAOyxE,yBAAyBhxE,EAAOU,IAAQ,CAAEV,MAAOA,EAAMU,KAC5DuU,IAELrO,EADEmsF,EAAKxkF,IACD+a,EAAIkoE,QAAQ,kBAAmB,WAE/BloE,EAAIkoE,QAAQ,WAAY,WAG5BuB,EAAKxkF,MACP3H,EAAM0iB,EAAIkoE,QAAQ,WAAY,YAG7BhiF,EAAe6iF,EAAa3xF,KAC/B8S,EAAO,IAAM9S,EAAM,KAEhBkG,IACC0iB,EAAIioE,KAAKnsF,QAAQ2tF,EAAK/yF,OAAS,GAE/B4G,EADEg0B,EAAOs3D,GACHJ,EAAYxoE,EAAKypE,EAAK/yF,MAAO,MAE7B8xF,EAAYxoE,EAAKypE,EAAK/yF,MAAOkyF,EAAe,IAE5C9sF,QAAQ,OAAS,IAErBwB,EADErE,EACIqE,EAAIqlB,MAAM,MAAM6M,KAAI,SAASyuC,GACjC,MAAO,KAAOA,KACbp9D,KAAK,MAAM3D,OAAO,GAEf,KAAOI,EAAIqlB,MAAM,MAAM6M,KAAI,SAASyuC,GACxC,MAAO,MAAQA,KACdp9D,KAAK,OAIZvD,EAAM0iB,EAAIkoE,QAAQ,aAAc,YAGhCtiF,EAAYsE,GAAO,CACrB,GAAIjR,GAAS7B,EAAIwJ,MAAM,SACrB,OAAOtD,GAET4M,EAAOqoC,KAAKC,UAAU,GAAKp7C,IAClBwJ,MAAM,iCACbsJ,EAAOA,EAAKhN,OAAO,EAAGgN,EAAK1S,OAAS,GACpC0S,EAAO8V,EAAIkoE,QAAQh+E,EAAM,UAEzBA,EAAOA,EAAK1E,QAAQ,KAAM,OACdA,QAAQ,OAAQ,KAChBA,QAAQ,WAAY,KAChC0E,EAAO8V,EAAIkoE,QAAQh+E,EAAM,WAI7B,OAAOA,EAAO,KAAO5M,EA2BvB,SAAShF,EAAQ+rC,GACf,OAAO/iC,MAAMhJ,QAAQ+rC,GAIvB,SAAShT,EAAU/5B,GACjB,MAAsB,kBAARA,EAIhB,SAASg6B,EAAOh6B,GACd,OAAe,OAARA,EAST,SAASkP,EAASlP,GAChB,MAAsB,iBAARA,EAIhB,SAASiP,EAASjP,GAChB,MAAsB,iBAARA,EAShB,SAASsO,EAAYtO,GACnB,YAAe,IAARA,EAIT,SAASm6B,EAASrX,GAChB,OAAOvU,EAASuU,IAA8B,oBAAvBgX,EAAehX,GAIxC,SAASvU,EAASvO,GAChB,MAAsB,iBAARA,GAA4B,OAARA,EAIpC,SAASmP,EAAOmG,GACd,OAAO/G,EAAS+G,IAA4B,kBAAtBwkB,EAAexkB,GAIvC,SAAS8kB,EAAQpyB,GACf,OAAOuG,EAASvG,KACW,mBAAtB8xB,EAAe9xB,IAA2BA,aAAavG,OAI9D,SAAS+M,EAAWxO,GAClB,MAAsB,mBAARA,EAgBhB,SAAS85B,EAAe1d,GACtB,OAAOzd,OAAOO,UAAU+D,SAASwB,KAAK2X,GAIxC,SAAS66C,EAAI/yD,GACX,OAAOA,EAAI,GAAK,IAAMA,EAAEjB,SAAS,IAAMiB,EAAEjB,SAAS,IApbpDnE,EAAQ0pD,SAAW,SAAS76C,GAI1B,GAHIW,EAAYmiF,KACdA,EAAet5D,EAAQi7D,IAAIC,YAAc,IAC3C1kF,EAAMA,EAAIg3C,eACL+rC,EAAO/iF,GACV,GAAI,IAAI+e,OAAO,MAAQ/e,EAAM,MAAO,KAAKksC,KAAK42C,GAAe,CAC3D,IAAI6B,EAAMn7D,EAAQm7D,IAClB5B,EAAO/iF,GAAO,WACZ,IAAI2C,EAAMxR,EAAQyjE,OAAO76D,MAAM5I,EAASoK,WACxCyoB,QAAQkB,MAAM,YAAallB,EAAK2kF,EAAKhiF,SAGvCogF,EAAO/iF,GAAO,aAGlB,OAAO+iF,EAAO/iF,IAoChB7O,EAAQsK,QAAUA,EAIlBA,EAAQ0nF,OAAS,CACf,KAAS,CAAC,EAAG,IACb,OAAW,CAAC,EAAG,IACf,UAAc,CAAC,EAAG,IAClB,QAAY,CAAC,EAAG,IAChB,MAAU,CAAC,GAAI,IACf,KAAS,CAAC,GAAI,IACd,MAAU,CAAC,GAAI,IACf,KAAS,CAAC,GAAI,IACd,KAAS,CAAC,GAAI,IACd,MAAU,CAAC,GAAI,IACf,QAAY,CAAC,GAAI,IACjB,IAAQ,CAAC,GAAI,IACb,OAAW,CAAC,GAAI,KAIlB1nF,EAAQioF,OAAS,CACf,QAAW,OACX,OAAU,SACV,QAAW,SACX,UAAa,OACb,KAAQ,OACR,OAAU,QACV,KAAQ,UAER,OAAU,OAkRZvyF,EAAQkC,QAAUA,EAKlBlC,EAAQi7B,UAAYA,EAKpBj7B,EAAQk7B,OAASA,EAKjBl7B,EAAQm7B,kBAHR,SAA2Bj6B,GACzB,OAAc,MAAPA,GAOTlB,EAAQoQ,SAAWA,EAKnBpQ,EAAQmQ,SAAWA,EAKnBnQ,EAAQo7B,SAHR,SAAkBl6B,GAChB,MAAsB,iBAARA,GAOhBlB,EAAQwP,YAAcA,EAKtBxP,EAAQq7B,SAAWA,EAKnBr7B,EAAQyP,SAAWA,EAKnBzP,EAAQqQ,OAASA,EAMjBrQ,EAAQs7B,QAAUA,EAKlBt7B,EAAQ0P,WAAaA,EAUrB1P,EAAQu7B,YARR,SAAqBr6B,GACnB,OAAe,OAARA,GACe,kBAARA,GACQ,iBAARA,GACQ,iBAARA,GACQ,iBAARA,QACQ,IAARA,GAIhBlB,EAAQyD,SAAW,EAAQ,KAY3B,IAAIgwF,EAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACxD,MAAO,MAAO,OAG5B,SAASC,IACP,IAAIl9E,EAAI,IAAIwpD,KACRF,EAAO,CAAC3H,EAAI3hD,EAAEm9E,YACNx7B,EAAI3hD,EAAEo9E,cACNz7B,EAAI3hD,EAAEq9E,eAAeppF,KAAK,KACtC,MAAO,CAAC+L,EAAEs9E,UAAWL,EAAOj9E,EAAEu9E,YAAaj0B,GAAMr1D,KAAK,KAqCxD,SAASqF,EAAetM,EAAKg2C,GAC3B,OAAO35C,OAAOO,UAAU0P,eAAenK,KAAKnC,EAAKg2C,GAjCnDx5C,EAAQgxE,IAAM,WACZn+C,QAAQm+C,IAAI,UAAW0iB,IAAa1zF,EAAQyjE,OAAO76D,MAAM5I,EAASoK,aAiBpEpK,EAAQwV,SAAW,EAAQ,KAE3BxV,EAAQkyF,QAAU,SAASvxC,EAAQxjC,GAEjC,IAAKA,IAAQ1N,EAAS0N,GAAM,OAAOwjC,EAInC,IAFA,IAAI3yB,EAAOnuB,OAAOmuB,KAAK7Q,GACnBjZ,EAAI8pB,EAAK5sB,OACN8C,KACLy8C,EAAO3yB,EAAK9pB,IAAMiZ,EAAI6Q,EAAK9pB,IAE7B,OAAOy8C,GAOT,IAAIqzC,EAA6C,oBAAX1qF,OAAyBA,OAAO,8BAA2BxH,EA0DjG,SAASmyF,EAAsBjtB,EAAQzvC,GAKrC,IAAKyvC,EAAQ,CACX,IAAIktB,EAAY,IAAIvxF,MAAM,2CAC1BuxF,EAAUltB,OAASA,EACnBA,EAASktB,EAEX,OAAO38D,EAAGyvC,GAlEZhnE,EAAQm0F,UAAY,SAAmBxqB,GACrC,GAAwB,mBAAbA,EACT,MAAM,IAAIloE,UAAU,oDAEtB,GAAIuyF,GAA4BrqB,EAASqqB,GAA2B,CAClE,IAAIpkF,EACJ,GAAkB,mBADdA,EAAK+5D,EAASqqB,IAEhB,MAAM,IAAIvyF,UAAU,iEAKtB,OAHA5B,OAAO2J,eAAeoG,EAAIokF,EAA0B,CAClD1zF,MAAOsP,EAAIrP,YAAY,EAAOC,UAAU,EAAOC,cAAc,IAExDmP,EAGT,SAASA,IAQP,IAPA,IAAIwkF,EAAgBC,EAChBttC,EAAU,IAAIz1B,SAAQ,SAAUC,EAASC,GAC3C4iE,EAAiB7iE,EACjB8iE,EAAgB7iE,KAGdZ,EAAO,GACF1sB,EAAI,EAAGA,EAAIkG,UAAUhJ,OAAQ8C,IACpC0sB,EAAKxpB,KAAKgD,UAAUlG,IAEtB0sB,EAAKxpB,MAAK,SAAUkN,EAAKhU,GACnBgU,EACF+/E,EAAc//E,GAEd8/E,EAAe9zF,MAInB,IACEqpE,EAAS/gE,MAAMlG,KAAMkuB,GACrB,MAAOtc,GACP+/E,EAAc//E,GAGhB,OAAOyyC,EAQT,OALAlnD,OAAO83B,eAAe/nB,EAAI/P,OAAO8zB,eAAeg2C,IAE5CqqB,GAA0Bn0F,OAAO2J,eAAeoG,EAAIokF,EAA0B,CAChF1zF,MAAOsP,EAAIrP,YAAY,EAAOC,UAAU,EAAOC,cAAc,IAExDZ,OAAOqyE,iBACZtiE,EACAqiE,EAA0BtI,KAI9B3pE,EAAQm0F,UAAUziB,OAASsiB,EAiD3Bh0F,EAAQs0F,YAlCR,SAAqB3qB,GACnB,GAAwB,mBAAbA,EACT,MAAM,IAAIloE,UAAU,oDAMtB,SAAS8yF,IAEP,IADA,IAAI3jE,EAAO,GACF1sB,EAAI,EAAGA,EAAIkG,UAAUhJ,OAAQ8C,IACpC0sB,EAAKxpB,KAAKgD,UAAUlG,IAGtB,IAAIswF,EAAU5jE,EAAK+D,MACnB,GAAuB,mBAAZ6/D,EACT,MAAM,IAAI/yF,UAAU,8CAEtB,IAAIuY,EAAOtX,KACP60B,EAAK,WACP,OAAOi9D,EAAQ5rF,MAAMoR,EAAM5P,YAI7Bu/D,EAAS/gE,MAAMlG,KAAMkuB,GAClBo2B,MAAK,SAAS57C,GAAOitB,EAAQpB,SAASM,EAAI,KAAMnsB,MAC3C,SAASqpF,GAAOp8D,EAAQpB,SAASg9D,EAAuBQ,EAAKl9D,MAMvE,OAHA13B,OAAO83B,eAAe48D,EAAe10F,OAAO8zB,eAAeg2C,IAC3D9pE,OAAOqyE,iBAAiBqiB,EACAtiB,EAA0BtI,IAC3C4qB,K,gCC5rBTx0F,EAAOC,QAAU,SAAkBkB,GACjC,OAAOA,GAAsB,iBAARA,GACI,mBAAbA,EAAI0C,MACS,mBAAb1C,EAAIS,MACc,mBAAlBT,EAAIqL,Y,cCJW,mBAAlB1M,OAAOC,OAEhBC,EAAOC,QAAU,SAAkBC,EAAMC,GACvCD,EAAKE,OAASD,EACdD,EAAKG,UAAYP,OAAOC,OAAOI,EAAUE,UAAW,CAClDC,YAAa,CACXC,MAAOL,EACPM,YAAY,EACZC,UAAU,EACVC,cAAc,MAMpBV,EAAOC,QAAU,SAAkBC,EAAMC,GACvCD,EAAKE,OAASD,EACd,IAAIQ,EAAW,aACfA,EAASN,UAAYF,EAAUE,UAC/BH,EAAKG,UAAY,IAAIM,EACrBT,EAAKG,UAAUC,YAAcJ,I,gBCpBjCF,EAAOC,QAAUkU,EACjBA,EAAUwgF,UAAYA,EAEtB,IAAIj6C,EAAO,CAAEkpB,IAAK,KAClB,IACElpB,EAAO,EAAQ,KACf,MAAOzmB,IAET,IAAI2gE,EAAWzgF,EAAUygF,SAAWD,EAAUC,SAAW,GACrD19B,EAAS,EAAQ,KAEjB29B,EAAU,CACZ,IAAK,CAAEhvC,KAAM,YAAaivC,MAAO,aACjC,IAAK,CAAEjvC,KAAM,MAAOivC,MAAO,MAC3B,IAAK,CAAEjvC,KAAM,MAAOivC,MAAO,MAC3B,IAAK,CAAEjvC,KAAM,MAAOivC,MAAO,MAC3B,IAAK,CAAEjvC,KAAM,MAAOivC,MAAO,MAoBzBC,EAAqB,kBAIdvoE,MAAM,IAAI42B,QAAO,SAAUt0C,EAAKlH,GAEvC,OADAkH,EAAIlH,IAAK,EACFkH,IACN,IAIL,IAAIkmF,EAAa,MAUjB,SAAStpF,EAAK9B,EAAGxE,GACfwE,EAAIA,GAAK,GACTxE,EAAIA,GAAK,GACT,IAAI+V,EAAI,GAOR,OANArb,OAAOmuB,KAAK7oB,GAAGwK,SAAQ,SAAU8C,GAC/ByI,EAAEzI,GAAKtN,EAAEsN,MAEX5S,OAAOmuB,KAAKrkB,GAAGgG,SAAQ,SAAU8C,GAC/ByI,EAAEzI,GAAK9I,EAAE8I,MAEJyI,EAwBT,SAAShH,EAAW4B,EAAGk/E,EAAS5mE,GAC9B,GAAuB,iBAAZ4mE,EACT,MAAM,IAAIvzF,UAAU,gCAMtB,OAHK2sB,IAASA,EAAU,OAGnBA,EAAQ6mE,WAAmC,MAAtBD,EAAQjrD,OAAO,MAKlB,KAAnBirD,EAAQ7lF,OAA4B,KAAN2G,EAE3B,IAAI4+E,EAAUM,EAAS5mE,GAAS5jB,MAAMsL,IAG/C,SAAS4+E,EAAWM,EAAS5mE,GAC3B,KAAM1rB,gBAAgBgyF,GACpB,OAAO,IAAIA,EAAUM,EAAS5mE,GAGhC,GAAuB,iBAAZ4mE,EACT,MAAM,IAAIvzF,UAAU,gCAGjB2sB,IAASA,EAAU,IACxB4mE,EAAUA,EAAQ7lF,OAGD,MAAbsrC,EAAKkpB,MACPqxB,EAAUA,EAAQzoE,MAAMkuB,EAAKkpB,KAAKl5D,KAAK,MAGzC/H,KAAK0rB,QAAUA,EACf1rB,KAAKmM,IAAM,GACXnM,KAAKsyF,QAAUA,EACftyF,KAAKwyF,OAAS,KACdxyF,KAAKi7E,QAAS,EACdj7E,KAAKyyF,SAAU,EACfzyF,KAAK0yF,OAAQ,EAGb1yF,KAAK2yF,OAiGP,SAASC,EAAaN,EAAS5mE,GAY7B,GAXKA,IAEDA,EADE1rB,gBAAgBgyF,EACRhyF,KAAK0rB,QAEL,SAOS,KAHvB4mE,OAA6B,IAAZA,EACbtyF,KAAKsyF,QAAUA,GAGjB,MAAM,IAAIvzF,UAAU,qBAGtB,OAAI2sB,EAAQmnE,UACTP,EAAQxqF,MAAM,UAER,CAACwqF,GAGH/9B,EAAO+9B,GA7MhB9gF,EAAUU,OACV,SAAiBogF,EAAS5mE,GAExB,OADAA,EAAUA,GAAW,GACd,SAAUtY,EAAG5R,EAAG6F,GACrB,OAAOmK,EAAU4B,EAAGk/E,EAAS5mE,KAiBjCla,EAAUuwC,SAAW,SAAU9K,GAC7B,IAAKA,IAAQ95C,OAAOmuB,KAAK2rB,GAAKv4C,OAAQ,OAAO8S,EAE7C,IAAIshF,EAAOthF,EAEP7O,EAAI,SAAoByQ,EAAGk/E,EAAS5mE,GACtC,OAAOonE,EAAKthF,UAAU4B,EAAGk/E,EAASvpF,EAAIkuC,EAAKvrB,KAO7C,OAJA/oB,EAAEqvF,UAAY,SAAoBM,EAAS5mE,GACzC,OAAO,IAAIonE,EAAKd,UAAUM,EAASvpF,EAAIkuC,EAAKvrB,KAGvC/oB,GAGTqvF,EAAUjwC,SAAW,SAAU9K,GAC7B,OAAKA,GAAQ95C,OAAOmuB,KAAK2rB,GAAKv4C,OACvB8S,EAAUuwC,SAAS9K,GAAK+6C,UADcA,GAmD/CA,EAAUt0F,UAAUopD,MAAQ,aAE5BkrC,EAAUt0F,UAAUi1F,KACpB,WAEE,GAAI3yF,KAAK+yF,MAAO,OAEhB,IAAIT,EAAUtyF,KAAKsyF,QACf5mE,EAAU1rB,KAAK0rB,QAGnB,IAAKA,EAAQ6mE,WAAmC,MAAtBD,EAAQjrD,OAAO,GAEvC,YADArnC,KAAKyyF,SAAU,GAGjB,IAAKH,EAEH,YADAtyF,KAAK0yF,OAAQ,GAKf1yF,KAAKgzF,cAGL,IAAI7mF,EAAMnM,KAAKizF,QAAUjzF,KAAK4yF,cAE1BlnE,EAAQo7B,QAAO9mD,KAAK8mD,MAAQ32B,QAAQkB,OAExCrxB,KAAK8mD,MAAM9mD,KAAKsyF,QAASnmF,GAOzBA,EAAMnM,KAAKkzF,UAAY/mF,EAAIuqB,KAAI,SAAU5V,GACvC,OAAOA,EAAE+I,MAAMwoE,MAGjBryF,KAAK8mD,MAAM9mD,KAAKsyF,QAASnmF,GAGzBA,EAAMA,EAAIuqB,KAAI,SAAU5V,EAAGqyE,EAAIhnF,GAC7B,OAAO2U,EAAE4V,IAAI12B,KAAKs9C,MAAOt9C,QACxBA,MAEHA,KAAK8mD,MAAM9mD,KAAKsyF,QAASnmF,GAGzBA,EAAMA,EAAI+F,QAAO,SAAU4O,GACzB,OAA6B,IAAtBA,EAAE9d,SAAQ,MAGnBhD,KAAK8mD,MAAM9mD,KAAKsyF,QAASnmF,GAEzBnM,KAAKmM,IAAMA,GAGb6lF,EAAUt0F,UAAUs1F,YACpB,WACE,IAAIV,EAAUtyF,KAAKsyF,QACfrX,GAAS,EACTvvD,EAAU1rB,KAAK0rB,QACf0nE,EAAe,EAEnB,GAAI1nE,EAAQ2nE,SAAU,OAEtB,IAAK,IAAI7xF,EAAI,EAAG2L,EAAImlF,EAAQ5zF,OACxB8C,EAAI2L,GAA2B,MAAtBmlF,EAAQjrD,OAAO7lC,GACxBA,IACFy5E,GAAUA,EACVmY,IAGEA,IAAcpzF,KAAKsyF,QAAUA,EAAQluF,OAAOgvF,IAChDpzF,KAAKi7E,OAASA,GAahBzpE,EAAUohF,YAAc,SAAUN,EAAS5mE,GACzC,OAAOknE,EAAYN,EAAS5mE,IAG9BsmE,EAAUt0F,UAAUk1F,YAAcA,EAsClCZ,EAAUt0F,UAAU4/C,MAEpB,SAAgBg1C,EAASgB,GACvB,GAAIhB,EAAQ5zF,OAAS,MACnB,MAAM,IAAIK,UAAU,uBAGtB,IAAI2sB,EAAU1rB,KAAK0rB,QAGnB,IAAKA,EAAQ6nE,YAA0B,OAAZjB,EAAkB,OAAOL,EACpD,GAAgB,KAAZK,EAAgB,MAAO,GAE3B,IAMIkB,EANAlyE,EAAK,GACLmyE,IAAa/nE,EAAQgoE,OACrBC,GAAW,EAEXC,EAAmB,GACnBC,EAAgB,GAEhBC,GAAU,EACVC,GAAgB,EAChBC,GAAc,EAGdC,EAAqC,MAAtB3B,EAAQjrD,OAAO,GAAa,GAE7C3b,EAAQwoE,IAAM,iCACd,UACE58E,EAAOtX,KAEX,SAASm0F,IACP,GAAIX,EAAW,CAGb,OAAQA,GACN,IAAK,IACHlyE,GAzRC8yE,SA0RDX,GAAW,EACb,MACA,IAAK,IACHnyE,GAhSE,OAiSFmyE,GAAW,EACb,MACA,QACEnyE,GAAM,KAAOkyE,EAGjBl8E,EAAKwvC,MAAM,uBAAwB0sC,EAAWlyE,GAC9CkyE,GAAY,GAIhB,IAAK,IAAiCvuF,EAA7BzD,EAAI,EAAGR,EAAMsxF,EAAQ5zF,OACzB8C,EAAIR,IAASiE,EAAIqtF,EAAQjrD,OAAO7lC,IACjCA,IAIF,GAHAxB,KAAK8mD,MAAM,eAAgBwrC,EAAS9wF,EAAG8f,EAAIrc,GAGvC0uF,GAAYvB,EAAWntF,GACzBqc,GAAM,KAAOrc,EACb0uF,GAAW,OAIb,OAAQ1uF,GACN,IAAK,IAGH,OAAO,EAET,IAAK,KACHkvF,IACAR,GAAW,EACb,SAIA,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IAKH,GAJA3zF,KAAK8mD,MAAM,6BAA8BwrC,EAAS9wF,EAAG8f,EAAIrc,GAIrD6uF,EAAS,CACX9zF,KAAK8mD,MAAM,cACD,MAAN7hD,GAAazD,IAAMwyF,EAAa,IAAG/uF,EAAI,KAC3Cqc,GAAMrc,EACN,SAMFqS,EAAKwvC,MAAM,yBAA0B0sC,GACrCW,IACAX,EAAYvuF,EAIRymB,EAAQ2oE,OAAOF,IACrB,SAEA,IAAK,IACH,GAAIL,EAAS,CACXxyE,GAAM,IACN,SAGF,IAAKkyE,EAAW,CACdlyE,GAAM,MACN,SAGFsyE,EAAiBlvF,KAAK,CACpBtD,KAAMoyF,EACNxxF,MAAOR,EAAI,EACX8yF,QAAShzE,EAAG5iB,OACZwkD,KAAMgvC,EAAQsB,GAAWtwC,KACzBivC,MAAOD,EAAQsB,GAAWrB,QAG5B7wE,GAAoB,MAAdkyE,EAAoB,YAAc,MACxCxzF,KAAK8mD,MAAM,eAAgB0sC,EAAWlyE,GACtCkyE,GAAY,EACd,SAEA,IAAK,IACH,GAAIM,IAAYF,EAAiBl1F,OAAQ,CACvC4iB,GAAM,MACN,SAGF6yE,IACAV,GAAW,EACX,IAAIc,EAAKX,EAAiB3hE,MAG1B3Q,GAAMizE,EAAGpC,MACO,MAAZoC,EAAGnzF,MACLyyF,EAAcnvF,KAAK6vF,GAErBA,EAAGC,MAAQlzE,EAAG5iB,OAChB,SAEA,IAAK,IACH,GAAIo1F,IAAYF,EAAiBl1F,QAAUi1F,EAAU,CACnDryE,GAAM,MACNqyE,GAAW,EACX,SAGFQ,IACA7yE,GAAM,IACR,SAGA,IAAK,IAIH,GAFA6yE,IAEIL,EAAS,CACXxyE,GAAM,KAAOrc,EACb,SAGF6uF,GAAU,EACVE,EAAaxyF,EACbuyF,EAAezyE,EAAG5iB,OAClB4iB,GAAMrc,EACR,SAEA,IAAK,IAKH,GAAIzD,IAAMwyF,EAAa,IAAMF,EAAS,CACpCxyE,GAAM,KAAOrc,EACb0uF,GAAW,EACX,SAKF,GAAIG,EAAS,CAQX,IAAIW,EAAKnC,EAAQx7D,UAAUk9D,EAAa,EAAGxyF,GAC3C,IACE0pB,OAAO,IAAMupE,EAAK,KAClB,MAAOnjE,GAEP,IAAIojE,EAAK10F,KAAKs9C,MAAMm3C,EAAIE,GACxBrzE,EAAKA,EAAGld,OAAO,EAAG2vF,GAAgB,MAAQW,EAAG,GAAK,MAClDjB,EAAWA,GAAYiB,EAAG,GAC1BZ,GAAU,EACV,UAKJL,GAAW,EACXK,GAAU,EACVxyE,GAAMrc,EACR,SAEA,QAEEkvF,IAEIR,EAEFA,GAAW,GACFvB,EAAWntF,IACT,MAANA,GAAa6uF,IAClBxyE,GAAM,MAGRA,GAAMrc,EAOR6uF,IAKFW,EAAKnC,EAAQluF,OAAO4vF,EAAa,GACjCU,EAAK10F,KAAKs9C,MAAMm3C,EAAIE,GACpBrzE,EAAKA,EAAGld,OAAO,EAAG2vF,GAAgB,MAAQW,EAAG,GAC7CjB,EAAWA,GAAYiB,EAAG,IAS5B,IAAKH,EAAKX,EAAiB3hE,MAAOsiE,EAAIA,EAAKX,EAAiB3hE,MAAO,CACjE,IAAI2/B,EAAOtwC,EAAG1gB,MAAM2zF,EAAGD,QAAUC,EAAGrxC,KAAKxkD,QACzCsB,KAAK8mD,MAAM,eAAgBxlC,EAAIizE,GAE/B3iC,EAAOA,EAAKllD,QAAQ,6BAA6B,SAAUyV,EAAGmoD,EAAIC,GAYhE,OAXKA,IAEHA,EAAK,MASAD,EAAKA,EAAKC,EAAK,OAGxBvqE,KAAK8mD,MAAM,iBAAkB8K,EAAMA,EAAM2iC,EAAIjzE,GAC7C,IAAI9I,EAAgB,MAAZ+7E,EAAGnzF,KAngBJgzF,SAogBS,MAAZG,EAAGnzF,KAvgBC,OAwgBJ,KAAOmzF,EAAGnzF,KAEdqyF,GAAW,EACXnyE,EAAKA,EAAG1gB,MAAM,EAAG2zF,EAAGD,SAAW97E,EAAI,MAAQo5C,EAI7CuiC,IACIR,IAEFryE,GAAM,QAKR,IAAIszE,GAAkB,EACtB,OAAQtzE,EAAG+lB,OAAO,IAChB,IAAK,IACL,IAAK,IACL,IAAK,IAAKutD,GAAkB,EAQ9B,IAAK,IAAIlyF,EAAImxF,EAAcn1F,OAAS,EAAGgE,GAAK,EAAGA,IAAK,CAClD,IAAImyF,EAAKhB,EAAcnxF,GAEnBoyF,EAAWxzE,EAAG1gB,MAAM,EAAGi0F,EAAGP,SAC1BS,EAAUzzE,EAAG1gB,MAAMi0F,EAAGP,QAASO,EAAGL,MAAQ,GAC1CQ,EAAS1zE,EAAG1gB,MAAMi0F,EAAGL,MAAQ,EAAGK,EAAGL,OACnCS,EAAU3zE,EAAG1gB,MAAMi0F,EAAGL,OAE1BQ,GAAUC,EAKV,IAAIC,EAAmBJ,EAASjrE,MAAM,KAAKnrB,OAAS,EAChDy2F,EAAaF,EACjB,IAAKzzF,EAAI,EAAGA,EAAI0zF,EAAkB1zF,IAChC2zF,EAAaA,EAAWzoF,QAAQ,WAAY,IAI9C,IAAI0oF,EAAS,GACG,MAHhBH,EAAUE,IAGY7B,IAAUqB,IAC9BS,EAAS,KAGX9zE,EADYwzE,EAAWC,EAAUE,EAAUG,EAASJ,EAO3C,KAAP1zE,GAAamyE,IACfnyE,EAAK,QAAUA,GAGbszE,IACFtzE,EAAK2yE,EAAe3yE,GAItB,GAAIgyE,IAAUqB,EACZ,MAAO,CAACrzE,EAAImyE,GAMd,IAAKA,EACH,OA4SJ,SAAuB3yE,GACrB,OAAOA,EAAEpU,QAAQ,SAAU,MA7SlB2oF,CAAa/C,GAGtB,IAAIgD,EAAQ5pE,EAAQgoE,OAAS,IAAM,GACnC,IACE,IAAI6B,EAAS,IAAIrqE,OAAO,IAAM5J,EAAK,IAAKg0E,GACxC,MAAOhkE,GAKP,OAAO,IAAIpG,OAAO,MAMpB,OAHAqqE,EAAOC,MAAQlD,EACfiD,EAAOE,KAAOn0E,EAEPi0E,GA5WT,IAAIZ,EAAW,GA+WfnjF,EAAUkkF,OAAS,SAAUpD,EAAS5mE,GACpC,OAAO,IAAIsmE,EAAUM,EAAS5mE,GAAW,IAAIgqE,UAG/C1D,EAAUt0F,UAAUg4F,OACpB,WACE,GAAI11F,KAAKwyF,SAA0B,IAAhBxyF,KAAKwyF,OAAkB,OAAOxyF,KAAKwyF,OAQtD,IAAIrmF,EAAMnM,KAAKmM,IAEf,IAAKA,EAAIzN,OAEP,OADAsB,KAAKwyF,QAAS,EACPxyF,KAAKwyF,OAEd,IAAI9mE,EAAU1rB,KAAK0rB,QAEfiqE,EAAUjqE,EAAQ6nE,WA1nBba,SA2nBL1oE,EAAQwoE,IAtnBG,0CAIE,0BAonBboB,EAAQ5pE,EAAQgoE,OAAS,IAAM,GAE/BpyE,EAAKnV,EAAIuqB,KAAI,SAAU47D,GACzB,OAAOA,EAAQ57D,KAAI,SAAUtjB,GAC3B,OAAQA,IAAM6+E,EAAY0D,EACV,iBAANviF,EA8PhB,SAAuB0N,GACrB,OAAOA,EAAEpU,QAAQ,2BAA4B,QA/PbkpF,CAAaxiF,GACvCA,EAAEqiF,QACH1tF,KAAK,UACPA,KAAK,KAIRuZ,EAAK,OAASA,EAAK,KAGfthB,KAAKi7E,SAAQ35D,EAAK,OAASA,EAAK,QAEpC,IACEthB,KAAKwyF,OAAS,IAAItnE,OAAO5J,EAAIg0E,GAC7B,MAAOO,GACP71F,KAAKwyF,QAAS,EAEhB,OAAOxyF,KAAKwyF,QAGdhhF,EAAU1J,MAAQ,SAAUT,EAAMirF,EAAS5mE,GAEzC,IAAI2xD,EAAK,IAAI2U,EAAUM,EADvB5mE,EAAUA,GAAW,IAQrB,OANArkB,EAAOA,EAAK6K,QAAO,SAAU47C,GAC3B,OAAOuvB,EAAGv1E,MAAMgmD,MAEduvB,EAAG3xD,QAAQoqE,SAAWzuF,EAAK3I,QAC7B2I,EAAK3C,KAAK4tF,GAELjrF,GAGT2qF,EAAUt0F,UAAUoK,MACpB,SAAgBgmD,EAAGnT,GAIjB,GAHA36C,KAAK8mD,MAAM,QAASgH,EAAG9tD,KAAKsyF,SAGxBtyF,KAAKyyF,QAAS,OAAO,EACzB,GAAIzyF,KAAK0yF,MAAO,MAAa,KAAN5kC,EAEvB,GAAU,MAANA,GAAanT,EAAS,OAAO,EAEjC,IAAIjvB,EAAU1rB,KAAK0rB,QAGF,MAAbqsB,EAAKkpB,MACPnT,EAAIA,EAAEjkC,MAAMkuB,EAAKkpB,KAAKl5D,KAAK,MAI7B+lD,EAAIA,EAAEjkC,MAAMwoE,GACZryF,KAAK8mD,MAAM9mD,KAAKsyF,QAAS,QAASxkC,GAOlC,IAII17C,EACA5Q,EALA2K,EAAMnM,KAAKmM,IAMf,IALAnM,KAAK8mD,MAAM9mD,KAAKsyF,QAAS,MAAOnmF,GAK3B3K,EAAIssD,EAAEpvD,OAAS,EAAG8C,GAAK,KAC1B4Q,EAAW07C,EAAEtsD,IADgBA,KAK/B,IAAKA,EAAI,EAAGA,EAAI2K,EAAIzN,OAAQ8C,IAAK,CAC/B,IAAI8wF,EAAUnmF,EAAI3K,GACd2Q,EAAO27C,EAKX,GAJIpiC,EAAQrZ,WAAgC,IAAnBigF,EAAQ5zF,SAC/ByT,EAAO,CAACC,IAEApS,KAAK+1F,SAAS5jF,EAAMmgF,EAAS33C,GAErC,QAAIjvB,EAAQsqE,aACJh2F,KAAKi7E,OAMjB,OAAIvvD,EAAQsqE,YACLh2F,KAAKi7E,QAQd+W,EAAUt0F,UAAUq4F,SAAW,SAAU5jF,EAAMmgF,EAAS33C,GACtD,IAAIjvB,EAAU1rB,KAAK0rB,QAEnB1rB,KAAK8mD,MAAM,WACT,CAAE,KAAQ9mD,KAAMmS,KAAMA,EAAMmgF,QAASA,IAEvCtyF,KAAK8mD,MAAM,WAAY30C,EAAKzT,OAAQ4zF,EAAQ5zF,QAE5C,IAAK,IAAIu3F,EAAK,EACVC,EAAK,EACLrmC,EAAK19C,EAAKzT,OACV61F,EAAKjC,EAAQ5zF,OACVu3F,EAAKpmC,GAAQqmC,EAAK3B,EACnB0B,IAAMC,IAAM,CAChBl2F,KAAK8mD,MAAM,iBACX,IA2FIqvC,EA3FA/iF,EAAIk/E,EAAQ4D,GACZpoC,EAAI37C,EAAK8jF,GAMb,GAJAj2F,KAAK8mD,MAAMwrC,EAASl/E,EAAG06C,IAIb,IAAN16C,EAAa,OAAO,EAExB,GAAIA,IAAM6+E,EAAU,CAClBjyF,KAAK8mD,MAAM,WAAY,CAACwrC,EAASl/E,EAAG06C,IAwBpC,IAAIsoC,EAAKH,EACLI,EAAKH,EAAK,EACd,GAAIG,IAAO9B,EAAI,CAQb,IAPAv0F,KAAK8mD,MAAM,iBAOJmvC,EAAKpmC,EAAIomC,IACd,GAAiB,MAAb9jF,EAAK8jF,IAA4B,OAAb9jF,EAAK8jF,KACzBvqE,EAAQwoE,KAA8B,MAAvB/hF,EAAK8jF,GAAI5uD,OAAO,GAAa,OAAO,EAEzD,OAAO,EAIT,KAAO+uD,EAAKvmC,GAAI,CACd,IAAIymC,EAAYnkF,EAAKikF,GAKrB,GAHAp2F,KAAK8mD,MAAM,mBAAoB30C,EAAMikF,EAAI9D,EAAS+D,EAAIC,GAGlDt2F,KAAK+1F,SAAS5jF,EAAKvR,MAAMw1F,GAAK9D,EAAQ1xF,MAAMy1F,GAAK17C,GAGnD,OAFA36C,KAAK8mD,MAAM,wBAAyBsvC,EAAIvmC,EAAIymC,IAErC,EAIP,GAAkB,MAAdA,GAAmC,OAAdA,IACrB5qE,EAAQwoE,KAA+B,MAAxBoC,EAAUjvD,OAAO,GAAa,CAC/CrnC,KAAK8mD,MAAM,gBAAiB30C,EAAMikF,EAAI9D,EAAS+D,GAC/C,MAIFr2F,KAAK8mD,MAAM,4CACXsvC,IAOJ,SAAIz7C,IAEF36C,KAAK8mD,MAAM,2BAA4B30C,EAAMikF,EAAI9D,EAAS+D,GACtDD,IAAOvmC,IAqBf,GAZiB,iBAANz8C,GAEP+iF,EADEzqE,EAAQgoE,OACJ5lC,EAAEhsD,gBAAkBsR,EAAEtR,cAEtBgsD,IAAM16C,EAEdpT,KAAK8mD,MAAM,eAAgB1zC,EAAG06C,EAAGqoC,KAEjCA,EAAMroC,EAAEhmD,MAAMsL,GACdpT,KAAK8mD,MAAM,gBAAiB1zC,EAAG06C,EAAGqoC,KAG/BA,EAAK,OAAO,EAenB,GAAIF,IAAOpmC,GAAMqmC,IAAO3B,EAGtB,OAAO,EACF,GAAI0B,IAAOpmC,EAIhB,OAAOlV,EACF,GAAIu7C,IAAO3B,EAMhB,OADoB0B,IAAOpmC,EAAK,GAAoB,KAAb19C,EAAK8jF,GAK9C,MAAM,IAAIh2F,MAAM,U,iBCh5BlB,YA4BA,SAASy/D,EAAelf,EAAOmf,GAG7B,IADA,IAAIjiB,EAAK,EACAl8C,EAAIg/C,EAAM9hD,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CAC1C,IAAI8uC,EAAOkQ,EAAMh/C,GACJ,MAAT8uC,EACFkQ,EAAM7C,OAAOn8C,EAAG,GACE,OAAT8uC,GACTkQ,EAAM7C,OAAOn8C,EAAG,GAChBk8C,KACSA,IACT8C,EAAM7C,OAAOn8C,EAAG,GAChBk8C,KAKJ,GAAIiiB,EACF,KAAOjiB,IAAMA,EACX8C,EAAMxwB,QAAQ,MAIlB,OAAOwwB,EA0OT,SAAStuC,EAAQk4C,EAAI0D,GACjB,GAAI1D,EAAGl4C,OAAQ,OAAOk4C,EAAGl4C,OAAO47C,GAEhC,IADA,IAAItoD,EAAM,GACDhE,EAAI,EAAGA,EAAI4oD,EAAG1rD,OAAQ8C,IACvBssD,EAAE1D,EAAG5oD,GAAIA,EAAG4oD,IAAK5kD,EAAId,KAAK0lD,EAAG5oD,IAErC,OAAOgE,EA3OXlI,EAAQuxB,QAAU,WAIhB,IAHA,IAAIkxC,EAAe,GACfC,GAAmB,EAEdx+D,EAAIkG,UAAUhJ,OAAS,EAAG8C,IAAM,IAAMw+D,EAAkBx+D,IAAK,CACpE,IAAIu2C,EAAQv2C,GAAK,EAAKkG,UAAUlG,GAAKm0B,EAAQsqC,MAG7C,GAAoB,iBAATloB,EACT,MAAM,IAAIh5C,UAAU,6CACVg5C,IAIZgoB,EAAehoB,EAAO,IAAMgoB,EAC5BC,EAAsC,MAAnBjoB,EAAK1Q,OAAO,IAWjC,OAAS24B,EAAmB,IAAM,KAJlCD,EAAeL,EAAextD,EAAO6tD,EAAal2C,MAAM,MAAM,SAASzW,GACrE,QAASA,MACN4sD,GAAkBj4D,KAAK,OAE6B,KAK3DzK,EAAQ4iE,UAAY,SAASnoB,GAC3B,IAAIooB,EAAa7iE,EAAQ6iE,WAAWpoB,GAChCqoB,EAAqC,MAArBh8D,EAAO2zC,GAAO,GAclC,OAXAA,EAAO2nB,EAAextD,EAAO6lC,EAAKluB,MAAM,MAAM,SAASzW,GACrD,QAASA,MACN+sD,GAAYp4D,KAAK,OAERo4D,IACZpoB,EAAO,KAELA,GAAQqoB,IACVroB,GAAQ,MAGFooB,EAAa,IAAM,IAAMpoB,GAInCz6C,EAAQ6iE,WAAa,SAASpoB,GAC5B,MAA0B,MAAnBA,EAAK1Q,OAAO,IAIrB/pC,EAAQyK,KAAO,WACb,IAAI4K,EAAQnK,MAAM9K,UAAUkD,MAAMqC,KAAKyE,UAAW,GAClD,OAAOpK,EAAQ4iE,UAAUhuD,EAAOS,GAAO,SAASS,EAAGgZ,GACjD,GAAiB,iBAANhZ,EACT,MAAM,IAAIrU,UAAU,0CAEtB,OAAOqU,KACNrL,KAAK,OAMVzK,EAAQ8/C,SAAW,SAASz+C,EAAM2hE,GAIhC,SAAS7zD,EAAKtJ,GAEZ,IADA,IAAInB,EAAQ,EACLA,EAAQmB,EAAIzE,QACE,KAAfyE,EAAInB,GADiBA,KAK3B,IADA,IAAIC,EAAMkB,EAAIzE,OAAS,EAChBuD,GAAO,GACK,KAAbkB,EAAIlB,GADOA,KAIjB,OAAID,EAAQC,EAAY,GACjBkB,EAAIvC,MAAMoB,EAAOC,EAAMD,EAAQ,GAfxCrD,EAAOrB,EAAQuxB,QAAQlwB,GAAMyF,OAAO,GACpCk8D,EAAKhjE,EAAQuxB,QAAQyxC,GAAIl8D,OAAO,GAsBhC,IALA,IAAIm8D,EAAY9zD,EAAK9N,EAAKkrB,MAAM,MAC5B22C,EAAU/zD,EAAK6zD,EAAGz2C,MAAM,MAExBnrB,EAAS4G,KAAKC,IAAIg7D,EAAU7hE,OAAQ8hE,EAAQ9hE,QAC5C+hE,EAAkB/hE,EACb8C,EAAI,EAAGA,EAAI9C,EAAQ8C,IAC1B,GAAI++D,EAAU/+D,KAAOg/D,EAAQh/D,GAAI,CAC/Bi/D,EAAkBj/D,EAClB,MAIJ,IAAIk/D,EAAc,GAClB,IAASl/D,EAAIi/D,EAAiBj/D,EAAI++D,EAAU7hE,OAAQ8C,IAClDk/D,EAAYh8D,KAAK,MAKnB,OAFAg8D,EAAcA,EAAYt5D,OAAOo5D,EAAQ5/D,MAAM6/D,KAE5B14D,KAAK,MAG1BzK,EAAQ2jE,IAAM,IACd3jE,EAAQ8jE,UAAY,IAEpB9jE,EAAQsjE,QAAU,SAAU7oB,GAE1B,GADoB,iBAATA,IAAmBA,GAAc,IACxB,IAAhBA,EAAKr5C,OAAc,MAAO,IAK9B,IAJA,IAAI0N,EAAO2rC,EAAKpzC,WAAW,GACvB4xF,EAAmB,KAATnqF,EACVnK,GAAO,EACPu0F,GAAe,EACVh1F,EAAIu2C,EAAKr5C,OAAS,EAAG8C,GAAK,IAAKA,EAEtC,GAAa,MADb4K,EAAO2rC,EAAKpzC,WAAWnD,KAEnB,IAAKg1F,EAAc,CACjBv0F,EAAMT,EACN,YAIJg1F,GAAe,EAInB,OAAa,IAATv0F,EAAmBs0F,EAAU,IAAM,IACnCA,GAAmB,IAARt0F,EAGN,IAEF81C,EAAKn3C,MAAM,EAAGqB,IAiCvB3E,EAAQqiD,SAAW,SAAU5H,EAAMhvC,GACjC,IAAI+kD,EA/BN,SAAkB/V,GACI,iBAATA,IAAmBA,GAAc,IAE5C,IAGIv2C,EAHAQ,EAAQ,EACRC,GAAO,EACPu0F,GAAe,EAGnB,IAAKh1F,EAAIu2C,EAAKr5C,OAAS,EAAG8C,GAAK,IAAKA,EAClC,GAA2B,KAAvBu2C,EAAKpzC,WAAWnD,IAGhB,IAAKg1F,EAAc,CACjBx0F,EAAQR,EAAI,EACZ,YAEgB,IAATS,IAGXu0F,GAAe,EACfv0F,EAAMT,EAAI,GAId,OAAa,IAATS,EAAmB,GAChB81C,EAAKn3C,MAAMoB,EAAOC,GAMjB09C,CAAS5H,GAIjB,OAHIhvC,GAAO+kD,EAAE1pD,QAAQ,EAAI2E,EAAIrK,UAAYqK,IACvC+kD,EAAIA,EAAE1pD,OAAO,EAAG0pD,EAAEpvD,OAASqK,EAAIrK,SAE1BovD,GAGTxwD,EAAQwjE,QAAU,SAAU/oB,GACN,iBAATA,IAAmBA,GAAc,IAQ5C,IAPA,IAAI0+C,GAAY,EACZC,EAAY,EACZz0F,GAAO,EACPu0F,GAAe,EAGfG,EAAc,EACTn1F,EAAIu2C,EAAKr5C,OAAS,EAAG8C,GAAK,IAAKA,EAAG,CACzC,IAAI4K,EAAO2rC,EAAKpzC,WAAWnD,GAC3B,GAAa,KAAT4K,GASS,IAATnK,IAGFu0F,GAAe,EACfv0F,EAAMT,EAAI,GAEC,KAAT4K,GAEkB,IAAdqqF,EACFA,EAAWj1F,EACY,IAAhBm1F,IACPA,EAAc,IACK,IAAdF,IAGTE,GAAe,QArBb,IAAKH,EAAc,CACjBE,EAAYl1F,EAAI,EAChB,OAuBR,OAAkB,IAAdi1F,IAA4B,IAATx0F,GAEH,IAAhB00F,GAEgB,IAAhBA,GAAqBF,IAAax0F,EAAM,GAAKw0F,IAAaC,EAAY,EACjE,GAEF3+C,EAAKn3C,MAAM61F,EAAUx0F,IAa9B,IAAImC,EAA6B,MAApB,KAAKA,QAAQ,GACpB,SAAUI,EAAKxC,EAAOhB,GAAO,OAAOwD,EAAIJ,OAAOpC,EAAOhB,IACtD,SAAUwD,EAAKxC,EAAOhB,GAEpB,OADIgB,EAAQ,IAAGA,EAAQwC,EAAI9F,OAASsD,GAC7BwC,EAAIJ,OAAOpC,EAAOhB,M,kCC3SjC,IAAI41F,EAAY,EAAQ,KACpBC,EAAW,EAAQ,KAEvBx5F,EAAOC,QA6DP,SAAmBkH,GACjB,IAAKA,EACH,MAAO,GAQgB,OAArBA,EAAIJ,OAAO,EAAG,KAChBI,EAAM,SAAWA,EAAIJ,OAAO,IAG9B,OAqBF,SAASmwD,EAAO/vD,EAAKsyF,GACnB,IAAIC,EAAa,GAEbp0F,EAAIk0F,EAAS,IAAK,IAAKryF,GAC3B,IAAK7B,GAAK,MAAM01C,KAAK11C,EAAEiyC,KAAM,MAAO,CAACpwC,GAErC,IAaI9B,EAbAs0F,EAAoB,iCAAiC3+C,KAAK11C,EAAEo0C,MAC5DkgD,EAAkB,uCAAuC5+C,KAAK11C,EAAEo0C,MAChEmgD,EAAaF,GAAqBC,EAClCE,EAAYx0F,EAAEo0C,KAAK/zC,QAAQ,MAAQ,EACvC,IAAKk0F,IAAeC,EAElB,OAAIx0F,EAAEy0F,KAAKtvF,MAAM,UACftD,EAAM7B,EAAEiyC,IAAM,IAAMjyC,EAAEo0C,KAAOsgD,EAAW10F,EAAEy0F,KACnC7iC,EAAO/vD,IAET,CAACA,GAIV,GAAI0yF,EACFx0F,EAAIC,EAAEo0C,KAAKltB,MAAM,YACZ,CAEL,GAAiB,KADjBnnB,EArFJ,SAAS40F,EAAgB9yF,GACvB,IAAKA,EACH,MAAO,CAAC,IAEV,IAAIg8C,EAAQ,GACR79C,EAAIk0F,EAAS,IAAK,IAAKryF,GAE3B,IAAK7B,EACH,OAAO6B,EAAIqlB,MAAM,KAEnB,IAAI+qB,EAAMjyC,EAAEiyC,IACRmC,EAAOp0C,EAAEo0C,KACTqgD,EAAOz0F,EAAEy0F,KACThkF,EAAIwhC,EAAI/qB,MAAM,KAElBzW,EAAEA,EAAE1U,OAAO,IAAM,IAAMq4C,EAAO,IAC9B,IAAIwgD,EAAYD,EAAgBF,GAC5BA,EAAK14F,SACP0U,EAAEA,EAAE1U,OAAO,IAAM64F,EAAUpzE,QAC3B/Q,EAAE1O,KAAKwB,MAAMkN,EAAGmkF,IAKlB,OAFA/2C,EAAM97C,KAAKwB,MAAMs6C,EAAOptC,GAEjBotC,EA6DD82C,CAAgB30F,EAAEo0C,OAChBr4C,OAGJ,GAAiB,KADjBgE,EAAI6xD,EAAO7xD,EAAE,IAAI,GAAOg0B,IAAI8gE,IACtB94F,OAIJ,OAHI04F,EAAOz0F,EAAEy0F,KAAK14F,OACd61D,EAAO5xD,EAAEy0F,MAAM,GACf,CAAC,KACO1gE,KAAI,SAAStjB,GACvB,OAAOzQ,EAAEiyC,IAAMlyC,EAAE,GAAK0Q,KAU9B,IAKIgN,EALAw0B,EAAMjyC,EAAEiyC,IACRwiD,EAAOz0F,EAAEy0F,KAAK14F,OACd61D,EAAO5xD,EAAEy0F,MAAM,GACf,CAAC,IAIL,GAAIF,EAAY,CACd,IAAIhwF,EAAIuwF,EAAQ/0F,EAAE,IACdyE,EAAIswF,EAAQ/0F,EAAE,IACdkW,EAAQtT,KAAKuC,IAAInF,EAAE,GAAGhE,OAAQgE,EAAE,GAAGhE,QACnCg5F,EAAmB,GAAZh1F,EAAEhE,OACT4G,KAAKuT,IAAI4+E,EAAQ/0F,EAAE,KACnB,EACA21C,EAAOxxB,EACG1f,EAAID,IAEhBwwF,IAAS,EACTr/C,EAAO5xB,GAET,IAAIgvC,EAAM/yD,EAAEo2C,KAAK6+C,GAEjBv3E,EAAI,GAEJ,IAAK,IAAI5e,EAAI0F,EAAGmxC,EAAK72C,EAAG2F,GAAI3F,GAAKk2F,EAAM,CACrC,IAAIzyF,EACJ,GAAIgyF,EAEQ,QADVhyF,EAAI1B,OAAO0C,aAAazE,MAEtByD,EAAI,SAGN,GADAA,EAAI1B,OAAO/B,GACPi0D,EAAK,CACP,IAAI7lB,EAAOh3B,EAAQ3T,EAAEvG,OACrB,GAAIkxC,EAAO,EAAG,CACZ,IAAI3/B,EAAI,IAAIzH,MAAMonC,EAAO,GAAG7nC,KAAK,KAE/B9C,EADEzD,EAAI,EACF,IAAMyO,EAAIhL,EAAErE,MAAM,GAElBqP,EAAIhL,GAIhBmb,EAAE1b,KAAKO,SAGTmb,EAAIw2E,EAAUl0F,GAAG,SAASsS,GAAM,OAAOu/C,EAAOv/C,GAAI,MAGpD,IAAK,IAAIpR,EAAI,EAAGA,EAAIwc,EAAE1hB,OAAQkF,IAC5B,IAAK,IAAImM,EAAI,EAAGA,EAAIqnF,EAAK14F,OAAQqR,IAAK,CACpC,IAAI6nF,EAAYhjD,EAAMx0B,EAAExc,GAAKwzF,EAAKrnF,KAC7B+mF,GAASI,GAAcU,IAC1Bb,EAAWryF,KAAKkzF,GAItB,OAAOb,EAxHAxiC,CA7DT,SAAsB/vD,GACpB,OAAOA,EAAIqlB,MAAM,QAAQ9hB,KAAK8vF,GACnBhuE,MAAM,OAAO9hB,KAAK+vF,GAClBjuE,MAAM,OAAO9hB,KAAKsvF,GAClBxtE,MAAM,OAAO9hB,KAAKgwF,GAClBluE,MAAM,OAAO9hB,KAAKiwF,GAwDfC,CAAazzF,IAAM,GAAMkyB,IAAIwhE,IAzE7C,IAAIL,EAAW,UAAUvyF,KAAKohE,SAAS,KACnCoxB,EAAU,SAASxyF,KAAKohE,SAAS,KACjC2wB,EAAW,UAAU/xF,KAAKohE,SAAS,KACnCqxB,EAAW,UAAUzyF,KAAKohE,SAAS,KACnCsxB,EAAY,WAAW1yF,KAAKohE,SAAS,KAEzC,SAAS+wB,EAAQjzF,GACf,OAAOL,SAASK,EAAK,KAAOA,EACxBL,SAASK,EAAK,IACdA,EAAIG,WAAW,GAWrB,SAASuzF,EAAe1zF,GACtB,OAAOA,EAAIqlB,MAAMguE,GAAU9vF,KAAK,MACrB8hB,MAAMiuE,GAAS/vF,KAAK,KACpB8hB,MAAMwtE,GAAUtvF,KAAK,KACrB8hB,MAAMkuE,GAAUhwF,KAAK,KACrB8hB,MAAMmuE,GAAWjwF,KAAK,KAuDnC,SAASyvF,EAAQhzF,GACf,MAAO,IAAMA,EAAM,IAErB,SAASmzF,EAAS3iF,GAChB,MAAO,SAASqjC,KAAKrjC,GAGvB,SAAS6R,EAAIrlB,EAAG2F,GACd,OAAO3F,GAAK2F,EAEd,SAASsf,EAAIjlB,EAAG2F,GACd,OAAO3F,GAAK2F,I,cChGd9J,EAAOC,QAAU,SAAU8sD,EAAIl9C,GAE3B,IADA,IAAI1H,EAAM,GACDhE,EAAI,EAAGA,EAAI4oD,EAAG1rD,OAAQ8C,IAAK,CAChC,IAAI0F,EAAIgG,EAAGk9C,EAAG5oD,GAAIA,GACdhC,EAAQ0H,GAAI1B,EAAId,KAAKwB,MAAMV,EAAK0B,GAC/B1B,EAAId,KAAKwC,GAElB,OAAO1B,GAGX,IAAIhG,EAAUgJ,MAAMhJ,SAAW,SAAU4qD,GACrC,MAA8C,mBAAvCjtD,OAAOO,UAAU+D,SAASwB,KAAKmnD,K,6BCT1C,SAASysC,EAAS5vF,EAAGxE,EAAG+B,GAClByC,aAAaikB,SAAQjkB,EAAIkxF,EAAWlxF,EAAGzC,IACvC/B,aAAayoB,SAAQzoB,EAAI01F,EAAW11F,EAAG+B,IAE3C,IAAIwK,EAAIqzD,EAAMp7D,EAAGxE,EAAG+B,GAEpB,OAAOwK,GAAK,CACVhN,MAAOgN,EAAE,GACT/M,IAAK+M,EAAE,GACP4lC,IAAKpwC,EAAI5D,MAAM,EAAGoO,EAAE,IACpB+nC,KAAMvyC,EAAI5D,MAAMoO,EAAE,GAAK/H,EAAEvI,OAAQsQ,EAAE,IACnCooF,KAAM5yF,EAAI5D,MAAMoO,EAAE,GAAKvM,EAAE/D,SAI7B,SAASy5F,EAAWC,EAAK5zF,GACvB,IAAI7B,EAAI6B,EAAIsD,MAAMswF,GAClB,OAAOz1F,EAAIA,EAAE,GAAK,KAIpB,SAAS0/D,EAAMp7D,EAAGxE,EAAG+B,GACnB,IAAI6zF,EAAMC,EAAKtiF,EAAMC,EAAOzH,EACxB+pF,EAAK/zF,EAAIxB,QAAQiE,GACjBuxF,EAAKh0F,EAAIxB,QAAQP,EAAG81F,EAAK,GACzB/2F,EAAI+2F,EAER,GAAIA,GAAM,GAAKC,EAAK,EAAG,CAIrB,IAHAH,EAAO,GACPriF,EAAOxR,EAAI9F,OAEJ8C,GAAK,IAAMgN,GACZhN,GAAK+2F,GACPF,EAAK3zF,KAAKlD,GACV+2F,EAAK/zF,EAAIxB,QAAQiE,EAAGzF,EAAI,IACA,GAAf62F,EAAK35F,OACd8P,EAAS,CAAE6pF,EAAKpmE,MAAOumE,KAEvBF,EAAMD,EAAKpmE,OACDjc,IACRA,EAAOsiF,EACPriF,EAAQuiF,GAGVA,EAAKh0F,EAAIxB,QAAQP,EAAGjB,EAAI,IAG1BA,EAAI+2F,EAAKC,GAAMD,GAAM,EAAIA,EAAKC,EAG5BH,EAAK35F,SACP8P,EAAS,CAAEwH,EAAMC,IAIrB,OAAOzH,EAxDTnR,EAAOC,QAAUu5F,EAqBjBA,EAASx0B,MAAQA,G,6BCpBjB,MAAMo2B,EAAa,EAAQ,KACrBC,EAAe,EAAQ,KACvBC,EAAY,EAAQ,KACpBltE,EAAe,EAAQ,KAAUA,aACjCmtE,EAAY,EAAQ,KAE1Bt7F,EAAQggD,MAAQ,SAASzV,EAASnc,EAASmtE,GACzC,GAAIA,EAAiB,EACK,IAArBA,IAA2BA,EAAmB,IAEjD,MAAMrqF,EAASoqF,EAAUp4D,SAASqH,EAASgxD,GAC3C,IAAe,IAAXrqF,EACF,MAAMvO,MAAOuO,EAAOoD,IAAI9C,KAI5B,OADA4c,EAAUD,EAAaC,EAASitE,EAAUhtE,eAAgBgtE,EAAU/sE,OAC7D6sE,EAAWK,cAAcJ,EAAa9wD,gBAAgBC,EAASnc,GAAUA,IAElFpuB,EAAQy7F,cAAgB,EAAQ,KAAmBC,aACnD17F,EAAQsqC,gBAAkB8wD,EAAa9wD,gBACvCtqC,EAAQw7F,cAAgBL,EAAWK,cACnCx7F,EAAQ27F,oBAAsB,EAAQ,KAAmBA,oBACzD37F,EAAQkjC,SAAWo4D,EAAUp4D,SAC7BljC,EAAQ47F,UAAY,EAAQ,KAC5B57F,EAAQ67F,YAAc,SAAStxD,EAASuxD,EAAQ1tE,GAC9C,OAAOpuB,EAAQy7F,cAAcz7F,EAAQsqC,gBAAgBC,EAASnc,GAAU0tE,EAAQ1tE,K,6BCzBlF,MAAMoI,EAAO,EAAQ,KAEfglE,EAAgB,SAAS//C,EAAMrtB,GACnC,MAAM2tE,EAAO,GAGb,KAAMtgD,EAAK3Q,QAAStU,EAAKzI,cAAc0tB,EAAK3Q,QAAa2Q,EAAK1Q,WAAYvU,EAAKzI,cAAc0tB,EAAK1Q,WAChG,OAAOvU,EAAK3I,QAAQ4tB,EAAK53C,KAAO43C,EAAK53C,IAAM,GAGvC2yB,EAAK3I,QAAQ4tB,EAAK53C,OACM,iBAAb43C,EAAK53C,KAAkC,KAAb43C,EAAK53C,KAAc43C,EAAK53C,MAAQuqB,EAAQ2a,qBACpD,WAAtB3a,EAAQH,UACT8tE,EAAK3tE,EAAQma,cAAgB,CAAEkT,EAAK53C,KAEpCk4F,EAAK3tE,EAAQma,cAAgBkT,EAAK53C,KAM1C2yB,EAAKvlB,MAAM8qF,EAAMtgD,EAAK1Q,SAAU3c,EAAQH,WAExC,MAAMD,EAAOnuB,OAAOmuB,KAAKytB,EAAK3Q,OAC9B,IAAK,IAAIhc,EAAQ,EAAGA,EAAQd,EAAK5sB,OAAQ0tB,IAAS,CAChD,IAAI8a,EAAU5b,EAAKc,GACnB,GAAI2sB,EAAK3Q,MAAMlB,IAAY6R,EAAK3Q,MAAMlB,GAASxoC,OAAS,EAEtD,IAAK,IAAI8kC,KADT61D,EAAKnyD,GAAW,GACA6R,EAAK3Q,MAAMlB,GACzBmyD,EAAKnyD,GAASxiC,KAAKo0F,EAAc//C,EAAK3Q,MAAMlB,GAAS1D,GAAM9X,SAG7D,IAAyB,IAAtBA,EAAQH,UAAmB,CAC5B,MAAM/c,EAASsqF,EAAc//C,EAAK3Q,MAAMlB,GAAS,GAAIxb,GAEnD2tE,EAAKnyD,GADc,iBAAX14B,EACQ,CAAEA,GAEFA,MACW,WAAtBkd,EAAQH,UACf8tE,EAAKnyD,GAAW,CAAC4xD,EAAc//C,EAAK3Q,MAAMlB,GAAS,GAAIxb,IAEvD2tE,EAAKnyD,GAAW4xD,EAAc//C,EAAK3Q,MAAMlB,GAAS,GAAIxb,GAM5D,OAAO2tE,GAGT/7F,EAAQw7F,cAAgBA,G,6BClDxBz7F,EAAOC,QAAU,SAAS4pC,EAASiB,EAAQhnC,GACzCnB,KAAKknC,QAAUA,EACflnC,KAAKmoC,OAASA,EACdnoC,KAAKooC,MAAQ,GACbpoC,KAAKqoC,SAAW,GAChBroC,KAAKmB,IAAMA,EACXnB,KAAKwoC,SAAW,SAASJ,GACnB5/B,MAAMhJ,QAAQQ,KAAKooC,MAAMA,EAAMlB,UAEjClnC,KAAKooC,MAAMA,EAAMlB,SAASxiC,KAAK0jC,GAE/BpoC,KAAKooC,MAAMA,EAAMlB,SAAW,CAACkB,M,6BCXnC,MAAMtU,EAAO,EAAQ,KAEfnI,EAAiB,CACrBqa,wBAAwB,GAGpBpa,EAAQ,CAAC,0BA8Kf,SAAS0tE,EAAOzxD,EAASrmC,GAEvB,IADA,IAAIQ,EAAQR,EACLA,EAAIqmC,EAAQnpC,OAAQ8C,IACzB,GAAkB,KAAdqmC,EAAQrmC,IAA2B,KAAdqmC,EAAQrmC,QAAjC,CAEE,IAAI0lC,EAAUW,EAAQzjC,OAAOpC,EAAOR,EAAIQ,GACxC,GAAIR,EAAI,GAAiB,QAAZ0lC,EACX,OAAOqyD,EAAe,aAAc,6DAA8DC,EAAyB3xD,EAASrmC,IAC/H,GAAkB,KAAdqmC,EAAQrmC,IAA+B,KAAlBqmC,EAAQrmC,EAAI,GAAW,CAErDA,IACA,OAMN,OAAOA,EAGT,SAASi4F,EAAoB5xD,EAASrmC,GACpC,GAAIqmC,EAAQnpC,OAAS8C,EAAI,GAAwB,MAAnBqmC,EAAQrmC,EAAI,IAAiC,MAAnBqmC,EAAQrmC,EAAI,IAElE,IAAKA,GAAK,EAAGA,EAAIqmC,EAAQnpC,OAAQ8C,IAC/B,GAAmB,MAAfqmC,EAAQrmC,IAAiC,MAAnBqmC,EAAQrmC,EAAI,IAAiC,MAAnBqmC,EAAQrmC,EAAI,GAAY,CAC1EA,GAAK,EACL,YAGC,GACLqmC,EAAQnpC,OAAS8C,EAAI,GACF,MAAnBqmC,EAAQrmC,EAAI,IACO,MAAnBqmC,EAAQrmC,EAAI,IACO,MAAnBqmC,EAAQrmC,EAAI,IACO,MAAnBqmC,EAAQrmC,EAAI,IACO,MAAnBqmC,EAAQrmC,EAAI,IACO,MAAnBqmC,EAAQrmC,EAAI,IACO,MAAnBqmC,EAAQrmC,EAAI,GACZ,CACA,IAAIk4F,EAAqB,EACzB,IAAKl4F,GAAK,EAAGA,EAAIqmC,EAAQnpC,OAAQ8C,IAC/B,GAAmB,MAAfqmC,EAAQrmC,GACVk4F,SACK,GAAmB,MAAf7xD,EAAQrmC,KACjBk4F,IAC2B,IAAvBA,GACF,WAID,GACL7xD,EAAQnpC,OAAS8C,EAAI,GACF,MAAnBqmC,EAAQrmC,EAAI,IACO,MAAnBqmC,EAAQrmC,EAAI,IACO,MAAnBqmC,EAAQrmC,EAAI,IACO,MAAnBqmC,EAAQrmC,EAAI,IACO,MAAnBqmC,EAAQrmC,EAAI,IACO,MAAnBqmC,EAAQrmC,EAAI,IACO,MAAnBqmC,EAAQrmC,EAAI,GAEZ,IAAKA,GAAK,EAAGA,EAAIqmC,EAAQnpC,OAAQ8C,IAC/B,GAAmB,MAAfqmC,EAAQrmC,IAAiC,MAAnBqmC,EAAQrmC,EAAI,IAAiC,MAAnBqmC,EAAQrmC,EAAI,GAAY,CAC1EA,GAAK,EACL,MAKN,OAAOA,EA/OTlE,EAAQkjC,SAAW,SAAUqH,EAASnc,GACpCA,EAAUoI,EAAKrI,aAAaC,EAASC,EAAgBC,GAKrD,MAAMub,EAAO,GACb,IAAIwyD,GAAW,EAGXC,GAAc,EAEC,WAAf/xD,EAAQ,KAEVA,EAAUA,EAAQzjC,OAAO,IAG3B,IAAK,IAAI5C,EAAI,EAAGA,EAAIqmC,EAAQnpC,OAAQ8C,IAAK,CACvC,GAAmB,MAAfqmC,EAAQrmC,GAmIL,CACL,GAAmB,MAAfqmC,EAAQrmC,IAA6B,OAAfqmC,EAAQrmC,IAA8B,OAAfqmC,EAAQrmC,IAA8B,OAAfqmC,EAAQrmC,GAC9E,SAEF,OAAO+3F,EAAe,cAAe,SAAS1xD,EAAQrmC,uBAAwBg4F,EAAyB3xD,EAASrmC,IAlIhH,GADAA,IACmB,MAAfqmC,EAAQrmC,IAEV,GADAA,EAAI83F,EAAOzxD,IAAWrmC,GAClBA,EAAEoQ,IACJ,OAAOpQ,MAEJ,IAAmB,MAAfqmC,EAAQrmC,GAAY,CAC7BA,EAAIi4F,EAAoB5xD,EAASrmC,GACjC,SACK,CACL,IAAIq4F,GAAa,EACE,MAAfhyD,EAAQrmC,KAEVq4F,GAAa,EACbr4F,KAGF,IAAI+kC,EAAU,GACd,KAEE/kC,EAAIqmC,EAAQnpC,QACG,MAAfmpC,EAAQrmC,IACO,MAAfqmC,EAAQrmC,IACO,OAAfqmC,EAAQrmC,IACO,OAAfqmC,EAAQrmC,IACO,OAAfqmC,EAAQrmC,GACRA,IAEA+kC,GAAWsB,EAAQrmC,GAWrB,GATA+kC,EAAUA,EAAQ95B,OAGkB,MAAhC85B,EAAQA,EAAQ7nC,OAAS,KAE3B6nC,EAAUA,EAAQzP,UAAU,EAAGyP,EAAQ7nC,OAAS,GAEhD8C,KAyTe0lC,EAvTIX,GA2TpBzS,EAAKhI,OAAOob,GA3TkB,CAC7B,IAAIp4B,EAMJ,OAJEA,EAD2B,IAA1By3B,EAAQ95B,OAAO/N,OACV,6EAEA,QAAQ6nC,yBAETgzD,EAAe,aAAczqF,EAAK0qF,EAAyB3xD,EAASrmC,IAG7E,MAAMgN,EAASsrF,EAAiBjyD,EAASrmC,GACzC,IAAe,IAAXgN,EACF,OAAO+qF,EAAe,cAAe,mBAAmBhzD,sBAA6BizD,EAAyB3xD,EAASrmC,IAEzH,IAAIimC,EAAUj5B,EAAO5Q,MAGrB,GAFA4D,EAAIgN,EAAO4d,MAEyB,MAAhCqb,EAAQA,EAAQ/oC,OAAS,GAAY,CAEvC+oC,EAAUA,EAAQ3Q,UAAU,EAAG2Q,EAAQ/oC,OAAS,GAChD,MAAMq7F,EAAUC,EAAwBvyD,EAAS/b,GACjD,IAAgB,IAAZquE,EAOF,OAAOR,EAAeQ,EAAQnoF,IAAIxF,KAAM2tF,EAAQnoF,IAAI9C,IAAK0qF,EAAyB3xD,EAASrmC,EAAIimC,EAAQ/oC,OAASq7F,EAAQnoF,IAAIuzD,OAN5Hw0B,GAAW,OAQR,GAAIE,EAAY,CACrB,IAAKrrF,EAAOyrF,UACV,OAAOV,EAAe,aAAc,gBAAgBhzD,kCAAyCizD,EAAyB3xD,EAASrmC,IAC1H,GAAIimC,EAAQh7B,OAAO/N,OAAS,EACjC,OAAO66F,EAAe,aAAc,gBAAgBhzD,gDAAuDizD,EAAyB3xD,EAASrmC,IACxI,CACL,MAAM04F,EAAM/yD,EAAKlV,MACjB,GAAIsU,IAAY2zD,EACd,OAAOX,EAAe,aAAc,gBAAgBW,8BAAgC3zD,MAAaizD,EAAyB3xD,EAASrmC,IAInH,GAAf2lC,EAAKzoC,SAENk7F,GAAc,QAGb,CACL,MAAMG,EAAUC,EAAwBvyD,EAAS/b,GACjD,IAAgB,IAAZquE,EAIF,OAAOR,EAAeQ,EAAQnoF,IAAIxF,KAAM2tF,EAAQnoF,IAAI9C,IAAK0qF,EAAyB3xD,EAASrmC,EAAIimC,EAAQ/oC,OAASq7F,EAAQnoF,IAAIuzD,OAI9H,IAAmB,IAAhBy0B,EACC,OAAOL,EAAe,aAAc,sCAAuCC,EAAyB3xD,EAASrmC,IAE7G2lC,EAAKziC,KAAK6hC,GAEdozD,GAAW,EAKb,IAAKn4F,IAAKA,EAAIqmC,EAAQnpC,OAAQ8C,IAAK,CACjC,GAAmB,MAAfqmC,EAAQrmC,GAAY,CACtB,GAAuB,MAAnBqmC,EAAQrmC,EAAI,GAAY,CAE1BA,IACAA,EAAIi4F,EAAoB5xD,EAASrmC,GACjC,SAEA,MAEG,GAAmB,MAAfqmC,EAAQrmC,GAAY,CAC7B,MAAM24F,EAAWC,EAAkBvyD,EAASrmC,GAC5C,IAAiB,GAAb24F,EACF,OAAOZ,EAAe,cAAe,4BAA6BC,EAAyB3xD,EAASrmC,IACtGA,EAAI24F,GAGW,MAAftyD,EAAQrmC,IACVA,MAkOV,IAAyB0lC,EAvNvB,OAAKyyD,IAEMxyD,EAAKzoC,OAAS,IAChB66F,EAAe,aAAc,YAAY9/C,KAAKC,UAAUvS,EAAM,KAAM,GAAGz6B,QAAQ,SAAU,cAAe,GAFxG6sF,EAAe,aAAc,sBAAuB,IA4F/D,SAASO,EAAiBjyD,EAASrmC,GACjC,IAAIimC,EAAU,GACV4yD,EAAY,GACZJ,GAAY,EAChB,KAAOz4F,EAAIqmC,EAAQnpC,OAAQ8C,IAAK,CAC9B,GAbc,MAaVqmC,EAAQrmC,IAZE,MAYoBqmC,EAAQrmC,GACxC,GAAkB,KAAd64F,EACFA,EAAYxyD,EAAQrmC,OACf,IAAI64F,IAAcxyD,EAAQrmC,GAE/B,SAEA64F,EAAY,QAET,GAAmB,MAAfxyD,EAAQrmC,IACC,KAAd64F,EAAkB,CACpBJ,GAAY,EACZ,MAGJxyD,GAAWI,EAAQrmC,GAErB,MAAkB,KAAd64F,GAIG,CAAEz8F,MAAO6pC,EAASrb,MAAO5qB,EAAGy4F,UAAWA,GAMhD,MAAMK,EAAoB,IAAIpvE,OAAO,0DAA2D,KAIhG,SAAS8uE,EAAwBvyD,EAAS/b,GAKxC,MAAMQ,EAAU4H,EAAK9H,cAAcyb,EAAS6yD,GACtCC,EAAY,GAElB,IAAK,IAAI/4F,EAAI,EAAGA,EAAI0qB,EAAQxtB,OAAQ8C,IAAK,CACvC,GAA6B,IAAzB0qB,EAAQ1qB,GAAG,GAAG9C,OAEhB,OAAO66F,EAAe,cAAe,cAAcrtE,EAAQ1qB,GAAG,gCAAiCg5F,EAAqB/yD,EAASvb,EAAQ1qB,GAAG,KACnI,QAAsBpC,IAAlB8sB,EAAQ1qB,GAAG,KAAqBkqB,EAAQsa,uBAEjD,OAAOuzD,EAAe,cAAe,sBAAsBrtE,EAAQ1qB,GAAG,sBAAuBg5F,EAAqB/yD,EAASvb,EAAQ1qB,GAAG,KAKxI,MAAMilC,EAAWva,EAAQ1qB,GAAG,GAC5B,IAAKi5F,EAAiBh0D,GACpB,OAAO8yD,EAAe,cAAe,cAAc9yD,yBAAiC+zD,EAAqB/yD,EAASvb,EAAQ1qB,GAAG,KAE/H,GAAK+4F,EAAUntF,eAAeq5B,GAI5B,OAAO8yD,EAAe,cAAe,cAAc9yD,kBAA0B+zD,EAAqB/yD,EAASvb,EAAQ1qB,GAAG,KAFtH+4F,EAAU9zD,GAAY,EAM1B,OAAO,EAkBT,SAAS2zD,EAAkBvyD,EAASrmC,GAGlC,GAAmB,MAAfqmC,IADJrmC,GAEE,OAAQ,EACV,GAAmB,MAAfqmC,EAAQrmC,GAEV,OAtBJ,SAAiCqmC,EAASrmC,GACxC,IAAI8f,EAAK,KAKT,IAJmB,MAAfumB,EAAQrmC,KACVA,IACA8f,EAAK,cAEA9f,EAAIqmC,EAAQnpC,OAAQ8C,IAAK,CAC9B,GAAmB,MAAfqmC,EAAQrmC,GACV,OAAOA,EACT,IAAKqmC,EAAQrmC,GAAGsG,MAAMwZ,GACpB,MAEJ,OAAQ,EAUCo5E,CAAwB7yD,IAD/BrmC,GAGF,IAAI0uB,EAAQ,EACZ,KAAO1uB,EAAIqmC,EAAQnpC,OAAQ8C,IAAK0uB,IAC9B,KAAI2X,EAAQrmC,GAAGsG,MAAM,OAASooB,EAAQ,IAAtC,CAEA,GAAmB,MAAf2X,EAAQrmC,GACV,MACF,OAAQ,EAEV,OAAOA,EAGT,SAAS+3F,EAAentF,EAAMmlB,EAASqzC,GACrC,MAAO,CACLhzD,IAAK,CACHxF,KAAMA,EACN0C,IAAKyiB,EACL4zC,KAAMP,IAKZ,SAAS61B,EAAiBh0D,GACxB,OAAO3S,EAAKhI,OAAO2a,GAcrB,SAAS+yD,EAAyB3xD,EAASzb,GAEzC,OADYyb,EAAQ/Q,UAAU,EAAG1K,GAAOvC,MAAM,SACjCnrB,OAIf,SAAS87F,EAAqB/yD,EAAS3/B,GACrC,OAAO2/B,EAAQzkC,QAAQ8E,GAASA,EAAMpJ,S,6BC7YxC,MAAMy/C,EAAO,SAASl3C,GACpB,OAAO1D,OAAO0C,aAAagB,IAGvB0zF,EAAQ,CACZC,QAASz8C,EAAK,KACd08C,YAAa18C,EAAK,KAClB28C,aAAc38C,EAAK,KACnB48C,iBAAkB58C,EAAK,KAEvB68C,UAAW78C,EAAK,KAChB88C,WAAY98C,EAAK,KAEjB+8C,YAAa/8C,EAAK,KAElBg9C,SAAUh9C,EAAK,KACfi9C,SAAUj9C,EAAK,KACfk9C,SAAUl9C,EAAK,MAGXm9C,EAAW,CACfX,EAAMC,QACND,EAAMG,aACNH,EAAME,YACNF,EAAMI,iBACNJ,EAAMO,YACNP,EAAMK,UACNL,EAAMM,WACNN,EAAMU,SACNV,EAAMQ,SACNR,EAAMS,UAGFnwD,EAAK,SAAS8N,EAAMwiD,EAAU7vE,GAClC,GAAwB,iBAAb6vE,EAET,OAAIxiD,GAAQA,EAAK,SAAsB35C,IAAhB25C,EAAK,GAAG53C,IACtBqqB,EAASutB,EAAK,GAAG53C,IAAKo6F,GAEtB/vE,EAASutB,EAAMwiD,GAEnB,CACL,MAAMC,OA6EKp8F,KADEi6F,EA5EgBtgD,GA8EtB4hD,EAAME,YACK,OAATxB,EACFsB,EAAMC,UAEbvB,EAAKjxD,OAC8B,IAAnCjrC,OAAOmuB,KAAK+tE,EAAKjxD,OAAO1pC,UACtB26F,EAAKhxD,UAAkD,IAAtClrC,OAAOmuB,KAAK+tE,EAAKhxD,UAAU3pC,UAEvCi8F,EAAMK,UArFb,IAAqB,IAAjBQ,EAAuB,CACzB,IAAIh3F,EAAM,GACV,GAAIgE,MAAMhJ,QAAQ+7F,GAAW,CAE3B/2F,GAAOm2F,EAAMS,SACb,MAAMK,EAAaF,EAAS,GAEtBG,EAAU3iD,EAAKr6C,OAErB,GAA0B,iBAAf+8F,EACT,IAAK,IAAIE,EAAQ,EAAGA,EAAQD,EAASC,IAAS,CAC5C,MAAM3sF,EAAIwc,EAASutB,EAAK4iD,GAAOx6F,IAAKs6F,GACpCj3F,EAAMo3F,EAAap3F,EAAKwK,QAG1B,IAAK,IAAI2sF,EAAQ,EAAGA,EAAQD,EAASC,IAAS,CAC5C,MAAM3sF,EAAIi8B,EAAG8N,EAAK4iD,GAAQF,EAAY/vE,GACtClnB,EAAMo3F,EAAap3F,EAAKwK,GAG5BxK,GAAOm2F,EAAMU,aACR,CAEL72F,GAAOm2F,EAAMQ,SACb,MAAM7vE,EAAOnuB,OAAOmuB,KAAKiwE,GACrB/yF,MAAMhJ,QAAQu5C,KAChBA,EAAOA,EAAK,IAEd,IAAK,IAAIv3C,KAAK8pB,EAAM,CAClB,MAAMhtB,EAAMgtB,EAAK9pB,GAIjB,IAAIwN,EAEFA,GADG0c,EAAQoa,kBAAoBiT,EAAK1Q,UAAY0Q,EAAK1Q,SAAS/pC,GAC1D2sC,EAAG8N,EAAK1Q,SAAS/pC,GAAMi9F,EAASj9F,GAAMotB,GACjCptB,IAAQotB,EAAQma,aACrBoF,EAAG8N,EAAK53C,IAAKo6F,EAASj9F,GAAMotB,GAE5Buf,EAAG8N,EAAK3Q,MAAM9pC,GAAMi9F,EAASj9F,GAAMotB,GAEzClnB,EAAMo3F,EAAap3F,EAAKwK,IAG5B,OAAOxK,EAEP,OAAOg3F,EA6Bb,IAAiBnC,GAxBX7tE,EAAW,SAASvkB,GACxB,OAAQA,GACN,UAAK7H,EACH,OAAOu7F,EAAMI,iBACf,KAAK,KACH,OAAOJ,EAAMG,aACf,IAAK,GACH,OAAOH,EAAMM,WACf,QACE,OAAOh0F,IAIP20F,EAAe,SAASp3F,EAAKwK,GAIjC,OAHK6sF,EAAU7sF,EAAE,KAAQ6sF,EAAUr3F,EAAIA,EAAI9F,OAAS,MAClD8F,GAAOm2F,EAAMO,aAER12F,EAAMwK,GAGT6sF,EAAY,SAASrnF,GACzB,OAAiC,IAA1B8mF,EAASt4F,QAAQwR,IAmB1B,MAAMsnF,EAAM,EAAQ,KACdrwE,EAAe,EAAQ,KAAUA,aAOvCnuB,EAAQ07F,aALa,SAASjgD,EAAMwiD,EAAU7vE,GAE5C,OADAA,EAAUD,EAAaC,EAASowE,EAAInwE,eAAgBmwE,EAAIlwE,OACjDqf,EAAG8N,EAAMwiD,EAAU7vE,K,6BC1I5B,MAAMoI,EAAO,EAAQ,KACfrI,EAAe,EAAQ,KAAUA,aACjCqwE,EAAM,EAAQ,KAUdC,EAAc,SAAShjD,EAAMrtB,EAASswE,GAC1C,IAAI3C,EAAO,IAGX,MAAM/tE,EAAOnuB,OAAOmuB,KAAKytB,EAAK3Q,OAE9B,IAAK,IAAIhc,EAAQ,EAAGA,EAAQd,EAAK5sB,OAAQ0tB,IAAS,CAChD,IAAI8a,EAAU5b,EAAKc,GACnB,GAAI2sB,EAAK3Q,MAAMlB,IAAY6R,EAAK3Q,MAAMlB,GAASxoC,OAAS,EAAG,CAEzD,IAAK,IAAI8kC,KADT61D,GAAQ,IAAMnyD,EAAU,SACR6R,EAAK3Q,MAAMlB,GACzBmyD,GAAQ0C,EAAYhjD,EAAK3Q,MAAMlB,GAAS1D,GAAM9X,GAAW,MAE3D2tE,EAAOA,EAAKj1F,OAAO,EAAGi1F,EAAK36F,OAAS,GAAK,WAEzC26F,GAAQ,IAAMnyD,EAAU,OAAS60D,EAAYhjD,EAAK3Q,MAAMlB,GAAS,GAAIxb,GAAW,KAKpF,OAFAoI,EAAKvlB,MAAM8qF,EAAMtgD,EAAK1Q,UAElBvU,EAAKzI,cAAcguE,GACdvlE,EAAK3I,QAAQ4tB,EAAK53C,KAAO43C,EAAK53C,IAAM,IAEvC2yB,EAAK3I,QAAQ4tB,EAAK53C,OACM,iBAAb43C,EAAK53C,KAAkC,KAAb43C,EAAK53C,KAAc43C,EAAK53C,MAAQuqB,EAAQ2a,qBAC7EgzD,GAAQ,IAAM3tE,EAAQma,aAAe,SAYjC,KADOza,EAX6C2tB,EAAK53C,OAY3C,IAANiqB,GAAgBtoB,MAAMsoB,GAG/B,IAAMA,EAAI,IAFVA,IARqB,MAA1BiuE,EAAKA,EAAK36F,OAAS,KACrB26F,EAAOA,EAAKj1F,OAAO,EAAGi1F,EAAK36F,OAAS,IAE/B26F,EAAO,KAGhB,IAAmBjuE,GAYnB9tB,EAAQ27F,oBAvDoB,SAASlgD,EAAMrtB,GAIzC,OAHAA,EAAUD,EAAaC,EAASowE,EAAInwE,eAAgBmwE,EAAIlwE,QAEhDqwE,SAAWvwE,EAAQuwE,UAAY,GAChCF,EAAYhjD,EAAMrtB,EAAS,K,6BCTpC,MAAMD,EAAe,EAAQ,KAAUA,aAEjCE,EAAiB,CACrBga,oBAAqB,KACrBC,cAAc,EACdC,aAAc,QACdC,kBAAkB,EAClBM,cAAc,EACdC,kBAAmB,MACnB06B,QAAQ,EACRk7B,SAAU,KACVC,kBAAkB,EAClB51D,kBAAmB,SAASr/B,GAC1B,OAAOA,GAETu/B,mBAAoB,SAASv/B,GAC3B,OAAOA,IAIL2kB,EAAQ,CACZ,sBACA,eACA,eACA,mBACA,eACA,oBACA,SACA,WACA,mBACA,oBACA,sBAGF,SAASuwE,EAAOzwE,GACd1rB,KAAK0rB,QAAUD,EAAaC,EAASC,EAAgBC,GACjD5rB,KAAK0rB,QAAQoa,kBAAoB9lC,KAAK0rB,QAAQka,aAChD5lC,KAAKo8F,YAAc,WACjB,OAAO,IAGTp8F,KAAKq8F,cAAgBr8F,KAAK0rB,QAAQia,oBAAoBjnC,OACtDsB,KAAKo8F,YAAcA,GAEjBp8F,KAAK0rB,QAAQ0a,aACfpmC,KAAKs8F,QAAUA,EAEft8F,KAAKs8F,QAAU,WACb,OAAO,GAGXt8F,KAAKu8F,gBAAkBA,EACvBv8F,KAAKw8F,gBAAkBA,EAEnBx8F,KAAK0rB,QAAQq1C,QACf/gE,KAAKy8F,UAAYA,EACjBz8F,KAAK08F,WAAa,MAClB18F,KAAK28F,QAAU,OAEf38F,KAAKy8F,UAAY,WACf,MAAO,IAETz8F,KAAK08F,WAAa,IAClB18F,KAAK28F,QAAU,IAGb38F,KAAK0rB,QAAQwwE,kBACfl8F,KAAK48F,cAAgBC,EACrB78F,KAAK88F,aAAeC,IAEpB/8F,KAAK48F,cAAgBI,EACrBh9F,KAAK88F,aAAeG,GAGtBj9F,KAAKg9F,iBAAmBA,EACxBh9F,KAAKi9F,gBAAkBA,EAsFzB,SAASV,EAAgB/3F,EAAK04F,GAE5B,OADA14F,EAAMxE,KAAK0rB,QAAQ4a,kBAAkB,GAAK9hC,GACH,KAAnCxE,KAAK0rB,QAAQ2a,mBAAoC,KAAR7hC,EACpCA,EAAM,YAAc04F,EAAQ,KAAOl9F,KAAK08F,WAExCl4F,EAAIkI,QAAQ1M,KAAK0rB,QAAQ2a,kBAAmB,YAAc62D,EAAQ,KAAOl9F,KAAK08F,YAIzF,SAASF,EAAgBh4F,EAAK04F,GAE5B,GADA14F,EAAMxE,KAAK0rB,QAAQ4a,kBAAkB,GAAK9hC,GACH,KAAnCxE,KAAK0rB,QAAQ2a,mBAAoC,KAAR7hC,EAC3C,OAAOA,EAAM,YAAc04F,EAAMn1F,KAAK,gBAAkB,KAAO/H,KAAK08F,WAEpE,IAAK,IAAItxE,KAAK8xE,EACZ14F,EAAMA,EAAIkI,QAAQ1M,KAAK0rB,QAAQ2a,kBAAmB,YAAc62D,EAAM9xE,GAAK,OAE7E,OAAO5mB,EAAMxE,KAAK28F,QAItB,SAASM,EAAgB97F,EAAK7C,EAAKmpC,EAASu0D,GAC1C,OAAIv0D,IAAYtmC,EAAIkH,SAAS,KAEzBrI,KAAKy8F,UAAUT,GACf,IACA19F,EACAmpC,EACA,IACAtmC,EAGA,KACA7C,EACA0B,KAAK08F,WAIL18F,KAAKy8F,UAAUT,GACf,IACA19F,EACAmpC,EACAznC,KAAK08F,WACLv7F,EAEAnB,KAAKy8F,UAAUT,GACf,KACA19F,EACA0B,KAAK08F,WAKX,SAASK,EAAkB57F,EAAK7C,EAAKmpC,EAASu0D,GAC5C,MAAY,KAAR76F,EACKnB,KAAKi9F,gBAAgB97F,EAAK7C,EAAKmpC,EAASu0D,GAExCh8F,KAAKy8F,UAAUT,GAAS,IAAM19F,EAAMmpC,EAAU,IAAMznC,KAAK08F,WAKpE,SAASM,EAAiB77F,EAAK7C,EAAKmpC,EAASu0D,GAC3C,OACEh8F,KAAKy8F,UAAUT,GACf,IACA19F,EACAmpC,EACA,IACAznC,KAAK0rB,QAAQ4a,kBAAkBnlC,GAC/B,KACA7C,EACA0B,KAAK08F,WAIT,SAASG,EAAmB17F,EAAK7C,EAAKmpC,EAASu0D,GAC7C,MAAY,KAAR76F,EACKnB,KAAKg9F,iBAAiB77F,EAAK7C,EAAKmpC,EAASu0D,GAEzCh8F,KAAKy8F,UAAUT,GAAS,IAAM19F,EAAMmpC,EAAU,IAAMznC,KAAK08F,WAIpE,SAASD,EAAUT,GACjB,OAAOh8F,KAAK0rB,QAAQuwE,SAASkB,OAAOnB,GAGtC,SAASI,EAAYhrF,GACnB,QAAIA,EAAKgsF,WAAWp9F,KAAK0rB,QAAQia,sBACxBv0B,EAAKhN,OAAOpE,KAAKq8F,eAM5B,SAASC,EAAQlrF,GACf,OAAOA,IAASpR,KAAK0rB,QAAQ0a,aApL/B+1D,EAAOz+F,UAAU4/C,MAAQ,SAAS+7C,GAChC,OAAOr5F,KAAKq9F,IAAIhE,EAAM,GAAGl4F,KAG3Bg7F,EAAOz+F,UAAU2/F,IAAM,SAAShE,EAAM2C,GACpC,IAAIv0D,EAAU,GACVtmC,EAAM,GACV,MAAMmqB,EAAOnuB,OAAOmuB,KAAK+tE,GACnBr4F,EAAMsqB,EAAK5sB,OACjB,IAAK,IAAI8C,EAAI,EAAGA,EAAIR,EAAKQ,IAAK,CAC5B,MAAMlD,EAAMgtB,EAAK9pB,GACjB,QAAyB,IAAd63F,EAAK/6F,SAET,GAAkB,OAAd+6F,EAAK/6F,GACd6C,GAAOnB,KAAKy8F,UAAUT,GAAS,IAAM19F,EAAM,IAAM0B,KAAK08F,gBACjD,GAAIrD,EAAK/6F,aAAgBg/D,KAC9Bn8D,GAAOnB,KAAK48F,cAAcvD,EAAK/6F,GAAMA,EAAK,GAAI09F,QACzC,GAAyB,iBAAd3C,EAAK/6F,GAAmB,CAExC,MAAMg/F,EAAOt9F,KAAKo8F,YAAY99F,GAC1Bg/F,EACF71D,GAAW,IAAM61D,EAAO,KAAOt9F,KAAK0rB,QAAQ8a,mBAAmB,GAAK6yD,EAAK/6F,IAAQ,IACxE0B,KAAKs8F,QAAQh+F,GAClB+6F,EAAKr5F,KAAK0rB,QAAQma,cACpB1kC,GAAOnB,KAAKu8F,gBAAgBlD,EAAKr5F,KAAK0rB,QAAQma,cAAewzD,EAAK/6F,IAElE6C,GAAOnB,KAAKu8F,gBAAgB,GAAIlD,EAAK/6F,IAInCA,IAAQ0B,KAAK0rB,QAAQma,aACnBwzD,EAAKr5F,KAAK0rB,QAAQ0a,gBAGpBjlC,GAAOnB,KAAK0rB,QAAQ4a,kBAAkB,GAAK+yD,EAAK/6F,KAGlD6C,GAAOnB,KAAK48F,cAAcvD,EAAK/6F,GAAMA,EAAK,GAAI09F,QAG7C,GAAIxzF,MAAMhJ,QAAQ65F,EAAK/6F,IAE5B,GAAI0B,KAAKs8F,QAAQh+F,GACf6C,GAAOnB,KAAKy8F,UAAUT,GAClB3C,EAAKr5F,KAAK0rB,QAAQma,cACpB1kC,GAAOnB,KAAKw8F,gBAAgBnD,EAAKr5F,KAAK0rB,QAAQma,cAAewzD,EAAK/6F,IAElE6C,GAAOnB,KAAKw8F,gBAAgB,GAAInD,EAAK/6F,QAElC,CAEL,MAAMi/F,EAASlE,EAAK/6F,GAAKI,OACzB,IAAK,IAAIkF,EAAI,EAAGA,EAAI25F,EAAQ35F,IAAK,CAC/B,MAAMg2B,EAAOy/D,EAAK/6F,GAAKsF,GACvB,QAAoB,IAATg2B,QAEJ,GAAa,OAATA,EACTz4B,GAAOnB,KAAKy8F,UAAUT,GAAS,IAAM19F,EAAM,IAAM0B,KAAK08F,gBACjD,GAAoB,iBAAT9iE,EAAmB,CACnC,MAAMprB,EAASxO,KAAKq9F,IAAIzjE,EAAMoiE,EAAQ,GACtC76F,GAAOnB,KAAK88F,aAAatuF,EAAOrN,IAAK7C,EAAKkQ,EAAOi5B,QAASu0D,QAE1D76F,GAAOnB,KAAK48F,cAAchjE,EAAMt7B,EAAK,GAAI09F,SAM/C,GAAIh8F,KAAK0rB,QAAQka,cAAgBtnC,IAAQ0B,KAAK0rB,QAAQka,aAAc,CAClE,MAAM43D,EAAKrgG,OAAOmuB,KAAK+tE,EAAK/6F,IACtBm/F,EAAID,EAAG9+F,OACb,IAAK,IAAIkF,EAAI,EAAGA,EAAI65F,EAAG75F,IACrB6jC,GAAW,IAAM+1D,EAAG55F,GAAK,KAAO5D,KAAK0rB,QAAQ8a,mBAAmB,GAAK6yD,EAAK/6F,GAAKk/F,EAAG55F,KAAO,QAEtF,CACL,MAAM4K,EAASxO,KAAKq9F,IAAIhE,EAAK/6F,GAAM09F,EAAQ,GAC3C76F,GAAOnB,KAAK88F,aAAatuF,EAAOrN,IAAK7C,EAAKkQ,EAAOi5B,QAASu0D,IAIhE,MAAO,CAACv0D,QAASA,EAAStmC,IAAKA,IA2GjC9D,EAAOC,QAAU6+F,G;;;;;;;EClQjB9+F,EAAOC,QAAU,CACf6O,IA6EF,SAA2B4jC,EAAQ2tD,EAAU9/F,GACzC,GAAImyC,GAA2B,iBAAVA,EAAoB,CACrC,GAAuB,iBAAZ2tD,GAAqC,KAAbA,EAAiB,CAChD,IAAI7zE,EAAQ6zE,EAAS7zE,MAAM,KAC3B,OAAOA,EAAM42B,QAAO,SAAU3/C,EAAKg2C,EAAMo5C,GACrC,IAAIyN,EAAmB55F,OAAO65F,UAAU75F,OAAO8lB,EAAMqmE,EAAM,KAM3D,OAJApvF,EAAIg2C,GAAQh2C,EAAIg2C,KAAU6mD,EAAmB,GAAK,IAC9C9zE,EAAMnrB,QAAWwxF,EAAM,IACvBpvF,EAAIg2C,GAAQl5C,GAETkD,EAAIg2C,KACZ/G,GACA,MAAuB,iBAAZ2tD,GACd3tD,EAAO2tD,GAAY9/F,EACZmyC,EAAO2tD,IAEP3tD,EAGX,OAAOA,GAhGbl9B,IAeF,SAA2Bk9B,EAAQ2tD,GAC/B,OAAI3tD,GAA2B,iBAAVA,EACM,iBAAZ2tD,GAAqC,KAAbA,EACnBA,EAAS7zE,MAAM,KACd42B,QAAO,SAAU3/C,EAAKg2C,GAC/B,OAAOh2C,GAAOA,EAAIg2C,KACnB/G,GACuB,iBAAZ2tD,EACP3tD,EAAO2tD,GAEP3tD,EAGJA,GA3Bbq5B,IAyCF,SAA2Br5B,EAAQ2tD,EAAUhyE,GAGzC,OAFAA,EAAUA,GAAW,MAEjBqkB,GAA2B,iBAAVA,KACM,iBAAZ2tD,GAAqC,KAAbA,EACnBA,EAAS7zE,MAAM,KACd42B,QAAO,SAAU3/C,EAAKg2C,EAAMo5C,EAAK/vF,GAC1C,OAAI+vF,GAAO/vF,EAAMzB,OAAS,EAClBgtB,EAAQmyE,OACE/8F,IAAOA,EAAIsM,eAAe0pC,MAElB,OAARh2C,GAA8B,iBAAPA,KAAmBg2C,KAAQh2C,IAG7DA,GAAOA,EAAIg2C,KACnB/G,GACuB,iBAAZ2tD,GACPA,KAAY3tD,IAzD7B+tD,OAAQ,SAAU/tD,EAAQ2tD,EAAUhyE,GAChC,OAAO1rB,KAAKopE,IAAIr5B,EAAQ2tD,EAAUhyE,GAAW,CAACmyE,KAAK,KAEvDE,KAyGF,SAA4BhuD,EAAQ2tD,EAAUM,EAActyE,GAGxD,GAFAA,EAAUA,GAAW,GAEjBqkB,GAA2B,iBAAVA,EAAoB,CACrC,GAAuB,iBAAZ2tD,GAAqC,KAAbA,EAAiB,CAChD,IAEItQ,EAFAvjE,EAAQ6zE,EAAS7zE,MAAM,KACvBk0E,GAAO,EAQX,OALA3Q,IAAevjE,EAAM42B,QAAO,SAAU3/C,EAAKg2C,GAEvC,OADAinD,EAAOA,GAAQj9F,IAAQk9F,KAAmBl9F,GAAOA,EAAIg2C,KAAUknD,EACxDl9F,GAAOA,EAAIg2C,KACnB/G,GAECrkB,EAAQuyE,UACDF,GAAQ3Q,EAER2Q,EAGX,OAAO,EAGX,OAAO,K,6BC9If,IAAMh8B,EAAmBtwD,EAAQ,K,EAO7BA,EAAQ,KAJV2uC,E,EAAAA,WACAG,E,EAAAA,QACAK,E,EAAAA,sBACAS,E,EAAAA,QAYFhkD,EAAOC,QAAU,CACfmvF,gBAVF,SAAyBC,EAAShhE,GAChC,IAAMm1B,EAAiB,CACrBpD,IAAK8C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWssC,IAC3Cz4D,OAAQ,SAGV,OADA2sB,EAAsBC,EAAgBn1B,GAC/B21B,EAAQR,GAAgByD,KAAKyd,EAAiBrwD,uB,iCCdrDA,EACED,EAAQ,KADVC,mB,EAQED,EAAQ,KAJV2uC,E,EAAAA,WACAG,E,EAAAA,QACAK,E,EAAAA,sBACAS,E,EAAAA,QAYFhkD,EAAOC,QAAU,CACfwvF,cAVF,SAAuBT,EAAYxrC,EAAgBn1B,GAMjD,OALKm1B,EAAepD,MAClBoD,EAAepD,IAAM8C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWisC,GAAa,MAG1EzrC,EAAsBC,EAAgBn1B,GAC/B21B,EAAQR,GAAgByD,KAAK5yC,M,6BCjBtC,IAAMqwD,EAAmBtwD,EAAQ,K,EAO7BA,EAAQ,KAJV2uC,E,EAAAA,WACAG,E,EAAAA,QACAK,E,EAAAA,sBACAS,E,EAAAA,QAYFhkD,EAAOC,QAAU,CACf0vF,WAVF,SAAoB56E,EAAUsZ,GAC5B,IAAMm1B,EAAiB,CACrBpD,IAAK8C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWhuC,IAC3C6hB,OAAQ,UAGV,OADA2sB,EAAsBC,EAAgBn1B,GAC/B21B,EAAQR,GAAgByD,KAAKyd,EAAiBrwD,uB,iCCdrDgwD,EACEjwD,EAAQ,KADViwD,QAaFrkE,EAAOC,QAAU,CACf8vF,WAXF,SAAoBf,EAAY3gE,GAC9B,OAAOg2C,EAAQ2qB,EAAY3gE,GAAS44B,MAAK,kBAAM,KAAMke,OAAM,SAAA5wD,GACzD,GAAIA,EAAID,UAAoC,MAAxBC,EAAID,SAASE,OAC/B,OAAO,EAGT,MAAMD,Q,mCCPNH,EAAQ,KAFVC,E,EAAAA,mBACAY,E,EAAAA,uB,EAQEb,EAAQ,KAJV2uC,E,EAAAA,WACAG,E,EAAAA,QACAK,E,EAAAA,sBACAS,E,EAAAA,QAIAzmB,EACEnpB,EAAQ,KADVmpB,WAwCFv9B,EAAOC,QAAU,CACfmwF,sBAtCF,SAA+BhsB,EAAU/1C,GACvC,IAAMm1B,EAAiB,CACrBpD,IAAK8C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWqhB,IAC3CxtC,OAAQ,MACRwvB,aAAc,eAGhB,OADA7C,EAAsBC,EAAgBn1B,GAC/B21B,EAAQR,GAAgByD,KAAK5yC,GAAoB4yC,MAAK,SAAA9+C,GAAG,OAAI8M,EAAuB9M,EAAKA,EAAInE,KAAMqqB,EAAQo2C,aAgClH0rB,sBA7BF,SAA+B/rB,EAAU/1C,GACvC,IAAMm1B,EAAiB,CACrBpD,IAAK8C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWqhB,IAC3CxtC,OAAQ,MACRwvB,aAAc,QAGhB,OADA7C,EAAsBC,EAAgBn1B,GAC/B21B,EAAQR,GAAgByD,KAAK5yC,GAAoB4yC,MAAK,SAAA9+C,GAAG,OAAI8M,EAAuB9M,EAAKA,EAAInE,KAAMqqB,EAAQo2C,aAuBlH6rB,YApBF,SAAqBlsB,EAAU/1C,GAC7B,IAAI+xB,EAAM8C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWqhB,IAC1C3kB,EAAW,WAAWzE,KAAKoF,GAAO,QAAU,OAElD,GAAI/xB,EAAQlZ,SAAWkZ,EAAQlZ,QAAQswC,cAAe,CACpD,IAAuD,IAAnD,WAAWzK,KAAK3sB,EAAQlZ,QAAQswC,eAClC,MAAM,IAAI7iD,MAAM,iEAGlB,IAAMi+F,EAAWxyE,EAAQlZ,QAAQswC,cAAcp2C,QAAQ,WAAY,IAAID,OACjE0xF,EAAevjE,EAAWsjE,GAChCzgD,EAAMA,EAAI/wC,QAAQ,eAAZ,UAA+BowC,EAA/B,cAA6CqhD,EAA7C,MAGR,OAAO1gD,K,0+BC/CLhsC,EAAQ,KAFVC,E,EAAAA,mBACAY,E,EAAAA,uB,EAQEb,EAAQ,KAHV8uC,G,EADAH,W,EACAG,SACAK,E,EAAAA,sBACAS,E,EAAAA,Q,EAME5vC,EAAQ,KAFVktC,E,EAAAA,SACAmB,E,EAAAA,mBAqBF,SAASs+C,EAAW5vF,GAClB,IAAI,QACqBA,EAAOiwC,YAAY9sC,SADxC,MAGA6vD,SACE1qB,KACsBunD,EALxB,EAKI,oBACyBC,EAN7B,EAMI,yBAIN,YAA4B,IAAdD,QAAmD,IAAfC,EAA6B,CAC7En/D,KAAMh7B,SAASk6F,EAAW,IAC1BE,UAAWz+C,EAAmBw+C,IAC5B,KACJ,MAAO1sF,IAIT,OAAO,KAGTvU,EAAOC,QAAU,CACfwwF,SAzCF,SAAkBpiE,GAChB,IAAMm1B,EAAiB,CACrBpD,IAAK8C,EAAQ70B,EAAQi2C,UAAW,KAChC1tC,OAAQ,WACRzhB,QAAS,CACPovD,OAAQ,aACRC,MAAO,GAETpe,aAAc,QAEZ9xC,EAAW,KAEf,OADAivC,EAAsBC,EAAgBn1B,GAC/B21B,EAAQR,GAAgByD,KAAK5yC,GAAoB4yC,MAAK,SAAA9+C,GAE3D,OADAmM,EAAWnM,EACJA,EAAInE,QACVijD,KAAK3F,GAAU2F,KAAK85C,GAAY95C,MAAK,SAAA91C,GAAM,OAAI8D,EAAuBX,EAAUnD,EAAQkd,EAAQo2C,e,6BChCrG,IAAMC,EAAmBtwD,EAAQ,K,EAO7BA,EAAQ,KAJV2uC,E,EAAAA,WACAG,E,EAAAA,QACAK,E,EAAAA,sBACAS,E,EAAAA,QAeFhkD,EAAOC,QAAU,CACfywF,SAbF,SAAkB37E,EAAUosF,EAAa9yE,GACvC,IAAMm1B,EAAiB,CACrBpD,IAAK8C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWhuC,IAC3C6hB,OAAQ,OACRzhB,QAAS,CACPisF,YAAal+C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWo+C,MAIvD,OADA59C,EAAsBC,EAAgBn1B,GAC/B21B,EAAQR,GAAgByD,KAAKyd,EAAiBrwD,uB,6BClBvD,IAAMqwD,EAAmBtwD,EAAQ,K,EAO7BA,EAAQ,KAJV2uC,E,EAAAA,WACAG,E,EAAAA,QACAK,E,EAAAA,sBACAS,E,EAAAA,QAeFhkD,EAAOC,QAAU,CACfgvF,SAbF,SAAkBl6E,EAAUosF,EAAa9yE,GACvC,IAAMm1B,EAAiB,CACrBpD,IAAK8C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWhuC,IAC3C6hB,OAAQ,OACRzhB,QAAS,CACPisF,YAAal+C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWo+C,MAIvD,OADA59C,EAAsBC,EAAgBn1B,GAC/B21B,EAAQR,GAAgByD,KAAKyd,EAAiBrwD,uB,iCCjBrDnD,EACEkD,EAAQ,KADVlD,MAGIwzD,EAAmBtwD,EAAQ,K,EAO7BA,EAAQ,KAJV2uC,E,EAAAA,WACAG,E,EAAAA,QACAK,E,EAAAA,sBACAS,E,EAAAA,QAIAzmB,EACEnpB,EAAQ,KADVmpB,WAiEFv9B,EAAOC,QAAU,CACfswF,kBAnBF,SAA2BnsB,EAAU/1C,GACnC,IAAI+xB,EAAM8C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWqhB,IAE1C3kB,EAAW,WAAWzE,KAD5BoF,GAAO,0CACiC,QAAU,OAElD,GAAI/xB,EAAQlZ,SAAWkZ,EAAQlZ,QAAQswC,cAAe,CACpD,IAAuD,IAAnD,WAAWzK,KAAK3sB,EAAQlZ,QAAQswC,eAClC,MAAM,IAAI7iD,MAAM,iEAGlB,IAAMi+F,EAAWxyE,EAAQlZ,QAAQswC,cAAcp2C,QAAQ,WAAY,IAAID,OACjE0xF,EAAevjE,EAAWsjE,GAChCzgD,EAAMA,EAAI/wC,QAAQ,eAAZ,UAA+BowC,EAA/B,cAA6CqhD,EAA7C,MAGR,OAAO1gD,GAKPwwC,gBAvDF,SAAyBxsB,EAAUpgE,EAAMqqB,GACvC,IAAMlZ,EAAU,CACd,iBAAkBnR,EAAK3C,QAGN,oBAAR87B,KAKLn5B,aAFWoQ,EAAQ,KAEIsiB,iBAGlBvhB,EAAQ,kBAInB,IAAMq7E,EAAat/E,EAzBZ,CACLiE,QAAS,CACP,eAAgB,4BAElBmwD,WAAW,GAqBsC,CACjDnwD,WACCkZ,GAAW,KAEe,IAAzBmiE,EAAWlrB,YACbkrB,EAAWr7E,QAAQ,iBAAmB,KAGxC,IAAMquC,EAAiB,CACrBpD,IAAK8C,EAAQ70B,EAAQi2C,UAAWvhB,EAAWqhB,IAC3CxtC,OAAQ,MACRzhB,QAASq7E,EAAWr7E,QACpBnR,QAGF,OADAu/C,EAAsBC,EAAgBn1B,GAC/B21B,EAAQR,GAAgByD,KAAKyd,EAAiBrwD","file":"photos-2.js?v=b85593c0804c92fb1850","sourcesContent":["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","/* 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","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\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 '<Buffer ' + str + '>'\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","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\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;\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, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\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\n naf[i] = z;\n k.iushrn(1);\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","\"use strict\";\n\nconst minimatch = require(\"minimatch\");\n\nfunction handleResponseCode(response) {\n const status = parseInt(response.status, 10);\n let err;\n\n if (status >= 400) {\n err = new Error(\"Invalid response: \" + status + \" \" + response.statusText);\n err.status = status;\n throw err;\n }\n\n return response;\n}\n\nfunction processGlobFilter(files, glob) {\n return files.filter(file => minimatch(file.filename, glob, {\n matchBase: true\n }));\n}\n\nfunction processResponsePayload(response, data, isDetailed = false) {\n return isDetailed ? {\n data,\n headers: response.headers || {}\n } : data;\n}\n\nmodule.exports = {\n handleResponseCode,\n processGlobFilter,\n processResponsePayload\n};","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\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","(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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","'use strict';\n\nconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nconst nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*'\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nconst getAllMatches = function(string, regex) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches = [];\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n};\n\nconst isName = function(string) {\n const match = regexName.exec(string);\n return !(match === null || typeof match === 'undefined');\n};\n\nexports.isExist = function(v) {\n return typeof v !== 'undefined';\n};\n\nexports.isEmptyObject = function(obj) {\n return Object.keys(obj).length === 0;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexports.merge = function(target, a, arrayMode) {\n if (a) {\n const keys = Object.keys(a); // will return an array of own properties\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n if(arrayMode === 'strict'){\n target[keys[i]] = [ a[keys[i]] ];\n }else{\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n};\n/* exports.merge =function (b,a){\n return Object.assign(b,a);\n} */\n\nexports.getValue = function(v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return '';\n }\n};\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\n\nexports.buildOptions = function(options, defaultOptions, props) {\n var newOptions = {};\n if (!options) {\n return defaultOptions; //if there are not options\n }\n\n for (let i = 0; i < props.length; i++) {\n if (options[props[i]] !== undefined) {\n newOptions[props[i]] = options[props[i]];\n } else {\n newOptions[props[i]] = defaultOptions[props[i]];\n }\n }\n return newOptions;\n};\n\nexports.isName = isName;\nexports.getAllMatches = getAllMatches;\nexports.nameRegexp = nameRegexp;\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","// 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;\nmodule.exports.once = once;\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\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\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 checkListener(listener);\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 if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\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 checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\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 checkListener(listener);\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\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\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\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\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/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\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};","\"use strict\";\n\nfunction clone(obj) {\n return isPlainObject(obj) ? Object.assign({}, obj) : Object.setPrototypeOf(Object.assign({}, obj), Object.getPrototypeOf(obj));\n}\n\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null || Object.prototype.toString.call(obj) != \"[object Object]\") {\n // Not an object\n return false;\n }\n\n if (Object.getPrototypeOf(obj) === null) {\n return true;\n }\n\n let proto = obj; // Find the prototype\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\nfunction merge(...args) {\n let output = null,\n items = [...args];\n\n while (items.length > 0) {\n const nextItem = items.shift();\n\n if (!output) {\n output = clone(nextItem);\n } else {\n output = mergeObjects(output, nextItem);\n }\n }\n\n return output;\n}\n\nfunction mergeObjects(obj1, obj2) {\n const output = clone(obj1);\n Object.keys(obj2).forEach(key => {\n if (!output.hasOwnProperty(key)) {\n output[key] = obj2[key];\n return;\n }\n\n if (Array.isArray(obj2[key])) {\n output[key] = Array.isArray(output[key]) ? [...output[key], ...obj2[key]] : [...obj2[key]];\n } else if (typeof obj2[key] === \"object\" && !!obj2[key]) {\n output[key] = typeof output[key] === \"object\" && !!output[key] ? mergeObjects(output[key], obj2[key]) : clone(obj2[key]);\n } else {\n output[key] = obj2[key];\n }\n });\n return output;\n}\n\nmodule.exports = {\n merge\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 _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\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// 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'use strict';\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\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 Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\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 get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\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 get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\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 get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\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 get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(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 } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\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// 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'use strict';\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\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 Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\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 get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\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 get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\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 get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\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 get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(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 } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\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","// 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","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","'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\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-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.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\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 const 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 const 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 (!EncoderBuffer.isEncoderBuffer(item))\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.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(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","\"use strict\";\n\nconst {\n decode,\n encode\n} = require(\"base-64\");\n\nfunction decodeHTMLEntities(str) {\n if (typeof WEB === \"undefined\") {\n // Node\n const he = require(\"he\");\n\n return he.decode(str);\n } else {\n // Nasty browser way\n const txt = document.createElement(\"textarea\");\n txt.innerHTML = str;\n return txt.value;\n }\n}\n\nfunction fromBase64(str) {\n return decode(str);\n}\n\nfunction toBase64(str) {\n return encode(str);\n}\n\nmodule.exports = {\n decodeHTMLEntities,\n fromBase64,\n toBase64\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\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\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","// 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 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","'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 this._bitLength = this.n ? this.n.bitLength() : 0;\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, this._bitLength);\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, this._bitLength);\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], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\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","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","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst xmlNode = require('./xmlNode');\nconst TagType = {OPENING: 1, CLOSING: 2, SELF: 3, CDATA: 4};\nconst regx =\n '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n//polyfill\nif (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n}\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attrNodeName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n ignoreNameSpace: false,\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseNodeValue: true,\n parseAttributeValue: false,\n arrayMode: false,\n trimValues: true, //Trim string values of tag and attributes\n cdataTagName: false,\n cdataPositionChar: '\\\\c',\n tagValueProcessor: function(a, tagName) {\n return a;\n },\n attrValueProcessor: function(a, attrName) {\n return a;\n },\n stopNodes: []\n //decodeStrict: false,\n};\n\nexports.defaultOptions = defaultOptions;\n\nconst props = [\n 'attributeNamePrefix',\n 'attrNodeName',\n 'textNodeName',\n 'ignoreAttributes',\n 'ignoreNameSpace',\n 'allowBooleanAttributes',\n 'parseNodeValue',\n 'parseAttributeValue',\n 'arrayMode',\n 'trimValues',\n 'cdataTagName',\n 'cdataPositionChar',\n 'tagValueProcessor',\n 'attrValueProcessor',\n 'parseTrueNumberOnly',\n 'stopNodes'\n];\nexports.props = props;\n\nconst getTraversalObj = function(xmlData, options) {\n options = buildOptions(options, defaultOptions, props);\n //xmlData = xmlData.replace(/\\r?\\n/g, \" \");//make it single line\n xmlData = xmlData.replace(/<!--[\\s\\S]*?-->/g, ''); //Remove comments\n\n const xmlObj = new xmlNode('!xml');\n let currentNode = xmlObj;\n\n const tagsRegx = new RegExp(regx, 'g');\n let tag = tagsRegx.exec(xmlData);\n let nextTag = tagsRegx.exec(xmlData);\n while (tag) {\n const tagType = checkForTagType(tag);\n\n if (tagType === TagType.CLOSING) {\n //add parsed data to parent node\n if (currentNode.parent && tag[12]) {\n currentNode.parent.val = util.getValue(currentNode.parent.val) + '' + processTagValue(tag, options, currentNode.parent.tagname);\n }\n if (options.stopNodes.length && options.stopNodes.includes(currentNode.tagname)) {\n currentNode.child = []\n if (currentNode.attrsMap == undefined) { currentNode.attrsMap = {}}\n currentNode.val = xmlData.substr(currentNode.startIndex + 1, tag.index - currentNode.startIndex - 1)\n }\n currentNode = currentNode.parent;\n } else if (tagType === TagType.CDATA) {\n if (options.cdataTagName) {\n //add cdata node\n const childNode = new xmlNode(options.cdataTagName, currentNode, tag[3]);\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n //for backtracking\n currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n //add rest value to parent node\n if (tag[12]) {\n currentNode.val += processTagValue(tag, options);\n }\n } else {\n currentNode.val = (currentNode.val || '') + (tag[3] || '') + processTagValue(tag, options);\n }\n } else if (tagType === TagType.SELF) {\n if (currentNode && tag[12]) {\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(tag, options);\n }\n\n const childNode = new xmlNode(options.ignoreNameSpace ? tag[7] : tag[5], currentNode, '');\n if (tag[8] && tag[8].length > 0) {\n tag[8] = tag[8].substr(0, tag[8].length - 1);\n }\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n } else {\n //TagType.OPENING\n const childNode = new xmlNode(\n options.ignoreNameSpace ? tag[7] : tag[5],\n currentNode,\n processTagValue(tag, options)\n );\n if (options.stopNodes.length && options.stopNodes.includes(childNode.tagname)) {\n childNode.startIndex=tag.index + tag[1].length\n }\n childNode.attrsMap = buildAttributesMap(tag[8], options);\n currentNode.addChild(childNode);\n currentNode = childNode;\n }\n\n tag = nextTag;\n nextTag = tagsRegx.exec(xmlData);\n }\n\n return xmlObj;\n};\n\nfunction processTagValue(parsedTags, options, parentTagName) {\n const tagName = parsedTags[7] || parentTagName;\n let val = parsedTags[12];\n if (val) {\n if (options.trimValues) {\n val = val.trim();\n }\n val = options.tagValueProcessor(val, tagName);\n val = parseValue(val, options.parseNodeValue, options.parseTrueNumberOnly);\n }\n\n return val;\n}\n\nfunction checkForTagType(match) {\n if (match[4] === ']]>') {\n return TagType.CDATA;\n } else if (match[10] === '/') {\n return TagType.CLOSING;\n } else if (typeof match[8] !== 'undefined' && match[8].substr(match[8].length - 1) === '/') {\n return TagType.SELF;\n } else {\n return TagType.OPENING;\n }\n}\n\nfunction resolveNameSpace(tagname, options) {\n if (options.ignoreNameSpace) {\n const tags = tagname.split(':');\n const prefix = tagname.charAt(0) === '/' ? '/' : '';\n if (tags[0] === 'xmlns') {\n return '';\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\n\nfunction parseValue(val, shouldParse, parseTrueNumberOnly) {\n if (shouldParse && typeof val === 'string') {\n let parsed;\n if (val.trim() === '' || isNaN(val)) {\n parsed = val === 'true' ? true : val === 'false' ? false : val;\n } else {\n if (val.indexOf('0x') !== -1) {\n //support hexa decimal\n parsed = Number.parseInt(val, 16);\n } else if (val.indexOf('.') !== -1) {\n parsed = Number.parseFloat(val);\n val = val.replace(/0+$/,\"\");\n } else {\n parsed = Number.parseInt(val, 10);\n }\n if (parseTrueNumberOnly) {\n parsed = String(parsed) === val ? parsed : val;\n }\n }\n return parsed;\n } else {\n if (util.isExist(val)) {\n return val;\n } else {\n return '';\n }\n }\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])(.*?)\\\\3)?', 'g');\n\nfunction buildAttributesMap(attrStr, options) {\n if (!options.ignoreAttributes && typeof attrStr === 'string') {\n attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n //attrStr = attrStr || attrStr.trim();\n\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const len = matches.length; //don't make it inline\n const attrs = {};\n for (let i = 0; i < len; i++) {\n const attrName = resolveNameSpace(matches[i][1], options);\n if (attrName.length) {\n if (matches[i][4] !== undefined) {\n if (options.trimValues) {\n matches[i][4] = matches[i][4].trim();\n }\n matches[i][4] = options.attrValueProcessor(matches[i][4], attrName);\n attrs[options.attributeNamePrefix + attrName] = parseValue(\n matches[i][4],\n options.parseAttributeValue,\n options.parseTrueNumberOnly\n );\n } else if (options.allowBooleanAttributes) {\n attrs[options.attributeNamePrefix + attrName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (options.attrNodeName) {\n const attrCollection = {};\n attrCollection[options.attrNodeName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\n\nexports.getTraversalObj = getTraversalObj;\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","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","'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","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\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","// 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/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\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/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\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/*</replacement>*/\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 /*<replacement>*/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\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\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","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 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 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","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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\nSafeBuffer.prototype = Object.create(Buffer.prototype)\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","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","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","'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 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","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","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst 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\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst 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, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\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\nconst 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 const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const 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 const 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 const state = this._baseState;\n\n // Filter children and args\n const 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 const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const 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 const 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 const state = this._baseState;\n const 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 const 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 const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const 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 const 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 const 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 const state = this._baseState;\n const 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 const 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 const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const 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 const 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 const 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 let result = state['default'];\n let present = true;\n\n let 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 let 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 const 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 let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const 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 // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\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 const 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 const 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 const 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 const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const 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 const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const 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 const 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 let 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 let content = null;\n let 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 const 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 const 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 const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const 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 if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const 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 const state = this._baseState;\n\n const 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 const 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","'use strict';\n\nconst 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 const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const 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 const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const 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 const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const 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 const 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","'use strict';\n\n// Helper\nfunction reverse(map) {\n const 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 const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = 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 = reverse(exports.tag);\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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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","\"use strict\";\n\nconst URL = require(\"url-parse\");\n\nfunction extractURLPath(fullURL) {\n const url = new URL(fullURL);\n let urlPath = url.pathname;\n\n if (urlPath.length <= 0) {\n urlPath = \"/\";\n }\n\n return normalisePath(urlPath);\n}\n\nfunction normaliseHREF(href) {\n const normalisedHref = href.replace(/^https?:\\/\\/[^\\/]+/, \"\");\n return normalisedHref;\n}\n\nfunction normalisePath(pathStr) {\n let normalisedPath = pathStr;\n\n if (normalisedPath[0] !== \"/\") {\n normalisedPath = \"/\" + normalisedPath;\n }\n\n if (/^.+\\/$/.test(normalisedPath)) {\n normalisedPath = normalisedPath.substr(0, normalisedPath.length - 1);\n }\n\n return decodeURIComponent(normalisedPath);\n}\n\nmodule.exports = {\n extractURLPath,\n normaliseHREF,\n normalisePath\n};","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\S\\s]*)/i\n , whitespace = '[\\\\x09\\\\x0A\\\\x0B\\\\x0C\\\\x0D\\\\x20\\\\xA0\\\\u1680\\\\u180E\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200A\\\\u202F\\\\u205F\\\\u3000\\\\u2028\\\\u2029\\\\uFEFF]'\n , left = new RegExp('^'+ whitespace +'+');\n\n/**\n * Trim a given string.\n *\n * @param {String} str String to trim.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(left, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address) { // Sanitize what is left of the address\n return address.replace('\\\\', '/');\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d+)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address) {\n address = trimLeft(address);\n var match = protocolre.exec(address);\n\n return {\n protocol: match[1] ? match[1].toLowerCase() : '',\n slashes: !!match[2],\n rest: match[3]\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '');\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (!extracted.slashes) instructions[3] = [/(.*)/, 'pathname'];\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n if (~(index = address.indexOf(parse))) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n if (url.auth) {\n instruction = url.auth.split(':');\n url.username = instruction[0] || '';\n url.password = instruction[1] || '';\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (/:\\d+$/.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n default:\n url[part] = value;\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result = protocol + (url.slashes ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n }\n\n result += url.host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","\"use strict\";\n\nconst xmlParser = require(\"fast-xml-parser\");\n\nconst nestedProp = require(\"nested-property\");\n\nconst {\n decodeHTMLEntities\n} = require(\"../encode.js\");\n\nfunction getPropertyOfType(obj, prop, type) {\n const val = nestedProp.get(obj, prop);\n\n if (type === \"array\" && Array.isArray(val) === false) {\n return [val];\n } else if (type === \"object\" && Array.isArray(val)) {\n return val[0];\n }\n\n return val;\n}\n\nfunction normaliseResponse(response) {\n const output = Object.assign({}, response);\n nestedProp.set(output, \"propstat\", getPropertyOfType(output, \"propstat\", \"object\"));\n nestedProp.set(output, \"propstat.prop\", getPropertyOfType(output, \"propstat.prop\", \"object\"));\n return output;\n}\n\nfunction normaliseResult(result) {\n const {\n multistatus\n } = result;\n\n if (!multistatus) {\n throw new Error(\"Invalid response: No root multistatus found\");\n }\n\n const output = {};\n output.multistatus = Array.isArray(multistatus) ? multistatus[0] : multistatus;\n nestedProp.set(output, \"multistatus.response\", getPropertyOfType(output, \"multistatus.response\", \"array\"));\n nestedProp.set(output, \"multistatus.response\", nestedProp.get(output, \"multistatus.response\").map(response => normaliseResponse(response)));\n return output;\n}\n\nfunction parseXML(xml) {\n return new Promise(resolve => {\n const result = xmlParser.parse(xml, {\n arrayMode: false,\n ignoreNameSpace: true // // We don't use the processors here as decoding is done manually\n // // later on - decoding early would break some path checks.\n // attrValueProcessor: val => decodeHTMLEntities(decodeURIComponent(val)),\n // tagValueProcessor: val => decodeHTMLEntities(decodeURIComponent(val))\n\n });\n resolve(normaliseResult(result));\n });\n}\n\nfunction prepareFileFromProps(props, rawFilename, isDetailed = false) {\n const path = require(\"path-posix\"); // Last modified time, raw size, item type and mime\n\n\n const {\n getlastmodified: lastMod = null,\n getcontentlength: rawSize = \"0\",\n resourcetype: resourceType = null,\n getcontenttype: mimeType = null,\n getetag: etag = null\n } = props;\n const type = resourceType && typeof resourceType === \"object\" && typeof resourceType.collection !== \"undefined\" ? \"directory\" : \"file\";\n const filename = decodeHTMLEntities(rawFilename);\n const stat = {\n filename: filename,\n basename: path.basename(filename),\n lastmod: lastMod,\n size: parseInt(rawSize, 10),\n type: type,\n etag: typeof etag === \"string\" ? etag.replace(/\"/g, \"\") : null\n };\n\n if (type === \"file\") {\n stat.mime = mimeType && typeof mimeType === \"string\" ? mimeType.split(\";\")[0] : \"\";\n }\n\n if (isDetailed) {\n stat.props = props;\n }\n\n return stat;\n}\n\nfunction translateDiskSpace(value) {\n switch (value.toString()) {\n case \"-3\":\n return \"unlimited\";\n\n case \"-2\":\n /* falls-through */\n\n case \"-1\":\n // -1 is non-computed\n return \"unknown\";\n\n default:\n return parseInt(value, 10);\n }\n}\n\nmodule.exports = {\n parseXML,\n prepareFileFromProps,\n translateDiskSpace\n};","\"use strict\";\n\nconst {\n axios\n} = require(\"./request.js\");\n\nconst {\n createClient\n} = require(\"./factory.js\");\n\nconst {\n getPatcher\n} = require(\"./patcher.js\");\n/**\n * @module WebDAV\n */\n\n\nmodule.exports = {\n /**\n * Axios request library\n * @type {Function}\n * @memberof module:WebDAV\n */\n axios,\n createClient,\n getPatcher\n};","\"use strict\";\n\nconst axios = require(\"axios\");\n\nconst joinURLParts = require(\"url-join\");\n\nconst fetch = require(\"./fetch.js\");\n\nconst {\n merge\n} = require(\"./merge.js\");\n\nconst SEP_PATH_POSIX = \"__PATH_SEPARATOR_POSIX__\";\nconst SEP_PATH_WINDOWS = \"__PATH_SEPARATOR_WINDOWS__\";\n/**\n * Encode a path for use with WebDAV servers\n * @param {String} path The path to encode\n * @returns {String} The encoded path (separators protected)\n */\n\nfunction encodePath(path) {\n const replaced = path.replace(/\\//g, SEP_PATH_POSIX).replace(/\\\\\\\\/g, SEP_PATH_WINDOWS);\n const formatted = encodeURIComponent(replaced);\n return formatted.split(SEP_PATH_WINDOWS).join(\"\\\\\\\\\").split(SEP_PATH_POSIX).join(\"/\");\n}\n/**\n * Join URL segments\n * @param {...String} parts URL segments to join\n * @returns {String} A joined URL string\n */\n\n\nfunction joinURL(...parts) {\n return joinURLParts(parts.reduce((output, nextPart, partIndex) => {\n if (partIndex === 0 || nextPart !== \"/\" || nextPart === \"/\" && output[output.length - 1] !== \"/\") {\n output.push(nextPart);\n }\n\n return output;\n }, []));\n}\n/**\n * @typedef {Object} UserOptions\n * @property {Object=} httpAgent - HTTP agent instance\n * @property {Object=} httpsAgent - HTTPS agent instance\n * @property {Object=} headers - Set additional request headers\n * @property {Boolean=} withCredentials - Set whether or not credentials should\n * @property {Object|String|*=} data - Set additional body\n * be included with the request. Defaults to value used by axios.\n */\n\n/**\n * Process request options before being passed to Axios\n * @param {RequestOptions} requestOptions The request options object\n * @param {UserOptions} methodOptions Provided options (external)\n */\n\n\nfunction prepareRequestOptions(requestOptions, methodOptions) {\n if (methodOptions.httpAgent) {\n requestOptions.httpAgent = methodOptions.httpAgent;\n }\n\n if (methodOptions.httpsAgent) {\n requestOptions.httpsAgent = methodOptions.httpsAgent;\n }\n\n if (methodOptions.data) {\n requestOptions.data = methodOptions.data;\n }\n\n if (methodOptions.headers && typeof methodOptions.headers === \"object\") {\n requestOptions.headers = merge(requestOptions.headers || {}, methodOptions.headers);\n }\n\n if (typeof methodOptions.withCredentials === \"boolean\") {\n requestOptions.withCredentials = methodOptions.withCredentials;\n }\n\n if (methodOptions.maxContentLength) {\n requestOptions.maxContentLength = methodOptions.maxContentLength;\n }\n\n if (methodOptions.onUploadProgress && typeof methodOptions.onUploadProgress === \"function\") {\n requestOptions.onUploadProgress = methodOptions.onUploadProgress;\n }\n\n if (methodOptions._digest) {\n requestOptions._digest = methodOptions._digest;\n\n requestOptions.validateStatus = status => status >= 200 && status < 300 || status == 401;\n }\n}\n/**\n * @typedef {Object} RequestOptions\n * @property {String} url - The URL to request\n * @property {String} method - The method to use (eg. \"POST\")\n * @property {Object=} headers - Headers to set on the request\n * @property {Object=} httpAgent - A HTTP agent instance\n * @property {Object=} httpsAgent - A HTTPS agent interface\n * @property {Object|String|*=} data - Body data for the request\n */\n\n/**\n * Make a request\n * This method can be patched by patching or plugging-in to the \"request\"\n * item using {@link https://github.com/perry-mitchell/hot-patcher HotPatcher}.\n * It uses {@link https://github.com/axios/axios Axios} by default.\n * @param {RequestOptions} requestOptions Options for the request\n * @returns {Promise.<Object>} A promise that resolves with a response object\n */\n\n\nfunction request(requestOptions) {\n return fetch(requestOptions);\n}\n\nmodule.exports = {\n axios,\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n};","module.exports = require('./lib/axios');","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'params', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy'];\n var defaultToConfig2Keys = [\n 'baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress',\n 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath'\n ];\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys);\n\n var otherKeys = Object\n .keys(config2)\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, function otherKeysDefaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n return config;\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","\"use strict\";\n\nconst HotPatcher = require(\"hot-patcher\");\n\nlet __patcher = null;\n/**\n * Get the HotPatcher instance for patching internal methods\n * @returns {HotPatcher} The internal HotPatcher instance\n */\n\nfunction getPatcher() {\n if (!__patcher) {\n __patcher = new HotPatcher();\n }\n\n return __patcher;\n}\n\nmodule.exports = {\n getPatcher\n};","\"use strict\";\n\nconst {\n toBase64\n} = require(\"./encode.js\");\n\nconst {\n md5,\n ha1Compute\n} = require(\"./crypto.js\");\n\nfunction generateBasicAuthHeader(username, password) {\n const encoded = toBase64(`${username}:${password}`);\n return `Basic ${encoded}`;\n}\n\nfunction generateDigestAuthHeader(options, digest) {\n const url = options.url.replace(\"//\", \"\");\n const uri = url.indexOf(\"/\") == -1 ? \"/\" : url.slice(url.indexOf(\"/\"));\n const method = options.method ? options.method.toUpperCase() : \"GET\";\n const qop = /(^|,)\\s*auth\\s*($|,)/.test(digest.qop) ? \"auth\" : false;\n const ncString = `00000000${digest.nc}`.slice(-8);\n const cnonce = digest.cnonce;\n const ha1 = ha1Compute(digest.algorithm, digest.username, digest.realm, digest.password, digest.nonce, digest.cnonce);\n const ha2 = md5(`${method}:${uri}`);\n const digestResponse = qop ? md5(`${ha1}:${digest.nonce}:${ncString}:${digest.cnonce}:${qop}:${ha2}`) : md5(`${ha1}:${digest.nonce}:${ha2}`);\n const authValues = {\n username: digest.username,\n realm: digest.realm,\n nonce: digest.nonce,\n uri,\n qop,\n response: digestResponse,\n nc: ncString,\n cnonce: digest.cnonce,\n algorithm: digest.algorithm,\n opaque: digest.opaque\n };\n const authHeader = [];\n\n for (var k in authValues) {\n if (authValues[k]) {\n if (k === \"qop\" || k === \"nc\" || k === \"algorithm\") {\n authHeader.push(`${k}=${authValues[k]}`);\n } else {\n authHeader.push(`${k}=\"${authValues[k]}\"`);\n }\n }\n }\n\n return `Digest ${authHeader.join(\", \")}`;\n}\n\nfunction generateTokenAuthHeader(tokenInfo) {\n return `${tokenInfo.token_type} ${tokenInfo.access_token}`;\n}\n\nmodule.exports = {\n generateBasicAuthHeader,\n generateTokenAuthHeader,\n generateDigestAuthHeader\n};","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-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","// 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'use strict';\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\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); // 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\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // 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\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // 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\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // 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\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; // 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\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // 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\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\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 if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\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 get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\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.\n\n\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\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\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\n if (er) {\n errorOrDestroy(stream, 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) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\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 maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\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 if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\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\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\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 } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // 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\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || 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); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\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 // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\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; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // 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\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 = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\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; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\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.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\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.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\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.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\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\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\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 } // 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\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\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 cleanedUp = true; // 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\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\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', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\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 = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\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 if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\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, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\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\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\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.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\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 stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\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\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\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 get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\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 get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\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 get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\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 get() {\n return this._readableState.length;\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.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\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.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\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\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\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) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\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\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\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.finalCalled = false;\n this._writableState.prefinished = 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\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\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// 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'use strict';\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // 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 // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // 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\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // 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\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // 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\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // 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\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // 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\n this.sync = true; // 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\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\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 value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // 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 // 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 // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\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.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\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 if (typeof cb !== 'function') cb = nop;\n if (state.ending) 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 return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !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 ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\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 get() {\n return this._writableState && this._writableState.getBuffer();\n }\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\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 get() {\n return this._writableState.highWaterMark;\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.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\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\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\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 (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else 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 process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, 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 errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\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 if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\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) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\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} // 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.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\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 var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\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 doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // 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\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 ERR_METHOD_NOT_IMPLEMENTED('_write()'));\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); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\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 get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.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\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\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\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\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 get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n 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// 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'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\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 Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // 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\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\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}; // 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.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\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\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}; // 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.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\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 Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar 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\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar 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\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\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/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\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/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/*</replacement>*/\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}","module.exports = require('events').EventEmitter;\n","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\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};","// 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/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\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}","'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","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\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 defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n defaultEncoding = 'utf-8'\n} else if (process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\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(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\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","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\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","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./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","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","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 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 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 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","(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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 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","// 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'use strict';\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\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); // 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\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // 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\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // 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\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // 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\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; // 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\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // 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\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\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 if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\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 get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\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.\n\n\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\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\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\n if (er) {\n errorOrDestroy(stream, 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) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\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 maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\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 if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\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\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\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 } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // 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\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || 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); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\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 // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\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; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // 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\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 = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\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; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\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.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\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.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\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.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\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\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\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 } // 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\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\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 cleanedUp = true; // 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\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\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', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\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 = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\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 if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\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, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\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\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\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.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\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 stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\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\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\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 get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\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 get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\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 get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\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 get() {\n return this._readableState.length;\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.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\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.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\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\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\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) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\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\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\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.finalCalled = false;\n this._writableState.prefinished = 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\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\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// 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'use strict';\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // 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 // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // 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\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // 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\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // 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\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // 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\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // 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\n this.sync = true; // 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\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\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 value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // 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 // 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 // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\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.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\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 if (typeof cb !== 'function') cb = nop;\n if (state.ending) 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 return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !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 ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\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 get() {\n return this._writableState && this._writableState.getBuffer();\n }\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\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 get() {\n return this._writableState.highWaterMark;\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.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\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\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\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 (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else 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 process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, 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 errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\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 if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\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) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\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} // 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.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\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 var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\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 doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // 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\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 ERR_METHOD_NOT_IMPLEMENTED('_write()'));\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); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\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 get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.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\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\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\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\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 get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n 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// 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'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\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 Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // 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\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\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}; // 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.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\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\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}; // 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.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\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 Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\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","'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 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 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');\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","(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 var z = 0;\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n var b;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n b = c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n\n r |= b;\n z |= b;\n }\n\n assert(!(z & 0xf0), 'Invalid character in ' + str);\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 b = 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 b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\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 function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\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 // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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.modrn(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, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\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 var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\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] >>> wbit) & 0x01;\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 // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(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 var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\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 isNegNum ? this.ineg() : 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.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(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.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\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 isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\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 this._strip();\n return isNegNum ? this.ineg() : this;\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 if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\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\n move(a, a.umod(this.m)._forceRed(this));\n return a;\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","'use strict';\n\nconst 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","(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../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 Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(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 let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let 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 const buf = Buffer.alloc(str.length * 2);\n for (let 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 (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let 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 let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let 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 let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\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.getUTCFullYear() % 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 const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(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 let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let 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(Buffer.from(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 const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const 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 let 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","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../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 (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const 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 const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let 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 const state = buffer.save();\n const 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 for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let 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 const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const 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 const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let 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 const 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 const 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 let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n 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 const first = (identifiers[0] / 40) | 0;\n const 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 let 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 const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n 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() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const 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 const raw = buffer.raw();\n let 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 let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let 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 const 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 let 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 const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\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","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","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","// 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';\nvar util = require('util');\nvar isString = function (x) {\n return typeof x === 'string';\n};\n\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes 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 var res = [];\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i];\n\n // ignore empty parts\n if (!p || p === '.')\n continue;\n\n if (p === '..') {\n if (res.length && res[res.length - 1] !== '..') {\n res.pop();\n } else if (allowAboveRoot) {\n res.push('..');\n }\n } else {\n res.push(p);\n }\n }\n\n return res;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar posix = {};\n\n\nfunction posixSplitPath(filename) {\n return splitPathRe.exec(filename).slice(1);\n}\n\n\n// path.resolve([from ...], to)\n// posix version\nposix.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 (!isString(path)) {\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(resolvedPath.split('/'),\n !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nposix.normalize = function(path) {\n var isAbsolute = posix.isAbsolute(path),\n trailingSlash = path.substr(-1) === '/';\n\n // Normalize the path\n path = normalizeArray(path.split('/'), !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\nposix.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nposix.join = function() {\n var path = '';\n for (var i = 0; i < arguments.length; i++) {\n var segment = arguments[i];\n if (!isString(segment)) {\n throw new TypeError('Arguments to path.join must be strings');\n }\n if (segment) {\n if (!path) {\n path += segment;\n } else {\n path += '/' + segment;\n }\n }\n }\n return posix.normalize(path);\n};\n\n\n// path.relative(from, to)\n// posix version\nposix.relative = function(from, to) {\n from = posix.resolve(from).substr(1);\n to = posix.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 + 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\n\nposix._makeLong = function(path) {\n return path;\n};\n\n\nposix.dirname = function(path) {\n var result = posixSplitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nposix.basename = function(path, ext) {\n var f = posixSplitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nposix.extname = function(path) {\n return posixSplitPath(path)[3];\n};\n\n\nposix.format = function(pathObject) {\n if (!util.isObject(pathObject)) {\n throw new TypeError(\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\n );\n }\n\n var root = pathObject.root || '';\n\n if (!isString(root)) {\n throw new TypeError(\n \"'pathObject.root' must be a string or undefined, not \" +\n typeof pathObject.root\n );\n }\n\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\n var base = pathObject.base || '';\n return dir + base;\n};\n\n\nposix.parse = function(pathString) {\n if (!isString(pathString)) {\n throw new TypeError(\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\n );\n }\n var allParts = posixSplitPath(pathString);\n if (!allParts || allParts.length !== 4) {\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n }\n allParts[1] = allParts[1] || '';\n allParts[2] = allParts[2] || '';\n allParts[3] = allParts[3] || '';\n\n return {\n root: allParts[0],\n dir: allParts[0] + allParts[1].slice(0, allParts[1].length - 1),\n base: allParts[2],\n ext: allParts[3],\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\n };\n};\n\n\nposix.sep = '/';\nposix.delimiter = ':';\n\n module.exports = posix;\n","\"use strict\";\n\nconst {\n merge\n} = require(\"../merge.js\");\n\nconst {\n handleResponseCode,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n parseXML,\n prepareFileFromProps\n} = require(\"./dav.js\");\n\nconst urlTools = require(\"../url.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction getStat(filename, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"PROPFIND\",\n headers: {\n Accept: \"text/plain\",\n Depth: 0\n },\n responseType: \"text\"\n };\n let response = null;\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => {\n response = res;\n return res.data;\n }).then(parseXML).then(xml => parseStat(xml, filename, options.details)).then(result => processResponsePayload(response, result, options.details));\n}\n\nfunction parseStat(result, filename, isDetailed = false) {\n let responseItem = null;\n\n try {\n responseItem = result.multistatus.response[0];\n } catch (e) {\n /* ignore */\n }\n\n if (!responseItem) {\n throw new Error(\"Failed getting item stat: bad response\");\n }\n\n const {\n propstat: {\n prop: props\n }\n } = responseItem;\n const filePath = urlTools.normalisePath(filename);\n return prepareFileFromProps(props, filePath, isDetailed);\n}\n\nmodule.exports = {\n getStat,\n parseStat\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst NOOP = () => {};\n\nfunction createReadStream(filePath, options) {\n const Stream = require(\"stream\");\n\n const PassThroughStream = Stream.PassThrough;\n const outStream = new PassThroughStream();\n getFileStream(filePath, options).then(stream => {\n stream.pipe(outStream);\n }).catch(err => {\n outStream.emit(\"error\", err);\n });\n return outStream;\n}\n\nfunction createWriteStream(filePath, options, callback = NOOP) {\n const Stream = require(\"stream\");\n\n const PassThroughStream = Stream.PassThrough;\n const writeStream = new PassThroughStream();\n const headers = {};\n\n if (options.overwrite === false) {\n headers[\"If-None-Match\"] = \"*\";\n }\n\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"PUT\",\n headers,\n data: writeStream\n };\n prepareRequestOptions(requestOptions, options);\n request(requestOptions).then(response => {\n // Fire callback asynchronously to avoid errors\n setTimeout(callback, 0);\n return response;\n }).then(responseHandlers.handleResponseCode).catch(err => {\n writeStream.emit(\"error\", err);\n });\n return writeStream;\n}\n\nfunction getFileStream(filePath, options) {\n let rangeHeader;\n const headers = {};\n\n if (typeof options.range === \"object\" && typeof options.range.start === \"number\") {\n rangeHeader = \"bytes=\" + options.range.start + \"-\";\n\n if (typeof options.range.end === \"number\") {\n rangeHeader += options.range.end;\n }\n\n headers.Range = rangeHeader;\n }\n\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"GET\",\n headers,\n responseType: \"stream\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode).then(res => res.data);\n}\n\nmodule.exports = {\n createReadStream,\n createWriteStream\n};","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","(function (name, context, definition) {\n if (typeof module !== 'undefined' && module.exports) module.exports = definition();\n else if (typeof define === 'function' && define.amd) define(definition);\n else context[name] = definition();\n})('urljoin', this, function () {\n\n function normalize (strArray) {\n var resultArray = [];\n if (strArray.length === 0) { return ''; }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n var first = strArray.shift();\n strArray[0] = first + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (var i = 0; i < strArray.length; i++) {\n var component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') { continue; }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n\n }\n\n var str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n var parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n return str;\n }\n\n return function () {\n var input;\n\n if (typeof arguments[0] === 'object') {\n input = arguments[0];\n } else {\n input = [].slice.call(arguments);\n }\n\n return normalize(input);\n };\n\n});\n","\"use strict\";\n\nconst axios = require(\"axios\");\n\nconst {\n merge\n} = require(\"./merge.js\");\n\nconst {\n getPatcher\n} = require(\"./patcher.js\");\n\nconst {\n generateDigestAuthHeader\n} = require(\"./auth.js\");\n\nfunction makeNonce() {\n const cnonceSize = 32;\n const nonceRaw = \"abcdef0123456789\";\n let uid = \"\";\n\n for (let i = 0; i < cnonceSize; ++i) {\n uid += nonceRaw[Math.floor(Math.random() * nonceRaw.length)];\n }\n\n return uid;\n}\n\nfunction parseAuth(response, _digest) {\n const authHeader = response.headers[\"www-authenticate\"] || \"\";\n\n if (authHeader.split(/\\s/)[0].toLowerCase() !== \"digest\") {\n return false;\n }\n\n const re = /([a-z0-9_-]+)=(?:\"([^\"]+)\"|([a-z0-9_-]+))/gi;\n\n for (;;) {\n var match = re.exec(authHeader);\n\n if (!match) {\n break;\n }\n\n _digest[match[1]] = match[2] || match[3];\n }\n\n _digest.nc++;\n _digest.cnonce = makeNonce();\n return true;\n}\n\nfunction request(requestOptions) {\n return getPatcher().patchInline(\"request\", options => axios(options), requestOptions);\n}\n\nfunction fetch(requestOptions) {\n // Client not configured for digest authentication\n if (!requestOptions._digest) {\n return request(requestOptions);\n } // Remove client's digest authentication object from request options\n\n\n const _digest = requestOptions._digest;\n delete requestOptions._digest; // If client is already using digest authentication, include the digest authorization header\n\n if (_digest.hasDigestAuth) {\n requestOptions = merge(requestOptions, {\n headers: {\n Authorization: generateDigestAuthHeader(requestOptions, _digest)\n }\n });\n } // Perform the request and handle digest authentication\n\n\n return request(requestOptions).then(function (response) {\n if (response.status == 401) {\n _digest.hasDigestAuth = parseAuth(response, _digest);\n\n if (_digest.hasDigestAuth) {\n requestOptions = merge(requestOptions, {\n headers: {\n Authorization: generateDigestAuthHeader(requestOptions, _digest)\n }\n });\n return request(requestOptions).then(function (response2) {\n if (response2.status == 401) {\n _digest.hasDigestAuth = false;\n } else {\n _digest.nc++;\n }\n\n return response2;\n });\n }\n } else {\n _digest.nc++;\n }\n\n return response;\n });\n}\n\nmodule.exports = fetch;","const { sequence } = require(\"./functions.js\");\n\nconst HOT_PATCHER_TYPE = \"@@HOTPATCHER\";\nconst NOOP = () => {};\n\nfunction createNewItem(method) {\n return {\n original: method,\n methods: [method],\n final: false\n };\n}\n\n/**\n * Hot patching manager class\n */\nclass HotPatcher {\n constructor() {\n this._configuration = {\n registry: {},\n getEmptyAction: \"null\"\n };\n this.__type__ = HOT_PATCHER_TYPE;\n }\n\n /**\n * Configuration object reference\n * @type {Object}\n * @memberof HotPatcher\n * @readonly\n */\n get configuration() {\n return this._configuration;\n }\n\n /**\n * The action to take when a non-set method is requested\n * Possible values: null/throw\n * @type {String}\n * @memberof HotPatcher\n */\n get getEmptyAction() {\n return this.configuration.getEmptyAction;\n }\n\n set getEmptyAction(newAction) {\n this.configuration.getEmptyAction = newAction;\n }\n\n /**\n * Control another hot-patcher instance\n * Force the remote instance to use patched methods from calling instance\n * @param {HotPatcher} target The target instance to control\n * @param {Boolean=} allowTargetOverrides Allow the target to override patched methods on\n * the controller (default is false)\n * @memberof HotPatcher\n * @returns {HotPatcher} Returns self\n * @throws {Error} Throws if the target is invalid\n */\n control(target, allowTargetOverrides = false) {\n if (!target || target.__type__ !== HOT_PATCHER_TYPE) {\n throw new Error(\n \"Failed taking control of target HotPatcher instance: Invalid type or object\"\n );\n }\n Object.keys(target.configuration.registry).forEach(foreignKey => {\n if (this.configuration.registry.hasOwnProperty(foreignKey)) {\n if (allowTargetOverrides) {\n this.configuration.registry[foreignKey] = Object.assign(\n {},\n target.configuration.registry[foreignKey]\n );\n }\n } else {\n this.configuration.registry[foreignKey] = Object.assign(\n {},\n target.configuration.registry[foreignKey]\n );\n }\n });\n target._configuration = this.configuration;\n return this;\n }\n\n /**\n * Execute a patched method\n * @param {String} key The method key\n * @param {...*} args Arguments to pass to the method (optional)\n * @memberof HotPatcher\n * @see HotPatcher#get\n * @returns {*} The output of the called method\n */\n execute(key, ...args) {\n const method = this.get(key) || NOOP;\n return method(...args);\n }\n\n /**\n * Get a method for a key\n * @param {String} key The method key\n * @returns {Function|null} Returns the requested function or null if the function\n * does not exist and the host is configured to return null (and not throw)\n * @memberof HotPatcher\n * @throws {Error} Throws if the configuration specifies to throw and the method\n * does not exist\n * @throws {Error} Throws if the `getEmptyAction` value is invalid\n */\n get(key) {\n const item = this.configuration.registry[key];\n if (!item) {\n switch (this.getEmptyAction) {\n case \"null\":\n return null;\n case \"throw\":\n throw new Error(\n `Failed handling method request: No method provided for override: ${key}`\n );\n default:\n throw new Error(\n `Failed handling request which resulted in an empty method: Invalid empty-action specified: ${\n this.getEmptyAction\n }`\n );\n }\n }\n return sequence(...item.methods);\n }\n\n /**\n * Check if a method has been patched\n * @param {String} key The function key\n * @returns {Boolean} True if already patched\n * @memberof HotPatcher\n */\n isPatched(key) {\n return !!this.configuration.registry[key];\n }\n\n /**\n * @typedef {Object} PatchOptions\n * @property {Boolean=} chain - Whether or not to allow chaining execution. Chained\n * execution allows for attaching multiple callbacks to a key, where the callbacks\n * will be executed in order of when they were patched (oldest to newest), the\n * values being passed from one method to another.\n */\n\n /**\n * Patch a method name\n * @param {String} key The method key to patch\n * @param {Function} method The function to set\n * @param {PatchOptions=} options Patch options\n * @memberof HotPatcher\n * @returns {HotPatcher} Returns self\n */\n patch(key, method, { chain = false } = {}) {\n if (this.configuration.registry[key] && this.configuration.registry[key].final) {\n throw new Error(`Failed patching '${key}': Method marked as being final`);\n }\n if (typeof method !== \"function\") {\n throw new Error(`Failed patching '${key}': Provided method is not a function`);\n }\n if (chain) {\n // Add new method to the chain\n if (!this.configuration.registry[key]) {\n // New key, create item\n this.configuration.registry[key] = createNewItem(method);\n } else {\n // Existing, push the method\n this.configuration.registry[key].methods.push(method);\n }\n } else {\n // Replace the original\n if (this.isPatched(key)) {\n const { original } = this.configuration.registry[key];\n this.configuration.registry[key] = Object.assign(createNewItem(method), {\n original\n });\n } else {\n this.configuration.registry[key] = createNewItem(method);\n }\n }\n return this;\n }\n\n /**\n * Patch a method inline, execute it and return the value\n * Used for patching contents of functions. This method will not apply a patched\n * function if it has already been patched, allowing for external overrides to\n * function. It also means that the function is cached so that it is not\n * instantiated every time the outer function is invoked.\n * @param {String} key The function key to use\n * @param {Function} method The function to patch (once, only if not patched)\n * @param {...*} args Arguments to pass to the function\n * @returns {*} The output of the patched function\n * @memberof HotPatcher\n * @example\n * function mySpecialFunction(a, b) {\n * return hotPatcher.patchInline(\"func\", (a, b) => {\n * return a + b;\n * }, a, b);\n * }\n */\n patchInline(key, method, ...args) {\n if (!this.isPatched(key)) {\n this.patch(key, method);\n }\n return this.execute(key, ...args);\n }\n\n /**\n * Patch a method (or methods) in sequential-mode\n * See `patch()` with the option `chain: true`\n * @see patch\n * @param {String} key The key to patch\n * @param {...Function} methods The methods to patch\n * @returns {HotPatcher} Returns self\n * @memberof HotPatcher\n */\n plugin(key, ...methods) {\n methods.forEach(method => {\n this.patch(key, method, { chain: true });\n });\n return this;\n }\n\n /**\n * Restore a patched method if it has been overridden\n * @param {String} key The method key\n * @memberof HotPatcher\n */\n restore(key) {\n if (!this.isPatched(key)) {\n throw new Error(`Failed restoring method: No method present for key: ${key}`);\n } else if (typeof this.configuration.registry[key].original !== \"function\") {\n throw new Error(\n `Failed restoring method: Original method not found or of invalid type for key: ${key}`\n );\n }\n this.configuration.registry[key].methods = [this.configuration.registry[key].original];\n }\n\n /**\n * Set a method as being final\n * This sets a method as having been finally overridden. Attempts at overriding\n * again will fail with an error.\n * @param {String} key The key to make final\n * @memberof HotPatcher\n * @returns {HotPatcher} Returns self\n */\n setFinal(key) {\n if (!this.configuration.registry.hasOwnProperty(key)) {\n throw new Error(`Failed marking '${key}' as final: No method found for key`);\n }\n this.configuration.registry[key].final = true;\n return this;\n }\n}\n\nmodule.exports = HotPatcher;\n","function sequence(...methods) {\n if (methods.length === 0) {\n throw new Error(\"Failed creating sequence: No functions provided\");\n }\n return function __executeSequence(...args) {\n let result = args;\n const _this = this;\n while (methods.length > 0) {\n const method = methods.shift();\n result = [method.apply(_this, result)];\n }\n return result[0];\n };\n}\n\nmodule.exports = {\n sequence\n};\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*! https://mths.be/he v1.2.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t// All astral symbols.\n\tvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\t// All ASCII symbols (not just printable ASCII) except those listed in the\n\t// first column of the overrides table.\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides\n\tvar regexAsciiWhitelist = /[\\x01-\\x7F]/g;\n\t// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or\n\t// code points listed in the first column of the overrides table on\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.\n\tvar regexBmpWhitelist = /[\\x01-\\t\\x0B\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g;\n\n\tvar regexEncodeNonAscii = /<\\u20D2|=\\u20E5|>\\u20D2|\\u205F\\u200A|\\u219D\\u0338|\\u2202\\u0338|\\u2220\\u20D2|\\u2229\\uFE00|\\u222A\\uFE00|\\u223C\\u20D2|\\u223D\\u0331|\\u223E\\u0333|\\u2242\\u0338|\\u224B\\u0338|\\u224D\\u20D2|\\u224E\\u0338|\\u224F\\u0338|\\u2250\\u0338|\\u2261\\u20E5|\\u2264\\u20D2|\\u2265\\u20D2|\\u2266\\u0338|\\u2267\\u0338|\\u2268\\uFE00|\\u2269\\uFE00|\\u226A\\u0338|\\u226A\\u20D2|\\u226B\\u0338|\\u226B\\u20D2|\\u227F\\u0338|\\u2282\\u20D2|\\u2283\\u20D2|\\u228A\\uFE00|\\u228B\\uFE00|\\u228F\\u0338|\\u2290\\u0338|\\u2293\\uFE00|\\u2294\\uFE00|\\u22B4\\u20D2|\\u22B5\\u20D2|\\u22D8\\u0338|\\u22D9\\u0338|\\u22DA\\uFE00|\\u22DB\\uFE00|\\u22F5\\u0338|\\u22F9\\u0338|\\u2933\\u0338|\\u29CF\\u0338|\\u29D0\\u0338|\\u2A6D\\u0338|\\u2A70\\u0338|\\u2A7D\\u0338|\\u2A7E\\u0338|\\u2AA1\\u0338|\\u2AA2\\u0338|\\u2AAC\\uFE00|\\u2AAD\\uFE00|\\u2AAF\\u0338|\\u2AB0\\u0338|\\u2AC5\\u0338|\\u2AC6\\u0338|\\u2ACB\\uFE00|\\u2ACC\\uFE00|\\u2AFD\\u20E5|[\\xA0-\\u0113\\u0116-\\u0122\\u0124-\\u012B\\u012E-\\u014D\\u0150-\\u017E\\u0192\\u01B5\\u01F5\\u0237\\u02C6\\u02C7\\u02D8-\\u02DD\\u0311\\u0391-\\u03A1\\u03A3-\\u03A9\\u03B1-\\u03C9\\u03D1\\u03D2\\u03D5\\u03D6\\u03DC\\u03DD\\u03F0\\u03F1\\u03F5\\u03F6\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E\\u045F\\u2002-\\u2005\\u2007-\\u2010\\u2013-\\u2016\\u2018-\\u201A\\u201C-\\u201E\\u2020-\\u2022\\u2025\\u2026\\u2030-\\u2035\\u2039\\u203A\\u203E\\u2041\\u2043\\u2044\\u204F\\u2057\\u205F-\\u2063\\u20AC\\u20DB\\u20DC\\u2102\\u2105\\u210A-\\u2113\\u2115-\\u211E\\u2122\\u2124\\u2127-\\u2129\\u212C\\u212D\\u212F-\\u2131\\u2133-\\u2138\\u2145-\\u2148\\u2153-\\u215E\\u2190-\\u219B\\u219D-\\u21A7\\u21A9-\\u21AE\\u21B0-\\u21B3\\u21B5-\\u21B7\\u21BA-\\u21DB\\u21DD\\u21E4\\u21E5\\u21F5\\u21FD-\\u2205\\u2207-\\u2209\\u220B\\u220C\\u220F-\\u2214\\u2216-\\u2218\\u221A\\u221D-\\u2238\\u223A-\\u2257\\u2259\\u225A\\u225C\\u225F-\\u2262\\u2264-\\u228B\\u228D-\\u229B\\u229D-\\u22A5\\u22A7-\\u22B0\\u22B2-\\u22BB\\u22BD-\\u22DB\\u22DE-\\u22E3\\u22E6-\\u22F7\\u22F9-\\u22FE\\u2305\\u2306\\u2308-\\u2310\\u2312\\u2313\\u2315\\u2316\\u231C-\\u231F\\u2322\\u2323\\u232D\\u232E\\u2336\\u233D\\u233F\\u237C\\u23B0\\u23B1\\u23B4-\\u23B6\\u23DC-\\u23DF\\u23E2\\u23E7\\u2423\\u24C8\\u2500\\u2502\\u250C\\u2510\\u2514\\u2518\\u251C\\u2524\\u252C\\u2534\\u253C\\u2550-\\u256C\\u2580\\u2584\\u2588\\u2591-\\u2593\\u25A1\\u25AA\\u25AB\\u25AD\\u25AE\\u25B1\\u25B3-\\u25B5\\u25B8\\u25B9\\u25BD-\\u25BF\\u25C2\\u25C3\\u25CA\\u25CB\\u25EC\\u25EF\\u25F8-\\u25FC\\u2605\\u2606\\u260E\\u2640\\u2642\\u2660\\u2663\\u2665\\u2666\\u266A\\u266D-\\u266F\\u2713\\u2717\\u2720\\u2736\\u2758\\u2772\\u2773\\u27C8\\u27C9\\u27E6-\\u27ED\\u27F5-\\u27FA\\u27FC\\u27FF\\u2902-\\u2905\\u290C-\\u2913\\u2916\\u2919-\\u2920\\u2923-\\u292A\\u2933\\u2935-\\u2939\\u293C\\u293D\\u2945\\u2948-\\u294B\\u294E-\\u2976\\u2978\\u2979\\u297B-\\u297F\\u2985\\u2986\\u298B-\\u2996\\u299A\\u299C\\u299D\\u29A4-\\u29B7\\u29B9\\u29BB\\u29BC\\u29BE-\\u29C5\\u29C9\\u29CD-\\u29D0\\u29DC-\\u29DE\\u29E3-\\u29E5\\u29EB\\u29F4\\u29F6\\u2A00-\\u2A02\\u2A04\\u2A06\\u2A0C\\u2A0D\\u2A10-\\u2A17\\u2A22-\\u2A27\\u2A29\\u2A2A\\u2A2D-\\u2A31\\u2A33-\\u2A3C\\u2A3F\\u2A40\\u2A42-\\u2A4D\\u2A50\\u2A53-\\u2A58\\u2A5A-\\u2A5D\\u2A5F\\u2A66\\u2A6A\\u2A6D-\\u2A75\\u2A77-\\u2A9A\\u2A9D-\\u2AA2\\u2AA4-\\u2AB0\\u2AB3-\\u2AC8\\u2ACB\\u2ACC\\u2ACF-\\u2ADB\\u2AE4\\u2AE6-\\u2AE9\\u2AEB-\\u2AF3\\u2AFD\\uFB00-\\uFB04]|\\uD835[\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDD6B]/g;\n\tvar encodeMap = {'\\xAD':'shy','\\u200C':'zwnj','\\u200D':'zwj','\\u200E':'lrm','\\u2063':'ic','\\u2062':'it','\\u2061':'af','\\u200F':'rlm','\\u200B':'ZeroWidthSpace','\\u2060':'NoBreak','\\u0311':'DownBreve','\\u20DB':'tdot','\\u20DC':'DotDot','\\t':'Tab','\\n':'NewLine','\\u2008':'puncsp','\\u205F':'MediumSpace','\\u2009':'thinsp','\\u200A':'hairsp','\\u2004':'emsp13','\\u2002':'ensp','\\u2005':'emsp14','\\u2003':'emsp','\\u2007':'numsp','\\xA0':'nbsp','\\u205F\\u200A':'ThickSpace','\\u203E':'oline','_':'lowbar','\\u2010':'dash','\\u2013':'ndash','\\u2014':'mdash','\\u2015':'horbar',',':'comma',';':'semi','\\u204F':'bsemi',':':'colon','\\u2A74':'Colone','!':'excl','\\xA1':'iexcl','?':'quest','\\xBF':'iquest','.':'period','\\u2025':'nldr','\\u2026':'mldr','\\xB7':'middot','\\'':'apos','\\u2018':'lsquo','\\u2019':'rsquo','\\u201A':'sbquo','\\u2039':'lsaquo','\\u203A':'rsaquo','\"':'quot','\\u201C':'ldquo','\\u201D':'rdquo','\\u201E':'bdquo','\\xAB':'laquo','\\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\\u2308':'lceil','\\u2309':'rceil','\\u230A':'lfloor','\\u230B':'rfloor','\\u2985':'lopar','\\u2986':'ropar','\\u298B':'lbrke','\\u298C':'rbrke','\\u298D':'lbrkslu','\\u298E':'rbrksld','\\u298F':'lbrksld','\\u2990':'rbrkslu','\\u2991':'langd','\\u2992':'rangd','\\u2993':'lparlt','\\u2994':'rpargt','\\u2995':'gtlPar','\\u2996':'ltrPar','\\u27E6':'lobrk','\\u27E7':'robrk','\\u27E8':'lang','\\u27E9':'rang','\\u27EA':'Lang','\\u27EB':'Rang','\\u27EC':'loang','\\u27ED':'roang','\\u2772':'lbbrk','\\u2773':'rbbrk','\\u2016':'Vert','\\xA7':'sect','\\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\\u2030':'permil','\\u2031':'pertenk','\\u2020':'dagger','\\u2021':'Dagger','\\u2022':'bull','\\u2043':'hybull','\\u2032':'prime','\\u2033':'Prime','\\u2034':'tprime','\\u2057':'qprime','\\u2035':'bprime','\\u2041':'caret','`':'grave','\\xB4':'acute','\\u02DC':'tilde','^':'Hat','\\xAF':'macr','\\u02D8':'breve','\\u02D9':'dot','\\xA8':'die','\\u02DA':'ring','\\u02DD':'dblac','\\xB8':'cedil','\\u02DB':'ogon','\\u02C6':'circ','\\u02C7':'caron','\\xB0':'deg','\\xA9':'copy','\\xAE':'reg','\\u2117':'copysr','\\u2118':'wp','\\u211E':'rx','\\u2127':'mho','\\u2129':'iiota','\\u2190':'larr','\\u219A':'nlarr','\\u2192':'rarr','\\u219B':'nrarr','\\u2191':'uarr','\\u2193':'darr','\\u2194':'harr','\\u21AE':'nharr','\\u2195':'varr','\\u2196':'nwarr','\\u2197':'nearr','\\u2198':'searr','\\u2199':'swarr','\\u219D':'rarrw','\\u219D\\u0338':'nrarrw','\\u219E':'Larr','\\u219F':'Uarr','\\u21A0':'Rarr','\\u21A1':'Darr','\\u21A2':'larrtl','\\u21A3':'rarrtl','\\u21A4':'mapstoleft','\\u21A5':'mapstoup','\\u21A6':'map','\\u21A7':'mapstodown','\\u21A9':'larrhk','\\u21AA':'rarrhk','\\u21AB':'larrlp','\\u21AC':'rarrlp','\\u21AD':'harrw','\\u21B0':'lsh','\\u21B1':'rsh','\\u21B2':'ldsh','\\u21B3':'rdsh','\\u21B5':'crarr','\\u21B6':'cularr','\\u21B7':'curarr','\\u21BA':'olarr','\\u21BB':'orarr','\\u21BC':'lharu','\\u21BD':'lhard','\\u21BE':'uharr','\\u21BF':'uharl','\\u21C0':'rharu','\\u21C1':'rhard','\\u21C2':'dharr','\\u21C3':'dharl','\\u21C4':'rlarr','\\u21C5':'udarr','\\u21C6':'lrarr','\\u21C7':'llarr','\\u21C8':'uuarr','\\u21C9':'rrarr','\\u21CA':'ddarr','\\u21CB':'lrhar','\\u21CC':'rlhar','\\u21D0':'lArr','\\u21CD':'nlArr','\\u21D1':'uArr','\\u21D2':'rArr','\\u21CF':'nrArr','\\u21D3':'dArr','\\u21D4':'iff','\\u21CE':'nhArr','\\u21D5':'vArr','\\u21D6':'nwArr','\\u21D7':'neArr','\\u21D8':'seArr','\\u21D9':'swArr','\\u21DA':'lAarr','\\u21DB':'rAarr','\\u21DD':'zigrarr','\\u21E4':'larrb','\\u21E5':'rarrb','\\u21F5':'duarr','\\u21FD':'loarr','\\u21FE':'roarr','\\u21FF':'hoarr','\\u2200':'forall','\\u2201':'comp','\\u2202':'part','\\u2202\\u0338':'npart','\\u2203':'exist','\\u2204':'nexist','\\u2205':'empty','\\u2207':'Del','\\u2208':'in','\\u2209':'notin','\\u220B':'ni','\\u220C':'notni','\\u03F6':'bepsi','\\u220F':'prod','\\u2210':'coprod','\\u2211':'sum','+':'plus','\\xB1':'pm','\\xF7':'div','\\xD7':'times','<':'lt','\\u226E':'nlt','<\\u20D2':'nvlt','=':'equals','\\u2260':'ne','=\\u20E5':'bne','\\u2A75':'Equal','>':'gt','\\u226F':'ngt','>\\u20D2':'nvgt','\\xAC':'not','|':'vert','\\xA6':'brvbar','\\u2212':'minus','\\u2213':'mp','\\u2214':'plusdo','\\u2044':'frasl','\\u2216':'setmn','\\u2217':'lowast','\\u2218':'compfn','\\u221A':'Sqrt','\\u221D':'prop','\\u221E':'infin','\\u221F':'angrt','\\u2220':'ang','\\u2220\\u20D2':'nang','\\u2221':'angmsd','\\u2222':'angsph','\\u2223':'mid','\\u2224':'nmid','\\u2225':'par','\\u2226':'npar','\\u2227':'and','\\u2228':'or','\\u2229':'cap','\\u2229\\uFE00':'caps','\\u222A':'cup','\\u222A\\uFE00':'cups','\\u222B':'int','\\u222C':'Int','\\u222D':'tint','\\u2A0C':'qint','\\u222E':'oint','\\u222F':'Conint','\\u2230':'Cconint','\\u2231':'cwint','\\u2232':'cwconint','\\u2233':'awconint','\\u2234':'there4','\\u2235':'becaus','\\u2236':'ratio','\\u2237':'Colon','\\u2238':'minusd','\\u223A':'mDDot','\\u223B':'homtht','\\u223C':'sim','\\u2241':'nsim','\\u223C\\u20D2':'nvsim','\\u223D':'bsim','\\u223D\\u0331':'race','\\u223E':'ac','\\u223E\\u0333':'acE','\\u223F':'acd','\\u2240':'wr','\\u2242':'esim','\\u2242\\u0338':'nesim','\\u2243':'sime','\\u2244':'nsime','\\u2245':'cong','\\u2247':'ncong','\\u2246':'simne','\\u2248':'ap','\\u2249':'nap','\\u224A':'ape','\\u224B':'apid','\\u224B\\u0338':'napid','\\u224C':'bcong','\\u224D':'CupCap','\\u226D':'NotCupCap','\\u224D\\u20D2':'nvap','\\u224E':'bump','\\u224E\\u0338':'nbump','\\u224F':'bumpe','\\u224F\\u0338':'nbumpe','\\u2250':'doteq','\\u2250\\u0338':'nedot','\\u2251':'eDot','\\u2252':'efDot','\\u2253':'erDot','\\u2254':'colone','\\u2255':'ecolon','\\u2256':'ecir','\\u2257':'cire','\\u2259':'wedgeq','\\u225A':'veeeq','\\u225C':'trie','\\u225F':'equest','\\u2261':'equiv','\\u2262':'nequiv','\\u2261\\u20E5':'bnequiv','\\u2264':'le','\\u2270':'nle','\\u2264\\u20D2':'nvle','\\u2265':'ge','\\u2271':'nge','\\u2265\\u20D2':'nvge','\\u2266':'lE','\\u2266\\u0338':'nlE','\\u2267':'gE','\\u2267\\u0338':'ngE','\\u2268\\uFE00':'lvnE','\\u2268':'lnE','\\u2269':'gnE','\\u2269\\uFE00':'gvnE','\\u226A':'ll','\\u226A\\u0338':'nLtv','\\u226A\\u20D2':'nLt','\\u226B':'gg','\\u226B\\u0338':'nGtv','\\u226B\\u20D2':'nGt','\\u226C':'twixt','\\u2272':'lsim','\\u2274':'nlsim','\\u2273':'gsim','\\u2275':'ngsim','\\u2276':'lg','\\u2278':'ntlg','\\u2277':'gl','\\u2279':'ntgl','\\u227A':'pr','\\u2280':'npr','\\u227B':'sc','\\u2281':'nsc','\\u227C':'prcue','\\u22E0':'nprcue','\\u227D':'sccue','\\u22E1':'nsccue','\\u227E':'prsim','\\u227F':'scsim','\\u227F\\u0338':'NotSucceedsTilde','\\u2282':'sub','\\u2284':'nsub','\\u2282\\u20D2':'vnsub','\\u2283':'sup','\\u2285':'nsup','\\u2283\\u20D2':'vnsup','\\u2286':'sube','\\u2288':'nsube','\\u2287':'supe','\\u2289':'nsupe','\\u228A\\uFE00':'vsubne','\\u228A':'subne','\\u228B\\uFE00':'vsupne','\\u228B':'supne','\\u228D':'cupdot','\\u228E':'uplus','\\u228F':'sqsub','\\u228F\\u0338':'NotSquareSubset','\\u2290':'sqsup','\\u2290\\u0338':'NotSquareSuperset','\\u2291':'sqsube','\\u22E2':'nsqsube','\\u2292':'sqsupe','\\u22E3':'nsqsupe','\\u2293':'sqcap','\\u2293\\uFE00':'sqcaps','\\u2294':'sqcup','\\u2294\\uFE00':'sqcups','\\u2295':'oplus','\\u2296':'ominus','\\u2297':'otimes','\\u2298':'osol','\\u2299':'odot','\\u229A':'ocir','\\u229B':'oast','\\u229D':'odash','\\u229E':'plusb','\\u229F':'minusb','\\u22A0':'timesb','\\u22A1':'sdotb','\\u22A2':'vdash','\\u22AC':'nvdash','\\u22A3':'dashv','\\u22A4':'top','\\u22A5':'bot','\\u22A7':'models','\\u22A8':'vDash','\\u22AD':'nvDash','\\u22A9':'Vdash','\\u22AE':'nVdash','\\u22AA':'Vvdash','\\u22AB':'VDash','\\u22AF':'nVDash','\\u22B0':'prurel','\\u22B2':'vltri','\\u22EA':'nltri','\\u22B3':'vrtri','\\u22EB':'nrtri','\\u22B4':'ltrie','\\u22EC':'nltrie','\\u22B4\\u20D2':'nvltrie','\\u22B5':'rtrie','\\u22ED':'nrtrie','\\u22B5\\u20D2':'nvrtrie','\\u22B6':'origof','\\u22B7':'imof','\\u22B8':'mumap','\\u22B9':'hercon','\\u22BA':'intcal','\\u22BB':'veebar','\\u22BD':'barvee','\\u22BE':'angrtvb','\\u22BF':'lrtri','\\u22C0':'Wedge','\\u22C1':'Vee','\\u22C2':'xcap','\\u22C3':'xcup','\\u22C4':'diam','\\u22C5':'sdot','\\u22C6':'Star','\\u22C7':'divonx','\\u22C8':'bowtie','\\u22C9':'ltimes','\\u22CA':'rtimes','\\u22CB':'lthree','\\u22CC':'rthree','\\u22CD':'bsime','\\u22CE':'cuvee','\\u22CF':'cuwed','\\u22D0':'Sub','\\u22D1':'Sup','\\u22D2':'Cap','\\u22D3':'Cup','\\u22D4':'fork','\\u22D5':'epar','\\u22D6':'ltdot','\\u22D7':'gtdot','\\u22D8':'Ll','\\u22D8\\u0338':'nLl','\\u22D9':'Gg','\\u22D9\\u0338':'nGg','\\u22DA\\uFE00':'lesg','\\u22DA':'leg','\\u22DB':'gel','\\u22DB\\uFE00':'gesl','\\u22DE':'cuepr','\\u22DF':'cuesc','\\u22E6':'lnsim','\\u22E7':'gnsim','\\u22E8':'prnsim','\\u22E9':'scnsim','\\u22EE':'vellip','\\u22EF':'ctdot','\\u22F0':'utdot','\\u22F1':'dtdot','\\u22F2':'disin','\\u22F3':'isinsv','\\u22F4':'isins','\\u22F5':'isindot','\\u22F5\\u0338':'notindot','\\u22F6':'notinvc','\\u22F7':'notinvb','\\u22F9':'isinE','\\u22F9\\u0338':'notinE','\\u22FA':'nisd','\\u22FB':'xnis','\\u22FC':'nis','\\u22FD':'notnivc','\\u22FE':'notnivb','\\u2305':'barwed','\\u2306':'Barwed','\\u230C':'drcrop','\\u230D':'dlcrop','\\u230E':'urcrop','\\u230F':'ulcrop','\\u2310':'bnot','\\u2312':'profline','\\u2313':'profsurf','\\u2315':'telrec','\\u2316':'target','\\u231C':'ulcorn','\\u231D':'urcorn','\\u231E':'dlcorn','\\u231F':'drcorn','\\u2322':'frown','\\u2323':'smile','\\u232D':'cylcty','\\u232E':'profalar','\\u2336':'topbot','\\u233D':'ovbar','\\u233F':'solbar','\\u237C':'angzarr','\\u23B0':'lmoust','\\u23B1':'rmoust','\\u23B4':'tbrk','\\u23B5':'bbrk','\\u23B6':'bbrktbrk','\\u23DC':'OverParenthesis','\\u23DD':'UnderParenthesis','\\u23DE':'OverBrace','\\u23DF':'UnderBrace','\\u23E2':'trpezium','\\u23E7':'elinters','\\u2423':'blank','\\u2500':'boxh','\\u2502':'boxv','\\u250C':'boxdr','\\u2510':'boxdl','\\u2514':'boxur','\\u2518':'boxul','\\u251C':'boxvr','\\u2524':'boxvl','\\u252C':'boxhd','\\u2534':'boxhu','\\u253C':'boxvh','\\u2550':'boxH','\\u2551':'boxV','\\u2552':'boxdR','\\u2553':'boxDr','\\u2554':'boxDR','\\u2555':'boxdL','\\u2556':'boxDl','\\u2557':'boxDL','\\u2558':'boxuR','\\u2559':'boxUr','\\u255A':'boxUR','\\u255B':'boxuL','\\u255C':'boxUl','\\u255D':'boxUL','\\u255E':'boxvR','\\u255F':'boxVr','\\u2560':'boxVR','\\u2561':'boxvL','\\u2562':'boxVl','\\u2563':'boxVL','\\u2564':'boxHd','\\u2565':'boxhD','\\u2566':'boxHD','\\u2567':'boxHu','\\u2568':'boxhU','\\u2569':'boxHU','\\u256A':'boxvH','\\u256B':'boxVh','\\u256C':'boxVH','\\u2580':'uhblk','\\u2584':'lhblk','\\u2588':'block','\\u2591':'blk14','\\u2592':'blk12','\\u2593':'blk34','\\u25A1':'squ','\\u25AA':'squf','\\u25AB':'EmptyVerySmallSquare','\\u25AD':'rect','\\u25AE':'marker','\\u25B1':'fltns','\\u25B3':'xutri','\\u25B4':'utrif','\\u25B5':'utri','\\u25B8':'rtrif','\\u25B9':'rtri','\\u25BD':'xdtri','\\u25BE':'dtrif','\\u25BF':'dtri','\\u25C2':'ltrif','\\u25C3':'ltri','\\u25CA':'loz','\\u25CB':'cir','\\u25EC':'tridot','\\u25EF':'xcirc','\\u25F8':'ultri','\\u25F9':'urtri','\\u25FA':'lltri','\\u25FB':'EmptySmallSquare','\\u25FC':'FilledSmallSquare','\\u2605':'starf','\\u2606':'star','\\u260E':'phone','\\u2640':'female','\\u2642':'male','\\u2660':'spades','\\u2663':'clubs','\\u2665':'hearts','\\u2666':'diams','\\u266A':'sung','\\u2713':'check','\\u2717':'cross','\\u2720':'malt','\\u2736':'sext','\\u2758':'VerticalSeparator','\\u27C8':'bsolhsub','\\u27C9':'suphsol','\\u27F5':'xlarr','\\u27F6':'xrarr','\\u27F7':'xharr','\\u27F8':'xlArr','\\u27F9':'xrArr','\\u27FA':'xhArr','\\u27FC':'xmap','\\u27FF':'dzigrarr','\\u2902':'nvlArr','\\u2903':'nvrArr','\\u2904':'nvHarr','\\u2905':'Map','\\u290C':'lbarr','\\u290D':'rbarr','\\u290E':'lBarr','\\u290F':'rBarr','\\u2910':'RBarr','\\u2911':'DDotrahd','\\u2912':'UpArrowBar','\\u2913':'DownArrowBar','\\u2916':'Rarrtl','\\u2919':'latail','\\u291A':'ratail','\\u291B':'lAtail','\\u291C':'rAtail','\\u291D':'larrfs','\\u291E':'rarrfs','\\u291F':'larrbfs','\\u2920':'rarrbfs','\\u2923':'nwarhk','\\u2924':'nearhk','\\u2925':'searhk','\\u2926':'swarhk','\\u2927':'nwnear','\\u2928':'toea','\\u2929':'tosa','\\u292A':'swnwar','\\u2933':'rarrc','\\u2933\\u0338':'nrarrc','\\u2935':'cudarrr','\\u2936':'ldca','\\u2937':'rdca','\\u2938':'cudarrl','\\u2939':'larrpl','\\u293C':'curarrm','\\u293D':'cularrp','\\u2945':'rarrpl','\\u2948':'harrcir','\\u2949':'Uarrocir','\\u294A':'lurdshar','\\u294B':'ldrushar','\\u294E':'LeftRightVector','\\u294F':'RightUpDownVector','\\u2950':'DownLeftRightVector','\\u2951':'LeftUpDownVector','\\u2952':'LeftVectorBar','\\u2953':'RightVectorBar','\\u2954':'RightUpVectorBar','\\u2955':'RightDownVectorBar','\\u2956':'DownLeftVectorBar','\\u2957':'DownRightVectorBar','\\u2958':'LeftUpVectorBar','\\u2959':'LeftDownVectorBar','\\u295A':'LeftTeeVector','\\u295B':'RightTeeVector','\\u295C':'RightUpTeeVector','\\u295D':'RightDownTeeVector','\\u295E':'DownLeftTeeVector','\\u295F':'DownRightTeeVector','\\u2960':'LeftUpTeeVector','\\u2961':'LeftDownTeeVector','\\u2962':'lHar','\\u2963':'uHar','\\u2964':'rHar','\\u2965':'dHar','\\u2966':'luruhar','\\u2967':'ldrdhar','\\u2968':'ruluhar','\\u2969':'rdldhar','\\u296A':'lharul','\\u296B':'llhard','\\u296C':'rharul','\\u296D':'lrhard','\\u296E':'udhar','\\u296F':'duhar','\\u2970':'RoundImplies','\\u2971':'erarr','\\u2972':'simrarr','\\u2973':'larrsim','\\u2974':'rarrsim','\\u2975':'rarrap','\\u2976':'ltlarr','\\u2978':'gtrarr','\\u2979':'subrarr','\\u297B':'suplarr','\\u297C':'lfisht','\\u297D':'rfisht','\\u297E':'ufisht','\\u297F':'dfisht','\\u299A':'vzigzag','\\u299C':'vangrt','\\u299D':'angrtvbd','\\u29A4':'ange','\\u29A5':'range','\\u29A6':'dwangle','\\u29A7':'uwangle','\\u29A8':'angmsdaa','\\u29A9':'angmsdab','\\u29AA':'angmsdac','\\u29AB':'angmsdad','\\u29AC':'angmsdae','\\u29AD':'angmsdaf','\\u29AE':'angmsdag','\\u29AF':'angmsdah','\\u29B0':'bemptyv','\\u29B1':'demptyv','\\u29B2':'cemptyv','\\u29B3':'raemptyv','\\u29B4':'laemptyv','\\u29B5':'ohbar','\\u29B6':'omid','\\u29B7':'opar','\\u29B9':'operp','\\u29BB':'olcross','\\u29BC':'odsold','\\u29BE':'olcir','\\u29BF':'ofcir','\\u29C0':'olt','\\u29C1':'ogt','\\u29C2':'cirscir','\\u29C3':'cirE','\\u29C4':'solb','\\u29C5':'bsolb','\\u29C9':'boxbox','\\u29CD':'trisb','\\u29CE':'rtriltri','\\u29CF':'LeftTriangleBar','\\u29CF\\u0338':'NotLeftTriangleBar','\\u29D0':'RightTriangleBar','\\u29D0\\u0338':'NotRightTriangleBar','\\u29DC':'iinfin','\\u29DD':'infintie','\\u29DE':'nvinfin','\\u29E3':'eparsl','\\u29E4':'smeparsl','\\u29E5':'eqvparsl','\\u29EB':'lozf','\\u29F4':'RuleDelayed','\\u29F6':'dsol','\\u2A00':'xodot','\\u2A01':'xoplus','\\u2A02':'xotime','\\u2A04':'xuplus','\\u2A06':'xsqcup','\\u2A0D':'fpartint','\\u2A10':'cirfnint','\\u2A11':'awint','\\u2A12':'rppolint','\\u2A13':'scpolint','\\u2A14':'npolint','\\u2A15':'pointint','\\u2A16':'quatint','\\u2A17':'intlarhk','\\u2A22':'pluscir','\\u2A23':'plusacir','\\u2A24':'simplus','\\u2A25':'plusdu','\\u2A26':'plussim','\\u2A27':'plustwo','\\u2A29':'mcomma','\\u2A2A':'minusdu','\\u2A2D':'loplus','\\u2A2E':'roplus','\\u2A2F':'Cross','\\u2A30':'timesd','\\u2A31':'timesbar','\\u2A33':'smashp','\\u2A34':'lotimes','\\u2A35':'rotimes','\\u2A36':'otimesas','\\u2A37':'Otimes','\\u2A38':'odiv','\\u2A39':'triplus','\\u2A3A':'triminus','\\u2A3B':'tritime','\\u2A3C':'iprod','\\u2A3F':'amalg','\\u2A40':'capdot','\\u2A42':'ncup','\\u2A43':'ncap','\\u2A44':'capand','\\u2A45':'cupor','\\u2A46':'cupcap','\\u2A47':'capcup','\\u2A48':'cupbrcap','\\u2A49':'capbrcup','\\u2A4A':'cupcup','\\u2A4B':'capcap','\\u2A4C':'ccups','\\u2A4D':'ccaps','\\u2A50':'ccupssm','\\u2A53':'And','\\u2A54':'Or','\\u2A55':'andand','\\u2A56':'oror','\\u2A57':'orslope','\\u2A58':'andslope','\\u2A5A':'andv','\\u2A5B':'orv','\\u2A5C':'andd','\\u2A5D':'ord','\\u2A5F':'wedbar','\\u2A66':'sdote','\\u2A6A':'simdot','\\u2A6D':'congdot','\\u2A6D\\u0338':'ncongdot','\\u2A6E':'easter','\\u2A6F':'apacir','\\u2A70':'apE','\\u2A70\\u0338':'napE','\\u2A71':'eplus','\\u2A72':'pluse','\\u2A73':'Esim','\\u2A77':'eDDot','\\u2A78':'equivDD','\\u2A79':'ltcir','\\u2A7A':'gtcir','\\u2A7B':'ltquest','\\u2A7C':'gtquest','\\u2A7D':'les','\\u2A7D\\u0338':'nles','\\u2A7E':'ges','\\u2A7E\\u0338':'nges','\\u2A7F':'lesdot','\\u2A80':'gesdot','\\u2A81':'lesdoto','\\u2A82':'gesdoto','\\u2A83':'lesdotor','\\u2A84':'gesdotol','\\u2A85':'lap','\\u2A86':'gap','\\u2A87':'lne','\\u2A88':'gne','\\u2A89':'lnap','\\u2A8A':'gnap','\\u2A8B':'lEg','\\u2A8C':'gEl','\\u2A8D':'lsime','\\u2A8E':'gsime','\\u2A8F':'lsimg','\\u2A90':'gsiml','\\u2A91':'lgE','\\u2A92':'glE','\\u2A93':'lesges','\\u2A94':'gesles','\\u2A95':'els','\\u2A96':'egs','\\u2A97':'elsdot','\\u2A98':'egsdot','\\u2A99':'el','\\u2A9A':'eg','\\u2A9D':'siml','\\u2A9E':'simg','\\u2A9F':'simlE','\\u2AA0':'simgE','\\u2AA1':'LessLess','\\u2AA1\\u0338':'NotNestedLessLess','\\u2AA2':'GreaterGreater','\\u2AA2\\u0338':'NotNestedGreaterGreater','\\u2AA4':'glj','\\u2AA5':'gla','\\u2AA6':'ltcc','\\u2AA7':'gtcc','\\u2AA8':'lescc','\\u2AA9':'gescc','\\u2AAA':'smt','\\u2AAB':'lat','\\u2AAC':'smte','\\u2AAC\\uFE00':'smtes','\\u2AAD':'late','\\u2AAD\\uFE00':'lates','\\u2AAE':'bumpE','\\u2AAF':'pre','\\u2AAF\\u0338':'npre','\\u2AB0':'sce','\\u2AB0\\u0338':'nsce','\\u2AB3':'prE','\\u2AB4':'scE','\\u2AB5':'prnE','\\u2AB6':'scnE','\\u2AB7':'prap','\\u2AB8':'scap','\\u2AB9':'prnap','\\u2ABA':'scnap','\\u2ABB':'Pr','\\u2ABC':'Sc','\\u2ABD':'subdot','\\u2ABE':'supdot','\\u2ABF':'subplus','\\u2AC0':'supplus','\\u2AC1':'submult','\\u2AC2':'supmult','\\u2AC3':'subedot','\\u2AC4':'supedot','\\u2AC5':'subE','\\u2AC5\\u0338':'nsubE','\\u2AC6':'supE','\\u2AC6\\u0338':'nsupE','\\u2AC7':'subsim','\\u2AC8':'supsim','\\u2ACB\\uFE00':'vsubnE','\\u2ACB':'subnE','\\u2ACC\\uFE00':'vsupnE','\\u2ACC':'supnE','\\u2ACF':'csub','\\u2AD0':'csup','\\u2AD1':'csube','\\u2AD2':'csupe','\\u2AD3':'subsup','\\u2AD4':'supsub','\\u2AD5':'subsub','\\u2AD6':'supsup','\\u2AD7':'suphsub','\\u2AD8':'supdsub','\\u2AD9':'forkv','\\u2ADA':'topfork','\\u2ADB':'mlcp','\\u2AE4':'Dashv','\\u2AE6':'Vdashl','\\u2AE7':'Barv','\\u2AE8':'vBar','\\u2AE9':'vBarv','\\u2AEB':'Vbar','\\u2AEC':'Not','\\u2AED':'bNot','\\u2AEE':'rnmid','\\u2AEF':'cirmid','\\u2AF0':'midcir','\\u2AF1':'topcir','\\u2AF2':'nhpar','\\u2AF3':'parsim','\\u2AFD':'parsl','\\u2AFD\\u20E5':'nparsl','\\u266D':'flat','\\u266E':'natur','\\u266F':'sharp','\\xA4':'curren','\\xA2':'cent','$':'dollar','\\xA3':'pound','\\xA5':'yen','\\u20AC':'euro','\\xB9':'sup1','\\xBD':'half','\\u2153':'frac13','\\xBC':'frac14','\\u2155':'frac15','\\u2159':'frac16','\\u215B':'frac18','\\xB2':'sup2','\\u2154':'frac23','\\u2156':'frac25','\\xB3':'sup3','\\xBE':'frac34','\\u2157':'frac35','\\u215C':'frac38','\\u2158':'frac45','\\u215A':'frac56','\\u215D':'frac58','\\u215E':'frac78','\\uD835\\uDCB6':'ascr','\\uD835\\uDD52':'aopf','\\uD835\\uDD1E':'afr','\\uD835\\uDD38':'Aopf','\\uD835\\uDD04':'Afr','\\uD835\\uDC9C':'Ascr','\\xAA':'ordf','\\xE1':'aacute','\\xC1':'Aacute','\\xE0':'agrave','\\xC0':'Agrave','\\u0103':'abreve','\\u0102':'Abreve','\\xE2':'acirc','\\xC2':'Acirc','\\xE5':'aring','\\xC5':'angst','\\xE4':'auml','\\xC4':'Auml','\\xE3':'atilde','\\xC3':'Atilde','\\u0105':'aogon','\\u0104':'Aogon','\\u0101':'amacr','\\u0100':'Amacr','\\xE6':'aelig','\\xC6':'AElig','\\uD835\\uDCB7':'bscr','\\uD835\\uDD53':'bopf','\\uD835\\uDD1F':'bfr','\\uD835\\uDD39':'Bopf','\\u212C':'Bscr','\\uD835\\uDD05':'Bfr','\\uD835\\uDD20':'cfr','\\uD835\\uDCB8':'cscr','\\uD835\\uDD54':'copf','\\u212D':'Cfr','\\uD835\\uDC9E':'Cscr','\\u2102':'Copf','\\u0107':'cacute','\\u0106':'Cacute','\\u0109':'ccirc','\\u0108':'Ccirc','\\u010D':'ccaron','\\u010C':'Ccaron','\\u010B':'cdot','\\u010A':'Cdot','\\xE7':'ccedil','\\xC7':'Ccedil','\\u2105':'incare','\\uD835\\uDD21':'dfr','\\u2146':'dd','\\uD835\\uDD55':'dopf','\\uD835\\uDCB9':'dscr','\\uD835\\uDC9F':'Dscr','\\uD835\\uDD07':'Dfr','\\u2145':'DD','\\uD835\\uDD3B':'Dopf','\\u010F':'dcaron','\\u010E':'Dcaron','\\u0111':'dstrok','\\u0110':'Dstrok','\\xF0':'eth','\\xD0':'ETH','\\u2147':'ee','\\u212F':'escr','\\uD835\\uDD22':'efr','\\uD835\\uDD56':'eopf','\\u2130':'Escr','\\uD835\\uDD08':'Efr','\\uD835\\uDD3C':'Eopf','\\xE9':'eacute','\\xC9':'Eacute','\\xE8':'egrave','\\xC8':'Egrave','\\xEA':'ecirc','\\xCA':'Ecirc','\\u011B':'ecaron','\\u011A':'Ecaron','\\xEB':'euml','\\xCB':'Euml','\\u0117':'edot','\\u0116':'Edot','\\u0119':'eogon','\\u0118':'Eogon','\\u0113':'emacr','\\u0112':'Emacr','\\uD835\\uDD23':'ffr','\\uD835\\uDD57':'fopf','\\uD835\\uDCBB':'fscr','\\uD835\\uDD09':'Ffr','\\uD835\\uDD3D':'Fopf','\\u2131':'Fscr','\\uFB00':'fflig','\\uFB03':'ffilig','\\uFB04':'ffllig','\\uFB01':'filig','fj':'fjlig','\\uFB02':'fllig','\\u0192':'fnof','\\u210A':'gscr','\\uD835\\uDD58':'gopf','\\uD835\\uDD24':'gfr','\\uD835\\uDCA2':'Gscr','\\uD835\\uDD3E':'Gopf','\\uD835\\uDD0A':'Gfr','\\u01F5':'gacute','\\u011F':'gbreve','\\u011E':'Gbreve','\\u011D':'gcirc','\\u011C':'Gcirc','\\u0121':'gdot','\\u0120':'Gdot','\\u0122':'Gcedil','\\uD835\\uDD25':'hfr','\\u210E':'planckh','\\uD835\\uDCBD':'hscr','\\uD835\\uDD59':'hopf','\\u210B':'Hscr','\\u210C':'Hfr','\\u210D':'Hopf','\\u0125':'hcirc','\\u0124':'Hcirc','\\u210F':'hbar','\\u0127':'hstrok','\\u0126':'Hstrok','\\uD835\\uDD5A':'iopf','\\uD835\\uDD26':'ifr','\\uD835\\uDCBE':'iscr','\\u2148':'ii','\\uD835\\uDD40':'Iopf','\\u2110':'Iscr','\\u2111':'Im','\\xED':'iacute','\\xCD':'Iacute','\\xEC':'igrave','\\xCC':'Igrave','\\xEE':'icirc','\\xCE':'Icirc','\\xEF':'iuml','\\xCF':'Iuml','\\u0129':'itilde','\\u0128':'Itilde','\\u0130':'Idot','\\u012F':'iogon','\\u012E':'Iogon','\\u012B':'imacr','\\u012A':'Imacr','\\u0133':'ijlig','\\u0132':'IJlig','\\u0131':'imath','\\uD835\\uDCBF':'jscr','\\uD835\\uDD5B':'jopf','\\uD835\\uDD27':'jfr','\\uD835\\uDCA5':'Jscr','\\uD835\\uDD0D':'Jfr','\\uD835\\uDD41':'Jopf','\\u0135':'jcirc','\\u0134':'Jcirc','\\u0237':'jmath','\\uD835\\uDD5C':'kopf','\\uD835\\uDCC0':'kscr','\\uD835\\uDD28':'kfr','\\uD835\\uDCA6':'Kscr','\\uD835\\uDD42':'Kopf','\\uD835\\uDD0E':'Kfr','\\u0137':'kcedil','\\u0136':'Kcedil','\\uD835\\uDD29':'lfr','\\uD835\\uDCC1':'lscr','\\u2113':'ell','\\uD835\\uDD5D':'lopf','\\u2112':'Lscr','\\uD835\\uDD0F':'Lfr','\\uD835\\uDD43':'Lopf','\\u013A':'lacute','\\u0139':'Lacute','\\u013E':'lcaron','\\u013D':'Lcaron','\\u013C':'lcedil','\\u013B':'Lcedil','\\u0142':'lstrok','\\u0141':'Lstrok','\\u0140':'lmidot','\\u013F':'Lmidot','\\uD835\\uDD2A':'mfr','\\uD835\\uDD5E':'mopf','\\uD835\\uDCC2':'mscr','\\uD835\\uDD10':'Mfr','\\uD835\\uDD44':'Mopf','\\u2133':'Mscr','\\uD835\\uDD2B':'nfr','\\uD835\\uDD5F':'nopf','\\uD835\\uDCC3':'nscr','\\u2115':'Nopf','\\uD835\\uDCA9':'Nscr','\\uD835\\uDD11':'Nfr','\\u0144':'nacute','\\u0143':'Nacute','\\u0148':'ncaron','\\u0147':'Ncaron','\\xF1':'ntilde','\\xD1':'Ntilde','\\u0146':'ncedil','\\u0145':'Ncedil','\\u2116':'numero','\\u014B':'eng','\\u014A':'ENG','\\uD835\\uDD60':'oopf','\\uD835\\uDD2C':'ofr','\\u2134':'oscr','\\uD835\\uDCAA':'Oscr','\\uD835\\uDD12':'Ofr','\\uD835\\uDD46':'Oopf','\\xBA':'ordm','\\xF3':'oacute','\\xD3':'Oacute','\\xF2':'ograve','\\xD2':'Ograve','\\xF4':'ocirc','\\xD4':'Ocirc','\\xF6':'ouml','\\xD6':'Ouml','\\u0151':'odblac','\\u0150':'Odblac','\\xF5':'otilde','\\xD5':'Otilde','\\xF8':'oslash','\\xD8':'Oslash','\\u014D':'omacr','\\u014C':'Omacr','\\u0153':'oelig','\\u0152':'OElig','\\uD835\\uDD2D':'pfr','\\uD835\\uDCC5':'pscr','\\uD835\\uDD61':'popf','\\u2119':'Popf','\\uD835\\uDD13':'Pfr','\\uD835\\uDCAB':'Pscr','\\uD835\\uDD62':'qopf','\\uD835\\uDD2E':'qfr','\\uD835\\uDCC6':'qscr','\\uD835\\uDCAC':'Qscr','\\uD835\\uDD14':'Qfr','\\u211A':'Qopf','\\u0138':'kgreen','\\uD835\\uDD2F':'rfr','\\uD835\\uDD63':'ropf','\\uD835\\uDCC7':'rscr','\\u211B':'Rscr','\\u211C':'Re','\\u211D':'Ropf','\\u0155':'racute','\\u0154':'Racute','\\u0159':'rcaron','\\u0158':'Rcaron','\\u0157':'rcedil','\\u0156':'Rcedil','\\uD835\\uDD64':'sopf','\\uD835\\uDCC8':'sscr','\\uD835\\uDD30':'sfr','\\uD835\\uDD4A':'Sopf','\\uD835\\uDD16':'Sfr','\\uD835\\uDCAE':'Sscr','\\u24C8':'oS','\\u015B':'sacute','\\u015A':'Sacute','\\u015D':'scirc','\\u015C':'Scirc','\\u0161':'scaron','\\u0160':'Scaron','\\u015F':'scedil','\\u015E':'Scedil','\\xDF':'szlig','\\uD835\\uDD31':'tfr','\\uD835\\uDCC9':'tscr','\\uD835\\uDD65':'topf','\\uD835\\uDCAF':'Tscr','\\uD835\\uDD17':'Tfr','\\uD835\\uDD4B':'Topf','\\u0165':'tcaron','\\u0164':'Tcaron','\\u0163':'tcedil','\\u0162':'Tcedil','\\u2122':'trade','\\u0167':'tstrok','\\u0166':'Tstrok','\\uD835\\uDCCA':'uscr','\\uD835\\uDD66':'uopf','\\uD835\\uDD32':'ufr','\\uD835\\uDD4C':'Uopf','\\uD835\\uDD18':'Ufr','\\uD835\\uDCB0':'Uscr','\\xFA':'uacute','\\xDA':'Uacute','\\xF9':'ugrave','\\xD9':'Ugrave','\\u016D':'ubreve','\\u016C':'Ubreve','\\xFB':'ucirc','\\xDB':'Ucirc','\\u016F':'uring','\\u016E':'Uring','\\xFC':'uuml','\\xDC':'Uuml','\\u0171':'udblac','\\u0170':'Udblac','\\u0169':'utilde','\\u0168':'Utilde','\\u0173':'uogon','\\u0172':'Uogon','\\u016B':'umacr','\\u016A':'Umacr','\\uD835\\uDD33':'vfr','\\uD835\\uDD67':'vopf','\\uD835\\uDCCB':'vscr','\\uD835\\uDD19':'Vfr','\\uD835\\uDD4D':'Vopf','\\uD835\\uDCB1':'Vscr','\\uD835\\uDD68':'wopf','\\uD835\\uDCCC':'wscr','\\uD835\\uDD34':'wfr','\\uD835\\uDCB2':'Wscr','\\uD835\\uDD4E':'Wopf','\\uD835\\uDD1A':'Wfr','\\u0175':'wcirc','\\u0174':'Wcirc','\\uD835\\uDD35':'xfr','\\uD835\\uDCCD':'xscr','\\uD835\\uDD69':'xopf','\\uD835\\uDD4F':'Xopf','\\uD835\\uDD1B':'Xfr','\\uD835\\uDCB3':'Xscr','\\uD835\\uDD36':'yfr','\\uD835\\uDCCE':'yscr','\\uD835\\uDD6A':'yopf','\\uD835\\uDCB4':'Yscr','\\uD835\\uDD1C':'Yfr','\\uD835\\uDD50':'Yopf','\\xFD':'yacute','\\xDD':'Yacute','\\u0177':'ycirc','\\u0176':'Ycirc','\\xFF':'yuml','\\u0178':'Yuml','\\uD835\\uDCCF':'zscr','\\uD835\\uDD37':'zfr','\\uD835\\uDD6B':'zopf','\\u2128':'Zfr','\\u2124':'Zopf','\\uD835\\uDCB5':'Zscr','\\u017A':'zacute','\\u0179':'Zacute','\\u017E':'zcaron','\\u017D':'Zcaron','\\u017C':'zdot','\\u017B':'Zdot','\\u01B5':'imped','\\xFE':'thorn','\\xDE':'THORN','\\u0149':'napos','\\u03B1':'alpha','\\u0391':'Alpha','\\u03B2':'beta','\\u0392':'Beta','\\u03B3':'gamma','\\u0393':'Gamma','\\u03B4':'delta','\\u0394':'Delta','\\u03B5':'epsi','\\u03F5':'epsiv','\\u0395':'Epsilon','\\u03DD':'gammad','\\u03DC':'Gammad','\\u03B6':'zeta','\\u0396':'Zeta','\\u03B7':'eta','\\u0397':'Eta','\\u03B8':'theta','\\u03D1':'thetav','\\u0398':'Theta','\\u03B9':'iota','\\u0399':'Iota','\\u03BA':'kappa','\\u03F0':'kappav','\\u039A':'Kappa','\\u03BB':'lambda','\\u039B':'Lambda','\\u03BC':'mu','\\xB5':'micro','\\u039C':'Mu','\\u03BD':'nu','\\u039D':'Nu','\\u03BE':'xi','\\u039E':'Xi','\\u03BF':'omicron','\\u039F':'Omicron','\\u03C0':'pi','\\u03D6':'piv','\\u03A0':'Pi','\\u03C1':'rho','\\u03F1':'rhov','\\u03A1':'Rho','\\u03C3':'sigma','\\u03A3':'Sigma','\\u03C2':'sigmaf','\\u03C4':'tau','\\u03A4':'Tau','\\u03C5':'upsi','\\u03A5':'Upsilon','\\u03D2':'Upsi','\\u03C6':'phi','\\u03D5':'phiv','\\u03A6':'Phi','\\u03C7':'chi','\\u03A7':'Chi','\\u03C8':'psi','\\u03A8':'Psi','\\u03C9':'omega','\\u03A9':'ohm','\\u0430':'acy','\\u0410':'Acy','\\u0431':'bcy','\\u0411':'Bcy','\\u0432':'vcy','\\u0412':'Vcy','\\u0433':'gcy','\\u0413':'Gcy','\\u0453':'gjcy','\\u0403':'GJcy','\\u0434':'dcy','\\u0414':'Dcy','\\u0452':'djcy','\\u0402':'DJcy','\\u0435':'iecy','\\u0415':'IEcy','\\u0451':'iocy','\\u0401':'IOcy','\\u0454':'jukcy','\\u0404':'Jukcy','\\u0436':'zhcy','\\u0416':'ZHcy','\\u0437':'zcy','\\u0417':'Zcy','\\u0455':'dscy','\\u0405':'DScy','\\u0438':'icy','\\u0418':'Icy','\\u0456':'iukcy','\\u0406':'Iukcy','\\u0457':'yicy','\\u0407':'YIcy','\\u0439':'jcy','\\u0419':'Jcy','\\u0458':'jsercy','\\u0408':'Jsercy','\\u043A':'kcy','\\u041A':'Kcy','\\u045C':'kjcy','\\u040C':'KJcy','\\u043B':'lcy','\\u041B':'Lcy','\\u0459':'ljcy','\\u0409':'LJcy','\\u043C':'mcy','\\u041C':'Mcy','\\u043D':'ncy','\\u041D':'Ncy','\\u045A':'njcy','\\u040A':'NJcy','\\u043E':'ocy','\\u041E':'Ocy','\\u043F':'pcy','\\u041F':'Pcy','\\u0440':'rcy','\\u0420':'Rcy','\\u0441':'scy','\\u0421':'Scy','\\u0442':'tcy','\\u0422':'Tcy','\\u045B':'tshcy','\\u040B':'TSHcy','\\u0443':'ucy','\\u0423':'Ucy','\\u045E':'ubrcy','\\u040E':'Ubrcy','\\u0444':'fcy','\\u0424':'Fcy','\\u0445':'khcy','\\u0425':'KHcy','\\u0446':'tscy','\\u0426':'TScy','\\u0447':'chcy','\\u0427':'CHcy','\\u045F':'dzcy','\\u040F':'DZcy','\\u0448':'shcy','\\u0428':'SHcy','\\u0449':'shchcy','\\u0429':'SHCHcy','\\u044A':'hardcy','\\u042A':'HARDcy','\\u044B':'ycy','\\u042B':'Ycy','\\u044C':'softcy','\\u042C':'SOFTcy','\\u044D':'ecy','\\u042D':'Ecy','\\u044E':'yucy','\\u042E':'YUcy','\\u044F':'yacy','\\u042F':'YAcy','\\u2135':'aleph','\\u2136':'beth','\\u2137':'gimel','\\u2138':'daleth'};\n\n\tvar regexEscape = /[\"&'<>`]/g;\n\tvar escapeMap = {\n\t\t'\"': '&quot;',\n\t\t'&': '&amp;',\n\t\t'\\'': '&#x27;',\n\t\t'<': '&lt;',\n\t\t// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the\n\t\t// following is not strictly necessary unless it’s part of a tag or an\n\t\t// unquoted attribute value. We’re only escaping it to support those\n\t\t// situations, and for XML support.\n\t\t'>': '&gt;',\n\t\t// In Internet Explorer ≤ 8, the backtick character can be used\n\t\t// to break out of (un)quoted attribute values or HTML comments.\n\t\t// See http://html5sec.org/#102, http://html5sec.org/#108, and\n\t\t// http://html5sec.org/#133.\n\t\t'`': '&#x60;'\n\t};\n\n\tvar regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;\n\tvar regexInvalidRawCodePoint = /[\\0-\\x08\\x0B\\x0E-\\x1F\\x7F-\\x9F\\uFDD0-\\uFDEF\\uFFFE\\uFFFF]|[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\tvar regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;\n\tvar decodeMap = {'aacute':'\\xE1','Aacute':'\\xC1','abreve':'\\u0103','Abreve':'\\u0102','ac':'\\u223E','acd':'\\u223F','acE':'\\u223E\\u0333','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','acy':'\\u0430','Acy':'\\u0410','aelig':'\\xE6','AElig':'\\xC6','af':'\\u2061','afr':'\\uD835\\uDD1E','Afr':'\\uD835\\uDD04','agrave':'\\xE0','Agrave':'\\xC0','alefsym':'\\u2135','aleph':'\\u2135','alpha':'\\u03B1','Alpha':'\\u0391','amacr':'\\u0101','Amacr':'\\u0100','amalg':'\\u2A3F','amp':'&','AMP':'&','and':'\\u2227','And':'\\u2A53','andand':'\\u2A55','andd':'\\u2A5C','andslope':'\\u2A58','andv':'\\u2A5A','ang':'\\u2220','ange':'\\u29A4','angle':'\\u2220','angmsd':'\\u2221','angmsdaa':'\\u29A8','angmsdab':'\\u29A9','angmsdac':'\\u29AA','angmsdad':'\\u29AB','angmsdae':'\\u29AC','angmsdaf':'\\u29AD','angmsdag':'\\u29AE','angmsdah':'\\u29AF','angrt':'\\u221F','angrtvb':'\\u22BE','angrtvbd':'\\u299D','angsph':'\\u2222','angst':'\\xC5','angzarr':'\\u237C','aogon':'\\u0105','Aogon':'\\u0104','aopf':'\\uD835\\uDD52','Aopf':'\\uD835\\uDD38','ap':'\\u2248','apacir':'\\u2A6F','ape':'\\u224A','apE':'\\u2A70','apid':'\\u224B','apos':'\\'','ApplyFunction':'\\u2061','approx':'\\u2248','approxeq':'\\u224A','aring':'\\xE5','Aring':'\\xC5','ascr':'\\uD835\\uDCB6','Ascr':'\\uD835\\uDC9C','Assign':'\\u2254','ast':'*','asymp':'\\u2248','asympeq':'\\u224D','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','awconint':'\\u2233','awint':'\\u2A11','backcong':'\\u224C','backepsilon':'\\u03F6','backprime':'\\u2035','backsim':'\\u223D','backsimeq':'\\u22CD','Backslash':'\\u2216','Barv':'\\u2AE7','barvee':'\\u22BD','barwed':'\\u2305','Barwed':'\\u2306','barwedge':'\\u2305','bbrk':'\\u23B5','bbrktbrk':'\\u23B6','bcong':'\\u224C','bcy':'\\u0431','Bcy':'\\u0411','bdquo':'\\u201E','becaus':'\\u2235','because':'\\u2235','Because':'\\u2235','bemptyv':'\\u29B0','bepsi':'\\u03F6','bernou':'\\u212C','Bernoullis':'\\u212C','beta':'\\u03B2','Beta':'\\u0392','beth':'\\u2136','between':'\\u226C','bfr':'\\uD835\\uDD1F','Bfr':'\\uD835\\uDD05','bigcap':'\\u22C2','bigcirc':'\\u25EF','bigcup':'\\u22C3','bigodot':'\\u2A00','bigoplus':'\\u2A01','bigotimes':'\\u2A02','bigsqcup':'\\u2A06','bigstar':'\\u2605','bigtriangledown':'\\u25BD','bigtriangleup':'\\u25B3','biguplus':'\\u2A04','bigvee':'\\u22C1','bigwedge':'\\u22C0','bkarow':'\\u290D','blacklozenge':'\\u29EB','blacksquare':'\\u25AA','blacktriangle':'\\u25B4','blacktriangledown':'\\u25BE','blacktriangleleft':'\\u25C2','blacktriangleright':'\\u25B8','blank':'\\u2423','blk12':'\\u2592','blk14':'\\u2591','blk34':'\\u2593','block':'\\u2588','bne':'=\\u20E5','bnequiv':'\\u2261\\u20E5','bnot':'\\u2310','bNot':'\\u2AED','bopf':'\\uD835\\uDD53','Bopf':'\\uD835\\uDD39','bot':'\\u22A5','bottom':'\\u22A5','bowtie':'\\u22C8','boxbox':'\\u29C9','boxdl':'\\u2510','boxdL':'\\u2555','boxDl':'\\u2556','boxDL':'\\u2557','boxdr':'\\u250C','boxdR':'\\u2552','boxDr':'\\u2553','boxDR':'\\u2554','boxh':'\\u2500','boxH':'\\u2550','boxhd':'\\u252C','boxhD':'\\u2565','boxHd':'\\u2564','boxHD':'\\u2566','boxhu':'\\u2534','boxhU':'\\u2568','boxHu':'\\u2567','boxHU':'\\u2569','boxminus':'\\u229F','boxplus':'\\u229E','boxtimes':'\\u22A0','boxul':'\\u2518','boxuL':'\\u255B','boxUl':'\\u255C','boxUL':'\\u255D','boxur':'\\u2514','boxuR':'\\u2558','boxUr':'\\u2559','boxUR':'\\u255A','boxv':'\\u2502','boxV':'\\u2551','boxvh':'\\u253C','boxvH':'\\u256A','boxVh':'\\u256B','boxVH':'\\u256C','boxvl':'\\u2524','boxvL':'\\u2561','boxVl':'\\u2562','boxVL':'\\u2563','boxvr':'\\u251C','boxvR':'\\u255E','boxVr':'\\u255F','boxVR':'\\u2560','bprime':'\\u2035','breve':'\\u02D8','Breve':'\\u02D8','brvbar':'\\xA6','bscr':'\\uD835\\uDCB7','Bscr':'\\u212C','bsemi':'\\u204F','bsim':'\\u223D','bsime':'\\u22CD','bsol':'\\\\','bsolb':'\\u29C5','bsolhsub':'\\u27C8','bull':'\\u2022','bullet':'\\u2022','bump':'\\u224E','bumpe':'\\u224F','bumpE':'\\u2AAE','bumpeq':'\\u224F','Bumpeq':'\\u224E','cacute':'\\u0107','Cacute':'\\u0106','cap':'\\u2229','Cap':'\\u22D2','capand':'\\u2A44','capbrcup':'\\u2A49','capcap':'\\u2A4B','capcup':'\\u2A47','capdot':'\\u2A40','CapitalDifferentialD':'\\u2145','caps':'\\u2229\\uFE00','caret':'\\u2041','caron':'\\u02C7','Cayleys':'\\u212D','ccaps':'\\u2A4D','ccaron':'\\u010D','Ccaron':'\\u010C','ccedil':'\\xE7','Ccedil':'\\xC7','ccirc':'\\u0109','Ccirc':'\\u0108','Cconint':'\\u2230','ccups':'\\u2A4C','ccupssm':'\\u2A50','cdot':'\\u010B','Cdot':'\\u010A','cedil':'\\xB8','Cedilla':'\\xB8','cemptyv':'\\u29B2','cent':'\\xA2','centerdot':'\\xB7','CenterDot':'\\xB7','cfr':'\\uD835\\uDD20','Cfr':'\\u212D','chcy':'\\u0447','CHcy':'\\u0427','check':'\\u2713','checkmark':'\\u2713','chi':'\\u03C7','Chi':'\\u03A7','cir':'\\u25CB','circ':'\\u02C6','circeq':'\\u2257','circlearrowleft':'\\u21BA','circlearrowright':'\\u21BB','circledast':'\\u229B','circledcirc':'\\u229A','circleddash':'\\u229D','CircleDot':'\\u2299','circledR':'\\xAE','circledS':'\\u24C8','CircleMinus':'\\u2296','CirclePlus':'\\u2295','CircleTimes':'\\u2297','cire':'\\u2257','cirE':'\\u29C3','cirfnint':'\\u2A10','cirmid':'\\u2AEF','cirscir':'\\u29C2','ClockwiseContourIntegral':'\\u2232','CloseCurlyDoubleQuote':'\\u201D','CloseCurlyQuote':'\\u2019','clubs':'\\u2663','clubsuit':'\\u2663','colon':':','Colon':'\\u2237','colone':'\\u2254','Colone':'\\u2A74','coloneq':'\\u2254','comma':',','commat':'@','comp':'\\u2201','compfn':'\\u2218','complement':'\\u2201','complexes':'\\u2102','cong':'\\u2245','congdot':'\\u2A6D','Congruent':'\\u2261','conint':'\\u222E','Conint':'\\u222F','ContourIntegral':'\\u222E','copf':'\\uD835\\uDD54','Copf':'\\u2102','coprod':'\\u2210','Coproduct':'\\u2210','copy':'\\xA9','COPY':'\\xA9','copysr':'\\u2117','CounterClockwiseContourIntegral':'\\u2233','crarr':'\\u21B5','cross':'\\u2717','Cross':'\\u2A2F','cscr':'\\uD835\\uDCB8','Cscr':'\\uD835\\uDC9E','csub':'\\u2ACF','csube':'\\u2AD1','csup':'\\u2AD0','csupe':'\\u2AD2','ctdot':'\\u22EF','cudarrl':'\\u2938','cudarrr':'\\u2935','cuepr':'\\u22DE','cuesc':'\\u22DF','cularr':'\\u21B6','cularrp':'\\u293D','cup':'\\u222A','Cup':'\\u22D3','cupbrcap':'\\u2A48','cupcap':'\\u2A46','CupCap':'\\u224D','cupcup':'\\u2A4A','cupdot':'\\u228D','cupor':'\\u2A45','cups':'\\u222A\\uFE00','curarr':'\\u21B7','curarrm':'\\u293C','curlyeqprec':'\\u22DE','curlyeqsucc':'\\u22DF','curlyvee':'\\u22CE','curlywedge':'\\u22CF','curren':'\\xA4','curvearrowleft':'\\u21B6','curvearrowright':'\\u21B7','cuvee':'\\u22CE','cuwed':'\\u22CF','cwconint':'\\u2232','cwint':'\\u2231','cylcty':'\\u232D','dagger':'\\u2020','Dagger':'\\u2021','daleth':'\\u2138','darr':'\\u2193','dArr':'\\u21D3','Darr':'\\u21A1','dash':'\\u2010','dashv':'\\u22A3','Dashv':'\\u2AE4','dbkarow':'\\u290F','dblac':'\\u02DD','dcaron':'\\u010F','Dcaron':'\\u010E','dcy':'\\u0434','Dcy':'\\u0414','dd':'\\u2146','DD':'\\u2145','ddagger':'\\u2021','ddarr':'\\u21CA','DDotrahd':'\\u2911','ddotseq':'\\u2A77','deg':'\\xB0','Del':'\\u2207','delta':'\\u03B4','Delta':'\\u0394','demptyv':'\\u29B1','dfisht':'\\u297F','dfr':'\\uD835\\uDD21','Dfr':'\\uD835\\uDD07','dHar':'\\u2965','dharl':'\\u21C3','dharr':'\\u21C2','DiacriticalAcute':'\\xB4','DiacriticalDot':'\\u02D9','DiacriticalDoubleAcute':'\\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\\u02DC','diam':'\\u22C4','diamond':'\\u22C4','Diamond':'\\u22C4','diamondsuit':'\\u2666','diams':'\\u2666','die':'\\xA8','DifferentialD':'\\u2146','digamma':'\\u03DD','disin':'\\u22F2','div':'\\xF7','divide':'\\xF7','divideontimes':'\\u22C7','divonx':'\\u22C7','djcy':'\\u0452','DJcy':'\\u0402','dlcorn':'\\u231E','dlcrop':'\\u230D','dollar':'$','dopf':'\\uD835\\uDD55','Dopf':'\\uD835\\uDD3B','dot':'\\u02D9','Dot':'\\xA8','DotDot':'\\u20DC','doteq':'\\u2250','doteqdot':'\\u2251','DotEqual':'\\u2250','dotminus':'\\u2238','dotplus':'\\u2214','dotsquare':'\\u22A1','doublebarwedge':'\\u2306','DoubleContourIntegral':'\\u222F','DoubleDot':'\\xA8','DoubleDownArrow':'\\u21D3','DoubleLeftArrow':'\\u21D0','DoubleLeftRightArrow':'\\u21D4','DoubleLeftTee':'\\u2AE4','DoubleLongLeftArrow':'\\u27F8','DoubleLongLeftRightArrow':'\\u27FA','DoubleLongRightArrow':'\\u27F9','DoubleRightArrow':'\\u21D2','DoubleRightTee':'\\u22A8','DoubleUpArrow':'\\u21D1','DoubleUpDownArrow':'\\u21D5','DoubleVerticalBar':'\\u2225','downarrow':'\\u2193','Downarrow':'\\u21D3','DownArrow':'\\u2193','DownArrowBar':'\\u2913','DownArrowUpArrow':'\\u21F5','DownBreve':'\\u0311','downdownarrows':'\\u21CA','downharpoonleft':'\\u21C3','downharpoonright':'\\u21C2','DownLeftRightVector':'\\u2950','DownLeftTeeVector':'\\u295E','DownLeftVector':'\\u21BD','DownLeftVectorBar':'\\u2956','DownRightTeeVector':'\\u295F','DownRightVector':'\\u21C1','DownRightVectorBar':'\\u2957','DownTee':'\\u22A4','DownTeeArrow':'\\u21A7','drbkarow':'\\u2910','drcorn':'\\u231F','drcrop':'\\u230C','dscr':'\\uD835\\uDCB9','Dscr':'\\uD835\\uDC9F','dscy':'\\u0455','DScy':'\\u0405','dsol':'\\u29F6','dstrok':'\\u0111','Dstrok':'\\u0110','dtdot':'\\u22F1','dtri':'\\u25BF','dtrif':'\\u25BE','duarr':'\\u21F5','duhar':'\\u296F','dwangle':'\\u29A6','dzcy':'\\u045F','DZcy':'\\u040F','dzigrarr':'\\u27FF','eacute':'\\xE9','Eacute':'\\xC9','easter':'\\u2A6E','ecaron':'\\u011B','Ecaron':'\\u011A','ecir':'\\u2256','ecirc':'\\xEA','Ecirc':'\\xCA','ecolon':'\\u2255','ecy':'\\u044D','Ecy':'\\u042D','eDDot':'\\u2A77','edot':'\\u0117','eDot':'\\u2251','Edot':'\\u0116','ee':'\\u2147','efDot':'\\u2252','efr':'\\uD835\\uDD22','Efr':'\\uD835\\uDD08','eg':'\\u2A9A','egrave':'\\xE8','Egrave':'\\xC8','egs':'\\u2A96','egsdot':'\\u2A98','el':'\\u2A99','Element':'\\u2208','elinters':'\\u23E7','ell':'\\u2113','els':'\\u2A95','elsdot':'\\u2A97','emacr':'\\u0113','Emacr':'\\u0112','empty':'\\u2205','emptyset':'\\u2205','EmptySmallSquare':'\\u25FB','emptyv':'\\u2205','EmptyVerySmallSquare':'\\u25AB','emsp':'\\u2003','emsp13':'\\u2004','emsp14':'\\u2005','eng':'\\u014B','ENG':'\\u014A','ensp':'\\u2002','eogon':'\\u0119','Eogon':'\\u0118','eopf':'\\uD835\\uDD56','Eopf':'\\uD835\\uDD3C','epar':'\\u22D5','eparsl':'\\u29E3','eplus':'\\u2A71','epsi':'\\u03B5','epsilon':'\\u03B5','Epsilon':'\\u0395','epsiv':'\\u03F5','eqcirc':'\\u2256','eqcolon':'\\u2255','eqsim':'\\u2242','eqslantgtr':'\\u2A96','eqslantless':'\\u2A95','Equal':'\\u2A75','equals':'=','EqualTilde':'\\u2242','equest':'\\u225F','Equilibrium':'\\u21CC','equiv':'\\u2261','equivDD':'\\u2A78','eqvparsl':'\\u29E5','erarr':'\\u2971','erDot':'\\u2253','escr':'\\u212F','Escr':'\\u2130','esdot':'\\u2250','esim':'\\u2242','Esim':'\\u2A73','eta':'\\u03B7','Eta':'\\u0397','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','euro':'\\u20AC','excl':'!','exist':'\\u2203','Exists':'\\u2203','expectation':'\\u2130','exponentiale':'\\u2147','ExponentialE':'\\u2147','fallingdotseq':'\\u2252','fcy':'\\u0444','Fcy':'\\u0424','female':'\\u2640','ffilig':'\\uFB03','fflig':'\\uFB00','ffllig':'\\uFB04','ffr':'\\uD835\\uDD23','Ffr':'\\uD835\\uDD09','filig':'\\uFB01','FilledSmallSquare':'\\u25FC','FilledVerySmallSquare':'\\u25AA','fjlig':'fj','flat':'\\u266D','fllig':'\\uFB02','fltns':'\\u25B1','fnof':'\\u0192','fopf':'\\uD835\\uDD57','Fopf':'\\uD835\\uDD3D','forall':'\\u2200','ForAll':'\\u2200','fork':'\\u22D4','forkv':'\\u2AD9','Fouriertrf':'\\u2131','fpartint':'\\u2A0D','frac12':'\\xBD','frac13':'\\u2153','frac14':'\\xBC','frac15':'\\u2155','frac16':'\\u2159','frac18':'\\u215B','frac23':'\\u2154','frac25':'\\u2156','frac34':'\\xBE','frac35':'\\u2157','frac38':'\\u215C','frac45':'\\u2158','frac56':'\\u215A','frac58':'\\u215D','frac78':'\\u215E','frasl':'\\u2044','frown':'\\u2322','fscr':'\\uD835\\uDCBB','Fscr':'\\u2131','gacute':'\\u01F5','gamma':'\\u03B3','Gamma':'\\u0393','gammad':'\\u03DD','Gammad':'\\u03DC','gap':'\\u2A86','gbreve':'\\u011F','Gbreve':'\\u011E','Gcedil':'\\u0122','gcirc':'\\u011D','Gcirc':'\\u011C','gcy':'\\u0433','Gcy':'\\u0413','gdot':'\\u0121','Gdot':'\\u0120','ge':'\\u2265','gE':'\\u2267','gel':'\\u22DB','gEl':'\\u2A8C','geq':'\\u2265','geqq':'\\u2267','geqslant':'\\u2A7E','ges':'\\u2A7E','gescc':'\\u2AA9','gesdot':'\\u2A80','gesdoto':'\\u2A82','gesdotol':'\\u2A84','gesl':'\\u22DB\\uFE00','gesles':'\\u2A94','gfr':'\\uD835\\uDD24','Gfr':'\\uD835\\uDD0A','gg':'\\u226B','Gg':'\\u22D9','ggg':'\\u22D9','gimel':'\\u2137','gjcy':'\\u0453','GJcy':'\\u0403','gl':'\\u2277','gla':'\\u2AA5','glE':'\\u2A92','glj':'\\u2AA4','gnap':'\\u2A8A','gnapprox':'\\u2A8A','gne':'\\u2A88','gnE':'\\u2269','gneq':'\\u2A88','gneqq':'\\u2269','gnsim':'\\u22E7','gopf':'\\uD835\\uDD58','Gopf':'\\uD835\\uDD3E','grave':'`','GreaterEqual':'\\u2265','GreaterEqualLess':'\\u22DB','GreaterFullEqual':'\\u2267','GreaterGreater':'\\u2AA2','GreaterLess':'\\u2277','GreaterSlantEqual':'\\u2A7E','GreaterTilde':'\\u2273','gscr':'\\u210A','Gscr':'\\uD835\\uDCA2','gsim':'\\u2273','gsime':'\\u2A8E','gsiml':'\\u2A90','gt':'>','Gt':'\\u226B','GT':'>','gtcc':'\\u2AA7','gtcir':'\\u2A7A','gtdot':'\\u22D7','gtlPar':'\\u2995','gtquest':'\\u2A7C','gtrapprox':'\\u2A86','gtrarr':'\\u2978','gtrdot':'\\u22D7','gtreqless':'\\u22DB','gtreqqless':'\\u2A8C','gtrless':'\\u2277','gtrsim':'\\u2273','gvertneqq':'\\u2269\\uFE00','gvnE':'\\u2269\\uFE00','Hacek':'\\u02C7','hairsp':'\\u200A','half':'\\xBD','hamilt':'\\u210B','hardcy':'\\u044A','HARDcy':'\\u042A','harr':'\\u2194','hArr':'\\u21D4','harrcir':'\\u2948','harrw':'\\u21AD','Hat':'^','hbar':'\\u210F','hcirc':'\\u0125','Hcirc':'\\u0124','hearts':'\\u2665','heartsuit':'\\u2665','hellip':'\\u2026','hercon':'\\u22B9','hfr':'\\uD835\\uDD25','Hfr':'\\u210C','HilbertSpace':'\\u210B','hksearow':'\\u2925','hkswarow':'\\u2926','hoarr':'\\u21FF','homtht':'\\u223B','hookleftarrow':'\\u21A9','hookrightarrow':'\\u21AA','hopf':'\\uD835\\uDD59','Hopf':'\\u210D','horbar':'\\u2015','HorizontalLine':'\\u2500','hscr':'\\uD835\\uDCBD','Hscr':'\\u210B','hslash':'\\u210F','hstrok':'\\u0127','Hstrok':'\\u0126','HumpDownHump':'\\u224E','HumpEqual':'\\u224F','hybull':'\\u2043','hyphen':'\\u2010','iacute':'\\xED','Iacute':'\\xCD','ic':'\\u2063','icirc':'\\xEE','Icirc':'\\xCE','icy':'\\u0438','Icy':'\\u0418','Idot':'\\u0130','iecy':'\\u0435','IEcy':'\\u0415','iexcl':'\\xA1','iff':'\\u21D4','ifr':'\\uD835\\uDD26','Ifr':'\\u2111','igrave':'\\xEC','Igrave':'\\xCC','ii':'\\u2148','iiiint':'\\u2A0C','iiint':'\\u222D','iinfin':'\\u29DC','iiota':'\\u2129','ijlig':'\\u0133','IJlig':'\\u0132','Im':'\\u2111','imacr':'\\u012B','Imacr':'\\u012A','image':'\\u2111','ImaginaryI':'\\u2148','imagline':'\\u2110','imagpart':'\\u2111','imath':'\\u0131','imof':'\\u22B7','imped':'\\u01B5','Implies':'\\u21D2','in':'\\u2208','incare':'\\u2105','infin':'\\u221E','infintie':'\\u29DD','inodot':'\\u0131','int':'\\u222B','Int':'\\u222C','intcal':'\\u22BA','integers':'\\u2124','Integral':'\\u222B','intercal':'\\u22BA','Intersection':'\\u22C2','intlarhk':'\\u2A17','intprod':'\\u2A3C','InvisibleComma':'\\u2063','InvisibleTimes':'\\u2062','iocy':'\\u0451','IOcy':'\\u0401','iogon':'\\u012F','Iogon':'\\u012E','iopf':'\\uD835\\uDD5A','Iopf':'\\uD835\\uDD40','iota':'\\u03B9','Iota':'\\u0399','iprod':'\\u2A3C','iquest':'\\xBF','iscr':'\\uD835\\uDCBE','Iscr':'\\u2110','isin':'\\u2208','isindot':'\\u22F5','isinE':'\\u22F9','isins':'\\u22F4','isinsv':'\\u22F3','isinv':'\\u2208','it':'\\u2062','itilde':'\\u0129','Itilde':'\\u0128','iukcy':'\\u0456','Iukcy':'\\u0406','iuml':'\\xEF','Iuml':'\\xCF','jcirc':'\\u0135','Jcirc':'\\u0134','jcy':'\\u0439','Jcy':'\\u0419','jfr':'\\uD835\\uDD27','Jfr':'\\uD835\\uDD0D','jmath':'\\u0237','jopf':'\\uD835\\uDD5B','Jopf':'\\uD835\\uDD41','jscr':'\\uD835\\uDCBF','Jscr':'\\uD835\\uDCA5','jsercy':'\\u0458','Jsercy':'\\u0408','jukcy':'\\u0454','Jukcy':'\\u0404','kappa':'\\u03BA','Kappa':'\\u039A','kappav':'\\u03F0','kcedil':'\\u0137','Kcedil':'\\u0136','kcy':'\\u043A','Kcy':'\\u041A','kfr':'\\uD835\\uDD28','Kfr':'\\uD835\\uDD0E','kgreen':'\\u0138','khcy':'\\u0445','KHcy':'\\u0425','kjcy':'\\u045C','KJcy':'\\u040C','kopf':'\\uD835\\uDD5C','Kopf':'\\uD835\\uDD42','kscr':'\\uD835\\uDCC0','Kscr':'\\uD835\\uDCA6','lAarr':'\\u21DA','lacute':'\\u013A','Lacute':'\\u0139','laemptyv':'\\u29B4','lagran':'\\u2112','lambda':'\\u03BB','Lambda':'\\u039B','lang':'\\u27E8','Lang':'\\u27EA','langd':'\\u2991','langle':'\\u27E8','lap':'\\u2A85','Laplacetrf':'\\u2112','laquo':'\\xAB','larr':'\\u2190','lArr':'\\u21D0','Larr':'\\u219E','larrb':'\\u21E4','larrbfs':'\\u291F','larrfs':'\\u291D','larrhk':'\\u21A9','larrlp':'\\u21AB','larrpl':'\\u2939','larrsim':'\\u2973','larrtl':'\\u21A2','lat':'\\u2AAB','latail':'\\u2919','lAtail':'\\u291B','late':'\\u2AAD','lates':'\\u2AAD\\uFE00','lbarr':'\\u290C','lBarr':'\\u290E','lbbrk':'\\u2772','lbrace':'{','lbrack':'[','lbrke':'\\u298B','lbrksld':'\\u298F','lbrkslu':'\\u298D','lcaron':'\\u013E','Lcaron':'\\u013D','lcedil':'\\u013C','Lcedil':'\\u013B','lceil':'\\u2308','lcub':'{','lcy':'\\u043B','Lcy':'\\u041B','ldca':'\\u2936','ldquo':'\\u201C','ldquor':'\\u201E','ldrdhar':'\\u2967','ldrushar':'\\u294B','ldsh':'\\u21B2','le':'\\u2264','lE':'\\u2266','LeftAngleBracket':'\\u27E8','leftarrow':'\\u2190','Leftarrow':'\\u21D0','LeftArrow':'\\u2190','LeftArrowBar':'\\u21E4','LeftArrowRightArrow':'\\u21C6','leftarrowtail':'\\u21A2','LeftCeiling':'\\u2308','LeftDoubleBracket':'\\u27E6','LeftDownTeeVector':'\\u2961','LeftDownVector':'\\u21C3','LeftDownVectorBar':'\\u2959','LeftFloor':'\\u230A','leftharpoondown':'\\u21BD','leftharpoonup':'\\u21BC','leftleftarrows':'\\u21C7','leftrightarrow':'\\u2194','Leftrightarrow':'\\u21D4','LeftRightArrow':'\\u2194','leftrightarrows':'\\u21C6','leftrightharpoons':'\\u21CB','leftrightsquigarrow':'\\u21AD','LeftRightVector':'\\u294E','LeftTee':'\\u22A3','LeftTeeArrow':'\\u21A4','LeftTeeVector':'\\u295A','leftthreetimes':'\\u22CB','LeftTriangle':'\\u22B2','LeftTriangleBar':'\\u29CF','LeftTriangleEqual':'\\u22B4','LeftUpDownVector':'\\u2951','LeftUpTeeVector':'\\u2960','LeftUpVector':'\\u21BF','LeftUpVectorBar':'\\u2958','LeftVector':'\\u21BC','LeftVectorBar':'\\u2952','leg':'\\u22DA','lEg':'\\u2A8B','leq':'\\u2264','leqq':'\\u2266','leqslant':'\\u2A7D','les':'\\u2A7D','lescc':'\\u2AA8','lesdot':'\\u2A7F','lesdoto':'\\u2A81','lesdotor':'\\u2A83','lesg':'\\u22DA\\uFE00','lesges':'\\u2A93','lessapprox':'\\u2A85','lessdot':'\\u22D6','lesseqgtr':'\\u22DA','lesseqqgtr':'\\u2A8B','LessEqualGreater':'\\u22DA','LessFullEqual':'\\u2266','LessGreater':'\\u2276','lessgtr':'\\u2276','LessLess':'\\u2AA1','lesssim':'\\u2272','LessSlantEqual':'\\u2A7D','LessTilde':'\\u2272','lfisht':'\\u297C','lfloor':'\\u230A','lfr':'\\uD835\\uDD29','Lfr':'\\uD835\\uDD0F','lg':'\\u2276','lgE':'\\u2A91','lHar':'\\u2962','lhard':'\\u21BD','lharu':'\\u21BC','lharul':'\\u296A','lhblk':'\\u2584','ljcy':'\\u0459','LJcy':'\\u0409','ll':'\\u226A','Ll':'\\u22D8','llarr':'\\u21C7','llcorner':'\\u231E','Lleftarrow':'\\u21DA','llhard':'\\u296B','lltri':'\\u25FA','lmidot':'\\u0140','Lmidot':'\\u013F','lmoust':'\\u23B0','lmoustache':'\\u23B0','lnap':'\\u2A89','lnapprox':'\\u2A89','lne':'\\u2A87','lnE':'\\u2268','lneq':'\\u2A87','lneqq':'\\u2268','lnsim':'\\u22E6','loang':'\\u27EC','loarr':'\\u21FD','lobrk':'\\u27E6','longleftarrow':'\\u27F5','Longleftarrow':'\\u27F8','LongLeftArrow':'\\u27F5','longleftrightarrow':'\\u27F7','Longleftrightarrow':'\\u27FA','LongLeftRightArrow':'\\u27F7','longmapsto':'\\u27FC','longrightarrow':'\\u27F6','Longrightarrow':'\\u27F9','LongRightArrow':'\\u27F6','looparrowleft':'\\u21AB','looparrowright':'\\u21AC','lopar':'\\u2985','lopf':'\\uD835\\uDD5D','Lopf':'\\uD835\\uDD43','loplus':'\\u2A2D','lotimes':'\\u2A34','lowast':'\\u2217','lowbar':'_','LowerLeftArrow':'\\u2199','LowerRightArrow':'\\u2198','loz':'\\u25CA','lozenge':'\\u25CA','lozf':'\\u29EB','lpar':'(','lparlt':'\\u2993','lrarr':'\\u21C6','lrcorner':'\\u231F','lrhar':'\\u21CB','lrhard':'\\u296D','lrm':'\\u200E','lrtri':'\\u22BF','lsaquo':'\\u2039','lscr':'\\uD835\\uDCC1','Lscr':'\\u2112','lsh':'\\u21B0','Lsh':'\\u21B0','lsim':'\\u2272','lsime':'\\u2A8D','lsimg':'\\u2A8F','lsqb':'[','lsquo':'\\u2018','lsquor':'\\u201A','lstrok':'\\u0142','Lstrok':'\\u0141','lt':'<','Lt':'\\u226A','LT':'<','ltcc':'\\u2AA6','ltcir':'\\u2A79','ltdot':'\\u22D6','lthree':'\\u22CB','ltimes':'\\u22C9','ltlarr':'\\u2976','ltquest':'\\u2A7B','ltri':'\\u25C3','ltrie':'\\u22B4','ltrif':'\\u25C2','ltrPar':'\\u2996','lurdshar':'\\u294A','luruhar':'\\u2966','lvertneqq':'\\u2268\\uFE00','lvnE':'\\u2268\\uFE00','macr':'\\xAF','male':'\\u2642','malt':'\\u2720','maltese':'\\u2720','map':'\\u21A6','Map':'\\u2905','mapsto':'\\u21A6','mapstodown':'\\u21A7','mapstoleft':'\\u21A4','mapstoup':'\\u21A5','marker':'\\u25AE','mcomma':'\\u2A29','mcy':'\\u043C','Mcy':'\\u041C','mdash':'\\u2014','mDDot':'\\u223A','measuredangle':'\\u2221','MediumSpace':'\\u205F','Mellintrf':'\\u2133','mfr':'\\uD835\\uDD2A','Mfr':'\\uD835\\uDD10','mho':'\\u2127','micro':'\\xB5','mid':'\\u2223','midast':'*','midcir':'\\u2AF0','middot':'\\xB7','minus':'\\u2212','minusb':'\\u229F','minusd':'\\u2238','minusdu':'\\u2A2A','MinusPlus':'\\u2213','mlcp':'\\u2ADB','mldr':'\\u2026','mnplus':'\\u2213','models':'\\u22A7','mopf':'\\uD835\\uDD5E','Mopf':'\\uD835\\uDD44','mp':'\\u2213','mscr':'\\uD835\\uDCC2','Mscr':'\\u2133','mstpos':'\\u223E','mu':'\\u03BC','Mu':'\\u039C','multimap':'\\u22B8','mumap':'\\u22B8','nabla':'\\u2207','nacute':'\\u0144','Nacute':'\\u0143','nang':'\\u2220\\u20D2','nap':'\\u2249','napE':'\\u2A70\\u0338','napid':'\\u224B\\u0338','napos':'\\u0149','napprox':'\\u2249','natur':'\\u266E','natural':'\\u266E','naturals':'\\u2115','nbsp':'\\xA0','nbump':'\\u224E\\u0338','nbumpe':'\\u224F\\u0338','ncap':'\\u2A43','ncaron':'\\u0148','Ncaron':'\\u0147','ncedil':'\\u0146','Ncedil':'\\u0145','ncong':'\\u2247','ncongdot':'\\u2A6D\\u0338','ncup':'\\u2A42','ncy':'\\u043D','Ncy':'\\u041D','ndash':'\\u2013','ne':'\\u2260','nearhk':'\\u2924','nearr':'\\u2197','neArr':'\\u21D7','nearrow':'\\u2197','nedot':'\\u2250\\u0338','NegativeMediumSpace':'\\u200B','NegativeThickSpace':'\\u200B','NegativeThinSpace':'\\u200B','NegativeVeryThinSpace':'\\u200B','nequiv':'\\u2262','nesear':'\\u2928','nesim':'\\u2242\\u0338','NestedGreaterGreater':'\\u226B','NestedLessLess':'\\u226A','NewLine':'\\n','nexist':'\\u2204','nexists':'\\u2204','nfr':'\\uD835\\uDD2B','Nfr':'\\uD835\\uDD11','nge':'\\u2271','ngE':'\\u2267\\u0338','ngeq':'\\u2271','ngeqq':'\\u2267\\u0338','ngeqslant':'\\u2A7E\\u0338','nges':'\\u2A7E\\u0338','nGg':'\\u22D9\\u0338','ngsim':'\\u2275','ngt':'\\u226F','nGt':'\\u226B\\u20D2','ngtr':'\\u226F','nGtv':'\\u226B\\u0338','nharr':'\\u21AE','nhArr':'\\u21CE','nhpar':'\\u2AF2','ni':'\\u220B','nis':'\\u22FC','nisd':'\\u22FA','niv':'\\u220B','njcy':'\\u045A','NJcy':'\\u040A','nlarr':'\\u219A','nlArr':'\\u21CD','nldr':'\\u2025','nle':'\\u2270','nlE':'\\u2266\\u0338','nleftarrow':'\\u219A','nLeftarrow':'\\u21CD','nleftrightarrow':'\\u21AE','nLeftrightarrow':'\\u21CE','nleq':'\\u2270','nleqq':'\\u2266\\u0338','nleqslant':'\\u2A7D\\u0338','nles':'\\u2A7D\\u0338','nless':'\\u226E','nLl':'\\u22D8\\u0338','nlsim':'\\u2274','nlt':'\\u226E','nLt':'\\u226A\\u20D2','nltri':'\\u22EA','nltrie':'\\u22EC','nLtv':'\\u226A\\u0338','nmid':'\\u2224','NoBreak':'\\u2060','NonBreakingSpace':'\\xA0','nopf':'\\uD835\\uDD5F','Nopf':'\\u2115','not':'\\xAC','Not':'\\u2AEC','NotCongruent':'\\u2262','NotCupCap':'\\u226D','NotDoubleVerticalBar':'\\u2226','NotElement':'\\u2209','NotEqual':'\\u2260','NotEqualTilde':'\\u2242\\u0338','NotExists':'\\u2204','NotGreater':'\\u226F','NotGreaterEqual':'\\u2271','NotGreaterFullEqual':'\\u2267\\u0338','NotGreaterGreater':'\\u226B\\u0338','NotGreaterLess':'\\u2279','NotGreaterSlantEqual':'\\u2A7E\\u0338','NotGreaterTilde':'\\u2275','NotHumpDownHump':'\\u224E\\u0338','NotHumpEqual':'\\u224F\\u0338','notin':'\\u2209','notindot':'\\u22F5\\u0338','notinE':'\\u22F9\\u0338','notinva':'\\u2209','notinvb':'\\u22F7','notinvc':'\\u22F6','NotLeftTriangle':'\\u22EA','NotLeftTriangleBar':'\\u29CF\\u0338','NotLeftTriangleEqual':'\\u22EC','NotLess':'\\u226E','NotLessEqual':'\\u2270','NotLessGreater':'\\u2278','NotLessLess':'\\u226A\\u0338','NotLessSlantEqual':'\\u2A7D\\u0338','NotLessTilde':'\\u2274','NotNestedGreaterGreater':'\\u2AA2\\u0338','NotNestedLessLess':'\\u2AA1\\u0338','notni':'\\u220C','notniva':'\\u220C','notnivb':'\\u22FE','notnivc':'\\u22FD','NotPrecedes':'\\u2280','NotPrecedesEqual':'\\u2AAF\\u0338','NotPrecedesSlantEqual':'\\u22E0','NotReverseElement':'\\u220C','NotRightTriangle':'\\u22EB','NotRightTriangleBar':'\\u29D0\\u0338','NotRightTriangleEqual':'\\u22ED','NotSquareSubset':'\\u228F\\u0338','NotSquareSubsetEqual':'\\u22E2','NotSquareSuperset':'\\u2290\\u0338','NotSquareSupersetEqual':'\\u22E3','NotSubset':'\\u2282\\u20D2','NotSubsetEqual':'\\u2288','NotSucceeds':'\\u2281','NotSucceedsEqual':'\\u2AB0\\u0338','NotSucceedsSlantEqual':'\\u22E1','NotSucceedsTilde':'\\u227F\\u0338','NotSuperset':'\\u2283\\u20D2','NotSupersetEqual':'\\u2289','NotTilde':'\\u2241','NotTildeEqual':'\\u2244','NotTildeFullEqual':'\\u2247','NotTildeTilde':'\\u2249','NotVerticalBar':'\\u2224','npar':'\\u2226','nparallel':'\\u2226','nparsl':'\\u2AFD\\u20E5','npart':'\\u2202\\u0338','npolint':'\\u2A14','npr':'\\u2280','nprcue':'\\u22E0','npre':'\\u2AAF\\u0338','nprec':'\\u2280','npreceq':'\\u2AAF\\u0338','nrarr':'\\u219B','nrArr':'\\u21CF','nrarrc':'\\u2933\\u0338','nrarrw':'\\u219D\\u0338','nrightarrow':'\\u219B','nRightarrow':'\\u21CF','nrtri':'\\u22EB','nrtrie':'\\u22ED','nsc':'\\u2281','nsccue':'\\u22E1','nsce':'\\u2AB0\\u0338','nscr':'\\uD835\\uDCC3','Nscr':'\\uD835\\uDCA9','nshortmid':'\\u2224','nshortparallel':'\\u2226','nsim':'\\u2241','nsime':'\\u2244','nsimeq':'\\u2244','nsmid':'\\u2224','nspar':'\\u2226','nsqsube':'\\u22E2','nsqsupe':'\\u22E3','nsub':'\\u2284','nsube':'\\u2288','nsubE':'\\u2AC5\\u0338','nsubset':'\\u2282\\u20D2','nsubseteq':'\\u2288','nsubseteqq':'\\u2AC5\\u0338','nsucc':'\\u2281','nsucceq':'\\u2AB0\\u0338','nsup':'\\u2285','nsupe':'\\u2289','nsupE':'\\u2AC6\\u0338','nsupset':'\\u2283\\u20D2','nsupseteq':'\\u2289','nsupseteqq':'\\u2AC6\\u0338','ntgl':'\\u2279','ntilde':'\\xF1','Ntilde':'\\xD1','ntlg':'\\u2278','ntriangleleft':'\\u22EA','ntrianglelefteq':'\\u22EC','ntriangleright':'\\u22EB','ntrianglerighteq':'\\u22ED','nu':'\\u03BD','Nu':'\\u039D','num':'#','numero':'\\u2116','numsp':'\\u2007','nvap':'\\u224D\\u20D2','nvdash':'\\u22AC','nvDash':'\\u22AD','nVdash':'\\u22AE','nVDash':'\\u22AF','nvge':'\\u2265\\u20D2','nvgt':'>\\u20D2','nvHarr':'\\u2904','nvinfin':'\\u29DE','nvlArr':'\\u2902','nvle':'\\u2264\\u20D2','nvlt':'<\\u20D2','nvltrie':'\\u22B4\\u20D2','nvrArr':'\\u2903','nvrtrie':'\\u22B5\\u20D2','nvsim':'\\u223C\\u20D2','nwarhk':'\\u2923','nwarr':'\\u2196','nwArr':'\\u21D6','nwarrow':'\\u2196','nwnear':'\\u2927','oacute':'\\xF3','Oacute':'\\xD3','oast':'\\u229B','ocir':'\\u229A','ocirc':'\\xF4','Ocirc':'\\xD4','ocy':'\\u043E','Ocy':'\\u041E','odash':'\\u229D','odblac':'\\u0151','Odblac':'\\u0150','odiv':'\\u2A38','odot':'\\u2299','odsold':'\\u29BC','oelig':'\\u0153','OElig':'\\u0152','ofcir':'\\u29BF','ofr':'\\uD835\\uDD2C','Ofr':'\\uD835\\uDD12','ogon':'\\u02DB','ograve':'\\xF2','Ograve':'\\xD2','ogt':'\\u29C1','ohbar':'\\u29B5','ohm':'\\u03A9','oint':'\\u222E','olarr':'\\u21BA','olcir':'\\u29BE','olcross':'\\u29BB','oline':'\\u203E','olt':'\\u29C0','omacr':'\\u014D','Omacr':'\\u014C','omega':'\\u03C9','Omega':'\\u03A9','omicron':'\\u03BF','Omicron':'\\u039F','omid':'\\u29B6','ominus':'\\u2296','oopf':'\\uD835\\uDD60','Oopf':'\\uD835\\uDD46','opar':'\\u29B7','OpenCurlyDoubleQuote':'\\u201C','OpenCurlyQuote':'\\u2018','operp':'\\u29B9','oplus':'\\u2295','or':'\\u2228','Or':'\\u2A54','orarr':'\\u21BB','ord':'\\u2A5D','order':'\\u2134','orderof':'\\u2134','ordf':'\\xAA','ordm':'\\xBA','origof':'\\u22B6','oror':'\\u2A56','orslope':'\\u2A57','orv':'\\u2A5B','oS':'\\u24C8','oscr':'\\u2134','Oscr':'\\uD835\\uDCAA','oslash':'\\xF8','Oslash':'\\xD8','osol':'\\u2298','otilde':'\\xF5','Otilde':'\\xD5','otimes':'\\u2297','Otimes':'\\u2A37','otimesas':'\\u2A36','ouml':'\\xF6','Ouml':'\\xD6','ovbar':'\\u233D','OverBar':'\\u203E','OverBrace':'\\u23DE','OverBracket':'\\u23B4','OverParenthesis':'\\u23DC','par':'\\u2225','para':'\\xB6','parallel':'\\u2225','parsim':'\\u2AF3','parsl':'\\u2AFD','part':'\\u2202','PartialD':'\\u2202','pcy':'\\u043F','Pcy':'\\u041F','percnt':'%','period':'.','permil':'\\u2030','perp':'\\u22A5','pertenk':'\\u2031','pfr':'\\uD835\\uDD2D','Pfr':'\\uD835\\uDD13','phi':'\\u03C6','Phi':'\\u03A6','phiv':'\\u03D5','phmmat':'\\u2133','phone':'\\u260E','pi':'\\u03C0','Pi':'\\u03A0','pitchfork':'\\u22D4','piv':'\\u03D6','planck':'\\u210F','planckh':'\\u210E','plankv':'\\u210F','plus':'+','plusacir':'\\u2A23','plusb':'\\u229E','pluscir':'\\u2A22','plusdo':'\\u2214','plusdu':'\\u2A25','pluse':'\\u2A72','PlusMinus':'\\xB1','plusmn':'\\xB1','plussim':'\\u2A26','plustwo':'\\u2A27','pm':'\\xB1','Poincareplane':'\\u210C','pointint':'\\u2A15','popf':'\\uD835\\uDD61','Popf':'\\u2119','pound':'\\xA3','pr':'\\u227A','Pr':'\\u2ABB','prap':'\\u2AB7','prcue':'\\u227C','pre':'\\u2AAF','prE':'\\u2AB3','prec':'\\u227A','precapprox':'\\u2AB7','preccurlyeq':'\\u227C','Precedes':'\\u227A','PrecedesEqual':'\\u2AAF','PrecedesSlantEqual':'\\u227C','PrecedesTilde':'\\u227E','preceq':'\\u2AAF','precnapprox':'\\u2AB9','precneqq':'\\u2AB5','precnsim':'\\u22E8','precsim':'\\u227E','prime':'\\u2032','Prime':'\\u2033','primes':'\\u2119','prnap':'\\u2AB9','prnE':'\\u2AB5','prnsim':'\\u22E8','prod':'\\u220F','Product':'\\u220F','profalar':'\\u232E','profline':'\\u2312','profsurf':'\\u2313','prop':'\\u221D','Proportion':'\\u2237','Proportional':'\\u221D','propto':'\\u221D','prsim':'\\u227E','prurel':'\\u22B0','pscr':'\\uD835\\uDCC5','Pscr':'\\uD835\\uDCAB','psi':'\\u03C8','Psi':'\\u03A8','puncsp':'\\u2008','qfr':'\\uD835\\uDD2E','Qfr':'\\uD835\\uDD14','qint':'\\u2A0C','qopf':'\\uD835\\uDD62','Qopf':'\\u211A','qprime':'\\u2057','qscr':'\\uD835\\uDCC6','Qscr':'\\uD835\\uDCAC','quaternions':'\\u210D','quatint':'\\u2A16','quest':'?','questeq':'\\u225F','quot':'\"','QUOT':'\"','rAarr':'\\u21DB','race':'\\u223D\\u0331','racute':'\\u0155','Racute':'\\u0154','radic':'\\u221A','raemptyv':'\\u29B3','rang':'\\u27E9','Rang':'\\u27EB','rangd':'\\u2992','range':'\\u29A5','rangle':'\\u27E9','raquo':'\\xBB','rarr':'\\u2192','rArr':'\\u21D2','Rarr':'\\u21A0','rarrap':'\\u2975','rarrb':'\\u21E5','rarrbfs':'\\u2920','rarrc':'\\u2933','rarrfs':'\\u291E','rarrhk':'\\u21AA','rarrlp':'\\u21AC','rarrpl':'\\u2945','rarrsim':'\\u2974','rarrtl':'\\u21A3','Rarrtl':'\\u2916','rarrw':'\\u219D','ratail':'\\u291A','rAtail':'\\u291C','ratio':'\\u2236','rationals':'\\u211A','rbarr':'\\u290D','rBarr':'\\u290F','RBarr':'\\u2910','rbbrk':'\\u2773','rbrace':'}','rbrack':']','rbrke':'\\u298C','rbrksld':'\\u298E','rbrkslu':'\\u2990','rcaron':'\\u0159','Rcaron':'\\u0158','rcedil':'\\u0157','Rcedil':'\\u0156','rceil':'\\u2309','rcub':'}','rcy':'\\u0440','Rcy':'\\u0420','rdca':'\\u2937','rdldhar':'\\u2969','rdquo':'\\u201D','rdquor':'\\u201D','rdsh':'\\u21B3','Re':'\\u211C','real':'\\u211C','realine':'\\u211B','realpart':'\\u211C','reals':'\\u211D','rect':'\\u25AD','reg':'\\xAE','REG':'\\xAE','ReverseElement':'\\u220B','ReverseEquilibrium':'\\u21CB','ReverseUpEquilibrium':'\\u296F','rfisht':'\\u297D','rfloor':'\\u230B','rfr':'\\uD835\\uDD2F','Rfr':'\\u211C','rHar':'\\u2964','rhard':'\\u21C1','rharu':'\\u21C0','rharul':'\\u296C','rho':'\\u03C1','Rho':'\\u03A1','rhov':'\\u03F1','RightAngleBracket':'\\u27E9','rightarrow':'\\u2192','Rightarrow':'\\u21D2','RightArrow':'\\u2192','RightArrowBar':'\\u21E5','RightArrowLeftArrow':'\\u21C4','rightarrowtail':'\\u21A3','RightCeiling':'\\u2309','RightDoubleBracket':'\\u27E7','RightDownTeeVector':'\\u295D','RightDownVector':'\\u21C2','RightDownVectorBar':'\\u2955','RightFloor':'\\u230B','rightharpoondown':'\\u21C1','rightharpoonup':'\\u21C0','rightleftarrows':'\\u21C4','rightleftharpoons':'\\u21CC','rightrightarrows':'\\u21C9','rightsquigarrow':'\\u219D','RightTee':'\\u22A2','RightTeeArrow':'\\u21A6','RightTeeVector':'\\u295B','rightthreetimes':'\\u22CC','RightTriangle':'\\u22B3','RightTriangleBar':'\\u29D0','RightTriangleEqual':'\\u22B5','RightUpDownVector':'\\u294F','RightUpTeeVector':'\\u295C','RightUpVector':'\\u21BE','RightUpVectorBar':'\\u2954','RightVector':'\\u21C0','RightVectorBar':'\\u2953','ring':'\\u02DA','risingdotseq':'\\u2253','rlarr':'\\u21C4','rlhar':'\\u21CC','rlm':'\\u200F','rmoust':'\\u23B1','rmoustache':'\\u23B1','rnmid':'\\u2AEE','roang':'\\u27ED','roarr':'\\u21FE','robrk':'\\u27E7','ropar':'\\u2986','ropf':'\\uD835\\uDD63','Ropf':'\\u211D','roplus':'\\u2A2E','rotimes':'\\u2A35','RoundImplies':'\\u2970','rpar':')','rpargt':'\\u2994','rppolint':'\\u2A12','rrarr':'\\u21C9','Rrightarrow':'\\u21DB','rsaquo':'\\u203A','rscr':'\\uD835\\uDCC7','Rscr':'\\u211B','rsh':'\\u21B1','Rsh':'\\u21B1','rsqb':']','rsquo':'\\u2019','rsquor':'\\u2019','rthree':'\\u22CC','rtimes':'\\u22CA','rtri':'\\u25B9','rtrie':'\\u22B5','rtrif':'\\u25B8','rtriltri':'\\u29CE','RuleDelayed':'\\u29F4','ruluhar':'\\u2968','rx':'\\u211E','sacute':'\\u015B','Sacute':'\\u015A','sbquo':'\\u201A','sc':'\\u227B','Sc':'\\u2ABC','scap':'\\u2AB8','scaron':'\\u0161','Scaron':'\\u0160','sccue':'\\u227D','sce':'\\u2AB0','scE':'\\u2AB4','scedil':'\\u015F','Scedil':'\\u015E','scirc':'\\u015D','Scirc':'\\u015C','scnap':'\\u2ABA','scnE':'\\u2AB6','scnsim':'\\u22E9','scpolint':'\\u2A13','scsim':'\\u227F','scy':'\\u0441','Scy':'\\u0421','sdot':'\\u22C5','sdotb':'\\u22A1','sdote':'\\u2A66','searhk':'\\u2925','searr':'\\u2198','seArr':'\\u21D8','searrow':'\\u2198','sect':'\\xA7','semi':';','seswar':'\\u2929','setminus':'\\u2216','setmn':'\\u2216','sext':'\\u2736','sfr':'\\uD835\\uDD30','Sfr':'\\uD835\\uDD16','sfrown':'\\u2322','sharp':'\\u266F','shchcy':'\\u0449','SHCHcy':'\\u0429','shcy':'\\u0448','SHcy':'\\u0428','ShortDownArrow':'\\u2193','ShortLeftArrow':'\\u2190','shortmid':'\\u2223','shortparallel':'\\u2225','ShortRightArrow':'\\u2192','ShortUpArrow':'\\u2191','shy':'\\xAD','sigma':'\\u03C3','Sigma':'\\u03A3','sigmaf':'\\u03C2','sigmav':'\\u03C2','sim':'\\u223C','simdot':'\\u2A6A','sime':'\\u2243','simeq':'\\u2243','simg':'\\u2A9E','simgE':'\\u2AA0','siml':'\\u2A9D','simlE':'\\u2A9F','simne':'\\u2246','simplus':'\\u2A24','simrarr':'\\u2972','slarr':'\\u2190','SmallCircle':'\\u2218','smallsetminus':'\\u2216','smashp':'\\u2A33','smeparsl':'\\u29E4','smid':'\\u2223','smile':'\\u2323','smt':'\\u2AAA','smte':'\\u2AAC','smtes':'\\u2AAC\\uFE00','softcy':'\\u044C','SOFTcy':'\\u042C','sol':'/','solb':'\\u29C4','solbar':'\\u233F','sopf':'\\uD835\\uDD64','Sopf':'\\uD835\\uDD4A','spades':'\\u2660','spadesuit':'\\u2660','spar':'\\u2225','sqcap':'\\u2293','sqcaps':'\\u2293\\uFE00','sqcup':'\\u2294','sqcups':'\\u2294\\uFE00','Sqrt':'\\u221A','sqsub':'\\u228F','sqsube':'\\u2291','sqsubset':'\\u228F','sqsubseteq':'\\u2291','sqsup':'\\u2290','sqsupe':'\\u2292','sqsupset':'\\u2290','sqsupseteq':'\\u2292','squ':'\\u25A1','square':'\\u25A1','Square':'\\u25A1','SquareIntersection':'\\u2293','SquareSubset':'\\u228F','SquareSubsetEqual':'\\u2291','SquareSuperset':'\\u2290','SquareSupersetEqual':'\\u2292','SquareUnion':'\\u2294','squarf':'\\u25AA','squf':'\\u25AA','srarr':'\\u2192','sscr':'\\uD835\\uDCC8','Sscr':'\\uD835\\uDCAE','ssetmn':'\\u2216','ssmile':'\\u2323','sstarf':'\\u22C6','star':'\\u2606','Star':'\\u22C6','starf':'\\u2605','straightepsilon':'\\u03F5','straightphi':'\\u03D5','strns':'\\xAF','sub':'\\u2282','Sub':'\\u22D0','subdot':'\\u2ABD','sube':'\\u2286','subE':'\\u2AC5','subedot':'\\u2AC3','submult':'\\u2AC1','subne':'\\u228A','subnE':'\\u2ACB','subplus':'\\u2ABF','subrarr':'\\u2979','subset':'\\u2282','Subset':'\\u22D0','subseteq':'\\u2286','subseteqq':'\\u2AC5','SubsetEqual':'\\u2286','subsetneq':'\\u228A','subsetneqq':'\\u2ACB','subsim':'\\u2AC7','subsub':'\\u2AD5','subsup':'\\u2AD3','succ':'\\u227B','succapprox':'\\u2AB8','succcurlyeq':'\\u227D','Succeeds':'\\u227B','SucceedsEqual':'\\u2AB0','SucceedsSlantEqual':'\\u227D','SucceedsTilde':'\\u227F','succeq':'\\u2AB0','succnapprox':'\\u2ABA','succneqq':'\\u2AB6','succnsim':'\\u22E9','succsim':'\\u227F','SuchThat':'\\u220B','sum':'\\u2211','Sum':'\\u2211','sung':'\\u266A','sup':'\\u2283','Sup':'\\u22D1','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','supdot':'\\u2ABE','supdsub':'\\u2AD8','supe':'\\u2287','supE':'\\u2AC6','supedot':'\\u2AC4','Superset':'\\u2283','SupersetEqual':'\\u2287','suphsol':'\\u27C9','suphsub':'\\u2AD7','suplarr':'\\u297B','supmult':'\\u2AC2','supne':'\\u228B','supnE':'\\u2ACC','supplus':'\\u2AC0','supset':'\\u2283','Supset':'\\u22D1','supseteq':'\\u2287','supseteqq':'\\u2AC6','supsetneq':'\\u228B','supsetneqq':'\\u2ACC','supsim':'\\u2AC8','supsub':'\\u2AD4','supsup':'\\u2AD6','swarhk':'\\u2926','swarr':'\\u2199','swArr':'\\u21D9','swarrow':'\\u2199','swnwar':'\\u292A','szlig':'\\xDF','Tab':'\\t','target':'\\u2316','tau':'\\u03C4','Tau':'\\u03A4','tbrk':'\\u23B4','tcaron':'\\u0165','Tcaron':'\\u0164','tcedil':'\\u0163','Tcedil':'\\u0162','tcy':'\\u0442','Tcy':'\\u0422','tdot':'\\u20DB','telrec':'\\u2315','tfr':'\\uD835\\uDD31','Tfr':'\\uD835\\uDD17','there4':'\\u2234','therefore':'\\u2234','Therefore':'\\u2234','theta':'\\u03B8','Theta':'\\u0398','thetasym':'\\u03D1','thetav':'\\u03D1','thickapprox':'\\u2248','thicksim':'\\u223C','ThickSpace':'\\u205F\\u200A','thinsp':'\\u2009','ThinSpace':'\\u2009','thkap':'\\u2248','thksim':'\\u223C','thorn':'\\xFE','THORN':'\\xDE','tilde':'\\u02DC','Tilde':'\\u223C','TildeEqual':'\\u2243','TildeFullEqual':'\\u2245','TildeTilde':'\\u2248','times':'\\xD7','timesb':'\\u22A0','timesbar':'\\u2A31','timesd':'\\u2A30','tint':'\\u222D','toea':'\\u2928','top':'\\u22A4','topbot':'\\u2336','topcir':'\\u2AF1','topf':'\\uD835\\uDD65','Topf':'\\uD835\\uDD4B','topfork':'\\u2ADA','tosa':'\\u2929','tprime':'\\u2034','trade':'\\u2122','TRADE':'\\u2122','triangle':'\\u25B5','triangledown':'\\u25BF','triangleleft':'\\u25C3','trianglelefteq':'\\u22B4','triangleq':'\\u225C','triangleright':'\\u25B9','trianglerighteq':'\\u22B5','tridot':'\\u25EC','trie':'\\u225C','triminus':'\\u2A3A','TripleDot':'\\u20DB','triplus':'\\u2A39','trisb':'\\u29CD','tritime':'\\u2A3B','trpezium':'\\u23E2','tscr':'\\uD835\\uDCC9','Tscr':'\\uD835\\uDCAF','tscy':'\\u0446','TScy':'\\u0426','tshcy':'\\u045B','TSHcy':'\\u040B','tstrok':'\\u0167','Tstrok':'\\u0166','twixt':'\\u226C','twoheadleftarrow':'\\u219E','twoheadrightarrow':'\\u21A0','uacute':'\\xFA','Uacute':'\\xDA','uarr':'\\u2191','uArr':'\\u21D1','Uarr':'\\u219F','Uarrocir':'\\u2949','ubrcy':'\\u045E','Ubrcy':'\\u040E','ubreve':'\\u016D','Ubreve':'\\u016C','ucirc':'\\xFB','Ucirc':'\\xDB','ucy':'\\u0443','Ucy':'\\u0423','udarr':'\\u21C5','udblac':'\\u0171','Udblac':'\\u0170','udhar':'\\u296E','ufisht':'\\u297E','ufr':'\\uD835\\uDD32','Ufr':'\\uD835\\uDD18','ugrave':'\\xF9','Ugrave':'\\xD9','uHar':'\\u2963','uharl':'\\u21BF','uharr':'\\u21BE','uhblk':'\\u2580','ulcorn':'\\u231C','ulcorner':'\\u231C','ulcrop':'\\u230F','ultri':'\\u25F8','umacr':'\\u016B','Umacr':'\\u016A','uml':'\\xA8','UnderBar':'_','UnderBrace':'\\u23DF','UnderBracket':'\\u23B5','UnderParenthesis':'\\u23DD','Union':'\\u22C3','UnionPlus':'\\u228E','uogon':'\\u0173','Uogon':'\\u0172','uopf':'\\uD835\\uDD66','Uopf':'\\uD835\\uDD4C','uparrow':'\\u2191','Uparrow':'\\u21D1','UpArrow':'\\u2191','UpArrowBar':'\\u2912','UpArrowDownArrow':'\\u21C5','updownarrow':'\\u2195','Updownarrow':'\\u21D5','UpDownArrow':'\\u2195','UpEquilibrium':'\\u296E','upharpoonleft':'\\u21BF','upharpoonright':'\\u21BE','uplus':'\\u228E','UpperLeftArrow':'\\u2196','UpperRightArrow':'\\u2197','upsi':'\\u03C5','Upsi':'\\u03D2','upsih':'\\u03D2','upsilon':'\\u03C5','Upsilon':'\\u03A5','UpTee':'\\u22A5','UpTeeArrow':'\\u21A5','upuparrows':'\\u21C8','urcorn':'\\u231D','urcorner':'\\u231D','urcrop':'\\u230E','uring':'\\u016F','Uring':'\\u016E','urtri':'\\u25F9','uscr':'\\uD835\\uDCCA','Uscr':'\\uD835\\uDCB0','utdot':'\\u22F0','utilde':'\\u0169','Utilde':'\\u0168','utri':'\\u25B5','utrif':'\\u25B4','uuarr':'\\u21C8','uuml':'\\xFC','Uuml':'\\xDC','uwangle':'\\u29A7','vangrt':'\\u299C','varepsilon':'\\u03F5','varkappa':'\\u03F0','varnothing':'\\u2205','varphi':'\\u03D5','varpi':'\\u03D6','varpropto':'\\u221D','varr':'\\u2195','vArr':'\\u21D5','varrho':'\\u03F1','varsigma':'\\u03C2','varsubsetneq':'\\u228A\\uFE00','varsubsetneqq':'\\u2ACB\\uFE00','varsupsetneq':'\\u228B\\uFE00','varsupsetneqq':'\\u2ACC\\uFE00','vartheta':'\\u03D1','vartriangleleft':'\\u22B2','vartriangleright':'\\u22B3','vBar':'\\u2AE8','Vbar':'\\u2AEB','vBarv':'\\u2AE9','vcy':'\\u0432','Vcy':'\\u0412','vdash':'\\u22A2','vDash':'\\u22A8','Vdash':'\\u22A9','VDash':'\\u22AB','Vdashl':'\\u2AE6','vee':'\\u2228','Vee':'\\u22C1','veebar':'\\u22BB','veeeq':'\\u225A','vellip':'\\u22EE','verbar':'|','Verbar':'\\u2016','vert':'|','Vert':'\\u2016','VerticalBar':'\\u2223','VerticalLine':'|','VerticalSeparator':'\\u2758','VerticalTilde':'\\u2240','VeryThinSpace':'\\u200A','vfr':'\\uD835\\uDD33','Vfr':'\\uD835\\uDD19','vltri':'\\u22B2','vnsub':'\\u2282\\u20D2','vnsup':'\\u2283\\u20D2','vopf':'\\uD835\\uDD67','Vopf':'\\uD835\\uDD4D','vprop':'\\u221D','vrtri':'\\u22B3','vscr':'\\uD835\\uDCCB','Vscr':'\\uD835\\uDCB1','vsubne':'\\u228A\\uFE00','vsubnE':'\\u2ACB\\uFE00','vsupne':'\\u228B\\uFE00','vsupnE':'\\u2ACC\\uFE00','Vvdash':'\\u22AA','vzigzag':'\\u299A','wcirc':'\\u0175','Wcirc':'\\u0174','wedbar':'\\u2A5F','wedge':'\\u2227','Wedge':'\\u22C0','wedgeq':'\\u2259','weierp':'\\u2118','wfr':'\\uD835\\uDD34','Wfr':'\\uD835\\uDD1A','wopf':'\\uD835\\uDD68','Wopf':'\\uD835\\uDD4E','wp':'\\u2118','wr':'\\u2240','wreath':'\\u2240','wscr':'\\uD835\\uDCCC','Wscr':'\\uD835\\uDCB2','xcap':'\\u22C2','xcirc':'\\u25EF','xcup':'\\u22C3','xdtri':'\\u25BD','xfr':'\\uD835\\uDD35','Xfr':'\\uD835\\uDD1B','xharr':'\\u27F7','xhArr':'\\u27FA','xi':'\\u03BE','Xi':'\\u039E','xlarr':'\\u27F5','xlArr':'\\u27F8','xmap':'\\u27FC','xnis':'\\u22FB','xodot':'\\u2A00','xopf':'\\uD835\\uDD69','Xopf':'\\uD835\\uDD4F','xoplus':'\\u2A01','xotime':'\\u2A02','xrarr':'\\u27F6','xrArr':'\\u27F9','xscr':'\\uD835\\uDCCD','Xscr':'\\uD835\\uDCB3','xsqcup':'\\u2A06','xuplus':'\\u2A04','xutri':'\\u25B3','xvee':'\\u22C1','xwedge':'\\u22C0','yacute':'\\xFD','Yacute':'\\xDD','yacy':'\\u044F','YAcy':'\\u042F','ycirc':'\\u0177','Ycirc':'\\u0176','ycy':'\\u044B','Ycy':'\\u042B','yen':'\\xA5','yfr':'\\uD835\\uDD36','Yfr':'\\uD835\\uDD1C','yicy':'\\u0457','YIcy':'\\u0407','yopf':'\\uD835\\uDD6A','Yopf':'\\uD835\\uDD50','yscr':'\\uD835\\uDCCE','Yscr':'\\uD835\\uDCB4','yucy':'\\u044E','YUcy':'\\u042E','yuml':'\\xFF','Yuml':'\\u0178','zacute':'\\u017A','Zacute':'\\u0179','zcaron':'\\u017E','Zcaron':'\\u017D','zcy':'\\u0437','Zcy':'\\u0417','zdot':'\\u017C','Zdot':'\\u017B','zeetrf':'\\u2128','ZeroWidthSpace':'\\u200B','zeta':'\\u03B6','Zeta':'\\u0396','zfr':'\\uD835\\uDD37','Zfr':'\\u2128','zhcy':'\\u0436','ZHcy':'\\u0416','zigrarr':'\\u21DD','zopf':'\\uD835\\uDD6B','Zopf':'\\u2124','zscr':'\\uD835\\uDCCF','Zscr':'\\uD835\\uDCB5','zwj':'\\u200D','zwnj':'\\u200C'};\n\tvar decodeMapLegacy = {'aacute':'\\xE1','Aacute':'\\xC1','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','aelig':'\\xE6','AElig':'\\xC6','agrave':'\\xE0','Agrave':'\\xC0','amp':'&','AMP':'&','aring':'\\xE5','Aring':'\\xC5','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','brvbar':'\\xA6','ccedil':'\\xE7','Ccedil':'\\xC7','cedil':'\\xB8','cent':'\\xA2','copy':'\\xA9','COPY':'\\xA9','curren':'\\xA4','deg':'\\xB0','divide':'\\xF7','eacute':'\\xE9','Eacute':'\\xC9','ecirc':'\\xEA','Ecirc':'\\xCA','egrave':'\\xE8','Egrave':'\\xC8','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','frac12':'\\xBD','frac14':'\\xBC','frac34':'\\xBE','gt':'>','GT':'>','iacute':'\\xED','Iacute':'\\xCD','icirc':'\\xEE','Icirc':'\\xCE','iexcl':'\\xA1','igrave':'\\xEC','Igrave':'\\xCC','iquest':'\\xBF','iuml':'\\xEF','Iuml':'\\xCF','laquo':'\\xAB','lt':'<','LT':'<','macr':'\\xAF','micro':'\\xB5','middot':'\\xB7','nbsp':'\\xA0','not':'\\xAC','ntilde':'\\xF1','Ntilde':'\\xD1','oacute':'\\xF3','Oacute':'\\xD3','ocirc':'\\xF4','Ocirc':'\\xD4','ograve':'\\xF2','Ograve':'\\xD2','ordf':'\\xAA','ordm':'\\xBA','oslash':'\\xF8','Oslash':'\\xD8','otilde':'\\xF5','Otilde':'\\xD5','ouml':'\\xF6','Ouml':'\\xD6','para':'\\xB6','plusmn':'\\xB1','pound':'\\xA3','quot':'\"','QUOT':'\"','raquo':'\\xBB','reg':'\\xAE','REG':'\\xAE','sect':'\\xA7','shy':'\\xAD','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','szlig':'\\xDF','thorn':'\\xFE','THORN':'\\xDE','times':'\\xD7','uacute':'\\xFA','Uacute':'\\xDA','ucirc':'\\xFB','Ucirc':'\\xDB','ugrave':'\\xF9','Ugrave':'\\xD9','uml':'\\xA8','uuml':'\\xFC','Uuml':'\\xDC','yacute':'\\xFD','Yacute':'\\xDD','yen':'\\xA5','yuml':'\\xFF'};\n\tvar decodeMapNumeric = {'0':'\\uFFFD','128':'\\u20AC','130':'\\u201A','131':'\\u0192','132':'\\u201E','133':'\\u2026','134':'\\u2020','135':'\\u2021','136':'\\u02C6','137':'\\u2030','138':'\\u0160','139':'\\u2039','140':'\\u0152','142':'\\u017D','145':'\\u2018','146':'\\u2019','147':'\\u201C','148':'\\u201D','149':'\\u2022','150':'\\u2013','151':'\\u2014','152':'\\u02DC','153':'\\u2122','154':'\\u0161','155':'\\u203A','156':'\\u0153','158':'\\u017E','159':'\\u0178'};\n\tvar invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\tvar object = {};\n\tvar hasOwnProperty = object.hasOwnProperty;\n\tvar has = function(object, propertyName) {\n\t\treturn hasOwnProperty.call(object, propertyName);\n\t};\n\n\tvar contains = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar merge = function(options, defaults) {\n\t\tif (!options) {\n\t\t\treturn defaults;\n\t\t}\n\t\tvar result = {};\n\t\tvar key;\n\t\tfor (key in defaults) {\n\t\t\t// A `hasOwnProperty` check is not needed here, since only recognized\n\t\t\t// option names are used anyway. Any others are ignored.\n\t\t\tresult[key] = has(options, key) ? options[key] : defaults[key];\n\t\t}\n\t\treturn result;\n\t};\n\n\t// Modified version of `ucs2encode`; see https://mths.be/punycode.\n\tvar codePointToSymbol = function(codePoint, strict) {\n\t\tvar output = '';\n\t\tif ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {\n\t\t\t// See issue #4:\n\t\t\t// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is\n\t\t\t// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD\n\t\t\t// REPLACEMENT CHARACTER.”\n\t\t\tif (strict) {\n\t\t\t\tparseError('character reference outside the permissible Unicode range');\n\t\t\t}\n\t\t\treturn '\\uFFFD';\n\t\t}\n\t\tif (has(decodeMapNumeric, codePoint)) {\n\t\t\tif (strict) {\n\t\t\t\tparseError('disallowed character reference');\n\t\t\t}\n\t\t\treturn decodeMapNumeric[codePoint];\n\t\t}\n\t\tif (strict && contains(invalidReferenceCodePoints, codePoint)) {\n\t\t\tparseError('disallowed character reference');\n\t\t}\n\t\tif (codePoint > 0xFFFF) {\n\t\t\tcodePoint -= 0x10000;\n\t\t\toutput += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(codePoint);\n\t\treturn output;\n\t};\n\n\tvar hexEscape = function(codePoint) {\n\t\treturn '&#x' + codePoint.toString(16).toUpperCase() + ';';\n\t};\n\n\tvar decEscape = function(codePoint) {\n\t\treturn '&#' + codePoint + ';';\n\t};\n\n\tvar parseError = function(message) {\n\t\tthrow Error('Parse error: ' + message);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar encode = function(string, options) {\n\t\toptions = merge(options, encode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidRawCodePoint.test(string)) {\n\t\t\tparseError('forbidden code point');\n\t\t}\n\t\tvar encodeEverything = options.encodeEverything;\n\t\tvar useNamedReferences = options.useNamedReferences;\n\t\tvar allowUnsafeSymbols = options.allowUnsafeSymbols;\n\t\tvar escapeCodePoint = options.decimal ? decEscape : hexEscape;\n\n\t\tvar escapeBmpSymbol = function(symbol) {\n\t\t\treturn escapeCodePoint(symbol.charCodeAt(0));\n\t\t};\n\n\t\tif (encodeEverything) {\n\t\t\t// Encode ASCII symbols.\n\t\t\tstring = string.replace(regexAsciiWhitelist, function(symbol) {\n\t\t\t\t// Use named references if requested & possible.\n\t\t\t\tif (useNamedReferences && has(encodeMap, symbol)) {\n\t\t\t\t\treturn '&' + encodeMap[symbol] + ';';\n\t\t\t\t}\n\t\t\t\treturn escapeBmpSymbol(symbol);\n\t\t\t});\n\t\t\t// Shorten a few escapes that represent two symbols, of which at least one\n\t\t\t// is within the ASCII range.\n\t\t\tif (useNamedReferences) {\n\t\t\t\tstring = string\n\t\t\t\t\t.replace(/&gt;\\u20D2/g, '&nvgt;')\n\t\t\t\t\t.replace(/&lt;\\u20D2/g, '&nvlt;')\n\t\t\t\t\t.replace(/&#x66;&#x6A;/g, '&fjlig;');\n\t\t\t}\n\t\t\t// Encode non-ASCII symbols.\n\t\t\tif (useNamedReferences) {\n\t\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Note: any remaining non-ASCII symbols are handled outside of the `if`.\n\t\t} else if (useNamedReferences) {\n\t\t\t// Apply named character references.\n\t\t\t// Encode `<>\"'&` using named character references.\n\t\t\tif (!allowUnsafeSymbols) {\n\t\t\t\tstring = string.replace(regexEscape, function(string) {\n\t\t\t\t\treturn '&' + encodeMap[string] + ';'; // no need to check `has()` here\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Shorten escapes that represent two symbols, of which at least one is\n\t\t\t// `<>\"'&`.\n\t\t\tstring = string\n\t\t\t\t.replace(/&gt;\\u20D2/g, '&nvgt;')\n\t\t\t\t.replace(/&lt;\\u20D2/g, '&nvlt;');\n\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t});\n\t\t} else if (!allowUnsafeSymbols) {\n\t\t\t// Encode `<>\"'&` using hexadecimal escapes, now that they’re not handled\n\t\t\t// using named character references.\n\t\t\tstring = string.replace(regexEscape, escapeBmpSymbol);\n\t\t}\n\t\treturn string\n\t\t\t// Encode astral symbols.\n\t\t\t.replace(regexAstralSymbols, function($0) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tvar high = $0.charCodeAt(0);\n\t\t\t\tvar low = $0.charCodeAt(1);\n\t\t\t\tvar codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;\n\t\t\t\treturn escapeCodePoint(codePoint);\n\t\t\t})\n\t\t\t// Encode any remaining BMP symbols that are not printable ASCII symbols\n\t\t\t// using a hexadecimal escape.\n\t\t\t.replace(regexBmpWhitelist, escapeBmpSymbol);\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tencode.options = {\n\t\t'allowUnsafeSymbols': false,\n\t\t'encodeEverything': false,\n\t\t'strict': false,\n\t\t'useNamedReferences': false,\n\t\t'decimal' : false\n\t};\n\n\tvar decode = function(html, options) {\n\t\toptions = merge(options, decode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidEntity.test(html)) {\n\t\t\tparseError('malformed character reference');\n\t\t}\n\t\treturn html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {\n\t\t\tvar codePoint;\n\t\t\tvar semicolon;\n\t\t\tvar decDigits;\n\t\t\tvar hexDigits;\n\t\t\tvar reference;\n\t\t\tvar next;\n\n\t\t\tif ($1) {\n\t\t\t\treference = $1;\n\t\t\t\t// Note: there is no need to check `has(decodeMap, reference)`.\n\t\t\t\treturn decodeMap[reference];\n\t\t\t}\n\n\t\t\tif ($2) {\n\t\t\t\t// Decode named character references without trailing `;`, e.g. `&amp`.\n\t\t\t\t// This is only a parse error if it gets converted to `&`, or if it is\n\t\t\t\t// followed by `=` in an attribute context.\n\t\t\t\treference = $2;\n\t\t\t\tnext = $3;\n\t\t\t\tif (next && options.isAttributeValue) {\n\t\t\t\t\tif (strict && next == '=') {\n\t\t\t\t\t\tparseError('`&` did not start a character reference');\n\t\t\t\t\t}\n\t\t\t\t\treturn $0;\n\t\t\t\t} else {\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\tparseError(\n\t\t\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Note: there is no need to check `has(decodeMapLegacy, reference)`.\n\t\t\t\t\treturn decodeMapLegacy[reference] + (next || '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($4) {\n\t\t\t\t// Decode decimal escapes, e.g. `&#119558;`.\n\t\t\t\tdecDigits = $4;\n\t\t\t\tsemicolon = $5;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(decDigits, 10);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\tif ($6) {\n\t\t\t\t// Decode hexadecimal escapes, e.g. `&#x1D306;`.\n\t\t\t\thexDigits = $6;\n\t\t\t\tsemicolon = $7;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(hexDigits, 16);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\t// If we’re still here, `if ($7)` is implied; it’s an ambiguous\n\t\t\t// ampersand for sure. https://mths.be/notes/ambiguous-ampersands\n\t\t\tif (strict) {\n\t\t\t\tparseError(\n\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $0;\n\t\t});\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tdecode.options = {\n\t\t'isAttributeValue': false,\n\t\t'strict': false\n\t};\n\n\tvar escape = function(string) {\n\t\treturn string.replace(regexEscape, function($0) {\n\t\t\t// Note: there is no need to check `has(escapeMap, $0)` here.\n\t\t\treturn escapeMap[$0];\n\t\t});\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar he = {\n\t\t'version': '1.2.0',\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'escape': escape,\n\t\t'unescape': decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn he;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = he;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in he) {\n\t\t\t\thas(he, key) && (freeExports[key] = he[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.he = he;\n\t}\n\n}(this));\n","\"use strict\";\n\nconst {\n createHash\n} = require(\"crypto\");\n\nfunction md5(data) {\n return createHash(\"md5\").update(data).digest(\"hex\");\n}\n\nfunction ha1Compute(algorithm, user, realm, pass, nonce, cnonce) {\n const ha1 = md5(`${user}:${realm}:${pass}`);\n\n if (algorithm && algorithm.toLowerCase() === \"md5-sess\") {\n return md5(`${ha1}:${nonce}:${cnonce}`);\n } else {\n return ha1;\n }\n}\n\nmodule.exports = {\n md5,\n ha1Compute\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.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","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","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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\nSafeBuffer.prototype = Object.create(Buffer.prototype)\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","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');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: 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 key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\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\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\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\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\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}","// 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/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\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};","module.exports = require('./lib/_stream_writable.js');\n","module.exports = require('./lib/_stream_duplex.js');\n","module.exports = require('./readable').Transform\n","module.exports = require('./readable').PassThrough\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","module.exports = require('./browser/algorithms.json')\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-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(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\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 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","'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');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./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","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","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 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 = 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 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 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 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","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","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 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","(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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 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 Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-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 = Buffer.from(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 = Buffer.from(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 = Buffer.from(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 = Buffer.from(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","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');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: 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 key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\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\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\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\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\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 Buffer.from(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 Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = Buffer.from(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length)\n x = Buffer.concat([zeros, x])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = Buffer.alloc(hlen)\n v.fill(1)\n var k = Buffer.alloc(hlen)\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(Buffer.from([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 = Buffer.from(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length)\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 = Buffer.alloc(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(Buffer.from([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","(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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","'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 '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\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 '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\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 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 '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\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 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 '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\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\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');\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');\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\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","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 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 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","'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 '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\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\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\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 === false) {\n return false;\n }\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 if (rlen === false) {\n return false;\n }\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 (slen === false) {\n return false;\n }\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) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\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<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [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<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [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","// 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","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst 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 const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(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(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(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","'use strict';\n\nconst inherits = require('inherits');\n\nconst 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 const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let 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\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst 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 const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const 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 const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const 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 const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\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 = Buffer.from(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","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\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 = Buffer.from(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 = Buffer.from(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","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","(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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","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 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 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","'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","\"use strict\";\n\nconst authTools = require(\"./auth.js\");\n\nconst urlTools = require(\"./url.js\");\n\nconst {\n merge\n} = require(\"./merge.js\");\n\nconst directoryContents = require(\"./interface/directoryContents.js\");\n\nconst createDir = require(\"./interface/createDirectory.js\");\n\nconst custom = require(\"./interface/custom.js\");\n\nconst deletion = require(\"./interface/delete.js\");\n\nconst pathsExist = require(\"./interface/exists.js\");\n\nconst getFile = require(\"./interface/getFile.js\");\n\nconst quota = require(\"./interface/quota.js\");\n\nconst move = require(\"./interface/moveFile.js\");\n\nconst copy = require(\"./interface/copyFile.js\");\n\nconst putFile = require(\"./interface/putFile.js\");\n\nconst stats = require(\"./interface/stat.js\");\n\nconst NOOP = () => {};\n/**\n * Client adapter\n * @typedef {Object} ClientInterface\n */\n\n/**\n * Options for creating a resource\n * @typedef {UserOptions} PutOptions\n * @property {Boolean=} overwrite - Whether or not to overwrite existing files (default: true)\n */\n\n/**\n * Options with headers and format\n * @typedef {UserOptions} OptionsWithFormat\n * @property {String} format - The format to use (text/binary)\n * @property {Boolean=} details - Provided detailed response information, such as response\n * headers (defaults to false). Only available on requests that return result data.\n */\n\n/**\n * Options for methods that resturn responses\n * @typedef {UserOptions} OptionsForAdvancedResponses\n * @property {Boolean=} details - Provided detailed response information, such as response\n * headers (defaults to false). Only available on requests that return result data.\n */\n\n/**\n * @typedef {OptionsForAdvancedResponses} GetDirectoryContentsOptions\n * @property {Boolean=} deep - Return deep (infinite) items (default: false)\n * @property {String=} glob - Glob pattern for matching certain files\n */\n\n/**\n * @typedef {Object} AuthToken\n * @property {String} token_type - The type of token (eg \"Bearer\")\n * @property {String} access_token - The token access code\n */\n\n/**\n * @typedef {Object} CreateClientOptions\n * @property {String=} username - The username for authentication\n * @property {String=} password - The password for authentication\n * @property {http.Agent=} httpAgent - Override the HTTP Agent instance for requests\n * @property {https.Agent=} httpsAgent - Override the HTTPS Agent instance for requests\n * @property {AuthToken=} token - Optional OAuth token\n */\n\n/**\n * A stat result\n * @typedef {Object} Stat\n * @property {String} filename The full path and filename of the remote item\n * @property {String} basename The base filename of the remote item, without the path\n * @property {String|null} lastmod The last modification date (eg. \"Sun, 13 Mar 2016 04:23:32 GMT\")\n * @property {Number} size The size of the remote item\n * @property {String} type The type of the item (file/directory)\n * @property {String=} mime The file mimetype (not present on directories)\n * @property {String|null} etag The ETag of the remote item (as supported by the server)\n * @property {Object=} props Additionally returned properties from the server, unprocessed, if\n * `details: true` is specified in the options\n */\n\n/**\n * Create a client adapter\n * @param {String} remoteURL The remote address of the webdav server\n * @param {CreateClientOptions=} opts Client options\n * @returns {ClientInterface} A new client interface instance\n * @memberof module:WebDAV\n * @example\n * const createClient = require(\"webdav\");\n * const client = createClient(url, { username, password });\n * client\n * .getDirectoryContents(\"/\")\n * .then(contents => {\n * console.log(contents);\n * });\n * @example\n * const createClient = require(\"webdav\");\n * const client = createClient(url, {\n * token: { token_type: \"Bearer\", access_token: \"tokenvalue\" }\n * });\n * client\n * .getDirectoryContents(\"/\")\n * .then(contents => {\n * console.log(contents);\n * });\n */\n\n\nfunction createClient(remoteURL, opts = {}) {\n if (!opts || typeof opts !== \"object\") {\n throw new Error(\"Options must be an object, if specified\");\n }\n\n const {\n username,\n password,\n httpAgent,\n httpsAgent,\n token = null,\n digest = false\n } = opts;\n const runtimeOptions = {\n headers: {},\n remotePath: urlTools.extractURLPath(remoteURL),\n remoteURL,\n httpAgent,\n httpsAgent\n }; // Configure auth\n\n if (digest) {\n runtimeOptions._digest = {\n username,\n password,\n nc: 0,\n algorithm: \"md5\",\n hasDigestAuth: false\n };\n } else if (username) {\n runtimeOptions.headers.Authorization = authTools.generateBasicAuthHeader(username, password);\n } else if (token && typeof token === \"object\") {\n runtimeOptions.headers.Authorization = authTools.generateTokenAuthHeader(token);\n }\n\n return {\n /**\n * Copy a remote item to another path\n * @param {String} remotePath The remote item path\n * @param {String} targetRemotePath The path file will be copied to\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves once the request has completed\n * @example\n * await client.copyFile(\"/photos/pic1.jpg\", \"/backup/pic1.jpg\");\n */\n copyFile: function copyFile(remotePath, targetRemotePath, options) {\n const copyOptions = merge(runtimeOptions, options || {});\n return copy.copyFile(remotePath, targetRemotePath, copyOptions);\n },\n\n /**\n * Create a directory\n * @param {String} dirPath The path to create\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves when the remote path has been created\n * @example\n * await client.createDirectory(\"/my/directory\");\n */\n createDirectory: function createDirectory(dirPath, options) {\n const createOptions = merge(runtimeOptions, options || {});\n return createDir.createDirectory(dirPath, createOptions);\n },\n\n /**\n * Create a readable stream of a remote file\n * @param {String} remoteFilename The file to stream\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Readable} A readable stream\n * @example\n * const remote = client.createReadStream(\"/data.zip\");\n * remote.pipe(someWriteStream);\n */\n createReadStream: function createReadStream(remoteFilename, options) {\n if (typeof WEB !== \"undefined\" && WEB === true) {\n throw new Error(\"createReadStream not implemented in web environment\");\n } else {\n const createStream = require(\"./interface/createStream.js\");\n\n const createOptions = merge(runtimeOptions, options || {});\n return createStream.createReadStream(remoteFilename, createOptions);\n }\n },\n\n /**\n * Create a writeable stream to a remote file\n * @param {String} remoteFilename The file to write to\n * @param {PutOptions=} options Options for the request\n * @param {Function=} callback Optional callback to fire\n * once the request has finished\n * @memberof ClientInterface\n * @returns {Writeable} A writeable stream\n * @example\n * const remote = client.createWriteStream(\"/data.zip\");\n * fs.createReadStream(\"~/myData.zip\").pipe(remote);\n */\n createWriteStream: function createWriteStream(remoteFilename, options, callback = NOOP) {\n if (typeof WEB !== \"undefined\" && WEB === true) {\n throw new Error(\"createWriteStream not implemented in web environment\");\n } else {\n const createStream = require(\"./interface/createStream.js\");\n\n const createOptions = merge(runtimeOptions, options || {});\n return createStream.createWriteStream(remoteFilename, createOptions, callback);\n }\n },\n\n /**\n * Send a custom request\n * @param {String} remotePath The remote path\n * @param {RequestOptions=} requestOptions the request options\n * @param {Options=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise<Any>} A promise that resolves with response of the request\n * @example\n * const contents = await client.customRequest(\"/alrighty.jpg\", {\n * method: \"PROPFIND\",\n * headers: {\n * Accept: \"text/plain\",\n * Depth: 0\n * },\n * responseType: \"text\"\n * });\n */\n customRequest: function customRequest(remotePath, requestOptions, options) {\n const customOptions = merge(runtimeOptions, options || {});\n return custom.customRequest(remotePath, requestOptions, customOptions);\n },\n\n /**\n * Delete a remote file\n * @param {String} remotePath The remote path to delete\n * @param {UserOptions=} options The options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves when the remote file as been deleted\n * @example\n * await client.deleteFile(\"/some/file.txt\");\n */\n deleteFile: function deleteFile(remotePath, options) {\n const deleteOptions = merge(runtimeOptions, options || {});\n return deletion.deleteFile(remotePath, deleteOptions);\n },\n\n /**\n * Check if a remote file or directory exists\n * @param {String} remotePath The remote path to check\n * @param {UserOptions=} options The options for the request\n * @memberof ClientInterface\n * @returns {Promise.<Boolean>} A promise that resolves with true if the path exists\n * or false if it does not\n * @example\n * if (await client.exists(\"/some-path/file.txt\")) {\n * // Do something\n * }\n */\n exists: function exists(remotePath, options) {\n const existsOptions = merge(runtimeOptions, options || {});\n return pathsExist.pathExists(remotePath, existsOptions);\n },\n\n /**\n * Get the contents of a remote directory\n * @param {String} remotePath The path to fetch the contents of\n * @param {GetDirectoryContentsOptions=} options Options for the remote the request\n * @returns {Promise.<Array.<Stat>>} A promise that resolves with an array of remote item stats\n * @memberof ClientInterface\n * @example\n * const contents = await client.getDirectoryContents(\"/\");\n */\n getDirectoryContents: function getDirectoryContents(remotePath, options) {\n const getOptions = merge(runtimeOptions, options || {});\n return directoryContents.getDirectoryContents(remotePath, getOptions);\n },\n\n /**\n * Get the contents of a remote file\n * @param {String} remoteFilename The file to fetch\n * @param {OptionsWithFormat=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise.<Buffer|String>} A promise that resolves with the contents of the remote file\n * @example\n * // Fetching data:\n * const buff = await client.getFileContents(\"/image.png\");\n * // Fetching text:\n * const txt = await client.getFileContents(\"/list.txt\", { format: \"text\" });\n */\n getFileContents: function getFileContents(remoteFilename, options) {\n const getOptions = merge(runtimeOptions, options || {});\n getOptions.format = getOptions.format || \"binary\";\n\n if ([\"binary\", \"text\"].indexOf(getOptions.format) < 0) {\n throw new Error(\"Unknown format: \" + getOptions.format);\n }\n\n return getOptions.format === \"text\" ? getFile.getFileContentsString(remoteFilename, getOptions) : getFile.getFileContentsBuffer(remoteFilename, getOptions);\n },\n\n /**\n * Get the download link of a remote file\n * Only supported for Basic authentication or unauthenticated connections.\n * @param {String} remoteFilename The file url to fetch\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {String} A download URL\n */\n getFileDownloadLink: function getFileDownloadLink(remoteFilename, options) {\n const getOptions = merge(runtimeOptions, options || {});\n return getFile.getFileLink(remoteFilename, getOptions);\n },\n\n /**\n * Get a file upload link\n * Only supported for Basic authentication or unauthenticated connections.\n * @param {String} remoteFilename The path of the remote file location\n * @param {PutOptions=} options The options for the request\n * @memberof ClientInterface\n * @returns {String} A upload URL\n */\n getFileUploadLink: function getFileUploadLink(remoteFilename, options) {\n var putOptions = merge(runtimeOptions, options || {});\n return putFile.getFileUploadLink(remoteFilename, putOptions);\n },\n\n /**\n * Get quota information\n * @param {OptionsForAdvancedResponses=} options Options for the request\n * @returns {Promise.<null|Object>} Returns null if failed, or an object with `used` and `available`\n * @memberof ClientInterface\n */\n getQuota: function getQuota(options) {\n const getOptions = merge(runtimeOptions, options || {});\n return quota.getQuota(getOptions);\n },\n\n /**\n * Move a remote item to another path\n * @param {String} remotePath The remote item path\n * @param {String} targetRemotePath The new path after moving\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves once the request has completed\n * @example\n * await client.moveFile(\"/sub/file.dat\", \"/another/dir/file.dat\");\n */\n moveFile: function moveFile(remotePath, targetRemotePath, options) {\n const moveOptions = merge(runtimeOptions, options || {});\n return move.moveFile(remotePath, targetRemotePath, moveOptions);\n },\n\n /**\n * Write contents to a remote file path\n * @param {String} remoteFilename The path of the remote file\n * @param {String|Buffer} data The data to write\n * @param {PutOptions=} options The options for the request\n * @returns {Promise} A promise that resolves once the contents have been written\n * @memberof ClientInterface\n * @example\n * await client.putFileContents(\"/dir/image.png\", myImageBuffer);\n * // Put contents without overwriting:\n * await client.putFileContents(\"/dir/image.png\", myImageBuffer, { overwrite: false });\n */\n putFileContents: function putFileContents(remoteFilename, data, options) {\n const putOptions = merge(runtimeOptions, options || {});\n return putFile.putFileContents(remoteFilename, data, putOptions);\n },\n\n /**\n * Stat a remote object\n * @param {String} remotePath The path of the item\n * @param {OptionsForAdvancedResponses=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise.<Stat>} A promise that resolves with the stat data\n */\n stat: function stat(remotePath, options) {\n const getOptions = merge(runtimeOptions, options || {});\n return stats.getStat(remotePath, getOptions);\n }\n };\n}\n\nmodule.exports = {\n createClient\n};","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encodeURIComponent(key);\n value = encodeURIComponent(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","\"use strict\";\n\nconst pathPosix = require(\"path-posix\");\n\nconst {\n merge\n} = require(\"../merge.js\");\n\nconst {\n handleResponseCode,\n processGlobFilter,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n normaliseHREF,\n normalisePath\n} = require(\"../url.js\");\n\nconst {\n parseXML,\n prepareFileFromProps\n} = require(\"./dav.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction getDirectoryContents(remotePath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(remotePath), \"/\"),\n method: \"PROPFIND\",\n headers: {\n Accept: \"text/plain\",\n Depth: options.deep ? \"infinity\" : 1\n },\n responseType: \"text\"\n };\n let response = null;\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => {\n response = res;\n return res.data;\n }).then(parseXML).then(result => getDirectoryFiles(result, options.remotePath, remotePath, options.details)).then(files => processResponsePayload(response, files, options.details)).then(files => options.glob ? processGlobFilter(files, options.glob) : files);\n}\n\nfunction getDirectoryFiles(result, serverBasePath, requestPath, isDetailed = false) {\n const remoteTargetPath = pathPosix.join(serverBasePath, requestPath, \"/\");\n const serverBase = pathPosix.join(serverBasePath, \"/\"); // Extract the response items (directory contents)\n\n const {\n multistatus: {\n response: responseItems\n }\n } = result;\n return responseItems // Filter out the item pointing to the current directory (not needed)\n .filter(item => {\n let href = item.href;\n href = pathPosix.join(normalisePath(normaliseHREF(href)), \"/\");\n return href !== serverBase && href !== remoteTargetPath;\n }) // Map all items to a consistent output structure (results)\n .map(item => {\n // HREF is the file path (in full)\n const href = normaliseHREF(item.href); // Each item should contain a stat object\n\n const {\n propstat: {\n prop: props\n }\n } = item; // Process the true full filename (minus the base server path)\n\n const filename = serverBase === \"/\" ? normalisePath(href) : normalisePath(pathPosix.relative(serverBase, href));\n return prepareFileFromProps(props, filename, isDetailed);\n });\n}\n\nmodule.exports = {\n getDirectoryContents\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\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\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()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\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 isObject(re) && 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 isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (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 = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, 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} else {\n // old school shim for old browsers\n module.exports = 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","module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = { sep: '/' }\ntry {\n path = require('path')\n} catch (er) {}\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n a = a || {}\n b = b || {}\n var t = {}\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return minimatch\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig.minimatch(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return Minimatch\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n // \"\" only matches \"\"\n if (pattern.trim() === '') return p === ''\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n // don't do it more than once.\n if (this._made) return\n\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = console.error\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n if (typeof pattern === 'undefined') {\n throw new TypeError('undefined pattern')\n }\n\n if (options.nobrace ||\n !pattern.match(/\\{.*\\}/)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n if (pattern.length > 1024 * 64) {\n throw new TypeError('pattern is too long')\n }\n\n var options = this.options\n\n // shortcuts\n if (!options.noglobstar && pattern === '**') return GLOBSTAR\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n case '/':\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n if (inClass) {\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '.':\n case '[':\n case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = match\nfunction match (f, partial) {\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n if (options.nocase) {\n hit = f.toLowerCase() === p.toLowerCase()\n } else {\n hit = f === p\n }\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')\n return emptyFileEnd\n }\n\n // should be unreachable.\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\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","var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = concatMap(n, function(el) { return expand(el, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n","module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","'use strict';\n\nconst nodeToJson = require('./node2json');\nconst xmlToNodeobj = require('./xmlstr2xmlnode');\nconst x2xmlnode = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\nconst validator = require('./validator');\n\nexports.parse = function(xmlData, options, validationOption) {\n if( validationOption){\n if(validationOption === true) validationOption = {}\n \n const result = validator.validate(xmlData, validationOption);\n if (result !== true) {\n throw Error( result.err.msg)\n }\n }\n options = buildOptions(options, x2xmlnode.defaultOptions, x2xmlnode.props);\n return nodeToJson.convertToJson(xmlToNodeobj.getTraversalObj(xmlData, options), options);\n};\nexports.convertTonimn = require('../src/nimndata').convert2nimn;\nexports.getTraversalObj = xmlToNodeobj.getTraversalObj;\nexports.convertToJson = nodeToJson.convertToJson;\nexports.convertToJsonString = require('./node2json_str').convertToJsonString;\nexports.validate = validator.validate;\nexports.j2xParser = require('./json2xml');\nexports.parseToNimn = function(xmlData, schema, options) {\n return exports.convertTonimn(exports.getTraversalObj(xmlData, options), schema, options);\n};\n","'use strict';\n\nconst util = require('./util');\n\nconst convertToJson = function(node, options) {\n const jObj = {};\n\n //when no child node or attr is present\n if ((!node.child || util.isEmptyObject(node.child)) && (!node.attrsMap || util.isEmptyObject(node.attrsMap))) {\n return util.isExist(node.val) ? node.val : '';\n } else {\n //otherwise create a textnode if node has some text\n if (util.isExist(node.val)) {\n if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n if(options.arrayMode === \"strict\"){\n jObj[options.textNodeName] = [ node.val ];\n }else{\n jObj[options.textNodeName] = node.val;\n }\n }\n }\n }\n\n util.merge(jObj, node.attrsMap, options.arrayMode);\n\n const keys = Object.keys(node.child);\n for (let index = 0; index < keys.length; index++) {\n var tagname = keys[index];\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj[tagname] = [];\n for (var tag in node.child[tagname]) {\n jObj[tagname].push(convertToJson(node.child[tagname][tag], options));\n }\n } else {\n if(options.arrayMode === true){\n const result = convertToJson(node.child[tagname][0], options)\n if(typeof result === 'object')\n jObj[tagname] = [ result ];\n else\n jObj[tagname] = result;\n }else if(options.arrayMode === \"strict\"){\n jObj[tagname] = [convertToJson(node.child[tagname][0], options) ];\n }else{\n jObj[tagname] = convertToJson(node.child[tagname][0], options);\n }\n }\n }\n\n //add value\n return jObj;\n};\n\nexports.convertToJson = convertToJson;\n","'use strict';\n\nmodule.exports = function(tagname, parent, val) {\n this.tagname = tagname;\n this.parent = parent;\n this.child = {}; //child tags\n this.attrsMap = {}; //attributes map\n this.val = val; //text only\n this.addChild = function(child) {\n if (Array.isArray(this.child[child.tagname])) {\n //already presents\n this.child[child.tagname].push(child);\n } else {\n this.child[child.tagname] = [child];\n }\n };\n};\n","'use strict';\n\nconst util = require('./util');\n\nconst defaultOptions = {\n allowBooleanAttributes: false, //A tag can have attributes without any value\n};\n\nconst props = ['allowBooleanAttributes'];\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexports.validate = function (xmlData, options) {\n options = util.buildOptions(options, defaultOptions, props);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/g,\"\");//Remove DOCTYPE\n const tags = [];\n let tagFound = false;\n\n //indicates that the root tag has been closed (aka. depth 0 has been reached)\n let reachedRoot = false;\n\n if (xmlData[0] === '\\ufeff') {\n // check for byte order mark (BOM)\n xmlData = xmlData.substr(1);\n }\n\n for (let i = 0; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n //starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n\n i++;\n if (xmlData[i] === '?') {\n i = readPI(xmlData, ++i);\n if (i.err) {\n return i;\n }\n } else if (xmlData[i] === '!') {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === '/') {\n //closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n let tagName = '';\n for (\n ;\n i < xmlData.length &&\n xmlData[i] !== '>' &&\n xmlData[i] !== ' ' &&\n xmlData[i] !== '\\t' &&\n xmlData[i] !== '\\n' &&\n xmlData[i] !== '\\r';\n i++\n ) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === '/') {\n //self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n //continue;\n i--;\n }\n if (!validateTagName(tagName)) {\n let msg;\n if(tagName.trim().length === 0) {\n msg = \"There is an unnecessary space between tag name and backward slash '</ ..'.\";\n }else{\n msg = `Tag '${tagName}' is an invalid name.`;\n }\n return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n }\n\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return getErrorObject('InvalidAttr', `Attributes for '${tagName}' have open quote.`, getLineNumberForPosition(xmlData, i));\n }\n let attrStr = result.value;\n i = result.index;\n\n if (attrStr[attrStr.length - 1] === '/') {\n //self closing tag\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n //continue; //text may presents after self closing tag\n } else {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n } else if (closingTag) {\n if (!result.tagClosed) {\n return getErrorObject('InvalidTag', `Closing tag '${tagName}' doesn't have proper closing.`, getLineNumberForPosition(xmlData, i));\n } else if (attrStr.trim().length > 0) {\n return getErrorObject('InvalidTag', `Closing tag '${tagName}' can't have attributes or invalid starting.`, getLineNumberForPosition(xmlData, i));\n } else {\n const otg = tags.pop();\n if (tagName !== otg) {\n return getErrorObject('InvalidTag', `Closing tag '${otg}' is expected inplace of '${tagName}'.`, getLineNumberForPosition(xmlData, i));\n }\n\n //when there are no more tags, we reached the root level.\n if(tags.length == 0)\n {\n reachedRoot = true;\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n\n //if the root level has been reached before ...\n if(reachedRoot === true) {\n return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n } else {\n tags.push(tagName);\n }\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n if (xmlData[i + 1] === '!') {\n //comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n break;\n }\n } else if (xmlData[i] === '&') {\n const afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1)\n return getErrorObject('InvalidChar', `char '&' is not expected.`, getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n }\n } //end of reading tag text value\n if (xmlData[i] === '<') {\n i--;\n }\n }\n } else {\n if (xmlData[i] === ' ' || xmlData[i] === '\\t' || xmlData[i] === '\\n' || xmlData[i] === '\\r') {\n continue;\n }\n return getErrorObject('InvalidChar', `char '${xmlData[i]}' is not expected.`, getLineNumberForPosition(xmlData, i));\n }\n }\n\n if (!tagFound) {\n return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n } else if (tags.length > 0) {\n return getErrorObject('InvalidXml', `Invalid '${JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, '')}' found.`, 1);\n }\n\n return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n var start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == '?' || xmlData[i] == ' ') {\n //tagname\n var tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === 'xml') {\n return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n //check if valid attribut string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n //comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n } else if (\n xmlData.length > i + 8 &&\n xmlData[i + 1] === 'D' &&\n xmlData[i + 2] === 'O' &&\n xmlData[i + 3] === 'C' &&\n xmlData[i + 4] === 'T' &&\n xmlData[i + 5] === 'Y' &&\n xmlData[i + 6] === 'P' &&\n xmlData[i + 7] === 'E'\n ) {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n angleBracketsCount++;\n } else if (xmlData[i] === '>') {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (\n xmlData.length > i + 9 &&\n xmlData[i + 1] === '[' &&\n xmlData[i + 2] === 'C' &&\n xmlData[i + 3] === 'D' &&\n xmlData[i + 4] === 'A' &&\n xmlData[i + 5] === 'T' &&\n xmlData[i + 6] === 'A' &&\n xmlData[i + 7] === '['\n ) {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n }\n\n return i;\n}\n\nvar doubleQuote = '\"';\nvar singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n let attrStr = '';\n let startChar = '';\n let tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === '') {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n continue;\n } else {\n startChar = '';\n }\n } else if (xmlData[i] === '>') {\n if (startChar === '') {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== '') {\n return false;\n }\n\n return { value: attrStr, index: i, tagClosed: tagClosed };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n const matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n\n for (let i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n //nospace before attribute name: a=\"sd\"b=\"saf\"\n return getErrorObject('InvalidAttr', `Attribute '${matches[i][2]}' has no space in starting.`, getPositionFromMatch(attrStr, matches[i][0]))\n } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n //independent attribute: ab\n return getErrorObject('InvalidAttr', `boolean attribute '${matches[i][2]}' is not allowed.`, getPositionFromMatch(attrStr, matches[i][0]));\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n const attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject('InvalidAttr', `Attribute '${attrName}' is an invalid name.`, getPositionFromMatch(attrStr, matches[i][0]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n //check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return getErrorObject('InvalidAttr', `Attribute '${attrName}' is repeated.`, getPositionFromMatch(attrStr, matches[i][0]));\n }\n }\n\n return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n let re = /\\d/;\n if (xmlData[i] === 'x') {\n i++;\n re = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === ';')\n return i;\n if (!xmlData[i].match(re))\n break;\n }\n return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n // https://www.w3.org/TR/xml/#dt-charref\n i++;\n if (xmlData[i] === ';')\n return -1;\n if (xmlData[i] === '#') {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n let count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i] === ';')\n break;\n return -1;\n }\n return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code: code,\n msg: message,\n line: lineNumber,\n },\n };\n}\n\nfunction validateAttrName(attrName) {\n return util.isName(attrName);\n}\n\n//const startsWithXML = new RegExp(\"^[Xx][Mm][Ll]\");\n// startsWith = /^([a-zA-Z]|_)[\\w.\\-_:]*/;\n\nfunction validateTagName(tagname) {\n /*if(util.doesMatch(tagname,startsWithXML)) return false;\n else*/\n //return !tagname.toLowerCase().startsWith(\"xml\") || !util.doesNotMatch(tagname, regxTagName);\n return util.isName(tagname);\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n var lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return lines.length;\n}\n\n//this function returns the position of the last character of match within attrStr\nfunction getPositionFromMatch(attrStr, match) {\n return attrStr.indexOf(match) + match.length;\n}","'use strict';\nconst char = function(a) {\n return String.fromCharCode(a);\n};\n\nconst chars = {\n nilChar: char(176),\n missingChar: char(201),\n nilPremitive: char(175),\n missingPremitive: char(200),\n\n emptyChar: char(178),\n emptyValue: char(177), //empty Premitive\n\n boundryChar: char(179),\n\n objStart: char(198),\n arrStart: char(204),\n arrayEnd: char(185),\n};\n\nconst charsArr = [\n chars.nilChar,\n chars.nilPremitive,\n chars.missingChar,\n chars.missingPremitive,\n chars.boundryChar,\n chars.emptyChar,\n chars.emptyValue,\n chars.arrayEnd,\n chars.objStart,\n chars.arrStart,\n];\n\nconst _e = function(node, e_schema, options) {\n if (typeof e_schema === 'string') {\n //premitive\n if (node && node[0] && node[0].val !== undefined) {\n return getValue(node[0].val, e_schema);\n } else {\n return getValue(node, e_schema);\n }\n } else {\n const hasValidData = hasData(node);\n if (hasValidData === true) {\n let str = '';\n if (Array.isArray(e_schema)) {\n //attributes can't be repeated. hence check in children tags only\n str += chars.arrStart;\n const itemSchema = e_schema[0];\n //var itemSchemaType = itemSchema;\n const arr_len = node.length;\n\n if (typeof itemSchema === 'string') {\n for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n const r = getValue(node[arr_i].val, itemSchema);\n str = processValue(str, r);\n }\n } else {\n for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n const r = _e(node[arr_i], itemSchema, options);\n str = processValue(str, r);\n }\n }\n str += chars.arrayEnd; //indicates that next item is not array item\n } else {\n //object\n str += chars.objStart;\n const keys = Object.keys(e_schema);\n if (Array.isArray(node)) {\n node = node[0];\n }\n for (let i in keys) {\n const key = keys[i];\n //a property defined in schema can be present either in attrsMap or children tags\n //options.textNodeName will not present in both maps, take it's value from val\n //options.attrNodeName will be present in attrsMap\n let r;\n if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n r = _e(node.attrsMap[key], e_schema[key], options);\n } else if (key === options.textNodeName) {\n r = _e(node.val, e_schema[key], options);\n } else {\n r = _e(node.child[key], e_schema[key], options);\n }\n str = processValue(str, r);\n }\n }\n return str;\n } else {\n return hasValidData;\n }\n }\n};\n\nconst getValue = function(a /*, type*/) {\n switch (a) {\n case undefined:\n return chars.missingPremitive;\n case null:\n return chars.nilPremitive;\n case '':\n return chars.emptyValue;\n default:\n return a;\n }\n};\n\nconst processValue = function(str, r) {\n if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n str += chars.boundryChar;\n }\n return str + r;\n};\n\nconst isAppChar = function(ch) {\n return charsArr.indexOf(ch) !== -1;\n};\n\nfunction hasData(jObj) {\n if (jObj === undefined) {\n return chars.missingChar;\n } else if (jObj === null) {\n return chars.nilChar;\n } else if (\n jObj.child &&\n Object.keys(jObj.child).length === 0 &&\n (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)\n ) {\n return chars.emptyChar;\n } else {\n return true;\n }\n}\n\nconst x2j = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\n\nconst convert2nimn = function(node, e_schema, options) {\n options = buildOptions(options, x2j.defaultOptions, x2j.props);\n return _e(node, e_schema, options);\n};\n\nexports.convert2nimn = convert2nimn;\n","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst x2j = require('./xmlstr2xmlnode');\n\n//TODO: do it later\nconst convertToJsonString = function(node, options) {\n options = buildOptions(options, x2j.defaultOptions, x2j.props);\n\n options.indentBy = options.indentBy || '';\n return _cToJsonStr(node, options, 0);\n};\n\nconst _cToJsonStr = function(node, options, level) {\n let jObj = '{';\n\n //traver through all the children\n const keys = Object.keys(node.child);\n\n for (let index = 0; index < keys.length; index++) {\n var tagname = keys[index];\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj += '\"' + tagname + '\" : [ ';\n for (var tag in node.child[tagname]) {\n jObj += _cToJsonStr(node.child[tagname][tag], options) + ' , ';\n }\n jObj = jObj.substr(0, jObj.length - 1) + ' ] '; //remove extra comma in last\n } else {\n jObj += '\"' + tagname + '\" : ' + _cToJsonStr(node.child[tagname][0], options) + ' ,';\n }\n }\n util.merge(jObj, node.attrsMap);\n //add attrsMap as new children\n if (util.isEmptyObject(jObj)) {\n return util.isExist(node.val) ? node.val : '';\n } else {\n if (util.isExist(node.val)) {\n if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n jObj += '\"' + options.textNodeName + '\" : ' + stringval(node.val);\n }\n }\n }\n //add value\n if (jObj[jObj.length - 1] === ',') {\n jObj = jObj.substr(0, jObj.length - 2);\n }\n return jObj + '}';\n};\n\nfunction stringval(v) {\n if (v === true || v === false || !isNaN(v)) {\n return v;\n } else {\n return '\"' + v + '\"';\n }\n}\n\nfunction indentate(options, level) {\n return options.indentBy.repeat(level);\n}\n\nexports.convertToJsonString = convertToJsonString;\n","'use strict';\n//parse Empty Node as self closing node\nconst buildOptions = require('./util').buildOptions;\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attrNodeName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n cdataTagName: false,\n cdataPositionChar: '\\\\c',\n format: false,\n indentBy: ' ',\n supressEmptyNode: false,\n tagValueProcessor: function(a) {\n return a;\n },\n attrValueProcessor: function(a) {\n return a;\n },\n};\n\nconst props = [\n 'attributeNamePrefix',\n 'attrNodeName',\n 'textNodeName',\n 'ignoreAttributes',\n 'cdataTagName',\n 'cdataPositionChar',\n 'format',\n 'indentBy',\n 'supressEmptyNode',\n 'tagValueProcessor',\n 'attrValueProcessor',\n];\n\nfunction Parser(options) {\n this.options = buildOptions(options, defaultOptions, props);\n if (this.options.ignoreAttributes || this.options.attrNodeName) {\n this.isAttribute = function(/*a*/) {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n if (this.options.cdataTagName) {\n this.isCDATA = isCDATA;\n } else {\n this.isCDATA = function(/*a*/) {\n return false;\n };\n }\n this.replaceCDATAstr = replaceCDATAstr;\n this.replaceCDATAarr = replaceCDATAarr;\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = '>\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function() {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n\n if (this.options.supressEmptyNode) {\n this.buildTextNode = buildEmptyTextNode;\n this.buildObjNode = buildEmptyObjNode;\n } else {\n this.buildTextNode = buildTextValNode;\n this.buildObjNode = buildObjectNode;\n }\n\n this.buildTextValNode = buildTextValNode;\n this.buildObjectNode = buildObjectNode;\n}\n\nParser.prototype.parse = function(jObj) {\n return this.j2x(jObj, 0).val;\n};\n\nParser.prototype.j2x = function(jObj, level) {\n let attrStr = '';\n let val = '';\n const keys = Object.keys(jObj);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n const key = keys[i];\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node\n } else if (jObj[key] === null) {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextNode(jObj[key], key, '', level);\n } else if (typeof jObj[key] !== 'object') {\n //premitive type\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += ' ' + attr + '=\"' + this.options.attrValueProcessor('' + jObj[key]) + '\"';\n } else if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAstr('', jObj[key]);\n }\n } else {\n //tag value\n if (key === this.options.textNodeName) {\n if (jObj[this.options.cdataTagName]) {\n //value will added while processing cdata\n } else {\n val += this.options.tagValueProcessor('' + jObj[key]);\n }\n } else {\n val += this.buildTextNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n if (this.isCDATA(key)) {\n val += this.indentate(level);\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAarr('', jObj[key]);\n }\n } else {\n //nested nodes\n const arrLen = jObj[key].length;\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (typeof item === 'object') {\n const result = this.j2x(item, level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n } else {\n val += this.buildTextNode(item, key, '', level);\n }\n }\n }\n } else {\n //nested node\n if (this.options.attrNodeName && key === this.options.attrNodeName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += ' ' + Ks[j] + '=\"' + this.options.attrValueProcessor('' + jObj[key][Ks[j]]) + '\"';\n }\n } else {\n const result = this.j2x(jObj[key], level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n }\n }\n }\n return {attrStr: attrStr, val: val};\n};\n\nfunction replaceCDATAstr(str, cdata) {\n str = this.options.tagValueProcessor('' + str);\n if (this.options.cdataPositionChar === '' || str === '') {\n return str + '<![CDATA[' + cdata + ']]' + this.tagEndChar;\n } else {\n return str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata + ']]' + this.tagEndChar);\n }\n}\n\nfunction replaceCDATAarr(str, cdata) {\n str = this.options.tagValueProcessor('' + str);\n if (this.options.cdataPositionChar === '' || str === '') {\n return str + '<![CDATA[' + cdata.join(']]><![CDATA[') + ']]' + this.tagEndChar;\n } else {\n for (let v in cdata) {\n str = str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata[v] + ']]>');\n }\n return str + this.newLine;\n }\n}\n\nfunction buildObjectNode(val, key, attrStr, level) {\n if (attrStr && !val.includes('<')) {\n return (\n this.indentate(level) +\n '<' +\n key +\n attrStr +\n '>' +\n val +\n //+ this.newLine\n // + this.indentate(level)\n '</' +\n key +\n this.tagEndChar\n );\n } else {\n return (\n this.indentate(level) +\n '<' +\n key +\n attrStr +\n this.tagEndChar +\n val +\n //+ this.newLine\n this.indentate(level) +\n '</' +\n key +\n this.tagEndChar\n );\n }\n}\n\nfunction buildEmptyObjNode(val, key, attrStr, level) {\n if (val !== '') {\n return this.buildObjectNode(val, key, attrStr, level);\n } else {\n return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n //+ this.newLine\n }\n}\n\nfunction buildTextValNode(val, key, attrStr, level) {\n return (\n this.indentate(level) +\n '<' +\n key +\n attrStr +\n '>' +\n this.options.tagValueProcessor(val) +\n '</' +\n key +\n this.tagEndChar\n );\n}\n\nfunction buildEmptyTextNode(val, key, attrStr, level) {\n if (val !== '') {\n return this.buildTextValNode(val, key, attrStr, level);\n } else {\n return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n }\n}\n\nfunction indentate(level) {\n return this.options.indentBy.repeat(level);\n}\n\nfunction isAttribute(name /*, options*/) {\n if (name.startsWith(this.options.attributeNamePrefix)) {\n return name.substr(this.attrPrefixLen);\n } else {\n return false;\n }\n}\n\nfunction isCDATA(name) {\n return name === this.options.cdataTagName;\n}\n\n//formatting\n//indentation\n//\\n after each closing or self closing tag\n\nmodule.exports = Parser;\n","/**\n* @license nested-property https://github.com/cosmosio/nested-property\n*\n* The MIT License (MIT)\n*\n* Copyright (c) 2014-2020 Olivier Scherrer <pode.fr@gmail.com>\n*/\n\"use strict\";\n\nmodule.exports = {\n set: setNestedProperty,\n get: getNestedProperty,\n has: hasNestedProperty,\n hasOwn: function (object, property, options) {\n return this.has(object, property, options || {own: true});\n },\n isIn: isInNestedProperty\n};\n\n/**\n * Get the property of an object nested in one or more objects\n * given an object such as a.b.c.d = 5, getNestedProperty(a, \"b.c.d\") will return 5.\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns the object or the the property value if found\n */\nfunction getNestedProperty(object, property) {\n if (object && typeof object == \"object\") {\n if (typeof property == \"string\" && property !== \"\") {\n var split = property.split(\".\");\n return split.reduce(function (obj, prop) {\n return obj && obj[prop];\n }, object);\n } else if (typeof property == \"number\") {\n return object[property];\n } else {\n return object;\n }\n } else {\n return object;\n }\n}\n\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, \"b.c.d\") will return true.\n * It also returns true if the property is in the prototype chain.\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @param {Object} options:\n * - own: set to reject properties from the prototype\n * @returns true if has (property in object), false otherwise\n */\nfunction hasNestedProperty(object, property, options) {\n options = options || {};\n\n if (object && typeof object == \"object\") {\n if (typeof property == \"string\" && property !== \"\") {\n var split = property.split(\".\");\n return split.reduce(function (obj, prop, idx, array) {\n if (idx == array.length - 1) {\n if (options.own) {\n return !!(obj && obj.hasOwnProperty(prop));\n } else {\n return !!(obj !== null && typeof obj == \"object\" && prop in obj);\n }\n }\n return obj && obj[prop];\n }, object);\n } else if (typeof property == \"number\") {\n return property in object;\n } else {\n return false;\n }\n } else {\n return false;\n }\n}\n\n/**\n * Set the property of an object nested in one or more objects\n * If the property doesn't exist, it gets created.\n * @param {Object} object\n * @param {String} property\n * @param value the value to set\n * @returns object if no assignment was made or the value if the assignment was made\n */\nfunction setNestedProperty(object, property, value) {\n if (object && typeof object == \"object\") {\n if (typeof property == \"string\" && property !== \"\") {\n var split = property.split(\".\");\n return split.reduce(function (obj, prop, idx) {\n var nextPropIsNumber = Number.isInteger(Number(split[idx + 1]));\n \n obj[prop] = obj[prop] || (nextPropIsNumber ? [] : {})\n if (split.length == (idx + 1)) {\n obj[prop] = value;\n }\n return obj[prop];\n }, object);\n } else if (typeof property == \"number\") {\n object[property] = value;\n return object[property];\n } else {\n return object;\n }\n } else {\n return object;\n }\n}\n\n/**\n * Tell if an object is on the path to a nested property\n * If the object is on the path, and the path exists, it returns true, and false otherwise.\n * @param {Object} object to get the nested property from\n * @param {String} property name of the nested property\n * @param {Object} objectInPath the object to check\n * @param {Object} options:\n * - validPath: return false if the path is invalid, even if the object is in the path\n * @returns {boolean} true if the object is on the path\n */\nfunction isInNestedProperty(object, property, objectInPath, options) {\n options = options || {};\n\n if (object && typeof object == \"object\") {\n if (typeof property == \"string\" && property !== \"\") {\n var split = property.split(\".\"),\n isIn = false,\n pathExists;\n\n pathExists = !!split.reduce(function (obj, prop) {\n isIn = isIn || obj === objectInPath || (!!obj && obj[prop] === objectInPath);\n return obj && obj[prop];\n }, object);\n\n if (options.validPath) {\n return isIn && pathExists;\n } else {\n return isIn;\n }\n } else {\n return false;\n }\n } else {\n return false;\n }\n}\n","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction createDirectory(dirPath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(dirPath)),\n method: \"MKCOL\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n createDirectory: createDirectory\n};","\"use strict\";\n\nconst {\n handleResponseCode\n} = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction customRequest(remotePath, requestOptions, options) {\n if (!requestOptions.url) {\n requestOptions.url = joinURL(options.remoteURL, encodePath(remotePath), \"/\");\n }\n\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode);\n}\n\nmodule.exports = {\n customRequest\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction deleteFile(filename, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"DELETE\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n deleteFile\n};","\"use strict\";\n\nconst {\n getStat\n} = require(\"./stat.js\");\n\nfunction pathExists(remotePath, options) {\n return getStat(remotePath, options).then(() => true).catch(err => {\n if (err.response && err.response.status === 404) {\n return false;\n }\n\n throw err;\n });\n}\n\nmodule.exports = {\n pathExists\n};","\"use strict\";\n\nconst {\n handleResponseCode,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst {\n fromBase64\n} = require(\"../encode.js\");\n\nfunction getFileContentsBuffer(filePath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"GET\",\n responseType: \"arraybuffer\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => processResponsePayload(res, res.data, options.details));\n}\n\nfunction getFileContentsString(filePath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"GET\",\n responseType: \"text\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => processResponsePayload(res, res.data, options.details));\n}\n\nfunction getFileLink(filePath, options) {\n let url = joinURL(options.remoteURL, encodePath(filePath));\n const protocol = /^https:/i.test(url) ? \"https\" : \"http\";\n\n if (options.headers && options.headers.Authorization) {\n if (/^Basic /i.test(options.headers.Authorization) === false) {\n throw new Error(\"Failed retrieving download link: Invalid authorisation method\");\n }\n\n const authPart = options.headers.Authorization.replace(/^Basic /i, \"\").trim();\n const authContents = fromBase64(authPart);\n url = url.replace(/^https?:\\/\\//, `${protocol}://${authContents}@`);\n }\n\n return url;\n}\n\nmodule.exports = {\n getFileContentsBuffer,\n getFileContentsString,\n getFileLink\n};","\"use strict\";\n\nconst {\n handleResponseCode,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst {\n parseXML,\n translateDiskSpace\n} = require(\"./dav.js\");\n\nfunction getQuota(options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, \"/\"),\n method: \"PROPFIND\",\n headers: {\n Accept: \"text/plain\",\n Depth: 0\n },\n responseType: \"text\"\n };\n let response = null;\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => {\n response = res;\n return res.data;\n }).then(parseXML).then(parseQuota).then(result => processResponsePayload(response, result, options.details));\n}\n\nfunction parseQuota(result) {\n try {\n const [responseItem] = result.multistatus.response;\n const {\n propstat: {\n prop: {\n \"quota-used-bytes\": quotaUsed,\n \"quota-available-bytes\": quotaAvail\n }\n }\n } = responseItem;\n return typeof quotaUsed !== \"undefined\" && typeof quotaAvail !== \"undefined\" ? {\n used: parseInt(quotaUsed, 10),\n available: translateDiskSpace(quotaAvail)\n } : null;\n } catch (err) {\n /* ignore */\n }\n\n return null;\n}\n\nmodule.exports = {\n getQuota\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction moveFile(filename, destination, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"MOVE\",\n headers: {\n Destination: joinURL(options.remoteURL, encodePath(destination))\n }\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n moveFile\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction copyFile(filename, destination, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"COPY\",\n headers: {\n Destination: joinURL(options.remoteURL, encodePath(destination))\n }\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n copyFile\n};","\"use strict\";\n\nconst {\n merge\n} = require(\"../merge.js\");\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst {\n fromBase64\n} = require(\"../encode.js\");\n\nfunction getPutContentsDefaults() {\n return {\n headers: {\n \"Content-Type\": \"application/octet-stream\"\n },\n overwrite: true\n };\n}\n\nfunction putFileContents(filePath, data, options) {\n const headers = {\n \"Content-Length\": data.length\n };\n\n if (typeof WEB === \"undefined\") {\n // We're running under NodeJS, so it's safe to check if the\n // input is a stream\n const stream = require(\"stream\");\n\n if (data instanceof stream.Readable) {\n // Input was a stream, remove the content length as this\n // is not known yet\n delete headers[\"Content-Length\"];\n }\n }\n\n const putOptions = merge(getPutContentsDefaults(), {\n headers\n }, options || {});\n\n if (putOptions.overwrite === false) {\n putOptions.headers[\"If-None-Match\"] = \"*\";\n }\n\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"PUT\",\n headers: putOptions.headers,\n data\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nfunction getFileUploadLink(filePath, options) {\n let url = joinURL(options.remoteURL, encodePath(filePath));\n url += \"?Content-Type=application/octet-stream\";\n const protocol = /^https:/i.test(url) ? \"https\" : \"http\";\n\n if (options.headers && options.headers.Authorization) {\n if (/^Basic /i.test(options.headers.Authorization) === false) {\n throw new Error(\"Failed retrieving download link: Invalid authorisation method\");\n }\n\n const authPart = options.headers.Authorization.replace(/^Basic /i, \"\").trim();\n const authContents = fromBase64(authPart);\n url = url.replace(/^https?:\\/\\//, `${protocol}://${authContents}@`);\n }\n\n return url;\n}\n\nmodule.exports = {\n getFileUploadLink,\n putFileContents\n};"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"sources":["webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/minimalistic-assert/index.js","webpack:///./node_modules/elliptic/lib/elliptic/utils.js","webpack:///./node_modules/webdav/dist/node/response.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/hash.js/lib/hash/utils.js","webpack:///./node_modules/elliptic/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/fast-xml-parser/src/util.js","webpack:///./node_modules/cipher-base/index.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/webdav/dist/node/merge.js","webpack:///./node_modules/randombytes/browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/errors-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/sha.js/hash.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/create-hash/browser.js","webpack:///./node_modules/core-util-is/lib/util.js","webpack:///./node_modules/buffer-xor/index.js","webpack:///./node_modules/hash.js/lib/hash/common.js","webpack:///./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///./node_modules/webdav/dist/node/encode.js","webpack:///./node_modules/stream-browserify/index.js","webpack:///./node_modules/process-nextick-args/index.js","webpack:///./node_modules/browserify-aes/aes.js","webpack:///./node_modules/evp_bytestokey/index.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///./node_modules/parse-asn1/index.js","webpack:///./node_modules/fast-xml-parser/src/xmlstr2xmlnode.js","webpack:///./node_modules/md5.js/index.js","webpack:///./node_modules/util-deprecate/browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///./node_modules/ripemd160/index.js","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/des.js/lib/des/cipher.js","webpack:///./node_modules/browserify-aes/browser.js","webpack:///./node_modules/browserify-aes/modes/index.js","webpack:///./node_modules/brorand/index.js","webpack:///./node_modules/browserify-sign/node_modules/safe-buffer/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///./node_modules/browserify-rsa/index.js","webpack:///./node_modules/elliptic/lib/elliptic.js","webpack:///./node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/hash.js/lib/hash.js","webpack:///./node_modules/safer-buffer/safer.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/public-encrypt/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/webdav/dist/node/url.js","webpack:///./node_modules/url-parse/index.js","webpack:///./node_modules/webdav/dist/node/interface/dav.js","webpack:///./node_modules/webdav/dist/node/index.js","webpack:///./node_modules/webdav/dist/node/request.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/webdav/dist/node/patcher.js","webpack:///./node_modules/webdav/dist/node/auth.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/hash-base/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/create-hmac/browser.js","webpack:///./node_modules/create-hash/md5.js","webpack:///./node_modules/pbkdf2/browser.js","webpack:///./node_modules/pbkdf2/lib/precondition.js","webpack:///./node_modules/pbkdf2/lib/default-encoding.js","webpack:///./node_modules/pbkdf2/lib/sync-browser.js","webpack:///./node_modules/pbkdf2/lib/to-buffer.js","webpack:///./node_modules/des.js/lib/des/utils.js","webpack:///./node_modules/des.js/lib/des/des.js","webpack:///./node_modules/browserify-aes/modes/ctr.js","webpack:///./node_modules/browserify-aes/incr32.js","webpack:///./node_modules/browserify-aes/authCipher.js","webpack:///./node_modules/browserify-aes/streamCipher.js","webpack:///./node_modules/diffie-hellman/lib/generatePrime.js","webpack:///./node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/miller-rabin/lib/mr.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///./node_modules/hash.js/lib/hash/sha/common.js","webpack:///./node_modules/hash.js/lib/hash/sha/256.js","webpack:///./node_modules/hash.js/lib/hash/sha/512.js","webpack:///./node_modules/bn.js/lib/bn.js","webpack:///./node_modules/asn1.js/lib/asn1.js","webpack:///./node_modules/asn1.js/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///./node_modules/public-encrypt/mgf.js","webpack:///./node_modules/public-encrypt/xor.js","webpack:///./node_modules/public-encrypt/withPublic.js","webpack:///./node_modules/path-posix/index.js","webpack:///./node_modules/webdav/dist/node/interface/stat.js","webpack:///./node_modules/webdav/dist/node/interface/createStream.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/url-join/lib/url-join.js","webpack:///./node_modules/webdav/dist/node/fetch.js","webpack:///./node_modules/hot-patcher/source/index.js","webpack:///./node_modules/hot-patcher/source/functions.js","webpack:///./node_modules/base-64/base64.js","webpack:///./node_modules/he/he.js","webpack:///./node_modules/webdav/dist/node/crypto.js","webpack:///./node_modules/crypto-browserify/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/hash-base/node_modules/safe-buffer/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.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/sha384.js","webpack:///./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack:///./node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/readable-stream/writable-browser.js","webpack:///./node_modules/readable-stream/duplex-browser.js","webpack:///./node_modules/readable-stream/transform.js","webpack:///./node_modules/readable-stream/passthrough.js","webpack:///./node_modules/create-hmac/legacy.js","webpack:///./node_modules/browserify-sign/algos.js","webpack:///./node_modules/pbkdf2/lib/async.js","webpack:///./node_modules/browserify-cipher/browser.js","webpack:///./node_modules/browserify-des/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/ede.js","webpack:///./node_modules/browserify-aes/encrypter.js","webpack:///./node_modules/browserify-aes/modes/ecb.js","webpack:///./node_modules/browserify-aes/modes/cbc.js","webpack:///./node_modules/browserify-aes/modes/cfb.js","webpack:///./node_modules/browserify-aes/modes/cfb8.js","webpack:///./node_modules/browserify-aes/modes/cfb1.js","webpack:///./node_modules/browserify-aes/modes/ofb.js","webpack:///./node_modules/browserify-aes/ghash.js","webpack:///./node_modules/browserify-aes/decrypter.js","webpack:///./node_modules/browserify-des/modes.js","webpack:///./node_modules/diffie-hellman/browser.js","webpack:///./node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/diffie-hellman/lib/dh.js","webpack:///./node_modules/browserify-sign/browser/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///./node_modules/browserify-sign/browser/sign.js","webpack:///./node_modules/browserify-rsa/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/edwards.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/384.js","webpack:///./node_modules/hash.js/lib/hash/ripemd.js","webpack:///./node_modules/hash.js/lib/hash/hmac.js","webpack:///./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///./node_modules/hmac-drbg/lib/hmac-drbg.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/parse-asn1/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/api.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/base/index.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///./node_modules/parse-asn1/certificate.js","webpack:///./node_modules/parse-asn1/fixProc.js","webpack:///./node_modules/browserify-sign/browser/verify.js","webpack:///./node_modules/create-ecdh/browser.js","webpack:///./node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/public-encrypt/browser.js","webpack:///./node_modules/public-encrypt/publicEncrypt.js","webpack:///./node_modules/public-encrypt/privateDecrypt.js","webpack:///./node_modules/randomfill/browser.js","webpack:///./node_modules/webdav/dist/node/factory.js","webpack:///./node_modules/requires-port/index.js","webpack:///./node_modules/querystringify/index.js","webpack:///./node_modules/webdav/dist/node/interface/directoryContents.js","webpack:///./node_modules/util/util.js","webpack:///./node_modules/util/support/isBufferBrowser.js","webpack:///./node_modules/util/node_modules/inherits/inherits_browser.js","webpack:///./node_modules/minimatch/minimatch.js","webpack:///./node_modules/path-browserify/index.js","webpack:///./node_modules/brace-expansion/index.js","webpack:///./node_modules/concat-map/index.js","webpack:///./node_modules/balanced-match/index.js","webpack:///./node_modules/fast-xml-parser/src/parser.js","webpack:///./node_modules/fast-xml-parser/src/node2json.js","webpack:///./node_modules/fast-xml-parser/src/xmlNode.js","webpack:///./node_modules/fast-xml-parser/src/validator.js","webpack:///./node_modules/fast-xml-parser/src/nimndata.js","webpack:///./node_modules/fast-xml-parser/src/node2json_str.js","webpack:///./node_modules/fast-xml-parser/src/json2xml.js","webpack:///./node_modules/nested-property/dist/nested-property.js","webpack:///./node_modules/webdav/dist/node/interface/createDirectory.js","webpack:///./node_modules/webdav/dist/node/interface/custom.js","webpack:///./node_modules/webdav/dist/node/interface/delete.js","webpack:///./node_modules/webdav/dist/node/interface/exists.js","webpack:///./node_modules/webdav/dist/node/interface/getFile.js","webpack:///./node_modules/webdav/dist/node/interface/quota.js","webpack:///./node_modules/webdav/dist/node/interface/moveFile.js","webpack:///./node_modules/webdav/dist/node/interface/copyFile.js","webpack:///./node_modules/webdav/dist/node/interface/putFile.js"],"names":["Object","create","module","exports","ctor","superCtor","super_","prototype","constructor","value","enumerable","writable","configurable","TempCtor","buffer","Buffer","copyProps","src","dst","key","SafeBuffer","arg","encodingOrOffset","length","from","alloc","allocUnsafe","allocUnsafeSlow","TypeError","size","fill","encoding","buf","undefined","SlowBuffer","base64","ieee754","isArray","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","Uint8Array","__proto__","this","Error","ArrayBuffer","array","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","string","isEncoding","actual","write","slice","fromString","obj","isBuffer","len","checked","copy","val","type","data","fromObject","assertSize","i","toString","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","start","end","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","b","n","m","bidirectionalIndexOf","dir","isNaN","arrayIndexOf","indexOf","call","lastIndexOf","arr","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","push","charCodeAt","asciiToBytes","latin1Write","base64Write","ucs2Write","units","c","hi","lo","utf16leToBytes","fromByteArray","Math","min","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","fromCharCode","apply","decodeCodePointsArray","INSPECT_MAX_BYTES","global","foo","subarray","e","typedArraySupport","poolSize","_augment","Symbol","species","defineProperty","_isBuffer","compare","a","x","y","concat","list","pos","swap16","swap32","swap64","arguments","equals","inspect","max","match","join","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","Array","_arr","ret","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","floor","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","set","code","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","trim","replace","stringtrim","base64clean","bind","isUndefined","isObject","isPlainObject","getPrototypeOf","isFunction","forEach","fn","l","hasOwnProperty","isArrayBuffer","isFormData","FormData","isArrayBufferView","isString","isNumber","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","window","document","merge","result","assignValue","extend","thisArg","stripBOM","content","assert","msg","equal","r","utils","BN","minAssert","minUtils","toArray","zero2","encode","getNAF","num","w","bits","naf","bitLength","ws","k","clone","z","mod","andln","isOdd","isubn","iushrn","getJSF","k1","k2","jsf","d1","d2","cmpn","u1","u2","m8","m14","m24","cachedProperty","name","computer","parseBytes","intFromLE","minimatch","require","handleResponseCode","response","err","status","statusText","processGlobFilter","files","glob","filter","file","filename","matchBase","processResponsePayload","isDetailed","headers","webpackPolyfill","deprecate","paths","children","get","inherits","isSurrogatePair","htonl","word","zero8","enc","p","toHex32","endian","join32","split32","rotr32","rotl32","sum32","sum32_3","sum32_4","d","sum32_5","sum64","ah","al","bh","sum64_hi","bl","sum64_lo","sum64_4_hi","ch","cl","dh","dl","carry","sum64_4_lo","sum64_5_hi","eh","el","sum64_5_lo","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","number","base","isBN","negative","words","red","_init","wordSize","parseHex","parseBase","left","right","cmp","_initNumber","_initArray","_parseHex","_parseBase","strip","ceil","off","limbLen","limbPow","total","imuln","_iaddn","dest","_expand","_normSign","zeros","groupSizes","groupBases","smallMulTo","self","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","toBuffer","toArrayLike","ArrayType","reqLength","q","clz32","_countBits","t","_zeroBits","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","add","comb10MulTo","mid","o","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","odd","conjugate","normalize13b","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","addn","subn","iabs","_ishlnsubmul","shift","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","D","g","isEven","yp","xp","im","jm","gcd","_invmp","x1","x2","delta","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","tmp","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","_strip","input","output","outLen","prev","next","mod3","one","nOne","lpow","inv","wnd","current","currentLen","mont","u","nameStartChar","nameRegexp","regexName","RegExp","isExist","v","isEmptyObject","keys","arrayMode","getValue","buildOptions","options","defaultOptions","props","newOptions","isName","exec","getAllMatches","regex","matches","allmatches","index","Transform","StringDecoder","CipherBase","hashMode","_finalOrDigest","final","_final","__final","_decoder","_encoding","update","inputEnc","outputEnc","outData","_update","_toString","setAutoPadding","getAuthTag","setAuthTag","setAAD","_transform","_flush","done","fin","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","args","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","EventEmitter","init","once","emitter","Promise","resolve","reject","eventListener","errorListener","removeListener","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","_addListener","prepend","events","existing","warning","newListener","emit","unshift","warned","count","console","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","setMaxListeners","getMaxListeners","doError","error","er","message","context","handler","listeners","addListener","on","prependListener","prependOnceListener","position","originalListener","pop","spliceOne","removeAllListeners","rawListeners","eventNames","nb","nenc","retried","_normalizeEncoding","normalizeEncoding","text","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8CheckIncomplete","pna","objectKeys","Duplex","util","Readable","Writable","method","readable","allowHalfOpen","onend","_writableState","ended","nextTick","onEndNT","highWaterMark","_readableState","destroyed","_destroy","cb","proto","assign","setPrototypeOf","mergeObjects","obj1","obj2","items","nextItem","crypto","msCrypto","getRandomValues","generated","process","codes","createErrorType","Base","NodeError","_Base","subClass","superClass","arg1","arg2","arg3","getMessage","oneOf","expected","thing","map","determiner","search","this_len","substring","endsWith","getBuffer","Hash","blockSize","finalSize","_block","_finalSize","_blockSize","_len","block","accum","assigned","remainder","digest","rem","lowBits","highBits","hash","_hash","MD5","RIPEMD160","sha","alg","objectToString","isBoolean","isNull","isNullOrUndefined","isSymbol","isRegExp","isError","isPrimitive","BlockHash","pending","pendingTotal","outSize","hmacStrength","padLength","_delta8","_delta32","_pad","_digest","Reporter","DecoderBuffer","EncoderBuffer","reporter","item","isEncoderBuffer","isDecoderBuffer","save","restore","isEmpty","skip","raw","fail","_reporterState","decode","decodeHTMLEntities","WEB","txt","createElement","innerHTML","fromBase64","toBase64","Stream","EE","PassThrough","source","ondata","chunk","pause","ondrain","resume","_isStdio","onclose","didOnEnd","destroy","onerror","cleanup","version","asUInt32Array","scrubVec","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","AES","_key","_reset","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","decryptBlock","m1","scrub","password","salt","keyBits","ivLen","keyLen","iv","used","keyStart","ivStart","BaseCurve","conf","zero","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","curve","precomputed","point","validate","_fixedNafMul","doubles","_getDoubles","I","step","repr","nafW","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","ja","jb","decodePoint","pointFromX","encodeCompressed","_encode","compact","getX","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","asn1","aesid","fixProc","ciphers","compat","parseKeys","passphrase","subtype","ndata","stripped","tag","certificate","tbsCertificate","subjectPublicKeyInfo","PublicKey","algorithm","RSAPublicKey","subjectPublicKey","subjectPrivateKey","params","pub_key","DSAparam","decrypt","kde","kdeparams","iters","algo","cipher","cipherText","keylen","pbkdf2Sync","createDecipheriv","EncryptedPrivateKey","PrivateKey","RSAPrivateKey","privateKey","ECPrivateKey","priv_key","DSAPrivateKey","parameters","signature","xmlNode","parseFloat","attributeNamePrefix","attrNodeName","textNodeName","ignoreAttributes","ignoreNameSpace","allowBooleanAttributes","parseNodeValue","parseAttributeValue","trimValues","cdataTagName","cdataPositionChar","tagValueProcessor","tagName","attrValueProcessor","attrName","stopNodes","processTagValue","parseValue","parseTrueNumberOnly","resolveNameSpace","tagname","tags","prefix","charAt","shouldParse","attrsRegx","buildAttributesMap","attrStr","attrs","attrCollection","closingIndexForOpeningTag","attrBoundary","tagExp","findClosingIndex","xmlData","errMsg","closingIndex","getTraversalObj","xmlObj","currentNode","textData","closeIndex","colonIndex","child","attrsMap","startIndex","parent","childNode","addChild","separatorIndex","trimRight","HashBase","ARRAY16","_a","_b","_c","_d","rotl","fnF","fnG","fnH","fnI","_blockOffset","_length","config","localStorage","trace","ERR_STREAM_PREMATURE_CLOSE","noop","eos","stream","opts","callback","called","onlegacyfinish","onfinish","writableEnded","finished","readableEnded","endEmitted","onrequest","req","setHeader","abort","isRequest","zl","zr","sl","sr","hl","hr","_e","fn1","fn2","fn3","fn4","fn5","ar","br","cr","dr","tl","tr","Algorithm","sha1","sha224","sha256","sha384","sha512","CorkedRequest","_this","entry","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","browser","setImmediate","WritableState","internalUtil","OurUint8Array","realHasInstance","destroyImpl","nop","isDuplex","objectMode","writableObjectMode","hwm","writableHwm","writableHighWaterMark","defaultHwm","finalCalled","needDrain","ending","noDecode","decodeStrings","defaultEncoding","writing","corked","sync","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","_write","writev","_writev","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","prefinish","hasInstance","object","_uint8ArrayToBuffer","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","last","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_undestroy","undestroy","Cipher","bufferOff","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","inputOff","outputOff","first","_finalEncrypt","_finalDecrypt","_unpad","deciphers","modes","createCipher","createCipheriv","Cipheriv","createDecipher","Decipher","Decipheriv","listCiphers","getCiphers","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","Rand","rand","generate","_rand","getBytes","getByte","randomBytes","crt","priv","blinds","getr","blinder","bn","modulus","publicExponent","unblinder","blind","blinded","c1","prime1","c2","prime2","qinv","coefficient","exponent1","m2","exponent2","elliptic","curves","ec","eddsa","pre","PresetCurve","short","edwards","isInfinity","defineCurve","lambda","basis","common","ripemd","hmac","ripemd160","safer","Safer","kStringMaxLength","binding","constants","MAX_LENGTH","MAX_STRING_LENGTH","methods","Node","_baseState","reverseArgs","choice","optional","any","use","useDecoder","explicit","implicit","contains","_wrap","stateProps","cstate","prop","body","_useArgs","def","newKey","_decode","wrapResult","prevObj","present","prevKey","enterKey","_peekTag","_decodeGeneric","_decodeChoice","enterObject","_decodeTag","track","path","_getUse","leaveObject","exitKey","leaveKey","_decodeList","test","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","entity","_use","some","node","_createEncoderBuffer","_encodeValue","_skipDefault","primitive","_encodeChoice","_encodePrimitive","cls","_encodeComposite","JSON","stringify","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","_isPrintstr","errors","ReporterError","rethrow","pathLen","now","inherited","elem","stack","partial","captureStackTrace","reverse","tagClass","0","1","2","3","tagClassByName","tagByName","URL","normalisePath","pathStr","normalisedPath","decodeURIComponent","extractURLPath","fullURL","urlPath","pathname","normaliseHREF","href","required","qs","slashes","protocolre","trimLeft","rules","address","NaN","ignore","query","lolcation","loc","location","finaldestination","protocol","Url","unescape","extractProtocol","rest","parser","relative","extracted","parse","instruction","instructions","url","up","splice","port","host","hostname","username","auth","origin","part","char","ins","xmlParser","nestedProp","getPropertyOfType","normaliseResult","multistatus","normaliseResponse","parseXML","xml","prepareFileFromProps","rawFilename","getlastmodified","lastMod","getcontentlength","rawSize","resourcetype","resourceType","getcontenttype","mimeType","getetag","etag","collection","stat","basename","lastmod","mime","translateDiskSpace","axios","createClient","getPatcher","joinURLParts","fetch","encodePath","replaced","encodeURIComponent","joinURL","parts","reduce","nextPart","partIndex","prepareRequestOptions","requestOptions","methodOptions","httpAgent","httpsAgent","withCredentials","maxContentLength","onUploadProgress","validateStatus","request","paramsSerializer","serializedParams","toISOString","hashmarkIndex","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","adapter","defaults","XMLHttpRequest","transformRequest","transformResponse","timeout","xsrfCookieName","xsrfHeaderName","maxBodyLength","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","requestData","requestHeaders","Authorization","btoa","fullPath","baseURL","open","toUpperCase","onreadystatechange","readyState","responseURL","responseHeaders","getAllResponseHeaders","responseType","responseText","onabort","ontimeout","timeoutErrorMessage","xsrfValue","setRequestHeader","onDownloadProgress","addEventListener","upload","cancelToken","promise","then","cancel","send","enhanceError","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","directMergeKeys","getMergedValue","mergeDeepProperties","axiosKeys","otherKeys","Cancel","HotPatcher","__patcher","md5","ha1Compute","generateBasicAuthHeader","encoded","generateTokenAuthHeader","tokenInfo","token_type","access_token","generateDigestAuthHeader","uri","qop","ncString","nc","ha1","cnonce","realm","nonce","ha2","digestResponse","authValues","opaque","authHeader","_finalized","throwIfNotStringOrBuffer","ReadableState","EElistenerCount","debug","debugUtil","debuglog","createReadableStreamAsyncIterator","BufferList","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","readableObjectMode","pipes","pipesCount","flowing","reading","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","awaitDrain","readingMore","decoder","_read","readableAddChunk","addToFront","skipChunkCheck","emitReadable","emitReadable_","onEofChunk","chunkInvalid","addChunk","maybeReadMore","isPaused","setEncoding","head","clear","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","cleanedUp","pipeOnDrain","event","dests","ev","wrap","asyncIterator","_fromList","iterable","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","rState","ERR_INVALID_OPT_VALUE","duplexKey","highWaterMarkFrom","ERR_MULTIPLE_CALLBACK","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writechunk","rs","needTransform","writeencoding","flush","err2","K","W","Sha256","_w","maj","sigma0","sigma1","gamma0","_f","_g","_h","f","T1","T2","H","Sha512","Ch","xl","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","fh","gh","hh","fl","gl","xh","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","writeInt64BE","readableHwm","readableHighWaterMark","needMoreData","hasStrings","tail","copyFromBufferString","copyFromBuffer","fromListPartial","increasedAwaitDrain","_this2","Legacy","ZEROS","Hmac","blocksize","_alg","ipad","_ipad","opad","_opad","pbkdf2","MAX_ALLOC","iterations","checkParameters","sizes","rmd160","saltLen","shaFunc","getDigest","ipad1","ipad2","run","DK","block1","destPos","hLen","T","U","ip","inL","inR","outL","outR","rip","pc1","r28shl","pc2table","pc2","expand","sTable","substitute","permuteTable","padSplit","group","DESState","DES","_desState","deriveKeys","shiftTable","kL","kR","inp","inOff","outOff","_encrypt","_decrypt","pad","lStart","rStart","keyL","keyR","incr32","getBlock","_cipher","_prev","encrypt","chunkNum","_cache","aes","GHASH","StreamCipher","ck","_ghash","_finID","ghash","toPad","ivBits","calcIv","_secCache","_alen","_mode","_authTag","_called","rump","xorTest","findPrime","simpleSieve","fermatTest","TWENTYFOUR","millerRabin","ONE","TWO","FIVE","TEN","THREE","ELEVEN","FOUR","_getPrimes","gen","n2","brorand","MillerRabin","_randbelow","min_bytes","_randrange","stop","rone","n1","rn1","getDivisor","ch32","maj32","p32","ft_1","s0_256","s1_256","g0_256","g1_256","shaCommon","sha256_K","SHA256","sha512_K","SHA512","ch64_hi","yh","yl","zh","ch64_lo","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","move","_move","for","modrn","allocate","_toArrayLikeLE","_toArrayLikeBE","isNegNum","bignum","define","decoders","encoders","der","pem","DEREncoder","tree","DERNode","encodedTag","encodeTag","header","lenOctets","unused","id","values","ident","objid","time","date","Date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","sign","_getEncoder","dataBuffer","defaultBuffer","DERDecoder","derDecodeTag","oct","tagStr","derDecodeLen","decodedTag","_skipUntilEnd","possibleEnd","numstr","printstr","identifiers","subident","second","year","mon","day","hour","sec","UTC","_getDecoder","createHash","i2ops","seed","paddedMsg","normalizeArray","allowAboveRoot","splitPathRe","posix","posixSplitPath","resolvedPath","resolvedAbsolute","cwd","normalize","isAbsolute","trailingSlash","segment","to","fromParts","toParts","samePartsLength","outputParts","_makeLong","dirname","root","extname","format","pathObject","sep","pathString","allParts","delimiter","urlTools","parseStat","responseItem","propstat","filePath","getStat","remoteURL","Accept","Depth","details","responseHandlers","NOOP","createReadStream","outStream","PassThroughStream","rangeHeader","range","Range","getFileStream","catch","createWriteStream","writeStream","overwrite","maxRedirects","setTimeout","Axios","mergeConfig","createInstance","defaultConfig","instance","instanceConfig","CancelToken","isCancel","all","promises","spread","default","InterceptorManager","dispatchRequest","interceptors","chain","interceptor","fulfilled","rejected","getUri","handlers","eject","transformData","throwIfCancellationRequested","throwIfRequested","reason","fns","normalizedName","isAxiosError","description","fileName","lineNumber","columnNumber","expires","domain","secure","cookie","toGMTString","remove","isAbsoluteURL","combineURLs","requestedURL","relativeURL","ignoreDuplicateOf","line","originURL","msie","userAgent","urlParsingNode","resolveURL","setAttribute","requestURL","executor","resolvePromise","token","strArray","resultArray","component","definition","parseAuth","uid","random","makeNonce","patchInline","hasDigestAuth","response2","sequence","createNewItem","original","_configuration","registry","getEmptyAction","__type__","allowTargetOverrides","configuration","foreignKey","isPatched","patch","execute","newAction","freeExports","freeGlobal","InvalidCharacterError","TABLE","REGEX_SPACE_CHARACTERS","bitStorage","bitCounter","regexAstralSymbols","regexAsciiWhitelist","regexBmpWhitelist","regexEncodeNonAscii","encodeMap","'","regexEscape","escapeMap","regexInvalidEntity","regexInvalidRawCodePoint","regexDecode","decodeMap","decodeMapLegacy","decodeMapNumeric","invalidReferenceCodePoints","stringFromCharCode","has","propertyName","codePointToSymbol","strict","parseError","hexEscape","decEscape","encodeEverything","useNamedReferences","allowUnsafeSymbols","escapeCodePoint","decimal","escapeBmpSymbol","symbol","$0","high","low","html","$1","$2","$3","$4","$5","$6","$7","$8","semicolon","decDigits","hexDigits","reference","isAttributeValue","he","user","pass","rng","pseudoRandomBytes","prng","createHmac","algos","algoKeys","hashes","getHashes","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createSign","Sign","createVerify","Verify","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","lookup","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","rt","log","LN2","pipeline","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","_defineProperty","_defineProperties","descriptor","custom","Constructor","_classCallCheck","protoProps","staticProps","_getString","_getBuffer","getOwnPropertyDescriptors","defineProperties","_objectSpread","depth","customInspect","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","iter","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","lastPromise","wrapForNext","_Object$create","iterator","ERR_MISSING_ARGS","destroyer","closed","popCallback","streams","destroys","Sha","rotl30","ft","Sha1","rotl5","Sha224","Sha384","ZERO_BUF","subtle","toBrowser","checks","browserPbkdf2","importKey","deriveBits","prom","checkNative","resp","aesModes","desModes","ebtk","suite","des","instantiate","EDE","modeName","_des","des3","CBCState","_cbcInit","_cbcState","superProto","EDEState","k3","_edeState","MODES","AuthCipher","Splitter","_autopadding","PADDING","cache","setTo","padBuff","encryptStart","encryptByte","byteParam","shiftIn","ZEROES","fromArray","_multiply","lsbVi","Vi","Zi","abl","_last","padded","unpad","autoPadding","DH","ENCODINGS","generator","genc","generatePrime","SEVEN","setPublicKey","pub","_pub","setPrivateKey","_priv","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","formatReturnValue","hex","checkPrime","__gen","generateKeys","_gen","getPublicKey","computeSecret","other","secret","getPrime","front","getPrivateKey","getGenerator","verify","algorithms","_hashType","_tag","_signType","sig","EC","getKey","hlen","hbits","bits2int","bits2octets","obits","makeKey","kv","makeR","hashType","signType","curveId","keyFromPrivate","toDER","ecSign","dsaSign","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","Point","isRed","inf","JPoint","zOne","betas","_getEndoRoots","lambdas","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","y2","len1","_endoSplit","v1","v2","p1","p2","q1","q2","ax","rhs","_endoWnafMulAdd","npoints","ncoeffs","fromJSON","endoMul","obj2point","nx","ny","ys1","dyinv","mulAdd","jmulAdd","_precompute","negate","zinv","zinv2","ay","pz2","z2","h2","h3","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","eqXToP","zs","xc","MontCurve","i4","a24","aa","bb","diffAdd","da","jumlAdd","EdwardsCurve","twisted","mOneA","dd","oneC","_mulA","_mulC","lhs","pointFromY","_extDbl","nt","_projDbl","_extAdd","_projAdd","zi","sha1_K","SHA1","SHA224","SHA384","Kh","E","Ah","Bh","Dh","Eh","rh","sh","inner","outer","HmacDRBG","KeyPair","Signature","nh","keyPair","fromPrivate","keyFromPublic","fromPublic","genKeyPair","drbg","pers","persEnc","entropy","entropyEnc","ns2","_truncateToN","truncOnly","bkey","getPrivate","ns1","kp","kpX","recoveryParam","canonical","sinv","getPublic","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","predResist","minEntropy","_reseed","reseedInterval","V","nonceEnc","_hmac","kmac","reseed","addEnc","temp","_importPrivate","privEnc","_importPublic","pubEnc","derive","_importDER","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","slen","backHalf","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","messagePrefix","Rencoded","encodePoint","s_","pubBytes","S","makeSignature","SG","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","seq","int","AlgorithmIdentifier","bitstr","null_","PrivateKeyInfo","octstr","EncryptedPrivateKeyInfo","ECParameters","namedCurve","Entity","_createNamed","Generated","_initNamed","PEMEncoder","label","PEMDecoder","lines","_reverse","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","bool","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherKey","match2","checkValue","pubkey","ecVerify","unpacked","montp","dsaVerify","padNum","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","p256","secp256r1","secp192r1","p384","p521","inenc","mgf","withPublic","publicKey","iHash","hLen2","ps","dblen","maskedDb","maskedSeed","oaep","cur","nonZero","pkcs1","zBuffer","db","dif","oldBrowser","safeBuffer","randombytes","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","authTools","directoryContents","createDir","deletion","pathsExist","getFile","quota","putFile","stats","runtimeOptions","remotePath","copyFile","targetRemotePath","copyOptions","createDirectory","dirPath","createOptions","remoteFilename","createStream","customRequest","customOptions","deleteFile","deleteOptions","exists","existsOptions","pathExists","getDirectoryContents","getOptions","getFileContents","getFileContentsString","getFileContentsBuffer","getFileDownloadLink","getFileLink","getFileUploadLink","putOptions","getQuota","moveFile","moveOptions","putFileContents","pairs","pathPosix","deep","serverBasePath","requestPath","serverBase","responseItems","getDirectoryFiles","descriptors","formatRegExp","objects","noDeprecation","throwDeprecation","traceDeprecation","debugEnviron","debugs","seen","stylize","stylizeNoColor","colors","showHidden","_extend","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","simple","formatPrimitive","visibleKeys","idx","arrayToHash","formatError","braces","toUTCString","formatProperty","formatArray","numLinesEst","reduceToSingleString","desc","env","NODE_DEBUG","pid","months","timestamp","getHours","getMinutes","getSeconds","getDate","getMonth","kCustomPromisifiedSymbol","callbackifyOnRejected","newReason","promisify","promiseResolve","promiseReject","callbackify","callbackified","maybeCb","rej","Minimatch","GLOBSTAR","plTypes","close","reSpecials","slashSplit","pattern","nocomment","regexp","comment","empty","make","braceExpand","nobrace","orig","_made","parseNegate","globSet","globParts","si","negateOffset","nonegate","isSub","noglobstar","stateChar","hasMagic","nocase","escaping","patternListStack","negativeLists","inClass","reClassStart","classStart","patternStart","dot","clearStateChar","qmark","noext","reStart","pl","reEnd","cs","sp","SUBPARSE","addPatternStart","nl","nlBefore","nlFirst","nlLast","nlAfter","openParensBefore","cleanAfter","dollar","globUnescape","flags","regExp","_glob","_src","makeRe","twoStar","regExpEscape","ex","nonull","matchOne","flipNegate","fi","pi","hit","fr","pr","swallowee","hasRoot","matchedSlash","startDot","startPart","preDotState","concatMap","balanced","isTop","expansions","isNumericSequence","isAlphaSequence","isSequence","isOptions","post","escClose","parseCommaParts","postParts","embrace","numeric","incr","isPadded","expansion","escSlash","escOpen","escComma","escPeriod","escapeBraces","unescapeBraces","maybeMatch","reg","begs","beg","ai","bi","nodeToJson","xmlToNodeobj","x2xmlnode","validator","validationOption","traversableObj","convertToJson","convertTonimn","convert2nimn","convertToJsonString","j2xParser","parseToNimn","schema","jObj","readPI","getErrorObject","getLineNumberForPosition","readCommentAndCDATA","angleBracketsCount","tagFound","reachedRoot","closingTag","readAttributeStr","isValid","validateAttributeString","tagClosed","otg","afterAmp","validateAmpersand","startChar","validAttrStrRegxp","attrNames","getPositionFromMatch","validateAttrName","validateNumberAmpersand","chars","nilChar","missingChar","nilPremitive","missingPremitive","emptyChar","emptyValue","boundryChar","objStart","arrStart","arrayEnd","charsArr","e_schema","hasValidData","itemSchema","arr_len","arr_i","processValue","isAppChar","x2j","_cToJsonStr","level","indentBy","supressEmptyNode","Parser","isAttribute","attrPrefixLen","isCDATA","replaceCDATAstr","replaceCDATAarr","indentate","tagEndChar","newLine","buildTextNode","buildEmptyTextNode","buildObjNode","buildEmptyObjNode","buildTextValNode","buildObjectNode","cdata","repeat","startsWith","j2x","attr","arrLen","Ks","L","_typeof","_possibleConstructorReturn","ReferenceError","_assertThisInitialized","_wrapNativeSuper","Class","Map","Wrapper","_construct","_getPrototypeOf","_setPrototypeOf","Parent","_isNativeReflectConstruct","construct","sham","Proxy","ObjectPrototypeMutationError","_Error","_inherits","traverse","segments","_loop","currentSegment","remainingSegments","pathToHere","_ret","isLastSegment","property","currentObject","currentProperty","nextPropIsNumber","isInteger","nextPropIsArrayWildcard","own","hasOwn","isIn","objectInPath","validPath","authPart","authContents","parseQuota","quotaUsed","quotaAvail","available","destination","Destination"],"mappings":"yFAA6B,mBAAlBA,OAAOC,OAEhBC,EAAOC,QAAU,SAAkBC,EAAMC,GACnCA,IACFD,EAAKE,OAASD,EACdD,EAAKG,UAAYP,OAAOC,OAAOI,EAAUE,UAAW,CAClDC,YAAa,CACXC,MAAOL,EACPM,YAAY,EACZC,UAAU,EACVC,cAAc,OAOtBV,EAAOC,QAAU,SAAkBC,EAAMC,GACvC,GAAIA,EAAW,CACbD,EAAKE,OAASD,EACd,IAAIQ,EAAW,aACfA,EAASN,UAAYF,EAAUE,UAC/BH,EAAKG,UAAY,IAAIM,EACrBT,EAAKG,UAAUC,YAAcJ,K,gBCtBnC,IAAIU,EAAS,EAAQ,KACjBC,EAASD,EAAOC,OAGpB,SAASC,EAAWC,EAAKC,GACvB,IAAK,IAAIC,KAAOF,EACdC,EAAIC,GAAOF,EAAIE,GAWnB,SAASC,EAAYC,EAAKC,EAAkBC,GAC1C,OAAOR,EAAOM,EAAKC,EAAkBC,GATnCR,EAAOS,MAAQT,EAAOU,OAASV,EAAOW,aAAeX,EAAOY,gBAC9DzB,EAAOC,QAAUW,GAGjBE,EAAUF,EAAQX,GAClBA,EAAQY,OAASK,GAQnBJ,EAAUD,EAAQK,GAElBA,EAAWI,KAAO,SAAUH,EAAKC,EAAkBC,GACjD,GAAmB,iBAARF,EACT,MAAM,IAAIO,UAAU,iCAEtB,OAAOb,EAAOM,EAAKC,EAAkBC,IAGvCH,EAAWK,MAAQ,SAAUI,EAAMC,EAAMC,GACvC,GAAoB,iBAATF,EACT,MAAM,IAAID,UAAU,6BAEtB,IAAII,EAAMjB,EAAOc,GAUjB,YATaI,IAATH,EACsB,iBAAbC,EACTC,EAAIF,KAAKA,EAAMC,GAEfC,EAAIF,KAAKA,GAGXE,EAAIF,KAAK,GAEJE,GAGTZ,EAAWM,YAAc,SAAUG,GACjC,GAAoB,iBAATA,EACT,MAAM,IAAID,UAAU,6BAEtB,OAAOb,EAAOc,IAGhBT,EAAWO,gBAAkB,SAAUE,GACrC,GAAoB,iBAATA,EACT,MAAM,IAAID,UAAU,6BAEtB,OAAOd,EAAOoB,WAAWL,K,8BC5D3B;;;;;;;AAUA,IAAIM,EAAS,EAAQ,KACjBC,EAAU,EAAQ,KAClBC,EAAU,EAAQ,KAmDtB,SAASC,IACP,OAAOvB,EAAOwB,oBACV,WACA,WAGN,SAASC,EAAcC,EAAMlB,GAC3B,GAAIe,IAAef,EACjB,MAAM,IAAImB,WAAW,8BAcvB,OAZI3B,EAAOwB,qBAETE,EAAO,IAAIE,WAAWpB,IACjBqB,UAAY7B,EAAOR,WAGX,OAATkC,IACFA,EAAO,IAAI1B,EAAOQ,IAEpBkB,EAAKlB,OAASA,GAGTkB,EAaT,SAAS1B,EAAQM,EAAKC,EAAkBC,GACtC,KAAKR,EAAOwB,qBAAyBM,gBAAgB9B,GACnD,OAAO,IAAIA,EAAOM,EAAKC,EAAkBC,GAI3C,GAAmB,iBAARF,EAAkB,CAC3B,GAAgC,iBAArBC,EACT,MAAM,IAAIwB,MACR,qEAGJ,OAAOpB,EAAYmB,KAAMxB,GAE3B,OAAOG,EAAKqB,KAAMxB,EAAKC,EAAkBC,GAW3C,SAASC,EAAMiB,EAAMhC,EAAOa,EAAkBC,GAC5C,GAAqB,iBAAVd,EACT,MAAM,IAAImB,UAAU,yCAGtB,MAA2B,oBAAhBmB,aAA+BtC,aAAiBsC,YA6H7D,SAA0BN,EAAMO,EAAOC,EAAY1B,GAGjD,GAFAyB,EAAME,WAEFD,EAAa,GAAKD,EAAME,WAAaD,EACvC,MAAM,IAAIP,WAAW,6BAGvB,GAAIM,EAAME,WAAaD,GAAc1B,GAAU,GAC7C,MAAM,IAAImB,WAAW,6BAIrBM,OADiBf,IAAfgB,QAAuChB,IAAXV,EACtB,IAAIoB,WAAWK,QACHf,IAAXV,EACD,IAAIoB,WAAWK,EAAOC,GAEtB,IAAIN,WAAWK,EAAOC,EAAY1B,GAGxCR,EAAOwB,qBAETE,EAAOO,GACFJ,UAAY7B,EAAOR,UAGxBkC,EAAOU,EAAcV,EAAMO,GAE7B,OAAOP,EAvJEW,CAAgBX,EAAMhC,EAAOa,EAAkBC,GAGnC,iBAAVd,EAwFb,SAAqBgC,EAAMY,EAAQtB,GACT,iBAAbA,GAAsC,KAAbA,IAClCA,EAAW,QAGb,IAAKhB,EAAOuC,WAAWvB,GACrB,MAAM,IAAIH,UAAU,8CAGtB,IAAIL,EAAwC,EAA/B2B,EAAWG,EAAQtB,GAG5BwB,GAFJd,EAAOD,EAAaC,EAAMlB,IAERiC,MAAMH,EAAQtB,GAE5BwB,IAAWhC,IAIbkB,EAAOA,EAAKgB,MAAM,EAAGF,IAGvB,OAAOd,EA5GEiB,CAAWjB,EAAMhC,EAAOa,GAsJnC,SAAqBmB,EAAMkB,GACzB,GAAI5C,EAAO6C,SAASD,GAAM,CACxB,IAAIE,EAA4B,EAAtBC,EAAQH,EAAIpC,QAGtB,OAAoB,KAFpBkB,EAAOD,EAAaC,EAAMoB,IAEjBtC,QAIToC,EAAII,KAAKtB,EAAM,EAAG,EAAGoB,GAHZpB,EAOX,GAAIkB,EAAK,CACP,GAA4B,oBAAhBZ,aACRY,EAAI7C,kBAAkBiC,aAAgB,WAAYY,EACpD,MAA0B,iBAAfA,EAAIpC,SA+8CLyC,EA/8CkCL,EAAIpC,SAg9CrCyC,EA/8CFxB,EAAaC,EAAM,GAErBU,EAAcV,EAAMkB,GAG7B,GAAiB,WAAbA,EAAIM,MAAqB5B,EAAQsB,EAAIO,MACvC,OAAOf,EAAcV,EAAMkB,EAAIO,MAw8CrC,IAAgBF,EAp8Cd,MAAM,IAAIpC,UAAU,sFA9KbuC,CAAW1B,EAAMhC,GA4B1B,SAAS2D,EAAYvC,GACnB,GAAoB,iBAATA,EACT,MAAM,IAAID,UAAU,oCACf,GAAIC,EAAO,EAChB,MAAM,IAAIa,WAAW,wCA4BzB,SAAShB,EAAae,EAAMZ,GAG1B,GAFAuC,EAAWvC,GACXY,EAAOD,EAAaC,EAAMZ,EAAO,EAAI,EAAoB,EAAhBiC,EAAQjC,KAC5Cd,EAAOwB,oBACV,IAAK,IAAI8B,EAAI,EAAGA,EAAIxC,IAAQwC,EAC1B5B,EAAK4B,GAAK,EAGd,OAAO5B,EAwCT,SAASU,EAAeV,EAAMO,GAC5B,IAAIzB,EAASyB,EAAMzB,OAAS,EAAI,EAA4B,EAAxBuC,EAAQd,EAAMzB,QAClDkB,EAAOD,EAAaC,EAAMlB,GAC1B,IAAK,IAAI8C,EAAI,EAAGA,EAAI9C,EAAQ8C,GAAK,EAC/B5B,EAAK4B,GAAgB,IAAXrB,EAAMqB,GAElB,OAAO5B,EA+DT,SAASqB,EAASvC,GAGhB,GAAIA,GAAUe,IACZ,MAAM,IAAII,WAAW,0DACaJ,IAAagC,SAAS,IAAM,UAEhE,OAAgB,EAAT/C,EAsFT,SAAS2B,EAAYG,EAAQtB,GAC3B,GAAIhB,EAAO6C,SAASP,GAClB,OAAOA,EAAO9B,OAEhB,GAA2B,oBAAhBwB,aAA6D,mBAAvBA,YAAYwB,SACxDxB,YAAYwB,OAAOlB,IAAWA,aAAkBN,aACnD,OAAOM,EAAOH,WAEM,iBAAXG,IACTA,EAAS,GAAKA,GAGhB,IAAIQ,EAAMR,EAAO9B,OACjB,GAAY,IAARsC,EAAW,OAAO,EAItB,IADA,IAAIW,GAAc,IAEhB,OAAQzC,GACN,IAAK,QACL,IAAK,SACL,IAAK,SACH,OAAO8B,EACT,IAAK,OACL,IAAK,QACL,UAAK5B,EACH,OAAOwC,EAAYpB,GAAQ9B,OAC7B,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAa,EAANsC,EACT,IAAK,MACH,OAAOA,IAAQ,EACjB,IAAK,SACH,OAAOa,EAAcrB,GAAQ9B,OAC/B,QACE,GAAIiD,EAAa,OAAOC,EAAYpB,GAAQ9B,OAC5CQ,GAAY,GAAKA,GAAU4C,cAC3BH,GAAc,GAMtB,SAASI,EAAc7C,EAAU8C,EAAOC,GACtC,IAAIN,GAAc,EAclB,SALcvC,IAAV4C,GAAuBA,EAAQ,KACjCA,EAAQ,GAINA,EAAQhC,KAAKtB,OACf,MAAO,GAOT,SAJYU,IAAR6C,GAAqBA,EAAMjC,KAAKtB,UAClCuD,EAAMjC,KAAKtB,QAGTuD,GAAO,EACT,MAAO,GAOT,IAHAA,KAAS,KACTD,KAAW,GAGT,MAAO,GAKT,IAFK9C,IAAUA,EAAW,UAGxB,OAAQA,GACN,IAAK,MACH,OAAOgD,EAASlC,KAAMgC,EAAOC,GAE/B,IAAK,OACL,IAAK,QACH,OAAOE,EAAUnC,KAAMgC,EAAOC,GAEhC,IAAK,QACH,OAAOG,EAAWpC,KAAMgC,EAAOC,GAEjC,IAAK,SACL,IAAK,SACH,OAAOI,EAAYrC,KAAMgC,EAAOC,GAElC,IAAK,SACH,OAAOK,EAAYtC,KAAMgC,EAAOC,GAElC,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOM,EAAavC,KAAMgC,EAAOC,GAEnC,QACE,GAAIN,EAAa,MAAM,IAAI5C,UAAU,qBAAuBG,GAC5DA,GAAYA,EAAW,IAAI4C,cAC3BH,GAAc,GAStB,SAASa,EAAMC,EAAGC,EAAGC,GACnB,IAAInB,EAAIiB,EAAEC,GACVD,EAAEC,GAAKD,EAAEE,GACTF,EAAEE,GAAKnB,EAmIT,SAASoB,EAAsB3E,EAAQkD,EAAKf,EAAYlB,EAAU2D,GAEhE,GAAsB,IAAlB5E,EAAOS,OAAc,OAAQ,EAmBjC,GAhB0B,iBAAf0B,GACTlB,EAAWkB,EACXA,EAAa,GACJA,EAAa,WACtBA,EAAa,WACJA,GAAc,aACvBA,GAAc,YAEhBA,GAAcA,EACV0C,MAAM1C,KAERA,EAAayC,EAAM,EAAK5E,EAAOS,OAAS,GAItC0B,EAAa,IAAGA,EAAanC,EAAOS,OAAS0B,GAC7CA,GAAcnC,EAAOS,OAAQ,CAC/B,GAAImE,EAAK,OAAQ,EACZzC,EAAanC,EAAOS,OAAS,OAC7B,GAAI0B,EAAa,EAAG,CACzB,IAAIyC,EACC,OAAQ,EADJzC,EAAa,EAUxB,GALmB,iBAARe,IACTA,EAAMjD,EAAOS,KAAKwC,EAAKjC,IAIrBhB,EAAO6C,SAASI,GAElB,OAAmB,IAAfA,EAAIzC,QACE,EAEHqE,EAAa9E,EAAQkD,EAAKf,EAAYlB,EAAU2D,GAClD,GAAmB,iBAAR1B,EAEhB,OADAA,GAAY,IACRjD,EAAOwB,qBACiC,mBAAjCI,WAAWpC,UAAUsF,QAC1BH,EACK/C,WAAWpC,UAAUsF,QAAQC,KAAKhF,EAAQkD,EAAKf,GAE/CN,WAAWpC,UAAUwF,YAAYD,KAAKhF,EAAQkD,EAAKf,GAGvD2C,EAAa9E,EAAQ,CAAEkD,GAAOf,EAAYlB,EAAU2D,GAG7D,MAAM,IAAI9D,UAAU,wCAGtB,SAASgE,EAAcI,EAAKhC,EAAKf,EAAYlB,EAAU2D,GACrD,IA0BIrB,EA1BA4B,EAAY,EACZC,EAAYF,EAAIzE,OAChB4E,EAAYnC,EAAIzC,OAEpB,QAAiBU,IAAbF,IAEe,UADjBA,EAAWqE,OAAOrE,GAAU4C,gBACY,UAAb5C,GACV,YAAbA,GAAuC,aAAbA,GAAyB,CACrD,GAAIiE,EAAIzE,OAAS,GAAKyC,EAAIzC,OAAS,EACjC,OAAQ,EAEV0E,EAAY,EACZC,GAAa,EACbC,GAAa,EACblD,GAAc,EAIlB,SAASoD,EAAMrE,EAAKqC,GAClB,OAAkB,IAAd4B,EACKjE,EAAIqC,GAEJrC,EAAIsE,aAAajC,EAAI4B,GAKhC,GAAIP,EAAK,CACP,IAAIa,GAAc,EAClB,IAAKlC,EAAIpB,EAAYoB,EAAI6B,EAAW7B,IAClC,GAAIgC,EAAKL,EAAK3B,KAAOgC,EAAKrC,GAAqB,IAAhBuC,EAAoB,EAAIlC,EAAIkC,IAEzD,IADoB,IAAhBA,IAAmBA,EAAalC,GAChCA,EAAIkC,EAAa,IAAMJ,EAAW,OAAOI,EAAaN,OAEtC,IAAhBM,IAAmBlC,GAAKA,EAAIkC,GAChCA,GAAc,OAKlB,IADItD,EAAakD,EAAYD,IAAWjD,EAAaiD,EAAYC,GAC5D9B,EAAIpB,EAAYoB,GAAK,EAAGA,IAAK,CAEhC,IADA,IAAImC,GAAQ,EACHC,EAAI,EAAGA,EAAIN,EAAWM,IAC7B,GAAIJ,EAAKL,EAAK3B,EAAIoC,KAAOJ,EAAKrC,EAAKyC,GAAI,CACrCD,GAAQ,EACR,MAGJ,GAAIA,EAAO,OAAOnC,EAItB,OAAQ,EAeV,SAASqC,EAAU1E,EAAKqB,EAAQsD,EAAQpF,GACtCoF,EAASC,OAAOD,IAAW,EAC3B,IAAIE,EAAY7E,EAAIT,OAASoF,EACxBpF,GAGHA,EAASqF,OAAOrF,IACHsF,IACXtF,EAASsF,GAJXtF,EAASsF,EASX,IAAIC,EAASzD,EAAO9B,OACpB,GAAIuF,EAAS,GAAM,EAAG,MAAM,IAAIlF,UAAU,sBAEtCL,EAASuF,EAAS,IACpBvF,EAASuF,EAAS,GAEpB,IAAK,IAAIzC,EAAI,EAAGA,EAAI9C,IAAU8C,EAAG,CAC/B,IAAI0C,EAASC,SAAS3D,EAAO4D,OAAW,EAAJ5C,EAAO,GAAI,IAC/C,GAAIsB,MAAMoB,GAAS,OAAO1C,EAC1BrC,EAAI2E,EAAStC,GAAK0C,EAEpB,OAAO1C,EAGT,SAAS6C,EAAWlF,EAAKqB,EAAQsD,EAAQpF,GACvC,OAAO4F,EAAW1C,EAAYpB,EAAQrB,EAAIT,OAASoF,GAAS3E,EAAK2E,EAAQpF,GAG3E,SAAS6F,EAAYpF,EAAKqB,EAAQsD,EAAQpF,GACxC,OAAO4F,EAq6BT,SAAuBE,GAErB,IADA,IAAIC,EAAY,GACPjD,EAAI,EAAGA,EAAIgD,EAAI9F,SAAU8C,EAEhCiD,EAAUC,KAAyB,IAApBF,EAAIG,WAAWnD,IAEhC,OAAOiD,EA36BWG,CAAapE,GAASrB,EAAK2E,EAAQpF,GAGvD,SAASmG,EAAa1F,EAAKqB,EAAQsD,EAAQpF,GACzC,OAAO6F,EAAWpF,EAAKqB,EAAQsD,EAAQpF,GAGzC,SAASoG,EAAa3F,EAAKqB,EAAQsD,EAAQpF,GACzC,OAAO4F,EAAWzC,EAAcrB,GAASrB,EAAK2E,EAAQpF,GAGxD,SAASqG,EAAW5F,EAAKqB,EAAQsD,EAAQpF,GACvC,OAAO4F,EAk6BT,SAAyBE,EAAKQ,GAG5B,IAFA,IAAIC,EAAGC,EAAIC,EACPV,EAAY,GACPjD,EAAI,EAAGA,EAAIgD,EAAI9F,WACjBsG,GAAS,GAAK,KADaxD,EAGhCyD,EAAIT,EAAIG,WAAWnD,GACnB0D,EAAKD,GAAK,EACVE,EAAKF,EAAI,IACTR,EAAUC,KAAKS,GACfV,EAAUC,KAAKQ,GAGjB,OAAOT,EA/6BWW,CAAe5E,EAAQrB,EAAIT,OAASoF,GAAS3E,EAAK2E,EAAQpF,GAkF9E,SAAS4D,EAAanD,EAAK6C,EAAOC,GAChC,OAAc,IAAVD,GAAeC,IAAQ9C,EAAIT,OACtBY,EAAO+F,cAAclG,GAErBG,EAAO+F,cAAclG,EAAIyB,MAAMoB,EAAOC,IAIjD,SAASE,EAAWhD,EAAK6C,EAAOC,GAC9BA,EAAMqD,KAAKC,IAAIpG,EAAIT,OAAQuD,GAI3B,IAHA,IAAIuD,EAAM,GAENhE,EAAIQ,EACDR,EAAIS,GAAK,CACd,IAQMwD,EAAYC,EAAWC,EAAYC,EARrCC,EAAY1G,EAAIqC,GAChBsE,EAAY,KACZC,EAAoBF,EAAY,IAAQ,EACvCA,EAAY,IAAQ,EACpBA,EAAY,IAAQ,EACrB,EAEJ,GAAIrE,EAAIuE,GAAoB9D,EAG1B,OAAQ8D,GACN,KAAK,EACCF,EAAY,MACdC,EAAYD,GAEd,MACF,KAAK,EAEyB,MAAV,KADlBJ,EAAatG,EAAIqC,EAAI,OAEnBoE,GAA6B,GAAZC,IAAqB,EAAoB,GAAbJ,GACzB,MAClBK,EAAYF,GAGhB,MACF,KAAK,EACHH,EAAatG,EAAIqC,EAAI,GACrBkE,EAAYvG,EAAIqC,EAAI,GACQ,MAAV,IAAbiE,IAAsD,MAAV,IAAZC,KACnCE,GAA6B,GAAZC,IAAoB,IAAoB,GAAbJ,IAAsB,EAAmB,GAAZC,GACrD,OAAUE,EAAgB,OAAUA,EAAgB,SACtEE,EAAYF,GAGhB,MACF,KAAK,EACHH,EAAatG,EAAIqC,EAAI,GACrBkE,EAAYvG,EAAIqC,EAAI,GACpBmE,EAAaxG,EAAIqC,EAAI,GACO,MAAV,IAAbiE,IAAsD,MAAV,IAAZC,IAAsD,MAAV,IAAbC,KAClEC,GAA6B,GAAZC,IAAoB,IAAqB,GAAbJ,IAAsB,IAAmB,GAAZC,IAAqB,EAAoB,GAAbC,GAClF,OAAUC,EAAgB,UAC5CE,EAAYF,GAMJ,OAAdE,GAGFA,EAAY,MACZC,EAAmB,GACVD,EAAY,QAErBA,GAAa,MACbN,EAAId,KAAKoB,IAAc,GAAK,KAAQ,OACpCA,EAAY,MAAqB,KAAZA,GAGvBN,EAAId,KAAKoB,GACTtE,GAAKuE,EAGP,OAQF,SAAgCC,GAC9B,IAAIhF,EAAMgF,EAAWtH,OACrB,GAAIsC,GAJqB,KAKvB,OAAOuC,OAAO0C,aAAaC,MAAM3C,OAAQyC,GAI3C,IAAIR,EAAM,GACNhE,EAAI,EACR,KAAOA,EAAIR,GACTwE,GAAOjC,OAAO0C,aAAaC,MACzB3C,OACAyC,EAAWpF,MAAMY,EAAGA,GAdC,OAiBzB,OAAOgE,EAvBAW,CAAsBX,GA98B/BlI,EAAQY,OAASA,EACjBZ,EAAQ+B,WAoTR,SAAqBX,IACdA,GAAUA,IACbA,EAAS,GAEX,OAAOR,EAAOU,OAAOF,IAvTvBpB,EAAQ8I,kBAAoB,GA0B5BlI,EAAOwB,yBAAqDN,IAA/BiH,EAAO3G,oBAChC2G,EAAO3G,oBAQX,WACE,IACE,IAAIyD,EAAM,IAAIrD,WAAW,GAEzB,OADAqD,EAAIpD,UAAY,CAACA,UAAWD,WAAWpC,UAAW4I,IAAK,WAAc,OAAO,KACvD,KAAdnD,EAAImD,OACiB,mBAAjBnD,EAAIoD,UACuB,IAAlCpD,EAAIoD,SAAS,EAAG,GAAGlG,WACvB,MAAOmG,GACP,OAAO,GAfPC,GAKJnJ,EAAQmC,WAAaA,IAkErBvB,EAAOwI,SAAW,KAGlBxI,EAAOyI,SAAW,SAAUxD,GAE1B,OADAA,EAAIpD,UAAY7B,EAAOR,UAChByF,GA2BTjF,EAAOS,KAAO,SAAUf,EAAOa,EAAkBC,GAC/C,OAAOC,EAAK,KAAMf,EAAOa,EAAkBC,IAGzCR,EAAOwB,sBACTxB,EAAOR,UAAUqC,UAAYD,WAAWpC,UACxCQ,EAAO6B,UAAYD,WACG,oBAAX8G,QAA0BA,OAAOC,SACxC3I,EAAO0I,OAAOC,WAAa3I,GAE7Bf,OAAO2J,eAAe5I,EAAQ0I,OAAOC,QAAS,CAC5CjJ,MAAO,KACPG,cAAc,KAiCpBG,EAAOU,MAAQ,SAAUI,EAAMC,EAAMC,GACnC,OArBF,SAAgBU,EAAMZ,EAAMC,EAAMC,GAEhC,OADAqC,EAAWvC,GACPA,GAAQ,EACHW,EAAaC,EAAMZ,QAEfI,IAATH,EAIyB,iBAAbC,EACVS,EAAaC,EAAMZ,GAAMC,KAAKA,EAAMC,GACpCS,EAAaC,EAAMZ,GAAMC,KAAKA,GAE7BU,EAAaC,EAAMZ,GAQnBJ,CAAM,KAAMI,EAAMC,EAAMC,IAiBjChB,EAAOW,YAAc,SAAUG,GAC7B,OAAOH,EAAY,KAAMG,IAK3Bd,EAAOY,gBAAkB,SAAUE,GACjC,OAAOH,EAAY,KAAMG,IAiH3Bd,EAAO6C,SAAW,SAAmB0B,GACnC,QAAe,MAALA,IAAaA,EAAEsE,YAG3B7I,EAAO8I,QAAU,SAAkBC,EAAGxE,GACpC,IAAKvE,EAAO6C,SAASkG,KAAO/I,EAAO6C,SAAS0B,GAC1C,MAAM,IAAI1D,UAAU,6BAGtB,GAAIkI,IAAMxE,EAAG,OAAO,EAKpB,IAHA,IAAIyE,EAAID,EAAEvI,OACNyI,EAAI1E,EAAE/D,OAED8C,EAAI,EAAGR,EAAMsE,KAAKC,IAAI2B,EAAGC,GAAI3F,EAAIR,IAAOQ,EAC/C,GAAIyF,EAAEzF,KAAOiB,EAAEjB,GAAI,CACjB0F,EAAID,EAAEzF,GACN2F,EAAI1E,EAAEjB,GACN,MAIJ,OAAI0F,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,GAGThJ,EAAOuC,WAAa,SAAqBvB,GACvC,OAAQqE,OAAOrE,GAAU4C,eACvB,IAAK,MACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAO,EACT,QACE,OAAO,IAIb5D,EAAOkJ,OAAS,SAAiBC,EAAM3I,GACrC,IAAKc,EAAQ6H,GACX,MAAM,IAAItI,UAAU,+CAGtB,GAAoB,IAAhBsI,EAAK3I,OACP,OAAOR,EAAOU,MAAM,GAGtB,IAAI4C,EACJ,QAAepC,IAAXV,EAEF,IADAA,EAAS,EACJ8C,EAAI,EAAGA,EAAI6F,EAAK3I,SAAU8C,EAC7B9C,GAAU2I,EAAK7F,GAAG9C,OAItB,IAAIT,EAASC,EAAOW,YAAYH,GAC5B4I,EAAM,EACV,IAAK9F,EAAI,EAAGA,EAAI6F,EAAK3I,SAAU8C,EAAG,CAChC,IAAIrC,EAAMkI,EAAK7F,GACf,IAAKtD,EAAO6C,SAAS5B,GACnB,MAAM,IAAIJ,UAAU,+CAEtBI,EAAI+B,KAAKjD,EAAQqJ,GACjBA,GAAOnI,EAAIT,OAEb,OAAOT,GA8CTC,EAAOmC,WAAaA,EA0EpBnC,EAAOR,UAAUqJ,WAAY,EAQ7B7I,EAAOR,UAAU6J,OAAS,WACxB,IAAIvG,EAAMhB,KAAKtB,OACf,GAAIsC,EAAM,GAAM,EACd,MAAM,IAAInB,WAAW,6CAEvB,IAAK,IAAI2B,EAAI,EAAGA,EAAIR,EAAKQ,GAAK,EAC5BgB,EAAKxC,KAAMwB,EAAGA,EAAI,GAEpB,OAAOxB,MAGT9B,EAAOR,UAAU8J,OAAS,WACxB,IAAIxG,EAAMhB,KAAKtB,OACf,GAAIsC,EAAM,GAAM,EACd,MAAM,IAAInB,WAAW,6CAEvB,IAAK,IAAI2B,EAAI,EAAGA,EAAIR,EAAKQ,GAAK,EAC5BgB,EAAKxC,KAAMwB,EAAGA,EAAI,GAClBgB,EAAKxC,KAAMwB,EAAI,EAAGA,EAAI,GAExB,OAAOxB,MAGT9B,EAAOR,UAAU+J,OAAS,WACxB,IAAIzG,EAAMhB,KAAKtB,OACf,GAAIsC,EAAM,GAAM,EACd,MAAM,IAAInB,WAAW,6CAEvB,IAAK,IAAI2B,EAAI,EAAGA,EAAIR,EAAKQ,GAAK,EAC5BgB,EAAKxC,KAAMwB,EAAGA,EAAI,GAClBgB,EAAKxC,KAAMwB,EAAI,EAAGA,EAAI,GACtBgB,EAAKxC,KAAMwB,EAAI,EAAGA,EAAI,GACtBgB,EAAKxC,KAAMwB,EAAI,EAAGA,EAAI,GAExB,OAAOxB,MAGT9B,EAAOR,UAAU+D,SAAW,WAC1B,IAAI/C,EAAuB,EAAdsB,KAAKtB,OAClB,OAAe,IAAXA,EAAqB,GACA,IAArBgJ,UAAUhJ,OAAqByD,EAAUnC,KAAM,EAAGtB,GAC/CqD,EAAamE,MAAMlG,KAAM0H,YAGlCxJ,EAAOR,UAAUiK,OAAS,SAAiBlF,GACzC,IAAKvE,EAAO6C,SAAS0B,GAAI,MAAM,IAAI1D,UAAU,6BAC7C,OAAIiB,OAASyC,GACsB,IAA5BvE,EAAO8I,QAAQhH,KAAMyC,IAG9BvE,EAAOR,UAAUkK,QAAU,WACzB,IAAIpD,EAAM,GACNqD,EAAMvK,EAAQ8I,kBAKlB,OAJIpG,KAAKtB,OAAS,IAChB8F,EAAMxE,KAAKyB,SAAS,MAAO,EAAGoG,GAAKC,MAAM,SAASC,KAAK,KACnD/H,KAAKtB,OAASmJ,IAAKrD,GAAO,UAEzB,WAAaA,EAAM,KAG5BtG,EAAOR,UAAUsJ,QAAU,SAAkBgB,EAAQhG,EAAOC,EAAKgG,EAAWC,GAC1E,IAAKhK,EAAO6C,SAASiH,GACnB,MAAM,IAAIjJ,UAAU,6BAgBtB,QAbcK,IAAV4C,IACFA,EAAQ,QAEE5C,IAAR6C,IACFA,EAAM+F,EAASA,EAAOtJ,OAAS,QAEfU,IAAd6I,IACFA,EAAY,QAEE7I,IAAZ8I,IACFA,EAAUlI,KAAKtB,QAGbsD,EAAQ,GAAKC,EAAM+F,EAAOtJ,QAAUuJ,EAAY,GAAKC,EAAUlI,KAAKtB,OACtE,MAAM,IAAImB,WAAW,sBAGvB,GAAIoI,GAAaC,GAAWlG,GAASC,EACnC,OAAO,EAET,GAAIgG,GAAaC,EACf,OAAQ,EAEV,GAAIlG,GAASC,EACX,OAAO,EAQT,GAAIjC,OAASgI,EAAQ,OAAO,EAS5B,IAPA,IAAId,GAJJgB,KAAa,IADbD,KAAe,GAMXd,GAPJlF,KAAS,IADTD,KAAW,GASPhB,EAAMsE,KAAKC,IAAI2B,EAAGC,GAElBgB,EAAWnI,KAAKY,MAAMqH,EAAWC,GACjCE,EAAaJ,EAAOpH,MAAMoB,EAAOC,GAE5BT,EAAI,EAAGA,EAAIR,IAAOQ,EACzB,GAAI2G,EAAS3G,KAAO4G,EAAW5G,GAAI,CACjC0F,EAAIiB,EAAS3G,GACb2F,EAAIiB,EAAW5G,GACf,MAIJ,OAAI0F,EAAIC,GAAW,EACfA,EAAID,EAAU,EACX,GA6HThJ,EAAOR,UAAU2K,SAAW,SAAmBlH,EAAKf,EAAYlB,GAC9D,OAAoD,IAA7Cc,KAAKgD,QAAQ7B,EAAKf,EAAYlB,IAGvChB,EAAOR,UAAUsF,QAAU,SAAkB7B,EAAKf,EAAYlB,GAC5D,OAAO0D,EAAqB5C,KAAMmB,EAAKf,EAAYlB,GAAU,IAG/DhB,EAAOR,UAAUwF,YAAc,SAAsB/B,EAAKf,EAAYlB,GACpE,OAAO0D,EAAqB5C,KAAMmB,EAAKf,EAAYlB,GAAU,IAkD/DhB,EAAOR,UAAUiD,MAAQ,SAAgBH,EAAQsD,EAAQpF,EAAQQ,GAE/D,QAAeE,IAAX0E,EACF5E,EAAW,OACXR,EAASsB,KAAKtB,OACdoF,EAAS,OAEJ,QAAe1E,IAAXV,GAA0C,iBAAXoF,EACxC5E,EAAW4E,EACXpF,EAASsB,KAAKtB,OACdoF,EAAS,MAEJ,KAAIwE,SAASxE,GAWlB,MAAM,IAAI7D,MACR,2EAXF6D,GAAkB,EACdwE,SAAS5J,IACXA,GAAkB,OACDU,IAAbF,IAAwBA,EAAW,UAEvCA,EAAWR,EACXA,OAASU,GASb,IAAI4E,EAAYhE,KAAKtB,OAASoF,EAG9B,SAFe1E,IAAXV,GAAwBA,EAASsF,KAAWtF,EAASsF,GAEpDxD,EAAO9B,OAAS,IAAMA,EAAS,GAAKoF,EAAS,IAAOA,EAAS9D,KAAKtB,OACrE,MAAM,IAAImB,WAAW,0CAGlBX,IAAUA,EAAW,QAG1B,IADA,IAAIyC,GAAc,IAEhB,OAAQzC,GACN,IAAK,MACH,OAAO2E,EAAS7D,KAAMQ,EAAQsD,EAAQpF,GAExC,IAAK,OACL,IAAK,QACH,OAAO2F,EAAUrE,KAAMQ,EAAQsD,EAAQpF,GAEzC,IAAK,QACH,OAAO6F,EAAWvE,KAAMQ,EAAQsD,EAAQpF,GAE1C,IAAK,SACL,IAAK,SACH,OAAOmG,EAAY7E,KAAMQ,EAAQsD,EAAQpF,GAE3C,IAAK,SAEH,OAAOoG,EAAY9E,KAAMQ,EAAQsD,EAAQpF,GAE3C,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,OAAOqG,EAAU/E,KAAMQ,EAAQsD,EAAQpF,GAEzC,QACE,GAAIiD,EAAa,MAAM,IAAI5C,UAAU,qBAAuBG,GAC5DA,GAAY,GAAKA,GAAU4C,cAC3BH,GAAc,IAKtBzD,EAAOR,UAAU6K,OAAS,WACxB,MAAO,CACLnH,KAAM,SACNC,KAAMmH,MAAM9K,UAAUkD,MAAMqC,KAAKjD,KAAKyI,MAAQzI,KAAM,KA4GxD,SAASoC,EAAYjD,EAAK6C,EAAOC,GAC/B,IAAIyG,EAAM,GACVzG,EAAMqD,KAAKC,IAAIpG,EAAIT,OAAQuD,GAE3B,IAAK,IAAIT,EAAIQ,EAAOR,EAAIS,IAAOT,EAC7BkH,GAAOnF,OAAO0C,aAAsB,IAAT9G,EAAIqC,IAEjC,OAAOkH,EAGT,SAASrG,EAAalD,EAAK6C,EAAOC,GAChC,IAAIyG,EAAM,GACVzG,EAAMqD,KAAKC,IAAIpG,EAAIT,OAAQuD,GAE3B,IAAK,IAAIT,EAAIQ,EAAOR,EAAIS,IAAOT,EAC7BkH,GAAOnF,OAAO0C,aAAa9G,EAAIqC,IAEjC,OAAOkH,EAGT,SAASxG,EAAU/C,EAAK6C,EAAOC,GAC7B,IAAIjB,EAAM7B,EAAIT,SAETsD,GAASA,EAAQ,KAAGA,EAAQ,KAC5BC,GAAOA,EAAM,GAAKA,EAAMjB,KAAKiB,EAAMjB,GAGxC,IADA,IAAI2H,EAAM,GACDnH,EAAIQ,EAAOR,EAAIS,IAAOT,EAC7BmH,GAAOC,EAAMzJ,EAAIqC,IAEnB,OAAOmH,EAGT,SAASpG,EAAcpD,EAAK6C,EAAOC,GAGjC,IAFA,IAAI4G,EAAQ1J,EAAIyB,MAAMoB,EAAOC,GACzBuD,EAAM,GACDhE,EAAI,EAAGA,EAAIqH,EAAMnK,OAAQ8C,GAAK,EACrCgE,GAAOjC,OAAO0C,aAAa4C,EAAMrH,GAAoB,IAAfqH,EAAMrH,EAAI,IAElD,OAAOgE,EA0CT,SAASsD,EAAahF,EAAQiF,EAAKrK,GACjC,GAAKoF,EAAS,GAAO,GAAKA,EAAS,EAAG,MAAM,IAAIjE,WAAW,sBAC3D,GAAIiE,EAASiF,EAAMrK,EAAQ,MAAM,IAAImB,WAAW,yCA+JlD,SAASmJ,EAAU7J,EAAKvB,EAAOkG,EAAQiF,EAAKlB,EAAKtC,GAC/C,IAAKrH,EAAO6C,SAAS5B,GAAM,MAAM,IAAIJ,UAAU,+CAC/C,GAAInB,EAAQiK,GAAOjK,EAAQ2H,EAAK,MAAM,IAAI1F,WAAW,qCACrD,GAAIiE,EAASiF,EAAM5J,EAAIT,OAAQ,MAAM,IAAImB,WAAW,sBAkDtD,SAASoJ,EAAmB9J,EAAKvB,EAAOkG,EAAQoF,GAC1CtL,EAAQ,IAAGA,EAAQ,MAASA,EAAQ,GACxC,IAAK,IAAI4D,EAAI,EAAGoC,EAAI0B,KAAKC,IAAIpG,EAAIT,OAASoF,EAAQ,GAAItC,EAAIoC,IAAKpC,EAC7DrC,EAAI2E,EAAStC,IAAM5D,EAAS,KAAS,GAAKsL,EAAe1H,EAAI,EAAIA,MAClC,GAA5B0H,EAAe1H,EAAI,EAAIA,GA8B9B,SAAS2H,EAAmBhK,EAAKvB,EAAOkG,EAAQoF,GAC1CtL,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GAC5C,IAAK,IAAI4D,EAAI,EAAGoC,EAAI0B,KAAKC,IAAIpG,EAAIT,OAASoF,EAAQ,GAAItC,EAAIoC,IAAKpC,EAC7DrC,EAAI2E,EAAStC,GAAM5D,IAAuC,GAA5BsL,EAAe1H,EAAI,EAAIA,GAAU,IAmJnE,SAAS4H,EAAcjK,EAAKvB,EAAOkG,EAAQiF,EAAKlB,EAAKtC,GACnD,GAAIzB,EAASiF,EAAM5J,EAAIT,OAAQ,MAAM,IAAImB,WAAW,sBACpD,GAAIiE,EAAS,EAAG,MAAM,IAAIjE,WAAW,sBAGvC,SAASwJ,EAAYlK,EAAKvB,EAAOkG,EAAQoF,EAAcI,GAKrD,OAJKA,GACHF,EAAajK,EAAKvB,EAAOkG,EAAQ,GAEnCvE,EAAQoB,MAAMxB,EAAKvB,EAAOkG,EAAQoF,EAAc,GAAI,GAC7CpF,EAAS,EAWlB,SAASyF,EAAapK,EAAKvB,EAAOkG,EAAQoF,EAAcI,GAKtD,OAJKA,GACHF,EAAajK,EAAKvB,EAAOkG,EAAQ,GAEnCvE,EAAQoB,MAAMxB,EAAKvB,EAAOkG,EAAQoF,EAAc,GAAI,GAC7CpF,EAAS,EA/clB5F,EAAOR,UAAUkD,MAAQ,SAAgBoB,EAAOC,GAC9C,IAoBIuH,EApBAxI,EAAMhB,KAAKtB,OAqBf,IApBAsD,IAAUA,GAGE,GACVA,GAAShB,GACG,IAAGgB,EAAQ,GACdA,EAAQhB,IACjBgB,EAAQhB,IANViB,OAAc7C,IAAR6C,EAAoBjB,IAAQiB,GASxB,GACRA,GAAOjB,GACG,IAAGiB,EAAM,GACVA,EAAMjB,IACfiB,EAAMjB,GAGJiB,EAAMD,IAAOC,EAAMD,GAGnB9D,EAAOwB,qBACT8J,EAASxJ,KAAKuG,SAASvE,EAAOC,IACvBlC,UAAY7B,EAAOR,cACrB,CACL,IAAI+L,EAAWxH,EAAMD,EACrBwH,EAAS,IAAItL,EAAOuL,OAAUrK,GAC9B,IAAK,IAAIoC,EAAI,EAAGA,EAAIiI,IAAYjI,EAC9BgI,EAAOhI,GAAKxB,KAAKwB,EAAIQ,GAIzB,OAAOwH,GAWTtL,EAAOR,UAAUgM,WAAa,SAAqB5F,EAAQzD,EAAYiJ,GACrExF,GAAkB,EAClBzD,GAA0B,EACrBiJ,GAAUR,EAAYhF,EAAQzD,EAAYL,KAAKtB,QAKpD,IAHA,IAAIyC,EAAMnB,KAAK8D,GACX6F,EAAM,EACNnI,EAAI,IACCA,EAAInB,IAAesJ,GAAO,MACjCxI,GAAOnB,KAAK8D,EAAStC,GAAKmI,EAG5B,OAAOxI,GAGTjD,EAAOR,UAAUkM,WAAa,SAAqB9F,EAAQzD,EAAYiJ,GACrExF,GAAkB,EAClBzD,GAA0B,EACrBiJ,GACHR,EAAYhF,EAAQzD,EAAYL,KAAKtB,QAKvC,IAFA,IAAIyC,EAAMnB,KAAK8D,IAAWzD,GACtBsJ,EAAM,EACHtJ,EAAa,IAAMsJ,GAAO,MAC/BxI,GAAOnB,KAAK8D,IAAWzD,GAAcsJ,EAGvC,OAAOxI,GAGTjD,EAAOR,UAAUmM,UAAY,SAAoB/F,EAAQwF,GAEvD,OADKA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QACpCsB,KAAK8D,IAGd5F,EAAOR,UAAUoM,aAAe,SAAuBhG,EAAQwF,GAE7D,OADKA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QACpCsB,KAAK8D,GAAW9D,KAAK8D,EAAS,IAAM,GAG7C5F,EAAOR,UAAU+F,aAAe,SAAuBK,EAAQwF,GAE7D,OADKA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QACnCsB,KAAK8D,IAAW,EAAK9D,KAAK8D,EAAS,IAG7C5F,EAAOR,UAAUqM,aAAe,SAAuBjG,EAAQwF,GAG7D,OAFKA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,SAElCsB,KAAK8D,GACT9D,KAAK8D,EAAS,IAAM,EACpB9D,KAAK8D,EAAS,IAAM,IACD,SAAnB9D,KAAK8D,EAAS,IAGrB5F,EAAOR,UAAUsM,aAAe,SAAuBlG,EAAQwF,GAG7D,OAFKA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QAEpB,SAAfsB,KAAK8D,IACT9D,KAAK8D,EAAS,IAAM,GACrB9D,KAAK8D,EAAS,IAAM,EACrB9D,KAAK8D,EAAS,KAGlB5F,EAAOR,UAAUuM,UAAY,SAAoBnG,EAAQzD,EAAYiJ,GACnExF,GAAkB,EAClBzD,GAA0B,EACrBiJ,GAAUR,EAAYhF,EAAQzD,EAAYL,KAAKtB,QAKpD,IAHA,IAAIyC,EAAMnB,KAAK8D,GACX6F,EAAM,EACNnI,EAAI,IACCA,EAAInB,IAAesJ,GAAO,MACjCxI,GAAOnB,KAAK8D,EAAStC,GAAKmI,EAM5B,OAFIxI,IAFJwI,GAAO,OAESxI,GAAOmE,KAAK4E,IAAI,EAAG,EAAI7J,IAEhCc,GAGTjD,EAAOR,UAAUyM,UAAY,SAAoBrG,EAAQzD,EAAYiJ,GACnExF,GAAkB,EAClBzD,GAA0B,EACrBiJ,GAAUR,EAAYhF,EAAQzD,EAAYL,KAAKtB,QAKpD,IAHA,IAAI8C,EAAInB,EACJsJ,EAAM,EACNxI,EAAMnB,KAAK8D,IAAWtC,GACnBA,EAAI,IAAMmI,GAAO,MACtBxI,GAAOnB,KAAK8D,IAAWtC,GAAKmI,EAM9B,OAFIxI,IAFJwI,GAAO,OAESxI,GAAOmE,KAAK4E,IAAI,EAAG,EAAI7J,IAEhCc,GAGTjD,EAAOR,UAAU0M,SAAW,SAAmBtG,EAAQwF,GAErD,OADKA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QACtB,IAAfsB,KAAK8D,IAC0B,GAA5B,IAAO9D,KAAK8D,GAAU,GADK9D,KAAK8D,IAI3C5F,EAAOR,UAAU2M,YAAc,SAAsBvG,EAAQwF,GACtDA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QAC3C,IAAIyC,EAAMnB,KAAK8D,GAAW9D,KAAK8D,EAAS,IAAM,EAC9C,OAAc,MAAN3C,EAAsB,WAANA,EAAmBA,GAG7CjD,EAAOR,UAAU4M,YAAc,SAAsBxG,EAAQwF,GACtDA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QAC3C,IAAIyC,EAAMnB,KAAK8D,EAAS,GAAM9D,KAAK8D,IAAW,EAC9C,OAAc,MAAN3C,EAAsB,WAANA,EAAmBA,GAG7CjD,EAAOR,UAAU6M,YAAc,SAAsBzG,EAAQwF,GAG3D,OAFKA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QAEnCsB,KAAK8D,GACV9D,KAAK8D,EAAS,IAAM,EACpB9D,KAAK8D,EAAS,IAAM,GACpB9D,KAAK8D,EAAS,IAAM,IAGzB5F,EAAOR,UAAU8M,YAAc,SAAsB1G,EAAQwF,GAG3D,OAFKA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QAEnCsB,KAAK8D,IAAW,GACrB9D,KAAK8D,EAAS,IAAM,GACpB9D,KAAK8D,EAAS,IAAM,EACpB9D,KAAK8D,EAAS,IAGnB5F,EAAOR,UAAU+M,YAAc,SAAsB3G,EAAQwF,GAE3D,OADKA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QACpCa,EAAQiE,KAAKxD,KAAM8D,GAAQ,EAAM,GAAI,IAG9C5F,EAAOR,UAAUgN,YAAc,SAAsB5G,EAAQwF,GAE3D,OADKA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QACpCa,EAAQiE,KAAKxD,KAAM8D,GAAQ,EAAO,GAAI,IAG/C5F,EAAOR,UAAUiN,aAAe,SAAuB7G,EAAQwF,GAE7D,OADKA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QACpCa,EAAQiE,KAAKxD,KAAM8D,GAAQ,EAAM,GAAI,IAG9C5F,EAAOR,UAAUkN,aAAe,SAAuB9G,EAAQwF,GAE7D,OADKA,GAAUR,EAAYhF,EAAQ,EAAG9D,KAAKtB,QACpCa,EAAQiE,KAAKxD,KAAM8D,GAAQ,EAAO,GAAI,IAS/C5F,EAAOR,UAAUmN,YAAc,SAAsBjN,EAAOkG,EAAQzD,EAAYiJ,IAC9E1L,GAASA,EACTkG,GAAkB,EAClBzD,GAA0B,EACrBiJ,IAEHN,EAAShJ,KAAMpC,EAAOkG,EAAQzD,EADfiF,KAAK4E,IAAI,EAAG,EAAI7J,GAAc,EACO,GAGtD,IAAIsJ,EAAM,EACNnI,EAAI,EAER,IADAxB,KAAK8D,GAAkB,IAARlG,IACN4D,EAAInB,IAAesJ,GAAO,MACjC3J,KAAK8D,EAAStC,GAAM5D,EAAQ+L,EAAO,IAGrC,OAAO7F,EAASzD,GAGlBnC,EAAOR,UAAUoN,YAAc,SAAsBlN,EAAOkG,EAAQzD,EAAYiJ,IAC9E1L,GAASA,EACTkG,GAAkB,EAClBzD,GAA0B,EACrBiJ,IAEHN,EAAShJ,KAAMpC,EAAOkG,EAAQzD,EADfiF,KAAK4E,IAAI,EAAG,EAAI7J,GAAc,EACO,GAGtD,IAAImB,EAAInB,EAAa,EACjBsJ,EAAM,EAEV,IADA3J,KAAK8D,EAAStC,GAAa,IAAR5D,IACV4D,GAAK,IAAMmI,GAAO,MACzB3J,KAAK8D,EAAStC,GAAM5D,EAAQ+L,EAAO,IAGrC,OAAO7F,EAASzD,GAGlBnC,EAAOR,UAAUqN,WAAa,SAAqBnN,EAAOkG,EAAQwF,GAMhE,OALA1L,GAASA,EACTkG,GAAkB,EACbwF,GAAUN,EAAShJ,KAAMpC,EAAOkG,EAAQ,EAAG,IAAM,GACjD5F,EAAOwB,sBAAqB9B,EAAQ0H,KAAK0F,MAAMpN,IACpDoC,KAAK8D,GAAmB,IAARlG,EACTkG,EAAS,GAWlB5F,EAAOR,UAAUuN,cAAgB,SAAwBrN,EAAOkG,EAAQwF,GAUtE,OATA1L,GAASA,EACTkG,GAAkB,EACbwF,GAAUN,EAAShJ,KAAMpC,EAAOkG,EAAQ,EAAG,MAAQ,GACpD5F,EAAOwB,qBACTM,KAAK8D,GAAmB,IAARlG,EAChBoC,KAAK8D,EAAS,GAAMlG,IAAU,GAE9BqL,EAAkBjJ,KAAMpC,EAAOkG,GAAQ,GAElCA,EAAS,GAGlB5F,EAAOR,UAAUwN,cAAgB,SAAwBtN,EAAOkG,EAAQwF,GAUtE,OATA1L,GAASA,EACTkG,GAAkB,EACbwF,GAAUN,EAAShJ,KAAMpC,EAAOkG,EAAQ,EAAG,MAAQ,GACpD5F,EAAOwB,qBACTM,KAAK8D,GAAWlG,IAAU,EAC1BoC,KAAK8D,EAAS,GAAc,IAARlG,GAEpBqL,EAAkBjJ,KAAMpC,EAAOkG,GAAQ,GAElCA,EAAS,GAUlB5F,EAAOR,UAAUyN,cAAgB,SAAwBvN,EAAOkG,EAAQwF,GAYtE,OAXA1L,GAASA,EACTkG,GAAkB,EACbwF,GAAUN,EAAShJ,KAAMpC,EAAOkG,EAAQ,EAAG,WAAY,GACxD5F,EAAOwB,qBACTM,KAAK8D,EAAS,GAAMlG,IAAU,GAC9BoC,KAAK8D,EAAS,GAAMlG,IAAU,GAC9BoC,KAAK8D,EAAS,GAAMlG,IAAU,EAC9BoC,KAAK8D,GAAmB,IAARlG,GAEhBuL,EAAkBnJ,KAAMpC,EAAOkG,GAAQ,GAElCA,EAAS,GAGlB5F,EAAOR,UAAU0N,cAAgB,SAAwBxN,EAAOkG,EAAQwF,GAYtE,OAXA1L,GAASA,EACTkG,GAAkB,EACbwF,GAAUN,EAAShJ,KAAMpC,EAAOkG,EAAQ,EAAG,WAAY,GACxD5F,EAAOwB,qBACTM,KAAK8D,GAAWlG,IAAU,GAC1BoC,KAAK8D,EAAS,GAAMlG,IAAU,GAC9BoC,KAAK8D,EAAS,GAAMlG,IAAU,EAC9BoC,KAAK8D,EAAS,GAAc,IAARlG,GAEpBuL,EAAkBnJ,KAAMpC,EAAOkG,GAAQ,GAElCA,EAAS,GAGlB5F,EAAOR,UAAU2N,WAAa,SAAqBzN,EAAOkG,EAAQzD,EAAYiJ,GAG5E,GAFA1L,GAASA,EACTkG,GAAkB,GACbwF,EAAU,CACb,IAAIgC,EAAQhG,KAAK4E,IAAI,EAAG,EAAI7J,EAAa,GAEzC2I,EAAShJ,KAAMpC,EAAOkG,EAAQzD,EAAYiL,EAAQ,GAAIA,GAGxD,IAAI9J,EAAI,EACJmI,EAAM,EACN4B,EAAM,EAEV,IADAvL,KAAK8D,GAAkB,IAARlG,IACN4D,EAAInB,IAAesJ,GAAO,MAC7B/L,EAAQ,GAAa,IAAR2N,GAAsC,IAAzBvL,KAAK8D,EAAStC,EAAI,KAC9C+J,EAAM,GAERvL,KAAK8D,EAAStC,IAAO5D,EAAQ+L,GAAQ,GAAK4B,EAAM,IAGlD,OAAOzH,EAASzD,GAGlBnC,EAAOR,UAAU8N,WAAa,SAAqB5N,EAAOkG,EAAQzD,EAAYiJ,GAG5E,GAFA1L,GAASA,EACTkG,GAAkB,GACbwF,EAAU,CACb,IAAIgC,EAAQhG,KAAK4E,IAAI,EAAG,EAAI7J,EAAa,GAEzC2I,EAAShJ,KAAMpC,EAAOkG,EAAQzD,EAAYiL,EAAQ,GAAIA,GAGxD,IAAI9J,EAAInB,EAAa,EACjBsJ,EAAM,EACN4B,EAAM,EAEV,IADAvL,KAAK8D,EAAStC,GAAa,IAAR5D,IACV4D,GAAK,IAAMmI,GAAO,MACrB/L,EAAQ,GAAa,IAAR2N,GAAsC,IAAzBvL,KAAK8D,EAAStC,EAAI,KAC9C+J,EAAM,GAERvL,KAAK8D,EAAStC,IAAO5D,EAAQ+L,GAAQ,GAAK4B,EAAM,IAGlD,OAAOzH,EAASzD,GAGlBnC,EAAOR,UAAU+N,UAAY,SAAoB7N,EAAOkG,EAAQwF,GAO9D,OANA1L,GAASA,EACTkG,GAAkB,EACbwF,GAAUN,EAAShJ,KAAMpC,EAAOkG,EAAQ,EAAG,KAAO,KAClD5F,EAAOwB,sBAAqB9B,EAAQ0H,KAAK0F,MAAMpN,IAChDA,EAAQ,IAAGA,EAAQ,IAAOA,EAAQ,GACtCoC,KAAK8D,GAAmB,IAARlG,EACTkG,EAAS,GAGlB5F,EAAOR,UAAUgO,aAAe,SAAuB9N,EAAOkG,EAAQwF,GAUpE,OATA1L,GAASA,EACTkG,GAAkB,EACbwF,GAAUN,EAAShJ,KAAMpC,EAAOkG,EAAQ,EAAG,OAAS,OACrD5F,EAAOwB,qBACTM,KAAK8D,GAAmB,IAARlG,EAChBoC,KAAK8D,EAAS,GAAMlG,IAAU,GAE9BqL,EAAkBjJ,KAAMpC,EAAOkG,GAAQ,GAElCA,EAAS,GAGlB5F,EAAOR,UAAUiO,aAAe,SAAuB/N,EAAOkG,EAAQwF,GAUpE,OATA1L,GAASA,EACTkG,GAAkB,EACbwF,GAAUN,EAAShJ,KAAMpC,EAAOkG,EAAQ,EAAG,OAAS,OACrD5F,EAAOwB,qBACTM,KAAK8D,GAAWlG,IAAU,EAC1BoC,KAAK8D,EAAS,GAAc,IAARlG,GAEpBqL,EAAkBjJ,KAAMpC,EAAOkG,GAAQ,GAElCA,EAAS,GAGlB5F,EAAOR,UAAUkO,aAAe,SAAuBhO,EAAOkG,EAAQwF,GAYpE,OAXA1L,GAASA,EACTkG,GAAkB,EACbwF,GAAUN,EAAShJ,KAAMpC,EAAOkG,EAAQ,EAAG,YAAa,YACzD5F,EAAOwB,qBACTM,KAAK8D,GAAmB,IAARlG,EAChBoC,KAAK8D,EAAS,GAAMlG,IAAU,EAC9BoC,KAAK8D,EAAS,GAAMlG,IAAU,GAC9BoC,KAAK8D,EAAS,GAAMlG,IAAU,IAE9BuL,EAAkBnJ,KAAMpC,EAAOkG,GAAQ,GAElCA,EAAS,GAGlB5F,EAAOR,UAAUmO,aAAe,SAAuBjO,EAAOkG,EAAQwF,GAapE,OAZA1L,GAASA,EACTkG,GAAkB,EACbwF,GAAUN,EAAShJ,KAAMpC,EAAOkG,EAAQ,EAAG,YAAa,YACzDlG,EAAQ,IAAGA,EAAQ,WAAaA,EAAQ,GACxCM,EAAOwB,qBACTM,KAAK8D,GAAWlG,IAAU,GAC1BoC,KAAK8D,EAAS,GAAMlG,IAAU,GAC9BoC,KAAK8D,EAAS,GAAMlG,IAAU,EAC9BoC,KAAK8D,EAAS,GAAc,IAARlG,GAEpBuL,EAAkBnJ,KAAMpC,EAAOkG,GAAQ,GAElCA,EAAS,GAgBlB5F,EAAOR,UAAUoO,aAAe,SAAuBlO,EAAOkG,EAAQwF,GACpE,OAAOD,EAAWrJ,KAAMpC,EAAOkG,GAAQ,EAAMwF,IAG/CpL,EAAOR,UAAUqO,aAAe,SAAuBnO,EAAOkG,EAAQwF,GACpE,OAAOD,EAAWrJ,KAAMpC,EAAOkG,GAAQ,EAAOwF,IAWhDpL,EAAOR,UAAUsO,cAAgB,SAAwBpO,EAAOkG,EAAQwF,GACtE,OAAOC,EAAYvJ,KAAMpC,EAAOkG,GAAQ,EAAMwF,IAGhDpL,EAAOR,UAAUuO,cAAgB,SAAwBrO,EAAOkG,EAAQwF,GACtE,OAAOC,EAAYvJ,KAAMpC,EAAOkG,GAAQ,EAAOwF,IAIjDpL,EAAOR,UAAUwD,KAAO,SAAe8G,EAAQkE,EAAalK,EAAOC,GAQjE,GAPKD,IAAOA,EAAQ,GACfC,GAAe,IAARA,IAAWA,EAAMjC,KAAKtB,QAC9BwN,GAAelE,EAAOtJ,SAAQwN,EAAclE,EAAOtJ,QAClDwN,IAAaA,EAAc,GAC5BjK,EAAM,GAAKA,EAAMD,IAAOC,EAAMD,GAG9BC,IAAQD,EAAO,OAAO,EAC1B,GAAsB,IAAlBgG,EAAOtJ,QAAgC,IAAhBsB,KAAKtB,OAAc,OAAO,EAGrD,GAAIwN,EAAc,EAChB,MAAM,IAAIrM,WAAW,6BAEvB,GAAImC,EAAQ,GAAKA,GAAShC,KAAKtB,OAAQ,MAAM,IAAImB,WAAW,6BAC5D,GAAIoC,EAAM,EAAG,MAAM,IAAIpC,WAAW,2BAG9BoC,EAAMjC,KAAKtB,SAAQuD,EAAMjC,KAAKtB,QAC9BsJ,EAAOtJ,OAASwN,EAAcjK,EAAMD,IACtCC,EAAM+F,EAAOtJ,OAASwN,EAAclK,GAGtC,IACIR,EADAR,EAAMiB,EAAMD,EAGhB,GAAIhC,OAASgI,GAAUhG,EAAQkK,GAAeA,EAAcjK,EAE1D,IAAKT,EAAIR,EAAM,EAAGQ,GAAK,IAAKA,EAC1BwG,EAAOxG,EAAI0K,GAAelM,KAAKwB,EAAIQ,QAEhC,GAAIhB,EAAM,MAAS9C,EAAOwB,oBAE/B,IAAK8B,EAAI,EAAGA,EAAIR,IAAOQ,EACrBwG,EAAOxG,EAAI0K,GAAelM,KAAKwB,EAAIQ,QAGrClC,WAAWpC,UAAUyO,IAAIlJ,KACvB+E,EACAhI,KAAKuG,SAASvE,EAAOA,EAAQhB,GAC7BkL,GAIJ,OAAOlL,GAOT9C,EAAOR,UAAUuB,KAAO,SAAekC,EAAKa,EAAOC,EAAK/C,GAEtD,GAAmB,iBAARiC,EAAkB,CAS3B,GARqB,iBAAVa,GACT9C,EAAW8C,EACXA,EAAQ,EACRC,EAAMjC,KAAKtB,QACa,iBAARuD,IAChB/C,EAAW+C,EACXA,EAAMjC,KAAKtB,QAEM,IAAfyC,EAAIzC,OAAc,CACpB,IAAI0N,EAAOjL,EAAIwD,WAAW,GACtByH,EAAO,MACTjL,EAAMiL,GAGV,QAAiBhN,IAAbF,GAA8C,iBAAbA,EACnC,MAAM,IAAIH,UAAU,6BAEtB,GAAwB,iBAAbG,IAA0BhB,EAAOuC,WAAWvB,GACrD,MAAM,IAAIH,UAAU,qBAAuBG,OAErB,iBAARiC,IAChBA,GAAY,KAId,GAAIa,EAAQ,GAAKhC,KAAKtB,OAASsD,GAAShC,KAAKtB,OAASuD,EACpD,MAAM,IAAIpC,WAAW,sBAGvB,GAAIoC,GAAOD,EACT,OAAOhC,KAQT,IAAIwB,EACJ,GANAQ,KAAkB,EAClBC,OAAc7C,IAAR6C,EAAoBjC,KAAKtB,OAASuD,IAAQ,EAE3Cd,IAAKA,EAAM,GAGG,iBAARA,EACT,IAAKK,EAAIQ,EAAOR,EAAIS,IAAOT,EACzBxB,KAAKwB,GAAKL,MAEP,CACL,IAAI0H,EAAQ3K,EAAO6C,SAASI,GACxBA,EACAS,EAAY,IAAI1D,EAAOiD,EAAKjC,GAAUuC,YACtCT,EAAM6H,EAAMnK,OAChB,IAAK8C,EAAI,EAAGA,EAAIS,EAAMD,IAASR,EAC7BxB,KAAKwB,EAAIQ,GAAS6G,EAAMrH,EAAIR,GAIhC,OAAOhB,MAMT,IAAIqM,EAAoB,qBAmBxB,SAASzD,EAAOlG,GACd,OAAIA,EAAI,GAAW,IAAMA,EAAEjB,SAAS,IAC7BiB,EAAEjB,SAAS,IAGpB,SAASG,EAAapB,EAAQwE,GAE5B,IAAIc,EADJd,EAAQA,GAASsH,IAMjB,IAJA,IAAI5N,EAAS8B,EAAO9B,OAChB6N,EAAgB,KAChB1D,EAAQ,GAEHrH,EAAI,EAAGA,EAAI9C,IAAU8C,EAAG,CAI/B,IAHAsE,EAAYtF,EAAOmE,WAAWnD,IAGd,OAAUsE,EAAY,MAAQ,CAE5C,IAAKyG,EAAe,CAElB,GAAIzG,EAAY,MAAQ,EAEjBd,GAAS,IAAM,GAAG6D,EAAMnE,KAAK,IAAM,IAAM,KAC9C,SACK,GAAIlD,EAAI,IAAM9C,EAAQ,EAEtBsG,GAAS,IAAM,GAAG6D,EAAMnE,KAAK,IAAM,IAAM,KAC9C,SAIF6H,EAAgBzG,EAEhB,SAIF,GAAIA,EAAY,MAAQ,EACjBd,GAAS,IAAM,GAAG6D,EAAMnE,KAAK,IAAM,IAAM,KAC9C6H,EAAgBzG,EAChB,SAIFA,EAAkE,OAArDyG,EAAgB,OAAU,GAAKzG,EAAY,YAC/CyG,IAEJvH,GAAS,IAAM,GAAG6D,EAAMnE,KAAK,IAAM,IAAM,KAMhD,GAHA6H,EAAgB,KAGZzG,EAAY,IAAM,CACpB,IAAKd,GAAS,GAAK,EAAG,MACtB6D,EAAMnE,KAAKoB,QACN,GAAIA,EAAY,KAAO,CAC5B,IAAKd,GAAS,GAAK,EAAG,MACtB6D,EAAMnE,KACJoB,GAAa,EAAM,IACP,GAAZA,EAAmB,UAEhB,GAAIA,EAAY,MAAS,CAC9B,IAAKd,GAAS,GAAK,EAAG,MACtB6D,EAAMnE,KACJoB,GAAa,GAAM,IACnBA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,SAEhB,MAAIA,EAAY,SASrB,MAAM,IAAI7F,MAAM,sBARhB,IAAK+E,GAAS,GAAK,EAAG,MACtB6D,EAAMnE,KACJoB,GAAa,GAAO,IACpBA,GAAa,GAAM,GAAO,IAC1BA,GAAa,EAAM,GAAO,IACd,GAAZA,EAAmB,MAOzB,OAAO+C,EA4BT,SAAShH,EAAe2C,GACtB,OAAOlF,EAAOkN,YAhIhB,SAAsBhI,GAIpB,IAFAA,EAUF,SAAqBA,GACnB,OAAIA,EAAIiI,KAAajI,EAAIiI,OAClBjI,EAAIkI,QAAQ,aAAc,IAZ3BC,CAAWnI,GAAKkI,QAAQL,EAAmB,KAEzC3N,OAAS,EAAG,MAAO,GAE3B,KAAO8F,EAAI9F,OAAS,GAAM,GACxB8F,GAAY,IAEd,OAAOA,EAuHmBoI,CAAYpI,IAGxC,SAASF,EAAYlG,EAAKC,EAAKyF,EAAQpF,GACrC,IAAK,IAAI8C,EAAI,EAAGA,EAAI9C,KACb8C,EAAIsC,GAAUzF,EAAIK,QAAY8C,GAAKpD,EAAIM,UADhB8C,EAE5BnD,EAAImD,EAAIsC,GAAU1F,EAAIoD,GAExB,OAAOA,K,iDCrvDT,IAAIqL,EAAO,EAAQ,KAMfpL,EAAWtE,OAAOO,UAAU+D,SAQhC,SAASjC,EAAQ2B,GACf,MAA8B,mBAAvBM,EAASwB,KAAK9B,GASvB,SAAS2L,EAAY3L,GACnB,YAAsB,IAARA,EA4EhB,SAAS4L,EAAS5L,GAChB,OAAe,OAARA,GAA+B,iBAARA,EAShC,SAAS6L,EAAc7L,GACrB,GAA2B,oBAAvBM,EAASwB,KAAK9B,GAChB,OAAO,EAGT,IAAIzD,EAAYP,OAAO8P,eAAe9L,GACtC,OAAqB,OAAdzD,GAAsBA,IAAcP,OAAOO,UAuCpD,SAASwP,EAAW/L,GAClB,MAA8B,sBAAvBM,EAASwB,KAAK9B,GAwEvB,SAASgM,EAAQrM,EAAKsM,GAEpB,GAAItM,QAUJ,GALmB,iBAARA,IAETA,EAAM,CAACA,IAGLtB,EAAQsB,GAEV,IAAK,IAAIU,EAAI,EAAG6L,EAAIvM,EAAIpC,OAAQ8C,EAAI6L,EAAG7L,IACrC4L,EAAGnK,KAAK,KAAMnC,EAAIU,GAAIA,EAAGV,QAI3B,IAAK,IAAIxC,KAAOwC,EACV3D,OAAOO,UAAU4P,eAAerK,KAAKnC,EAAKxC,IAC5C8O,EAAGnK,KAAK,KAAMnC,EAAIxC,GAAMA,EAAKwC,GA2ErCzD,EAAOC,QAAU,CACfkC,QAASA,EACT+N,cA1RF,SAAuBpM,GACrB,MAA8B,yBAAvBM,EAASwB,KAAK9B,IA0RrBJ,SAtSF,SAAkBI,GAChB,OAAe,OAARA,IAAiB2L,EAAY3L,IAA4B,OAApBA,EAAIxD,cAAyBmP,EAAY3L,EAAIxD,cAChD,mBAA7BwD,EAAIxD,YAAYoD,UAA2BI,EAAIxD,YAAYoD,SAASI,IAqShFqM,WAlRF,SAAoBrM,GAClB,MAA4B,oBAAbsM,UAA8BtM,aAAesM,UAkR5DC,kBAzQF,SAA2BvM,GAOzB,MAL4B,oBAAhBjB,aAAiCA,YAAkB,OACpDA,YAAYwB,OAAOP,GAEnB,GAAUA,EAAU,QAAMA,EAAIlD,kBAAkBiC,aAqQ3DyN,SA1PF,SAAkBxM,GAChB,MAAsB,iBAARA,GA0PdyM,SAjPF,SAAkBzM,GAChB,MAAsB,iBAARA,GAiPd4L,SAAUA,EACVC,cAAeA,EACfF,YAAaA,EACbe,OAlNF,SAAgB1M,GACd,MAA8B,kBAAvBM,EAASwB,KAAK9B,IAkNrB2M,OAzMF,SAAgB3M,GACd,MAA8B,kBAAvBM,EAASwB,KAAK9B,IAyMrB4M,OAhMF,SAAgB5M,GACd,MAA8B,kBAAvBM,EAASwB,KAAK9B,IAgMrB+L,WAAYA,EACZc,SA9KF,SAAkB7M,GAChB,OAAO4L,EAAS5L,IAAQ+L,EAAW/L,EAAI8M,OA8KvCC,kBArKF,SAA2B/M,GACzB,MAAkC,oBAApBgN,iBAAmChN,aAAegN,iBAqKhEC,qBAzIF,WACE,OAAyB,oBAAdC,WAAoD,gBAAtBA,UAAUC,SACY,iBAAtBD,UAAUC,SACY,OAAtBD,UAAUC,WAI/B,oBAAXC,QACa,oBAAbC,WAkITrB,QAASA,EACTsB,MAvEF,SAASA,IACP,IAAIC,EAAS,GACb,SAASC,EAAYxN,EAAK7C,GACpB0O,EAAc0B,EAAOpQ,KAAS0O,EAAc7L,GAC9CuN,EAAOpQ,GAAOmQ,EAAMC,EAAOpQ,GAAM6C,GACxB6L,EAAc7L,GACvBuN,EAAOpQ,GAAOmQ,EAAM,GAAItN,GACf3B,EAAQ2B,GACjBuN,EAAOpQ,GAAO6C,EAAIP,QAElB8N,EAAOpQ,GAAO6C,EAIlB,IAAK,IAAIK,EAAI,EAAG6L,EAAI3F,UAAUhJ,OAAQ8C,EAAI6L,EAAG7L,IAC3C2L,EAAQzF,UAAUlG,GAAImN,GAExB,OAAOD,GAuDPE,OA5CF,SAAgB3H,EAAGxE,EAAGoM,GAQpB,OAPA1B,EAAQ1K,GAAG,SAAqBtB,EAAK7C,GAEjC2I,EAAE3I,GADAuQ,GAA0B,mBAAR1N,EACX0L,EAAK1L,EAAK0N,GAEV1N,KAGN8F,GAqCPwF,KAhKF,SAAcjI,GACZ,OAAOA,EAAIkI,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,KAgK/CoC,SA7BF,SAAkBC,GAIhB,OAH8B,QAA1BA,EAAQpK,WAAW,KACrBoK,EAAUA,EAAQnO,MAAM,IAEnBmO,K,cClUT,SAASC,EAAO7N,EAAK8N,GACnB,IAAK9N,EACH,MAAM,IAAIlB,MAAMgP,GAAO,oBAJ3B5R,EAAOC,QAAU0R,EAOjBA,EAAOE,MAAQ,SAAqB7B,EAAG8B,EAAGF,GACxC,GAAI5B,GAAK8B,EACP,MAAM,IAAIlP,MAAMgP,GAAQ,qBAAuB5B,EAAI,OAAS8B,K,6BCPhE,IAAIC,EAAQ9R,EACR+R,EAAK,EAAQ,KACbC,EAAY,EAAQ,KACpBC,EAAW,EAAQ,KAEvBH,EAAMJ,OAASM,EACfF,EAAMI,QAAUD,EAASC,QACzBJ,EAAMK,MAAQF,EAASE,MACvBL,EAAMxG,MAAQ2G,EAAS3G,MACvBwG,EAAMM,OAASH,EAASG,OA6BxBN,EAAMO,OA1BN,SAAgBC,EAAKC,EAAGC,GACtB,IAAIC,EAAM,IAAIvH,MAAMlD,KAAKuC,IAAI+H,EAAII,YAAaF,GAAQ,GACtDC,EAAI9Q,KAAK,GAKT,IAHA,IAAIgR,EAAK,GAAMJ,EAAI,EACfK,EAAIN,EAAIO,QAEH3O,EAAI,EAAGA,EAAIuO,EAAIrR,OAAQ8C,IAAK,CACnC,IAAI4O,EACAC,EAAMH,EAAEI,MAAML,EAAK,GACnBC,EAAEK,SAEFH,EADEC,GAAOJ,GAAM,GAAK,GACfA,GAAM,GAAKI,EAEZA,EACNH,EAAEM,MAAMJ,IAERA,EAAI,EAGNL,EAAIvO,GAAK4O,EACTF,EAAEO,OAAO,GAGX,OAAOV,GA2DTX,EAAMsB,OAtDN,SAAgBC,EAAIC,GAClB,IAAIC,EAAM,CACR,GACA,IAGFF,EAAKA,EAAGR,QACRS,EAAKA,EAAGT,QAGR,IAFA,IAAIW,EAAK,EACLC,EAAK,EACFJ,EAAGK,MAAMF,GAAM,GAAKF,EAAGI,MAAMD,GAAM,GAAG,CAG3C,IAMIE,EAYAC,EAIEC,EAtBFC,EAAOT,EAAGL,MAAM,GAAKQ,EAAM,EAC3BO,EAAOT,EAAGN,MAAM,GAAKS,EAAM,EAM/B,GALY,IAARK,IACFA,GAAO,GACG,IAARC,IACFA,GAAO,GAES,IAAP,EAAND,GACHH,EAAK,OAMHA,EAHU,KADRE,EAAMR,EAAGL,MAAM,GAAKQ,EAAM,IACN,IAAPK,GAAqB,IAARE,EAGvBD,GAFCA,EAOV,GAHAP,EAAI,GAAGnM,KAAKuM,GAGM,IAAP,EAANI,GACHH,EAAK,OAMHA,EAHU,KADRC,EAAMP,EAAGN,MAAM,GAAKS,EAAM,IACN,IAAPI,GAAqB,IAARC,EAGvBC,GAFCA,EAIVR,EAAI,GAAGnM,KAAKwM,GAGR,EAAIJ,IAAOG,EAAK,IAClBH,EAAK,EAAIA,GACP,EAAIC,IAAOG,EAAK,IAClBH,EAAK,EAAIA,GACXJ,EAAGF,OAAO,GACVG,EAAGH,OAAO,GAGZ,OAAOI,GAWTzB,EAAMkC,eAPN,SAAwBxQ,EAAKyQ,EAAMC,GACjC,IAAIlT,EAAM,IAAMiT,EAChBzQ,EAAIpD,UAAU6T,GAAQ,WACpB,YAAqBnS,IAAdY,KAAK1B,GAAqB0B,KAAK1B,GAC/B0B,KAAK1B,GAAOkT,EAASvO,KAAKjD,QASrCoP,EAAMqC,WAJN,SAAoB5I,GAClB,MAAwB,iBAAVA,EAAqBuG,EAAMI,QAAQ3G,EAAO,OACrBA,GAOrCuG,EAAMsC,UAHN,SAAmB7I,GACjB,OAAO,IAAIwG,EAAGxG,EAAO,MAAO,Q,6BCjH9B,IAAM8I,EAAYC,EAAQ,KA4B1BvU,EAAOC,QAAU,CACfuU,mBA3BF,SAA4BC,GAC1B,IACIC,EADEC,EAAS7N,SAAS2N,EAASE,OAAQ,IAGzC,GAAIA,GAAU,IAGZ,MAFAD,EAAM,IAAI9R,MAAM,qBAAuB+R,EAAS,IAAMF,EAASG,aAC3DD,OAASA,EACPD,EAGR,OAAOD,GAkBPI,kBAfF,SAA2BC,EAAOC,GAChC,OAAOD,EAAME,QAAO,SAAAC,GAAI,OAAIX,EAAUW,EAAKC,SAAUH,EAAM,CACzDI,WAAW,QAcbC,uBAVF,SAAgCX,EAAUzQ,GAA0B,IAApBqR,EAAoB,wDAClE,OAAOA,EAAa,CAClBrR,OACAsR,QAASb,EAASa,SAAW,IAC3BtR,K,cC3BNhE,EAAOC,QAAU,SAASD,GAoBzB,OAnBKA,EAAOuV,kBACXvV,EAAOwV,UAAY,aACnBxV,EAAOyV,MAAQ,GAEVzV,EAAO0V,WAAU1V,EAAO0V,SAAW,IACxC5V,OAAO2J,eAAezJ,EAAQ,SAAU,CACvCQ,YAAY,EACZmV,IAAK,WACJ,OAAO3V,EAAOgQ,KAGhBlQ,OAAO2J,eAAezJ,EAAQ,KAAM,CACnCQ,YAAY,EACZmV,IAAK,WACJ,OAAO3V,EAAOmE,KAGhBnE,EAAOuV,gBAAkB,GAEnBvV,I,6BClBR,IAAI2R,EAAS,EAAQ,KACjBiE,EAAW,EAAQ,KAIvB,SAASC,EAAgBjE,EAAKzN,GAC5B,OAAqC,QAAZ,MAApByN,EAAItK,WAAWnD,QAGhBA,EAAI,GAAKA,EAAI,GAAKyN,EAAIvQ,SAGkB,QAAZ,MAAxBuQ,EAAItK,WAAWnD,EAAI,KA0D7B,SAAS2R,EAAMtD,GAKb,OAJWA,IAAM,GACLA,IAAM,EAAK,MACXA,GAAK,EAAK,UACN,IAAJA,IAAa,MACV,EAgBjB,SAASJ,EAAM2D,GACb,OAAoB,IAAhBA,EAAK1U,OACA,IAAM0U,EAENA,EAIX,SAASC,EAAMD,GACb,OAAoB,IAAhBA,EAAK1U,OACA,IAAM0U,EACU,IAAhBA,EAAK1U,OACL,KAAO0U,EACS,IAAhBA,EAAK1U,OACL,MAAQ0U,EACQ,IAAhBA,EAAK1U,OACL,OAAS0U,EACO,IAAhBA,EAAK1U,OACL,QAAU0U,EACM,IAAhBA,EAAK1U,OACL,SAAW0U,EACK,IAAhBA,EAAK1U,OACL,UAAY0U,EAEZA,EAhHX9V,EAAQ2V,SAAWA,EAyDnB3V,EAAQkS,QA7CR,SAAiBP,EAAKqE,GACpB,GAAI9K,MAAMhJ,QAAQyP,GAChB,OAAOA,EAAIrO,QACb,IAAKqO,EACH,MAAO,GACT,IAAIzJ,EAAM,GACV,GAAmB,iBAARyJ,EACT,GAAKqE,GAyBE,GAAY,QAARA,EAIT,KAHArE,EAAMA,EAAIvC,QAAQ,eAAgB,KAC1BhO,OAAS,GAAM,IACrBuQ,EAAM,IAAMA,GACTzN,EAAI,EAAGA,EAAIyN,EAAIvQ,OAAQ8C,GAAK,EAC/BgE,EAAId,KAAKP,SAAS8K,EAAIzN,GAAKyN,EAAIzN,EAAI,GAAI,UAxBzC,IADA,IAAI+R,EAAI,EACC/R,EAAI,EAAGA,EAAIyN,EAAIvQ,OAAQ8C,IAAK,CACnC,IAAIyD,EAAIgK,EAAItK,WAAWnD,GACnByD,EAAI,IACNO,EAAI+N,KAAOtO,EACFA,EAAI,MACbO,EAAI+N,KAAQtO,GAAK,EAAK,IACtBO,EAAI+N,KAAY,GAAJtO,EAAU,KACbiO,EAAgBjE,EAAKzN,IAC9ByD,EAAI,QAAgB,KAAJA,IAAe,KAA6B,KAAtBgK,EAAItK,aAAanD,IACvDgE,EAAI+N,KAAQtO,GAAK,GAAM,IACvBO,EAAI+N,KAAStO,GAAK,GAAM,GAAM,IAC9BO,EAAI+N,KAAStO,GAAK,EAAK,GAAM,IAC7BO,EAAI+N,KAAY,GAAJtO,EAAU,MAEtBO,EAAI+N,KAAQtO,GAAK,GAAM,IACvBO,EAAI+N,KAAStO,GAAK,EAAK,GAAM,IAC7BO,EAAI+N,KAAY,GAAJtO,EAAU,UAW5B,IAAKzD,EAAI,EAAGA,EAAIyN,EAAIvQ,OAAQ8C,IAC1BgE,EAAIhE,GAAc,EAATyN,EAAIzN,GAEjB,OAAOgE,GAUTlI,EAAQsL,MANR,SAAeqG,GAEb,IADA,IAAIzJ,EAAM,GACDhE,EAAI,EAAGA,EAAIyN,EAAIvQ,OAAQ8C,IAC9BgE,GAAOiK,EAAMR,EAAIzN,GAAGC,SAAS,KAC/B,OAAO+D,GAWTlI,EAAQ6V,MAAQA,EAYhB7V,EAAQkW,QAVR,SAAiBvE,EAAKwE,GAEpB,IADA,IAAIjO,EAAM,GACDhE,EAAI,EAAGA,EAAIyN,EAAIvQ,OAAQ8C,IAAK,CACnC,IAAIqO,EAAIZ,EAAIzN,GACG,WAAXiS,IACF5D,EAAIsD,EAAMtD,IACZrK,GAAO6N,EAAMxD,EAAEpO,SAAS,KAE1B,OAAO+D,GAUTlI,EAAQmS,MAAQA,EAoBhBnS,EAAQ+V,MAAQA,EAgBhB/V,EAAQoW,OAdR,SAAgBzE,EAAKjN,EAAOC,EAAKwR,GAC/B,IAAIzS,EAAMiB,EAAMD,EAChBgN,EAAOhO,EAAM,GAAM,GAEnB,IADA,IAAIwE,EAAM,IAAIgD,MAAMxH,EAAM,GACjBQ,EAAI,EAAG0O,EAAIlO,EAAOR,EAAIgE,EAAI9G,OAAQ8C,IAAK0O,GAAK,EAAG,CACtD,IAAIL,EAEFA,EADa,QAAX4D,EACGxE,EAAIiB,IAAM,GAAOjB,EAAIiB,EAAI,IAAM,GAAOjB,EAAIiB,EAAI,IAAM,EAAKjB,EAAIiB,EAAI,GAEjEjB,EAAIiB,EAAI,IAAM,GAAOjB,EAAIiB,EAAI,IAAM,GAAOjB,EAAIiB,EAAI,IAAM,EAAKjB,EAAIiB,GACxE1K,EAAIhE,GAAKqO,IAAM,EAEjB,OAAOrK,GAsBTlI,EAAQqW,QAlBR,SAAiB1E,EAAKwE,GAEpB,IADA,IAAIjO,EAAM,IAAIgD,MAAmB,EAAbyG,EAAIvQ,QACf8C,EAAI,EAAG0O,EAAI,EAAG1O,EAAIyN,EAAIvQ,OAAQ8C,IAAK0O,GAAK,EAAG,CAClD,IAAIvN,EAAIsM,EAAIzN,GACG,QAAXiS,GACFjO,EAAI0K,GAAKvN,IAAM,GACf6C,EAAI0K,EAAI,GAAMvN,IAAM,GAAM,IAC1B6C,EAAI0K,EAAI,GAAMvN,IAAM,EAAK,IACzB6C,EAAI0K,EAAI,GAAS,IAAJvN,IAEb6C,EAAI0K,EAAI,GAAKvN,IAAM,GACnB6C,EAAI0K,EAAI,GAAMvN,IAAM,GAAM,IAC1B6C,EAAI0K,EAAI,GAAMvN,IAAM,EAAK,IACzB6C,EAAI0K,GAAS,IAAJvN,GAGb,OAAO6C,GAOTlI,EAAQsW,OAHR,SAAgB/D,EAAGpN,GACjB,OAAQoN,IAAMpN,EAAMoN,GAAM,GAAKpN,GAOjCnF,EAAQuW,OAHR,SAAgBhE,EAAGpN,GACjB,OAAQoN,GAAKpN,EAAMoN,IAAO,GAAKpN,GAOjCnF,EAAQwW,MAHR,SAAe7M,EAAGxE,GAChB,OAAQwE,EAAIxE,IAAO,GAOrBnF,EAAQyW,QAHR,SAAiB9M,EAAGxE,EAAGwC,GACrB,OAAQgC,EAAIxE,EAAIwC,IAAO,GAOzB3H,EAAQ0W,QAHR,SAAiB/M,EAAGxE,EAAGwC,EAAGgP,GACxB,OAAQhN,EAAIxE,EAAIwC,EAAIgP,IAAO,GAO7B3W,EAAQ4W,QAHR,SAAiBjN,EAAGxE,EAAGwC,EAAGgP,EAAGzN,GAC3B,OAAQS,EAAIxE,EAAIwC,EAAIgP,EAAIzN,IAAO,GAajClJ,EAAQ6W,MATR,SAAehV,EAAKmI,EAAK8M,EAAIC,GAC3B,IAAIC,EAAKnV,EAAImI,GAGTnC,EAAMkP,EAFDlV,EAAImI,EAAM,KAEI,EACnBpC,GAAMC,EAAKkP,EAAK,EAAI,GAAKD,EAAKE,EAClCnV,EAAImI,GAAOpC,IAAO,EAClB/F,EAAImI,EAAM,GAAKnC,GASjB7H,EAAQiX,SALR,SAAkBH,EAAIC,EAAIC,EAAIE,GAG5B,OAFUH,EAAKG,IAAQ,EACRH,EAAK,EAAI,GAAKD,EAAKE,IACpB,GAQhBhX,EAAQmX,SAJR,SAAkBL,EAAIC,EAAIC,EAAIE,GAE5B,OADSH,EAAKG,IACA,GAiBhBlX,EAAQoX,WAbR,SAAoBN,EAAIC,EAAIC,EAAIE,EAAIG,EAAIC,EAAIC,EAAIC,GAC9C,IAAIC,EAAQ,EACR5P,EAAKkP,EAST,OAPAU,IADA5P,EAAMA,EAAKqP,IAAQ,GACLH,EAAK,EAAI,EAEvBU,IADA5P,EAAMA,EAAKyP,IAAQ,GACLA,EAAK,EAAI,EAIdR,EAAKE,EAAKK,EAAKE,GAFxBE,IADA5P,EAAMA,EAAK2P,IAAQ,GACLA,EAAK,EAAI,KAGT,GAQhBxX,EAAQ0X,WAJR,SAAoBZ,EAAIC,EAAIC,EAAIE,EAAIG,EAAIC,EAAIC,EAAIC,GAE9C,OADST,EAAKG,EAAKI,EAAKE,IACV,GAmBhBxX,EAAQ2X,WAfR,SAAoBb,EAAIC,EAAIC,EAAIE,EAAIG,EAAIC,EAAIC,EAAIC,EAAII,EAAIC,GACtD,IAAIJ,EAAQ,EACR5P,EAAKkP,EAWT,OATAU,IADA5P,EAAMA,EAAKqP,IAAQ,GACLH,EAAK,EAAI,EAEvBU,IADA5P,EAAMA,EAAKyP,IAAQ,GACLA,EAAK,EAAI,EAEvBG,IADA5P,EAAMA,EAAK2P,IAAQ,GACLA,EAAK,EAAI,EAIdV,EAAKE,EAAKK,EAAKE,EAAKK,GAF7BH,IADA5P,EAAMA,EAAKgQ,IAAQ,GACLA,EAAK,EAAI,KAGT,GAShB7X,EAAQ8X,WALR,SAAoBhB,EAAIC,EAAIC,EAAIE,EAAIG,EAAIC,EAAIC,EAAIC,EAAII,EAAIC,GAGtD,OAFSd,EAAKG,EAAKI,EAAKE,EAAKK,IAEf,GAQhB7X,EAAQ+X,UAJR,SAAmBjB,EAAIC,EAAIzE,GAEzB,OADSyE,GAAO,GAAKzE,EAASwE,IAAOxE,KACxB,GAQftS,EAAQgY,UAJR,SAAmBlB,EAAIC,EAAIzE,GAEzB,OADSwE,GAAO,GAAKxE,EAASyE,IAAOzE,KACxB,GAOftS,EAAQiY,SAHR,SAAkBnB,EAAIC,EAAIzE,GACxB,OAAOwE,IAAOxE,GAQhBtS,EAAQkY,SAJR,SAAkBpB,EAAIC,EAAIzE,GAExB,OADSwE,GAAO,GAAKxE,EAASyE,IAAOzE,KACxB,I,iBCnRf,2BACE,aAGA,SAASZ,EAAQ7N,EAAK8N,GACpB,IAAK9N,EAAK,MAAM,IAAIlB,MAAMgP,GAAO,oBAKnC,SAASgE,EAAU1V,EAAMC,GACvBD,EAAKE,OAASD,EACd,IAAIQ,EAAW,aACfA,EAASN,UAAYF,EAAUE,UAC/BH,EAAKG,UAAY,IAAIM,EACrBT,EAAKG,UAAUC,YAAcJ,EAK/B,SAAS8R,EAAIoG,EAAQC,EAAMjC,GACzB,GAAIpE,EAAGsG,KAAKF,GACV,OAAOA,EAGTzV,KAAK4V,SAAW,EAChB5V,KAAK6V,MAAQ,KACb7V,KAAKtB,OAAS,EAGdsB,KAAK8V,IAAM,KAEI,OAAXL,IACW,OAATC,GAA0B,OAATA,IACnBjC,EAASiC,EACTA,EAAO,IAGT1V,KAAK+V,MAAMN,GAAU,EAAGC,GAAQ,GAAIjC,GAAU,OAYlD,IAAIvV,EATkB,iBAAXb,EACTA,EAAOC,QAAU+R,EAEjB/R,EAAQ+R,GAAKA,EAGfA,EAAGA,GAAKA,EACRA,EAAG2G,SAAW,GAGd,IACE9X,EAAS,EAAQ,KAAUA,OAC3B,MAAOsI,IAoIT,SAASyP,EAAUzR,EAAKxC,EAAOC,GAG7B,IAFA,IAAIkN,EAAI,EACJnO,EAAMsE,KAAKC,IAAIf,EAAI9F,OAAQuD,GACtBT,EAAIQ,EAAOR,EAAIR,EAAKQ,IAAK,CAChC,IAAIyD,EAAIT,EAAIG,WAAWnD,GAAK,GAE5B2N,IAAM,EAIJA,GADElK,GAAK,IAAMA,GAAK,GACbA,EAAI,GAAK,GAGLA,GAAK,IAAMA,GAAK,GACpBA,EAAI,GAAK,GAIL,GAAJA,EAGT,OAAOkK,EAiCT,SAAS+G,EAAW1R,EAAKxC,EAAOC,EAAK0H,GAGnC,IAFA,IAAIwF,EAAI,EACJnO,EAAMsE,KAAKC,IAAIf,EAAI9F,OAAQuD,GACtBT,EAAIQ,EAAOR,EAAIR,EAAKQ,IAAK,CAChC,IAAIyD,EAAIT,EAAIG,WAAWnD,GAAK,GAE5B2N,GAAKxF,EAIHwF,GADElK,GAAK,GACFA,EAAI,GAAK,GAGLA,GAAK,GACTA,EAAI,GAAK,GAITA,EAGT,OAAOkK,EA5MTE,EAAGsG,KAAO,SAAe/F,GACvB,OAAIA,aAAeP,GAIJ,OAARO,GAA+B,iBAARA,GAC5BA,EAAIjS,YAAYqY,WAAa3G,EAAG2G,UAAYxN,MAAMhJ,QAAQoQ,EAAIiG,QAGlExG,EAAGxH,IAAM,SAAcsO,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGT/G,EAAG9J,IAAM,SAAc4Q,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGT/G,EAAG3R,UAAUqY,MAAQ,SAAeN,EAAQC,EAAMjC,GAChD,GAAsB,iBAAXgC,EACT,OAAOzV,KAAKsW,YAAYb,EAAQC,EAAMjC,GAGxC,GAAsB,iBAAXgC,EACT,OAAOzV,KAAKuW,WAAWd,EAAQC,EAAMjC,GAG1B,QAATiC,IACFA,EAAO,IAET1G,EAAO0G,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,IAGnD,IAAI1T,EAAQ,EACM,OAFlByT,EAASA,EAAOhU,WAAWiL,QAAQ,OAAQ,KAEhC,IACT1K,IAGW,KAAT0T,EACF1V,KAAKwW,UAAUf,EAAQzT,GAEvBhC,KAAKyW,WAAWhB,EAAQC,EAAM1T,GAGd,MAAdyT,EAAO,KACTzV,KAAK4V,SAAW,GAGlB5V,KAAK0W,QAEU,OAAXjD,GAEJzT,KAAKuW,WAAWvW,KAAKwP,UAAWkG,EAAMjC,IAGxCpE,EAAG3R,UAAU4Y,YAAc,SAAsBb,EAAQC,EAAMjC,GACzDgC,EAAS,IACXzV,KAAK4V,SAAW,EAChBH,GAAUA,GAERA,EAAS,UACXzV,KAAK6V,MAAQ,CAAW,SAATJ,GACfzV,KAAKtB,OAAS,GACL+W,EAAS,kBAClBzV,KAAK6V,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,UAEzBzV,KAAKtB,OAAS,IAEdsQ,EAAOyG,EAAS,kBAChBzV,KAAK6V,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,SACvB,GAEFzV,KAAKtB,OAAS,GAGD,OAAX+U,GAGJzT,KAAKuW,WAAWvW,KAAKwP,UAAWkG,EAAMjC,IAGxCpE,EAAG3R,UAAU6Y,WAAa,SAAqBd,EAAQC,EAAMjC,GAG3D,GADAzE,EAAgC,iBAAlByG,EAAO/W,QACjB+W,EAAO/W,QAAU,EAGnB,OAFAsB,KAAK6V,MAAQ,CAAE,GACf7V,KAAKtB,OAAS,EACPsB,KAGTA,KAAKtB,OAAS4G,KAAKqR,KAAKlB,EAAO/W,OAAS,GACxCsB,KAAK6V,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BxB,KAAK6V,MAAMrU,GAAK,EAGlB,IAAIoC,EAAGiM,EACH+G,EAAM,EACV,GAAe,OAAXnD,EACF,IAAKjS,EAAIiU,EAAO/W,OAAS,EAAGkF,EAAI,EAAGpC,GAAK,EAAGA,GAAK,EAC9CqO,EAAI4F,EAAOjU,GAAMiU,EAAOjU,EAAI,IAAM,EAAMiU,EAAOjU,EAAI,IAAM,GACzDxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,GAAMiM,IAAO,GAAK+G,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACPhT,UAGC,GAAe,OAAX6P,EACT,IAAKjS,EAAI,EAAGoC,EAAI,EAAGpC,EAAIiU,EAAO/W,OAAQ8C,GAAK,EACzCqO,EAAI4F,EAAOjU,GAAMiU,EAAOjU,EAAI,IAAM,EAAMiU,EAAOjU,EAAI,IAAM,GACzDxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,GAAMiM,IAAO,GAAK+G,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACPhT,KAIN,OAAO5D,KAAK0W,SA2BdrH,EAAG3R,UAAU8Y,UAAY,SAAoBf,EAAQzT,GAEnDhC,KAAKtB,OAAS4G,KAAKqR,MAAMlB,EAAO/W,OAASsD,GAAS,GAClDhC,KAAK6V,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BxB,KAAK6V,MAAMrU,GAAK,EAGlB,IAAIoC,EAAGiM,EAEH+G,EAAM,EACV,IAAKpV,EAAIiU,EAAO/W,OAAS,EAAGkF,EAAI,EAAGpC,GAAKQ,EAAOR,GAAK,EAClDqO,EAAIoG,EAASR,EAAQjU,EAAGA,EAAI,GAC5BxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAE9B5W,KAAK6V,MAAMjS,EAAI,IAAMiM,IAAO,GAAK+G,EAAO,SACxCA,GAAO,KACI,KACTA,GAAO,GACPhT,KAGApC,EAAI,IAAMQ,IACZ6N,EAAIoG,EAASR,EAAQzT,EAAOR,EAAI,GAChCxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,IAAMiM,IAAO,GAAK+G,EAAO,SAE1C5W,KAAK0W,SA2BPrH,EAAG3R,UAAU+Y,WAAa,SAAqBhB,EAAQC,EAAM1T,GAE3DhC,KAAK6V,MAAQ,CAAE,GACf7V,KAAKtB,OAAS,EAGd,IAAK,IAAImY,EAAU,EAAGC,EAAU,EAAGA,GAAW,SAAWA,GAAWpB,EAClEmB,IAEFA,IACAC,EAAWA,EAAUpB,EAAQ,EAO7B,IALA,IAAIqB,EAAQtB,EAAO/W,OAASsD,EACxBqO,EAAM0G,EAAQF,EACd5U,EAAMqD,KAAKC,IAAIwR,EAAOA,EAAQ1G,GAAOrO,EAErCoR,EAAO,EACF5R,EAAIQ,EAAOR,EAAIS,EAAKT,GAAKqV,EAChCzD,EAAO8C,EAAUT,EAAQjU,EAAGA,EAAIqV,EAASnB,GAEzC1V,KAAKgX,MAAMF,GACP9W,KAAK6V,MAAM,GAAKzC,EAAO,SACzBpT,KAAK6V,MAAM,IAAMzC,EAEjBpT,KAAKiX,OAAO7D,GAIhB,GAAY,IAAR/C,EAAW,CACb,IAAInG,EAAM,EAGV,IAFAkJ,EAAO8C,EAAUT,EAAQjU,EAAGiU,EAAO/W,OAAQgX,GAEtClU,EAAI,EAAGA,EAAI6O,EAAK7O,IACnB0I,GAAOwL,EAGT1V,KAAKgX,MAAM9M,GACPlK,KAAK6V,MAAM,GAAKzC,EAAO,SACzBpT,KAAK6V,MAAM,IAAMzC,EAEjBpT,KAAKiX,OAAO7D,KAKlB/D,EAAG3R,UAAUwD,KAAO,SAAegW,GACjCA,EAAKrB,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/B0V,EAAKrB,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAE7B0V,EAAKxY,OAASsB,KAAKtB,OACnBwY,EAAKtB,SAAW5V,KAAK4V,SACrBsB,EAAKpB,IAAM9V,KAAK8V,KAGlBzG,EAAG3R,UAAUyS,MAAQ,WACnB,IAAIhB,EAAI,IAAIE,EAAG,MAEf,OADArP,KAAKkB,KAAKiO,GACHA,GAGTE,EAAG3R,UAAUyZ,QAAU,SAAkBnY,GACvC,KAAOgB,KAAKtB,OAASM,GACnBgB,KAAK6V,MAAM7V,KAAKtB,UAAY,EAE9B,OAAOsB,MAITqP,EAAG3R,UAAUgZ,MAAQ,WACnB,KAAO1W,KAAKtB,OAAS,GAAqC,IAAhCsB,KAAK6V,MAAM7V,KAAKtB,OAAS,IACjDsB,KAAKtB,SAEP,OAAOsB,KAAKoX,aAGd/H,EAAG3R,UAAU0Z,UAAY,WAKvB,OAHoB,IAAhBpX,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,KAClC7V,KAAK4V,SAAW,GAEX5V,MAGTqP,EAAG3R,UAAUkK,QAAU,WACrB,OAAQ5H,KAAK8V,IAAM,UAAY,SAAW9V,KAAKyB,SAAS,IAAM,KAiChE,IAAI4V,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UAsjB9D,SAASC,EAAYC,EAAM7H,EAAKjH,GAC9BA,EAAIiN,SAAWhG,EAAIgG,SAAW6B,EAAK7B,SACnC,IAAI5U,EAAOyW,EAAK/Y,OAASkR,EAAIlR,OAAU,EACvCiK,EAAIjK,OAASsC,EACbA,EAAOA,EAAM,EAAK,EAGlB,IAAIiG,EAAoB,EAAhBwQ,EAAK5B,MAAM,GACfpT,EAAmB,EAAfmN,EAAIiG,MAAM,GACd1G,EAAIlI,EAAIxE,EAER0C,EAAS,SAAJgK,EACL4F,EAAS5F,EAAI,SAAa,EAC9BxG,EAAIkN,MAAM,GAAK1Q,EAEf,IAAK,IAAI+K,EAAI,EAAGA,EAAIlP,EAAKkP,IAAK,CAM5B,IAHA,IAAIwH,EAAS3C,IAAU,GACnB4C,EAAgB,SAAR5C,EACR6C,EAAOtS,KAAKC,IAAI2K,EAAGN,EAAIlR,OAAS,GAC3BkF,EAAI0B,KAAKuC,IAAI,EAAGqI,EAAIuH,EAAK/Y,OAAS,GAAIkF,GAAKgU,EAAMhU,IAAK,CAC7D,IAAIpC,EAAK0O,EAAItM,EAAK,EAIlB8T,IADAvI,GAFAlI,EAAoB,EAAhBwQ,EAAK5B,MAAMrU,KACfiB,EAAmB,EAAfmN,EAAIiG,MAAMjS,IACF+T,GACG,SAAa,EAC5BA,EAAY,SAAJxI,EAEVxG,EAAIkN,MAAM3F,GAAa,EAARyH,EACf5C,EAAiB,EAAT2C,EAQV,OANc,IAAV3C,EACFpM,EAAIkN,MAAM3F,GAAa,EAAR6E,EAEfpM,EAAIjK,SAGCiK,EAAI+N,QAzlBbrH,EAAG3R,UAAU+D,SAAW,SAAmBiU,EAAMmC,GAI/C,IAAIlP,EACJ,GAHAkP,EAAoB,EAAVA,GAAe,EAGZ,MAJbnC,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjC/M,EAAM,GAGN,IAFA,IAAIiO,EAAM,EACN7B,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIqO,EAAI7P,KAAK6V,MAAMrU,GACf4R,GAA+B,UAArBvD,GAAK+G,EAAO7B,IAAmBtT,SAAS,IAGpDkH,EADY,KADdoM,EAASlF,IAAO,GAAK+G,EAAQ,WACVpV,IAAMxB,KAAKtB,OAAS,EAC/B2Y,EAAM,EAAIjE,EAAK1U,QAAU0U,EAAOzK,EAEhCyK,EAAOzK,GAEfiO,GAAO,IACI,KACTA,GAAO,GACPpV,KAMJ,IAHc,IAAVuT,IACFpM,EAAMoM,EAAMtT,SAAS,IAAMkH,GAEtBA,EAAIjK,OAASmZ,GAAY,GAC9BlP,EAAM,IAAMA,EAKd,OAHsB,IAAlB3I,KAAK4V,WACPjN,EAAM,IAAMA,GAEPA,EAGT,GAAI+M,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,GAAI,CAElD,IAAIoC,EAAYR,EAAW5B,GAEvBqC,EAAYR,EAAW7B,GAC3B/M,EAAM,GACN,IAAI1D,EAAIjF,KAAKmQ,QAEb,IADAlL,EAAE2Q,SAAW,GACL3Q,EAAE+S,UAAU,CAClB,IAAI7I,EAAIlK,EAAEgT,KAAKF,GAAWtW,SAASiU,GAMjC/M,GALF1D,EAAIA,EAAEiT,MAAMH,IAELC,SAGC7I,EAAIxG,EAFJ0O,EAAMS,EAAY3I,EAAEzQ,QAAUyQ,EAAIxG,EAQ5C,IAHI3I,KAAKgY,WACPrP,EAAM,IAAMA,GAEPA,EAAIjK,OAASmZ,GAAY,GAC9BlP,EAAM,IAAMA,EAKd,OAHsB,IAAlB3I,KAAK4V,WACPjN,EAAM,IAAMA,GAEPA,EAGTqG,GAAO,EAAO,oCAGhBK,EAAG3R,UAAUya,SAAW,WACtB,IAAIzP,EAAM1I,KAAK6V,MAAM,GASrB,OARoB,IAAhB7V,KAAKtB,OACPgK,GAAuB,SAAhB1I,KAAK6V,MAAM,GACO,IAAhB7V,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,GAEzCnN,GAAO,iBAAoC,SAAhB1I,KAAK6V,MAAM,GAC7B7V,KAAKtB,OAAS,GACvBsQ,GAAO,EAAO,8CAEU,IAAlBhP,KAAK4V,UAAmBlN,EAAMA,GAGxC2G,EAAG3R,UAAU6K,OAAS,WACpB,OAAOvI,KAAKyB,SAAS,KAGvB4N,EAAG3R,UAAU0a,SAAW,SAAmB3E,EAAQ/U,GAEjD,OADAsQ,OAAyB,IAAX9Q,GACP8B,KAAKqY,YAAYna,EAAQuV,EAAQ/U,IAG1C2Q,EAAG3R,UAAU8R,QAAU,SAAkBiE,EAAQ/U,GAC/C,OAAOsB,KAAKqY,YAAY7P,MAAOiL,EAAQ/U,IAGzC2Q,EAAG3R,UAAU2a,YAAc,SAAsBC,EAAW7E,EAAQ/U,GAClE,IAAI2B,EAAaL,KAAKK,aAClBkY,EAAY7Z,GAAU4G,KAAKuC,IAAI,EAAGxH,GACtC2O,EAAO3O,GAAckY,EAAW,yCAChCvJ,EAAOuJ,EAAY,EAAG,+BAEtBvY,KAAK0W,QACL,IAGIjU,EAAGjB,EAHH0H,EAA0B,OAAXuK,EACfjO,EAAM,IAAI8S,EAAUC,GAGpBC,EAAIxY,KAAKmQ,QACb,GAAKjH,EAYE,CACL,IAAK1H,EAAI,GAAIgX,EAAER,SAAUxW,IACvBiB,EAAI+V,EAAElI,MAAM,KACZkI,EAAE/H,OAAO,GAETjL,EAAIhE,GAAKiB,EAGX,KAAOjB,EAAI+W,EAAW/W,IACpBgE,EAAIhE,GAAK,MArBM,CAEjB,IAAKA,EAAI,EAAGA,EAAI+W,EAAYlY,EAAYmB,IACtCgE,EAAIhE,GAAK,EAGX,IAAKA,EAAI,GAAIgX,EAAER,SAAUxW,IACvBiB,EAAI+V,EAAElI,MAAM,KACZkI,EAAE/H,OAAO,GAETjL,EAAI+S,EAAY/W,EAAI,GAAKiB,EAe7B,OAAO+C,GAGLF,KAAKmT,MACPpJ,EAAG3R,UAAUgb,WAAa,SAAqB7I,GAC7C,OAAO,GAAKvK,KAAKmT,MAAM5I,IAGzBR,EAAG3R,UAAUgb,WAAa,SAAqB7I,GAC7C,IAAI8I,EAAI9I,EACJV,EAAI,EAiBR,OAhBIwJ,GAAK,OACPxJ,GAAK,GACLwJ,KAAO,IAELA,GAAK,KACPxJ,GAAK,EACLwJ,KAAO,GAELA,GAAK,IACPxJ,GAAK,EACLwJ,KAAO,GAELA,GAAK,IACPxJ,GAAK,EACLwJ,KAAO,GAEFxJ,EAAIwJ,GAIftJ,EAAG3R,UAAUkb,UAAY,SAAoB/I,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAI8I,EAAI9I,EACJV,EAAI,EAoBR,OAnBqB,IAAZ,KAAJwJ,KACHxJ,GAAK,GACLwJ,KAAO,IAEU,IAAV,IAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,GAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,EAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,EAAJA,IACHxJ,IAEKA,GAITE,EAAG3R,UAAUsS,UAAY,WACvB,IAAIH,EAAI7P,KAAK6V,MAAM7V,KAAKtB,OAAS,GAC7BwG,EAAKlF,KAAK0Y,WAAW7I,GACzB,OAA2B,IAAnB7P,KAAKtB,OAAS,GAAUwG,GAiBlCmK,EAAG3R,UAAUmb,SAAW,WACtB,GAAI7Y,KAAKgY,SAAU,OAAO,EAG1B,IADA,IAAI7I,EAAI,EACC3N,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIiB,EAAIzC,KAAK4Y,UAAU5Y,KAAK6V,MAAMrU,IAElC,GADA2N,GAAK1M,EACK,KAANA,EAAU,MAEhB,OAAO0M,GAGTE,EAAG3R,UAAU2C,WAAa,WACxB,OAAOiF,KAAKqR,KAAK3W,KAAKgQ,YAAc,IAGtCX,EAAG3R,UAAUob,OAAS,SAAiBC,GACrC,OAAsB,IAAlB/Y,KAAK4V,SACA5V,KAAKgZ,MAAMC,MAAMF,GAAOG,MAAM,GAEhClZ,KAAKmQ,SAGdd,EAAG3R,UAAUyb,SAAW,SAAmBJ,GACzC,OAAI/Y,KAAKoZ,MAAML,EAAQ,GACd/Y,KAAKqZ,KAAKN,GAAOG,MAAM,GAAGI,OAE5BtZ,KAAKmQ,SAGdd,EAAG3R,UAAU6b,MAAQ,WACnB,OAAyB,IAAlBvZ,KAAK4V,UAIdvG,EAAG3R,UAAU8b,IAAM,WACjB,OAAOxZ,KAAKmQ,QAAQmJ,QAGtBjK,EAAG3R,UAAU4b,KAAO,WAKlB,OAJKtZ,KAAKgY,WACRhY,KAAK4V,UAAY,GAGZ5V,MAITqP,EAAG3R,UAAU+b,KAAO,SAAe7J,GACjC,KAAO5P,KAAKtB,OAASkR,EAAIlR,QACvBsB,KAAK6V,MAAM7V,KAAKtB,UAAY,EAG9B,IAAK,IAAI8C,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAC9BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAAKoO,EAAIiG,MAAMrU,GAG5C,OAAOxB,KAAK0W,SAGdrH,EAAG3R,UAAUgc,IAAM,SAAc9J,GAE/B,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAKyZ,KAAK7J,IAInBP,EAAG3R,UAAUic,GAAK,SAAa/J,GAC7B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQuJ,IAAI9J,GAC/CA,EAAIO,QAAQuJ,IAAI1Z,OAGzBqP,EAAG3R,UAAUkc,IAAM,SAAchK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQsJ,KAAK7J,GAChDA,EAAIO,QAAQsJ,KAAKzZ,OAI1BqP,EAAG3R,UAAUmc,MAAQ,SAAgBjK,GAEnC,IAAInN,EAEFA,EADEzC,KAAKtB,OAASkR,EAAIlR,OAChBkR,EAEA5P,KAGN,IAAK,IAAIwB,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAAKoO,EAAIiG,MAAMrU,GAK5C,OAFAxB,KAAKtB,OAAS+D,EAAE/D,OAETsB,KAAK0W,SAGdrH,EAAG3R,UAAUoc,KAAO,SAAelK,GAEjC,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAK6Z,MAAMjK,IAIpBP,EAAG3R,UAAUqc,IAAM,SAAcnK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ2J,KAAKlK,GAChDA,EAAIO,QAAQ2J,KAAK9Z,OAG1BqP,EAAG3R,UAAUsc,KAAO,SAAepK,GACjC,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ0J,MAAMjK,GACjDA,EAAIO,QAAQ0J,MAAM7Z,OAI3BqP,EAAG3R,UAAUuc,MAAQ,SAAgBrK,GAEnC,IAAI3I,EACAxE,EACAzC,KAAKtB,OAASkR,EAAIlR,QACpBuI,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAGN,IAAK,IAAIwB,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAAKiB,EAAEoT,MAAMrU,GAGvC,GAAIxB,OAASiH,EACX,KAAOzF,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAM5B,OAFAxB,KAAKtB,OAASuI,EAAEvI,OAETsB,KAAK0W,SAGdrH,EAAG3R,UAAUwc,KAAO,SAAetK,GAEjC,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAKia,MAAMrK,IAIpBP,EAAG3R,UAAUyc,IAAM,SAAcvK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ+J,KAAKtK,GAChDA,EAAIO,QAAQ+J,KAAKla,OAG1BqP,EAAG3R,UAAU0c,KAAO,SAAexK,GACjC,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ8J,MAAMrK,GACjDA,EAAIO,QAAQ8J,MAAMja,OAI3BqP,EAAG3R,UAAUub,MAAQ,SAAgBF,GACnC/J,EAAwB,iBAAV+J,GAAsBA,GAAS,GAE7C,IAAIsB,EAAsC,EAAxB/U,KAAKqR,KAAKoC,EAAQ,IAChCuB,EAAWvB,EAAQ,GAGvB/Y,KAAKmX,QAAQkD,GAETC,EAAW,GACbD,IAIF,IAAK,IAAI7Y,EAAI,EAAGA,EAAI6Y,EAAa7Y,IAC/BxB,KAAK6V,MAAMrU,GAAsB,UAAhBxB,KAAK6V,MAAMrU,GAS9B,OALI8Y,EAAW,IACbta,KAAK6V,MAAMrU,IAAMxB,KAAK6V,MAAMrU,GAAM,UAAc,GAAK8Y,GAIhDta,KAAK0W,SAGdrH,EAAG3R,UAAU2b,KAAO,SAAeN,GACjC,OAAO/Y,KAAKmQ,QAAQ8I,MAAMF,IAI5B1J,EAAG3R,UAAU6c,KAAO,SAAeC,EAAKrZ,GACtC6N,EAAsB,iBAARwL,GAAoBA,GAAO,GAEzC,IAAI5D,EAAO4D,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAUjB,OARAxa,KAAKmX,QAAQP,EAAM,GAGjB5W,KAAK6V,MAAMe,GADTzV,EACgBnB,KAAK6V,MAAMe,GAAQ,GAAK6D,EAExBza,KAAK6V,MAAMe,KAAS,GAAK6D,GAGtCza,KAAK0W,SAIdrH,EAAG3R,UAAUgd,KAAO,SAAe9K,GACjC,IAAIT,EAkBAlI,EAAGxE,EAfP,GAAsB,IAAlBzC,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAI7B,OAHA5V,KAAK4V,SAAW,EAChBzG,EAAInP,KAAK2a,KAAK/K,GACd5P,KAAK4V,UAAY,EACV5V,KAAKoX,YAGP,GAAsB,IAAlBpX,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAIpC,OAHAhG,EAAIgG,SAAW,EACfzG,EAAInP,KAAK2a,KAAK/K,GACdA,EAAIgG,SAAW,EACRzG,EAAEiI,YAKPpX,KAAKtB,OAASkR,EAAIlR,QACpBuI,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAIN,IADA,IAAI+U,EAAQ,EACHvT,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5B2N,GAAkB,EAAblI,EAAE4O,MAAMrU,KAAwB,EAAbiB,EAAEoT,MAAMrU,IAAUuT,EAC1C/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAChB4F,EAAQ5F,IAAM,GAEhB,KAAiB,IAAV4F,GAAevT,EAAIyF,EAAEvI,OAAQ8C,IAClC2N,GAAkB,EAAblI,EAAE4O,MAAMrU,IAAUuT,EACvB/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAChB4F,EAAQ5F,IAAM,GAIhB,GADAnP,KAAKtB,OAASuI,EAAEvI,OACF,IAAVqW,EACF/U,KAAK6V,MAAM7V,KAAKtB,QAAUqW,EAC1B/U,KAAKtB,cAEA,GAAIuI,IAAMjH,KACf,KAAOwB,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAI5B,OAAOxB,MAITqP,EAAG3R,UAAUkd,IAAM,SAAchL,GAC/B,IAAIpK,EACJ,OAAqB,IAAjBoK,EAAIgG,UAAoC,IAAlB5V,KAAK4V,UAC7BhG,EAAIgG,SAAW,EACfpQ,EAAMxF,KAAKuL,IAAIqE,GACfA,EAAIgG,UAAY,EACTpQ,GACmB,IAAjBoK,EAAIgG,UAAoC,IAAlB5V,KAAK4V,UACpC5V,KAAK4V,SAAW,EAChBpQ,EAAMoK,EAAIrE,IAAIvL,MACdA,KAAK4V,SAAW,EACTpQ,GAGLxF,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQuK,KAAK9K,GAEhDA,EAAIO,QAAQuK,KAAK1a,OAI1BqP,EAAG3R,UAAUid,KAAO,SAAe/K,GAEjC,GAAqB,IAAjBA,EAAIgG,SAAgB,CACtBhG,EAAIgG,SAAW,EACf,IAAIzG,EAAInP,KAAK0a,KAAK9K,GAElB,OADAA,EAAIgG,SAAW,EACRzG,EAAEiI,YAGJ,GAAsB,IAAlBpX,KAAK4V,SAId,OAHA5V,KAAK4V,SAAW,EAChB5V,KAAK0a,KAAK9K,GACV5P,KAAK4V,SAAW,EACT5V,KAAKoX,YAId,IAWInQ,EAAGxE,EAXH4T,EAAMrW,KAAKqW,IAAIzG,GAGnB,GAAY,IAARyG,EAIF,OAHArW,KAAK4V,SAAW,EAChB5V,KAAKtB,OAAS,EACdsB,KAAK6V,MAAM,GAAK,EACT7V,KAKLqW,EAAM,GACRpP,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAIN,IADA,IAAI+U,EAAQ,EACHvT,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAE5BuT,GADA5F,GAAkB,EAAblI,EAAE4O,MAAMrU,KAAwB,EAAbiB,EAAEoT,MAAMrU,IAAUuT,IAC7B,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAElB,KAAiB,IAAV4F,GAAevT,EAAIyF,EAAEvI,OAAQ8C,IAElCuT,GADA5F,GAAkB,EAAblI,EAAE4O,MAAMrU,IAAUuT,IACV,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAIlB,GAAc,IAAV4F,GAAevT,EAAIyF,EAAEvI,QAAUuI,IAAMjH,KACvC,KAAOwB,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAU5B,OANAxB,KAAKtB,OAAS4G,KAAKuC,IAAI7H,KAAKtB,OAAQ8C,GAEhCyF,IAAMjH,OACRA,KAAK4V,SAAW,GAGX5V,KAAK0W,SAIdrH,EAAG3R,UAAU6N,IAAM,SAAcqE,GAC/B,OAAO5P,KAAKmQ,QAAQwK,KAAK/K,IA+C3B,IAAIiL,EAAc,SAAsBpD,EAAM7H,EAAKjH,GACjD,IAIIxD,EACA2V,EACA5V,EANA+B,EAAIwQ,EAAK5B,MACTpT,EAAImN,EAAIiG,MACRkF,EAAIpS,EAAIkN,MACR5Q,EAAI,EAIJ+V,EAAY,EAAP/T,EAAE,GACPgU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPlU,EAAE,GACPmU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPrU,EAAE,GACPsU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxU,EAAE,GACPyU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3U,EAAE,GACP4U,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9U,EAAE,GACP+U,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjV,EAAE,GACPkV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPpV,EAAE,GACPqV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPvV,EAAE,GACPwV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP1V,EAAE,GACP2V,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPra,EAAE,GACPsa,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxa,EAAE,GACPya,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3a,EAAE,GACP4a,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9a,EAAE,GACP+a,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjb,EAAE,GACPkb,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAPpb,EAAE,GACPqb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPvb,EAAE,GACPwb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP1b,EAAE,GACP2b,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP7b,EAAE,GACP8b,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPhc,EAAE,GACPic,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjB9V,EAAIiN,SAAW6B,EAAK7B,SAAWhG,EAAIgG,SACnCjN,EAAIjK,OAAS,GAMb,IAAIkgB,IAAQ3Z,GAJZE,EAAKG,KAAKuZ,KAAK5D,EAAK8B,IAIE,KAAa,MAFnCjC,GADAA,EAAMxV,KAAKuZ,KAAK5D,EAAK+B,IACR1X,KAAKuZ,KAAK3D,EAAK6B,GAAQ,KAEU,IAAO,EACrD9X,IAFAC,EAAKI,KAAKuZ,KAAK3D,EAAK8B,KAEPlC,IAAQ,IAAO,IAAM8D,KAAO,IAAO,EAChDA,IAAM,SAENzZ,EAAKG,KAAKuZ,KAAKzD,EAAK2B,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKzD,EAAK4B,IACR1X,KAAKuZ,KAAKxD,EAAK0B,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKxD,EAAK2B,GAKpB,IAAI8B,IAAQ7Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKiC,GAAQ,GAIZ,KAAa,MAFnCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKkC,GAAQ,GACvB7X,KAAKuZ,KAAK3D,EAAKgC,GAAQ,KAEU,IAAO,EACrDjY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKiC,GAAQ,IAErBrC,IAAQ,IAAO,IAAMgE,KAAO,IAAO,EAChDA,IAAM,SAEN3Z,EAAKG,KAAKuZ,KAAKtD,EAAKwB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKtD,EAAKyB,IACR1X,KAAKuZ,KAAKrD,EAAKuB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKrD,EAAKwB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK8B,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK+B,GAAQ,GACvB7X,KAAKuZ,KAAKxD,EAAK6B,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK8B,GAAQ,EAKlC,IAAI4B,IAAQ9Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKoC,GAAQ,GAIZ,KAAa,MAFnCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKqC,GAAQ,GACvBhY,KAAKuZ,KAAK3D,EAAKmC,GAAQ,KAEU,IAAO,EACrDpY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKoC,GAAQ,IAErBxC,IAAQ,IAAO,IAAMiE,KAAO,IAAO,EAChDA,IAAM,SAEN5Z,EAAKG,KAAKuZ,KAAKnD,EAAKqB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKnD,EAAKsB,IACR1X,KAAKuZ,KAAKlD,EAAKoB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKlD,EAAKqB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK2B,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK4B,GAAQ,GACvB7X,KAAKuZ,KAAKrD,EAAK0B,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK2B,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKiC,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKkC,GAAQ,GACvBhY,KAAKuZ,KAAKxD,EAAKgC,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKiC,GAAQ,EAKlC,IAAI0B,IAAQ/Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKuC,GAAQ,GAIZ,KAAa,MAFnC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKwC,GAAQ,GACvBnY,KAAKuZ,KAAK3D,EAAKsC,GAAQ,KAEU,IAAO,EACrDvY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKuC,GAAQ,IAErB3C,IAAQ,IAAO,IAAMkE,KAAO,IAAO,EAChDA,IAAM,SAEN7Z,EAAKG,KAAKuZ,KAAKhD,EAAKkB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKhD,EAAKmB,IACR1X,KAAKuZ,KAAK/C,EAAKiB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAK/C,EAAKkB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKwB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKyB,GAAQ,GACvB7X,KAAKuZ,KAAKlD,EAAKuB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKwB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK8B,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK+B,GAAQ,GACvBhY,KAAKuZ,KAAKrD,EAAK6B,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK8B,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKoC,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKqC,GAAQ,GACvBnY,KAAKuZ,KAAKxD,EAAKmC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKoC,GAAQ,EAKlC,IAAIwB,IAAQha,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAK0C,GAAQ,GAIZ,KAAa,MAFnC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK2C,IAAQ,GACvBtY,KAAKuZ,KAAK3D,EAAKyC,GAAQ,KAEU,IAAO,EACrD1Y,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAK0C,IAAQ,IAErB9C,IAAQ,IAAO,IAAMmE,KAAO,IAAO,EAChDA,IAAM,SAEN9Z,EAAKG,KAAKuZ,KAAK7C,EAAKe,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAK7C,EAAKgB,IACR1X,KAAKuZ,KAAK5C,EAAKc,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAK5C,EAAKe,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKqB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKsB,GAAQ,GACvB7X,KAAKuZ,KAAK/C,EAAKoB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKqB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK2B,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK4B,GAAQ,GACvBhY,KAAKuZ,KAAKlD,EAAK0B,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK2B,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKiC,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKkC,GAAQ,GACvBnY,KAAKuZ,KAAKrD,EAAKgC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKiC,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKuC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKwC,IAAQ,GACvBtY,KAAKuZ,KAAKxD,EAAKsC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKuC,IAAQ,EAKlC,IAAIsB,IAAQja,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAK6C,IAAQ,GAIZ,KAAa,MAFnChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK8C,IAAQ,GACvBzY,KAAKuZ,KAAK3D,EAAK4C,IAAQ,KAEU,IAAO,EACrD7Y,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAK6C,IAAQ,IAErBjD,IAAQ,IAAO,IAAMoE,KAAO,IAAO,EAChDA,IAAM,SAEN/Z,EAAKG,KAAKuZ,KAAK1C,EAAKY,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAK1C,EAAKa,IACR1X,KAAKuZ,KAAKzC,EAAKW,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKzC,EAAKY,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKkB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKmB,GAAQ,GACvB7X,KAAKuZ,KAAK5C,EAAKiB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKkB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKwB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKyB,GAAQ,GACvBhY,KAAKuZ,KAAK/C,EAAKuB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKwB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK8B,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK+B,GAAQ,GACvBnY,KAAKuZ,KAAKlD,EAAK6B,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK8B,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKoC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKqC,IAAQ,GACvBtY,KAAKuZ,KAAKrD,EAAKmC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKoC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK0C,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK2C,IAAQ,GACvBzY,KAAKuZ,KAAKxD,EAAKyC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK0C,IAAQ,EAKlC,IAAIoB,IAAQla,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKgD,IAAQ,GAIZ,KAAa,MAFnCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKiD,IAAQ,GACvB5Y,KAAKuZ,KAAK3D,EAAK+C,IAAQ,KAEU,IAAO,EACrDhZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKgD,IAAQ,IAErBpD,IAAQ,IAAO,IAAMqE,KAAO,IAAO,EAChDA,IAAM,SAENha,EAAKG,KAAKuZ,KAAKvC,EAAKS,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKvC,EAAKU,IACR1X,KAAKuZ,KAAKtC,EAAKQ,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKtC,EAAKS,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKe,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKgB,GAAQ,GACvB7X,KAAKuZ,KAAKzC,EAAKc,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKe,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKqB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKsB,GAAQ,GACvBhY,KAAKuZ,KAAK5C,EAAKoB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKqB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK2B,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK4B,GAAQ,GACvBnY,KAAKuZ,KAAK/C,EAAK0B,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK2B,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKiC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKkC,IAAQ,GACvBtY,KAAKuZ,KAAKlD,EAAKgC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKiC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKuC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKwC,IAAQ,GACvBzY,KAAKuZ,KAAKrD,EAAKsC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKuC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK6C,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK8C,IAAQ,GACvB5Y,KAAKuZ,KAAKxD,EAAK4C,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK6C,IAAQ,EAKlC,IAAIkB,IAAQna,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKmD,IAAQ,GAIZ,KAAa,MAFnCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKoD,IAAQ,GACvB/Y,KAAKuZ,KAAK3D,EAAKkD,IAAQ,KAEU,IAAO,EACrDnZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKmD,IAAQ,IAErBvD,IAAQ,IAAO,IAAMsE,KAAO,IAAO,EAChDA,IAAM,SAENja,EAAKG,KAAKuZ,KAAKpC,EAAKM,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKpC,EAAKO,IACR1X,KAAKuZ,KAAKnC,EAAKK,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKnC,EAAKM,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKY,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKa,GAAQ,GACvB7X,KAAKuZ,KAAKtC,EAAKW,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKY,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKkB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKmB,GAAQ,GACvBhY,KAAKuZ,KAAKzC,EAAKiB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKkB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKwB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKyB,GAAQ,GACvBnY,KAAKuZ,KAAK5C,EAAKuB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKwB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK8B,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK+B,IAAQ,GACvBtY,KAAKuZ,KAAK/C,EAAK6B,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK8B,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKoC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKqC,IAAQ,GACvBzY,KAAKuZ,KAAKlD,EAAKmC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKoC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK0C,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK2C,IAAQ,GACvB5Y,KAAKuZ,KAAKrD,EAAKyC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK0C,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKgD,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKiD,IAAQ,GACvB/Y,KAAKuZ,KAAKxD,EAAK+C,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKgD,IAAQ,EAKlC,IAAIgB,IAAQpa,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKsD,IAAQ,GAIZ,KAAa,MAFnCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKuD,IAAQ,GACvBlZ,KAAKuZ,KAAK3D,EAAKqD,IAAQ,KAEU,IAAO,EACrDtZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKsD,IAAQ,IAErB1D,IAAQ,IAAO,IAAMuE,KAAO,IAAO,EAChDA,IAAM,SAENla,EAAKG,KAAKuZ,KAAKjC,EAAKG,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKI,IACR1X,KAAKuZ,KAAKhC,EAAKE,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKhC,EAAKG,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKS,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKU,GAAQ,GACvB7X,KAAKuZ,KAAKnC,EAAKQ,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKS,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKe,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKgB,GAAQ,GACvBhY,KAAKuZ,KAAKtC,EAAKc,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKe,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKqB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKsB,GAAQ,GACvBnY,KAAKuZ,KAAKzC,EAAKoB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKqB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK2B,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK4B,IAAQ,GACvBtY,KAAKuZ,KAAK5C,EAAK0B,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK2B,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKiC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKkC,IAAQ,GACvBzY,KAAKuZ,KAAK/C,EAAKgC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKiC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKuC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKwC,IAAQ,GACvB5Y,KAAKuZ,KAAKlD,EAAKsC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKuC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK6C,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK8C,IAAQ,GACvB/Y,KAAKuZ,KAAKrD,EAAK4C,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK6C,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKmD,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKoD,IAAQ,GACvBlZ,KAAKuZ,KAAKxD,EAAKkD,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKmD,IAAQ,EAKlC,IAAIc,IAAQra,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKyD,IAAQ,GAIZ,KAAa,MAFnC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK0D,IAAQ,GACvBrZ,KAAKuZ,KAAK3D,EAAKwD,IAAQ,KAEU,IAAO,EACrDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKyD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMwE,KAAO,IAAO,EAChDA,IAAM,SAENna,EAAKG,KAAKuZ,KAAKjC,EAAKM,GAEpBpC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKO,IACR7X,KAAKuZ,KAAKhC,EAAKK,GAAQ,EACpChY,EAAKI,KAAKuZ,KAAKhC,EAAKM,GACpBhY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKY,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKa,GAAQ,GACvBhY,KAAKuZ,KAAKnC,EAAKW,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKY,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKkB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKmB,GAAQ,GACvBnY,KAAKuZ,KAAKtC,EAAKiB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKkB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKwB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKyB,IAAQ,GACvBtY,KAAKuZ,KAAKzC,EAAKuB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKwB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK8B,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK+B,IAAQ,GACvBzY,KAAKuZ,KAAK5C,EAAK6B,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK8B,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKoC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKqC,IAAQ,GACvB5Y,KAAKuZ,KAAK/C,EAAKmC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKoC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK0C,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK2C,IAAQ,GACvB/Y,KAAKuZ,KAAKlD,EAAKyC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK0C,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKgD,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKiD,IAAQ,GACvBlZ,KAAKuZ,KAAKrD,EAAK+C,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKgD,IAAQ,EAKlC,IAAIe,IAASta,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKsD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKuD,IAAQ,GACvBrZ,KAAKuZ,KAAKxD,EAAKqD,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKsD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMyE,KAAQ,IAAO,EACjDA,IAAO,SAEPpa,EAAKG,KAAKuZ,KAAKjC,EAAKS,GAEpBvC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKU,IACRhY,KAAKuZ,KAAKhC,EAAKQ,GAAQ,EACpCnY,EAAKI,KAAKuZ,KAAKhC,EAAKS,GACpBnY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKe,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKgB,GAAQ,GACvBnY,KAAKuZ,KAAKnC,EAAKc,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKe,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKqB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKsB,IAAQ,GACvBtY,KAAKuZ,KAAKtC,EAAKoB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKqB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAK2B,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAK4B,IAAQ,GACvBzY,KAAKuZ,KAAKzC,EAAK0B,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAK2B,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKiC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKkC,IAAQ,GACvB5Y,KAAKuZ,KAAK5C,EAAKgC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKiC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKuC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKwC,IAAQ,GACvB/Y,KAAKuZ,KAAK/C,EAAKsC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKuC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK6C,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK8C,IAAQ,GACvBlZ,KAAKuZ,KAAKlD,EAAK4C,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK6C,IAAQ,EAKlC,IAAIgB,IAASva,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKmD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKoD,IAAQ,GACvBrZ,KAAKuZ,KAAKrD,EAAKkD,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKmD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM0E,KAAQ,IAAO,EACjDA,IAAO,SAEPra,EAAKG,KAAKuZ,KAAKjC,EAAKY,GAEpB1C,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKa,IACRnY,KAAKuZ,KAAKhC,EAAKW,GAAQ,EACpCtY,EAAKI,KAAKuZ,KAAKhC,EAAKY,GACpBtY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKkB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKmB,IAAQ,GACvBtY,KAAKuZ,KAAKnC,EAAKiB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKkB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKwB,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKyB,IAAQ,GACvBzY,KAAKuZ,KAAKtC,EAAKuB,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKwB,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAK8B,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAK+B,IAAQ,GACvB5Y,KAAKuZ,KAAKzC,EAAK6B,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAK8B,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKoC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKqC,IAAQ,GACvB/Y,KAAKuZ,KAAK5C,EAAKmC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKoC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK0C,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK2C,IAAQ,GACvBlZ,KAAKuZ,KAAK/C,EAAKyC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK0C,IAAQ,EAKlC,IAAIiB,IAASxa,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKgD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKiD,IAAQ,GACvBrZ,KAAKuZ,KAAKlD,EAAK+C,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKgD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM2E,KAAQ,IAAO,EACjDA,IAAO,SAEPta,EAAKG,KAAKuZ,KAAKjC,EAAKe,GAEpB7C,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKgB,KACRtY,KAAKuZ,KAAKhC,EAAKc,GAAQ,EACpCzY,EAAKI,KAAKuZ,KAAKhC,EAAKe,IACpBzY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKqB,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKsB,IAAQ,GACvBzY,KAAKuZ,KAAKnC,EAAKoB,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKqB,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAK2B,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAK4B,IAAQ,GACvB5Y,KAAKuZ,KAAKtC,EAAK0B,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAK2B,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKiC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKkC,IAAQ,GACvB/Y,KAAKuZ,KAAKzC,EAAKgC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKiC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKuC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKwC,IAAQ,GACvBlZ,KAAKuZ,KAAK5C,EAAKsC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKuC,IAAQ,EAKlC,IAAIkB,IAASza,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK6C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK8C,IAAQ,GACvBrZ,KAAKuZ,KAAK/C,EAAK4C,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK6C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM4E,KAAQ,IAAO,EACjDA,IAAO,SAEPva,EAAKG,KAAKuZ,KAAKjC,EAAKkB,IAEpBhD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKmB,KACRzY,KAAKuZ,KAAKhC,EAAKiB,IAAQ,EACpC5Y,EAAKI,KAAKuZ,KAAKhC,EAAKkB,IACpB5Y,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKwB,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKyB,IAAQ,GACvB5Y,KAAKuZ,KAAKnC,EAAKuB,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKwB,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAK8B,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAK+B,IAAQ,GACvB/Y,KAAKuZ,KAAKtC,EAAK6B,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAK8B,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKoC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKqC,IAAQ,GACvBlZ,KAAKuZ,KAAKzC,EAAKmC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKoC,IAAQ,EAKlC,IAAImB,IAAS1a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK0C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK2C,IAAQ,GACvBrZ,KAAKuZ,KAAK5C,EAAKyC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK0C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM6E,KAAQ,IAAO,EACjDA,IAAO,SAEPxa,EAAKG,KAAKuZ,KAAKjC,EAAKqB,IAEpBnD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKsB,KACR5Y,KAAKuZ,KAAKhC,EAAKoB,IAAQ,EACpC/Y,EAAKI,KAAKuZ,KAAKhC,EAAKqB,IACpB/Y,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAK2B,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAK4B,IAAQ,GACvB/Y,KAAKuZ,KAAKnC,EAAK0B,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAK2B,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKiC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKkC,IAAQ,GACvBlZ,KAAKuZ,KAAKtC,EAAKgC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKiC,IAAQ,EAKlC,IAAIoB,IAAS3a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKuC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKwC,IAAQ,GACvBrZ,KAAKuZ,KAAKzC,EAAKsC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKuC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM8E,KAAQ,IAAO,EACjDA,IAAO,SAEPza,EAAKG,KAAKuZ,KAAKjC,EAAKwB,IAEpBtD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKyB,KACR/Y,KAAKuZ,KAAKhC,EAAKuB,IAAQ,EACpClZ,EAAKI,KAAKuZ,KAAKhC,EAAKwB,IACpBlZ,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAK8B,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAK+B,IAAQ,GACvBlZ,KAAKuZ,KAAKnC,EAAK6B,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAK8B,IAAQ,EAKlC,IAAIqB,IAAS5a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKoC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKqC,IAAQ,GACvBrZ,KAAKuZ,KAAKtC,EAAKmC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKoC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM+E,KAAQ,IAAO,EACjDA,IAAO,SAEP1a,EAAKG,KAAKuZ,KAAKjC,EAAK2B,IAEpBzD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAK4B,KACRlZ,KAAKuZ,KAAKhC,EAAK0B,IAAQ,EACpCrZ,EAAKI,KAAKuZ,KAAKhC,EAAK2B,IAKpB,IAAIsB,IAAS7a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKiC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKkC,IAAQ,GACvBrZ,KAAKuZ,KAAKnC,EAAKgC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKiC,IAAQ,IAErB7D,IAAQ,IAAO,IAAMgF,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAAS9a,GAJbE,EAAKG,KAAKuZ,KAAKjC,EAAK8B,KAIG,KAAa,MAFpC5D,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAK+B,KACRrZ,KAAKuZ,KAAKhC,EAAK6B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAzZ,IAFAC,EAAKI,KAAKuZ,KAAKhC,EAAK8B,MAEP7D,IAAQ,IAAO,IAAMiF,KAAQ,IAAO,EACjDA,IAAO,SACPhF,EAAE,GAAK6D,GACP7D,EAAE,GAAK+D,GACP/D,EAAE,GAAKgE,GACPhE,EAAE,GAAKiE,GACPjE,EAAE,GAAKkE,GACPlE,EAAE,GAAKmE,GACPnE,EAAE,GAAKoE,GACPpE,EAAE,GAAKqE,GACPrE,EAAE,GAAKsE,GACPtE,EAAE,GAAKuE,GACPvE,EAAE,IAAMwE,GACRxE,EAAE,IAAMyE,GACRzE,EAAE,IAAM0E,GACR1E,EAAE,IAAM2E,GACR3E,EAAE,IAAM4E,GACR5E,EAAE,IAAM6E,GACR7E,EAAE,IAAM8E,GACR9E,EAAE,IAAM+E,GACR/E,EAAE,IAAMgF,GACE,IAAN9a,IACF8V,EAAE,IAAM9V,EACR0D,EAAIjK,UAECiK,GAiDT,SAASqX,EAAYvI,EAAM7H,EAAKjH,GAE9B,OADW,IAAIsX,GACHC,KAAKzI,EAAM7H,EAAKjH,GAsB9B,SAASsX,EAAM/Y,EAAGC,GAChBnH,KAAKkH,EAAIA,EACTlH,KAAKmH,EAAIA,EAvEN7B,KAAKuZ,OACRhE,EAAcrD,GAiDhBnI,EAAG3R,UAAUyiB,MAAQ,SAAgBvQ,EAAKjH,GACxC,IACI3H,EAAMhB,KAAKtB,OAASkR,EAAIlR,OAW5B,OAVoB,KAAhBsB,KAAKtB,QAAgC,KAAfkR,EAAIlR,OACtBmc,EAAY7a,KAAM4P,EAAKjH,GACpB3H,EAAM,GACTwW,EAAWxX,KAAM4P,EAAKjH,GACnB3H,EAAM,KArDnB,SAAmByW,EAAM7H,EAAKjH,GAC5BA,EAAIiN,SAAWhG,EAAIgG,SAAW6B,EAAK7B,SACnCjN,EAAIjK,OAAS+Y,EAAK/Y,OAASkR,EAAIlR,OAI/B,IAFA,IAAIqW,EAAQ,EACRqL,EAAU,EACLlQ,EAAI,EAAGA,EAAIvH,EAAIjK,OAAS,EAAGwR,IAAK,CAGvC,IAAIwH,EAAS0I,EACbA,EAAU,EAGV,IAFA,IAAIzI,EAAgB,SAAR5C,EACR6C,EAAOtS,KAAKC,IAAI2K,EAAGN,EAAIlR,OAAS,GAC3BkF,EAAI0B,KAAKuC,IAAI,EAAGqI,EAAIuH,EAAK/Y,OAAS,GAAIkF,GAAKgU,EAAMhU,IAAK,CAC7D,IAAIpC,EAAI0O,EAAItM,EAGRuL,GAFoB,EAAhBsI,EAAK5B,MAAMrU,KACI,EAAfoO,EAAIiG,MAAMjS,IAGduB,EAAS,SAAJgK,EAGTwI,EAAa,UADbxS,EAAMA,EAAKwS,EAAS,GAIpByI,IAFA1I,GAHAA,EAAUA,GAAWvI,EAAI,SAAa,GAAM,IAGxBhK,IAAO,IAAO,KAEZ,GACtBuS,GAAU,SAEZ/O,EAAIkN,MAAM3F,GAAKyH,EACf5C,EAAQ2C,EACRA,EAAS0I,EAQX,OANc,IAAVrL,EACFpM,EAAIkN,MAAM3F,GAAK6E,EAEfpM,EAAIjK,SAGCiK,EAAI+N,QAgBH2J,CAASrgB,KAAM4P,EAAKjH,GAEpBqX,EAAWhgB,KAAM4P,EAAKjH,IAchCsX,EAAKviB,UAAU4iB,QAAU,SAAkBC,GAGzC,IAFA,IAAI5H,EAAI,IAAInQ,MAAM+X,GACdlT,EAAIgC,EAAG3R,UAAUgb,WAAW6H,GAAK,EAC5B/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrBmX,EAAEnX,GAAKxB,KAAKwgB,OAAOhf,EAAG6L,EAAGkT,GAG3B,OAAO5H,GAITsH,EAAKviB,UAAU8iB,OAAS,SAAiBtZ,EAAGmG,EAAGkT,GAC7C,GAAU,IAANrZ,GAAWA,IAAMqZ,EAAI,EAAG,OAAOrZ,EAGnC,IADA,IAAIuZ,EAAK,EACAjf,EAAI,EAAGA,EAAI6L,EAAG7L,IACrBif,IAAW,EAAJvZ,IAAWmG,EAAI7L,EAAI,EAC1B0F,IAAM,EAGR,OAAOuZ,GAKTR,EAAKviB,UAAUgjB,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GACpE,IAAK,IAAI/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrBsf,EAAKtf,GAAKof,EAAID,EAAInf,IAClBuf,EAAKvf,GAAKqf,EAAIF,EAAInf,KAItBye,EAAKviB,UAAUsjB,UAAY,SAAoBJ,EAAKC,EAAKC,EAAMC,EAAMR,EAAGI,GACtE3gB,KAAK0gB,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GAExC,IAAK,IAAIU,EAAI,EAAGA,EAAIV,EAAGU,IAAM,EAM3B,IALA,IAAI5T,EAAI4T,GAAK,EAETC,EAAQ5b,KAAK6b,IAAI,EAAI7b,KAAK8b,GAAK/T,GAC/BgU,EAAQ/b,KAAKgc,IAAI,EAAIhc,KAAK8b,GAAK/T,GAE1BkG,EAAI,EAAGA,EAAIgN,EAAGhN,GAAKlG,EAI1B,IAHA,IAAIkU,EAASL,EACTM,EAASH,EAEJzd,EAAI,EAAGA,EAAIqd,EAAGrd,IAAK,CAC1B,IAAI6d,EAAKX,EAAKvN,EAAI3P,GACd8d,EAAKX,EAAKxN,EAAI3P,GAEd+d,EAAKb,EAAKvN,EAAI3P,EAAIqd,GAClBW,EAAKb,EAAKxN,EAAI3P,EAAIqd,GAElBY,EAAKN,EAASI,EAAKH,EAASI,EAEhCA,EAAKL,EAASK,EAAKJ,EAASG,EAC5BA,EAAKE,EAELf,EAAKvN,EAAI3P,GAAK6d,EAAKE,EACnBZ,EAAKxN,EAAI3P,GAAK8d,EAAKE,EAEnBd,EAAKvN,EAAI3P,EAAIqd,GAAKQ,EAAKE,EACvBZ,EAAKxN,EAAI3P,EAAIqd,GAAKS,EAAKE,EAGnBhe,IAAMyJ,IACRwU,EAAKX,EAAQK,EAASF,EAAQG,EAE9BA,EAASN,EAAQM,EAASH,EAAQE,EAClCA,EAASM,KAOnB5B,EAAKviB,UAAUokB,YAAc,SAAsBpf,EAAGC,GACpD,IAAI4d,EAAqB,EAAjBjb,KAAKuC,IAAIlF,EAAGD,GAChBqf,EAAU,EAAJxB,EACN/e,EAAI,EACR,IAAK+e,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/B/e,IAGF,OAAO,GAAKA,EAAI,EAAIugB,GAGtB9B,EAAKviB,UAAUskB,UAAY,SAAoBpB,EAAKC,EAAKN,GACvD,KAAIA,GAAK,GAET,IAAK,IAAI/e,EAAI,EAAGA,EAAI+e,EAAI,EAAG/e,IAAK,CAC9B,IAAImX,EAAIiI,EAAIpf,GAEZof,EAAIpf,GAAKof,EAAIL,EAAI/e,EAAI,GACrBof,EAAIL,EAAI/e,EAAI,GAAKmX,EAEjBA,EAAIkI,EAAIrf,GAERqf,EAAIrf,IAAMqf,EAAIN,EAAI/e,EAAI,GACtBqf,EAAIN,EAAI/e,EAAI,IAAMmX,IAItBsH,EAAKviB,UAAUukB,aAAe,SAAuBhS,EAAIsQ,GAEvD,IADA,IAAIxL,EAAQ,EACHvT,EAAI,EAAGA,EAAI+e,EAAI,EAAG/e,IAAK,CAC9B,IAAIqO,EAAoC,KAAhCvK,KAAK4c,MAAMjS,EAAG,EAAIzO,EAAI,GAAK+e,GACjCjb,KAAK4c,MAAMjS,EAAG,EAAIzO,GAAK+e,GACvBxL,EAEF9E,EAAGzO,GAAS,SAAJqO,EAGNkF,EADElF,EAAI,SACE,EAEAA,EAAI,SAAY,EAI5B,OAAOI,GAGTgQ,EAAKviB,UAAUykB,WAAa,SAAqBlS,EAAIjP,EAAK4f,EAAKL,GAE7D,IADA,IAAIxL,EAAQ,EACHvT,EAAI,EAAGA,EAAIR,EAAKQ,IACvBuT,GAAyB,EAAR9E,EAAGzO,GAEpBof,EAAI,EAAIpf,GAAa,KAARuT,EAAgBA,KAAkB,GAC/C6L,EAAI,EAAIpf,EAAI,GAAa,KAARuT,EAAgBA,KAAkB,GAIrD,IAAKvT,EAAI,EAAIR,EAAKQ,EAAI+e,IAAK/e,EACzBof,EAAIpf,GAAK,EAGXwN,EAAiB,IAAV+F,GACP/F,EAA6B,KAAb,KAAR+F,KAGVkL,EAAKviB,UAAU0kB,KAAO,SAAe7B,GAEnC,IADA,IAAI8B,EAAK,IAAI7Z,MAAM+X,GACV/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrB6gB,EAAG7gB,GAAK,EAGV,OAAO6gB,GAGTpC,EAAKviB,UAAUwiB,KAAO,SAAehZ,EAAGC,EAAGwB,GACzC,IAAI4X,EAAI,EAAIvgB,KAAK8hB,YAAY5a,EAAExI,OAAQyI,EAAEzI,QAErCiiB,EAAM3gB,KAAKsgB,QAAQC,GAEnB+B,EAAItiB,KAAKoiB,KAAK7B,GAEdK,EAAM,IAAIpY,MAAM+X,GAChBgC,EAAO,IAAI/Z,MAAM+X,GACjBiC,EAAO,IAAIha,MAAM+X,GAEjBkC,EAAO,IAAIja,MAAM+X,GACjBmC,EAAQ,IAAIla,MAAM+X,GAClBoC,EAAQ,IAAIna,MAAM+X,GAElBqC,EAAOja,EAAIkN,MACf+M,EAAKlkB,OAAS6hB,EAEdvgB,KAAKmiB,WAAWjb,EAAE2O,MAAO3O,EAAExI,OAAQkiB,EAAKL,GACxCvgB,KAAKmiB,WAAWhb,EAAE0O,MAAO1O,EAAEzI,OAAQ+jB,EAAMlC,GAEzCvgB,KAAKghB,UAAUJ,EAAK0B,EAAGC,EAAMC,EAAMjC,EAAGI,GACtC3gB,KAAKghB,UAAUyB,EAAMH,EAAGI,EAAOC,EAAOpC,EAAGI,GAEzC,IAAK,IAAInf,EAAI,EAAGA,EAAI+e,EAAG/e,IAAK,CAC1B,IAAIqgB,EAAKU,EAAK/gB,GAAKkhB,EAAMlhB,GAAKghB,EAAKhhB,GAAKmhB,EAAMnhB,GAC9CghB,EAAKhhB,GAAK+gB,EAAK/gB,GAAKmhB,EAAMnhB,GAAKghB,EAAKhhB,GAAKkhB,EAAMlhB,GAC/C+gB,EAAK/gB,GAAKqgB,EAUZ,OAPA7hB,KAAKgiB,UAAUO,EAAMC,EAAMjC,GAC3BvgB,KAAKghB,UAAUuB,EAAMC,EAAMI,EAAMN,EAAG/B,EAAGI,GACvC3gB,KAAKgiB,UAAUY,EAAMN,EAAG/B,GACxBvgB,KAAKiiB,aAAaW,EAAMrC,GAExB5X,EAAIiN,SAAW1O,EAAE0O,SAAWzO,EAAEyO,SAC9BjN,EAAIjK,OAASwI,EAAExI,OAASyI,EAAEzI,OACnBiK,EAAI+N,SAIbrH,EAAG3R,UAAUiM,IAAM,SAAciG,GAC/B,IAAIjH,EAAM,IAAI0G,EAAG,MAEjB,OADA1G,EAAIkN,MAAQ,IAAIrN,MAAMxI,KAAKtB,OAASkR,EAAIlR,QACjCsB,KAAKmgB,MAAMvQ,EAAKjH,IAIzB0G,EAAG3R,UAAUmlB,KAAO,SAAejT,GACjC,IAAIjH,EAAM,IAAI0G,EAAG,MAEjB,OADA1G,EAAIkN,MAAQ,IAAIrN,MAAMxI,KAAKtB,OAASkR,EAAIlR,QACjCshB,EAAWhgB,KAAM4P,EAAKjH,IAI/B0G,EAAG3R,UAAUmhB,KAAO,SAAejP,GACjC,OAAO5P,KAAKmQ,QAAQgQ,MAAMvQ,EAAK5P,OAGjCqP,EAAG3R,UAAUsZ,MAAQ,SAAgBpH,GACnCZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UAIb,IADA,IAAImF,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIqO,GAAqB,EAAhB7P,KAAK6V,MAAMrU,IAAUoO,EAC1BzK,GAAU,SAAJ0K,IAA0B,SAARkF,GAC5BA,IAAU,GACVA,GAAUlF,EAAI,SAAa,EAE3BkF,GAAS5P,IAAO,GAChBnF,KAAK6V,MAAMrU,GAAU,SAAL2D,EAQlB,OALc,IAAV4P,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAGAsB,MAGTqP,EAAG3R,UAAUolB,KAAO,SAAelT,GACjC,OAAO5P,KAAKmQ,QAAQ6G,MAAMpH,IAI5BP,EAAG3R,UAAUqlB,IAAM,WACjB,OAAO/iB,KAAK2J,IAAI3J,OAIlBqP,EAAG3R,UAAUslB,KAAO,WAClB,OAAOhjB,KAAK6e,KAAK7e,KAAKmQ,UAIxBd,EAAG3R,UAAUwM,IAAM,SAAc0F,GAC/B,IAAIC,EAxxCN,SAAqBD,GAGnB,IAFA,IAAIC,EAAI,IAAIrH,MAAMoH,EAAII,aAEbwK,EAAM,EAAGA,EAAM3K,EAAEnR,OAAQ8b,IAAO,CACvC,IAAI5D,EAAO4D,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAEjB3K,EAAE2K,IAAQ5K,EAAIiG,MAAMe,GAAQ,GAAK6D,KAAWA,EAG9C,OAAO5K,EA8wCCoT,CAAWrT,GACnB,GAAiB,IAAbC,EAAEnR,OAAc,OAAO,IAAI2Q,EAAG,GAIlC,IADA,IAAI7J,EAAMxF,KACDwB,EAAI,EAAGA,EAAIqO,EAAEnR,QACP,IAATmR,EAAErO,GADsBA,IAAKgE,EAAMA,EAAIud,OAI7C,KAAMvhB,EAAIqO,EAAEnR,OACV,IAAK,IAAI8Z,EAAIhT,EAAIud,MAAOvhB,EAAIqO,EAAEnR,OAAQ8C,IAAKgX,EAAIA,EAAEuK,MAClC,IAATlT,EAAErO,KAENgE,EAAMA,EAAImE,IAAI6O,IAIlB,OAAOhT,GAIT6J,EAAG3R,UAAUwlB,OAAS,SAAiBpT,GACrCd,EAAuB,iBAATc,GAAqBA,GAAQ,GAC3C,IAGItO,EAHA2N,EAAIW,EAAO,GACXmR,GAAKnR,EAAOX,GAAK,GACjBgU,EAAa,WAAe,GAAKhU,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAI4F,EAAQ,EAEZ,IAAKvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CAChC,IAAI4hB,EAAWpjB,KAAK6V,MAAMrU,GAAK2hB,EAC3Ble,GAAsB,EAAhBjF,KAAK6V,MAAMrU,IAAU4hB,GAAajU,EAC5CnP,KAAK6V,MAAMrU,GAAKyD,EAAI8P,EACpBA,EAAQqO,IAAc,GAAKjU,EAGzB4F,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAIT,GAAU,IAANuiB,EAAS,CACX,IAAKzf,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAChCxB,KAAK6V,MAAMrU,EAAIyf,GAAKjhB,KAAK6V,MAAMrU,GAGjC,IAAKA,EAAI,EAAGA,EAAIyf,EAAGzf,IACjBxB,KAAK6V,MAAMrU,GAAK,EAGlBxB,KAAKtB,QAAUuiB,EAGjB,OAAOjhB,KAAK0W,SAGdrH,EAAG3R,UAAU2lB,MAAQ,SAAgBvT,GAGnC,OADAd,EAAyB,IAAlBhP,KAAK4V,UACL5V,KAAKkjB,OAAOpT,IAMrBT,EAAG3R,UAAU+S,OAAS,SAAiBX,EAAMwT,EAAMC,GAEjD,IAAIC,EADJxU,EAAuB,iBAATc,GAAqBA,GAAQ,GAGzC0T,EADEF,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAInU,EAAIW,EAAO,GACXmR,EAAI3b,KAAKC,KAAKuK,EAAOX,GAAK,GAAInP,KAAKtB,QACnC+kB,EAAO,SAAc,WAActU,GAAMA,EACzCuU,EAAcH,EAMlB,GAJAC,GAAKvC,EACLuC,EAAIle,KAAKuC,IAAI,EAAG2b,GAGZE,EAAa,CACf,IAAK,IAAIliB,EAAI,EAAGA,EAAIyf,EAAGzf,IACrBkiB,EAAY7N,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAEpCkiB,EAAYhlB,OAASuiB,EAGvB,GAAU,IAANA,QAEG,GAAIjhB,KAAKtB,OAASuiB,EAEvB,IADAjhB,KAAKtB,QAAUuiB,EACVzf,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC3BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,EAAIyf,QAGjCjhB,KAAK6V,MAAM,GAAK,EAChB7V,KAAKtB,OAAS,EAGhB,IAAIqW,EAAQ,EACZ,IAAKvT,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,IAAgB,IAAVuT,GAAevT,GAAKgiB,GAAIhiB,IAAK,CAChE,IAAI4R,EAAuB,EAAhBpT,KAAK6V,MAAMrU,GACtBxB,KAAK6V,MAAMrU,GAAMuT,GAAU,GAAK5F,EAAOiE,IAASjE,EAChD4F,EAAQ3B,EAAOqQ,EAajB,OATIC,GAAyB,IAAV3O,IACjB2O,EAAY7N,MAAM6N,EAAYhlB,UAAYqW,GAGxB,IAAhB/U,KAAKtB,SACPsB,KAAK6V,MAAM,GAAK,EAChB7V,KAAKtB,OAAS,GAGTsB,KAAK0W,SAGdrH,EAAG3R,UAAUimB,MAAQ,SAAgB7T,EAAMwT,EAAMC,GAG/C,OADAvU,EAAyB,IAAlBhP,KAAK4V,UACL5V,KAAKyQ,OAAOX,EAAMwT,EAAMC,IAIjClU,EAAG3R,UAAUkmB,KAAO,SAAe9T,GACjC,OAAO9P,KAAKmQ,QAAQkT,MAAMvT,IAG5BT,EAAG3R,UAAUmmB,MAAQ,SAAgB/T,GACnC,OAAO9P,KAAKmQ,QAAQ+S,OAAOpT,IAI7BT,EAAG3R,UAAUomB,KAAO,SAAehU,GACjC,OAAO9P,KAAKmQ,QAAQwT,MAAM7T,IAG5BT,EAAG3R,UAAUqmB,MAAQ,SAAgBjU,GACnC,OAAO9P,KAAKmQ,QAAQM,OAAOX,IAI7BT,EAAG3R,UAAU0b,MAAQ,SAAgBoB,GACnCxL,EAAsB,iBAARwL,GAAoBA,GAAO,GACzC,IAAIrL,EAAIqL,EAAM,GACVyG,GAAKzG,EAAMrL,GAAK,GAChBqJ,EAAI,GAAKrJ,EAGb,QAAInP,KAAKtB,QAAUuiB,OAGXjhB,KAAK6V,MAAMoL,GAELzI,IAIhBnJ,EAAG3R,UAAUsmB,OAAS,SAAiBlU,GACrCd,EAAuB,iBAATc,GAAqBA,GAAQ,GAC3C,IAAIX,EAAIW,EAAO,GACXmR,GAAKnR,EAAOX,GAAK,GAIrB,GAFAH,EAAyB,IAAlBhP,KAAK4V,SAAgB,2CAExB5V,KAAKtB,QAAUuiB,EACjB,OAAOjhB,KAQT,GALU,IAANmP,GACF8R,IAEFjhB,KAAKtB,OAAS4G,KAAKC,IAAI0b,EAAGjhB,KAAKtB,QAErB,IAANyQ,EAAS,CACX,IAAIsU,EAAO,SAAc,WAActU,GAAMA,EAC7CnP,KAAK6V,MAAM7V,KAAKtB,OAAS,IAAM+kB,EAGjC,OAAOzjB,KAAK0W,SAIdrH,EAAG3R,UAAUumB,MAAQ,SAAgBnU,GACnC,OAAO9P,KAAKmQ,QAAQ6T,OAAOlU,IAI7BT,EAAG3R,UAAUwb,MAAQ,SAAgBtJ,GAGnC,OAFAZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UACTA,EAAM,EAAU5P,KAAKwQ,OAAOZ,GAGV,IAAlB5P,KAAK4V,SACa,IAAhB5V,KAAKtB,SAAiC,EAAhBsB,KAAK6V,MAAM,IAAUjG,GAC7C5P,KAAK6V,MAAM,GAAKjG,GAAuB,EAAhB5P,KAAK6V,MAAM,IAClC7V,KAAK4V,SAAW,EACT5V,OAGTA,KAAK4V,SAAW,EAChB5V,KAAKwQ,MAAMZ,GACX5P,KAAK4V,SAAW,EACT5V,MAIFA,KAAKiX,OAAOrH,IAGrBP,EAAG3R,UAAUuZ,OAAS,SAAiBrH,GACrC5P,KAAK6V,MAAM,IAAMjG,EAGjB,IAAK,IAAIpO,EAAI,EAAGA,EAAIxB,KAAKtB,QAAUsB,KAAK6V,MAAMrU,IAAM,SAAWA,IAC7DxB,KAAK6V,MAAMrU,IAAM,SACbA,IAAMxB,KAAKtB,OAAS,EACtBsB,KAAK6V,MAAMrU,EAAI,GAAK,EAEpBxB,KAAK6V,MAAMrU,EAAI,KAKnB,OAFAxB,KAAKtB,OAAS4G,KAAKuC,IAAI7H,KAAKtB,OAAQ8C,EAAI,GAEjCxB,MAITqP,EAAG3R,UAAU8S,MAAQ,SAAgBZ,GAGnC,GAFAZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UACTA,EAAM,EAAG,OAAO5P,KAAKkZ,OAAOtJ,GAEhC,GAAsB,IAAlB5P,KAAK4V,SAIP,OAHA5V,KAAK4V,SAAW,EAChB5V,KAAKkZ,MAAMtJ,GACX5P,KAAK4V,SAAW,EACT5V,KAKT,GAFAA,KAAK6V,MAAM,IAAMjG,EAEG,IAAhB5P,KAAKtB,QAAgBsB,KAAK6V,MAAM,GAAK,EACvC7V,KAAK6V,MAAM,IAAM7V,KAAK6V,MAAM,GAC5B7V,KAAK4V,SAAW,OAGhB,IAAK,IAAIpU,EAAI,EAAGA,EAAIxB,KAAKtB,QAAUsB,KAAK6V,MAAMrU,GAAK,EAAGA,IACpDxB,KAAK6V,MAAMrU,IAAM,SACjBxB,KAAK6V,MAAMrU,EAAI,IAAM,EAIzB,OAAOxB,KAAK0W,SAGdrH,EAAG3R,UAAUwmB,KAAO,SAAetU,GACjC,OAAO5P,KAAKmQ,QAAQ+I,MAAMtJ,IAG5BP,EAAG3R,UAAUymB,KAAO,SAAevU,GACjC,OAAO5P,KAAKmQ,QAAQK,MAAMZ,IAG5BP,EAAG3R,UAAU0mB,KAAO,WAGlB,OAFApkB,KAAK4V,SAAW,EAET5V,MAGTqP,EAAG3R,UAAUsb,IAAM,WACjB,OAAOhZ,KAAKmQ,QAAQiU,QAGtB/U,EAAG3R,UAAU2mB,aAAe,SAAuBzU,EAAKjG,EAAK2a,GAC3D,IACI9iB,EAIAqO,EALA7O,EAAM4O,EAAIlR,OAAS4lB,EAGvBtkB,KAAKmX,QAAQnW,GAGb,IAAI+T,EAAQ,EACZ,IAAKvT,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CAC/BqO,GAA6B,EAAxB7P,KAAK6V,MAAMrU,EAAI8iB,IAAcvP,EAClC,IAAIqB,GAAwB,EAAfxG,EAAIiG,MAAMrU,IAAUmI,EAEjCoL,IADAlF,GAAa,SAARuG,IACS,KAAQA,EAAQ,SAAa,GAC3CpW,KAAK6V,MAAMrU,EAAI8iB,GAAa,SAAJzU,EAE1B,KAAOrO,EAAIxB,KAAKtB,OAAS4lB,EAAO9iB,IAE9BuT,GADAlF,GAA6B,EAAxB7P,KAAK6V,MAAMrU,EAAI8iB,IAAcvP,IACrB,GACb/U,KAAK6V,MAAMrU,EAAI8iB,GAAa,SAAJzU,EAG1B,GAAc,IAAVkF,EAAa,OAAO/U,KAAK0W,QAK7B,IAFA1H,GAAkB,IAAX+F,GACPA,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAE3BuT,GADAlF,IAAsB,EAAhB7P,KAAK6V,MAAMrU,IAAUuT,IACd,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJqO,EAIlB,OAFA7P,KAAK4V,SAAW,EAET5V,KAAK0W,SAGdrH,EAAG3R,UAAU6mB,SAAW,SAAmB3U,EAAK4U,GAC9C,IAAIF,GAAQtkB,KAAKtB,OAASkR,EAAIlR,QAE1BuI,EAAIjH,KAAKmQ,QACT1N,EAAImN,EAGJ6U,EAA8B,EAAxBhiB,EAAEoT,MAAMpT,EAAE/D,OAAS,GAGf,KADd4lB,EAAQ,GADMtkB,KAAK0Y,WAAW+L,MAG5BhiB,EAAIA,EAAEohB,MAAMS,GACZrd,EAAEic,OAAOoB,GACTG,EAA8B,EAAxBhiB,EAAEoT,MAAMpT,EAAE/D,OAAS,IAI3B,IACI8Z,EADA7V,EAAIsE,EAAEvI,OAAS+D,EAAE/D,OAGrB,GAAa,QAAT8lB,EAAgB,EAClBhM,EAAI,IAAInJ,EAAG,OACT3Q,OAASiE,EAAI,EACf6V,EAAE3C,MAAQ,IAAIrN,MAAMgQ,EAAE9Z,QACtB,IAAK,IAAI8C,EAAI,EAAGA,EAAIgX,EAAE9Z,OAAQ8C,IAC5BgX,EAAE3C,MAAMrU,GAAK,EAIjB,IAAIkjB,EAAOzd,EAAEkJ,QAAQkU,aAAa5hB,EAAG,EAAGE,GAClB,IAAlB+hB,EAAK9O,WACP3O,EAAIyd,EACAlM,IACFA,EAAE3C,MAAMlT,GAAK,IAIjB,IAAK,IAAIiB,EAAIjB,EAAI,EAAGiB,GAAK,EAAGA,IAAK,CAC/B,IAAI+gB,EAAmC,UAAL,EAAxB1d,EAAE4O,MAAMpT,EAAE/D,OAASkF,KACE,EAA5BqD,EAAE4O,MAAMpT,EAAE/D,OAASkF,EAAI,IAO1B,IAHA+gB,EAAKrf,KAAKC,IAAKof,EAAKF,EAAO,EAAG,UAE9Bxd,EAAEod,aAAa5hB,EAAGkiB,EAAI/gB,GACA,IAAfqD,EAAE2O,UACP+O,IACA1d,EAAE2O,SAAW,EACb3O,EAAEod,aAAa5hB,EAAG,EAAGmB,GAChBqD,EAAE+Q,WACL/Q,EAAE2O,UAAY,GAGd4C,IACFA,EAAE3C,MAAMjS,GAAK+gB,GAajB,OAVInM,GACFA,EAAE9B,QAEJzP,EAAEyP,QAGW,QAAT8N,GAA4B,IAAVF,GACpBrd,EAAEwJ,OAAO6T,GAGJ,CACLM,IAAKpM,GAAK,KACVnI,IAAKpJ,IAQToI,EAAG3R,UAAUmnB,OAAS,SAAiBjV,EAAK4U,EAAMM,GAGhD,OAFA9V,GAAQY,EAAIoI,UAERhY,KAAKgY,SACA,CACL4M,IAAK,IAAIvV,EAAG,GACZgB,IAAK,IAAIhB,EAAG,IAKM,IAAlBrP,KAAK4V,UAAmC,IAAjBhG,EAAIgG,UAC7BpQ,EAAMxF,KAAKwZ,MAAMqL,OAAOjV,EAAK4U,GAEhB,QAATA,IACFI,EAAMpf,EAAIof,IAAIpL,OAGH,QAATgL,IACFnU,EAAM7K,EAAI6K,IAAImJ,MACVsL,GAA6B,IAAjBzU,EAAIuF,UAClBvF,EAAIqK,KAAK9K,IAIN,CACLgV,IAAKA,EACLvU,IAAKA,IAIa,IAAlBrQ,KAAK4V,UAAmC,IAAjBhG,EAAIgG,UAC7BpQ,EAAMxF,KAAK6kB,OAAOjV,EAAI4J,MAAOgL,GAEhB,QAATA,IACFI,EAAMpf,EAAIof,IAAIpL,OAGT,CACLoL,IAAKA,EACLvU,IAAK7K,EAAI6K,MAI0B,IAAlCrQ,KAAK4V,SAAWhG,EAAIgG,WACvBpQ,EAAMxF,KAAKwZ,MAAMqL,OAAOjV,EAAI4J,MAAOgL,GAEtB,QAATA,IACFnU,EAAM7K,EAAI6K,IAAImJ,MACVsL,GAA6B,IAAjBzU,EAAIuF,UAClBvF,EAAIsK,KAAK/K,IAIN,CACLgV,IAAKpf,EAAIof,IACTvU,IAAKA,IAOLT,EAAIlR,OAASsB,KAAKtB,QAAUsB,KAAKqW,IAAIzG,GAAO,EACvC,CACLgV,IAAK,IAAIvV,EAAG,GACZgB,IAAKrQ,MAKU,IAAf4P,EAAIlR,OACO,QAAT8lB,EACK,CACLI,IAAK5kB,KAAK+kB,KAAKnV,EAAIiG,MAAM,IACzBxF,IAAK,MAII,QAATmU,EACK,CACLI,IAAK,KACLvU,IAAK,IAAIhB,EAAGrP,KAAKiY,KAAKrI,EAAIiG,MAAM,MAI7B,CACL+O,IAAK5kB,KAAK+kB,KAAKnV,EAAIiG,MAAM,IACzBxF,IAAK,IAAIhB,EAAGrP,KAAKiY,KAAKrI,EAAIiG,MAAM,MAI7B7V,KAAKukB,SAAS3U,EAAK4U,GAlF1B,IAAII,EAAKvU,EAAK7K,GAsFhB6J,EAAG3R,UAAUknB,IAAM,SAAchV,GAC/B,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAOgV,KAIxCvV,EAAG3R,UAAU2S,IAAM,SAAcT,GAC/B,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAOS,KAGxChB,EAAG3R,UAAUsnB,KAAO,SAAepV,GACjC,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAMS,KAIvChB,EAAG3R,UAAUunB,SAAW,SAAmBrV,GACzC,IAAIsV,EAAKllB,KAAK6kB,OAAOjV,GAGrB,GAAIsV,EAAG7U,IAAI2H,SAAU,OAAOkN,EAAGN,IAE/B,IAAIvU,EAA0B,IAApB6U,EAAGN,IAAIhP,SAAiBsP,EAAG7U,IAAIsK,KAAK/K,GAAOsV,EAAG7U,IAEpD8U,EAAOvV,EAAImU,MAAM,GACjBqB,EAAKxV,EAAIU,MAAM,GACf+F,EAAMhG,EAAIgG,IAAI8O,GAGlB,OAAI9O,EAAM,GAAY,IAAP+O,GAAoB,IAAR/O,EAAkB6O,EAAGN,IAGrB,IAApBM,EAAGN,IAAIhP,SAAiBsP,EAAGN,IAAIpU,MAAM,GAAK0U,EAAGN,IAAI1L,MAAM,IAGhE7J,EAAG3R,UAAUua,KAAO,SAAerI,GACjCZ,EAAOY,GAAO,UAId,IAHA,IAAI2D,GAAK,GAAK,IAAM3D,EAEhByV,EAAM,EACD7jB,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IACpC6jB,GAAO9R,EAAI8R,GAAuB,EAAhBrlB,KAAK6V,MAAMrU,KAAWoO,EAG1C,OAAOyV,GAIThW,EAAG3R,UAAUwa,MAAQ,SAAgBtI,GACnCZ,EAAOY,GAAO,UAGd,IADA,IAAImF,EAAQ,EACHvT,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACzC,IAAIqO,GAAqB,EAAhB7P,KAAK6V,MAAMrU,IAAkB,SAARuT,EAC9B/U,KAAK6V,MAAMrU,GAAMqO,EAAID,EAAO,EAC5BmF,EAAQlF,EAAID,EAGd,OAAO5P,KAAK0W,SAGdrH,EAAG3R,UAAUqnB,KAAO,SAAenV,GACjC,OAAO5P,KAAKmQ,QAAQ+H,MAAMtI,IAG5BP,EAAG3R,UAAU4nB,KAAO,SAAe/R,GACjCvE,EAAsB,IAAfuE,EAAEqC,UACT5G,GAAQuE,EAAEyE,UAEV,IAAI9Q,EAAIlH,KACJmH,EAAIoM,EAAEpD,QAGRjJ,EADiB,IAAfA,EAAE0O,SACA1O,EAAE8d,KAAKzR,GAEPrM,EAAEiJ,QAaR,IATA,IAAIoV,EAAI,IAAIlW,EAAG,GACXmW,EAAI,IAAInW,EAAG,GAGXoW,EAAI,IAAIpW,EAAG,GACXqW,EAAI,IAAIrW,EAAG,GAEXsW,EAAI,EAEDze,EAAE0e,UAAYze,EAAEye,UACrB1e,EAAEuJ,OAAO,GACTtJ,EAAEsJ,OAAO,KACPkV,EAMJ,IAHA,IAAIE,EAAK1e,EAAEgJ,QACP2V,EAAK5e,EAAEiJ,SAEHjJ,EAAE8Q,UAAU,CAClB,IAAK,IAAIxW,EAAI,EAAGukB,EAAK,EAAyB,IAArB7e,EAAE2O,MAAM,GAAKkQ,IAAavkB,EAAI,KAAMA,EAAGukB,IAAO,GACvE,GAAIvkB,EAAI,EAEN,IADA0F,EAAEuJ,OAAOjP,GACFA,KAAM,IACP+jB,EAAEhV,SAAWiV,EAAEjV,WACjBgV,EAAE7K,KAAKmL,GACPL,EAAE7K,KAAKmL,IAGTP,EAAE9U,OAAO,GACT+U,EAAE/U,OAAO,GAIb,IAAK,IAAI7M,EAAI,EAAGoiB,EAAK,EAAyB,IAArB7e,EAAE0O,MAAM,GAAKmQ,IAAapiB,EAAI,KAAMA,EAAGoiB,IAAO,GACvE,GAAIpiB,EAAI,EAEN,IADAuD,EAAEsJ,OAAO7M,GACFA,KAAM,IACP6hB,EAAElV,SAAWmV,EAAEnV,WACjBkV,EAAE/K,KAAKmL,GACPH,EAAE/K,KAAKmL,IAGTL,EAAEhV,OAAO,GACTiV,EAAEjV,OAAO,GAITvJ,EAAEmP,IAAIlP,IAAM,GACdD,EAAEyT,KAAKxT,GACPoe,EAAE5K,KAAK8K,GACPD,EAAE7K,KAAK+K,KAEPve,EAAEwT,KAAKzT,GACPue,EAAE9K,KAAK4K,GACPG,EAAE/K,KAAK6K,IAIX,MAAO,CACLve,EAAGwe,EACHhjB,EAAGijB,EACHO,IAAK9e,EAAE+b,OAAOyC,KAOlBtW,EAAG3R,UAAUwoB,OAAS,SAAiB3S,GACrCvE,EAAsB,IAAfuE,EAAEqC,UACT5G,GAAQuE,EAAEyE,UAEV,IAAI/Q,EAAIjH,KACJyC,EAAI8Q,EAAEpD,QAGRlJ,EADiB,IAAfA,EAAE2O,SACA3O,EAAE+d,KAAKzR,GAEPtM,EAAEkJ,QAQR,IALA,IAuCI3K,EAvCA2gB,EAAK,IAAI9W,EAAG,GACZ+W,EAAK,IAAI/W,EAAG,GAEZgX,EAAQ5jB,EAAE0N,QAEPlJ,EAAE+J,KAAK,GAAK,GAAKvO,EAAEuO,KAAK,GAAK,GAAG,CACrC,IAAK,IAAIxP,EAAI,EAAGukB,EAAK,EAAyB,IAArB9e,EAAE4O,MAAM,GAAKkQ,IAAavkB,EAAI,KAAMA,EAAGukB,IAAO,GACvE,GAAIvkB,EAAI,EAEN,IADAyF,EAAEwJ,OAAOjP,GACFA,KAAM,GACP2kB,EAAG5V,SACL4V,EAAGzL,KAAK2L,GAGVF,EAAG1V,OAAO,GAId,IAAK,IAAI7M,EAAI,EAAGoiB,EAAK,EAAyB,IAArBvjB,EAAEoT,MAAM,GAAKmQ,IAAapiB,EAAI,KAAMA,EAAGoiB,IAAO,GACvE,GAAIpiB,EAAI,EAEN,IADAnB,EAAEgO,OAAO7M,GACFA,KAAM,GACPwiB,EAAG7V,SACL6V,EAAG1L,KAAK2L,GAGVD,EAAG3V,OAAO,GAIVxJ,EAAEoP,IAAI5T,IAAM,GACdwE,EAAE0T,KAAKlY,GACP0jB,EAAGxL,KAAKyL,KAER3jB,EAAEkY,KAAK1T,GACPmf,EAAGzL,KAAKwL,IAeZ,OATE3gB,EADgB,IAAdyB,EAAE+J,KAAK,GACHmV,EAEAC,GAGApV,KAAK,GAAK,GAChBxL,EAAIkV,KAAKnH,GAGJ/N,GAGT6J,EAAG3R,UAAUuoB,IAAM,SAAcrW,GAC/B,GAAI5P,KAAKgY,SAAU,OAAOpI,EAAIoJ,MAC9B,GAAIpJ,EAAIoI,SAAU,OAAOhY,KAAKgZ,MAE9B,IAAI/R,EAAIjH,KAAKmQ,QACT1N,EAAImN,EAAIO,QACZlJ,EAAE2O,SAAW,EACbnT,EAAEmT,SAAW,EAGb,IAAK,IAAI0O,EAAQ,EAAGrd,EAAE2e,UAAYnjB,EAAEmjB,SAAUtB,IAC5Crd,EAAEwJ,OAAO,GACThO,EAAEgO,OAAO,GAGX,OAAG,CACD,KAAOxJ,EAAE2e,UACP3e,EAAEwJ,OAAO,GAEX,KAAOhO,EAAEmjB,UACPnjB,EAAEgO,OAAO,GAGX,IAAItB,EAAIlI,EAAEoP,IAAI5T,GACd,GAAI0M,EAAI,EAAG,CAET,IAAIwJ,EAAI1R,EACRA,EAAIxE,EACJA,EAAIkW,OACC,GAAU,IAANxJ,GAAyB,IAAd1M,EAAEuO,KAAK,GAC3B,MAGF/J,EAAE0T,KAAKlY,GAGT,OAAOA,EAAEygB,OAAOoB,IAIlBjV,EAAG3R,UAAU4oB,KAAO,SAAe1W,GACjC,OAAO5P,KAAKslB,KAAK1V,GAAK3I,EAAE+d,KAAKpV,IAG/BP,EAAG3R,UAAUkoB,OAAS,WACpB,OAA+B,IAAP,EAAhB5lB,KAAK6V,MAAM,KAGrBxG,EAAG3R,UAAU6S,MAAQ,WACnB,OAA+B,IAAP,EAAhBvQ,KAAK6V,MAAM,KAIrBxG,EAAG3R,UAAU4S,MAAQ,SAAgBV,GACnC,OAAO5P,KAAK6V,MAAM,GAAKjG,GAIzBP,EAAG3R,UAAU6oB,MAAQ,SAAgB/L,GACnCxL,EAAsB,iBAARwL,GACd,IAAIrL,EAAIqL,EAAM,GACVyG,GAAKzG,EAAMrL,GAAK,GAChBqJ,EAAI,GAAKrJ,EAGb,GAAInP,KAAKtB,QAAUuiB,EAGjB,OAFAjhB,KAAKmX,QAAQ8J,EAAI,GACjBjhB,KAAK6V,MAAMoL,IAAMzI,EACVxY,KAKT,IADA,IAAI+U,EAAQyD,EACHhX,EAAIyf,EAAa,IAAVlM,GAAevT,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACnD,IAAIqO,EAAoB,EAAhB7P,KAAK6V,MAAMrU,GAEnBuT,GADAlF,GAAKkF,KACS,GACdlF,GAAK,SACL7P,KAAK6V,MAAMrU,GAAKqO,EAMlB,OAJc,IAAVkF,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAEAsB,MAGTqP,EAAG3R,UAAUsa,OAAS,WACpB,OAAuB,IAAhBhY,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,IAGzCxG,EAAG3R,UAAUsT,KAAO,SAAepB,GACjC,IAOIpK,EAPAoQ,EAAWhG,EAAM,EAErB,GAAsB,IAAlB5P,KAAK4V,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlB5V,KAAK4V,UAAkBA,EAAU,OAAO,EAK5C,GAHA5V,KAAK0W,QAGD1W,KAAKtB,OAAS,EAChB8G,EAAM,MACD,CACDoQ,IACFhG,GAAOA,GAGTZ,EAAOY,GAAO,SAAW,qBAEzB,IAAIC,EAAoB,EAAhB7P,KAAK6V,MAAM,GACnBrQ,EAAMqK,IAAMD,EAAM,EAAIC,EAAID,GAAO,EAAI,EAEvC,OAAsB,IAAlB5P,KAAK4V,SAA8B,GAANpQ,EAC1BA,GAOT6J,EAAG3R,UAAU2Y,IAAM,SAAczG,GAC/B,GAAsB,IAAlB5P,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAAgB,OAAQ,EACvD,GAAsB,IAAlB5V,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAAgB,OAAO,EAEtD,IAAIpQ,EAAMxF,KAAKwmB,KAAK5W,GACpB,OAAsB,IAAlB5P,KAAK4V,SAA8B,GAANpQ,EAC1BA,GAIT6J,EAAG3R,UAAU8oB,KAAO,SAAe5W,GAEjC,GAAI5P,KAAKtB,OAASkR,EAAIlR,OAAQ,OAAO,EACrC,GAAIsB,KAAKtB,OAASkR,EAAIlR,OAAQ,OAAQ,EAGtC,IADA,IAAI8G,EAAM,EACDhE,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACzC,IAAIyF,EAAoB,EAAhBjH,KAAK6V,MAAMrU,GACfiB,EAAmB,EAAfmN,EAAIiG,MAAMrU,GAElB,GAAIyF,IAAMxE,EAAV,CACIwE,EAAIxE,EACN+C,GAAO,EACEyB,EAAIxE,IACb+C,EAAM,GAER,OAEF,OAAOA,GAGT6J,EAAG3R,UAAU+oB,IAAM,SAAc7W,GAC/B,OAA0B,IAAnB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUgpB,GAAK,SAAa9W,GAC7B,OAAyB,IAAlB5P,KAAKqW,IAAIzG,IAGlBP,EAAG3R,UAAUipB,KAAO,SAAe/W,GACjC,OAAO5P,KAAKgR,KAAKpB,IAAQ,GAG3BP,EAAG3R,UAAUkpB,IAAM,SAAchX,GAC/B,OAAO5P,KAAKqW,IAAIzG,IAAQ,GAG1BP,EAAG3R,UAAUmpB,IAAM,SAAcjX,GAC/B,OAA2B,IAApB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUopB,GAAK,SAAalX,GAC7B,OAA0B,IAAnB5P,KAAKqW,IAAIzG,IAGlBP,EAAG3R,UAAUqpB,KAAO,SAAenX,GACjC,OAAO5P,KAAKgR,KAAKpB,IAAQ,GAG3BP,EAAG3R,UAAUspB,IAAM,SAAcpX,GAC/B,OAAO5P,KAAKqW,IAAIzG,IAAQ,GAG1BP,EAAG3R,UAAUupB,IAAM,SAAcrX,GAC/B,OAA0B,IAAnB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUwpB,GAAK,SAAatX,GAC7B,OAAyB,IAAlB5P,KAAKqW,IAAIzG,IAOlBP,EAAGyG,IAAM,SAAclG,GACrB,OAAO,IAAIuX,EAAIvX,IAGjBP,EAAG3R,UAAU0pB,MAAQ,SAAgBC,GAGnC,OAFArY,GAAQhP,KAAK8V,IAAK,yCAClB9G,EAAyB,IAAlBhP,KAAK4V,SAAgB,iCACrByR,EAAIC,UAAUtnB,MAAMunB,UAAUF,IAGvChY,EAAG3R,UAAU8pB,QAAU,WAErB,OADAxY,EAAOhP,KAAK8V,IAAK,wDACV9V,KAAK8V,IAAI2R,YAAYznB,OAG9BqP,EAAG3R,UAAU6pB,UAAY,SAAoBF,GAE3C,OADArnB,KAAK8V,IAAMuR,EACJrnB,MAGTqP,EAAG3R,UAAUgqB,SAAW,SAAmBL,GAEzC,OADArY,GAAQhP,KAAK8V,IAAK,yCACX9V,KAAKunB,UAAUF,IAGxBhY,EAAG3R,UAAUiqB,OAAS,SAAiB/X,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAI8E,IAAI5a,KAAM4P,IAG5BP,EAAG3R,UAAUkqB,QAAU,SAAkBhY,GAEvC,OADAZ,EAAOhP,KAAK8V,IAAK,uCACV9V,KAAK8V,IAAI4E,KAAK1a,KAAM4P,IAG7BP,EAAG3R,UAAUmqB,OAAS,SAAiBjY,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAIvK,IAAIvL,KAAM4P,IAG5BP,EAAG3R,UAAUoqB,QAAU,SAAkBlY,GAEvC,OADAZ,EAAOhP,KAAK8V,IAAK,uCACV9V,KAAK8V,IAAI6E,KAAK3a,KAAM4P,IAG7BP,EAAG3R,UAAUqqB,OAAS,SAAiBnY,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAIkS,IAAIhoB,KAAM4P,IAG5BP,EAAG3R,UAAUuqB,OAAS,SAAiBrY,GAGrC,OAFAZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIoS,SAASloB,KAAM4P,GACjB5P,KAAK8V,IAAInM,IAAI3J,KAAM4P,IAG5BP,EAAG3R,UAAUyqB,QAAU,SAAkBvY,GAGvC,OAFAZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIoS,SAASloB,KAAM4P,GACjB5P,KAAK8V,IAAI+I,KAAK7e,KAAM4P,IAG7BP,EAAG3R,UAAU0qB,OAAS,WAGpB,OAFApZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIiN,IAAI/iB,OAGtBqP,EAAG3R,UAAU4qB,QAAU,WAGrB,OAFAtZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIkN,KAAKhjB,OAIvBqP,EAAG3R,UAAU6qB,QAAU,WAGrB,OAFAvZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI0S,KAAKxoB,OAGvBqP,EAAG3R,UAAU+qB,QAAU,WAGrB,OAFAzZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIwQ,KAAKtmB,OAIvBqP,EAAG3R,UAAUgrB,OAAS,WAGpB,OAFA1Z,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI0D,IAAIxZ,OAGtBqP,EAAG3R,UAAUirB,OAAS,SAAiB/Y,GAGrC,OAFAZ,EAAOhP,KAAK8V,MAAQlG,EAAIkG,IAAK,qBAC7B9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI5L,IAAIlK,KAAM4P,IAI5B,IAAIgZ,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQ1X,EAAMgC,GAErBvT,KAAKuR,KAAOA,EACZvR,KAAKuT,EAAI,IAAIlE,EAAGkE,EAAG,IACnBvT,KAAK0C,EAAI1C,KAAKuT,EAAEvD,YAChBhQ,KAAKkQ,EAAI,IAAIb,EAAG,GAAG6T,OAAOljB,KAAK0C,GAAGiY,KAAK3a,KAAKuT,GAE5CvT,KAAKkpB,IAAMlpB,KAAKmpB,OAiDlB,SAASC,IACPH,EAAOhmB,KACLjD,KACA,OACA,2EA+DJ,SAASqpB,IACPJ,EAAOhmB,KACLjD,KACA,OACA,kEAIJ,SAASspB,IACPL,EAAOhmB,KACLjD,KACA,OACA,yDAIJ,SAASupB,IAEPN,EAAOhmB,KACLjD,KACA,QACA,uEA8CJ,SAASmnB,EAAKxkB,GACZ,GAAiB,iBAANA,EAAgB,CACzB,IAAI6mB,EAAQna,EAAGoa,OAAO9mB,GACtB3C,KAAK2C,EAAI6mB,EAAMjW,EACfvT,KAAKwpB,MAAQA,OAEbxa,EAAOrM,EAAE8jB,IAAI,GAAI,kCACjBzmB,KAAK2C,EAAIA,EACT3C,KAAKwpB,MAAQ,KAkOjB,SAASE,EAAM/mB,GACbwkB,EAAIlkB,KAAKjD,KAAM2C,GAEf3C,KAAKskB,MAAQtkB,KAAK2C,EAAEqN,YAChBhQ,KAAKskB,MAAQ,IAAO,IACtBtkB,KAAKskB,OAAS,GAAMtkB,KAAKskB,MAAQ,IAGnCtkB,KAAKmP,EAAI,IAAIE,EAAG,GAAG6T,OAAOljB,KAAKskB,OAC/BtkB,KAAKolB,GAAKplB,KAAK2pB,KAAK3pB,KAAKmP,EAAE4T,OAC3B/iB,KAAK4pB,KAAO5pB,KAAKmP,EAAE+W,OAAOlmB,KAAK2C,GAE/B3C,KAAK6pB,KAAO7pB,KAAK4pB,KAAKjgB,IAAI3J,KAAKmP,GAAGqB,MAAM,GAAGoU,IAAI5kB,KAAK2C,GACpD3C,KAAK6pB,KAAO7pB,KAAK6pB,KAAK7E,KAAKhlB,KAAKmP,GAChCnP,KAAK6pB,KAAO7pB,KAAKmP,EAAE5D,IAAIvL,KAAK6pB,MA5a9BZ,EAAOvrB,UAAUyrB,KAAO,WACtB,IAAID,EAAM,IAAI7Z,EAAG,MAEjB,OADA6Z,EAAIrT,MAAQ,IAAIrN,MAAMlD,KAAKqR,KAAK3W,KAAK0C,EAAI,KAClCwmB,GAGTD,EAAOvrB,UAAUosB,QAAU,SAAkBla,GAG3C,IACIma,EADA5a,EAAIS,EAGR,GACE5P,KAAKgqB,MAAM7a,EAAGnP,KAAKkpB,KAGnBa,GADA5a,GADAA,EAAInP,KAAKiqB,MAAM9a,IACTuL,KAAK1a,KAAKkpB,MACPlZ,kBACF+Z,EAAO/pB,KAAK0C,GAErB,IAAI2T,EAAM0T,EAAO/pB,KAAK0C,GAAK,EAAIyM,EAAEqX,KAAKxmB,KAAKuT,GAgB3C,OAfY,IAAR8C,GACFlH,EAAE0G,MAAM,GAAK,EACb1G,EAAEzQ,OAAS,GACF2X,EAAM,EACflH,EAAEwL,KAAK3a,KAAKuT,QAEInU,IAAZ+P,EAAEuH,MAEJvH,EAAEuH,QAGFvH,EAAE+a,SAIC/a,GAGT8Z,EAAOvrB,UAAUssB,MAAQ,SAAgBG,EAAOxhB,GAC9CwhB,EAAM1Z,OAAOzQ,KAAK0C,EAAG,EAAGiG,IAG1BsgB,EAAOvrB,UAAUusB,MAAQ,SAAgBra,GACvC,OAAOA,EAAIiP,KAAK7e,KAAKkQ,IASvB+C,EAASmW,EAAMH,GAEfG,EAAK1rB,UAAUssB,MAAQ,SAAgBG,EAAOC,GAK5C,IAHA,IAEIC,EAAS/kB,KAAKC,IAAI4kB,EAAMzrB,OAAQ,GAC3B8C,EAAI,EAAGA,EAAI6oB,EAAQ7oB,IAC1B4oB,EAAOvU,MAAMrU,GAAK2oB,EAAMtU,MAAMrU,GAIhC,GAFA4oB,EAAO1rB,OAAS2rB,EAEZF,EAAMzrB,QAAU,EAGlB,OAFAyrB,EAAMtU,MAAM,GAAK,OACjBsU,EAAMzrB,OAAS,GAKjB,IAAI4rB,EAAOH,EAAMtU,MAAM,GAGvB,IAFAuU,EAAOvU,MAAMuU,EAAO1rB,UAhBT,QAgBqB4rB,EAE3B9oB,EAAI,GAAIA,EAAI2oB,EAAMzrB,OAAQ8C,IAAK,CAClC,IAAI+oB,EAAwB,EAAjBJ,EAAMtU,MAAMrU,GACvB2oB,EAAMtU,MAAMrU,EAAI,KApBP,QAoBe+oB,IAAgB,EAAMD,IAAS,GACvDA,EAAOC,EAETD,KAAU,GACVH,EAAMtU,MAAMrU,EAAI,IAAM8oB,EACT,IAATA,GAAcH,EAAMzrB,OAAS,GAC/ByrB,EAAMzrB,QAAU,GAEhByrB,EAAMzrB,QAAU,GAIpB0qB,EAAK1rB,UAAUusB,MAAQ,SAAgBra,GAErCA,EAAIiG,MAAMjG,EAAIlR,QAAU,EACxBkR,EAAIiG,MAAMjG,EAAIlR,OAAS,GAAK,EAC5BkR,EAAIlR,QAAU,EAId,IADA,IAAIyG,EAAK,EACA3D,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CACnC,IAAIqO,EAAmB,EAAfD,EAAIiG,MAAMrU,GAClB2D,GAAU,IAAJ0K,EACND,EAAIiG,MAAMrU,GAAU,SAAL2D,EACfA,EAAS,GAAJ0K,GAAa1K,EAAK,SAAa,GAUtC,OANkC,IAA9ByK,EAAIiG,MAAMjG,EAAIlR,OAAS,KACzBkR,EAAIlR,SAC8B,IAA9BkR,EAAIiG,MAAMjG,EAAIlR,OAAS,IACzBkR,EAAIlR,UAGDkR,GASTqD,EAASoW,EAAMJ,GAQfhW,EAASqW,EAAML,GASfhW,EAASsW,EAAQN,GAEjBM,EAAO7rB,UAAUusB,MAAQ,SAAgBra,GAGvC,IADA,IAAImF,EAAQ,EACHvT,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CACnC,IAAI0D,EAA0B,IAAL,EAAf0K,EAAIiG,MAAMrU,IAAiBuT,EACjC5P,EAAU,SAALD,EACTA,KAAQ,GAER0K,EAAIiG,MAAMrU,GAAK2D,EACf4P,EAAQ7P,EAKV,OAHc,IAAV6P,IACFnF,EAAIiG,MAAMjG,EAAIlR,UAAYqW,GAErBnF,GAITP,EAAGoa,OAAS,SAAgBlY,GAE1B,GAAIqX,EAAOrX,GAAO,OAAOqX,EAAOrX,GAEhC,IAAIiY,EACJ,GAAa,SAATjY,EACFiY,EAAQ,IAAIJ,OACP,GAAa,SAAT7X,EACTiY,EAAQ,IAAIH,OACP,GAAa,SAAT9X,EACTiY,EAAQ,IAAIF,MACP,IAAa,WAAT/X,EAGT,MAAM,IAAItR,MAAM,iBAAmBsR,GAFnCiY,EAAQ,IAAID,EAMd,OAFAX,EAAOrX,GAAQiY,EAERA,GAkBTrC,EAAIzpB,UAAU2qB,SAAW,SAAmBphB,GAC1C+H,EAAsB,IAAf/H,EAAE2O,SAAgB,iCACzB5G,EAAO/H,EAAE6O,IAAK,oCAGhBqR,EAAIzpB,UAAUwqB,SAAW,SAAmBjhB,EAAGxE,GAC7CuM,EAAqC,IAA7B/H,EAAE2O,SAAWnT,EAAEmT,UAAiB,iCACxC5G,EAAO/H,EAAE6O,KAAO7O,EAAE6O,MAAQrT,EAAEqT,IAC1B,oCAGJqR,EAAIzpB,UAAUisB,KAAO,SAAe1iB,GAClC,OAAIjH,KAAKwpB,MAAcxpB,KAAKwpB,MAAMM,QAAQ7iB,GAAGsgB,UAAUvnB,MAChDiH,EAAE+d,KAAKhlB,KAAK2C,GAAG4kB,UAAUvnB,OAGlCmnB,EAAIzpB,UAAU8b,IAAM,SAAcvS,GAChC,OAAIA,EAAE+Q,SACG/Q,EAAEkJ,QAGJnQ,KAAK2C,EAAE4I,IAAItE,GAAGsgB,UAAUvnB,OAGjCmnB,EAAIzpB,UAAUkd,IAAM,SAAc3T,EAAGxE,GACnCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAE2T,IAAInY,GAIhB,OAHI+C,EAAI6Q,IAAIrW,KAAK2C,IAAM,GACrB6C,EAAImV,KAAK3a,KAAK2C,GAET6C,EAAI+hB,UAAUvnB,OAGvBmnB,EAAIzpB,UAAUgd,KAAO,SAAezT,EAAGxE,GACrCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEyT,KAAKjY,GAIjB,OAHI+C,EAAI6Q,IAAIrW,KAAK2C,IAAM,GACrB6C,EAAImV,KAAK3a,KAAK2C,GAET6C,GAGT2hB,EAAIzpB,UAAU6N,IAAM,SAActE,EAAGxE,GACnCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEsE,IAAI9I,GAIhB,OAHI+C,EAAIwL,KAAK,GAAK,GAChBxL,EAAIkV,KAAK1a,KAAK2C,GAET6C,EAAI+hB,UAAUvnB,OAGvBmnB,EAAIzpB,UAAUid,KAAO,SAAe1T,EAAGxE,GACrCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAE0T,KAAKlY,GAIjB,OAHI+C,EAAIwL,KAAK,GAAK,GAChBxL,EAAIkV,KAAK1a,KAAK2C,GAET6C,GAGT2hB,EAAIzpB,UAAUsqB,IAAM,SAAc/gB,EAAG2I,GAEnC,OADA5P,KAAKqoB,SAASphB,GACPjH,KAAK2pB,KAAK1iB,EAAE4c,MAAMjU,KAG3BuX,EAAIzpB,UAAUmhB,KAAO,SAAe5X,EAAGxE,GAErC,OADAzC,KAAKkoB,SAASjhB,EAAGxE,GACVzC,KAAK2pB,KAAK1iB,EAAE4X,KAAKpc,KAG1B0kB,EAAIzpB,UAAUiM,IAAM,SAAc1C,EAAGxE,GAEnC,OADAzC,KAAKkoB,SAASjhB,EAAGxE,GACVzC,KAAK2pB,KAAK1iB,EAAE0C,IAAIlH,KAGzB0kB,EAAIzpB,UAAUslB,KAAO,SAAe/b,GAClC,OAAOjH,KAAK6e,KAAK5X,EAAGA,EAAEkJ,UAGxBgX,EAAIzpB,UAAUqlB,IAAM,SAAc9b,GAChC,OAAOjH,KAAK2J,IAAI1C,EAAGA,IAGrBkgB,EAAIzpB,UAAU8qB,KAAO,SAAevhB,GAClC,GAAIA,EAAE+Q,SAAU,OAAO/Q,EAAEkJ,QAEzB,IAAIqa,EAAOxqB,KAAK2C,EAAE2N,MAAM,GAIxB,GAHAtB,EAAOwb,EAAO,GAAM,GAGP,IAATA,EAAY,CACd,IAAItgB,EAAMlK,KAAK2C,EAAEiY,IAAI,IAAIvL,EAAG,IAAIoB,OAAO,GACvC,OAAOzQ,KAAKkK,IAAIjD,EAAGiD,GAQrB,IAFA,IAAIsO,EAAIxY,KAAK2C,EAAEwhB,KAAK,GAChBlD,EAAI,GACAzI,EAAER,UAA2B,IAAfQ,EAAElI,MAAM,IAC5B2Q,IACAzI,EAAE/H,OAAO,GAEXzB,GAAQwJ,EAAER,UAEV,IAAIyS,EAAM,IAAIpb,EAAG,GAAG+X,MAAMpnB,MACtB0qB,EAAOD,EAAI/B,SAIXiC,EAAO3qB,KAAK2C,EAAEwhB,KAAK,GAAG1T,OAAO,GAC7BL,EAAIpQ,KAAK2C,EAAEqN,YAGf,IAFAI,EAAI,IAAIf,EAAG,EAAIe,EAAIA,GAAGgX,MAAMpnB,MAEW,IAAhCA,KAAKkK,IAAIkG,EAAGua,GAAMtU,IAAIqU,IAC3Bta,EAAEwX,QAAQ8C,GAOZ,IAJA,IAAIzlB,EAAIjF,KAAKkK,IAAIkG,EAAGoI,GAChBrJ,EAAInP,KAAKkK,IAAIjD,EAAGuR,EAAE0L,KAAK,GAAGzT,OAAO,IACjCkI,EAAI3Y,KAAKkK,IAAIjD,EAAGuR,GAChB7V,EAAIse,EACc,IAAftI,EAAEtC,IAAIoU,IAAY,CAEvB,IADA,IAAIvB,EAAMvQ,EACDnX,EAAI,EAAoB,IAAjB0nB,EAAI7S,IAAIoU,GAAYjpB,IAClC0nB,EAAMA,EAAId,SAEZpZ,EAAOxN,EAAImB,GACX,IAAIF,EAAIzC,KAAKkK,IAAIjF,EAAG,IAAIoK,EAAG,GAAG6T,OAAOvgB,EAAInB,EAAI,IAE7C2N,EAAIA,EAAE8Y,OAAOxlB,GACbwC,EAAIxC,EAAE2lB,SACNzP,EAAIA,EAAEsP,OAAOhjB,GACbtC,EAAInB,EAGN,OAAO2N,GAGTgY,EAAIzpB,UAAU4oB,KAAO,SAAerf,GAClC,IAAI2jB,EAAM3jB,EAAEif,OAAOlmB,KAAK2C,GACxB,OAAqB,IAAjBioB,EAAIhV,UACNgV,EAAIhV,SAAW,EACR5V,KAAK2pB,KAAKiB,GAAKlC,UAEf1oB,KAAK2pB,KAAKiB,IAIrBzD,EAAIzpB,UAAUwM,IAAM,SAAcjD,EAAG2I,GACnC,GAAIA,EAAIoI,SAAU,OAAO,IAAI3I,EAAG,GAAG+X,MAAMpnB,MACzC,GAAoB,IAAhB4P,EAAIoB,KAAK,GAAU,OAAO/J,EAAEkJ,QAEhC,IACI0a,EAAM,IAAIriB,MAAM,IACpBqiB,EAAI,GAAK,IAAIxb,EAAG,GAAG+X,MAAMpnB,MACzB6qB,EAAI,GAAK5jB,EACT,IAAK,IAAIzF,EAAI,EAAGA,EAAIqpB,EAAInsB,OAAQ8C,IAC9BqpB,EAAIrpB,GAAKxB,KAAK2J,IAAIkhB,EAAIrpB,EAAI,GAAIyF,GAGhC,IAAIzB,EAAMqlB,EAAI,GACVC,EAAU,EACVC,EAAa,EACb/oB,EAAQ4N,EAAII,YAAc,GAK9B,IAJc,IAAVhO,IACFA,EAAQ,IAGLR,EAAIoO,EAAIlR,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CAEpC,IADA,IAAI4R,EAAOxD,EAAIiG,MAAMrU,GACZoC,EAAI5B,EAAQ,EAAG4B,GAAK,EAAGA,IAAK,CACnC,IAAI4W,EAAOpH,GAAQxP,EAAK,EACpB4B,IAAQqlB,EAAI,KACdrlB,EAAMxF,KAAK+iB,IAAIvd,IAGL,IAARgV,GAAyB,IAAZsQ,GAKjBA,IAAY,EACZA,GAAWtQ,GA9BE,MA+BbuQ,GACwC,IAANvpB,GAAiB,IAANoC,KAE7C4B,EAAMxF,KAAK2J,IAAInE,EAAKqlB,EAAIC,IACxBC,EAAa,EACbD,EAAU,IAXRC,EAAa,EAajB/oB,EAAQ,GAGV,OAAOwD,GAGT2hB,EAAIzpB,UAAU4pB,UAAY,SAAoB1X,GAC5C,IAAIT,EAAIS,EAAIoV,KAAKhlB,KAAK2C,GAEtB,OAAOwM,IAAMS,EAAMT,EAAEgB,QAAUhB,GAGjCgY,EAAIzpB,UAAU+pB,YAAc,SAAsB7X,GAChD,IAAIpK,EAAMoK,EAAIO,QAEd,OADA3K,EAAIsQ,IAAM,KACHtQ,GAOT6J,EAAG2b,KAAO,SAAepb,GACvB,OAAO,IAAI8Z,EAAK9Z,IAmBlBqD,EAASyW,EAAMvC,GAEfuC,EAAKhsB,UAAU4pB,UAAY,SAAoB1X,GAC7C,OAAO5P,KAAK2pB,KAAK/Z,EAAIiU,MAAM7jB,KAAKskB,SAGlCoF,EAAKhsB,UAAU+pB,YAAc,SAAsB7X,GACjD,IAAIT,EAAInP,KAAK2pB,KAAK/Z,EAAIjG,IAAI3J,KAAK4pB,OAE/B,OADAza,EAAE2G,IAAM,KACD3G,GAGTua,EAAKhsB,UAAUmhB,KAAO,SAAe5X,EAAGxE,GACtC,GAAIwE,EAAE+Q,UAAYvV,EAAEuV,SAGlB,OAFA/Q,EAAE4O,MAAM,GAAK,EACb5O,EAAEvI,OAAS,EACJuI,EAGT,IAAI0R,EAAI1R,EAAE4X,KAAKpc,GACXwC,EAAI0T,EAAEsL,MAAMjkB,KAAKskB,OAAO3a,IAAI3J,KAAK6pB,MAAM7F,OAAOhkB,KAAKskB,OAAO3a,IAAI3J,KAAK2C,GACnEsoB,EAAItS,EAAEgC,KAAK1V,GAAGwL,OAAOzQ,KAAKskB,OAC1B9e,EAAMylB,EAQV,OANIA,EAAE5U,IAAIrW,KAAK2C,IAAM,EACnB6C,EAAMylB,EAAEtQ,KAAK3a,KAAK2C,GACTsoB,EAAEja,KAAK,GAAK,IACrBxL,EAAMylB,EAAEvQ,KAAK1a,KAAK2C,IAGb6C,EAAI+hB,UAAUvnB,OAGvB0pB,EAAKhsB,UAAUiM,IAAM,SAAc1C,EAAGxE,GACpC,GAAIwE,EAAE+Q,UAAYvV,EAAEuV,SAAU,OAAO,IAAI3I,EAAG,GAAGkY,UAAUvnB,MAEzD,IAAI2Y,EAAI1R,EAAE0C,IAAIlH,GACVwC,EAAI0T,EAAEsL,MAAMjkB,KAAKskB,OAAO3a,IAAI3J,KAAK6pB,MAAM7F,OAAOhkB,KAAKskB,OAAO3a,IAAI3J,KAAK2C,GACnEsoB,EAAItS,EAAEgC,KAAK1V,GAAGwL,OAAOzQ,KAAKskB,OAC1B9e,EAAMylB,EAOV,OANIA,EAAE5U,IAAIrW,KAAK2C,IAAM,EACnB6C,EAAMylB,EAAEtQ,KAAK3a,KAAK2C,GACTsoB,EAAEja,KAAK,GAAK,IACrBxL,EAAMylB,EAAEvQ,KAAK1a,KAAK2C,IAGb6C,EAAI+hB,UAAUvnB,OAGvB0pB,EAAKhsB,UAAU4oB,KAAO,SAAerf,GAGnC,OADUjH,KAAK2pB,KAAK1iB,EAAEif,OAAOlmB,KAAK2C,GAAGgH,IAAI3J,KAAKolB,KACnCmC,UAAUvnB,OAt2GzB,CAw2GoC3C,EAAQ2C,Q,mDCt2G5C,MAAMkrB,EAAgB,gLAEhBC,EAAa,IAAMD,EAAN,gOACbE,EAAY,IAAIC,OAAO,IAAMF,EAAa,KAsBhD7tB,EAAQguB,QAAU,SAASC,GACzB,YAAoB,IAANA,GAGhBjuB,EAAQkuB,cAAgB,SAAS1qB,GAC/B,OAAmC,IAA5B3D,OAAOsuB,KAAK3qB,GAAKpC,QAQ1BpB,EAAQmR,MAAQ,SAASzG,EAAQf,EAAGykB,GAClC,GAAIzkB,EAAG,CACL,MAAMwkB,EAAOtuB,OAAOsuB,KAAKxkB,GACnBjG,EAAMyqB,EAAK/sB,OACjB,IAAK,IAAI8C,EAAI,EAAGA,EAAIR,EAAKQ,IAErBwG,EAAOyjB,EAAKjqB,IADG,WAAdkqB,EACiB,CAAEzkB,EAAEwkB,EAAKjqB,KAETyF,EAAEwkB,EAAKjqB,MASjClE,EAAQquB,SAAW,SAASJ,GAC1B,OAAIjuB,EAAQguB,QAAQC,GACXA,EAEA,IAOXjuB,EAAQsuB,aAAe,SAASC,EAASC,EAAgBC,GACvD,IAAIC,EAAa,GACjB,IAAKH,EACH,OAAOC,EAGT,IAAK,IAAItqB,EAAI,EAAGA,EAAIuqB,EAAMrtB,OAAQ8C,SACNpC,IAAtBysB,EAAQE,EAAMvqB,IAChBwqB,EAAWD,EAAMvqB,IAAMqqB,EAAQE,EAAMvqB,IAErCwqB,EAAWD,EAAMvqB,IAAMsqB,EAAeC,EAAMvqB,IAGhD,OAAOwqB,GAGT1uB,EAAQ2uB,OA9DO,SAASzrB,GACtB,MAAMsH,EAAQsjB,EAAUc,KAAK1rB,GAC7B,QAAQ,MAACsH,IA6DXxK,EAAQ6uB,cA9Ec,SAAS3rB,EAAQ4rB,GACrC,MAAMC,EAAU,GAChB,IAAIvkB,EAAQskB,EAAMF,KAAK1rB,GACvB,KAAOsH,GAAO,CACZ,MAAMwkB,EAAa,GACbtrB,EAAM8G,EAAMpJ,OAClB,IAAK,IAAI6tB,EAAQ,EAAGA,EAAQvrB,EAAKurB,IAC/BD,EAAW5nB,KAAKoD,EAAMykB,IAExBF,EAAQ3nB,KAAK4nB,GACbxkB,EAAQskB,EAAMF,KAAK1rB,GAErB,OAAO6rB,GAmET/uB,EAAQ6tB,WAAaA,G,gBCtFrB,IAAIjtB,EAAS,EAAQ,KAAeA,OAChCsuB,EAAY,EAAQ,KAAUA,UAC9BC,EAAgB,EAAQ,KAAkBA,cAG9C,SAASC,EAAYC,GACnBH,EAAUvpB,KAAKjD,MACfA,KAAK2sB,SAA+B,iBAAbA,EACnB3sB,KAAK2sB,SACP3sB,KAAK2sB,GAAY3sB,KAAK4sB,eAEtB5sB,KAAK6sB,MAAQ7sB,KAAK4sB,eAEhB5sB,KAAK8sB,SACP9sB,KAAK+sB,QAAU/sB,KAAK8sB,OACpB9sB,KAAK8sB,OAAS,MAEhB9sB,KAAKgtB,SAAW,KAChBhtB,KAAKitB,UAAY,KAfJ,EAAQ,IAiBvBha,CAASyZ,EAAYF,GAErBE,EAAWhvB,UAAUwvB,OAAS,SAAU7rB,EAAM8rB,EAAUC,GAClC,iBAAT/rB,IACTA,EAAOnD,EAAOS,KAAK0C,EAAM8rB,IAG3B,IAAIE,EAAUrtB,KAAKstB,QAAQjsB,GAC3B,OAAIrB,KAAK2sB,SAAiB3sB,MAEtBotB,IACFC,EAAUrtB,KAAKutB,UAAUF,EAASD,IAG7BC,IAGTX,EAAWhvB,UAAU8vB,eAAiB,aACtCd,EAAWhvB,UAAU+vB,WAAa,WAChC,MAAM,IAAIxtB,MAAM,gDAGlBysB,EAAWhvB,UAAUgwB,WAAa,WAChC,MAAM,IAAIztB,MAAM,gDAGlBysB,EAAWhvB,UAAUiwB,OAAS,WAC5B,MAAM,IAAI1tB,MAAM,2CAGlBysB,EAAWhvB,UAAUkwB,WAAa,SAAUvsB,EAAMihB,EAAGiI,GACnD,IAAIxY,EACJ,IACM/R,KAAK2sB,SACP3sB,KAAKstB,QAAQjsB,GAEbrB,KAAK0E,KAAK1E,KAAKstB,QAAQjsB,IAEzB,MAAOmF,GACPuL,EAAMvL,EACN,QACA+jB,EAAKxY,KAGT2a,EAAWhvB,UAAUmwB,OAAS,SAAUC,GACtC,IAAI/b,EACJ,IACE/R,KAAK0E,KAAK1E,KAAK+sB,WACf,MAAOvmB,GACPuL,EAAMvL,EAGRsnB,EAAK/b,IAEP2a,EAAWhvB,UAAUkvB,eAAiB,SAAUQ,GAC9C,IAAIC,EAAUrtB,KAAK+sB,WAAa7uB,EAAOU,MAAM,GAI7C,OAHIwuB,IACFC,EAAUrtB,KAAKutB,UAAUF,EAASD,GAAW,IAExCC,GAGTX,EAAWhvB,UAAU6vB,UAAY,SAAU3vB,EAAO0V,EAAKya,GAMrD,GALK/tB,KAAKgtB,WACRhtB,KAAKgtB,SAAW,IAAIP,EAAcnZ,GAClCtT,KAAKitB,UAAY3Z,GAGftT,KAAKitB,YAAc3Z,EAAK,MAAM,IAAIrT,MAAM,0BAE5C,IAAI0I,EAAM3I,KAAKgtB,SAASrsB,MAAM/C,GAK9B,OAJImwB,IACFplB,GAAO3I,KAAKgtB,SAAS/qB,OAGhB0G,GAGTtL,EAAOC,QAAUovB,G,8BC3EjB,IAOIsB,EAPAC,EAAuB,iBAAZC,QAAuBA,QAAU,KAC5CC,EAAeF,GAAwB,mBAAZA,EAAE/nB,MAC7B+nB,EAAE/nB,MACF,SAAsB8B,EAAQomB,EAAUC,GACxC,OAAOC,SAAS5wB,UAAUwI,MAAMjD,KAAK+E,EAAQomB,EAAUC,IAKzDL,EADEC,GAA0B,mBAAdA,EAAEM,QACCN,EAAEM,QACVpxB,OAAOqxB,sBACC,SAAwBxmB,GACvC,OAAO7K,OAAOsxB,oBAAoBzmB,GAC/BZ,OAAOjK,OAAOqxB,sBAAsBxmB,KAGxB,SAAwBA,GACvC,OAAO7K,OAAOsxB,oBAAoBzmB,IAQtC,IAAI0mB,EAAc3qB,OAAOjB,OAAS,SAAqBlF,GACrD,OAAOA,GAAUA,GAGnB,SAAS+wB,IACPA,EAAaC,KAAK3rB,KAAKjD,MAEzB3C,EAAOC,QAAUqxB,EACjBtxB,EAAOC,QAAQuxB,KAwYf,SAAcC,EAASvd,GACrB,OAAO,IAAIwd,SAAQ,SAAUC,EAASC,GACpC,SAASC,SACe9vB,IAAlB+vB,GACFL,EAAQM,eAAe,QAASD,GAElCH,EAAQ,GAAGpuB,MAAMqC,KAAKyE,YAExB,IAAIynB,EAQS,UAAT5d,IACF4d,EAAgB,SAAuBpd,GACrC+c,EAAQM,eAAe7d,EAAM2d,GAC7BD,EAAOld,IAGT+c,EAAQD,KAAK,QAASM,IAGxBL,EAAQD,KAAKtd,EAAM2d,OA9ZvBP,EAAaA,aAAeA,EAE5BA,EAAajxB,UAAU2xB,aAAUjwB,EACjCuvB,EAAajxB,UAAU4xB,aAAe,EACtCX,EAAajxB,UAAU6xB,mBAAgBnwB,EAIvC,IAAIowB,EAAsB,GAE1B,SAASC,EAAcC,GACrB,GAAwB,mBAAbA,EACT,MAAM,IAAI3wB,UAAU,0EAA4E2wB,GAsCpG,SAASC,EAAiB/vB,GACxB,YAA2BR,IAAvBQ,EAAK2vB,cACAZ,EAAaa,oBACf5vB,EAAK2vB,cAmDd,SAASK,EAAa5nB,EAAQ5G,EAAMsuB,EAAUG,GAC5C,IAAIltB,EACAmtB,EACAC,EA1HsBC,EAgJ1B,GApBAP,EAAcC,QAGCtwB,KADf0wB,EAAS9nB,EAAOqnB,UAEdS,EAAS9nB,EAAOqnB,QAAUlyB,OAAOC,OAAO,MACxC4K,EAAOsnB,aAAe,SAIKlwB,IAAvB0wB,EAAOG,cACTjoB,EAAOkoB,KAAK,cAAe9uB,EACfsuB,EAASA,SAAWA,EAASA,SAAWA,GAIpDI,EAAS9nB,EAAOqnB,SAElBU,EAAWD,EAAO1uB,SAGHhC,IAAb2wB,EAEFA,EAAWD,EAAO1uB,GAAQsuB,IACxB1nB,EAAOsnB,kBAeT,GAbwB,mBAAbS,EAETA,EAAWD,EAAO1uB,GAChByuB,EAAU,CAACH,EAAUK,GAAY,CAACA,EAAUL,GAErCG,EACTE,EAASI,QAAQT,GAEjBK,EAASrrB,KAAKgrB,IAIhB/sB,EAAIgtB,EAAiB3nB,IACb,GAAK+nB,EAASrxB,OAASiE,IAAMotB,EAASK,OAAQ,CACpDL,EAASK,QAAS,EAGlB,IAAIvgB,EAAI,IAAI5P,MAAM,+CACE8vB,EAASrxB,OAAS,IAAM6E,OAAOnC,GADjC,qEAIlByO,EAAE0B,KAAO,8BACT1B,EAAEif,QAAU9mB,EACZ6H,EAAEzO,KAAOA,EACTyO,EAAEwgB,MAAQN,EAASrxB,OA7KGsxB,EA8KHngB,EA7KnBygB,SAAWA,QAAQC,MAAMD,QAAQC,KAAKP,GAiL1C,OAAOhoB,EAcT,SAASwoB,IACP,IAAKxwB,KAAKywB,MAGR,OAFAzwB,KAAKgI,OAAOonB,eAAepvB,KAAKoB,KAAMpB,KAAK0wB,QAC3C1wB,KAAKywB,OAAQ,EACY,IAArB/oB,UAAUhJ,OACLsB,KAAK0vB,SAASzsB,KAAKjD,KAAKgI,QAC1BhI,KAAK0vB,SAASxpB,MAAMlG,KAAKgI,OAAQN,WAI5C,SAASipB,EAAU3oB,EAAQ5G,EAAMsuB,GAC/B,IAAIkB,EAAQ,CAAEH,OAAO,EAAOC,YAAQtxB,EAAW4I,OAAQA,EAAQ5G,KAAMA,EAAMsuB,SAAUA,GACjFmB,EAAUL,EAAY3jB,KAAK+jB,GAG/B,OAFAC,EAAQnB,SAAWA,EACnBkB,EAAMF,OAASG,EACRA,EA0HT,SAASC,EAAW9oB,EAAQ5G,EAAM2vB,GAChC,IAAIjB,EAAS9nB,EAAOqnB,QAEpB,QAAejwB,IAAX0wB,EACF,MAAO,GAET,IAAIkB,EAAalB,EAAO1uB,GACxB,YAAmBhC,IAAf4xB,EACK,GAEiB,mBAAfA,EACFD,EAAS,CAACC,EAAWtB,UAAYsB,GAAc,CAACA,GAElDD,EAsDT,SAAyB5tB,GAEvB,IADA,IAAIuF,EAAM,IAAIF,MAAMrF,EAAIzE,QACf8C,EAAI,EAAGA,EAAIkH,EAAIhK,SAAU8C,EAChCkH,EAAIlH,GAAK2B,EAAI3B,GAAGkuB,UAAYvsB,EAAI3B,GAElC,OAAOkH,EA1DLuoB,CAAgBD,GAAcE,EAAWF,EAAYA,EAAWtyB,QAoBpE,SAASyyB,EAAc/vB,GACrB,IAAI0uB,EAAS9vB,KAAKqvB,QAElB,QAAejwB,IAAX0wB,EAAsB,CACxB,IAAIkB,EAAalB,EAAO1uB,GAExB,GAA0B,mBAAf4vB,EACT,OAAO,EACF,QAAmB5xB,IAAf4xB,EACT,OAAOA,EAAWtyB,OAItB,OAAO,EAOT,SAASwyB,EAAW/tB,EAAKT,GAEvB,IADA,IAAIxB,EAAO,IAAIsH,MAAM9F,GACZlB,EAAI,EAAGA,EAAIkB,IAAKlB,EACvBN,EAAKM,GAAK2B,EAAI3B,GAChB,OAAON,EApWT/D,OAAO2J,eAAe6nB,EAAc,sBAAuB,CACzD9wB,YAAY,EACZmV,IAAK,WACH,OAAOwc,GAETrjB,IAAK,SAAS3N,GACZ,GAAmB,iBAARA,GAAoBA,EAAM,GAAKkwB,EAAYlwB,GACpD,MAAM,IAAIqB,WAAW,kGAAoGrB,EAAM,KAEjIgxB,EAAsBhxB,KAI1BmwB,EAAaC,KAAO,gBAEGxvB,IAAjBY,KAAKqvB,SACLrvB,KAAKqvB,UAAYlyB,OAAO8P,eAAejN,MAAMqvB,UAC/CrvB,KAAKqvB,QAAUlyB,OAAOC,OAAO,MAC7B4C,KAAKsvB,aAAe,GAGtBtvB,KAAKuvB,cAAgBvvB,KAAKuvB,oBAAiBnwB,GAK7CuvB,EAAajxB,UAAU0zB,gBAAkB,SAAyB1uB,GAChE,GAAiB,iBAANA,GAAkBA,EAAI,GAAKgsB,EAAYhsB,GAChD,MAAM,IAAI7C,WAAW,gFAAkF6C,EAAI,KAG7G,OADA1C,KAAKuvB,cAAgB7sB,EACd1C,MAST2uB,EAAajxB,UAAU2zB,gBAAkB,WACvC,OAAO1B,EAAiB3vB,OAG1B2uB,EAAajxB,UAAUwyB,KAAO,SAAc9uB,GAE1C,IADA,IAAIitB,EAAO,GACF7sB,EAAI,EAAGA,EAAIkG,UAAUhJ,OAAQ8C,IAAK6sB,EAAK3pB,KAAKgD,UAAUlG,IAC/D,IAAI8vB,EAAoB,UAATlwB,EAEX0uB,EAAS9vB,KAAKqvB,QAClB,QAAejwB,IAAX0wB,EACFwB,EAAWA,QAA4BlyB,IAAjB0wB,EAAOyB,WAC1B,IAAKD,EACR,OAAO,EAGT,GAAIA,EAAS,CACX,IAAIE,EAGJ,GAFInD,EAAK3vB,OAAS,IAChB8yB,EAAKnD,EAAK,IACRmD,aAAcvxB,MAGhB,MAAMuxB,EAGR,IAAIzf,EAAM,IAAI9R,MAAM,oBAAsBuxB,EAAK,KAAOA,EAAGC,QAAU,IAAM,KAEzE,MADA1f,EAAI2f,QAAUF,EACRzf,EAGR,IAAI4f,EAAU7B,EAAO1uB,GAErB,QAAgBhC,IAAZuyB,EACF,OAAO,EAET,GAAuB,mBAAZA,EACTxD,EAAawD,EAAS3xB,KAAMquB,OAE5B,KAAIrtB,EAAM2wB,EAAQjzB,OACdkzB,EAAYV,EAAWS,EAAS3wB,GACpC,IAASQ,EAAI,EAAGA,EAAIR,IAAOQ,EACzB2sB,EAAayD,EAAUpwB,GAAIxB,KAAMquB,GAGrC,OAAO,GAiETM,EAAajxB,UAAUm0B,YAAc,SAAqBzwB,EAAMsuB,GAC9D,OAAOE,EAAa5vB,KAAMoB,EAAMsuB,GAAU,IAG5Cf,EAAajxB,UAAUo0B,GAAKnD,EAAajxB,UAAUm0B,YAEnDlD,EAAajxB,UAAUq0B,gBACnB,SAAyB3wB,EAAMsuB,GAC7B,OAAOE,EAAa5vB,KAAMoB,EAAMsuB,GAAU,IAqBhDf,EAAajxB,UAAUmxB,KAAO,SAAcztB,EAAMsuB,GAGhD,OAFAD,EAAcC,GACd1vB,KAAK8xB,GAAG1wB,EAAMuvB,EAAU3wB,KAAMoB,EAAMsuB,IAC7B1vB,MAGT2uB,EAAajxB,UAAUs0B,oBACnB,SAA6B5wB,EAAMsuB,GAGjC,OAFAD,EAAcC,GACd1vB,KAAK+xB,gBAAgB3wB,EAAMuvB,EAAU3wB,KAAMoB,EAAMsuB,IAC1C1vB,MAIb2uB,EAAajxB,UAAU0xB,eACnB,SAAwBhuB,EAAMsuB,GAC5B,IAAIroB,EAAMyoB,EAAQmC,EAAUzwB,EAAG0wB,EAK/B,GAHAzC,EAAcC,QAGCtwB,KADf0wB,EAAS9vB,KAAKqvB,SAEZ,OAAOrvB,KAGT,QAAaZ,KADbiI,EAAOyoB,EAAO1uB,IAEZ,OAAOpB,KAET,GAAIqH,IAASqoB,GAAYroB,EAAKqoB,WAAaA,EACb,KAAtB1vB,KAAKsvB,aACTtvB,KAAKqvB,QAAUlyB,OAAOC,OAAO,cAEtB0yB,EAAO1uB,GACV0uB,EAAOV,gBACTpvB,KAAKkwB,KAAK,iBAAkB9uB,EAAMiG,EAAKqoB,UAAYA,SAElD,GAAoB,mBAATroB,EAAqB,CAGrC,IAFA4qB,GAAY,EAEPzwB,EAAI6F,EAAK3I,OAAS,EAAG8C,GAAK,EAAGA,IAChC,GAAI6F,EAAK7F,KAAOkuB,GAAYroB,EAAK7F,GAAGkuB,WAAaA,EAAU,CACzDwC,EAAmB7qB,EAAK7F,GAAGkuB,SAC3BuC,EAAWzwB,EACX,MAIJ,GAAIywB,EAAW,EACb,OAAOjyB,KAEQ,IAAbiyB,EACF5qB,EAAKid,QAiIf,SAAmBjd,EAAMklB,GACvB,KAAOA,EAAQ,EAAIllB,EAAK3I,OAAQ6tB,IAC9BllB,EAAKklB,GAASllB,EAAKklB,EAAQ,GAC7BllB,EAAK8qB,MAlIGC,CAAU/qB,EAAM4qB,GAGE,IAAhB5qB,EAAK3I,SACPoxB,EAAO1uB,GAAQiG,EAAK,SAEQjI,IAA1B0wB,EAAOV,gBACTpvB,KAAKkwB,KAAK,iBAAkB9uB,EAAM8wB,GAAoBxC,GAG1D,OAAO1vB,MAGb2uB,EAAajxB,UAAUkZ,IAAM+X,EAAajxB,UAAU0xB,eAEpDT,EAAajxB,UAAU20B,mBACnB,SAA4BjxB,GAC1B,IAAIwwB,EAAW9B,EAAQtuB,EAGvB,QAAepC,KADf0wB,EAAS9vB,KAAKqvB,SAEZ,OAAOrvB,KAGT,QAA8BZ,IAA1B0wB,EAAOV,eAUT,OATyB,IAArB1nB,UAAUhJ,QACZsB,KAAKqvB,QAAUlyB,OAAOC,OAAO,MAC7B4C,KAAKsvB,aAAe,QACMlwB,IAAjB0wB,EAAO1uB,KACY,KAAtBpB,KAAKsvB,aACTtvB,KAAKqvB,QAAUlyB,OAAOC,OAAO,aAEtB0yB,EAAO1uB,IAEXpB,KAIT,GAAyB,IAArB0H,UAAUhJ,OAAc,CAC1B,IACIJ,EADAmtB,EAAOtuB,OAAOsuB,KAAKqE,GAEvB,IAAKtuB,EAAI,EAAGA,EAAIiqB,EAAK/sB,SAAU8C,EAEjB,oBADZlD,EAAMmtB,EAAKjqB,KAEXxB,KAAKqyB,mBAAmB/zB,GAK1B,OAHA0B,KAAKqyB,mBAAmB,kBACxBryB,KAAKqvB,QAAUlyB,OAAOC,OAAO,MAC7B4C,KAAKsvB,aAAe,EACbtvB,KAKT,GAAyB,mBAFzB4xB,EAAY9B,EAAO1uB,IAGjBpB,KAAKovB,eAAehuB,EAAMwwB,QACrB,QAAkBxyB,IAAdwyB,EAET,IAAKpwB,EAAIowB,EAAUlzB,OAAS,EAAG8C,GAAK,EAAGA,IACrCxB,KAAKovB,eAAehuB,EAAMwwB,EAAUpwB,IAIxC,OAAOxB,MAoBb2uB,EAAajxB,UAAUk0B,UAAY,SAAmBxwB,GACpD,OAAO0vB,EAAW9wB,KAAMoB,GAAM,IAGhCutB,EAAajxB,UAAU40B,aAAe,SAAsBlxB,GAC1D,OAAO0vB,EAAW9wB,KAAMoB,GAAM,IAGhCutB,EAAawC,cAAgB,SAASrC,EAAS1tB,GAC7C,MAAqC,mBAA1B0tB,EAAQqC,cACVrC,EAAQqC,cAAc/vB,GAEtB+vB,EAAcluB,KAAK6rB,EAAS1tB,IAIvCutB,EAAajxB,UAAUyzB,cAAgBA,EAiBvCxC,EAAajxB,UAAU60B,WAAa,WAClC,OAAOvyB,KAAKsvB,aAAe,EAAItB,EAAehuB,KAAKqvB,SAAW,K,6BC/YhE,IAAInxB,EAAS,EAAQ,KAAeA,OAGhCuC,EAAavC,EAAOuC,YAAc,SAAUvB,GAE9C,QADAA,EAAW,GAAKA,IACIA,EAAS4C,eAC3B,IAAK,MAAM,IAAK,OAAO,IAAK,QAAQ,IAAK,QAAQ,IAAK,SAAS,IAAK,SAAS,IAAK,OAAO,IAAK,QAAQ,IAAK,UAAU,IAAK,WAAW,IAAK,MACxI,OAAO,EACT,QACE,OAAO,IA4Cb,SAAS2qB,EAAcvtB,GAErB,IAAIszB,EACJ,OAFAxyB,KAAKd,SAXP,SAA2BoU,GACzB,IAAImf,EA/BN,SAA4Bnf,GAC1B,IAAKA,EAAK,MAAO,OAEjB,IADA,IAAIof,IAEF,OAAQpf,GACN,IAAK,OACL,IAAK,QACH,MAAO,OACT,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,WACH,MAAO,UACT,IAAK,SACL,IAAK,SACH,MAAO,SACT,IAAK,SACL,IAAK,QACL,IAAK,MACH,OAAOA,EACT,QACE,GAAIof,EAAS,OACbpf,GAAO,GAAKA,GAAKxR,cACjB4wB,GAAU,GAQLC,CAAmBrf,GAC9B,GAAoB,iBAATmf,IAAsBv0B,EAAOuC,aAAeA,IAAeA,EAAW6S,IAAO,MAAM,IAAIrT,MAAM,qBAAuBqT,GAC/H,OAAOmf,GAAQnf,EAQCsf,CAAkB1zB,GAE1Bc,KAAKd,UACX,IAAK,UACHc,KAAK6yB,KAAOC,EACZ9yB,KAAKiC,IAAM8wB,EACXP,EAAK,EACL,MACF,IAAK,OACHxyB,KAAKgzB,SAAWC,EAChBT,EAAK,EACL,MACF,IAAK,SACHxyB,KAAK6yB,KAAOK,EACZlzB,KAAKiC,IAAMkxB,EACXX,EAAK,EACL,MACF,QAGE,OAFAxyB,KAAKW,MAAQyyB,OACbpzB,KAAKiC,IAAMoxB,GAGfrzB,KAAKszB,SAAW,EAChBtzB,KAAKuzB,UAAY,EACjBvzB,KAAKwzB,SAAWt1B,EAAOW,YAAY2zB,GAoCrC,SAASiB,EAAcC,GACrB,OAAIA,GAAQ,IAAa,EAAWA,GAAQ,GAAM,EAAa,EAAWA,GAAQ,GAAM,GAAa,EAAWA,GAAQ,GAAM,GAAa,EACpIA,GAAQ,GAAM,GAAQ,GAAK,EA2DpC,SAAST,EAAa9zB,GACpB,IAAIoU,EAAIvT,KAAKuzB,UAAYvzB,KAAKszB,SAC1BnkB,EAtBN,SAA6BsI,EAAMtY,EAAKoU,GACtC,GAAwB,MAAV,IAATpU,EAAI,IAEP,OADAsY,EAAK6b,SAAW,EACT,IAET,GAAI7b,EAAK6b,SAAW,GAAKn0B,EAAIT,OAAS,EAAG,CACvC,GAAwB,MAAV,IAATS,EAAI,IAEP,OADAsY,EAAK6b,SAAW,EACT,IAET,GAAI7b,EAAK6b,SAAW,GAAKn0B,EAAIT,OAAS,GACZ,MAAV,IAATS,EAAI,IAEP,OADAsY,EAAK6b,SAAW,EACT,KASLK,CAAoB3zB,KAAMb,GAClC,YAAUC,IAAN+P,EAAwBA,EACxBnP,KAAKszB,UAAYn0B,EAAIT,QACvBS,EAAI+B,KAAKlB,KAAKwzB,SAAUjgB,EAAG,EAAGvT,KAAKszB,UAC5BtzB,KAAKwzB,SAAS/xB,SAASzB,KAAKd,SAAU,EAAGc,KAAKuzB,aAEvDp0B,EAAI+B,KAAKlB,KAAKwzB,SAAUjgB,EAAG,EAAGpU,EAAIT,aAClCsB,KAAKszB,UAAYn0B,EAAIT,SA2BvB,SAASo0B,EAAU3zB,EAAKqC,GACtB,IAAKrC,EAAIT,OAAS8C,GAAK,GAAM,EAAG,CAC9B,IAAI2N,EAAIhQ,EAAIsC,SAAS,UAAWD,GAChC,GAAI2N,EAAG,CACL,IAAIlK,EAAIkK,EAAExK,WAAWwK,EAAEzQ,OAAS,GAChC,GAAIuG,GAAK,OAAUA,GAAK,MAKtB,OAJAjF,KAAKszB,SAAW,EAChBtzB,KAAKuzB,UAAY,EACjBvzB,KAAKwzB,SAAS,GAAKr0B,EAAIA,EAAIT,OAAS,GACpCsB,KAAKwzB,SAAS,GAAKr0B,EAAIA,EAAIT,OAAS,GAC7ByQ,EAAEvO,MAAM,GAAI,GAGvB,OAAOuO,EAKT,OAHAnP,KAAKszB,SAAW,EAChBtzB,KAAKuzB,UAAY,EACjBvzB,KAAKwzB,SAAS,GAAKr0B,EAAIA,EAAIT,OAAS,GAC7BS,EAAIsC,SAAS,UAAWD,EAAGrC,EAAIT,OAAS,GAKjD,SAASq0B,EAAS5zB,GAChB,IAAIgQ,EAAIhQ,GAAOA,EAAIT,OAASsB,KAAKW,MAAMxB,GAAO,GAC9C,GAAIa,KAAKszB,SAAU,CACjB,IAAIrxB,EAAMjC,KAAKuzB,UAAYvzB,KAAKszB,SAChC,OAAOnkB,EAAInP,KAAKwzB,SAAS/xB,SAAS,UAAW,EAAGQ,GAElD,OAAOkN,EAGT,SAAS+jB,EAAW/zB,EAAKqC,GACvB,IAAIkB,GAAKvD,EAAIT,OAAS8C,GAAK,EAC3B,OAAU,IAANkB,EAAgBvD,EAAIsC,SAAS,SAAUD,IAC3CxB,KAAKszB,SAAW,EAAI5wB,EACpB1C,KAAKuzB,UAAY,EACP,IAAN7wB,EACF1C,KAAKwzB,SAAS,GAAKr0B,EAAIA,EAAIT,OAAS,IAEpCsB,KAAKwzB,SAAS,GAAKr0B,EAAIA,EAAIT,OAAS,GACpCsB,KAAKwzB,SAAS,GAAKr0B,EAAIA,EAAIT,OAAS,IAE/BS,EAAIsC,SAAS,SAAUD,EAAGrC,EAAIT,OAASgE,IAGhD,SAASywB,EAAUh0B,GACjB,IAAIgQ,EAAIhQ,GAAOA,EAAIT,OAASsB,KAAKW,MAAMxB,GAAO,GAC9C,OAAIa,KAAKszB,SAAiBnkB,EAAInP,KAAKwzB,SAAS/xB,SAAS,SAAU,EAAG,EAAIzB,KAAKszB,UACpEnkB,EAIT,SAASikB,EAAYj0B,GACnB,OAAOA,EAAIsC,SAASzB,KAAKd,UAG3B,SAASm0B,EAAUl0B,GACjB,OAAOA,GAAOA,EAAIT,OAASsB,KAAKW,MAAMxB,GAAO,GAzN/C7B,EAAQmvB,cAAgBA,EA6BxBA,EAAc/uB,UAAUiD,MAAQ,SAAUxB,GACxC,GAAmB,IAAfA,EAAIT,OAAc,MAAO,GAC7B,IAAIyQ,EACA3N,EACJ,GAAIxB,KAAKszB,SAAU,CAEjB,QAAUl0B,KADV+P,EAAInP,KAAKgzB,SAAS7zB,IACG,MAAO,GAC5BqC,EAAIxB,KAAKszB,SACTtzB,KAAKszB,SAAW,OAEhB9xB,EAAI,EAEN,OAAIA,EAAIrC,EAAIT,OAAeyQ,EAAIA,EAAInP,KAAK6yB,KAAK1zB,EAAKqC,GAAKxB,KAAK6yB,KAAK1zB,EAAKqC,GAC/D2N,GAAK,IAGdsd,EAAc/uB,UAAUuE,IAwGxB,SAAiB9C,GACf,IAAIgQ,EAAIhQ,GAAOA,EAAIT,OAASsB,KAAKW,MAAMxB,GAAO,GAC9C,OAAIa,KAAKszB,SAAiBnkB,EAAI,IACvBA,GAxGTsd,EAAc/uB,UAAUm1B,KA0FxB,SAAkB1zB,EAAKqC,GACrB,IAAIuV,EArEN,SAA6BU,EAAMtY,EAAKqC,GACtC,IAAIoC,EAAIzE,EAAIT,OAAS,EACrB,GAAIkF,EAAIpC,EAAG,OAAO,EAClB,IAAIgxB,EAAKiB,EAAct0B,EAAIyE,IAC3B,GAAI4uB,GAAM,EAER,OADIA,EAAK,IAAG/a,EAAK6b,SAAWd,EAAK,GAC1BA,EAET,KAAM5uB,EAAIpC,IAAa,IAARgxB,EAAW,OAAO,EAEjC,IADAA,EAAKiB,EAAct0B,EAAIyE,MACb,EAER,OADI4uB,EAAK,IAAG/a,EAAK6b,SAAWd,EAAK,GAC1BA,EAET,KAAM5uB,EAAIpC,IAAa,IAARgxB,EAAW,OAAO,EAEjC,IADAA,EAAKiB,EAAct0B,EAAIyE,MACb,EAIR,OAHI4uB,EAAK,IACI,IAAPA,EAAUA,EAAK,EAAO/a,EAAK6b,SAAWd,EAAK,GAE1CA,EAET,OAAO,EA+CKoB,CAAoB5zB,KAAMb,EAAKqC,GAC3C,IAAKxB,KAAKszB,SAAU,OAAOn0B,EAAIsC,SAAS,OAAQD,GAChDxB,KAAKuzB,UAAYxc,EACjB,IAAI9U,EAAM9C,EAAIT,QAAUqY,EAAQ/W,KAAKszB,UAErC,OADAn0B,EAAI+B,KAAKlB,KAAKwzB,SAAU,EAAGvxB,GACpB9C,EAAIsC,SAAS,OAAQD,EAAGS,IA7FjCwqB,EAAc/uB,UAAUs1B,SAAW,SAAU7zB,GAC3C,GAAIa,KAAKszB,UAAYn0B,EAAIT,OAEvB,OADAS,EAAI+B,KAAKlB,KAAKwzB,SAAUxzB,KAAKuzB,UAAYvzB,KAAKszB,SAAU,EAAGtzB,KAAKszB,UACzDtzB,KAAKwzB,SAAS/xB,SAASzB,KAAKd,SAAU,EAAGc,KAAKuzB,WAEvDp0B,EAAI+B,KAAKlB,KAAKwzB,SAAUxzB,KAAKuzB,UAAYvzB,KAAKszB,SAAU,EAAGn0B,EAAIT,QAC/DsB,KAAKszB,UAAYn0B,EAAIT,S,6BCxGvB,IAAIm1B,EAAM,EAAQ,KAIdC,EAAa32B,OAAOsuB,MAAQ,SAAU3qB,GACxC,IAAI2qB,EAAO,GACX,IAAK,IAAIntB,KAAOwC,EACd2qB,EAAK/mB,KAAKpG,GACX,OAAOmtB,GAIVpuB,EAAOC,QAAUy2B,EAGjB,IAAIC,EAAO,EAAQ,KACnBA,EAAK/gB,SAAW,EAAQ,KAGxB,IAAIghB,EAAW,EAAQ,KACnBC,EAAW,EAAQ,KAEvBF,EAAK/gB,SAAS8gB,EAAQE,GAKpB,IADA,IAAIxI,EAAOqI,EAAWI,EAASx2B,WACtB6tB,EAAI,EAAGA,EAAIE,EAAK/sB,OAAQ6sB,IAAK,CACpC,IAAI4I,EAAS1I,EAAKF,GACbwI,EAAOr2B,UAAUy2B,KAASJ,EAAOr2B,UAAUy2B,GAAUD,EAASx2B,UAAUy2B,IAIjF,SAASJ,EAAOlI,GACd,KAAM7rB,gBAAgB+zB,GAAS,OAAO,IAAIA,EAAOlI,GAEjDoI,EAAShxB,KAAKjD,KAAM6rB,GACpBqI,EAASjxB,KAAKjD,KAAM6rB,GAEhBA,IAAgC,IAArBA,EAAQuI,WAAoBp0B,KAAKo0B,UAAW,GAEvDvI,IAAgC,IAArBA,EAAQ/tB,WAAoBkC,KAAKlC,UAAW,GAE3DkC,KAAKq0B,eAAgB,EACjBxI,IAAqC,IAA1BA,EAAQwI,gBAAyBr0B,KAAKq0B,eAAgB,GAErEr0B,KAAK6uB,KAAK,MAAOyF,GAcnB,SAASA,IAGHt0B,KAAKq0B,eAAiBr0B,KAAKu0B,eAAeC,OAI9CX,EAAIY,SAASC,EAAS10B,MAGxB,SAAS00B,EAAQjd,GACfA,EAAKxV,MAtBP9E,OAAO2J,eAAeitB,EAAOr2B,UAAW,wBAAyB,CAI/DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,eAAeI,iBAmB/Bx3B,OAAO2J,eAAeitB,EAAOr2B,UAAW,YAAa,CACnDsV,IAAK,WACH,YAA4B5T,IAAxBY,KAAK40B,qBAAwDx1B,IAAxBY,KAAKu0B,iBAGvCv0B,KAAK40B,eAAeC,WAAa70B,KAAKu0B,eAAeM,YAE9D1oB,IAAK,SAAUvO,QAGewB,IAAxBY,KAAK40B,qBAAwDx1B,IAAxBY,KAAKu0B,iBAM9Cv0B,KAAK40B,eAAeC,UAAYj3B,EAChCoC,KAAKu0B,eAAeM,UAAYj3B,MAIpCm2B,EAAOr2B,UAAUo3B,SAAW,SAAU/iB,EAAKgjB,GACzC/0B,KAAK0E,KAAK,MACV1E,KAAKiC,MAEL4xB,EAAIY,SAASM,EAAIhjB,K,4+BC/HnB,SAAS5B,EAAMrP,GACb,OAGF,SAAuBA,GACrB,GAAmB,WAAf,EAAOA,IAA4B,OAARA,GAAuD,mBAAvC3D,OAAOO,UAAU+D,SAASwB,KAAKnC,GAE5E,OAAO,EAGT,GAAmC,OAA/B3D,OAAO8P,eAAenM,GACxB,OAAO,EAGT,IAAIk0B,EAAQl0B,EAEZ,KAAwC,OAAjC3D,OAAO8P,eAAe+nB,IAC3BA,EAAQ73B,OAAO8P,eAAe+nB,GAGhC,OAAO73B,OAAO8P,eAAenM,KAASk0B,EAnB/BhoB,CAAclM,GAAO3D,OAAO83B,OAAO,GAAIn0B,GAAO3D,OAAO+3B,eAAe/3B,OAAO83B,OAAO,GAAIn0B,GAAM3D,OAAO8P,eAAenM,IAuC3H,SAASq0B,EAAaC,EAAMC,GAC1B,IAAMjL,EAASja,EAAMilB,GAerB,OAdAj4B,OAAOsuB,KAAK4J,GAAMloB,SAAQ,SAAA7O,GACnB8rB,EAAO9c,eAAehP,GAKvBkK,MAAMhJ,QAAQ61B,EAAK/2B,IACrB8rB,EAAO9rB,GAAOkK,MAAMhJ,QAAQ4qB,EAAO9rB,IAArB,YAAiC8rB,EAAO9rB,IAAxC,EAAiD+2B,EAAK/2B,KAAtD,EAAkE+2B,EAAK/2B,IACvD,WAArB,EAAO+2B,EAAK/2B,KAAuB+2B,EAAK/2B,GACjD8rB,EAAO9rB,GAA8B,WAAvB,EAAO8rB,EAAO9rB,KAAuB8rB,EAAO9rB,GAAO62B,EAAa/K,EAAO9rB,GAAM+2B,EAAK/2B,IAAQ6R,EAAMklB,EAAK/2B,IAEnH8rB,EAAO9rB,GAAO+2B,EAAK/2B,GATnB8rB,EAAO9rB,GAAO+2B,EAAK/2B,MAYhB8rB,EAGT/sB,EAAOC,QAAU,CACfmR,MArCF,WAAwB,2BAAN4f,EAAM,yBAANA,EAAM,gBAItB,IAHA,IAAIjE,EAAS,KACTkL,EAAQ,GAAH,OAAOjH,GAETiH,EAAM52B,OAAS,GAAG,CACvB,IAAM62B,EAAWD,EAAMhR,QAKrB8F,EAHGA,EAGM+K,EAAa/K,EAAQmL,GAFrBplB,EAAMolB,GAMnB,OAAOnL,K,8BCvCT,cAcA,IAAIlsB,EAAS,EAAQ,KAAeA,OAChCs3B,EAASnvB,EAAOmvB,QAAUnvB,EAAOovB,SAEjCD,GAAUA,EAAOE,gBACnBr4B,EAAOC,QAKT,SAAsB0B,EAAM+1B,GAE1B,GAAI/1B,EAjBW,WAiBQ,MAAM,IAAIa,WAAW,mCAE5C,IAAIgJ,EAAQ3K,EAAOW,YAAYG,GAE/B,GAAIA,EAAO,EACT,GAAIA,EA1BQ,MA4BV,IAAK,IAAI22B,EAAY,EAAGA,EAAY32B,EAAM22B,GA5BhC,MA+BRH,EAAOE,gBAAgB7sB,EAAMjI,MAAM+0B,EAAWA,EA/BtC,aAkCVH,EAAOE,gBAAgB7sB,GAI3B,GAAkB,mBAAPksB,EACT,OAAOa,EAAQnB,UAAS,WACtBM,EAAG,KAAMlsB,MAIb,OAAOA,GA5BPxL,EAAOC,QAVT,WACE,MAAM,IAAI2C,MAAM,qH,qDCPlB,IAAI41B,EAAQ,GAEZ,SAASC,EAAgB1pB,EAAMqlB,EAASsE,GACjCA,IACHA,EAAO91B,OAWT,IAAI+1B,EAEJ,SAAUC,GAnBZ,IAAwBC,EAAUC,EAsB9B,SAASH,EAAUI,EAAMC,EAAMC,GAC7B,OAAOL,EAAMhzB,KAAKjD,KAdtB,SAAoBo2B,EAAMC,EAAMC,GAC9B,MAAuB,iBAAZ7E,EACFA,EAEAA,EAAQ2E,EAAMC,EAAMC,GAUHC,CAAWH,EAAMC,EAAMC,KAAUt2B,KAG3D,OA1B8Bm2B,EAoBJF,GApBNC,EAoBLF,GApBsCt4B,UAAYP,OAAOC,OAAO+4B,EAAWz4B,WAAYw4B,EAASx4B,UAAUC,YAAcu4B,EAAUA,EAASn2B,UAAYo2B,EA0B/JH,EAPT,CAQED,GAEFC,EAAUt4B,UAAU6T,KAAOwkB,EAAKxkB,KAChCykB,EAAUt4B,UAAU0O,KAAOA,EAC3BypB,EAAMzpB,GAAQ4pB,EAIhB,SAASQ,EAAMC,EAAUC,GACvB,GAAIluB,MAAMhJ,QAAQi3B,GAAW,CAC3B,IAAIz1B,EAAMy1B,EAAS/3B,OAKnB,OAJA+3B,EAAWA,EAASE,KAAI,SAAUn1B,GAChC,OAAO+B,OAAO/B,MAGZR,EAAM,EACD,UAAUoG,OAAOsvB,EAAO,KAAKtvB,OAAOqvB,EAAS71B,MAAM,EAAGI,EAAM,GAAG+G,KAAK,MAAO,SAAW0uB,EAASz1B,EAAM,GAC3F,IAARA,EACF,UAAUoG,OAAOsvB,EAAO,KAAKtvB,OAAOqvB,EAAS,GAAI,QAAQrvB,OAAOqvB,EAAS,IAEzE,MAAMrvB,OAAOsvB,EAAO,KAAKtvB,OAAOqvB,EAAS,IAGlD,MAAO,MAAMrvB,OAAOsvB,EAAO,KAAKtvB,OAAO7D,OAAOkzB,IA+BlDX,EAAgB,yBAAyB,SAAUvkB,EAAM3T,GACvD,MAAO,cAAgBA,EAAQ,4BAA8B2T,EAAO,MACnExS,WACH+2B,EAAgB,wBAAwB,SAAUvkB,EAAMklB,EAAU/1B,GAEhE,IAAIk2B,EA/BmBC,EAAQvvB,EAwC3B2H,EAEJ,GATwB,iBAAbwnB,IAjCYI,EAiCkC,OAAVJ,EAhCpCryB,QAAQkD,GAAOA,EAAM,EAAI,GAAKA,EAAKuvB,EAAOn4B,UAAYm4B,IAiC/DD,EAAa,cACbH,EAAWA,EAAS/pB,QAAQ,QAAS,KAErCkqB,EAAa,UAhCjB,SAAkBpyB,EAAKqyB,EAAQC,GAK7B,YAJiB13B,IAAb03B,GAA0BA,EAAWtyB,EAAI9F,UAC3Co4B,EAAWtyB,EAAI9F,QAGV8F,EAAIuyB,UAAUD,EAAWD,EAAOn4B,OAAQo4B,KAAcD,EAgCzDG,CAASzlB,EAAM,aAEjBtC,EAAM,OAAO7H,OAAOmK,EAAM,KAAKnK,OAAOwvB,EAAY,KAAKxvB,OAAOovB,EAAMC,EAAU,aACzE,CACL,IAAIr1B,EAhCR,SAAkBoD,EAAKqyB,EAAQ70B,GAK7B,MAJqB,iBAAVA,IACTA,EAAQ,KAGNA,EAAQ60B,EAAOn4B,OAAS8F,EAAI9F,UAGS,IAAhC8F,EAAIxB,QAAQ6zB,EAAQ70B,GAwBhBqG,CAASkJ,EAAM,KAAO,WAAa,WAC9CtC,EAAM,QAAS7H,OAAOmK,EAAM,MAAOnK,OAAOhG,EAAM,KAAKgG,OAAOwvB,EAAY,KAAKxvB,OAAOovB,EAAMC,EAAU,SAItG,OADAxnB,GAAO,mBAAmB7H,cAAc1G,KAEvC3B,WACH+2B,EAAgB,4BAA6B,2BAC7CA,EAAgB,8BAA8B,SAAUvkB,GACtD,MAAO,OAASA,EAAO,gCAEzBukB,EAAgB,6BAA8B,mBAC9CA,EAAgB,wBAAwB,SAAUvkB,GAChD,MAAO,eAAiBA,EAAO,mCAEjCukB,EAAgB,wBAAyB,kCACzCA,EAAgB,yBAA0B,6BAC1CA,EAAgB,6BAA8B,mBAC9CA,EAAgB,yBAA0B,sCAAuC/2B,WACjF+2B,EAAgB,wBAAwB,SAAUt3B,GAChD,MAAO,qBAAuBA,IAC7BO,WACH+2B,EAAgB,qCAAsC,oCACtDz4B,EAAOC,QAAQu4B,MAAQA,G,8BC9HvB,YA2BA,IAAI/B,EAAa32B,OAAOsuB,MAAQ,SAAU3qB,GACxC,IAAI2qB,EAAO,GAEX,IAAK,IAAIntB,KAAOwC,EACd2qB,EAAK/mB,KAAKpG,GAGZ,OAAOmtB,GAKTpuB,EAAOC,QAAUy2B,EAEjB,IAAIE,EAAW,EAAQ,KAEnBC,EAAW,EAAQ,KAEvB,EAAQ,IAAR,CAAoBH,EAAQE,GAM1B,IAFA,IAAIxI,EAAOqI,EAAWI,EAASx2B,WAEtB6tB,EAAI,EAAGA,EAAIE,EAAK/sB,OAAQ6sB,IAAK,CACpC,IAAI4I,EAAS1I,EAAKF,GACbwI,EAAOr2B,UAAUy2B,KAASJ,EAAOr2B,UAAUy2B,GAAUD,EAASx2B,UAAUy2B,IAIjF,SAASJ,EAAOlI,GACd,KAAM7rB,gBAAgB+zB,GAAS,OAAO,IAAIA,EAAOlI,GACjDoI,EAAShxB,KAAKjD,KAAM6rB,GACpBqI,EAASjxB,KAAKjD,KAAM6rB,GACpB7rB,KAAKq0B,eAAgB,EAEjBxI,KACuB,IAArBA,EAAQuI,WAAoBp0B,KAAKo0B,UAAW,IACvB,IAArBvI,EAAQ/tB,WAAoBkC,KAAKlC,UAAW,IAElB,IAA1B+tB,EAAQwI,gBACVr0B,KAAKq0B,eAAgB,EACrBr0B,KAAK6uB,KAAK,MAAOyF,KAiCvB,SAASA,IAEHt0B,KAAKu0B,eAAeC,OAGxBoB,EAAQnB,SAASC,EAAS10B,MAG5B,SAAS00B,EAAQjd,GACfA,EAAKxV,MArCP9E,OAAO2J,eAAeitB,EAAOr2B,UAAW,wBAAyB,CAI/DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,eAAeI,iBAG/Bx3B,OAAO2J,eAAeitB,EAAOr2B,UAAW,iBAAkB,CAIxDG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,gBAAkBv0B,KAAKu0B,eAAe0C,eAGtD95B,OAAO2J,eAAeitB,EAAOr2B,UAAW,iBAAkB,CAIxDG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,eAAe71B,UAgB/BvB,OAAO2J,eAAeitB,EAAOr2B,UAAW,YAAa,CAInDG,YAAY,EACZmV,IAAK,WACH,YAA4B5T,IAAxBY,KAAK40B,qBAAwDx1B,IAAxBY,KAAKu0B,iBAIvCv0B,KAAK40B,eAAeC,WAAa70B,KAAKu0B,eAAeM,YAE9D1oB,IAAK,SAAavO,QAGYwB,IAAxBY,KAAK40B,qBAAwDx1B,IAAxBY,KAAKu0B,iBAM9Cv0B,KAAK40B,eAAeC,UAAYj3B,EAChCoC,KAAKu0B,eAAeM,UAAYj3B,Q,kCCxIpC,IAAIM,EAAS,EAAQ,KAAeA,OAGpC,SAASg5B,EAAMC,EAAWC,GACxBp3B,KAAKq3B,OAASn5B,EAAOU,MAAMu4B,GAC3Bn3B,KAAKs3B,WAAaF,EAClBp3B,KAAKu3B,WAAaJ,EAClBn3B,KAAKw3B,KAAO,EAGdN,EAAKx5B,UAAUwvB,OAAS,SAAU7rB,EAAMiS,GAClB,iBAATjS,IACTiS,EAAMA,GAAO,OACbjS,EAAOnD,EAAOS,KAAK0C,EAAMiS,IAQ3B,IALA,IAAImkB,EAAQz3B,KAAKq3B,OACbF,EAAYn3B,KAAKu3B,WACjB74B,EAAS2C,EAAK3C,OACdg5B,EAAQ13B,KAAKw3B,KAER1zB,EAAS,EAAGA,EAASpF,GAAS,CAIrC,IAHA,IAAIi5B,EAAWD,EAAQP,EACnBS,EAAYtyB,KAAKC,IAAI7G,EAASoF,EAAQqzB,EAAYQ,GAE7Cn2B,EAAI,EAAGA,EAAIo2B,EAAWp2B,IAC7Bi2B,EAAME,EAAWn2B,GAAKH,EAAKyC,EAAStC,GAItCsC,GAAU8zB,GADVF,GAASE,GAGIT,GAAe,GAC1Bn3B,KAAKstB,QAAQmK,GAKjB,OADAz3B,KAAKw3B,MAAQ94B,EACNsB,MAGTk3B,EAAKx5B,UAAUm6B,OAAS,SAAUvkB,GAChC,IAAIwkB,EAAM93B,KAAKw3B,KAAOx3B,KAAKu3B,WAE3Bv3B,KAAKq3B,OAAOS,GAAO,IAInB93B,KAAKq3B,OAAOp4B,KAAK,EAAG64B,EAAM,GAEtBA,GAAO93B,KAAKs3B,aACdt3B,KAAKstB,QAAQttB,KAAKq3B,QAClBr3B,KAAKq3B,OAAOp4B,KAAK,IAGnB,IAAI6Q,EAAmB,EAAZ9P,KAAKw3B,KAGhB,GAAI1nB,GAAQ,WACV9P,KAAKq3B,OAAOjsB,cAAc0E,EAAM9P,KAAKu3B,WAAa,OAG7C,CACL,IAAIQ,GAAkB,WAAPjoB,KAAuB,EAClCkoB,GAAYloB,EAAOioB,GAAW,WAElC/3B,KAAKq3B,OAAOjsB,cAAc4sB,EAAUh4B,KAAKu3B,WAAa,GACtDv3B,KAAKq3B,OAAOjsB,cAAc2sB,EAAS/3B,KAAKu3B,WAAa,GAGvDv3B,KAAKstB,QAAQttB,KAAKq3B,QAClB,IAAIY,EAAOj4B,KAAKk4B,QAEhB,OAAO5kB,EAAM2kB,EAAKx2B,SAAS6R,GAAO2kB,GAGpCf,EAAKx5B,UAAU4vB,QAAU,WACvB,MAAM,IAAIrtB,MAAM,4CAGlB5C,EAAOC,QAAU45B,G,6BC5EjB,IAAIrB,EAAQ,GAEZ,SAASC,EAAgB1pB,EAAMqlB,EAASsE,GACjCA,IACHA,EAAO91B,OAWT,IAAI+1B,EAEJ,SAAUC,GAnBZ,IAAwBC,EAAUC,EAsB9B,SAASH,EAAUI,EAAMC,EAAMC,GAC7B,OAAOL,EAAMhzB,KAAKjD,KAdtB,SAAoBo2B,EAAMC,EAAMC,GAC9B,MAAuB,iBAAZ7E,EACFA,EAEAA,EAAQ2E,EAAMC,EAAMC,GAUHC,CAAWH,EAAMC,EAAMC,KAAUt2B,KAG3D,OA1B8Bm2B,EAoBJF,GApBNC,EAoBLF,GApBsCt4B,UAAYP,OAAOC,OAAO+4B,EAAWz4B,WAAYw4B,EAASx4B,UAAUC,YAAcu4B,EAAUA,EAASn2B,UAAYo2B,EA0B/JH,EAPT,CAQED,GAEFC,EAAUt4B,UAAU6T,KAAOwkB,EAAKxkB,KAChCykB,EAAUt4B,UAAU0O,KAAOA,EAC3BypB,EAAMzpB,GAAQ4pB,EAIhB,SAASQ,EAAMC,EAAUC,GACvB,GAAIluB,MAAMhJ,QAAQi3B,GAAW,CAC3B,IAAIz1B,EAAMy1B,EAAS/3B,OAKnB,OAJA+3B,EAAWA,EAASE,KAAI,SAAUn1B,GAChC,OAAO+B,OAAO/B,MAGZR,EAAM,EACD,UAAUoG,OAAOsvB,EAAO,KAAKtvB,OAAOqvB,EAAS71B,MAAM,EAAGI,EAAM,GAAG+G,KAAK,MAAO,SAAW0uB,EAASz1B,EAAM,GAC3F,IAARA,EACF,UAAUoG,OAAOsvB,EAAO,KAAKtvB,OAAOqvB,EAAS,GAAI,QAAQrvB,OAAOqvB,EAAS,IAEzE,MAAMrvB,OAAOsvB,EAAO,KAAKtvB,OAAOqvB,EAAS,IAGlD,MAAO,MAAMrvB,OAAOsvB,EAAO,KAAKtvB,OAAO7D,OAAOkzB,IA+BlDX,EAAgB,yBAAyB,SAAUvkB,EAAM3T,GACvD,MAAO,cAAgBA,EAAQ,4BAA8B2T,EAAO,MACnExS,WACH+2B,EAAgB,wBAAwB,SAAUvkB,EAAMklB,EAAU/1B,GAEhE,IAAIk2B,EA/BmBC,EAAQvvB,EAwC3B2H,EAEJ,GATwB,iBAAbwnB,IAjCYI,EAiCkC,OAAVJ,EAhCpCryB,QAAQkD,GAAOA,EAAM,EAAI,GAAKA,EAAKuvB,EAAOn4B,UAAYm4B,IAiC/DD,EAAa,cACbH,EAAWA,EAAS/pB,QAAQ,QAAS,KAErCkqB,EAAa,UAhCjB,SAAkBpyB,EAAKqyB,EAAQC,GAK7B,YAJiB13B,IAAb03B,GAA0BA,EAAWtyB,EAAI9F,UAC3Co4B,EAAWtyB,EAAI9F,QAGV8F,EAAIuyB,UAAUD,EAAWD,EAAOn4B,OAAQo4B,KAAcD,EAgCzDG,CAASzlB,EAAM,aAEjBtC,EAAM,OAAO7H,OAAOmK,EAAM,KAAKnK,OAAOwvB,EAAY,KAAKxvB,OAAOovB,EAAMC,EAAU,aACzE,CACL,IAAIr1B,EAhCR,SAAkBoD,EAAKqyB,EAAQ70B,GAK7B,MAJqB,iBAAVA,IACTA,EAAQ,KAGNA,EAAQ60B,EAAOn4B,OAAS8F,EAAI9F,UAGS,IAAhC8F,EAAIxB,QAAQ6zB,EAAQ70B,GAwBhBqG,CAASkJ,EAAM,KAAO,WAAa,WAC9CtC,EAAM,QAAS7H,OAAOmK,EAAM,MAAOnK,OAAOhG,EAAM,KAAKgG,OAAOwvB,EAAY,KAAKxvB,OAAOovB,EAAMC,EAAU,SAItG,OADAxnB,GAAO,mBAAmB7H,cAAc1G,KAEvC3B,WACH+2B,EAAgB,4BAA6B,2BAC7CA,EAAgB,8BAA8B,SAAUvkB,GACtD,MAAO,OAASA,EAAO,gCAEzBukB,EAAgB,6BAA8B,mBAC9CA,EAAgB,wBAAwB,SAAUvkB,GAChD,MAAO,eAAiBA,EAAO,mCAEjCukB,EAAgB,wBAAyB,kCACzCA,EAAgB,yBAA0B,6BAC1CA,EAAgB,6BAA8B,mBAC9CA,EAAgB,yBAA0B,sCAAuC/2B,WACjF+2B,EAAgB,wBAAwB,SAAUt3B,GAChD,MAAO,qBAAuBA,IAC7BO,WACH+2B,EAAgB,qCAAsC,oCACtDz4B,EAAOC,QAAQu4B,MAAQA,G,8BC9HvB,YA2BA,IAAI/B,EAAa32B,OAAOsuB,MAAQ,SAAU3qB,GACxC,IAAI2qB,EAAO,GAEX,IAAK,IAAIntB,KAAOwC,EACd2qB,EAAK/mB,KAAKpG,GAGZ,OAAOmtB,GAKTpuB,EAAOC,QAAUy2B,EAEjB,IAAIE,EAAW,EAAQ,KAEnBC,EAAW,EAAQ,KAEvB,EAAQ,IAAR,CAAoBH,EAAQE,GAM1B,IAFA,IAAIxI,EAAOqI,EAAWI,EAASx2B,WAEtB6tB,EAAI,EAAGA,EAAIE,EAAK/sB,OAAQ6sB,IAAK,CACpC,IAAI4I,EAAS1I,EAAKF,GACbwI,EAAOr2B,UAAUy2B,KAASJ,EAAOr2B,UAAUy2B,GAAUD,EAASx2B,UAAUy2B,IAIjF,SAASJ,EAAOlI,GACd,KAAM7rB,gBAAgB+zB,GAAS,OAAO,IAAIA,EAAOlI,GACjDoI,EAAShxB,KAAKjD,KAAM6rB,GACpBqI,EAASjxB,KAAKjD,KAAM6rB,GACpB7rB,KAAKq0B,eAAgB,EAEjBxI,KACuB,IAArBA,EAAQuI,WAAoBp0B,KAAKo0B,UAAW,IACvB,IAArBvI,EAAQ/tB,WAAoBkC,KAAKlC,UAAW,IAElB,IAA1B+tB,EAAQwI,gBACVr0B,KAAKq0B,eAAgB,EACrBr0B,KAAK6uB,KAAK,MAAOyF,KAiCvB,SAASA,IAEHt0B,KAAKu0B,eAAeC,OAGxBoB,EAAQnB,SAASC,EAAS10B,MAG5B,SAAS00B,EAAQjd,GACfA,EAAKxV,MArCP9E,OAAO2J,eAAeitB,EAAOr2B,UAAW,wBAAyB,CAI/DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,eAAeI,iBAG/Bx3B,OAAO2J,eAAeitB,EAAOr2B,UAAW,iBAAkB,CAIxDG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,gBAAkBv0B,KAAKu0B,eAAe0C,eAGtD95B,OAAO2J,eAAeitB,EAAOr2B,UAAW,iBAAkB,CAIxDG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,eAAe71B,UAgB/BvB,OAAO2J,eAAeitB,EAAOr2B,UAAW,YAAa,CAInDG,YAAY,EACZmV,IAAK,WACH,YAA4B5T,IAAxBY,KAAK40B,qBAAwDx1B,IAAxBY,KAAKu0B,iBAIvCv0B,KAAK40B,eAAeC,WAAa70B,KAAKu0B,eAAeM,YAE9D1oB,IAAK,SAAavO,QAGYwB,IAAxBY,KAAK40B,qBAAwDx1B,IAAxBY,KAAKu0B,iBAM9Cv0B,KAAK40B,eAAeC,UAAYj3B,EAChCoC,KAAKu0B,eAAeM,UAAYj3B,Q,gDCvIpC,IAAIqV,EAAW,EAAQ,KACnBklB,EAAM,EAAQ,KACdC,EAAY,EAAQ,KACpBC,EAAM,EAAQ,KACdtC,EAAO,EAAQ,KAEnB,SAASmB,EAAMe,GACblC,EAAK9yB,KAAKjD,KAAM,UAEhBA,KAAKk4B,MAAQD,EAGfhlB,EAASikB,EAAMnB,GAEfmB,EAAKx5B,UAAU4vB,QAAU,SAAUjsB,GACjCrB,KAAKk4B,MAAMhL,OAAO7rB,IAGpB61B,EAAKx5B,UAAUovB,OAAS,WACtB,OAAO9sB,KAAKk4B,MAAML,UAGpBx6B,EAAOC,QAAU,SAAqBg7B,GAEpC,MAAY,SADZA,EAAMA,EAAIx2B,eACgB,IAAIq2B,EAClB,WAARG,GAA4B,cAARA,EAA4B,IAAIF,EAEjD,IAAIlB,EAAKmB,EAAIC,M,iBC5BtB,YAwGA,SAASC,EAAexd,GACtB,OAAO5d,OAAOO,UAAU+D,SAASwB,KAAK8X,GA3ExCzd,EAAQkC,QANR,SAAiBhB,GACf,OAAIgK,MAAMhJ,QACDgJ,MAAMhJ,QAAQhB,GAEQ,mBAAxB+5B,EAAe/5B,IAOxBlB,EAAQk7B,UAHR,SAAmBh6B,GACjB,MAAsB,kBAARA,GAOhBlB,EAAQm7B,OAHR,SAAgBj6B,GACd,OAAe,OAARA,GAOTlB,EAAQo7B,kBAHR,SAA2Bl6B,GACzB,OAAc,MAAPA,GAOTlB,EAAQsQ,SAHR,SAAkBpP,GAChB,MAAsB,iBAARA,GAOhBlB,EAAQqQ,SAHR,SAAkBnP,GAChB,MAAsB,iBAARA,GAOhBlB,EAAQq7B,SAHR,SAAkBn6B,GAChB,MAAsB,iBAARA,GAOhBlB,EAAQwP,YAHR,SAAqBtO,GACnB,YAAe,IAARA,GAOTlB,EAAQs7B,SAHR,SAAkBnX,GAChB,MAA8B,oBAAvB8W,EAAe9W,IAOxBnkB,EAAQyP,SAHR,SAAkBvO,GAChB,MAAsB,iBAARA,GAA4B,OAARA,GAOpClB,EAAQuQ,OAHR,SAAgBoG,GACd,MAA6B,kBAAtBskB,EAAetkB,IAOxB3W,EAAQu7B,QAHR,SAAiBryB,GACf,MAA8B,mBAAtB+xB,EAAe/xB,IAA2BA,aAAavG,OAOjE3C,EAAQ4P,WAHR,SAAoB1O,GAClB,MAAsB,mBAARA,GAYhBlB,EAAQw7B,YARR,SAAqBt6B,GACnB,OAAe,OAARA,GACe,kBAARA,GACQ,iBAARA,GACQ,iBAARA,GACQ,iBAARA,QACQ,IAARA,GAIhBlB,EAAQyD,SAAW7C,EAAO6C,W,2CCtG1B,YAAA1D,EAAA,sBAIE,IAHA,IAAIqB,EAAS4G,KAAKC,IAAI0B,EAAEvI,OAAQ+D,EAAE/D,QAC9BT,EAAS,IAAIC,EAAOQ,GAEf8C,EAAI,EAAGA,EAAI9C,IAAU8C,EAC5BvD,EAAOuD,GAAKyF,EAAEzF,GAAKiB,EAAEjB,GAGvB,OAAOvD,K,uDCNT,IAAImR,EAAQ,EAAQ,KAChBJ,EAAS,EAAQ,KAErB,SAAS+pB,IACP/4B,KAAKg5B,QAAU,KACfh5B,KAAKi5B,aAAe,EACpBj5B,KAAKm3B,UAAYn3B,KAAKrC,YAAYw5B,UAClCn3B,KAAKk5B,QAAUl5B,KAAKrC,YAAYu7B,QAChCl5B,KAAKm5B,aAAen5B,KAAKrC,YAAYw7B,aACrCn5B,KAAKo5B,UAAYp5B,KAAKrC,YAAYy7B,UAAY,EAC9Cp5B,KAAKyT,OAAS,MAEdzT,KAAKq5B,QAAUr5B,KAAKm3B,UAAY,EAChCn3B,KAAKs5B,SAAWt5B,KAAKm3B,UAAY,GAEnC75B,EAAQy7B,UAAYA,EAEpBA,EAAUr7B,UAAUwvB,OAAS,SAAgBje,EAAKqE,GAUhD,GARArE,EAAMG,EAAMI,QAAQP,EAAKqE,GACpBtT,KAAKg5B,QAGRh5B,KAAKg5B,QAAUh5B,KAAKg5B,QAAQ5xB,OAAO6H,GAFnCjP,KAAKg5B,QAAU/pB,EAGjBjP,KAAKi5B,cAAgBhqB,EAAIvQ,OAGrBsB,KAAKg5B,QAAQt6B,QAAUsB,KAAKq5B,QAAS,CAIvC,IAAIlqB,GAHJF,EAAMjP,KAAKg5B,SAGCt6B,OAASsB,KAAKq5B,QAC1Br5B,KAAKg5B,QAAU/pB,EAAIrO,MAAMqO,EAAIvQ,OAASyQ,EAAGF,EAAIvQ,QACjB,IAAxBsB,KAAKg5B,QAAQt6B,SACfsB,KAAKg5B,QAAU,MAEjB/pB,EAAMG,EAAMsE,OAAOzE,EAAK,EAAGA,EAAIvQ,OAASyQ,EAAGnP,KAAKyT,QAChD,IAAK,IAAIjS,EAAI,EAAGA,EAAIyN,EAAIvQ,OAAQ8C,GAAKxB,KAAKs5B,SACxCt5B,KAAKstB,QAAQre,EAAKzN,EAAGA,EAAIxB,KAAKs5B,UAGlC,OAAOt5B,MAGT+4B,EAAUr7B,UAAUm6B,OAAS,SAAgBvkB,GAI3C,OAHAtT,KAAKktB,OAAOltB,KAAKu5B,QACjBvqB,EAAwB,OAAjBhP,KAAKg5B,SAELh5B,KAAKw5B,QAAQlmB,IAGtBylB,EAAUr7B,UAAU67B,KAAO,WACzB,IAAIv4B,EAAMhB,KAAKi5B,aACXpwB,EAAQ7I,KAAKq5B,QACbnpB,EAAIrH,GAAU7H,EAAMhB,KAAKo5B,WAAavwB,EACtCrD,EAAM,IAAIgD,MAAM0H,EAAIlQ,KAAKo5B,WAC7B5zB,EAAI,GAAK,IACT,IAAK,IAAIhE,EAAI,EAAGA,EAAI0O,EAAG1O,IACrBgE,EAAIhE,GAAK,EAIX,GADAR,IAAQ,EACY,QAAhBhB,KAAKyT,OAAkB,CACzB,IAAK,IAAIkF,EAAI,EAAGA,EAAI3Y,KAAKo5B,UAAWzgB,IAClCnT,EAAIhE,KAAO,EAEbgE,EAAIhE,KAAO,EACXgE,EAAIhE,KAAO,EACXgE,EAAIhE,KAAO,EACXgE,EAAIhE,KAAO,EACXgE,EAAIhE,KAAQR,IAAQ,GAAM,IAC1BwE,EAAIhE,KAAQR,IAAQ,GAAM,IAC1BwE,EAAIhE,KAAQR,IAAQ,EAAK,IACzBwE,EAAIhE,KAAa,IAANR,OAWX,IATAwE,EAAIhE,KAAa,IAANR,EACXwE,EAAIhE,KAAQR,IAAQ,EAAK,IACzBwE,EAAIhE,KAAQR,IAAQ,GAAM,IAC1BwE,EAAIhE,KAAQR,IAAQ,GAAM,IAC1BwE,EAAIhE,KAAO,EACXgE,EAAIhE,KAAO,EACXgE,EAAIhE,KAAO,EACXgE,EAAIhE,KAAO,EAENmX,EAAI,EAAGA,EAAI3Y,KAAKo5B,UAAWzgB,IAC9BnT,EAAIhE,KAAO,EAGf,OAAOgE,I,6BCxFT,MAAMyN,EAAW,EAAQ,KACnBwmB,EAAW,EAAQ,KAAoBA,SACvCv7B,EAAS,EAAQ,KAAgBA,OAEvC,SAASw7B,EAAchkB,EAAMmW,GAC3B4N,EAASx2B,KAAKjD,KAAM6rB,GACf3tB,EAAO6C,SAAS2U,IAKrB1V,KAAK0V,KAAOA,EACZ1V,KAAK8D,OAAS,EACd9D,KAAKtB,OAASgX,EAAKhX,QANjBsB,KAAKuxB,MAAM,oBA8Ef,SAASoI,EAAc/7B,EAAOg8B,GAC5B,GAAIpxB,MAAMhJ,QAAQ5B,GAChBoC,KAAKtB,OAAS,EACdsB,KAAKpC,MAAQA,EAAM+4B,KAAI,SAASkD,GAI9B,OAHKF,EAAcG,gBAAgBD,KACjCA,EAAO,IAAIF,EAAcE,EAAMD,IACjC55B,KAAKtB,QAAUm7B,EAAKn7B,OACbm7B,IACN75B,WACE,GAAqB,iBAAVpC,EAAoB,CACpC,KAAM,GAAKA,GAASA,GAAS,KAC3B,OAAOg8B,EAASrI,MAAM,gCACxBvxB,KAAKpC,MAAQA,EACboC,KAAKtB,OAAS,OACT,GAAqB,iBAAVd,EAChBoC,KAAKpC,MAAQA,EACboC,KAAKtB,OAASR,EAAOmC,WAAWzC,OAC3B,KAAIM,EAAO6C,SAASnD,GAIzB,OAAOg8B,EAASrI,MAAM,4BAA8B3zB,GAHpDoC,KAAKpC,MAAQA,EACboC,KAAKtB,OAASd,EAAMc,QAzFxBuU,EAASymB,EAAeD,GACxBn8B,EAAQo8B,cAAgBA,EAExBA,EAAcK,gBAAkB,SAAyB14B,GACvD,GAAIA,aAAgBq4B,EAClB,OAAO,EAgBT,MAZqC,iBAATr4B,GAC1BnD,EAAO6C,SAASM,EAAKqU,OACK,kBAA1BrU,EAAK1D,YAAY4T,MACM,iBAAhBlQ,EAAKyC,QACW,iBAAhBzC,EAAK3C,QACS,mBAAd2C,EAAK24B,MACY,mBAAjB34B,EAAK44B,SACY,mBAAjB54B,EAAK64B,SACc,mBAAnB74B,EAAKwI,WACS,mBAAdxI,EAAK84B,MACQ,mBAAb94B,EAAK+4B,KAKhBV,EAAch8B,UAAUs8B,KAAO,WAC7B,MAAO,CAAEl2B,OAAQ9D,KAAK8D,OAAQ81B,SAAUH,EAAS/7B,UAAUs8B,KAAK/2B,KAAKjD,QAGvE05B,EAAch8B,UAAUu8B,QAAU,SAAiBD,GAEjD,MAAMx0B,EAAM,IAAIk0B,EAAc15B,KAAK0V,MAOnC,OANAlQ,EAAI1B,OAASk2B,EAAKl2B,OAClB0B,EAAI9G,OAASsB,KAAK8D,OAElB9D,KAAK8D,OAASk2B,EAAKl2B,OACnB21B,EAAS/7B,UAAUu8B,QAAQh3B,KAAKjD,KAAMg6B,EAAKJ,UAEpCp0B,GAGTk0B,EAAch8B,UAAUw8B,QAAU,WAChC,OAAOl6B,KAAK8D,SAAW9D,KAAKtB,QAG9Bg7B,EAAch8B,UAAUmM,UAAY,SAAmBwwB,GACrD,OAAIr6B,KAAK8D,OAAS,GAAK9D,KAAKtB,OACnBsB,KAAK0V,KAAK7L,UAAU7J,KAAK8D,UAAU,GAEnC9D,KAAKuxB,MAAM8I,GAAQ,0BAG9BX,EAAch8B,UAAUy8B,KAAO,SAActxB,EAAOwxB,GAClD,KAAMr6B,KAAK8D,OAAS+E,GAAS7I,KAAKtB,QAChC,OAAOsB,KAAKuxB,MAAM8I,GAAQ,yBAE5B,MAAM70B,EAAM,IAAIk0B,EAAc15B,KAAK0V,MAQnC,OALAlQ,EAAI80B,eAAiBt6B,KAAKs6B,eAE1B90B,EAAI1B,OAAS9D,KAAK8D,OAClB0B,EAAI9G,OAASsB,KAAK8D,OAAS+E,EAC3B7I,KAAK8D,QAAU+E,EACRrD,GAGTk0B,EAAch8B,UAAU08B,IAAM,SAAaJ,GACzC,OAAOh6B,KAAK0V,KAAK9U,MAAMo5B,EAAOA,EAAKl2B,OAAS9D,KAAK8D,OAAQ9D,KAAKtB,SA2BhEpB,EAAQq8B,cAAgBA,EAExBA,EAAcG,gBAAkB,SAAyBz4B,GACvD,GAAIA,aAAgBs4B,EAClB,OAAO,EAST,MALqC,iBAATt4B,GACA,kBAA1BA,EAAK1D,YAAY4T,MACM,iBAAhBlQ,EAAK3C,QACS,mBAAd2C,EAAK0G,MAKhB4xB,EAAcj8B,UAAUqK,KAAO,SAAcY,EAAK7E,GAMhD,OALK6E,IACHA,EAAMzK,EAAOU,MAAMoB,KAAKtB,SACrBoF,IACHA,EAAS,GAES,IAAhB9D,KAAKtB,SAGL8J,MAAMhJ,QAAQQ,KAAKpC,OACrBoC,KAAKpC,MAAMuP,SAAQ,SAAS0sB,GAC1BA,EAAK9xB,KAAKY,EAAK7E,GACfA,GAAU+1B,EAAKn7B,WAGS,iBAAfsB,KAAKpC,MACd+K,EAAI7E,GAAU9D,KAAKpC,MACU,iBAAfoC,KAAKpC,MACnB+K,EAAIhI,MAAMX,KAAKpC,MAAOkG,GACf5F,EAAO6C,SAASf,KAAKpC,QAC5BoC,KAAKpC,MAAMsD,KAAKyH,EAAK7E,GACvBA,GAAU9D,KAAKtB,SAdRiK,I,qCCjIPiJ,EAAQ,KAFV2oB,E,EAAAA,OACA7qB,E,EAAAA,OAyBFrS,EAAOC,QAAU,CACfk9B,mBAvBF,SAA4Bh2B,GAC1B,GAAmB,oBAARi2B,IAIT,OAFW7oB,EAAQ,KAET2oB,OAAO/1B,GAGjB,IAAMk2B,EAAMlsB,SAASmsB,cAAc,YAEnC,OADAD,EAAIE,UAAYp2B,EACTk2B,EAAI98B,OAcbi9B,WAVF,SAAoBr2B,GAClB,OAAO+1B,EAAO/1B,IAUds2B,SAPF,SAAkBt2B,GAChB,OAAOkL,EAAOlL,M,gBCLhBnH,EAAOC,QAAUy9B,EAEjB,IAAIC,EAAK,EAAQ,KAAUrM,aAkB3B,SAASoM,IACPC,EAAG/3B,KAAKjD,MAlBK,EAAQ,IAEvBiT,CAAS8nB,EAAQC,GACjBD,EAAO9G,SAAW,EAAQ,KAC1B8G,EAAO7G,SAAW,EAAQ,KAC1B6G,EAAOhH,OAAS,EAAQ,KACxBgH,EAAOvO,UAAY,EAAQ,KAC3BuO,EAAOE,YAAc,EAAQ,KAG7BF,EAAOA,OAASA,EAWhBA,EAAOr9B,UAAUuQ,KAAO,SAASiJ,EAAM2U,GACrC,IAAIqP,EAASl7B,KAEb,SAASm7B,EAAOC,GACVlkB,EAAKpZ,WACH,IAAUoZ,EAAKvW,MAAMy6B,IAAUF,EAAOG,OACxCH,EAAOG,QAOb,SAASC,IACHJ,EAAO9G,UAAY8G,EAAOK,QAC5BL,EAAOK,SAJXL,EAAOpJ,GAAG,OAAQqJ,GAQlBjkB,EAAK4a,GAAG,QAASwJ,GAIZpkB,EAAKskB,UAAc3P,IAA2B,IAAhBA,EAAQ5pB,MACzCi5B,EAAOpJ,GAAG,MAAOwC,GACjB4G,EAAOpJ,GAAG,QAAS2J,IAGrB,IAAIC,GAAW,EACf,SAASpH,IACHoH,IACJA,GAAW,EAEXxkB,EAAKjV,OAIP,SAASw5B,IACHC,IACJA,GAAW,EAEiB,mBAAjBxkB,EAAKykB,SAAwBzkB,EAAKykB,WAI/C,SAASC,EAAQpK,GAEf,GADAqK,IACwC,IAApCb,EAAG7J,cAAcnxB,KAAM,SACzB,MAAMwxB,EAQV,SAASqK,IACPX,EAAO9L,eAAe,OAAQ+L,GAC9BjkB,EAAKkY,eAAe,QAASkM,GAE7BJ,EAAO9L,eAAe,MAAOkF,GAC7B4G,EAAO9L,eAAe,QAASqM,GAE/BP,EAAO9L,eAAe,QAASwM,GAC/B1kB,EAAKkY,eAAe,QAASwM,GAE7BV,EAAO9L,eAAe,MAAOyM,GAC7BX,EAAO9L,eAAe,QAASyM,GAE/B3kB,EAAKkY,eAAe,QAASyM,GAW/B,OA5BAX,EAAOpJ,GAAG,QAAS8J,GACnB1kB,EAAK4a,GAAG,QAAS8J,GAmBjBV,EAAOpJ,GAAG,MAAO+J,GACjBX,EAAOpJ,GAAG,QAAS+J,GAEnB3kB,EAAK4a,GAAG,QAAS+J,GAEjB3kB,EAAKgZ,KAAK,OAAQgL,GAGXhkB,I,8BC7HT,iBAEuB,IAAZ0e,IACNA,EAAQkG,SAC0B,IAAnClG,EAAQkG,QAAQ94B,QAAQ,QACW,IAAnC4yB,EAAQkG,QAAQ94B,QAAQ,QAAqD,IAArC4yB,EAAQkG,QAAQ94B,QAAQ,SAClE3F,EAAOC,QAAU,CAAEm3B,SAKrB,SAAkBrnB,EAAIgpB,EAAMC,EAAMC,GAChC,GAAkB,mBAAPlpB,EACT,MAAM,IAAIrO,UAAU,0CAEtB,IACIsvB,EAAM7sB,EADNR,EAAM0G,UAAUhJ,OAEpB,OAAQsC,GACR,KAAK,EACL,KAAK,EACH,OAAO40B,EAAQnB,SAASrnB,GAC1B,KAAK,EACH,OAAOwoB,EAAQnB,UAAS,WACtBrnB,EAAGnK,KAAK,KAAMmzB,MAElB,KAAK,EACH,OAAOR,EAAQnB,UAAS,WACtBrnB,EAAGnK,KAAK,KAAMmzB,EAAMC,MAExB,KAAK,EACH,OAAOT,EAAQnB,UAAS,WACtBrnB,EAAGnK,KAAK,KAAMmzB,EAAMC,EAAMC,MAE9B,QAGE,IAFAjI,EAAO,IAAI7lB,MAAMxH,EAAM,GACvBQ,EAAI,EACGA,EAAI6sB,EAAK3vB,QACd2vB,EAAK7sB,KAAOkG,UAAUlG,GAExB,OAAOo0B,EAAQnB,UAAS,WACtBrnB,EAAGlH,MAAM,KAAMmoB,SAhCnBhxB,EAAOC,QAAUs4B,I,kCCHnB,IAAI13B,EAAS,EAAQ,KAAeA,OAEpC,SAAS69B,EAAe58B,GACjBjB,EAAO6C,SAAS5B,KAAMA,EAAMjB,EAAOS,KAAKQ,IAK7C,IAHA,IAAI6B,EAAO7B,EAAIT,OAAS,EAAK,EACzBiK,EAAM,IAAIH,MAAMxH,GAEXQ,EAAI,EAAGA,EAAIR,EAAKQ,IACvBmH,EAAInH,GAAKrC,EAAI6K,aAAiB,EAAJxI,GAG5B,OAAOmH,EAGT,SAASqzB,EAAUzQ,GACjB,KAAa,EAAOA,EAAE7sB,OAAQ6sB,IAC5BA,EADW,GACJ,EAIX,SAAS0Q,EAAYC,EAAGC,EAAaC,EAASC,EAAMC,GAalD,IAZA,IASIC,EAAIC,EAAIC,EAAIC,EATZC,EAAWP,EAAQ,GACnBQ,EAAWR,EAAQ,GACnBS,EAAWT,EAAQ,GACnBU,EAAWV,EAAQ,GAEnBW,EAAKb,EAAE,GAAKC,EAAY,GACxBa,EAAKd,EAAE,GAAKC,EAAY,GACxBc,EAAKf,EAAE,GAAKC,EAAY,GACxBe,EAAKhB,EAAE,GAAKC,EAAY,GAExBgB,EAAQ,EAEHjb,EAAQ,EAAGA,EAAQoa,EAASpa,IACnCqa,EAAKI,EAASI,IAAO,IAAMH,EAAUI,IAAO,GAAM,KAAQH,EAAUI,IAAO,EAAK,KAAQH,EAAc,IAALI,GAAaf,EAAYgB,KAC1HX,EAAKG,EAASK,IAAO,IAAMJ,EAAUK,IAAO,GAAM,KAAQJ,EAAUK,IAAO,EAAK,KAAQJ,EAAc,IAALC,GAAaZ,EAAYgB,KAC1HV,EAAKE,EAASM,IAAO,IAAML,EAAUM,IAAO,GAAM,KAAQL,EAAUE,IAAO,EAAK,KAAQD,EAAc,IAALE,GAAab,EAAYgB,KAC1HT,EAAKC,EAASO,IAAO,IAAMN,EAAUG,IAAO,GAAM,KAAQF,EAAUG,IAAO,EAAK,KAAQF,EAAc,IAALG,GAAad,EAAYgB,KAC1HJ,EAAKR,EACLS,EAAKR,EACLS,EAAKR,EACLS,EAAKR,EAYP,OATAH,GAAOF,EAAKU,IAAO,KAAO,GAAOV,EAAMW,IAAO,GAAM,MAAS,GAAOX,EAAMY,IAAO,EAAK,MAAS,EAAKZ,EAAU,IAALa,IAAcf,EAAYgB,KACnIX,GAAOH,EAAKW,IAAO,KAAO,GAAOX,EAAMY,IAAO,GAAM,MAAS,GAAOZ,EAAMa,IAAO,EAAK,MAAS,EAAKb,EAAU,IAALU,IAAcZ,EAAYgB,KACnIV,GAAOJ,EAAKY,IAAO,KAAO,GAAOZ,EAAMa,IAAO,GAAM,MAAS,GAAOb,EAAMU,IAAO,EAAK,MAAS,EAAKV,EAAU,IAALW,IAAcb,EAAYgB,KACnIT,GAAOL,EAAKa,IAAO,KAAO,GAAOb,EAAMU,IAAO,GAAM,MAAS,GAAOV,EAAMW,IAAO,EAAK,MAAS,EAAKX,EAAU,IAALY,IAAcd,EAAYgB,KAM5H,CALPZ,KAAY,EACZC,KAAY,EACZC,KAAY,EACZC,KAAY,GAMd,IAAIU,EAAO,CAAC,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IACpEC,EAAI,WAGN,IADA,IAAIppB,EAAI,IAAIzL,MAAM,KACT5E,EAAI,EAAGA,EAAI,IAAKA,IAErBqQ,EAAErQ,GADAA,EAAI,IACCA,GAAK,EAEJA,GAAK,EAAK,IAYtB,IARA,IAAIy4B,EAAO,GACPiB,EAAW,GACXlB,EAAU,CAAC,GAAI,GAAI,GAAI,IACvBmB,EAAc,CAAC,GAAI,GAAI,GAAI,IAG3Br2B,EAAI,EACJs2B,EAAK,EACAh8B,EAAI,EAAGA,EAAI,MAAOA,EAAG,CAE5B,IAAIi8B,EAAKD,EAAMA,GAAM,EAAMA,GAAM,EAAMA,GAAM,EAAMA,GAAM,EACzDC,EAAMA,IAAO,EAAW,IAALA,EAAa,GAChCpB,EAAKn1B,GAAKu2B,EACVH,EAASG,GAAMv2B,EAGf,IAAIkf,EAAKnS,EAAE/M,GACPw2B,EAAKzpB,EAAEmS,GACPuX,EAAK1pB,EAAEypB,GAGP/kB,EAAa,IAAR1E,EAAEwpB,GAAqB,SAALA,EAC3BrB,EAAQ,GAAGl1B,GAAMyR,GAAK,GAAOA,IAAM,EACnCyjB,EAAQ,GAAGl1B,GAAMyR,GAAK,GAAOA,IAAM,GACnCyjB,EAAQ,GAAGl1B,GAAMyR,GAAK,EAAMA,IAAM,GAClCyjB,EAAQ,GAAGl1B,GAAKyR,EAGhBA,EAAU,SAALglB,EAAwB,MAALD,EAAsB,IAALtX,EAAmB,SAAJlf,EACxDq2B,EAAY,GAAGE,GAAO9kB,GAAK,GAAOA,IAAM,EACxC4kB,EAAY,GAAGE,GAAO9kB,GAAK,GAAOA,IAAM,GACxC4kB,EAAY,GAAGE,GAAO9kB,GAAK,EAAMA,IAAM,GACvC4kB,EAAY,GAAGE,GAAM9kB,EAEX,IAANzR,EACFA,EAAIs2B,EAAK,GAETt2B,EAAIkf,EAAKnS,EAAEA,EAAEA,EAAE0pB,EAAKvX,KACpBoX,GAAMvpB,EAAEA,EAAEupB,KAId,MAAO,CACLnB,KAAMA,EACNiB,SAAUA,EACVlB,QAASA,EACTmB,YAAaA,GAzDT,GA6DR,SAASK,EAAKt/B,GACZ0B,KAAK69B,KAAO9B,EAAcz9B,GAC1B0B,KAAK89B,SAGPF,EAAIzG,UAAY,GAChByG,EAAIG,QAAU,GACdH,EAAIlgC,UAAUy5B,UAAYyG,EAAIzG,UAC9ByG,EAAIlgC,UAAUqgC,QAAUH,EAAIG,QAC5BH,EAAIlgC,UAAUogC,OAAS,WAOrB,IANA,IAAIE,EAAWh+B,KAAK69B,KAChBE,EAAUC,EAASt/B,OACnB49B,EAAUyB,EAAU,EACpBE,EAAyB,GAAf3B,EAAU,GAEpBH,EAAc,GACTjsB,EAAI,EAAGA,EAAI6tB,EAAS7tB,IAC3BisB,EAAYjsB,GAAK8tB,EAAS9tB,GAG5B,IAAKA,EAAI6tB,EAAS7tB,EAAI+tB,EAAQ/tB,IAAK,CACjC,IAAIyI,EAAIwjB,EAAYjsB,EAAI,GAEpBA,EAAI6tB,GAAY,GAClBplB,EAAKA,GAAK,EAAMA,IAAM,GACtBA,EACG0kB,EAAEhB,KAAK1jB,IAAM,KAAO,GACpB0kB,EAAEhB,KAAM1jB,IAAM,GAAM,MAAS,GAC7B0kB,EAAEhB,KAAM1jB,IAAM,EAAK,MAAS,EAC5B0kB,EAAEhB,KAAS,IAAJ1jB,GAEVA,GAAKykB,EAAMltB,EAAI6tB,EAAW,IAAM,IACvBA,EAAU,GAAK7tB,EAAI6tB,GAAY,IACxCplB,EACG0kB,EAAEhB,KAAK1jB,IAAM,KAAO,GACpB0kB,EAAEhB,KAAM1jB,IAAM,GAAM,MAAS,GAC7B0kB,EAAEhB,KAAM1jB,IAAM,EAAK,MAAS,EAC5B0kB,EAAEhB,KAAS,IAAJ1jB,IAGZwjB,EAAYjsB,GAAKisB,EAAYjsB,EAAI6tB,GAAWplB,EAI9C,IADA,IAAIulB,EAAiB,GACZC,EAAK,EAAGA,EAAKF,EAAQE,IAAM,CAClC,IAAIC,EAAMH,EAASE,EACfE,EAAKlC,EAAYiC,GAAOD,EAAK,EAAI,EAAI,IAGvCD,EAAeC,GADbA,EAAK,GAAKC,GAAO,EACEC,EAGnBhB,EAAEE,YAAY,GAAGF,EAAEhB,KAAKgC,IAAO,KAC/BhB,EAAEE,YAAY,GAAGF,EAAEhB,KAAMgC,IAAO,GAAM,MACtChB,EAAEE,YAAY,GAAGF,EAAEhB,KAAMgC,IAAO,EAAK,MACrChB,EAAEE,YAAY,GAAGF,EAAEhB,KAAU,IAALgC,IAI9Br+B,KAAKs+B,SAAWhC,EAChBt8B,KAAKu+B,aAAepC,EACpBn8B,KAAKw+B,gBAAkBN,GAGzBN,EAAIlgC,UAAU+gC,gBAAkB,SAAUvC,GAExC,OAAOD,EADPC,EAAIH,EAAcG,GACGl8B,KAAKu+B,aAAclB,EAAEjB,QAASiB,EAAEhB,KAAMr8B,KAAKs+B,WAGlEV,EAAIlgC,UAAUghC,aAAe,SAAUxC,GACrC,IAAIvzB,EAAM3I,KAAKy+B,gBAAgBvC,GAC3B/8B,EAAMjB,EAAOW,YAAY,IAK7B,OAJAM,EAAIiM,cAAczC,EAAI,GAAI,GAC1BxJ,EAAIiM,cAAczC,EAAI,GAAI,GAC1BxJ,EAAIiM,cAAczC,EAAI,GAAI,GAC1BxJ,EAAIiM,cAAczC,EAAI,GAAI,IACnBxJ,GAGTy+B,EAAIlgC,UAAUihC,aAAe,SAAUzC,GAIrC,IAAI0C,GAHJ1C,EAAIH,EAAcG,IAGP,GACXA,EAAE,GAAKA,EAAE,GACTA,EAAE,GAAK0C,EAEP,IAAIj2B,EAAMszB,EAAWC,EAAGl8B,KAAKw+B,gBAAiBnB,EAAEE,YAAaF,EAAEC,SAAUt9B,KAAKs+B,UAC1En/B,EAAMjB,EAAOW,YAAY,IAK7B,OAJAM,EAAIiM,cAAczC,EAAI,GAAI,GAC1BxJ,EAAIiM,cAAczC,EAAI,GAAI,GAC1BxJ,EAAIiM,cAAczC,EAAI,GAAI,GAC1BxJ,EAAIiM,cAAczC,EAAI,GAAI,IACnBxJ,GAGTy+B,EAAIlgC,UAAUmhC,MAAQ,WACpB7C,EAASh8B,KAAKu+B,cACdvC,EAASh8B,KAAKw+B,iBACdxC,EAASh8B,KAAK69B,OAGhBxgC,EAAOC,QAAQsgC,IAAMA,G,gBCnOrB,IAAI1/B,EAAS,EAAQ,KAAeA,OAChCi6B,EAAM,EAAQ,KA2ClB96B,EAAOC,QAxCP,SAAyBwhC,EAAUC,EAAMC,EAASC,GAEhD,GADK/gC,EAAO6C,SAAS+9B,KAAWA,EAAW5gC,EAAOS,KAAKmgC,EAAU,WAC7DC,IACG7gC,EAAO6C,SAASg+B,KAAOA,EAAO7gC,EAAOS,KAAKogC,EAAM,WACjC,IAAhBA,EAAKrgC,QAAc,MAAM,IAAImB,WAAW,4CAQ9C,IALA,IAAIq/B,EAASF,EAAU,EACnB1gC,EAAMJ,EAAOU,MAAMsgC,GACnBC,EAAKjhC,EAAOU,MAAMqgC,GAAS,GAC3B/V,EAAMhrB,EAAOU,MAAM,GAEhBsgC,EAAS,GAAKD,EAAQ,GAAG,CAC9B,IAAIhH,EAAO,IAAIE,EACfF,EAAK/K,OAAOhE,GACZ+O,EAAK/K,OAAO4R,GACRC,GAAM9G,EAAK/K,OAAO6R,GACtB7V,EAAM+O,EAAKJ,SAEX,IAAIuH,EAAO,EAEX,GAAIF,EAAS,EAAG,CACd,IAAIG,EAAW/gC,EAAII,OAASwgC,EAC5BE,EAAO95B,KAAKC,IAAI25B,EAAQhW,EAAIxqB,QAC5BwqB,EAAIhoB,KAAK5C,EAAK+gC,EAAU,EAAGD,GAC3BF,GAAUE,EAGZ,GAAIA,EAAOlW,EAAIxqB,QAAUugC,EAAQ,EAAG,CAClC,IAAIK,EAAUH,EAAGzgC,OAASugC,EACtBvgC,EAAS4G,KAAKC,IAAI05B,EAAO/V,EAAIxqB,OAAS0gC,GAC1ClW,EAAIhoB,KAAKi+B,EAAIG,EAASF,EAAMA,EAAO1gC,GACnCugC,GAASvgC,GAKb,OADAwqB,EAAIjqB,KAAK,GACF,CAAEX,IAAKA,EAAK6gC,GAAIA,K,6BCvCzB,IAAI9vB,EAAK,EAAQ,KACbD,EAAQ,EAAQ,KAChBO,EAASP,EAAMO,OACfe,EAAStB,EAAMsB,OACf1B,EAASI,EAAMJ,OAEnB,SAASuwB,EAAUn+B,EAAMo+B,GACvBx/B,KAAKoB,KAAOA,EACZpB,KAAKuT,EAAI,IAAIlE,EAAGmwB,EAAKjsB,EAAG,IAGxBvT,KAAK8V,IAAM0pB,EAAKhW,MAAQna,EAAGyG,IAAI0pB,EAAKhW,OAASna,EAAG2b,KAAKhrB,KAAKuT,GAG1DvT,KAAKy/B,KAAO,IAAIpwB,EAAG,GAAG+X,MAAMpnB,KAAK8V,KACjC9V,KAAKyqB,IAAM,IAAIpb,EAAG,GAAG+X,MAAMpnB,KAAK8V,KAChC9V,KAAK0/B,IAAM,IAAIrwB,EAAG,GAAG+X,MAAMpnB,KAAK8V,KAGhC9V,KAAK0C,EAAI88B,EAAK98B,GAAK,IAAI2M,EAAGmwB,EAAK98B,EAAG,IAClC1C,KAAK2lB,EAAI6Z,EAAK7Z,GAAK3lB,KAAK2/B,cAAcH,EAAK7Z,EAAG6Z,EAAKI,MAGnD5/B,KAAK6/B,QAAU,IAAIr3B,MAAM,GACzBxI,KAAK8/B,QAAU,IAAIt3B,MAAM,GACzBxI,KAAK+/B,QAAU,IAAIv3B,MAAM,GACzBxI,KAAKggC,QAAU,IAAIx3B,MAAM,GAEzBxI,KAAKigC,WAAajgC,KAAK0C,EAAI1C,KAAK0C,EAAEsN,YAAc,EAGhD,IAAIkwB,EAAclgC,KAAK0C,GAAK1C,KAAKuT,EAAEqR,IAAI5kB,KAAK0C,IACvCw9B,GAAeA,EAAYlvB,KAAK,KAAO,EAC1ChR,KAAKmgC,KAAO,MAEZngC,KAAKogC,eAAgB,EACrBpgC,KAAKmgC,KAAOngC,KAAK0C,EAAE0kB,MAAMpnB,KAAK8V,MAmNlC,SAASuqB,EAAUC,EAAOl/B,GACxBpB,KAAKsgC,MAAQA,EACbtgC,KAAKoB,KAAOA,EACZpB,KAAKugC,YAAc,KAnNrBljC,EAAOC,QAAUiiC,EAEjBA,EAAU7hC,UAAU8iC,MAAQ,WAC1B,MAAM,IAAIvgC,MAAM,oBAGlBs/B,EAAU7hC,UAAU+iC,SAAW,WAC7B,MAAM,IAAIxgC,MAAM,oBAGlBs/B,EAAU7hC,UAAUgjC,aAAe,SAAsBntB,EAAGrD,GAC1DlB,EAAOuE,EAAEgtB,aACT,IAAII,EAAUptB,EAAEqtB,cAEZ7wB,EAAMJ,EAAOO,EAAG,EAAGlQ,KAAKigC,YACxBY,GAAK,GAAMF,EAAQG,KAAO,IAAOH,EAAQG,KAAO,GAAM,EAAI,EAAI,GAClED,GAAK,EAIL,IADA,IAAIE,EAAO,GACFn9B,EAAI,EAAGA,EAAImM,EAAIrR,OAAQkF,GAAK+8B,EAAQG,KAAM,CACjD,IAAIE,EAAO,EACX,IAAS9wB,EAAItM,EAAI+8B,EAAQG,KAAO,EAAG5wB,GAAKtM,EAAGsM,IACzC8wB,GAAQA,GAAQ,GAAKjxB,EAAIG,GAC3B6wB,EAAKr8B,KAAKs8B,GAKZ,IAFA,IAAI/5B,EAAIjH,KAAKihC,OAAO,KAAM,KAAM,MAC5Bx+B,EAAIzC,KAAKihC,OAAO,KAAM,KAAM,MACvBz/B,EAAIq/B,EAAGr/B,EAAI,EAAGA,IAAK,CAC1B,IAASoC,EAAI,EAAGA,EAAIm9B,EAAKriC,OAAQkF,IAAK,EAChCo9B,EAAOD,EAAKn9B,MACHpC,EACXiB,EAAIA,EAAEy+B,SAASP,EAAQQ,OAAOv9B,IACvBo9B,KAAUx/B,IACjBiB,EAAIA,EAAEy+B,SAASP,EAAQQ,OAAOv9B,GAAG4V,QAErCvS,EAAIA,EAAE2T,IAAInY,GAEZ,OAAOwE,EAAEm6B,OAGX7B,EAAU7hC,UAAU2jC,SAAW,SAAkB9tB,EAAGrD,GAClD,IAAIL,EAAI,EAGJyxB,EAAY/tB,EAAEguB,cAAc1xB,GAChCA,EAAIyxB,EAAUzW,IAQd,IAPA,IAAIA,EAAMyW,EAAUH,OAGhBpxB,EAAMJ,EAAOO,EAAGL,EAAG7P,KAAKigC,YAGxB5a,EAAMrlB,KAAKihC,OAAO,KAAM,KAAM,MACzBz/B,EAAIuO,EAAIrR,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CAExC,IAAS0O,EAAI,EAAG1O,GAAK,GAAgB,IAAXuO,EAAIvO,GAAUA,IACtC0O,IAKF,GAJI1O,GAAK,GACP0O,IACFmV,EAAMA,EAAImc,KAAKtxB,GAEX1O,EAAI,EACN,MACF,IAAI4O,EAAIL,EAAIvO,GACZwN,EAAa,IAANoB,GAIHiV,EAHW,WAAX9R,EAAEnS,KAEAgP,EAAI,EACAiV,EAAI6b,SAASrW,EAAKza,EAAI,GAAM,IAE5BiV,EAAI6b,SAASrW,GAAMza,EAAI,GAAM,GAAGoJ,OAGpCpJ,EAAI,EACAiV,EAAIzK,IAAIiQ,EAAKza,EAAI,GAAM,IAEvBiV,EAAIzK,IAAIiQ,GAAMza,EAAI,GAAM,GAAGoJ,OAGvC,MAAkB,WAAXjG,EAAEnS,KAAoBikB,EAAI+b,MAAQ/b,GAG3Cka,EAAU7hC,UAAU+jC,YAAc,SAAqBC,EACAP,EACAQ,EACA3gC,EACA4gC,GAOrD,IANA,IAAIC,EAAW7hC,KAAK6/B,QAChBhV,EAAM7qB,KAAK8/B,QACX/vB,EAAM/P,KAAK+/B,QAGXl4B,EAAM,EACDrG,EAAI,EAAGA,EAAIR,EAAKQ,IAAK,CAC5B,IACI8/B,GADA/tB,EAAI4tB,EAAO3/B,IACG+/B,cAAcG,GAChCG,EAASrgC,GAAK8/B,EAAUzW,IACxBA,EAAIrpB,GAAK8/B,EAAUH,OAIrB,IAAS3/B,EAAIR,EAAM,EAAGQ,GAAK,EAAGA,GAAK,EAAG,CACpC,IAAIyF,EAAIzF,EAAI,EACRiB,EAAIjB,EACR,GAAoB,IAAhBqgC,EAAS56B,IAA4B,IAAhB46B,EAASp/B,GAAlC,CAQA,IAAIq/B,EAAO,CACTX,EAAOl6B,GACP,KACA,KACAk6B,EAAO1+B,IAI4B,IAAjC0+B,EAAOl6B,GAAGE,EAAEkP,IAAI8qB,EAAO1+B,GAAG0E,IAC5B26B,EAAK,GAAKX,EAAOl6B,GAAG2T,IAAIumB,EAAO1+B,IAC/Bq/B,EAAK,GAAKX,EAAOl6B,GAAG86B,MAAMb,SAASC,EAAO1+B,GAAG+W,QACM,IAA1C2nB,EAAOl6B,GAAGE,EAAEkP,IAAI8qB,EAAO1+B,GAAG0E,EAAEuhB,WACrCoZ,EAAK,GAAKX,EAAOl6B,GAAG86B,MAAMb,SAASC,EAAO1+B,IAC1Cq/B,EAAK,GAAKX,EAAOl6B,GAAG2T,IAAIumB,EAAO1+B,GAAG+W,SAElCsoB,EAAK,GAAKX,EAAOl6B,GAAG86B,MAAMb,SAASC,EAAO1+B,IAC1Cq/B,EAAK,GAAKX,EAAOl6B,GAAG86B,MAAMb,SAASC,EAAO1+B,GAAG+W,QAG/C,IAAI+S,EAAQ,EACT,GACA,GACA,GACA,EACD,EACA,EACA,EACA,EACA,GAGE1b,EAAMH,EAAOixB,EAAO16B,GAAI06B,EAAOl/B,IACnCoF,EAAMvC,KAAKuC,IAAIgJ,EAAI,GAAGnS,OAAQmJ,GAC9BkI,EAAI9I,GAAK,IAAIuB,MAAMX,GACnBkI,EAAItN,GAAK,IAAI+F,MAAMX,GACnB,IAAK,IAAIjE,EAAI,EAAGA,EAAIiE,EAAKjE,IAAK,CAC5B,IAAIo+B,EAAiB,EAAZnxB,EAAI,GAAGjN,GACZq+B,EAAiB,EAAZpxB,EAAI,GAAGjN,GAEhBmM,EAAI9I,GAAGrD,GAAK2oB,EAAiB,GAAVyV,EAAK,IAAUC,EAAK,IACvClyB,EAAItN,GAAGmB,GAAK,EACZinB,EAAI5jB,GAAK66B,QAhDT/xB,EAAI9I,GAAK0I,EAAOgyB,EAAO16B,GAAI46B,EAAS56B,GAAIjH,KAAKigC,YAC7ClwB,EAAItN,GAAKkN,EAAOgyB,EAAOl/B,GAAIo/B,EAASp/B,GAAIzC,KAAKigC,YAC7Cp4B,EAAMvC,KAAKuC,IAAIkI,EAAI9I,GAAGvI,OAAQmJ,GAC9BA,EAAMvC,KAAKuC,IAAIkI,EAAItN,GAAG/D,OAAQmJ,GAiDlC,IAAIwd,EAAMrlB,KAAKihC,OAAO,KAAM,KAAM,MAC9B/X,EAAMlpB,KAAKggC,QACf,IAASx+B,EAAIqG,EAAKrG,GAAK,EAAGA,IAAK,CAG7B,IAFA,IAAI0O,EAAI,EAED1O,GAAK,GAAG,CACb,IAAIi+B,GAAO,EACX,IAAS77B,EAAI,EAAGA,EAAI5C,EAAK4C,IACvBslB,EAAItlB,GAAiB,EAAZmM,EAAInM,GAAGpC,GACD,IAAX0nB,EAAItlB,KACN67B,GAAO,GAEX,IAAKA,EACH,MACFvvB,IACA1O,IAKF,GAHIA,GAAK,GACP0O,IACFmV,EAAMA,EAAImc,KAAKtxB,GACX1O,EAAI,EACN,MAEF,IAASoC,EAAI,EAAGA,EAAI5C,EAAK4C,IAAK,CAC5B,IACI2P,EADAnD,EAAI8Y,EAAItlB,GAEF,IAANwM,IAEKA,EAAI,EACXmD,EAAIsX,EAAIjnB,GAAIwM,EAAI,GAAM,GACfA,EAAI,IACXmD,EAAIsX,EAAIjnB,IAAKwM,EAAI,GAAM,GAAGoJ,OAG1B6L,EADa,WAAX9R,EAAEnS,KACEikB,EAAI6b,SAAS3tB,GAEb8R,EAAIzK,IAAIrH,KAIpB,IAAS/R,EAAI,EAAGA,EAAIR,EAAKQ,IACvBqpB,EAAIrpB,GAAK,KAEX,OAAIogC,EACKvc,EAEAA,EAAI+b,OAQf7B,EAAUc,UAAYA,EAEtBA,EAAU3iC,UAAUwpB,GAAK,WACvB,MAAM,IAAIjnB,MAAM,oBAGlBogC,EAAU3iC,UAAU+iC,SAAW,WAC7B,OAAOzgC,KAAKsgC,MAAMG,SAASzgC,OAG7Bu/B,EAAU7hC,UAAUwkC,YAAc,SAAqBr5B,EAAOyK,GAC5DzK,EAAQuG,EAAMI,QAAQ3G,EAAOyK,GAE7B,IAAItS,EAAMhB,KAAKuT,EAAElT,aAGjB,IAAkB,IAAbwI,EAAM,IAA4B,IAAbA,EAAM,IAA4B,IAAbA,EAAM,KACjDA,EAAMnK,OAAS,GAAM,EAAIsC,EAS3B,OARiB,IAAb6H,EAAM,GACRmG,EAAOnG,EAAMA,EAAMnK,OAAS,GAAK,GAAM,GACnB,IAAbmK,EAAM,IACbmG,EAAOnG,EAAMA,EAAMnK,OAAS,GAAK,GAAM,GAE9BsB,KAAKwgC,MAAM33B,EAAMjI,MAAM,EAAG,EAAII,GACnB6H,EAAMjI,MAAM,EAAII,EAAK,EAAI,EAAIA,IAG9C,IAAkB,IAAb6H,EAAM,IAA4B,IAAbA,EAAM,KAC3BA,EAAMnK,OAAS,IAAMsC,EAC/B,OAAOhB,KAAKmiC,WAAWt5B,EAAMjI,MAAM,EAAG,EAAII,GAAmB,IAAb6H,EAAM,IAExD,MAAM,IAAI5I,MAAM,yBAGlBogC,EAAU3iC,UAAU0kC,iBAAmB,SAA0B9uB,GAC/D,OAAOtT,KAAK0P,OAAO4D,GAAK,IAG1B+sB,EAAU3iC,UAAU2kC,QAAU,SAAiBC,GAC7C,IAAIthC,EAAMhB,KAAKsgC,MAAM/sB,EAAElT,aACnB6G,EAAIlH,KAAKuiC,OAAO/yB,QAAQ,KAAMxO,GAElC,OAAIshC,EACK,CAAEtiC,KAAKwiC,OAAO5c,SAAW,EAAO,GAAOxe,OAAOF,GAEhD,CAAE,GAAOE,OAAOF,EAAGlH,KAAKwiC,OAAOhzB,QAAQ,KAAMxO,KAGtDq/B,EAAU3iC,UAAUgS,OAAS,SAAgB4D,EAAKgvB,GAChD,OAAOlzB,EAAMM,OAAO1P,KAAKqiC,QAAQC,GAAUhvB,IAG7C+sB,EAAU3iC,UAAU+kC,WAAa,SAAoBC,GACnD,GAAI1iC,KAAKugC,YACP,OAAOvgC,KAET,IAAIugC,EAAc,CAChBI,QAAS,KACT5wB,IAAK,KACL4yB,KAAM,MAOR,OALApC,EAAYxwB,IAAM/P,KAAKuhC,cAAc,GACrChB,EAAYI,QAAU3gC,KAAK4gC,YAAY,EAAG8B,GAC1CnC,EAAYoC,KAAO3iC,KAAK4iC,WACxB5iC,KAAKugC,YAAcA,EAEZvgC,MAGTqgC,EAAU3iC,UAAUmlC,YAAc,SAAqB3yB,GACrD,IAAKlQ,KAAKugC,YACR,OAAO,EAET,IAAII,EAAU3gC,KAAKugC,YAAYI,QAC/B,QAAKA,GAGEA,EAAQQ,OAAOziC,QAAU4G,KAAKqR,MAAMzG,EAAEF,YAAc,GAAK2wB,EAAQG,OAG1ET,EAAU3iC,UAAUkjC,YAAc,SAAqBE,EAAM4B,GAC3D,GAAI1iC,KAAKugC,aAAevgC,KAAKugC,YAAYI,QACvC,OAAO3gC,KAAKugC,YAAYI,QAI1B,IAFA,IAAIA,EAAU,CAAE3gC,MACZqlB,EAAMrlB,KACDwB,EAAI,EAAGA,EAAIkhC,EAAOlhC,GAAKs/B,EAAM,CACpC,IAAK,IAAIl9B,EAAI,EAAGA,EAAIk9B,EAAMl9B,IACxByhB,EAAMA,EAAIyd,MACZnC,EAAQj8B,KAAK2gB,GAEf,MAAO,CACLyb,KAAMA,EACNK,OAAQR,IAIZN,EAAU3iC,UAAU6jC,cAAgB,SAAuB1W,GACzD,GAAI7qB,KAAKugC,aAAevgC,KAAKugC,YAAYxwB,IACvC,OAAO/P,KAAKugC,YAAYxwB,IAK1B,IAHA,IAAIvK,EAAM,CAAExF,MACR6H,GAAO,GAAKgjB,GAAO,EACnBiY,EAAc,IAARj7B,EAAY,KAAO7H,KAAK8iC,MACzBthC,EAAI,EAAGA,EAAIqG,EAAKrG,IACvBgE,EAAIhE,GAAKgE,EAAIhE,EAAI,GAAGoZ,IAAIkoB,GAC1B,MAAO,CACLjY,IAAKA,EACLsW,OAAQ37B,IAIZ66B,EAAU3iC,UAAUklC,SAAW,WAC7B,OAAO,MAGTvC,EAAU3iC,UAAU8jC,KAAO,SAActxB,GAEvC,IADA,IAAIf,EAAInP,KACCwB,EAAI,EAAGA,EAAI0O,EAAG1O,IACrB2N,EAAIA,EAAE2zB,MACR,OAAO3zB,I,gBCtXT,IAAI4zB,EAAO,EAAQ,KACfC,EAAQ,EAAQ,KAChBC,EAAU,EAAQ,KAClBC,EAAU,EAAQ,KAClBC,EAAS,EAAQ,KACjBjlC,EAAS,EAAQ,KAAeA,OAGpC,SAASklC,EAAWnlC,GAClB,IAAI6gC,EACkB,iBAAX7gC,GAAwBC,EAAO6C,SAAS9C,KACjD6gC,EAAW7gC,EAAOolC,WAClBplC,EAASA,EAAOK,KAEI,iBAAXL,IACTA,EAASC,EAAOS,KAAKV,IAGvB,IAIIqlC,EAASC,EAJTC,EAAWP,EAAQhlC,EAAQ6gC,GAE3B19B,EAAOoiC,EAASC,IAChBpiC,EAAOmiC,EAASniC,KAEpB,OAAQD,GACN,IAAK,cACHmiC,EAAQR,EAAKW,YAAYnJ,OAAOl5B,EAAM,OAAOsiC,eAAeC,qBAE9D,IAAK,aAKH,OAJKL,IACHA,EAAQR,EAAKc,UAAUtJ,OAAOl5B,EAAM,QAEtCiiC,EAAUC,EAAMO,UAAUA,UAAU/7B,KAAK,MAEvC,IAAK,uBACH,OAAOg7B,EAAKgB,aAAaxJ,OAAOgJ,EAAMS,iBAAiB3iC,KAAM,OAC/D,IAAK,oBAEH,OADAkiC,EAAMU,kBAAoBV,EAAMS,iBACzB,CACL5iC,KAAM,KACNC,KAAMkiC,GAEV,IAAK,oBAEH,OADAA,EAAMO,UAAUI,OAAOC,QAAUpB,EAAKqB,SAAS7J,OAAOgJ,EAAMS,iBAAiB3iC,KAAM,OAC5E,CACLD,KAAM,MACNC,KAAMkiC,EAAMO,UAAUI,QAE1B,QAAS,MAAM,IAAIjkC,MAAM,kBAAoBqjC,GAGjD,IAAK,wBAEHjiC,EAyCN,SAAkBA,EAAMy9B,GACtB,IAAIC,EAAO19B,EAAKyiC,UAAUO,QAAQC,IAAIC,UAAUxF,KAC5CyF,EAAQrgC,SAAS9C,EAAKyiC,UAAUO,QAAQC,IAAIC,UAAUC,MAAM/iC,WAAY,IACxEgjC,EAAOzB,EAAM3hC,EAAKyiC,UAAUO,QAAQK,OAAOD,KAAK18B,KAAK,MACrDo3B,EAAK99B,EAAKyiC,UAAUO,QAAQK,OAAOvF,GACnCwF,EAAatjC,EAAK4iC,kBAClBW,EAASzgC,SAASsgC,EAAKza,MAAM,KAAK,GAAI,IAAM,EAC5C1rB,EAAM6kC,EAAO0B,WAAW/F,EAAUC,EAAMyF,EAAOI,EAAQ,QACvDF,EAASxB,EAAQ4B,iBAAiBL,EAAMnmC,EAAK6gC,GAC7Cx2B,EAAM,GAGV,OAFAA,EAAIjE,KAAKggC,EAAOxX,OAAOyX,IACvBh8B,EAAIjE,KAAKggC,EAAO7X,SACT3uB,EAAOkJ,OAAOuB,GArDV07B,CADPhjC,EAAO0hC,EAAKgC,oBAAoBxK,OAAOl5B,EAAM,OACxBy9B,GAEvB,IAAK,cAGH,OADAwE,GADAC,EAAQR,EAAKiC,WAAWzK,OAAOl5B,EAAM,QACrByiC,UAAUA,UAAU/7B,KAAK,MAEvC,IAAK,uBACH,OAAOg7B,EAAKkC,cAAc1K,OAAOgJ,EAAMU,kBAAmB,OAC5D,IAAK,oBACH,MAAO,CACL3D,MAAOiD,EAAMO,UAAUxD,MACvB4E,WAAYnC,EAAKoC,aAAa5K,OAAOgJ,EAAMU,kBAAmB,OAAOiB,YAEzE,IAAK,oBAEH,OADA3B,EAAMO,UAAUI,OAAOkB,SAAWrC,EAAKqB,SAAS7J,OAAOgJ,EAAMU,kBAAmB,OACzE,CACL7iC,KAAM,MACN8iC,OAAQX,EAAMO,UAAUI,QAE5B,QAAS,MAAM,IAAIjkC,MAAM,kBAAoBqjC,GAGjD,IAAK,iBACH,OAAOP,EAAKgB,aAAaxJ,OAAOl5B,EAAM,OACxC,IAAK,kBACH,OAAO0hC,EAAKkC,cAAc1K,OAAOl5B,EAAM,OACzC,IAAK,kBACH,MAAO,CACLD,KAAM,MACN8iC,OAAQnB,EAAKsC,cAAc9K,OAAOl5B,EAAM,QAE5C,IAAK,iBAEH,MAAO,CACLi/B,OAFFj/B,EAAO0hC,EAAKoC,aAAa5K,OAAOl5B,EAAM,QAExBikC,WAAW1nC,MACvBsnC,WAAY7jC,EAAK6jC,YAErB,QAAS,MAAM,IAAIjlC,MAAM,oBAAsBmB,IAnFnD/D,EAAOC,QAAU8lC,EAsFjBA,EAAUmC,UAAYxC,EAAKwC,W,6BC1F3B,MAAMvR,EAAO,EAAQ,KACfpI,EAAe,EAAQ,KAAUA,aACjC4Z,EAAU,EAAQ,KAEtB,wFACC94B,QAAQ,QAASsnB,EAAK7I,aAMpBpnB,OAAOI,UAAYoK,OAAOpK,WAC7BJ,OAAOI,SAAWoK,OAAOpK,WAEtBJ,OAAO0hC,YAAcl3B,OAAOk3B,aAC/B1hC,OAAO0hC,WAAal3B,OAAOk3B,YAG7B,MAAM3Z,EAAiB,CACrB4Z,oBAAqB,KACrBC,cAAc,EACdC,aAAc,QACdC,kBAAkB,EAClBC,iBAAiB,EACjBC,wBAAwB,EAExBC,gBAAgB,EAChBC,qBAAqB,EACrBva,WAAW,EACXwa,YAAY,EACZC,cAAc,EACdC,kBAAmB,MACnBC,kBAAmB,SAASp/B,EAAGq/B,GAC7B,OAAOr/B,GAETs/B,mBAAoB,SAASt/B,EAAGu/B,GAC9B,OAAOv/B,GAETw/B,UAAW,IAIbnpC,EAAQwuB,eAAiBA,EAEzB,MAAMC,EAAQ,CACZ,sBACA,eACA,eACA,mBACA,kBACA,yBACA,iBACA,sBACA,YACA,aACA,eACA,oBACA,oBACA,qBACA,sBACA,aAUF,SAAS2a,EAAgBJ,EAASnlC,EAAK0qB,GASrC,OARI1qB,IACE0qB,EAAQqa,aACV/kC,EAAMA,EAAIsL,QAGZtL,EAAMwlC,EADNxlC,EAAM0qB,EAAQwa,kBAAkBllC,EAAKmlC,GACfza,EAAQma,eAAgBna,EAAQ+a,sBAGjDzlC,EAGT,SAAS0lC,EAAiBC,EAASjb,GACjC,GAAIA,EAAQia,gBAAiB,CAC3B,MAAMiB,EAAOD,EAAQ9c,MAAM,KACrBgd,EAA+B,MAAtBF,EAAQG,OAAO,GAAa,IAAM,GACjD,GAAgB,UAAZF,EAAK,GACP,MAAO,GAEW,IAAhBA,EAAKroC,SACPooC,EAAUE,EAASD,EAAK,IAG5B,OAAOD,EAGT,SAASH,EAAWxlC,EAAK+lC,EAAaN,GACpC,GAAIM,GAA8B,iBAAR/lC,EAAkB,CAC1C,IAAI+C,EAiBJ,MAhBmB,KAAf/C,EAAIsL,QAAiB3J,MAAM3B,GAC7B+C,EAAiB,SAAR/C,GAAgC,UAARA,GAA0BA,IAEhC,IAAvBA,EAAI6B,QAAQ,MAEdkB,EAASH,OAAOI,SAAShD,EAAK,KACC,IAAtBA,EAAI6B,QAAQ,MACrBkB,EAASH,OAAO0hC,WAAWtkC,GAC3BA,EAAMA,EAAIuL,QAAQ,SAAU,KAE5BxI,EAASH,OAAOI,SAAShD,EAAK,IAE5BylC,IACF1iC,EAASX,OAAOW,KAAY/C,EAAM+C,EAAS/C,IAGxC+C,EAEP,OAAI8vB,EAAK1I,QAAQnqB,GACRA,EAEA,GA1Db7D,EAAQyuB,MAAQA,EAiEhB,MAAMob,EAAY,IAAI9b,OAAO,wCAAyC,KAEtE,SAAS+b,EAAmBC,EAASxb,GACnC,IAAKA,EAAQga,kBAAuC,iBAAZwB,EAAsB,CAC5DA,EAAUA,EAAQ36B,QAAQ,SAAU,KAGpC,MAAM2f,EAAU2H,EAAK7H,cAAckb,EAASF,GACtCnmC,EAAMqrB,EAAQ3tB,OACd4oC,EAAQ,GACd,IAAK,IAAI9lC,EAAI,EAAGA,EAAIR,EAAKQ,IAAK,CAC5B,MAAMglC,EAAWK,EAAiBxa,EAAQ7qB,GAAG,GAAIqqB,GAC7C2a,EAAS9nC,cACWU,IAAlBitB,EAAQ7qB,GAAG,IACTqqB,EAAQqa,aACV7Z,EAAQ7qB,GAAG,GAAK6qB,EAAQ7qB,GAAG,GAAGiL,QAEhC4f,EAAQ7qB,GAAG,GAAKqqB,EAAQ0a,mBAAmBla,EAAQ7qB,GAAG,GAAIglC,GAC1Dc,EAAMzb,EAAQ6Z,oBAAsBc,GAAYG,EAC9Cta,EAAQ7qB,GAAG,GACXqqB,EAAQoa,oBACRpa,EAAQ+a,sBAED/a,EAAQka,yBACjBuB,EAAMzb,EAAQ6Z,oBAAsBc,IAAY,IAItD,IAAKrpC,OAAOsuB,KAAK6b,GAAO5oC,OACtB,OAEF,GAAImtB,EAAQ8Z,aAAc,CACxB,MAAM4B,EAAiB,GAEvB,OADAA,EAAe1b,EAAQ8Z,cAAgB2B,EAChCC,EAET,OAAOD,GAiJX,SAASE,EAA0BnmC,EAAMG,GACvC,IAAIimC,EACAC,EAAS,GACb,IAAK,IAAInb,EAAQ/qB,EAAG+qB,EAAQlrB,EAAK3C,OAAQ6tB,IAAS,CAChD,IAAI5X,EAAKtT,EAAKkrB,GACd,GAAIkb,EACI9yB,IAAO8yB,IAAcA,EAAe,SACrC,GAAW,MAAP9yB,GAAqB,MAAPA,EACrB8yB,EAAe9yB,MACZ,IAAW,MAAPA,EACP,MAAO,CACLtT,KAAMqmC,EACNnb,MAAOA,GAEK,OAAP5X,IACTA,EAAK,KAEP+yB,GAAU/yB,GAId,SAASgzB,EAAiBC,EAASpjC,EAAKhD,EAAGqmC,GACzC,MAAMC,EAAeF,EAAQ5kC,QAAQwB,EAAKhD,GAC1C,IAAqB,IAAlBsmC,EACD,MAAM,IAAI7nC,MAAM4nC,GAEhB,OAAOC,EAAetjC,EAAI9F,OAAS,EAIvCpB,EAAQyqC,gBA3KgB,SAASH,EAAS/b,GACxC+b,EAAUA,EAAQl7B,QAAQ,YAAa,KACvCmf,EAAUD,EAAaC,EAASC,EAAgBC,GAChD,MAAMic,EAAS,IAAIxC,EAAQ,QAC3B,IAAIyC,EAAcD,EACdE,EAAW,GAGf,IAAI,IAAI1mC,EAAE,EAAGA,EAAGomC,EAAQlpC,OAAQ8C,IAAI,CAElC,GAAU,MADComC,EAAQpmC,GAEjB,GAAqB,MAAjBomC,EAAQpmC,EAAE,GAAY,CACxB,MAAM2mC,EAAaR,EAAiBC,EAAS,IAAKpmC,EAAG,8BACrD,IAAI8kC,EAAUsB,EAAQ7Q,UAAUv1B,EAAE,EAAE2mC,GAAY17B,OAEhD,GAAGof,EAAQia,gBAAgB,CACzB,MAAMsC,EAAa9B,EAAQtjC,QAAQ,MAChB,IAAhBolC,IACD9B,EAAUA,EAAQliC,OAAOgkC,EAAW,IAOrCH,IACEA,EAAY9mC,IACb8mC,EAAY9mC,IAAM6yB,EAAKrI,SAASsc,EAAY9mC,KAAO,GAAKulC,EAAgBJ,EAAS4B,EAAWrc,GAE5Foc,EAAY9mC,IAAMulC,EAAgBJ,EAAS4B,EAAWrc,IAItDA,EAAQ4a,UAAU/nC,QAAUmtB,EAAQ4a,UAAUp+B,SAAS4/B,EAAYnB,WACrEmB,EAAYI,MAAQ,GACQjpC,MAAxB6oC,EAAYK,WAAyBL,EAAYK,SAAW,IAChEL,EAAY9mC,IAAMymC,EAAQxjC,OAAO6jC,EAAYM,WAAa,EAAG/mC,EAAIymC,EAAYM,WAAa,IAE5FN,EAAcA,EAAYO,OAC1BN,EAAW,GACX1mC,EAAI2mC,OACC,GAAqB,MAAjBP,EAAQpmC,EAAE,GACnBA,EAAImmC,EAAiBC,EAAS,KAAMpmC,EAAG,8BAClC,GAAgC,QAA7BomC,EAAQxjC,OAAO5C,EAAI,EAAG,GAC9BA,EAAImmC,EAAiBC,EAAS,SAAOpmC,EAAG,+BACnC,GAAiC,OAA7BomC,EAAQxjC,OAAO5C,EAAI,EAAG,GAAa,CAC5C,MAAM2mC,EAAaR,EAAiBC,EAAS,IAAKpmC,EAAG,0BAGnDA,EAFaomC,EAAQ7Q,UAAUv1B,EAAG2mC,GAC1BnlC,QAAQ,MAAQ,EACpB4kC,EAAQ5kC,QAAQ,KAAMxB,GAAK,EAE3B2mC,OAEF,GAAgC,OAA7BP,EAAQxjC,OAAO5C,EAAI,EAAG,GAAa,CAC1C,MAAM2mC,EAAaR,EAAiBC,EAAS,MAAOpmC,EAAG,wBAA0B,EAC3EkmC,EAASE,EAAQ7Q,UAAUv1B,EAAI,EAAE2mC,GAUvC,GALGD,IACDD,EAAY9mC,IAAM6yB,EAAKrI,SAASsc,EAAY9mC,KAAO,GAAKulC,EAAgBuB,EAAYnB,QAASoB,EAAWrc,GACxGqc,EAAW,IAGTrc,EAAQsa,aAAc,CAExB,MAAMsC,EAAY,IAAIjD,EAAQ3Z,EAAQsa,aAAc8B,EAAaP,GACjEO,EAAYS,SAASD,GAErBR,EAAY9mC,IAAM6yB,EAAKrI,SAASsc,EAAY9mC,KAAO0qB,EAAQua,kBAEvDsB,IACFe,EAAUtnC,IAAMumC,QAGlBO,EAAY9mC,KAAO8mC,EAAY9mC,KAAO,KAAOumC,GAAU,IAGzDlmC,EAAI2mC,EAAa,MACb,CACJ,MAAMz5B,EAAS84B,EAA0BI,EAASpmC,EAAE,GACpD,IAAIkmC,EAASh5B,EAAOrN,KACpB,MAAM8mC,EAAaz5B,EAAO6d,MACpBoc,EAAiBjB,EAAO1kC,QAAQ,KACtC,IAAIsjC,EAAUoB,EAMd,IALuB,IAApBiB,IACDrC,EAAUoB,EAAOtjC,OAAO,EAAGukC,GAAgBC,YAC3ClB,EAASA,EAAOtjC,OAAOukC,EAAiB,IAGvC9c,EAAQia,gBAAgB,CACzB,MAAMsC,EAAa9B,EAAQtjC,QAAQ,MAChB,IAAhBolC,IACD9B,EAAUA,EAAQliC,OAAOgkC,EAAW,IAWxC,GANIH,GAAeC,GACU,SAAxBD,EAAYnB,UACbmB,EAAY9mC,IAAM6yB,EAAKrI,SAASsc,EAAY9mC,KAAO,GAAKulC,EAAiBuB,EAAYnB,QAASoB,EAAUrc,IAIzG6b,EAAOhpC,OAAS,GAAKgpC,EAAOxkC,YAAY,OAASwkC,EAAOhpC,OAAS,EAAE,CAEjC,MAAhC4nC,EAAQA,EAAQ5nC,OAAS,IAC1B4nC,EAAUA,EAAQliC,OAAO,EAAGkiC,EAAQ5nC,OAAS,GAC7CgpC,EAASpB,GAEToB,EAASA,EAAOtjC,OAAO,EAAGsjC,EAAOhpC,OAAS,GAG5C,MAAM+pC,EAAY,IAAIjD,EAAQc,EAAS2B,EAAa,IACjD3B,IAAYoB,IACbe,EAAUH,SAAWlB,EAAmBM,EAAQ7b,IAElDoc,EAAYS,SAASD,OAClB,CAEH,MAAMA,EAAY,IAAIjD,EAASc,EAAS2B,GACpCpc,EAAQ4a,UAAU/nC,QAAUmtB,EAAQ4a,UAAUp+B,SAASogC,EAAU3B,WACnE2B,EAAUF,WAAWJ,GAEpB7B,IAAYoB,IACbe,EAAUH,SAAWlB,EAAmBM,EAAQ7b,IAElDoc,EAAYS,SAASD,GACrBR,EAAcQ,EAEhBP,EAAW,GACX1mC,EAAI2mC,OAGND,GAAYN,EAAQpmC,GAGxB,OAAOwmC,I,qCClTT,IAAI/0B,EAAW,EAAQ,KACnB41B,EAAW,EAAQ,KACnB3qC,EAAS,EAAQ,KAAeA,OAEhC4qC,EAAU,IAAItgC,MAAM,IAExB,SAAS2vB,IACP0Q,EAAS5lC,KAAKjD,KAAM,IAGpBA,KAAK+oC,GAAK,WACV/oC,KAAKgpC,GAAK,WACVhpC,KAAKipC,GAAK,WACVjpC,KAAKkpC,GAAK,UA+GZ,SAASC,EAAMjiC,EAAGxE,GAChB,OAAQwE,GAAKxE,EAAMwE,IAAO,GAAKxE,EAGjC,SAAS0mC,EAAKniC,EAAGxE,EAAGwC,EAAGgP,EAAGtR,EAAGuN,EAAG+Q,GAC9B,OAAQkoB,EAAMliC,GAAMxE,EAAIwC,GAAQxC,EAAKwR,GAAMtR,EAAIuN,EAAK,EAAG+Q,GAAKxe,EAAK,EAGnE,SAAS4mC,EAAKpiC,EAAGxE,EAAGwC,EAAGgP,EAAGtR,EAAGuN,EAAG+Q,GAC9B,OAAQkoB,EAAMliC,GAAMxE,EAAIwR,EAAMhP,GAAMgP,GAAOtR,EAAIuN,EAAK,EAAG+Q,GAAKxe,EAAK,EAGnE,SAAS6mC,EAAKriC,EAAGxE,EAAGwC,EAAGgP,EAAGtR,EAAGuN,EAAG+Q,GAC9B,OAAQkoB,EAAMliC,GAAKxE,EAAIwC,EAAIgP,GAAKtR,EAAIuN,EAAK,EAAG+Q,GAAKxe,EAAK,EAGxD,SAAS8mC,EAAKtiC,EAAGxE,EAAGwC,EAAGgP,EAAGtR,EAAGuN,EAAG+Q,GAC9B,OAAQkoB,EAAMliC,GAAMhC,GAAKxC,GAAMwR,IAAQtR,EAAIuN,EAAK,EAAG+Q,GAAKxe,EAAK,EA7H/DwQ,EAASklB,EAAK0Q,GAEd1Q,EAAIz6B,UAAU4vB,QAAU,WAEtB,IADA,IAAI4O,EAAI4M,EACCtnC,EAAI,EAAGA,EAAI,KAAMA,EAAG06B,EAAE16B,GAAKxB,KAAKq3B,OAAO9sB,YAAgB,EAAJ/I,GAE5D,IAAIyF,EAAIjH,KAAK+oC,GACTtmC,EAAIzC,KAAKgpC,GACT/jC,EAAIjF,KAAKipC,GACTh1B,EAAIjU,KAAKkpC,GAEbjiC,EAAImiC,EAAIniC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,GAAI,WAAY,GACtCjoB,EAAIm1B,EAAIn1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,GAAI,WAAY,IACtCj3B,EAAImkC,EAAInkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,GAAI,UAAY,IACtCz5B,EAAI2mC,EAAI3mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,GAAI,WAAY,IACtCj1B,EAAImiC,EAAIniC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,GAAI,WAAY,GACtCjoB,EAAIm1B,EAAIn1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,GAAI,WAAY,IACtCj3B,EAAImkC,EAAInkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,GAAI,WAAY,IACtCz5B,EAAI2mC,EAAI3mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,GAAI,WAAY,IACtCj1B,EAAImiC,EAAIniC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,GAAI,WAAY,GACtCjoB,EAAIm1B,EAAIn1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,GAAI,WAAY,IACtCj3B,EAAImkC,EAAInkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,IAAK,WAAY,IACvCz5B,EAAI2mC,EAAI3mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,IAAK,WAAY,IACvCj1B,EAAImiC,EAAIniC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,IAAK,WAAY,GACvCjoB,EAAIm1B,EAAIn1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,IAAK,WAAY,IACvCj3B,EAAImkC,EAAInkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,IAAK,WAAY,IAGvCj1B,EAAIoiC,EAAIpiC,EAFRxE,EAAI2mC,EAAI3mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,IAAK,WAAY,IAEzBj3B,EAAGgP,EAAGioB,EAAE,GAAI,WAAY,GACtCjoB,EAAIo1B,EAAIp1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,GAAI,WAAY,GACtCj3B,EAAIokC,EAAIpkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,IAAK,UAAY,IACvCz5B,EAAI4mC,EAAI5mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,GAAI,WAAY,IACtCj1B,EAAIoiC,EAAIpiC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,GAAI,WAAY,GACtCjoB,EAAIo1B,EAAIp1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,IAAK,SAAY,GACvCj3B,EAAIokC,EAAIpkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,IAAK,WAAY,IACvCz5B,EAAI4mC,EAAI5mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,GAAI,WAAY,IACtCj1B,EAAIoiC,EAAIpiC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,GAAI,UAAY,GACtCjoB,EAAIo1B,EAAIp1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,IAAK,WAAY,GACvCj3B,EAAIokC,EAAIpkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,GAAI,WAAY,IACtCz5B,EAAI4mC,EAAI5mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,GAAI,WAAY,IACtCj1B,EAAIoiC,EAAIpiC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,IAAK,WAAY,GACvCjoB,EAAIo1B,EAAIp1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,GAAI,WAAY,GACtCj3B,EAAIokC,EAAIpkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,GAAI,WAAY,IAGtCj1B,EAAIqiC,EAAIriC,EAFRxE,EAAI4mC,EAAI5mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,IAAK,WAAY,IAEzBj3B,EAAGgP,EAAGioB,EAAE,GAAI,WAAY,GACtCjoB,EAAIq1B,EAAIr1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,GAAI,WAAY,IACtCj3B,EAAIqkC,EAAIrkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,IAAK,WAAY,IACvCz5B,EAAI6mC,EAAI7mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,IAAK,WAAY,IACvCj1B,EAAIqiC,EAAIriC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,GAAI,WAAY,GACtCjoB,EAAIq1B,EAAIr1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,GAAI,WAAY,IACtCj3B,EAAIqkC,EAAIrkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,GAAI,WAAY,IACtCz5B,EAAI6mC,EAAI7mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,IAAK,WAAY,IACvCj1B,EAAIqiC,EAAIriC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,IAAK,UAAY,GACvCjoB,EAAIq1B,EAAIr1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,GAAI,WAAY,IACtCj3B,EAAIqkC,EAAIrkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,GAAI,WAAY,IACtCz5B,EAAI6mC,EAAI7mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,GAAI,SAAY,IACtCj1B,EAAIqiC,EAAIriC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,GAAI,WAAY,GACtCjoB,EAAIq1B,EAAIr1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,IAAK,WAAY,IACvCj3B,EAAIqkC,EAAIrkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,IAAK,UAAY,IAGvCj1B,EAAIsiC,EAAItiC,EAFRxE,EAAI6mC,EAAI7mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,GAAI,WAAY,IAExBj3B,EAAGgP,EAAGioB,EAAE,GAAI,WAAY,GACtCjoB,EAAIs1B,EAAIt1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,GAAI,WAAY,IACtCj3B,EAAIskC,EAAItkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,IAAK,WAAY,IACvCz5B,EAAI8mC,EAAI9mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,GAAI,WAAY,IACtCj1B,EAAIsiC,EAAItiC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,IAAK,WAAY,GACvCjoB,EAAIs1B,EAAIt1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,GAAI,WAAY,IACtCj3B,EAAIskC,EAAItkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,IAAK,WAAY,IACvCz5B,EAAI8mC,EAAI9mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,GAAI,WAAY,IACtCj1B,EAAIsiC,EAAItiC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,GAAI,WAAY,GACtCjoB,EAAIs1B,EAAIt1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,IAAK,WAAY,IACvCj3B,EAAIskC,EAAItkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,GAAI,WAAY,IACtCz5B,EAAI8mC,EAAI9mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,IAAK,WAAY,IACvCj1B,EAAIsiC,EAAItiC,EAAGxE,EAAGwC,EAAGgP,EAAGioB,EAAE,GAAI,WAAY,GACtCjoB,EAAIs1B,EAAIt1B,EAAGhN,EAAGxE,EAAGwC,EAAGi3B,EAAE,IAAK,WAAY,IACvCj3B,EAAIskC,EAAItkC,EAAGgP,EAAGhN,EAAGxE,EAAGy5B,EAAE,GAAI,UAAY,IACtCz5B,EAAI8mC,EAAI9mC,EAAGwC,EAAGgP,EAAGhN,EAAGi1B,EAAE,GAAI,WAAY,IAEtCl8B,KAAK+oC,GAAM/oC,KAAK+oC,GAAK9hC,EAAK,EAC1BjH,KAAKgpC,GAAMhpC,KAAKgpC,GAAKvmC,EAAK,EAC1BzC,KAAKipC,GAAMjpC,KAAKipC,GAAKhkC,EAAK,EAC1BjF,KAAKkpC,GAAMlpC,KAAKkpC,GAAKj1B,EAAK,GAG5BkkB,EAAIz6B,UAAU87B,QAAU,WAEtBx5B,KAAKq3B,OAAOr3B,KAAKwpC,gBAAkB,IAC/BxpC,KAAKwpC,aAAe,KACtBxpC,KAAKq3B,OAAOp4B,KAAK,EAAGe,KAAKwpC,aAAc,IACvCxpC,KAAKstB,UACLttB,KAAKwpC,aAAe,GAGtBxpC,KAAKq3B,OAAOp4B,KAAK,EAAGe,KAAKwpC,aAAc,IACvCxpC,KAAKq3B,OAAOlsB,cAAcnL,KAAKypC,QAAQ,GAAI,IAC3CzpC,KAAKq3B,OAAOlsB,cAAcnL,KAAKypC,QAAQ,GAAI,IAC3CzpC,KAAKstB,UAGL,IAAIrvB,EAASC,EAAOW,YAAY,IAKhC,OAJAZ,EAAO2N,aAAa5L,KAAK+oC,GAAI,GAC7B9qC,EAAO2N,aAAa5L,KAAKgpC,GAAI,GAC7B/qC,EAAO2N,aAAa5L,KAAKipC,GAAI,GAC7BhrC,EAAO2N,aAAa5L,KAAKkpC,GAAI,IACtBjrC,GAuBTZ,EAAOC,QAAU66B,G,6BCzFjB,SAASuR,EAAQn4B,GAEf,IACE,IAAKlL,EAAOsjC,aAAc,OAAO,EACjC,MAAOrnB,GACP,OAAO,EAET,IAAInhB,EAAMkF,EAAOsjC,aAAap4B,GAC9B,OAAI,MAAQpQ,GACyB,SAA9BoC,OAAOpC,GAAKW,cA5DrBzE,EAAOC,QAoBP,SAAoB8P,EAAI6B,GACtB,GAAIy6B,EAAO,iBACT,OAAOt8B,EAGT,IAAIgjB,GAAS,EAeb,OAdA,WACE,IAAKA,EAAQ,CACX,GAAIsZ,EAAO,oBACT,MAAM,IAAIzpC,MAAMgP,GACPy6B,EAAO,oBAChBpZ,QAAQsZ,MAAM36B,GAEdqhB,QAAQC,KAAKthB,GAEfmhB,GAAS,EAEX,OAAOhjB,EAAGlH,MAAMlG,KAAM0H,e,+CCtC1B,IAAImiC,EAA6B,EAAQ,KAAmBhU,MAAMgU,2BAgBlE,SAASC,KAmFTzsC,EAAOC,QA7EP,SAASysC,EAAIC,EAAQC,EAAMC,GACzB,GAAoB,mBAATD,EAAqB,OAAOF,EAAIC,EAAQ,KAAMC,GACpDA,IAAMA,EAAO,IAClBC,EAvBF,SAAcA,GACZ,IAAIC,GAAS,EACb,OAAO,WACL,IAAIA,EAAJ,CACAA,GAAS,EAET,IAAK,IAAI3S,EAAO9vB,UAAUhJ,OAAQ2vB,EAAO,IAAI7lB,MAAMgvB,GAAOqG,EAAO,EAAGA,EAAOrG,EAAMqG,IAC/ExP,EAAKwP,GAAQn2B,UAAUm2B,GAGzBqM,EAAShkC,MAAMlG,KAAMquB,KAaZQ,CAAKqb,GAAYJ,GAC5B,IAAI1V,EAAW6V,EAAK7V,WAA8B,IAAlB6V,EAAK7V,UAAsB4V,EAAO5V,SAC9Dt2B,EAAWmsC,EAAKnsC,WAA8B,IAAlBmsC,EAAKnsC,UAAsBksC,EAAOlsC,SAE9DssC,EAAiB,WACdJ,EAAOlsC,UAAUusC,KAGpBC,EAAgBN,EAAOzV,gBAAkByV,EAAOzV,eAAegW,SAE/DF,EAAW,WACbvsC,GAAW,EACXwsC,GAAgB,EACXlW,GAAU8V,EAASjnC,KAAK+mC,IAG3BQ,EAAgBR,EAAOpV,gBAAkBoV,EAAOpV,eAAe6V,WAE/DnW,EAAQ,WACVF,GAAW,EACXoW,GAAgB,EACX1sC,GAAUosC,EAASjnC,KAAK+mC,IAG3BpO,EAAU,SAAiB7pB,GAC7Bm4B,EAASjnC,KAAK+mC,EAAQj4B,IAGpB0pB,EAAU,WACZ,IAAI1pB,EAEJ,OAAIqiB,IAAaoW,GACVR,EAAOpV,gBAAmBoV,EAAOpV,eAAeJ,QAAOziB,EAAM,IAAI83B,GAC/DK,EAASjnC,KAAK+mC,EAAQj4B,IAG3BjU,IAAawsC,GACVN,EAAOzV,gBAAmByV,EAAOzV,eAAeC,QAAOziB,EAAM,IAAI83B,GAC/DK,EAASjnC,KAAK+mC,EAAQj4B,SAF/B,GAME24B,EAAY,WACdV,EAAOW,IAAI7Y,GAAG,SAAUuY,IAiB1B,OAnEF,SAAmBL,GACjB,OAAOA,EAAOY,WAAqC,mBAAjBZ,EAAOa,MAoDrCC,CAAUd,GAIHlsC,IAAaksC,EAAOzV,iBAE7ByV,EAAOlY,GAAG,MAAOsY,GACjBJ,EAAOlY,GAAG,QAASsY,KANnBJ,EAAOlY,GAAG,WAAYuY,GACtBL,EAAOlY,GAAG,QAAS2J,GACfuO,EAAOW,IAAKD,IAAiBV,EAAOlY,GAAG,UAAW4Y,IAOxDV,EAAOlY,GAAG,MAAOwC,GACjB0V,EAAOlY,GAAG,SAAUuY,IACD,IAAfJ,EAAK1Y,OAAiByY,EAAOlY,GAAG,QAAS8J,GAC7CoO,EAAOlY,GAAG,QAAS2J,GACZ,WACLuO,EAAO5a,eAAe,WAAYib,GAClCL,EAAO5a,eAAe,QAASqM,GAC/BuO,EAAO5a,eAAe,UAAWsb,GAC7BV,EAAOW,KAAKX,EAAOW,IAAIvb,eAAe,SAAUib,GACpDL,EAAO5a,eAAe,MAAOgb,GAC7BJ,EAAO5a,eAAe,QAASgb,GAC/BJ,EAAO5a,eAAe,SAAUib,GAChCL,EAAO5a,eAAe,MAAOkF,GAC7B0V,EAAO5a,eAAe,QAASwM,GAC/BoO,EAAO5a,eAAe,QAASqM,M,6BClGnC,IAAIv9B,EAAS,EAAQ,KAAUA,OAC3B+U,EAAW,EAAQ,KACnB41B,EAAW,EAAQ,KAEnBC,EAAU,IAAItgC,MAAM,IAEpBuiC,EAAK,CACP,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAClD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EACnD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAClD,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EACnD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,IAGhDC,EAAK,CACP,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAClD,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EACnD,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAClD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAClD,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,IAGhDC,EAAK,CACP,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EACrD,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GACpD,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EACrD,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GACpD,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAGnDC,EAAK,CACP,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EACrD,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GACpD,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EACrD,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EACrD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,IAGlDC,EAAK,CAAC,EAAY,WAAY,WAAY,WAAY,YACtDC,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,GAE1D,SAAShT,IACPyQ,EAAS5lC,KAAKjD,KAAM,IAGpBA,KAAK+oC,GAAK,WACV/oC,KAAKgpC,GAAK,WACVhpC,KAAKipC,GAAK,WACVjpC,KAAKkpC,GAAK,UACVlpC,KAAKqrC,GAAK,WAwFZ,SAASlC,EAAMjiC,EAAGxE,GAChB,OAAQwE,GAAKxE,EAAMwE,IAAO,GAAKxE,EAGjC,SAAS4oC,EAAKrkC,EAAGxE,EAAGwC,EAAGgP,EAAGzN,EAAG7D,EAAGuN,EAAG+Q,GACjC,OAAQkoB,EAAMliC,GAAKxE,EAAIwC,EAAIgP,GAAKtR,EAAIuN,EAAK,EAAG+Q,GAAKza,EAAK,EAGxD,SAAS+kC,EAAKtkC,EAAGxE,EAAGwC,EAAGgP,EAAGzN,EAAG7D,EAAGuN,EAAG+Q,GACjC,OAAQkoB,EAAMliC,GAAMxE,EAAIwC,GAAQxC,EAAKwR,GAAMtR,EAAIuN,EAAK,EAAG+Q,GAAKza,EAAK,EAGnE,SAASglC,EAAKvkC,EAAGxE,EAAGwC,EAAGgP,EAAGzN,EAAG7D,EAAGuN,EAAG+Q,GACjC,OAAQkoB,EAAMliC,IAAMxE,GAAMwC,GAAMgP,GAAKtR,EAAIuN,EAAK,EAAG+Q,GAAKza,EAAK,EAG7D,SAASilC,EAAKxkC,EAAGxE,EAAGwC,EAAGgP,EAAGzN,EAAG7D,EAAGuN,EAAG+Q,GACjC,OAAQkoB,EAAMliC,GAAMxE,EAAIwR,EAAMhP,GAAMgP,GAAOtR,EAAIuN,EAAK,EAAG+Q,GAAKza,EAAK,EAGnE,SAASklC,EAAKzkC,EAAGxE,EAAGwC,EAAGgP,EAAGzN,EAAG7D,EAAGuN,EAAG+Q,GACjC,OAAQkoB,EAAMliC,GAAKxE,GAAKwC,GAAMgP,IAAOtR,EAAIuN,EAAK,EAAG+Q,GAAKza,EAAK,EA1G7DyM,EAASmlB,EAAWyQ,GAEpBzQ,EAAU16B,UAAU4vB,QAAU,WAE5B,IADA,IAAIzX,EAAQizB,EACHllC,EAAI,EAAGA,EAAI,KAAMA,EAAGiS,EAAMjS,GAAK5D,KAAKq3B,OAAO9sB,YAAgB,EAAJ3G,GAehE,IAbA,IAAIyQ,EAAe,EAAVrU,KAAK+oC,GACVv0B,EAAe,EAAVxU,KAAKgpC,GACVp0B,EAAe,EAAV5U,KAAKipC,GACVn0B,EAAe,EAAV9U,KAAKkpC,GACV/zB,EAAe,EAAVnV,KAAKqrC,GAEVM,EAAe,EAAV3rC,KAAK+oC,GACV6C,EAAe,EAAV5rC,KAAKgpC,GACV6C,EAAe,EAAV7rC,KAAKipC,GACV6C,EAAe,EAAV9rC,KAAKkpC,GACV1X,EAAe,EAAVxxB,KAAKqrC,GAGL7pC,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC9B,IAAIuqC,EACAC,EACAxqC,EAAI,IACNuqC,EAAKT,EAAIj3B,EAAIG,EAAII,EAAIE,EAAIK,EAAIU,EAAMk1B,EAAGvpC,IAAK2pC,EAAG,GAAIF,EAAGzpC,IACrDwqC,EAAKN,EAAIC,EAAIC,EAAIC,EAAIC,EAAIta,EAAI3b,EAAMm1B,EAAGxpC,IAAK4pC,EAAG,GAAIF,EAAG1pC,KAC5CA,EAAI,IACbuqC,EAAKR,EAAIl3B,EAAIG,EAAII,EAAIE,EAAIK,EAAIU,EAAMk1B,EAAGvpC,IAAK2pC,EAAG,GAAIF,EAAGzpC,IACrDwqC,EAAKP,EAAIE,EAAIC,EAAIC,EAAIC,EAAIta,EAAI3b,EAAMm1B,EAAGxpC,IAAK4pC,EAAG,GAAIF,EAAG1pC,KAC5CA,EAAI,IACbuqC,EAAKP,EAAIn3B,EAAIG,EAAII,EAAIE,EAAIK,EAAIU,EAAMk1B,EAAGvpC,IAAK2pC,EAAG,GAAIF,EAAGzpC,IACrDwqC,EAAKR,EAAIG,EAAIC,EAAIC,EAAIC,EAAIta,EAAI3b,EAAMm1B,EAAGxpC,IAAK4pC,EAAG,GAAIF,EAAG1pC,KAC5CA,EAAI,IACbuqC,EAAKN,EAAIp3B,EAAIG,EAAII,EAAIE,EAAIK,EAAIU,EAAMk1B,EAAGvpC,IAAK2pC,EAAG,GAAIF,EAAGzpC,IACrDwqC,EAAKT,EAAII,EAAIC,EAAIC,EAAIC,EAAIta,EAAI3b,EAAMm1B,EAAGxpC,IAAK4pC,EAAG,GAAIF,EAAG1pC,MAErDuqC,EAAKL,EAAIr3B,EAAIG,EAAII,EAAIE,EAAIK,EAAIU,EAAMk1B,EAAGvpC,IAAK2pC,EAAG,GAAIF,EAAGzpC,IACrDwqC,EAAKV,EAAIK,EAAIC,EAAIC,EAAIC,EAAIta,EAAI3b,EAAMm1B,EAAGxpC,IAAK4pC,EAAG,GAAIF,EAAG1pC,KAGvD6S,EAAKc,EACLA,EAAKL,EACLA,EAAKq0B,EAAKv0B,EAAI,IACdA,EAAKJ,EACLA,EAAKu3B,EAELJ,EAAKna,EACLA,EAAKsa,EACLA,EAAK3C,EAAK0C,EAAI,IACdA,EAAKD,EACLA,EAAKI,EAIP,IAAIrzB,EAAK3Y,KAAKgpC,GAAKp0B,EAAKk3B,EAAM,EAC9B9rC,KAAKgpC,GAAMhpC,KAAKipC,GAAKn0B,EAAK0c,EAAM,EAChCxxB,KAAKipC,GAAMjpC,KAAKkpC,GAAK/zB,EAAKw2B,EAAM,EAChC3rC,KAAKkpC,GAAMlpC,KAAKqrC,GAAKh3B,EAAKu3B,EAAM,EAChC5rC,KAAKqrC,GAAMrrC,KAAK+oC,GAAKv0B,EAAKq3B,EAAM,EAChC7rC,KAAK+oC,GAAKpwB,GAGZyf,EAAU16B,UAAU87B,QAAU,WAE5Bx5B,KAAKq3B,OAAOr3B,KAAKwpC,gBAAkB,IAC/BxpC,KAAKwpC,aAAe,KACtBxpC,KAAKq3B,OAAOp4B,KAAK,EAAGe,KAAKwpC,aAAc,IACvCxpC,KAAKstB,UACLttB,KAAKwpC,aAAe,GAGtBxpC,KAAKq3B,OAAOp4B,KAAK,EAAGe,KAAKwpC,aAAc,IACvCxpC,KAAKq3B,OAAOlsB,cAAcnL,KAAKypC,QAAQ,GAAI,IAC3CzpC,KAAKq3B,OAAOlsB,cAAcnL,KAAKypC,QAAQ,GAAI,IAC3CzpC,KAAKstB,UAGL,IAAIrvB,EAASC,EAAOU,MAAQV,EAAOU,MAAM,IAAM,IAAIV,EAAO,IAM1D,OALAD,EAAO2N,aAAa5L,KAAK+oC,GAAI,GAC7B9qC,EAAO2N,aAAa5L,KAAKgpC,GAAI,GAC7B/qC,EAAO2N,aAAa5L,KAAKipC,GAAI,GAC7BhrC,EAAO2N,aAAa5L,KAAKkpC,GAAI,IAC7BjrC,EAAO2N,aAAa5L,KAAKqrC,GAAI,IACtBptC,GA2BTZ,EAAOC,QAAU86B,G,iBClKb96B,EAAUD,EAAOC,QAAU,SAAcwmC,GAC3CA,EAAYA,EAAUhiC,cAEtB,IAAImqC,EAAY3uC,EAAQwmC,GACxB,IAAKmI,EAAW,MAAM,IAAIhsC,MAAM6jC,EAAY,+CAE5C,OAAO,IAAImI,IAGL5T,IAAM,EAAQ,KACtB/6B,EAAQ4uC,KAAO,EAAQ,KACvB5uC,EAAQ6uC,OAAS,EAAQ,KACzB7uC,EAAQ8uC,OAAS,EAAQ,KACzB9uC,EAAQ+uC,OAAS,EAAQ,KACzB/uC,EAAQgvC,OAAS,EAAQ,M,iBCdzBhvC,EAAUD,EAAOC,QAAU,EAAQ,MAC3By9B,OAASz9B,EACjBA,EAAQ22B,SAAW32B,EACnBA,EAAQ42B,SAAW,EAAQ,KAC3B52B,EAAQy2B,OAAS,EAAQ,KACzBz2B,EAAQkvB,UAAY,EAAQ,KAC5BlvB,EAAQ29B,YAAc,EAAQ,M,8BCN9B,gBA6BA,IAAIpH,EAAM,EAAQ,KAelB,SAAS0Y,EAAc3b,GACrB,IAAI4b,EAAQxsC,KAEZA,KAAKuqB,KAAO,KACZvqB,KAAKysC,MAAQ,KACbzsC,KAAK0sC,OAAS,YAolBhB,SAAwBC,EAAS/b,EAAO7e,GACtC,IAAI06B,EAAQE,EAAQF,MACpBE,EAAQF,MAAQ,KAChB,KAAOA,GAAO,CACZ,IAAI1X,EAAK0X,EAAMvC,SACftZ,EAAMgc,YACN7X,EAAGhjB,GACH06B,EAAQA,EAAMliB,KAEZqG,EAAMic,mBACRjc,EAAMic,mBAAmBtiB,KAAOoiB,EAEhC/b,EAAMic,mBAAqBF,EA/lB3BG,CAAeN,EAAO5b,IAlB1BvzB,EAAOC,QAAU42B,EAwBjB,IAIIH,EAJAgZ,GAAcnX,EAAQoX,SAAW,CAAC,QAAS,SAAShqC,QAAQ4yB,EAAQkG,QAAQl7B,MAAM,EAAG,KAAO,EAAIqsC,EAAepZ,EAAIY,SAOvHP,EAASgZ,cAAgBA,EAGzB,IAAIlZ,EAAO,EAAQ,KACnBA,EAAK/gB,SAAW,EAAQ,KAIxB,IAAIk6B,EAAe,CACjBt6B,UAAW,EAAQ,MAKjBkoB,EAAS,EAAQ,KAKjB78B,EAAS,EAAQ,KAAeA,OAChCkvC,EAAgB/mC,EAAOvG,YAAc,aAUzC,IA2IIutC,EA3IAC,EAAc,EAAQ,KAI1B,SAASC,KAET,SAASL,EAAcrhB,EAASme,GAC9BjW,EAASA,GAAU,EAAQ,KAE3BlI,EAAUA,GAAW,GAOrB,IAAI2hB,EAAWxD,aAAkBjW,EAIjC/zB,KAAKytC,aAAe5hB,EAAQ4hB,WAExBD,IAAUxtC,KAAKytC,WAAaztC,KAAKytC,cAAgB5hB,EAAQ6hB,oBAK7D,IAAIC,EAAM9hB,EAAQ8I,cACdiZ,EAAc/hB,EAAQgiB,sBACtBC,EAAa9tC,KAAKytC,WAAa,GAAK,MAElBztC,KAAK20B,cAAvBgZ,GAAe,IAARA,EAAgCA,EAAaH,IAAaI,GAA+B,IAAhBA,GAAyCA,EAAsCE,EAGnK9tC,KAAK20B,cAAgBrvB,KAAK0F,MAAMhL,KAAK20B,eAGrC30B,KAAK+tC,aAAc,EAGnB/tC,KAAKguC,WAAY,EAEjBhuC,KAAKiuC,QAAS,EAEdjuC,KAAKw0B,OAAQ,EAEbx0B,KAAKuqC,UAAW,EAGhBvqC,KAAK60B,WAAY,EAKjB,IAAIqZ,GAAqC,IAA1BriB,EAAQsiB,cACvBnuC,KAAKmuC,eAAiBD,EAKtBluC,KAAKouC,gBAAkBviB,EAAQuiB,iBAAmB,OAKlDpuC,KAAKtB,OAAS,EAGdsB,KAAKquC,SAAU,EAGfruC,KAAKsuC,OAAS,EAMdtuC,KAAKuuC,MAAO,EAKZvuC,KAAKwuC,kBAAmB,EAGxBxuC,KAAKyuC,QAAU,SAAUjd,IA4R3B,SAAiBwY,EAAQxY,GACvB,IAAIZ,EAAQoZ,EAAOzV,eACfga,EAAO3d,EAAM2d,KACbxZ,EAAKnE,EAAM8d,QAIf,GAdF,SAA4B9d,GAC1BA,EAAMyd,SAAU,EAChBzd,EAAM8d,QAAU,KAChB9d,EAAMlyB,QAAUkyB,EAAM+d,SACtB/d,EAAM+d,SAAW,EAQjBC,CAAmBhe,GAEfY,GAtCN,SAAsBwY,EAAQpZ,EAAO2d,EAAM/c,EAAIuD,KAC3CnE,EAAMgc,UAEJ2B,GAGF1a,EAAIY,SAASM,EAAIvD,GAGjBqC,EAAIY,SAASoa,EAAa7E,EAAQpZ,GAClCoZ,EAAOzV,eAAeua,cAAe,EACrC9E,EAAO9Z,KAAK,QAASsB,KAIrBuD,EAAGvD,GACHwY,EAAOzV,eAAeua,cAAe,EACrC9E,EAAO9Z,KAAK,QAASsB,GAGrBqd,EAAY7E,EAAQpZ,IAkBdme,CAAa/E,EAAQpZ,EAAO2d,EAAM/c,EAAIuD,OAAS,CAErD,IAAIwV,EAAWyE,EAAWpe,GAErB2Z,GAAa3Z,EAAM0d,QAAW1d,EAAM4d,mBAAoB5d,EAAMqe,iBACjEC,EAAYlF,EAAQpZ,GAGlB2d,EAEFxB,EAAWoC,EAAYnF,EAAQpZ,EAAO2Z,EAAUxV,GAGhDoa,EAAWnF,EAAQpZ,EAAO2Z,EAAUxV,IA/StC0Z,CAAQzE,EAAQxY,IAIlBxxB,KAAK0uC,QAAU,KAGf1uC,KAAK2uC,SAAW,EAEhB3uC,KAAKivC,gBAAkB,KACvBjvC,KAAKovC,oBAAsB,KAI3BpvC,KAAK4sC,UAAY,EAIjB5sC,KAAKqvC,aAAc,EAGnBrvC,KAAK8uC,cAAe,EAGpB9uC,KAAKsvC,qBAAuB,EAI5BtvC,KAAK6sC,mBAAqB,IAAIN,EAAcvsC,MA0C9C,SAASk0B,EAASrI,GAUhB,GATAkI,EAASA,GAAU,EAAQ,OAStBsZ,EAAgBpqC,KAAKixB,EAAUl0B,OAAWA,gBAAgB+zB,GAC7D,OAAO,IAAIG,EAASrI,GAGtB7rB,KAAKu0B,eAAiB,IAAI2Y,EAAcrhB,EAAS7rB,MAGjDA,KAAKlC,UAAW,EAEZ+tB,IAC2B,mBAAlBA,EAAQlrB,QAAsBX,KAAKuvC,OAAS1jB,EAAQlrB,OAEjC,mBAAnBkrB,EAAQ2jB,SAAuBxvC,KAAKyvC,QAAU5jB,EAAQ2jB,QAElC,mBAApB3jB,EAAQ8P,UAAwB37B,KAAK80B,SAAWjJ,EAAQ8P,SAEtC,mBAAlB9P,EAAQgB,QAAsB7sB,KAAK8sB,OAASjB,EAAQgB,QAGjEkO,EAAO93B,KAAKjD,MAgJd,SAAS0vC,EAAQ1F,EAAQpZ,EAAO4e,EAAQxuC,EAAKo6B,EAAOl8B,EAAU61B,GAC5DnE,EAAM+d,SAAW3tC,EACjB4vB,EAAM8d,QAAU3Z,EAChBnE,EAAMyd,SAAU,EAChBzd,EAAM2d,MAAO,EACTiB,EAAQxF,EAAOyF,QAAQrU,EAAOxK,EAAM6d,SAAczE,EAAOuF,OAAOnU,EAAOl8B,EAAU0xB,EAAM6d,SAC3F7d,EAAM2d,MAAO,EA2Df,SAASY,EAAWnF,EAAQpZ,EAAO2Z,EAAUxV,GACtCwV,GASP,SAAsBP,EAAQpZ,GACP,IAAjBA,EAAMlyB,QAAgBkyB,EAAMod,YAC9Bpd,EAAMod,WAAY,EAClBhE,EAAO9Z,KAAK,UAZCyf,CAAa3F,EAAQpZ,GACpCA,EAAMgc,YACN7X,IACA8Z,EAAY7E,EAAQpZ,GActB,SAASse,EAAYlF,EAAQpZ,GAC3BA,EAAM4d,kBAAmB,EACzB,IAAI/B,EAAQ7b,EAAMqe,gBAElB,GAAIjF,EAAOyF,SAAWhD,GAASA,EAAMliB,KAAM,CAEzC,IAAIld,EAAIujB,EAAM0e,qBACVrxC,EAAS,IAAIuK,MAAM6E,GACnBuiC,EAAShf,EAAMic,mBACnB+C,EAAOnD,MAAQA,EAIf,IAFA,IAAIpc,EAAQ,EACRwf,GAAa,EACVpD,GACLxuC,EAAOoyB,GAASoc,EACXA,EAAMqD,QAAOD,GAAa,GAC/BpD,EAAQA,EAAMliB,KACd8F,GAAS,EAEXpyB,EAAO4xC,WAAaA,EAEpBH,EAAQ1F,EAAQpZ,GAAO,EAAMA,EAAMlyB,OAAQT,EAAQ,GAAI2xC,EAAOlD,QAI9D9b,EAAMgc,YACNhc,EAAMwe,oBAAsB,KACxBQ,EAAOrlB,MACTqG,EAAMic,mBAAqB+C,EAAOrlB,KAClCqlB,EAAOrlB,KAAO,MAEdqG,EAAMic,mBAAqB,IAAIN,EAAc3b,GAE/CA,EAAM0e,qBAAuB,MACxB,CAEL,KAAO7C,GAAO,CACZ,IAAIrR,EAAQqR,EAAMrR,MACdl8B,EAAWutC,EAAMvtC,SACjB61B,EAAK0X,EAAMvC,SAUf,GAPAwF,EAAQ1F,EAAQpZ,GAAO,EAFbA,EAAM6c,WAAa,EAAIrS,EAAM18B,OAEJ08B,EAAOl8B,EAAU61B,GACpD0X,EAAQA,EAAMliB,KACdqG,EAAM0e,uBAKF1e,EAAMyd,QACR,MAIU,OAAV5B,IAAgB7b,EAAMwe,oBAAsB,MAGlDxe,EAAMqe,gBAAkBxC,EACxB7b,EAAM4d,kBAAmB,EAiC3B,SAASQ,EAAWpe,GAClB,OAAOA,EAAMqd,QAA2B,IAAjBrd,EAAMlyB,QAA0C,OAA1BkyB,EAAMqe,kBAA6Bre,EAAM2Z,WAAa3Z,EAAMyd,QAE3G,SAAS0B,EAAU/F,EAAQpZ,GACzBoZ,EAAOld,QAAO,SAAU/a,GACtB6e,EAAMgc,YACF76B,GACFi4B,EAAO9Z,KAAK,QAASne,GAEvB6e,EAAMye,aAAc,EACpBrF,EAAO9Z,KAAK,aACZ2e,EAAY7E,EAAQpZ,MAgBxB,SAASie,EAAY7E,EAAQpZ,GAC3B,IAAIof,EAAOhB,EAAWpe,GAQtB,OAPIof,KAfN,SAAmBhG,EAAQpZ,GACpBA,EAAMye,aAAgBze,EAAMmd,cACF,mBAAlB/D,EAAOld,QAChB8D,EAAMgc,YACNhc,EAAMmd,aAAc,EACpBla,EAAIY,SAASsb,EAAW/F,EAAQpZ,KAEhCA,EAAMye,aAAc,EACpBrF,EAAO9Z,KAAK,eAQd+f,CAAUjG,EAAQpZ,GACM,IAApBA,EAAMgc,YACRhc,EAAM2Z,UAAW,EACjBP,EAAO9Z,KAAK,YAGT8f,EAzhBThc,EAAK/gB,SAASihB,EAAU6G,GAmHxBmS,EAAcxvC,UAAUu5B,UAAY,WAGlC,IAFA,IAAInM,EAAU9qB,KAAKivC,gBACftmC,EAAM,GACHmiB,GACLniB,EAAIjE,KAAKomB,GACTA,EAAUA,EAAQP,KAEpB,OAAO5hB,GAGT,WACE,IACExL,OAAO2J,eAAeomC,EAAcxvC,UAAW,SAAU,CACvDsV,IAAKm6B,EAAat6B,WAAU,WAC1B,OAAO7S,KAAKi3B,cACX,6EAAmF,aAExF,MAAO3U,KAPX,GAasB,mBAAX1b,QAAyBA,OAAOspC,aAAiE,mBAA3C5hB,SAAS5wB,UAAUkJ,OAAOspC,cACzF7C,EAAkB/e,SAAS5wB,UAAUkJ,OAAOspC,aAC5C/yC,OAAO2J,eAAeotB,EAAUttB,OAAOspC,YAAa,CAClDtyC,MAAO,SAAUuyC,GACf,QAAI9C,EAAgBpqC,KAAKjD,KAAMmwC,IAC3BnwC,OAASk0B,IAENic,GAAUA,EAAO5b,0BAA0B2Y,OAItDG,EAAkB,SAAU8C,GAC1B,OAAOA,aAAkBnwC,MAqC7Bk0B,EAASx2B,UAAUuQ,KAAO,WACxBjO,KAAKkwB,KAAK,QAAS,IAAIjwB,MAAM,+BA8B/Bi0B,EAASx2B,UAAUiD,MAAQ,SAAUy6B,EAAOl8B,EAAU61B,GACpD,IAnOqBj0B,EAmOjB8vB,EAAQ5wB,KAAKu0B,eACb7rB,GAAM,EACNonC,GAASlf,EAAM6c,aArOE3sC,EAqO0Bs6B,EApOxCl9B,EAAO6C,SAASD,IAAQA,aAAessC,GAwP9C,OAlBI0C,IAAU5xC,EAAO6C,SAASq6B,KAC5BA,EA3OJ,SAA6BA,GAC3B,OAAOl9B,EAAOS,KAAKy8B,GA0OTgV,CAAoBhV,IAGN,mBAAbl8B,IACT61B,EAAK71B,EACLA,EAAW,MAGT4wC,EAAO5wC,EAAW,SAAmBA,IAAUA,EAAW0xB,EAAMwd,iBAElD,mBAAPrZ,IAAmBA,EAAKwY,GAE/B3c,EAAM4D,MA7CZ,SAAuBwV,EAAQjV,GAC7B,IAAIvD,EAAK,IAAIvxB,MAAM,mBAEnB+pC,EAAO9Z,KAAK,QAASsB,GACrBqC,EAAIY,SAASM,EAAIvD,GAyCA6e,CAAcrwC,KAAM+0B,IAAa+a,GAnCpD,SAAoB9F,EAAQpZ,EAAOwK,EAAOrG,GACxC,IAAIub,GAAQ,EACR9e,GAAK,EAYT,OAVc,OAAV4J,EACF5J,EAAK,IAAIzyB,UAAU,uCACO,iBAAVq8B,QAAgCh8B,IAAVg8B,GAAwBxK,EAAM6c,aACpEjc,EAAK,IAAIzyB,UAAU,oCAEjByyB,IACFwY,EAAO9Z,KAAK,QAASsB,GACrBqC,EAAIY,SAASM,EAAIvD,GACjB8e,GAAQ,GAEHA,EAqBoDC,CAAWvwC,KAAM4wB,EAAOwK,EAAOrG,MACxFnE,EAAMgc,YACNlkC,EAkDJ,SAAuBshC,EAAQpZ,EAAOkf,EAAO1U,EAAOl8B,EAAU61B,GAC5D,IAAK+a,EAAO,CACV,IAAIU,EAtBR,SAAqB5f,EAAOwK,EAAOl8B,GAC5B0xB,EAAM6c,aAAsC,IAAxB7c,EAAMud,eAA4C,iBAAV/S,IAC/DA,EAAQl9B,EAAOS,KAAKy8B,EAAOl8B,IAE7B,OAAOk8B,EAkBUqV,CAAY7f,EAAOwK,EAAOl8B,GACrCk8B,IAAUoV,IACZV,GAAQ,EACR5wC,EAAW,SACXk8B,EAAQoV,GAGZ,IAAIxvC,EAAM4vB,EAAM6c,WAAa,EAAIrS,EAAM18B,OAEvCkyB,EAAMlyB,QAAUsC,EAEhB,IAAI0H,EAAMkoB,EAAMlyB,OAASkyB,EAAM+D,cAE1BjsB,IAAKkoB,EAAMod,WAAY,GAE5B,GAAIpd,EAAMyd,SAAWzd,EAAM0d,OAAQ,CACjC,IAAIoC,EAAO9f,EAAMwe,oBACjBxe,EAAMwe,oBAAsB,CAC1BhU,MAAOA,EACPl8B,SAAUA,EACV4wC,MAAOA,EACP5F,SAAUnV,EACVxK,KAAM,MAEJmmB,EACFA,EAAKnmB,KAAOqG,EAAMwe,oBAElBxe,EAAMqe,gBAAkBre,EAAMwe,oBAEhCxe,EAAM0e,sBAAwB,OAE9BI,EAAQ1F,EAAQpZ,GAAO,EAAO5vB,EAAKo6B,EAAOl8B,EAAU61B,GAGtD,OAAOrsB,EAtFCioC,CAAc3wC,KAAM4wB,EAAOkf,EAAO1U,EAAOl8B,EAAU61B,IAGpDrsB,GAGTwrB,EAASx2B,UAAUkzC,KAAO,WACZ5wC,KAAKu0B,eAEX+Z,UAGRpa,EAASx2B,UAAUmzC,OAAS,WAC1B,IAAIjgB,EAAQ5wB,KAAKu0B,eAEb3D,EAAM0d,SACR1d,EAAM0d,SAED1d,EAAMyd,SAAYzd,EAAM0d,QAAW1d,EAAM2Z,UAAa3Z,EAAM4d,mBAAoB5d,EAAMqe,iBAAiBC,EAAYlvC,KAAM4wB,KAIlIsD,EAASx2B,UAAUozC,mBAAqB,SAA4B5xC,GAGlE,GADwB,iBAAbA,IAAuBA,EAAWA,EAAS4C,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAOkB,SAAS9D,EAAW,IAAI4C,gBAAkB,GAAI,MAAM,IAAI/C,UAAU,qBAAuBG,GAEpM,OADAc,KAAKu0B,eAAe6Z,gBAAkBlvC,EAC/Bc,MAUT7C,OAAO2J,eAAeotB,EAASx2B,UAAW,wBAAyB,CAIjEG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,eAAeI,iBA8L/BT,EAASx2B,UAAU6xC,OAAS,SAAUnU,EAAOl8B,EAAU61B,GACrDA,EAAG,IAAI90B,MAAM,iCAGfi0B,EAASx2B,UAAU+xC,QAAU,KAE7Bvb,EAASx2B,UAAUuE,IAAM,SAAUm5B,EAAOl8B,EAAU61B,GAClD,IAAInE,EAAQ5wB,KAAKu0B,eAEI,mBAAV6G,GACTrG,EAAKqG,EACLA,EAAQ,KACRl8B,EAAW,MACkB,mBAAbA,IAChB61B,EAAK71B,EACLA,EAAW,MAGTk8B,SAAuCp7B,KAAKW,MAAMy6B,EAAOl8B,GAGzD0xB,EAAM0d,SACR1d,EAAM0d,OAAS,EACftuC,KAAK6wC,UAIFjgB,EAAMqd,QAAWrd,EAAM2Z,UA0C9B,SAAqBP,EAAQpZ,EAAOmE,GAClCnE,EAAMqd,QAAS,EACfY,EAAY7E,EAAQpZ,GAChBmE,IACEnE,EAAM2Z,SAAU1W,EAAIY,SAASM,GAASiV,EAAOnb,KAAK,SAAUkG,IAElEnE,EAAM4D,OAAQ,EACdwV,EAAOlsC,UAAW,EAjDoBizC,CAAY/wC,KAAM4wB,EAAOmE,IAoEjE53B,OAAO2J,eAAeotB,EAASx2B,UAAW,YAAa,CACrDsV,IAAK,WACH,YAA4B5T,IAAxBY,KAAKu0B,gBAGFv0B,KAAKu0B,eAAeM,WAE7B1oB,IAAK,SAAUvO,GAGRoC,KAAKu0B,iBAMVv0B,KAAKu0B,eAAeM,UAAYj3B,MAIpCs2B,EAASx2B,UAAUi+B,QAAU2R,EAAY3R,QACzCzH,EAASx2B,UAAUszC,WAAa1D,EAAY2D,UAC5C/c,EAASx2B,UAAUo3B,SAAW,SAAU/iB,EAAKgjB,GAC3C/0B,KAAKiC,MACL8yB,EAAGhjB,M,yEC3qBL,IAAI/C,EAAS,EAAQ,KAErB,SAASkiC,EAAOrlB,GACd7rB,KAAK6rB,QAAUA,EAEf7rB,KAAKoB,KAAOpB,KAAK6rB,QAAQzqB,KACzBpB,KAAKm3B,UAAY,EACjBn3B,KAAK+V,QAEL/V,KAAK/B,OAAS,IAAIuK,MAAMxI,KAAKm3B,WAC7Bn3B,KAAKmxC,UAAY,EAEnB9zC,EAAOC,QAAU4zC,EAEjBA,EAAOxzC,UAAUqY,MAAQ,aAIzBm7B,EAAOxzC,UAAUwvB,OAAS,SAAgB7rB,GACxC,OAAoB,IAAhBA,EAAK3C,OACA,GAES,YAAdsB,KAAKoB,KACApB,KAAKoxC,eAAe/vC,GAEpBrB,KAAKqxC,eAAehwC,IAG/B6vC,EAAOxzC,UAAU4zC,QAAU,SAAiBjwC,EAAMuV,GAGhD,IADA,IAAIrR,EAAMD,KAAKC,IAAIvF,KAAK/B,OAAOS,OAASsB,KAAKmxC,UAAW9vC,EAAK3C,OAASkY,GAC7DpV,EAAI,EAAGA,EAAI+D,EAAK/D,IACvBxB,KAAK/B,OAAO+B,KAAKmxC,UAAY3vC,GAAKH,EAAKuV,EAAMpV,GAI/C,OAHAxB,KAAKmxC,WAAa5rC,EAGXA,GAGT2rC,EAAOxzC,UAAU6zC,aAAe,SAAsB5oC,EAAKiO,GAGzD,OAFA5W,KAAKstB,QAAQttB,KAAK/B,OAAQ,EAAG0K,EAAKiO,GAClC5W,KAAKmxC,UAAY,EACVnxC,KAAKm3B,WAGd+Z,EAAOxzC,UAAU2zC,eAAiB,SAAwBhwC,GACxD,IAAImwC,EAAW,EACXC,EAAY,EAEZphB,GAAUrwB,KAAKmxC,UAAY9vC,EAAK3C,QAAUsB,KAAKm3B,UAAa,EAC5DxuB,EAAM,IAAIH,MAAM6nB,EAAQrwB,KAAKm3B,WAEV,IAAnBn3B,KAAKmxC,YACPK,GAAYxxC,KAAKsxC,QAAQjwC,EAAMmwC,GAE3BxxC,KAAKmxC,YAAcnxC,KAAK/B,OAAOS,SACjC+yC,GAAazxC,KAAKuxC,aAAa5oC,EAAK8oC,KAKxC,IADA,IAAI5pC,EAAMxG,EAAK3C,QAAW2C,EAAK3C,OAAS8yC,GAAYxxC,KAAKm3B,UAClDqa,EAAW3pC,EAAK2pC,GAAYxxC,KAAKm3B,UACtCn3B,KAAKstB,QAAQjsB,EAAMmwC,EAAU7oC,EAAK8oC,GAClCA,GAAazxC,KAAKm3B,UAIpB,KAAOqa,EAAWnwC,EAAK3C,OAAQ8yC,IAAYxxC,KAAKmxC,YAC9CnxC,KAAK/B,OAAO+B,KAAKmxC,WAAa9vC,EAAKmwC,GAErC,OAAO7oC,GAGTuoC,EAAOxzC,UAAU0zC,eAAiB,SAAwB/vC,GAQxD,IAPA,IAAImwC,EAAW,EACXC,EAAY,EAEZphB,EAAQ/qB,KAAKqR,MAAM3W,KAAKmxC,UAAY9vC,EAAK3C,QAAUsB,KAAKm3B,WAAa,EACrExuB,EAAM,IAAIH,MAAM6nB,EAAQrwB,KAAKm3B,WAG1B9G,EAAQ,EAAGA,IAChBmhB,GAAYxxC,KAAKsxC,QAAQjwC,EAAMmwC,GAC/BC,GAAazxC,KAAKuxC,aAAa5oC,EAAK8oC,GAMtC,OAFAD,GAAYxxC,KAAKsxC,QAAQjwC,EAAMmwC,GAExB7oC,GAGTuoC,EAAOxzC,UAAUmvB,MAAQ,SAAe5uB,GACtC,IAAIyzC,EAIAhB,EAMJ,OATIzyC,IACFyzC,EAAQ1xC,KAAKktB,OAAOjvB,IAIpByyC,EADgB,YAAd1wC,KAAKoB,KACApB,KAAK2xC,gBAEL3xC,KAAK4xC,gBAEVF,EACKA,EAAMtqC,OAAOspC,GAEbA,GAGXQ,EAAOxzC,UAAU67B,KAAO,SAAct7B,EAAQ2Y,GAC5C,GAAY,IAARA,EACF,OAAO,EAET,KAAOA,EAAM3Y,EAAOS,QAClBT,EAAO2Y,KAAS,EAElB,OAAO,GAGTs6B,EAAOxzC,UAAUi0C,cAAgB,WAC/B,IAAK3xC,KAAKu5B,KAAKv5B,KAAK/B,OAAQ+B,KAAKmxC,WAC/B,MAAO,GAET,IAAIxoC,EAAM,IAAIH,MAAMxI,KAAKm3B,WAEzB,OADAn3B,KAAKstB,QAAQttB,KAAK/B,OAAQ,EAAG0K,EAAK,GAC3BA,GAGTuoC,EAAOxzC,UAAUm0C,OAAS,SAAgB5zC,GACxC,OAAOA,GAGTizC,EAAOxzC,UAAUk0C,cAAgB,WAC/B5iC,EAAOE,MAAMlP,KAAKmxC,UAAWnxC,KAAKm3B,UAAW,8BAC7C,IAAIxuB,EAAM,IAAIH,MAAMxI,KAAKm3B,WAGzB,OAFAn3B,KAAKuxC,aAAa5oC,EAAK,GAEhB3I,KAAK6xC,OAAOlpC,K,gBC3IrB,IAAIu6B,EAAU,EAAQ,KAClB4O,EAAY,EAAQ,KACpBC,EAAQ,EAAQ,KAMpBz0C,EAAQ00C,aAAe10C,EAAQ4zC,OAAShO,EAAQ8O,aAChD10C,EAAQ20C,eAAiB30C,EAAQ40C,SAAWhP,EAAQ+O,eACpD30C,EAAQ60C,eAAiB70C,EAAQ80C,SAAWN,EAAUK,eACtD70C,EAAQwnC,iBAAmBxnC,EAAQ+0C,WAAaP,EAAUhN,iBAC1DxnC,EAAQg1C,YAAch1C,EAAQi1C,WAR9B,WACE,OAAOp1C,OAAOsuB,KAAKsmB,K,gBCLrB,IAAIS,EAAc,CAChBC,IAAK,EAAQ,KACbC,IAAK,EAAQ,KACbC,IAAK,EAAQ,KACbC,KAAM,EAAQ,KACdC,KAAM,EAAQ,KACdC,IAAK,EAAQ,KACbC,IAAK,EAAQ,KACbC,IAAK,EAAQ,MAGXjB,EAAQ,EAAQ,KAEpB,IAAK,IAAIzzC,KAAOyzC,EACdA,EAAMzzC,GAAKjB,OAASm1C,EAAYT,EAAMzzC,GAAKkmB,MAG7CnnB,EAAOC,QAAUy0C,G,gBCjBjB,IAAI5iC,EASJ,SAAS8jC,EAAKC,GACZlzC,KAAKkzC,KAAOA,EAmBd,GA3BA71C,EAAOC,QAAU,SAAc0D,GAI7B,OAHKmO,IACHA,EAAI,IAAI8jC,EAAK,OAER9jC,EAAEgkC,SAASnyC,IAMpB3D,EAAOC,QAAQ21C,KAAOA,EAEtBA,EAAKv1C,UAAUy1C,SAAW,SAAkBnyC,GAC1C,OAAOhB,KAAKozC,MAAMpyC,IAIpBiyC,EAAKv1C,UAAU01C,MAAQ,SAAe1wC,GACpC,GAAI1C,KAAKkzC,KAAKG,SACZ,OAAOrzC,KAAKkzC,KAAKG,SAAS3wC,GAG5B,IADA,IAAI8C,EAAM,IAAI1F,WAAW4C,GAChBlB,EAAI,EAAGA,EAAIgE,EAAI9G,OAAQ8C,IAC9BgE,EAAIhE,GAAKxB,KAAKkzC,KAAKI,UACrB,OAAO9tC,GAGW,iBAATiS,KACLA,KAAK+d,QAAU/d,KAAK+d,OAAOE,gBAE7Bud,EAAKv1C,UAAU01C,MAAQ,SAAe1wC,GACpC,IAAIS,EAAM,IAAIrD,WAAW4C,GAEzB,OADA+U,KAAK+d,OAAOE,gBAAgBvyB,GACrBA,GAEAsU,KAAKge,UAAYhe,KAAKge,SAASC,gBAExCud,EAAKv1C,UAAU01C,MAAQ,SAAe1wC,GACpC,IAAIS,EAAM,IAAIrD,WAAW4C,GAEzB,OADA+U,KAAKge,SAASC,gBAAgBvyB,GACvBA,GAIkB,iBAAXoL,SAEhB0kC,EAAKv1C,UAAU01C,MAAQ,WACrB,MAAM,IAAInzC,MAAM,8BAKpB,IACE,IAAIu1B,EAAS,EAAQ,KACrB,GAAkC,mBAAvBA,EAAO+d,YAChB,MAAM,IAAItzC,MAAM,iBAElBgzC,EAAKv1C,UAAU01C,MAAQ,SAAe1wC,GACpC,OAAO8yB,EAAO+d,YAAY7wC,IAE5B,MAAO8D,M;;AC5DX,IAAIvI,EAAS,EAAQ,KACjBC,EAASD,EAAOC,OAGpB,SAASC,EAAWC,EAAKC,GACvB,IAAK,IAAIC,KAAOF,EACdC,EAAIC,GAAOF,EAAIE,GAWnB,SAASC,EAAYC,EAAKC,EAAkBC,GAC1C,OAAOR,EAAOM,EAAKC,EAAkBC,GATnCR,EAAOS,MAAQT,EAAOU,OAASV,EAAOW,aAAeX,EAAOY,gBAC9DzB,EAAOC,QAAUW,GAGjBE,EAAUF,EAAQX,GAClBA,EAAQY,OAASK,GAOnBA,EAAWb,UAAYP,OAAOC,OAAOc,EAAOR,WAG5CS,EAAUD,EAAQK,GAElBA,EAAWI,KAAO,SAAUH,EAAKC,EAAkBC,GACjD,GAAmB,iBAARF,EACT,MAAM,IAAIO,UAAU,iCAEtB,OAAOb,EAAOM,EAAKC,EAAkBC,IAGvCH,EAAWK,MAAQ,SAAUI,EAAMC,EAAMC,GACvC,GAAoB,iBAATF,EACT,MAAM,IAAID,UAAU,6BAEtB,IAAII,EAAMjB,EAAOc,GAUjB,YATaI,IAATH,EACsB,iBAAbC,EACTC,EAAIF,KAAKA,EAAMC,GAEfC,EAAIF,KAAKA,GAGXE,EAAIF,KAAK,GAEJE,GAGTZ,EAAWM,YAAc,SAAUG,GACjC,GAAoB,iBAATA,EACT,MAAM,IAAID,UAAU,6BAEtB,OAAOb,EAAOc,IAGhBT,EAAWO,gBAAkB,SAAUE,GACrC,GAAoB,iBAATA,EACT,MAAM,IAAID,UAAU,6BAEtB,OAAOd,EAAOoB,WAAWL,K,6BC3D3B,IAAI6qC,EAA6B,EAAQ,KAAmBhU,MAAMgU,2BAgBlE,SAASC,KAmFTzsC,EAAOC,QA7EP,SAASysC,EAAIC,EAAQC,EAAMC,GACzB,GAAoB,mBAATD,EAAqB,OAAOF,EAAIC,EAAQ,KAAMC,GACpDA,IAAMA,EAAO,IAClBC,EAvBF,SAAcA,GACZ,IAAIC,GAAS,EACb,OAAO,WACL,IAAIA,EAAJ,CACAA,GAAS,EAET,IAAK,IAAI3S,EAAO9vB,UAAUhJ,OAAQ2vB,EAAO,IAAI7lB,MAAMgvB,GAAOqG,EAAO,EAAGA,EAAOrG,EAAMqG,IAC/ExP,EAAKwP,GAAQn2B,UAAUm2B,GAGzBqM,EAAShkC,MAAMlG,KAAMquB,KAaZQ,CAAKqb,GAAYJ,GAC5B,IAAI1V,EAAW6V,EAAK7V,WAA8B,IAAlB6V,EAAK7V,UAAsB4V,EAAO5V,SAC9Dt2B,EAAWmsC,EAAKnsC,WAA8B,IAAlBmsC,EAAKnsC,UAAsBksC,EAAOlsC,SAE9DssC,EAAiB,WACdJ,EAAOlsC,UAAUusC,KAGpBC,EAAgBN,EAAOzV,gBAAkByV,EAAOzV,eAAegW,SAE/DF,EAAW,WACbvsC,GAAW,EACXwsC,GAAgB,EACXlW,GAAU8V,EAASjnC,KAAK+mC,IAG3BQ,EAAgBR,EAAOpV,gBAAkBoV,EAAOpV,eAAe6V,WAE/DnW,EAAQ,WACVF,GAAW,EACXoW,GAAgB,EACX1sC,GAAUosC,EAASjnC,KAAK+mC,IAG3BpO,EAAU,SAAiB7pB,GAC7Bm4B,EAASjnC,KAAK+mC,EAAQj4B,IAGpB0pB,EAAU,WACZ,IAAI1pB,EAEJ,OAAIqiB,IAAaoW,GACVR,EAAOpV,gBAAmBoV,EAAOpV,eAAeJ,QAAOziB,EAAM,IAAI83B,GAC/DK,EAASjnC,KAAK+mC,EAAQj4B,IAG3BjU,IAAawsC,GACVN,EAAOzV,gBAAmByV,EAAOzV,eAAeC,QAAOziB,EAAM,IAAI83B,GAC/DK,EAASjnC,KAAK+mC,EAAQj4B,SAF/B,GAME24B,EAAY,WACdV,EAAOW,IAAI7Y,GAAG,SAAUuY,IAiB1B,OAnEF,SAAmBL,GACjB,OAAOA,EAAOY,WAAqC,mBAAjBZ,EAAOa,MAoDrCC,CAAUd,GAIHlsC,IAAaksC,EAAOzV,iBAE7ByV,EAAOlY,GAAG,MAAOsY,GACjBJ,EAAOlY,GAAG,QAASsY,KANnBJ,EAAOlY,GAAG,WAAYuY,GACtBL,EAAOlY,GAAG,QAAS2J,GACfuO,EAAOW,IAAKD,IAAiBV,EAAOlY,GAAG,UAAW4Y,IAOxDV,EAAOlY,GAAG,MAAOwC,GACjB0V,EAAOlY,GAAG,SAAUuY,IACD,IAAfJ,EAAK1Y,OAAiByY,EAAOlY,GAAG,QAAS8J,GAC7CoO,EAAOlY,GAAG,QAAS2J,GACZ,WACLuO,EAAO5a,eAAe,WAAYib,GAClCL,EAAO5a,eAAe,QAASqM,GAC/BuO,EAAO5a,eAAe,UAAWsb,GAC7BV,EAAOW,KAAKX,EAAOW,IAAIvb,eAAe,SAAUib,GACpDL,EAAO5a,eAAe,MAAOgb,GAC7BJ,EAAO5a,eAAe,QAASgb,GAC/BJ,EAAO5a,eAAe,SAAUib,GAChCL,EAAO5a,eAAe,MAAOkF,GAC7B0V,EAAO5a,eAAe,QAASwM,GAC/BoO,EAAO5a,eAAe,QAASqM,M,iBCnGnC,kBAAS,EAAQ,KACb8X,EAAc,EAAQ,KAW1B,SAASC,EAAIvkC,EAAKwkC,GAChB,IAAIC,EAVN,SAAeD,GACb,IAAItkC,EAAIwkC,EAAKF,GAGb,MAAO,CACLG,QAHYzkC,EAAEiY,MAAMysB,EAAG7oB,KAAKyoB,EAAKK,UAClCnrB,OAAO,IAAIkrB,EAAGJ,EAAKM,iBAAiBvsB,UAGnCwsB,UAAU7kC,EAAEmX,KAAKmtB,EAAKK,UAIXG,CAAMR,GACfzyC,EAAMyyC,EAAKK,QAAQzzC,aAEnB6zC,GADML,EAAG7oB,KAAKyoB,EAAKK,SACT,IAAID,EAAG5kC,GAAKtF,IAAI+pC,EAAOE,SAAS5uB,KAAKyuB,EAAKK,UACpDK,EAAKD,EAAQ9sB,MAAMysB,EAAG7oB,KAAKyoB,EAAKW,SAChCC,EAAKH,EAAQ9sB,MAAMysB,EAAG7oB,KAAKyoB,EAAKa,SAChCC,EAAOd,EAAKe,YACZjhC,EAAIkgC,EAAKW,OACT57B,EAAIi7B,EAAKa,OACT1V,EAAKuV,EAAGxrB,OAAO8qB,EAAKgB,WACpBC,EAAKL,EAAG1rB,OAAO8qB,EAAKkB,WACxB/V,EAAKA,EAAGpX,UACRktB,EAAKA,EAAGltB,UACR,IAAIhE,EAAIob,EAAGjkB,KAAK+5B,GAAI71B,KAAK01B,GAAMvvB,KAAKzR,GAGpC,OAFAiQ,EAAE3E,KAAKrG,GACPk8B,EAAGh6B,KAAK8I,GACD,IAAItlB,EAAOw2C,EAAG71B,KAAK60B,EAAOM,WAAWhvB,KAAKyuB,EAAKK,SAAStkC,SAAQ,EAAOxO,IAGhF,SAAS2yC,EAAKF,GAGZ,IAFA,IAAIzyC,EAAMyyC,EAAKK,QAAQzzC,aACnB8O,EAAI,IAAI0kC,EAAGN,EAAYvyC,IACpBmO,EAAEkH,IAAIo9B,EAAKK,UAAa,IAAM3kC,EAAE6V,KAAKyuB,EAAKW,UAAYjlC,EAAE6V,KAAKyuB,EAAKa,SACvEnlC,EAAI,IAAI0kC,EAAGN,EAAYvyC,IAEzB,OAAOmO,EApCT9R,EAAOC,QAAUk2C,EA6BjBA,EAAIG,KAAOA,I,uDC7BX,IAAIiB,EAAWt3C,EAEfs3C,EAAS9Y,QAAU,EAAQ,KAAmBA,QAC9C8Y,EAASxlC,MAAQ,EAAQ,KACzBwlC,EAAS1B,KAAO,EAAQ,KACxB0B,EAAStU,MAAQ,EAAQ,KACzBsU,EAASC,OAAS,EAAQ,KAG1BD,EAASE,GAAK,EAAQ,KACtBF,EAASG,MAAQ,EAAQ,M,6BCVzB,IAsKIC,EAtKAH,EAASv3C,EAET26B,EAAO,EAAQ,KACfqI,EAAQ,EAAQ,KAGhBtxB,EAFQ,EAAQ,KAEDA,OAEnB,SAASimC,EAAYppB,GACE,UAAjBA,EAAQzqB,KACVpB,KAAKsgC,MAAQ,IAAIA,EAAM4U,MAAMrpB,GACL,YAAjBA,EAAQzqB,KACfpB,KAAKsgC,MAAQ,IAAIA,EAAM6U,QAAQtpB,GAE/B7rB,KAAKsgC,MAAQ,IAAIA,EAAMtV,KAAKa,GAC9B7rB,KAAK2lB,EAAI3lB,KAAKsgC,MAAM3a,EACpB3lB,KAAK0C,EAAI1C,KAAKsgC,MAAM59B,EACpB1C,KAAKi4B,KAAOpM,EAAQoM,KAEpBjpB,EAAOhP,KAAK2lB,EAAE8a,WAAY,iBAC1BzxB,EAAOhP,KAAK2lB,EAAEhc,IAAI3J,KAAK0C,GAAG0yC,aAAc,2BAI1C,SAASC,EAAY9jC,EAAMsa,GACzB1uB,OAAO2J,eAAe+tC,EAAQtjC,EAAM,CAClCxT,cAAc,EACdF,YAAY,EACZmV,IAAK,WACH,IAAIstB,EAAQ,IAAI2U,EAAYppB,GAM5B,OALA1uB,OAAO2J,eAAe+tC,EAAQtjC,EAAM,CAClCxT,cAAc,EACdF,YAAY,EACZD,MAAO0iC,IAEFA,KAbbuU,EAAOI,YAAcA,EAkBrBI,EAAY,OAAQ,CAClBj0C,KAAM,QACNooB,MAAO,OACPjW,EAAG,wDACHtM,EAAG,wDACHxE,EAAG,wDACHC,EAAG,wDACHu1B,KAAMA,EAAKmU,OACXxM,MAAM,EACNja,EAAG,CACD,wDACA,2DAIJ0vB,EAAY,OAAQ,CAClBj0C,KAAM,QACNooB,MAAO,OACPjW,EAAG,iEACHtM,EAAG,iEACHxE,EAAG,iEACHC,EAAG,iEACHu1B,KAAMA,EAAKmU,OACXxM,MAAM,EACNja,EAAG,CACD,iEACA,oEAIJ0vB,EAAY,OAAQ,CAClBj0C,KAAM,QACNooB,MAAO,KACPjW,EAAG,0EACHtM,EAAG,0EACHxE,EAAG,0EACHC,EAAG,0EACHu1B,KAAMA,EAAKmU,OACXxM,MAAM,EACNja,EAAG,CACD,0EACA,6EAIJ0vB,EAAY,OAAQ,CAClBj0C,KAAM,QACNooB,MAAO,KACPjW,EAAG,8GAEHtM,EAAG,8GAEHxE,EAAG,8GAEHC,EAAG,8GAEHu1B,KAAMA,EAAKoU,OACXzM,MAAM,EACNja,EAAG,CACD,8GAEA,iHAKJ0vB,EAAY,OAAQ,CAClBj0C,KAAM,QACNooB,MAAO,KACPjW,EAAG,2JAGHtM,EAAG,2JAGHxE,EAAG,2JAGHC,EAAG,2JAGHu1B,KAAMA,EAAKqU,OACX1M,MAAM,EACNja,EAAG,CACD,2JAGA,8JAMJ0vB,EAAY,aAAc,CACxBj0C,KAAM,OACNooB,MAAO,SACPjW,EAAG,sEACHtM,EAAG,QACHxE,EAAG,IACHC,EAAG,sEACHu1B,KAAMA,EAAKmU,OACXxM,MAAM,EACNja,EAAG,CACD,OAIJ0vB,EAAY,UAAW,CACrBj0C,KAAM,UACNooB,MAAO,SACPjW,EAAG,sEACHtM,EAAG,KACHhC,EAAG,IAEHgP,EAAG,sEACHvR,EAAG,sEACHu1B,KAAMA,EAAKmU,OACXxM,MAAM,EACNja,EAAG,CACD,mEAGA,sEAKJ,IACEqvB,EAAM,EAAQ,KACd,MAAOxuC,GACPwuC,OAAM51C,EAGRi2C,EAAY,YAAa,CACvBj0C,KAAM,QACNooB,MAAO,OACPjW,EAAG,0EACHtM,EAAG,IACHxE,EAAG,IACHC,EAAG,0EACH8gB,EAAG,IACHyU,KAAMA,EAAKmU,OAGXzJ,KAAM,mEACN2S,OAAQ,mEACRC,MAAO,CACL,CACEtuC,EAAG,mCACHxE,EAAG,qCAEL,CACEwE,EAAG,oCACHxE,EAAG,qCAIPm9B,MAAM,EACNja,EAAG,CACD,mEACA,mEACAqvB,M,gBC3MJ,IAAI/c,EAAO36B,EAEX26B,EAAK7oB,MAAQ,EAAQ,KACrB6oB,EAAKud,OAAS,EAAQ,KACtBvd,EAAKI,IAAM,EAAQ,KACnBJ,EAAKwd,OAAS,EAAQ,KACtBxd,EAAKyd,KAAO,EAAQ,KAGpBzd,EAAKiU,KAAOjU,EAAKI,IAAI6T,KACrBjU,EAAKmU,OAASnU,EAAKI,IAAI+T,OACvBnU,EAAKkU,OAASlU,EAAKI,IAAI8T,OACvBlU,EAAKoU,OAASpU,EAAKI,IAAIgU,OACvBpU,EAAKqU,OAASrU,EAAKI,IAAIiU,OACvBrU,EAAK0d,UAAY1d,EAAKwd,OAAOE,W,8BCd7B,YAIA,IAKIr3C,EALAL,EAAS,EAAQ,KACjBC,EAASD,EAAOC,OAEhB03C,EAAQ,GAIZ,IAAKt3C,KAAOL,EACLA,EAAOqP,eAAehP,IACf,eAARA,GAAgC,WAARA,IAC5Bs3C,EAAMt3C,GAAOL,EAAOK,IAGtB,IAAIu3C,EAAQD,EAAM13C,OAAS,GAC3B,IAAKI,KAAOJ,EACLA,EAAOoP,eAAehP,IACf,gBAARA,GAAiC,oBAARA,IAC7Bu3C,EAAMv3C,GAAOJ,EAAOI,IAqCtB,GAlCAs3C,EAAM13C,OAAOR,UAAYQ,EAAOR,UAE3Bm4C,EAAMl3C,MAAQk3C,EAAMl3C,OAASmB,WAAWnB,OAC3Ck3C,EAAMl3C,KAAO,SAAUf,EAAOa,EAAkBC,GAC9C,GAAqB,iBAAVd,EACT,MAAM,IAAImB,UAAU,yEAA2EnB,GAEjG,GAAIA,QAAiC,IAAjBA,EAAMc,OACxB,MAAM,IAAIK,UAAU,yHAA2HnB,GAEjJ,OAAOM,EAAON,EAAOa,EAAkBC,KAItCm3C,EAAMj3C,QACTi3C,EAAMj3C,MAAQ,SAAUI,EAAMC,EAAMC,GAClC,GAAoB,iBAATF,EACT,MAAM,IAAID,UAAU,oEAAsEC,GAE5F,GAAIA,EAAO,GAAKA,GAAQ,GAAK,GAAK,IAChC,MAAM,IAAIa,WAAW,cAAgBb,EAAO,kCAE9C,IAAIG,EAAMjB,EAAOc,GAQjB,OAPKC,GAAwB,IAAhBA,EAAKP,OAEa,iBAAbQ,EAChBC,EAAIF,KAAKA,EAAMC,GAEfC,EAAIF,KAAKA,GAJTE,EAAIF,KAAK,GAMJE,KAINy2C,EAAME,iBACT,IACEF,EAAME,iBAAmBlgB,EAAQmgB,QAAQ,UAAUD,iBACnD,MAAOtvC,IAMNovC,EAAMI,YACTJ,EAAMI,UAAY,CAChBC,WAAYL,EAAMn2C,YAEhBm2C,EAAME,mBACRF,EAAMI,UAAUE,kBAAoBN,EAAME,mBAI9Cz4C,EAAOC,QAAUs4C,I,+CC1EjB,MAAMnc,EAAW,EAAQ,KAAoBA,SACvCE,EAAgB,EAAQ,KAAkBA,cAC1CD,EAAgB,EAAQ,KAAkBA,cAC1C1qB,EAAS,EAAQ,KAGjB+3B,EAAO,CACX,MAAO,QAAS,MAAO,QAAS,QAAS,OACzC,UAAW,UAAW,QAAS,OAAQ,MAAO,UAC9C,SAAU,SAAU,UAAW,SAAU,WAAY,SAAU,YAC/D,SAAU,SAAU,WAAY,SAAU,SAAU,UAAW,YAI3DoP,EAAU,CACd,MAAO,MAAO,MAAO,WAAY,WAAY,WAAY,MAAO,SAChE,MAAO,YACP/uC,OAAO2/B,GAYT,SAASqP,EAAK9iC,EAAKk1B,EAAQj3B,GACzB,MAAMqf,EAAQ,GACd5wB,KAAKq2C,WAAazlB,EAElBA,EAAMrf,KAAOA,EACbqf,EAAMtd,IAAMA,EAEZsd,EAAM4X,OAASA,GAAU,KACzB5X,EAAM7d,SAAW,KAGjB6d,EAAM6S,IAAM,KACZ7S,EAAMvC,KAAO,KACbuC,EAAM0lB,YAAc,KACpB1lB,EAAM2lB,OAAS,KACf3lB,EAAM4lB,UAAW,EACjB5lB,EAAM6lB,KAAM,EACZ7lB,EAAM9vB,KAAM,EACZ8vB,EAAM8lB,IAAM,KACZ9lB,EAAM+lB,WAAa,KACnB/lB,EAAMtyB,IAAM,KACZsyB,EAAe,QAAI,KACnBA,EAAMgmB,SAAW,KACjBhmB,EAAMimB,SAAW,KACjBjmB,EAAMkmB,SAAW,KAGZlmB,EAAM4X,SACT5X,EAAM7d,SAAW,GACjB/S,KAAK+2C,SAGT15C,EAAOC,QAAU84C,EAEjB,MAAMY,EAAa,CACjB,MAAO,SAAU,WAAY,MAAO,OAAQ,cAAe,SAC3D,WAAY,MAAO,MAAO,MAAO,aAAc,MAAO,UAAW,WACjE,WAAY,YAGdZ,EAAK14C,UAAUyS,MAAQ,WACrB,MAAMygB,EAAQ5wB,KAAKq2C,WACbY,EAAS,GACfD,EAAW7pC,SAAQ,SAAS+pC,GAC1BD,EAAOC,GAAQtmB,EAAMsmB,MAEvB,MAAM1xC,EAAM,IAAIxF,KAAKrC,YAAYs5C,EAAOzO,QAExC,OADAhjC,EAAI6wC,WAAaY,EACVzxC,GAGT4wC,EAAK14C,UAAUq5C,MAAQ,WACrB,MAAMnmB,EAAQ5wB,KAAKq2C,WACnBF,EAAQhpC,SAAQ,SAASgnB,GACvBn0B,KAAKm0B,GAAU,WACb,MAAMhkB,EAAQ,IAAInQ,KAAKrC,YAAYqC,MAEnC,OADA4wB,EAAM7d,SAASrO,KAAKyL,GACbA,EAAMgkB,GAAQjuB,MAAMiK,EAAOzI,cAEnC1H,OAGLo2C,EAAK14C,UAAUqY,MAAQ,SAAcohC,GACnC,MAAMvmB,EAAQ5wB,KAAKq2C,WAEnBrnC,EAAwB,OAAjB4hB,EAAM4X,QACb2O,EAAKl0C,KAAKjD,MAGV4wB,EAAM7d,SAAW6d,EAAM7d,SAASV,QAAO,SAASg2B,GAC9C,OAAOA,EAAMgO,WAAW7N,SAAWxoC,OAClCA,MACHgP,EAAOE,MAAM0hB,EAAM7d,SAASrU,OAAQ,EAAG,sCAGzC03C,EAAK14C,UAAU05C,SAAW,SAAiB/oB,GACzC,MAAMuC,EAAQ5wB,KAAKq2C,WAGbtjC,EAAWsb,EAAKhc,QAAO,SAAS7T,GACpC,OAAOA,aAAewB,KAAKrC,cAC1BqC,MACHquB,EAAOA,EAAKhc,QAAO,SAAS7T,GAC1B,QAASA,aAAewB,KAAKrC,eAC5BqC,MAEqB,IAApB+S,EAASrU,SACXsQ,EAA0B,OAAnB4hB,EAAM7d,UACb6d,EAAM7d,SAAWA,EAGjBA,EAAS5F,SAAQ,SAASk7B,GACxBA,EAAMgO,WAAW7N,OAASxoC,OACzBA,OAEe,IAAhBquB,EAAK3vB,SACPsQ,EAAsB,OAAf4hB,EAAMvC,MACbuC,EAAMvC,KAAOA,EACbuC,EAAM0lB,YAAcjoB,EAAKsI,KAAI,SAASn4B,GACpC,GAAmB,iBAARA,GAAoBA,EAAIb,cAAgBR,OACjD,OAAOqB,EAET,MAAMgH,EAAM,GAOZ,OANArI,OAAOsuB,KAAKjtB,GAAK2O,SAAQ,SAAS7O,GAC5BA,IAAc,EAANA,KACVA,GAAO,GACT,MAAMV,EAAQY,EAAIF,GAClBkH,EAAI5H,GAASU,KAERkH,OAtHK,CAChB,WAAY,aAAc,OAC1B,aAAc,eAAgB,cAC9B,cAAe,aAAc,cAAe,cAE5C,mBAAoB,aAAc,eAAgB,cAClD,cAAe,aAAc,eAyHrB2H,SAAQ,SAASgnB,GACzBiiB,EAAK14C,UAAUy2B,GAAU,WACvB,MAAMvD,EAAQ5wB,KAAKq2C,WACnB,MAAM,IAAIp2C,MAAMk0B,EAAS,kCAAoCvD,EAAMtd,SAQvEyzB,EAAK55B,SAAQ,SAASs2B,GACpB2S,EAAK14C,UAAU+lC,GAAO,WACpB,MAAM7S,EAAQ5wB,KAAKq2C,WACbhoB,EAAO7lB,MAAM9K,UAAUkD,MAAMqC,KAAKyE,WAOxC,OALAsH,EAAqB,OAAd4hB,EAAM6S,KACb7S,EAAM6S,IAAMA,EAEZzjC,KAAKo3C,SAAS/oB,GAEPruB,SAIXo2C,EAAK14C,UAAUg5C,IAAM,SAAa7c,GAChC7qB,EAAO6qB,GACP,MAAMjJ,EAAQ5wB,KAAKq2C,WAKnB,OAHArnC,EAAqB,OAAd4hB,EAAM8lB,KACb9lB,EAAM8lB,IAAM7c,EAEL75B,MAGTo2C,EAAK14C,UAAU84C,SAAW,WAKxB,OAJcx2C,KAAKq2C,WAEbG,UAAW,EAEVx2C,MAGTo2C,EAAK14C,UAAU25C,IAAM,SAAal2C,GAChC,MAAMyvB,EAAQ5wB,KAAKq2C,WAMnB,OAJArnC,EAA4B,OAArB4hB,EAAe,SACtBA,EAAe,QAAIzvB,EACnByvB,EAAM4lB,UAAW,EAEVx2C,MAGTo2C,EAAK14C,UAAUk5C,SAAW,SAAkBhnC,GAC1C,MAAMghB,EAAQ5wB,KAAKq2C,WAKnB,OAHArnC,EAA0B,OAAnB4hB,EAAMgmB,UAAwC,OAAnBhmB,EAAMimB,UACxCjmB,EAAMgmB,SAAWhnC,EAEV5P,MAGTo2C,EAAK14C,UAAUm5C,SAAW,SAAkBjnC,GAC1C,MAAMghB,EAAQ5wB,KAAKq2C,WAKnB,OAHArnC,EAA0B,OAAnB4hB,EAAMgmB,UAAwC,OAAnBhmB,EAAMimB,UACxCjmB,EAAMimB,SAAWjnC,EAEV5P,MAGTo2C,EAAK14C,UAAUoD,IAAM,WACnB,MAAM8vB,EAAQ5wB,KAAKq2C,WACbhoB,EAAO7lB,MAAM9K,UAAUkD,MAAMqC,KAAKyE,WAOxC,OALAkpB,EAAM9vB,KAAM,EAEQ,IAAhButB,EAAK3vB,QACPsB,KAAKo3C,SAAS/oB,GAETruB,MAGTo2C,EAAK14C,UAAUY,IAAM,SAAag5C,GAChC,MAAM1mB,EAAQ5wB,KAAKq2C,WAKnB,OAHArnC,EAAqB,OAAd4hB,EAAMtyB,KACbsyB,EAAMtyB,IAAMg5C,EAELt3C,MAGTo2C,EAAK14C,UAAU+4C,IAAM,WAKnB,OAJcz2C,KAAKq2C,WAEbI,KAAM,EAELz2C,MAGTo2C,EAAK14C,UAAU64C,OAAS,SAAgBz1C,GACtC,MAAM8vB,EAAQ5wB,KAAKq2C,WAQnB,OANArnC,EAAwB,OAAjB4hB,EAAM2lB,QACb3lB,EAAM2lB,OAASz1C,EACfd,KAAKo3C,SAASj6C,OAAOsuB,KAAK3qB,GAAK61B,KAAI,SAASr4B,GAC1C,OAAOwC,EAAIxC,OAGN0B,MAGTo2C,EAAK14C,UAAUo5C,SAAW,SAAkBjd,GAC1C,MAAMjJ,EAAQ5wB,KAAKq2C,WAKnB,OAHArnC,EAAqB,OAAd4hB,EAAM8lB,KACb9lB,EAAMkmB,SAAWjd,EAEV75B,MAOTo2C,EAAK14C,UAAU65C,QAAU,SAAgBptB,EAAO0B,GAC9C,MAAM+E,EAAQ5wB,KAAKq2C,WAGnB,GAAqB,OAAjBzlB,EAAM4X,OACR,OAAOre,EAAMqtB,WAAW5mB,EAAM7d,SAAS,GAAGwkC,QAAQptB,EAAO0B,IAE3D,IAuCI4rB,EAvCA/oC,EAASkiB,EAAe,QACxB8mB,GAAU,EAEVC,EAAU,KAKd,GAJkB,OAAd/mB,EAAMtyB,MACRq5C,EAAUxtB,EAAMytB,SAAShnB,EAAMtyB,MAG7BsyB,EAAM4lB,SAAU,CAClB,IAAI/S,EAAM,KAQV,GAPuB,OAAnB7S,EAAMgmB,SACRnT,EAAM7S,EAAMgmB,SACc,OAAnBhmB,EAAMimB,SACbpT,EAAM7S,EAAMimB,SACS,OAAdjmB,EAAM6S,MACbA,EAAM7S,EAAM6S,KAEF,OAARA,GAAiB7S,EAAM6lB,KAgBzB,GAFAiB,EAAU13C,KAAK63C,SAAS1tB,EAAOsZ,EAAK7S,EAAM6lB,KAEtCtsB,EAAM0O,QAAQ6e,GAChB,OAAOA,MAjBqB,CAE9B,MAAM1d,EAAO7P,EAAM6P,OACnB,IACuB,OAAjBpJ,EAAM2lB,OACRv2C,KAAK83C,eAAelnB,EAAM6S,IAAKtZ,EAAO0B,GAEtC7rB,KAAK+3C,cAAc5tB,EAAO0B,GAC5B6rB,GAAU,EACV,MAAOlxC,GACPkxC,GAAU,EAEZvtB,EAAM8P,QAAQD,IAclB,GAHIpJ,EAAM9vB,KAAO42C,IACfD,EAAUttB,EAAM6tB,eAEdN,EAAS,CAEX,GAAuB,OAAnB9mB,EAAMgmB,SAAmB,CAC3B,MAAMA,EAAW52C,KAAKi4C,WAAW9tB,EAAOyG,EAAMgmB,UAC9C,GAAIzsB,EAAM0O,QAAQ+d,GAChB,OAAOA,EACTzsB,EAAQysB,EAGV,MAAM50C,EAAQmoB,EAAMrmB,OAGpB,GAAkB,OAAd8sB,EAAM8lB,KAAiC,OAAjB9lB,EAAM2lB,OAAiB,CAC/C,IAAIvc,EACApJ,EAAM6lB,MACRzc,EAAO7P,EAAM6P,QACf,MAAMmd,EAAOn3C,KAAKi4C,WAChB9tB,EACmB,OAAnByG,EAAMimB,SAAoBjmB,EAAMimB,SAAWjmB,EAAM6S,IACjD7S,EAAM6lB,KAER,GAAItsB,EAAM0O,QAAQse,GAChB,OAAOA,EAELvmB,EAAM6lB,IACR/nC,EAASyb,EAAMiQ,IAAIJ,GAEnB7P,EAAQgtB,EAkBZ,GAfItrB,GAAWA,EAAQqsB,OAAuB,OAAdtnB,EAAM6S,KACpC5X,EAAQqsB,MAAM/tB,EAAMguB,OAAQn2C,EAAOmoB,EAAMzrB,OAAQ,UAE/CmtB,GAAWA,EAAQqsB,OAAuB,OAAdtnB,EAAM6S,KACpC5X,EAAQqsB,MAAM/tB,EAAMguB,OAAQhuB,EAAMrmB,OAAQqmB,EAAMzrB,OAAQ,WAGtDkyB,EAAM6lB,MAGR/nC,EAD0B,OAAjBkiB,EAAM2lB,OACNv2C,KAAK83C,eAAelnB,EAAM6S,IAAKtZ,EAAO0B,GAEtC7rB,KAAK+3C,cAAc5tB,EAAO0B,IAGjC1B,EAAM0O,QAAQnqB,GAChB,OAAOA,EAYT,GATKkiB,EAAM6lB,KAAwB,OAAjB7lB,EAAM2lB,QAAsC,OAAnB3lB,EAAM7d,UAC/C6d,EAAM7d,SAAS5F,SAAQ,SAAwBk7B,GAG7CA,EAAMkP,QAAQptB,EAAO0B,MAKrB+E,EAAMkmB,WAA2B,WAAdlmB,EAAM6S,KAAkC,WAAd7S,EAAM6S,KAAmB,CACxE,MAAMpiC,EAAO,IAAIq4B,EAAchrB,GAC/BA,EAAS1O,KAAKo4C,QAAQxnB,EAAMkmB,SAAU3sB,EAAMmQ,eAAex5B,KACxDy2C,QAAQl2C,EAAMwqB,IAcrB,OATI+E,EAAM9vB,KAAO42C,IACfhpC,EAASyb,EAAMkuB,YAAYZ,IAGX,OAAd7mB,EAAMtyB,KAA4B,OAAXoQ,IAA+B,IAAZgpC,EAEzB,OAAZC,GACPxtB,EAAMmuB,QAAQX,GAFdxtB,EAAMouB,SAASZ,EAAS/mB,EAAMtyB,IAAKoQ,GAI9BA,GAGT0nC,EAAK14C,UAAUo6C,eAAiB,SAAuBrU,EAAKtZ,EAAO0B,GACjE,MAAM+E,EAAQ5wB,KAAKq2C,WAEnB,MAAY,QAAR5S,GAAyB,QAARA,EACZ,KACG,UAARA,GAA2B,UAARA,EACdzjC,KAAKw4C,YAAYruB,EAAOsZ,EAAK7S,EAAMvC,KAAK,GAAIxC,GAC5C,OAAO4sB,KAAKhV,GACZzjC,KAAK04C,WAAWvuB,EAAOsZ,EAAK5X,GACpB,UAAR4X,GAAmB7S,EAAMvC,KACzBruB,KAAK24C,aAAaxuB,EAAOyG,EAAMvC,KAAK,GAAIuC,EAAMvC,KAAK,GAAIxC,GAC/C,UAAR4X,EACAzjC,KAAK24C,aAAaxuB,EAAO,KAAM,KAAM0B,GAC7B,YAAR4X,GAA6B,YAARA,EACrBzjC,KAAK44C,YAAYzuB,EAAOsZ,EAAK5X,GACrB,UAAR4X,EACAzjC,KAAK64C,YAAY1uB,EAAO0B,GAChB,SAAR4X,EACAzjC,KAAK84C,YAAY3uB,EAAO0B,GAChB,YAAR4X,EACAzjC,KAAK04C,WAAWvuB,EAAOsZ,EAAK5X,GACpB,QAAR4X,GAAyB,SAARA,EACjBzjC,KAAK+4C,WAAW5uB,EAAOyG,EAAMvC,MAAQuC,EAAMvC,KAAK,GAAIxC,GAE3C,OAAd+E,EAAM8lB,IACD12C,KAAKo4C,QAAQxnB,EAAM8lB,IAAKvsB,EAAMmQ,eAAex5B,KACjDy2C,QAAQptB,EAAO0B,GAEX1B,EAAMoH,MAAM,gBAAkBkS,IAIzC2S,EAAK14C,UAAU06C,QAAU,SAAiBY,EAAQl4C,GAEhD,MAAM8vB,EAAQ5wB,KAAKq2C,WASnB,OAPAzlB,EAAM+lB,WAAa32C,KAAKi5C,KAAKD,EAAQl4C,GACrCkO,EAA8C,OAAvC4hB,EAAM+lB,WAAWN,WAAW7N,QACnC5X,EAAM+lB,WAAa/lB,EAAM+lB,WAAWN,WAAWtjC,SAAS,GACpD6d,EAAMimB,WAAajmB,EAAM+lB,WAAWN,WAAWQ,WACjDjmB,EAAM+lB,WAAa/lB,EAAM+lB,WAAWxmC,QACpCygB,EAAM+lB,WAAWN,WAAWQ,SAAWjmB,EAAMimB,UAExCjmB,EAAM+lB,YAGfP,EAAK14C,UAAUq6C,cAAgB,SAAsB5tB,EAAO0B,GAC1D,MAAM+E,EAAQ5wB,KAAKq2C,WACnB,IAAI3nC,EAAS,KACT5G,GAAQ,EAmBZ,OAjBA3K,OAAOsuB,KAAKmF,EAAM2lB,QAAQ2C,MAAK,SAAS56C,GACtC,MAAM07B,EAAO7P,EAAM6P,OACbmf,EAAOvoB,EAAM2lB,OAAOj4C,GAC1B,IACE,MAAMV,EAAQu7C,EAAK5B,QAAQptB,EAAO0B,GAClC,GAAI1B,EAAM0O,QAAQj7B,GAChB,OAAO,EAET8Q,EAAS,CAAEtN,KAAM9C,EAAKV,MAAOA,GAC7BkK,GAAQ,EACR,MAAOtB,GAEP,OADA2jB,EAAM8P,QAAQD,IACP,EAET,OAAO,IACNh6B,MAEE8H,EAGE4G,EAFEyb,EAAMoH,MAAM,uBASvB6kB,EAAK14C,UAAU07C,qBAAuB,SAA6B/3C,GACjE,OAAO,IAAIs4B,EAAct4B,EAAMrB,KAAK45B,WAGtCwc,EAAK14C,UAAU2kC,QAAU,SAAgBhhC,EAAMu4B,EAAU4O,GACvD,MAAM5X,EAAQ5wB,KAAKq2C,WACnB,GAAyB,OAArBzlB,EAAe,SAAcA,EAAe,UAAMvvB,EACpD,OAEF,MAAMqN,EAAS1O,KAAKq5C,aAAah4C,EAAMu4B,EAAU4O,GACjD,YAAeppC,IAAXsP,GAGA1O,KAAKs5C,aAAa5qC,EAAQkrB,EAAU4O,QAHxC,EAMO95B,GAGT0nC,EAAK14C,UAAU27C,aAAe,SAAgBh4C,EAAMu4B,EAAU4O,GAC5D,MAAM5X,EAAQ5wB,KAAKq2C,WAGnB,GAAqB,OAAjBzlB,EAAM4X,OACR,OAAO5X,EAAM7d,SAAS,GAAGsvB,QAAQhhC,EAAMu4B,GAAY,IAAIH,GAEzD,IAAI/qB,EAAS,KAMb,GAHA1O,KAAK45B,SAAWA,EAGZhJ,EAAM4lB,eAAqBp3C,IAATiC,EAAoB,CACxC,GAAyB,OAArBuvB,EAAe,QAGjB,OAFAvvB,EAAOuvB,EAAe,QAM1B,IAAI7hB,EAAU,KACVwqC,GAAY,EAChB,GAAI3oB,EAAM6lB,IAER/nC,EAAS1O,KAAKo5C,qBAAqB/3C,QAC9B,GAAIuvB,EAAM2lB,OACf7nC,EAAS1O,KAAKw5C,cAAcn4C,EAAMu4B,QAC7B,GAAIhJ,EAAMkmB,SACf/nC,EAAU/O,KAAKo4C,QAAQxnB,EAAMkmB,SAAUtO,GAAQnG,QAAQhhC,EAAMu4B,GAC7D2f,GAAY,OACP,GAAI3oB,EAAM7d,SACfhE,EAAU6hB,EAAM7d,SAAS4jB,KAAI,SAAS0R,GACpC,GAA6B,UAAzBA,EAAMgO,WAAW5S,IACnB,OAAO4E,EAAMhG,QAAQ,KAAMzI,EAAUv4B,GAEvC,GAA6B,OAAzBgnC,EAAMgO,WAAW/3C,IACnB,OAAOs7B,EAASrI,MAAM,2BACxB,MAAMomB,EAAU/d,EAASge,SAASvP,EAAMgO,WAAW/3C,KAEnD,GAAoB,iBAAT+C,EACT,OAAOu4B,EAASrI,MAAM,2CAExB,MAAM/rB,EAAM6iC,EAAMhG,QAAQhhC,EAAKgnC,EAAMgO,WAAW/3C,KAAMs7B,EAAUv4B,GAGhE,OAFAu4B,EAAS2e,SAASZ,GAEXnyC,IACNxF,MAAMqS,QAAO,SAASg2B,GACvB,OAAOA,KAETt5B,EAAU/O,KAAKo5C,qBAAqBrqC,QAEpC,GAAkB,UAAd6hB,EAAM6S,KAAiC,UAAd7S,EAAM6S,IAAiB,CAElD,IAAM7S,EAAMvC,MAA8B,IAAtBuC,EAAMvC,KAAK3vB,OAC7B,OAAOk7B,EAASrI,MAAM,uBAAyBX,EAAM6S,KAEvD,IAAKj7B,MAAMhJ,QAAQ6B,GACjB,OAAOu4B,EAASrI,MAAM,sCAExB,MAAM8W,EAAQroC,KAAKmQ,QACnBk4B,EAAMgO,WAAWQ,SAAW,KAC5B9nC,EAAU/O,KAAKo5C,qBAAqB/3C,EAAKs1B,KAAI,SAASkD,GACpD,MAAMjJ,EAAQ5wB,KAAKq2C,WAEnB,OAAOr2C,KAAKo4C,QAAQxnB,EAAMvC,KAAK,GAAIhtB,GAAMghC,QAAQxI,EAAMD,KACtDyO,SACoB,OAAdzX,EAAM8lB,IACfhoC,EAAS1O,KAAKo4C,QAAQxnB,EAAM8lB,IAAKlO,GAAQnG,QAAQhhC,EAAMu4B,IAEvD7qB,EAAU/O,KAAKy5C,iBAAiB7oB,EAAM6S,IAAKpiC,GAC3Ck4C,GAAY,GAKhB,IAAK3oB,EAAM6lB,KAAwB,OAAjB7lB,EAAM2lB,OAAiB,CACvC,MAAM9S,EAAyB,OAAnB7S,EAAMimB,SAAoBjmB,EAAMimB,SAAWjmB,EAAM6S,IACvDiW,EAAyB,OAAnB9oB,EAAMimB,SAAoB,YAAc,UAExC,OAARpT,EACgB,OAAd7S,EAAM8lB,KACR9c,EAASrI,MAAM,wCAEC,OAAdX,EAAM8lB,MACRhoC,EAAS1O,KAAK25C,iBAAiBlW,EAAK8V,EAAWG,EAAK3qC,IAQ1D,OAHuB,OAAnB6hB,EAAMgmB,WACRloC,EAAS1O,KAAK25C,iBAAiB/oB,EAAMgmB,UAAU,EAAO,UAAWloC,IAE5DA,GAGT0nC,EAAK14C,UAAU87C,cAAgB,SAAsBn4C,EAAMu4B,GACzD,MAAMhJ,EAAQ5wB,KAAKq2C,WAEb8C,EAAOvoB,EAAM2lB,OAAOl1C,EAAKD,MAO/B,OANK+3C,GACHnqC,GACE,EACA3N,EAAKD,KAAO,iBACNw4C,KAAKC,UAAU18C,OAAOsuB,KAAKmF,EAAM2lB,UAEpC4C,EAAK9W,QAAQhhC,EAAKzD,MAAOg8B,IAGlCwc,EAAK14C,UAAU+7C,iBAAmB,SAAyBhW,EAAKpiC,GAC9D,MAAMuvB,EAAQ5wB,KAAKq2C,WAEnB,GAAI,OAAOoC,KAAKhV,GACd,OAAOzjC,KAAK85C,WAAWz4C,EAAMoiC,GAC1B,GAAY,UAARA,GAAmB7S,EAAMvC,KAChC,OAAOruB,KAAK+5C,aAAa14C,EAAMuvB,EAAM0lB,YAAY,GAAI1lB,EAAMvC,KAAK,IAC7D,GAAY,UAARoV,EACP,OAAOzjC,KAAK+5C,aAAa14C,EAAM,KAAM,MAClC,GAAY,YAARoiC,GAA6B,YAARA,EAC5B,OAAOzjC,KAAKg6C,YAAY34C,EAAMoiC,GAC3B,GAAY,UAARA,EACP,OAAOzjC,KAAKi6C,cACT,GAAY,QAARxW,GAAyB,SAARA,EACxB,OAAOzjC,KAAKk6C,WAAW74C,EAAMuvB,EAAMvC,MAAQuC,EAAM0lB,YAAY,IAC1D,GAAY,SAAR7S,EACP,OAAOzjC,KAAKm6C,YAAY94C,GACrB,GAAY,YAARoiC,EACP,OAAOzjC,KAAK85C,WAAWz4C,EAAMoiC,GAE7B,MAAM,IAAIxjC,MAAM,oBAAsBwjC,IAG1C2S,EAAK14C,UAAU08C,UAAY,SAAkB51C,GAC3C,MAAO,YAAYi0C,KAAKj0C,IAG1B4xC,EAAK14C,UAAU28C,YAAc,SAAoB71C,GAC/C,MAAO,6BAA6Bi0C,KAAKj0C,K,6BC1nB3C,MAAMyO,EAAW,EAAQ,KAEzB,SAASwmB,EAAS5N,GAChB7rB,KAAKs6B,eAAiB,CACpBx5B,IAAK,KACLq3C,KAAM,GACNtsB,QAASA,GAAW,GACpByuB,OAAQ,IA6FZ,SAASC,EAAcpC,EAAMlpC,GAC3BjP,KAAKm4C,KAAOA,EACZn4C,KAAKw6C,QAAQvrC,GA5Ff3R,EAAQm8B,SAAWA,EAEnBA,EAAS/7B,UAAUm7B,QAAU,SAAiB/3B,GAC5C,OAAOA,aAAey5C,GAGxB9gB,EAAS/7B,UAAUs8B,KAAO,WACxB,MAAMpJ,EAAQ5wB,KAAKs6B,eAEnB,MAAO,CAAEx5B,IAAK8vB,EAAM9vB,IAAK25C,QAAS7pB,EAAMunB,KAAKz5C,SAG/C+6B,EAAS/7B,UAAUu8B,QAAU,SAAiB54B,GAC5C,MAAMuvB,EAAQ5wB,KAAKs6B,eAEnB1J,EAAM9vB,IAAMO,EAAKP,IACjB8vB,EAAMunB,KAAOvnB,EAAMunB,KAAKv3C,MAAM,EAAGS,EAAKo5C,UAGxChhB,EAAS/7B,UAAUk6C,SAAW,SAAkBt5C,GAC9C,OAAO0B,KAAKs6B,eAAe6d,KAAKzzC,KAAKpG,IAGvCm7B,EAAS/7B,UAAU46C,QAAU,SAAiB/rB,GAC5C,MAAMqE,EAAQ5wB,KAAKs6B,eAEnB1J,EAAMunB,KAAOvnB,EAAMunB,KAAKv3C,MAAM,EAAG2rB,EAAQ,IAG3CkN,EAAS/7B,UAAU66C,SAAW,SAAkBhsB,EAAOjuB,EAAKV,GAC1D,MAAMgzB,EAAQ5wB,KAAKs6B,eAEnBt6B,KAAKs4C,QAAQ/rB,GACK,OAAdqE,EAAM9vB,MACR8vB,EAAM9vB,IAAIxC,GAAOV,IAGrB67B,EAAS/7B,UAAUy6C,KAAO,WACxB,OAAOn4C,KAAKs6B,eAAe6d,KAAKpwC,KAAK,MAGvC0xB,EAAS/7B,UAAUs6C,YAAc,WAC/B,MAAMpnB,EAAQ5wB,KAAKs6B,eAEbhQ,EAAOsG,EAAM9vB,IAEnB,OADA8vB,EAAM9vB,IAAM,GACLwpB,GAGTmP,EAAS/7B,UAAU26C,YAAc,SAAqB/tB,GACpD,MAAMsG,EAAQ5wB,KAAKs6B,eAEbogB,EAAM9pB,EAAM9vB,IAElB,OADA8vB,EAAM9vB,IAAMwpB,EACLowB,GAGTjhB,EAAS/7B,UAAU6zB,MAAQ,SAAetiB,GACxC,IAAI8C,EACJ,MAAM6e,EAAQ5wB,KAAKs6B,eAEbqgB,EAAY1rC,aAAesrC,EASjC,GAPExoC,EADE4oC,EACI1rC,EAEA,IAAIsrC,EAAc3pB,EAAMunB,KAAKxhB,KAAI,SAASikB,GAC9C,MAAO,IAAMhB,KAAKC,UAAUe,GAAQ,OACnC7yC,KAAK,IAAKkH,EAAIwiB,SAAWxiB,EAAKA,EAAI4rC,QAGlCjqB,EAAM/E,QAAQivB,QACjB,MAAM/oC,EAKR,OAHK4oC,GACH/pB,EAAM0pB,OAAO51C,KAAKqN,GAEbA,GAGT0nB,EAAS/7B,UAAU85C,WAAa,SAAoB9oC,GAClD,MAAMkiB,EAAQ5wB,KAAKs6B,eACnB,OAAK1J,EAAM/E,QAAQivB,QAGZ,CACLpsC,OAAQ1O,KAAK64B,QAAQnqB,GAAU,KAAOA,EACtC4rC,OAAQ1pB,EAAM0pB,QAJP5rC,GAYXuE,EAASsnC,EAAet6C,OAExBs6C,EAAc78C,UAAU88C,QAAU,SAAiBvrC,GAKjD,GAJAjP,KAAKyxB,QAAUxiB,EAAM,SAAWjP,KAAKm4C,MAAQ,aACzCl4C,MAAM86C,mBACR96C,MAAM86C,kBAAkB/6C,KAAMu6C,IAE3Bv6C,KAAK66C,MACR,IAEE,MAAM,IAAI56C,MAAMD,KAAKyxB,SACrB,MAAOjrB,GACPxG,KAAK66C,MAAQr0C,EAAEq0C,MAGnB,OAAO76C,O,6BCtHT,SAASg7C,EAAQrkB,GACf,MAAMnxB,EAAM,GAWZ,OATArI,OAAOsuB,KAAKkL,GAAKxpB,SAAQ,SAAS7O,IAErB,EAANA,IAAYA,IACfA,GAAY,GAEd,MAAMV,EAAQ+4B,EAAIr4B,GAClBkH,EAAI5H,GAASU,KAGRkH,EAGTlI,EAAQ29C,SAAW,CACjBC,EAAG,YACHC,EAAG,cACHC,EAAG,UACHC,EAAG,WAEL/9C,EAAQg+C,eAAiBN,EAAQ19C,EAAQ29C,UAEzC39C,EAAQmmC,IAAM,CACZyX,EAAM,MACN,EAAM,OACN,EAAM,MACN,EAAM,SACN,EAAM,SACN,EAAM,QACN,EAAM,QACN,EAAM,UACN,EAAM,WACN,EAAM,OACN,GAAM,OACN,GAAM,QACN,GAAM,UACN,GAAM,cACN,GAAM,MACN,GAAM,MACN,GAAM,SACN,GAAM,WACN,GAAM,SACN,GAAM,WACN,GAAM,SACN,GAAM,UACN,GAAM,UACN,GAAM,WACN,GAAM,YACN,GAAM,SACN,GAAM,SACN,GAAM,UACN,GAAM,UAER59C,EAAQi+C,UAAYP,EAAQ19C,EAAQmmC,M,iBCzDpC,2BACE,aAGA,SAASz0B,EAAQ7N,EAAK8N,GACpB,IAAK9N,EAAK,MAAM,IAAIlB,MAAMgP,GAAO,oBAKnC,SAASgE,EAAU1V,EAAMC,GACvBD,EAAKE,OAASD,EACd,IAAIQ,EAAW,aACfA,EAASN,UAAYF,EAAUE,UAC/BH,EAAKG,UAAY,IAAIM,EACrBT,EAAKG,UAAUC,YAAcJ,EAK/B,SAAS8R,EAAIoG,EAAQC,EAAMjC,GACzB,GAAIpE,EAAGsG,KAAKF,GACV,OAAOA,EAGTzV,KAAK4V,SAAW,EAChB5V,KAAK6V,MAAQ,KACb7V,KAAKtB,OAAS,EAGdsB,KAAK8V,IAAM,KAEI,OAAXL,IACW,OAATC,GAA0B,OAATA,IACnBjC,EAASiC,EACTA,EAAO,IAGT1V,KAAK+V,MAAMN,GAAU,EAAGC,GAAQ,GAAIjC,GAAU,OAYlD,IAAIvV,EATkB,iBAAXb,EACTA,EAAOC,QAAU+R,EAEjB/R,EAAQ+R,GAAKA,EAGfA,EAAGA,GAAKA,EACRA,EAAG2G,SAAW,GAGd,IACE9X,EAAS,EAAQ,KAAUA,OAC3B,MAAOsI,IAoIT,SAASyP,EAAUzR,EAAKxC,EAAOC,GAG7B,IAFA,IAAIkN,EAAI,EACJnO,EAAMsE,KAAKC,IAAIf,EAAI9F,OAAQuD,GACtBT,EAAIQ,EAAOR,EAAIR,EAAKQ,IAAK,CAChC,IAAIyD,EAAIT,EAAIG,WAAWnD,GAAK,GAE5B2N,IAAM,EAIJA,GADElK,GAAK,IAAMA,GAAK,GACbA,EAAI,GAAK,GAGLA,GAAK,IAAMA,GAAK,GACpBA,EAAI,GAAK,GAIL,GAAJA,EAGT,OAAOkK,EAiCT,SAAS+G,EAAW1R,EAAKxC,EAAOC,EAAK0H,GAGnC,IAFA,IAAIwF,EAAI,EACJnO,EAAMsE,KAAKC,IAAIf,EAAI9F,OAAQuD,GACtBT,EAAIQ,EAAOR,EAAIR,EAAKQ,IAAK,CAChC,IAAIyD,EAAIT,EAAIG,WAAWnD,GAAK,GAE5B2N,GAAKxF,EAIHwF,GADElK,GAAK,GACFA,EAAI,GAAK,GAGLA,GAAK,GACTA,EAAI,GAAK,GAITA,EAGT,OAAOkK,EA5MTE,EAAGsG,KAAO,SAAe/F,GACvB,OAAIA,aAAeP,GAIJ,OAARO,GAA+B,iBAARA,GAC5BA,EAAIjS,YAAYqY,WAAa3G,EAAG2G,UAAYxN,MAAMhJ,QAAQoQ,EAAIiG,QAGlExG,EAAGxH,IAAM,SAAcsO,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGT/G,EAAG9J,IAAM,SAAc4Q,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGT/G,EAAG3R,UAAUqY,MAAQ,SAAeN,EAAQC,EAAMjC,GAChD,GAAsB,iBAAXgC,EACT,OAAOzV,KAAKsW,YAAYb,EAAQC,EAAMjC,GAGxC,GAAsB,iBAAXgC,EACT,OAAOzV,KAAKuW,WAAWd,EAAQC,EAAMjC,GAG1B,QAATiC,IACFA,EAAO,IAET1G,EAAO0G,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,IAGnD,IAAI1T,EAAQ,EACM,OAFlByT,EAASA,EAAOhU,WAAWiL,QAAQ,OAAQ,KAEhC,IACT1K,IAGW,KAAT0T,EACF1V,KAAKwW,UAAUf,EAAQzT,GAEvBhC,KAAKyW,WAAWhB,EAAQC,EAAM1T,GAGd,MAAdyT,EAAO,KACTzV,KAAK4V,SAAW,GAGlB5V,KAAK0W,QAEU,OAAXjD,GAEJzT,KAAKuW,WAAWvW,KAAKwP,UAAWkG,EAAMjC,IAGxCpE,EAAG3R,UAAU4Y,YAAc,SAAsBb,EAAQC,EAAMjC,GACzDgC,EAAS,IACXzV,KAAK4V,SAAW,EAChBH,GAAUA,GAERA,EAAS,UACXzV,KAAK6V,MAAQ,CAAW,SAATJ,GACfzV,KAAKtB,OAAS,GACL+W,EAAS,kBAClBzV,KAAK6V,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,UAEzBzV,KAAKtB,OAAS,IAEdsQ,EAAOyG,EAAS,kBAChBzV,KAAK6V,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,SACvB,GAEFzV,KAAKtB,OAAS,GAGD,OAAX+U,GAGJzT,KAAKuW,WAAWvW,KAAKwP,UAAWkG,EAAMjC,IAGxCpE,EAAG3R,UAAU6Y,WAAa,SAAqBd,EAAQC,EAAMjC,GAG3D,GADAzE,EAAgC,iBAAlByG,EAAO/W,QACjB+W,EAAO/W,QAAU,EAGnB,OAFAsB,KAAK6V,MAAQ,CAAE,GACf7V,KAAKtB,OAAS,EACPsB,KAGTA,KAAKtB,OAAS4G,KAAKqR,KAAKlB,EAAO/W,OAAS,GACxCsB,KAAK6V,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BxB,KAAK6V,MAAMrU,GAAK,EAGlB,IAAIoC,EAAGiM,EACH+G,EAAM,EACV,GAAe,OAAXnD,EACF,IAAKjS,EAAIiU,EAAO/W,OAAS,EAAGkF,EAAI,EAAGpC,GAAK,EAAGA,GAAK,EAC9CqO,EAAI4F,EAAOjU,GAAMiU,EAAOjU,EAAI,IAAM,EAAMiU,EAAOjU,EAAI,IAAM,GACzDxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,GAAMiM,IAAO,GAAK+G,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACPhT,UAGC,GAAe,OAAX6P,EACT,IAAKjS,EAAI,EAAGoC,EAAI,EAAGpC,EAAIiU,EAAO/W,OAAQ8C,GAAK,EACzCqO,EAAI4F,EAAOjU,GAAMiU,EAAOjU,EAAI,IAAM,EAAMiU,EAAOjU,EAAI,IAAM,GACzDxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,GAAMiM,IAAO,GAAK+G,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACPhT,KAIN,OAAO5D,KAAK0W,SA2BdrH,EAAG3R,UAAU8Y,UAAY,SAAoBf,EAAQzT,GAEnDhC,KAAKtB,OAAS4G,KAAKqR,MAAMlB,EAAO/W,OAASsD,GAAS,GAClDhC,KAAK6V,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BxB,KAAK6V,MAAMrU,GAAK,EAGlB,IAAIoC,EAAGiM,EAEH+G,EAAM,EACV,IAAKpV,EAAIiU,EAAO/W,OAAS,EAAGkF,EAAI,EAAGpC,GAAKQ,EAAOR,GAAK,EAClDqO,EAAIoG,EAASR,EAAQjU,EAAGA,EAAI,GAC5BxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAE9B5W,KAAK6V,MAAMjS,EAAI,IAAMiM,IAAO,GAAK+G,EAAO,SACxCA,GAAO,KACI,KACTA,GAAO,GACPhT,KAGApC,EAAI,IAAMQ,IACZ6N,EAAIoG,EAASR,EAAQzT,EAAOR,EAAI,GAChCxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,IAAMiM,IAAO,GAAK+G,EAAO,SAE1C5W,KAAK0W,SA2BPrH,EAAG3R,UAAU+Y,WAAa,SAAqBhB,EAAQC,EAAM1T,GAE3DhC,KAAK6V,MAAQ,CAAE,GACf7V,KAAKtB,OAAS,EAGd,IAAK,IAAImY,EAAU,EAAGC,EAAU,EAAGA,GAAW,SAAWA,GAAWpB,EAClEmB,IAEFA,IACAC,EAAWA,EAAUpB,EAAQ,EAO7B,IALA,IAAIqB,EAAQtB,EAAO/W,OAASsD,EACxBqO,EAAM0G,EAAQF,EACd5U,EAAMqD,KAAKC,IAAIwR,EAAOA,EAAQ1G,GAAOrO,EAErCoR,EAAO,EACF5R,EAAIQ,EAAOR,EAAIS,EAAKT,GAAKqV,EAChCzD,EAAO8C,EAAUT,EAAQjU,EAAGA,EAAIqV,EAASnB,GAEzC1V,KAAKgX,MAAMF,GACP9W,KAAK6V,MAAM,GAAKzC,EAAO,SACzBpT,KAAK6V,MAAM,IAAMzC,EAEjBpT,KAAKiX,OAAO7D,GAIhB,GAAY,IAAR/C,EAAW,CACb,IAAInG,EAAM,EAGV,IAFAkJ,EAAO8C,EAAUT,EAAQjU,EAAGiU,EAAO/W,OAAQgX,GAEtClU,EAAI,EAAGA,EAAI6O,EAAK7O,IACnB0I,GAAOwL,EAGT1V,KAAKgX,MAAM9M,GACPlK,KAAK6V,MAAM,GAAKzC,EAAO,SACzBpT,KAAK6V,MAAM,IAAMzC,EAEjBpT,KAAKiX,OAAO7D,KAKlB/D,EAAG3R,UAAUwD,KAAO,SAAegW,GACjCA,EAAKrB,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/B0V,EAAKrB,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAE7B0V,EAAKxY,OAASsB,KAAKtB,OACnBwY,EAAKtB,SAAW5V,KAAK4V,SACrBsB,EAAKpB,IAAM9V,KAAK8V,KAGlBzG,EAAG3R,UAAUyS,MAAQ,WACnB,IAAIhB,EAAI,IAAIE,EAAG,MAEf,OADArP,KAAKkB,KAAKiO,GACHA,GAGTE,EAAG3R,UAAUyZ,QAAU,SAAkBnY,GACvC,KAAOgB,KAAKtB,OAASM,GACnBgB,KAAK6V,MAAM7V,KAAKtB,UAAY,EAE9B,OAAOsB,MAITqP,EAAG3R,UAAUgZ,MAAQ,WACnB,KAAO1W,KAAKtB,OAAS,GAAqC,IAAhCsB,KAAK6V,MAAM7V,KAAKtB,OAAS,IACjDsB,KAAKtB,SAEP,OAAOsB,KAAKoX,aAGd/H,EAAG3R,UAAU0Z,UAAY,WAKvB,OAHoB,IAAhBpX,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,KAClC7V,KAAK4V,SAAW,GAEX5V,MAGTqP,EAAG3R,UAAUkK,QAAU,WACrB,OAAQ5H,KAAK8V,IAAM,UAAY,SAAW9V,KAAKyB,SAAS,IAAM,KAiChE,IAAI4V,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UAsjB9D,SAASC,EAAYC,EAAM7H,EAAKjH,GAC9BA,EAAIiN,SAAWhG,EAAIgG,SAAW6B,EAAK7B,SACnC,IAAI5U,EAAOyW,EAAK/Y,OAASkR,EAAIlR,OAAU,EACvCiK,EAAIjK,OAASsC,EACbA,EAAOA,EAAM,EAAK,EAGlB,IAAIiG,EAAoB,EAAhBwQ,EAAK5B,MAAM,GACfpT,EAAmB,EAAfmN,EAAIiG,MAAM,GACd1G,EAAIlI,EAAIxE,EAER0C,EAAS,SAAJgK,EACL4F,EAAS5F,EAAI,SAAa,EAC9BxG,EAAIkN,MAAM,GAAK1Q,EAEf,IAAK,IAAI+K,EAAI,EAAGA,EAAIlP,EAAKkP,IAAK,CAM5B,IAHA,IAAIwH,EAAS3C,IAAU,GACnB4C,EAAgB,SAAR5C,EACR6C,EAAOtS,KAAKC,IAAI2K,EAAGN,EAAIlR,OAAS,GAC3BkF,EAAI0B,KAAKuC,IAAI,EAAGqI,EAAIuH,EAAK/Y,OAAS,GAAIkF,GAAKgU,EAAMhU,IAAK,CAC7D,IAAIpC,EAAK0O,EAAItM,EAAK,EAIlB8T,IADAvI,GAFAlI,EAAoB,EAAhBwQ,EAAK5B,MAAMrU,KACfiB,EAAmB,EAAfmN,EAAIiG,MAAMjS,IACF+T,GACG,SAAa,EAC5BA,EAAY,SAAJxI,EAEVxG,EAAIkN,MAAM3F,GAAa,EAARyH,EACf5C,EAAiB,EAAT2C,EAQV,OANc,IAAV3C,EACFpM,EAAIkN,MAAM3F,GAAa,EAAR6E,EAEfpM,EAAIjK,SAGCiK,EAAI+N,QAzlBbrH,EAAG3R,UAAU+D,SAAW,SAAmBiU,EAAMmC,GAI/C,IAAIlP,EACJ,GAHAkP,EAAoB,EAAVA,GAAe,EAGZ,MAJbnC,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjC/M,EAAM,GAGN,IAFA,IAAIiO,EAAM,EACN7B,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIqO,EAAI7P,KAAK6V,MAAMrU,GACf4R,GAA+B,UAArBvD,GAAK+G,EAAO7B,IAAmBtT,SAAS,IAGpDkH,EADY,KADdoM,EAASlF,IAAO,GAAK+G,EAAQ,WACVpV,IAAMxB,KAAKtB,OAAS,EAC/B2Y,EAAM,EAAIjE,EAAK1U,QAAU0U,EAAOzK,EAEhCyK,EAAOzK,GAEfiO,GAAO,IACI,KACTA,GAAO,GACPpV,KAMJ,IAHc,IAAVuT,IACFpM,EAAMoM,EAAMtT,SAAS,IAAMkH,GAEtBA,EAAIjK,OAASmZ,GAAY,GAC9BlP,EAAM,IAAMA,EAKd,OAHsB,IAAlB3I,KAAK4V,WACPjN,EAAM,IAAMA,GAEPA,EAGT,GAAI+M,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,GAAI,CAElD,IAAIoC,EAAYR,EAAW5B,GAEvBqC,EAAYR,EAAW7B,GAC3B/M,EAAM,GACN,IAAI1D,EAAIjF,KAAKmQ,QAEb,IADAlL,EAAE2Q,SAAW,GACL3Q,EAAE+S,UAAU,CAClB,IAAI7I,EAAIlK,EAAEgT,KAAKF,GAAWtW,SAASiU,GAMjC/M,GALF1D,EAAIA,EAAEiT,MAAMH,IAELC,SAGC7I,EAAIxG,EAFJ0O,EAAMS,EAAY3I,EAAEzQ,QAAUyQ,EAAIxG,EAQ5C,IAHI3I,KAAKgY,WACPrP,EAAM,IAAMA,GAEPA,EAAIjK,OAASmZ,GAAY,GAC9BlP,EAAM,IAAMA,EAKd,OAHsB,IAAlB3I,KAAK4V,WACPjN,EAAM,IAAMA,GAEPA,EAGTqG,GAAO,EAAO,oCAGhBK,EAAG3R,UAAUya,SAAW,WACtB,IAAIzP,EAAM1I,KAAK6V,MAAM,GASrB,OARoB,IAAhB7V,KAAKtB,OACPgK,GAAuB,SAAhB1I,KAAK6V,MAAM,GACO,IAAhB7V,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,GAEzCnN,GAAO,iBAAoC,SAAhB1I,KAAK6V,MAAM,GAC7B7V,KAAKtB,OAAS,GACvBsQ,GAAO,EAAO,8CAEU,IAAlBhP,KAAK4V,UAAmBlN,EAAMA,GAGxC2G,EAAG3R,UAAU6K,OAAS,WACpB,OAAOvI,KAAKyB,SAAS,KAGvB4N,EAAG3R,UAAU0a,SAAW,SAAmB3E,EAAQ/U,GAEjD,OADAsQ,OAAyB,IAAX9Q,GACP8B,KAAKqY,YAAYna,EAAQuV,EAAQ/U,IAG1C2Q,EAAG3R,UAAU8R,QAAU,SAAkBiE,EAAQ/U,GAC/C,OAAOsB,KAAKqY,YAAY7P,MAAOiL,EAAQ/U,IAGzC2Q,EAAG3R,UAAU2a,YAAc,SAAsBC,EAAW7E,EAAQ/U,GAClE,IAAI2B,EAAaL,KAAKK,aAClBkY,EAAY7Z,GAAU4G,KAAKuC,IAAI,EAAGxH,GACtC2O,EAAO3O,GAAckY,EAAW,yCAChCvJ,EAAOuJ,EAAY,EAAG,+BAEtBvY,KAAK0W,QACL,IAGIjU,EAAGjB,EAHH0H,EAA0B,OAAXuK,EACfjO,EAAM,IAAI8S,EAAUC,GAGpBC,EAAIxY,KAAKmQ,QACb,GAAKjH,EAYE,CACL,IAAK1H,EAAI,GAAIgX,EAAER,SAAUxW,IACvBiB,EAAI+V,EAAElI,MAAM,KACZkI,EAAE/H,OAAO,GAETjL,EAAIhE,GAAKiB,EAGX,KAAOjB,EAAI+W,EAAW/W,IACpBgE,EAAIhE,GAAK,MArBM,CAEjB,IAAKA,EAAI,EAAGA,EAAI+W,EAAYlY,EAAYmB,IACtCgE,EAAIhE,GAAK,EAGX,IAAKA,EAAI,GAAIgX,EAAER,SAAUxW,IACvBiB,EAAI+V,EAAElI,MAAM,KACZkI,EAAE/H,OAAO,GAETjL,EAAI+S,EAAY/W,EAAI,GAAKiB,EAe7B,OAAO+C,GAGLF,KAAKmT,MACPpJ,EAAG3R,UAAUgb,WAAa,SAAqB7I,GAC7C,OAAO,GAAKvK,KAAKmT,MAAM5I,IAGzBR,EAAG3R,UAAUgb,WAAa,SAAqB7I,GAC7C,IAAI8I,EAAI9I,EACJV,EAAI,EAiBR,OAhBIwJ,GAAK,OACPxJ,GAAK,GACLwJ,KAAO,IAELA,GAAK,KACPxJ,GAAK,EACLwJ,KAAO,GAELA,GAAK,IACPxJ,GAAK,EACLwJ,KAAO,GAELA,GAAK,IACPxJ,GAAK,EACLwJ,KAAO,GAEFxJ,EAAIwJ,GAIftJ,EAAG3R,UAAUkb,UAAY,SAAoB/I,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAI8I,EAAI9I,EACJV,EAAI,EAoBR,OAnBqB,IAAZ,KAAJwJ,KACHxJ,GAAK,GACLwJ,KAAO,IAEU,IAAV,IAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,GAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,EAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,EAAJA,IACHxJ,IAEKA,GAITE,EAAG3R,UAAUsS,UAAY,WACvB,IAAIH,EAAI7P,KAAK6V,MAAM7V,KAAKtB,OAAS,GAC7BwG,EAAKlF,KAAK0Y,WAAW7I,GACzB,OAA2B,IAAnB7P,KAAKtB,OAAS,GAAUwG,GAiBlCmK,EAAG3R,UAAUmb,SAAW,WACtB,GAAI7Y,KAAKgY,SAAU,OAAO,EAG1B,IADA,IAAI7I,EAAI,EACC3N,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIiB,EAAIzC,KAAK4Y,UAAU5Y,KAAK6V,MAAMrU,IAElC,GADA2N,GAAK1M,EACK,KAANA,EAAU,MAEhB,OAAO0M,GAGTE,EAAG3R,UAAU2C,WAAa,WACxB,OAAOiF,KAAKqR,KAAK3W,KAAKgQ,YAAc,IAGtCX,EAAG3R,UAAUob,OAAS,SAAiBC,GACrC,OAAsB,IAAlB/Y,KAAK4V,SACA5V,KAAKgZ,MAAMC,MAAMF,GAAOG,MAAM,GAEhClZ,KAAKmQ,SAGdd,EAAG3R,UAAUyb,SAAW,SAAmBJ,GACzC,OAAI/Y,KAAKoZ,MAAML,EAAQ,GACd/Y,KAAKqZ,KAAKN,GAAOG,MAAM,GAAGI,OAE5BtZ,KAAKmQ,SAGdd,EAAG3R,UAAU6b,MAAQ,WACnB,OAAyB,IAAlBvZ,KAAK4V,UAIdvG,EAAG3R,UAAU8b,IAAM,WACjB,OAAOxZ,KAAKmQ,QAAQmJ,QAGtBjK,EAAG3R,UAAU4b,KAAO,WAKlB,OAJKtZ,KAAKgY,WACRhY,KAAK4V,UAAY,GAGZ5V,MAITqP,EAAG3R,UAAU+b,KAAO,SAAe7J,GACjC,KAAO5P,KAAKtB,OAASkR,EAAIlR,QACvBsB,KAAK6V,MAAM7V,KAAKtB,UAAY,EAG9B,IAAK,IAAI8C,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAC9BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAAKoO,EAAIiG,MAAMrU,GAG5C,OAAOxB,KAAK0W,SAGdrH,EAAG3R,UAAUgc,IAAM,SAAc9J,GAE/B,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAKyZ,KAAK7J,IAInBP,EAAG3R,UAAUic,GAAK,SAAa/J,GAC7B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQuJ,IAAI9J,GAC/CA,EAAIO,QAAQuJ,IAAI1Z,OAGzBqP,EAAG3R,UAAUkc,IAAM,SAAchK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQsJ,KAAK7J,GAChDA,EAAIO,QAAQsJ,KAAKzZ,OAI1BqP,EAAG3R,UAAUmc,MAAQ,SAAgBjK,GAEnC,IAAInN,EAEFA,EADEzC,KAAKtB,OAASkR,EAAIlR,OAChBkR,EAEA5P,KAGN,IAAK,IAAIwB,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAAKoO,EAAIiG,MAAMrU,GAK5C,OAFAxB,KAAKtB,OAAS+D,EAAE/D,OAETsB,KAAK0W,SAGdrH,EAAG3R,UAAUoc,KAAO,SAAelK,GAEjC,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAK6Z,MAAMjK,IAIpBP,EAAG3R,UAAUqc,IAAM,SAAcnK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ2J,KAAKlK,GAChDA,EAAIO,QAAQ2J,KAAK9Z,OAG1BqP,EAAG3R,UAAUsc,KAAO,SAAepK,GACjC,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ0J,MAAMjK,GACjDA,EAAIO,QAAQ0J,MAAM7Z,OAI3BqP,EAAG3R,UAAUuc,MAAQ,SAAgBrK,GAEnC,IAAI3I,EACAxE,EACAzC,KAAKtB,OAASkR,EAAIlR,QACpBuI,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAGN,IAAK,IAAIwB,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAAKiB,EAAEoT,MAAMrU,GAGvC,GAAIxB,OAASiH,EACX,KAAOzF,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAM5B,OAFAxB,KAAKtB,OAASuI,EAAEvI,OAETsB,KAAK0W,SAGdrH,EAAG3R,UAAUwc,KAAO,SAAetK,GAEjC,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAKia,MAAMrK,IAIpBP,EAAG3R,UAAUyc,IAAM,SAAcvK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ+J,KAAKtK,GAChDA,EAAIO,QAAQ+J,KAAKla,OAG1BqP,EAAG3R,UAAU0c,KAAO,SAAexK,GACjC,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ8J,MAAMrK,GACjDA,EAAIO,QAAQ8J,MAAMja,OAI3BqP,EAAG3R,UAAUub,MAAQ,SAAgBF,GACnC/J,EAAwB,iBAAV+J,GAAsBA,GAAS,GAE7C,IAAIsB,EAAsC,EAAxB/U,KAAKqR,KAAKoC,EAAQ,IAChCuB,EAAWvB,EAAQ,GAGvB/Y,KAAKmX,QAAQkD,GAETC,EAAW,GACbD,IAIF,IAAK,IAAI7Y,EAAI,EAAGA,EAAI6Y,EAAa7Y,IAC/BxB,KAAK6V,MAAMrU,GAAsB,UAAhBxB,KAAK6V,MAAMrU,GAS9B,OALI8Y,EAAW,IACbta,KAAK6V,MAAMrU,IAAMxB,KAAK6V,MAAMrU,GAAM,UAAc,GAAK8Y,GAIhDta,KAAK0W,SAGdrH,EAAG3R,UAAU2b,KAAO,SAAeN,GACjC,OAAO/Y,KAAKmQ,QAAQ8I,MAAMF,IAI5B1J,EAAG3R,UAAU6c,KAAO,SAAeC,EAAKrZ,GACtC6N,EAAsB,iBAARwL,GAAoBA,GAAO,GAEzC,IAAI5D,EAAO4D,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAUjB,OARAxa,KAAKmX,QAAQP,EAAM,GAGjB5W,KAAK6V,MAAMe,GADTzV,EACgBnB,KAAK6V,MAAMe,GAAQ,GAAK6D,EAExBza,KAAK6V,MAAMe,KAAS,GAAK6D,GAGtCza,KAAK0W,SAIdrH,EAAG3R,UAAUgd,KAAO,SAAe9K,GACjC,IAAIT,EAkBAlI,EAAGxE,EAfP,GAAsB,IAAlBzC,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAI7B,OAHA5V,KAAK4V,SAAW,EAChBzG,EAAInP,KAAK2a,KAAK/K,GACd5P,KAAK4V,UAAY,EACV5V,KAAKoX,YAGP,GAAsB,IAAlBpX,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAIpC,OAHAhG,EAAIgG,SAAW,EACfzG,EAAInP,KAAK2a,KAAK/K,GACdA,EAAIgG,SAAW,EACRzG,EAAEiI,YAKPpX,KAAKtB,OAASkR,EAAIlR,QACpBuI,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAIN,IADA,IAAI+U,EAAQ,EACHvT,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5B2N,GAAkB,EAAblI,EAAE4O,MAAMrU,KAAwB,EAAbiB,EAAEoT,MAAMrU,IAAUuT,EAC1C/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAChB4F,EAAQ5F,IAAM,GAEhB,KAAiB,IAAV4F,GAAevT,EAAIyF,EAAEvI,OAAQ8C,IAClC2N,GAAkB,EAAblI,EAAE4O,MAAMrU,IAAUuT,EACvB/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAChB4F,EAAQ5F,IAAM,GAIhB,GADAnP,KAAKtB,OAASuI,EAAEvI,OACF,IAAVqW,EACF/U,KAAK6V,MAAM7V,KAAKtB,QAAUqW,EAC1B/U,KAAKtB,cAEA,GAAIuI,IAAMjH,KACf,KAAOwB,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAI5B,OAAOxB,MAITqP,EAAG3R,UAAUkd,IAAM,SAAchL,GAC/B,IAAIpK,EACJ,OAAqB,IAAjBoK,EAAIgG,UAAoC,IAAlB5V,KAAK4V,UAC7BhG,EAAIgG,SAAW,EACfpQ,EAAMxF,KAAKuL,IAAIqE,GACfA,EAAIgG,UAAY,EACTpQ,GACmB,IAAjBoK,EAAIgG,UAAoC,IAAlB5V,KAAK4V,UACpC5V,KAAK4V,SAAW,EAChBpQ,EAAMoK,EAAIrE,IAAIvL,MACdA,KAAK4V,SAAW,EACTpQ,GAGLxF,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQuK,KAAK9K,GAEhDA,EAAIO,QAAQuK,KAAK1a,OAI1BqP,EAAG3R,UAAUid,KAAO,SAAe/K,GAEjC,GAAqB,IAAjBA,EAAIgG,SAAgB,CACtBhG,EAAIgG,SAAW,EACf,IAAIzG,EAAInP,KAAK0a,KAAK9K,GAElB,OADAA,EAAIgG,SAAW,EACRzG,EAAEiI,YAGJ,GAAsB,IAAlBpX,KAAK4V,SAId,OAHA5V,KAAK4V,SAAW,EAChB5V,KAAK0a,KAAK9K,GACV5P,KAAK4V,SAAW,EACT5V,KAAKoX,YAId,IAWInQ,EAAGxE,EAXH4T,EAAMrW,KAAKqW,IAAIzG,GAGnB,GAAY,IAARyG,EAIF,OAHArW,KAAK4V,SAAW,EAChB5V,KAAKtB,OAAS,EACdsB,KAAK6V,MAAM,GAAK,EACT7V,KAKLqW,EAAM,GACRpP,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAIN,IADA,IAAI+U,EAAQ,EACHvT,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAE5BuT,GADA5F,GAAkB,EAAblI,EAAE4O,MAAMrU,KAAwB,EAAbiB,EAAEoT,MAAMrU,IAAUuT,IAC7B,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAElB,KAAiB,IAAV4F,GAAevT,EAAIyF,EAAEvI,OAAQ8C,IAElCuT,GADA5F,GAAkB,EAAblI,EAAE4O,MAAMrU,IAAUuT,IACV,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAIlB,GAAc,IAAV4F,GAAevT,EAAIyF,EAAEvI,QAAUuI,IAAMjH,KACvC,KAAOwB,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAU5B,OANAxB,KAAKtB,OAAS4G,KAAKuC,IAAI7H,KAAKtB,OAAQ8C,GAEhCyF,IAAMjH,OACRA,KAAK4V,SAAW,GAGX5V,KAAK0W,SAIdrH,EAAG3R,UAAU6N,IAAM,SAAcqE,GAC/B,OAAO5P,KAAKmQ,QAAQwK,KAAK/K,IA+C3B,IAAIiL,EAAc,SAAsBpD,EAAM7H,EAAKjH,GACjD,IAIIxD,EACA2V,EACA5V,EANA+B,EAAIwQ,EAAK5B,MACTpT,EAAImN,EAAIiG,MACRkF,EAAIpS,EAAIkN,MACR5Q,EAAI,EAIJ+V,EAAY,EAAP/T,EAAE,GACPgU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPlU,EAAE,GACPmU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPrU,EAAE,GACPsU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxU,EAAE,GACPyU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3U,EAAE,GACP4U,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9U,EAAE,GACP+U,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjV,EAAE,GACPkV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPpV,EAAE,GACPqV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPvV,EAAE,GACPwV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP1V,EAAE,GACP2V,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPra,EAAE,GACPsa,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxa,EAAE,GACPya,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3a,EAAE,GACP4a,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9a,EAAE,GACP+a,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjb,EAAE,GACPkb,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAPpb,EAAE,GACPqb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPvb,EAAE,GACPwb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP1b,EAAE,GACP2b,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP7b,EAAE,GACP8b,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPhc,EAAE,GACPic,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjB9V,EAAIiN,SAAW6B,EAAK7B,SAAWhG,EAAIgG,SACnCjN,EAAIjK,OAAS,GAMb,IAAIkgB,IAAQ3Z,GAJZE,EAAKG,KAAKuZ,KAAK5D,EAAK8B,IAIE,KAAa,MAFnCjC,GADAA,EAAMxV,KAAKuZ,KAAK5D,EAAK+B,IACR1X,KAAKuZ,KAAK3D,EAAK6B,GAAQ,KAEU,IAAO,EACrD9X,IAFAC,EAAKI,KAAKuZ,KAAK3D,EAAK8B,KAEPlC,IAAQ,IAAO,IAAM8D,KAAO,IAAO,EAChDA,IAAM,SAENzZ,EAAKG,KAAKuZ,KAAKzD,EAAK2B,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKzD,EAAK4B,IACR1X,KAAKuZ,KAAKxD,EAAK0B,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKxD,EAAK2B,GAKpB,IAAI8B,IAAQ7Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKiC,GAAQ,GAIZ,KAAa,MAFnCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKkC,GAAQ,GACvB7X,KAAKuZ,KAAK3D,EAAKgC,GAAQ,KAEU,IAAO,EACrDjY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKiC,GAAQ,IAErBrC,IAAQ,IAAO,IAAMgE,KAAO,IAAO,EAChDA,IAAM,SAEN3Z,EAAKG,KAAKuZ,KAAKtD,EAAKwB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKtD,EAAKyB,IACR1X,KAAKuZ,KAAKrD,EAAKuB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKrD,EAAKwB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK8B,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK+B,GAAQ,GACvB7X,KAAKuZ,KAAKxD,EAAK6B,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK8B,GAAQ,EAKlC,IAAI4B,IAAQ9Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKoC,GAAQ,GAIZ,KAAa,MAFnCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKqC,GAAQ,GACvBhY,KAAKuZ,KAAK3D,EAAKmC,GAAQ,KAEU,IAAO,EACrDpY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKoC,GAAQ,IAErBxC,IAAQ,IAAO,IAAMiE,KAAO,IAAO,EAChDA,IAAM,SAEN5Z,EAAKG,KAAKuZ,KAAKnD,EAAKqB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKnD,EAAKsB,IACR1X,KAAKuZ,KAAKlD,EAAKoB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKlD,EAAKqB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK2B,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK4B,GAAQ,GACvB7X,KAAKuZ,KAAKrD,EAAK0B,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK2B,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKiC,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKkC,GAAQ,GACvBhY,KAAKuZ,KAAKxD,EAAKgC,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKiC,GAAQ,EAKlC,IAAI0B,IAAQ/Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKuC,GAAQ,GAIZ,KAAa,MAFnC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKwC,GAAQ,GACvBnY,KAAKuZ,KAAK3D,EAAKsC,GAAQ,KAEU,IAAO,EACrDvY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKuC,GAAQ,IAErB3C,IAAQ,IAAO,IAAMkE,KAAO,IAAO,EAChDA,IAAM,SAEN7Z,EAAKG,KAAKuZ,KAAKhD,EAAKkB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKhD,EAAKmB,IACR1X,KAAKuZ,KAAK/C,EAAKiB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAK/C,EAAKkB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKwB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKyB,GAAQ,GACvB7X,KAAKuZ,KAAKlD,EAAKuB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKwB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK8B,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK+B,GAAQ,GACvBhY,KAAKuZ,KAAKrD,EAAK6B,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK8B,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKoC,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKqC,GAAQ,GACvBnY,KAAKuZ,KAAKxD,EAAKmC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKoC,GAAQ,EAKlC,IAAIwB,IAAQha,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAK0C,GAAQ,GAIZ,KAAa,MAFnC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK2C,IAAQ,GACvBtY,KAAKuZ,KAAK3D,EAAKyC,GAAQ,KAEU,IAAO,EACrD1Y,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAK0C,IAAQ,IAErB9C,IAAQ,IAAO,IAAMmE,KAAO,IAAO,EAChDA,IAAM,SAEN9Z,EAAKG,KAAKuZ,KAAK7C,EAAKe,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAK7C,EAAKgB,IACR1X,KAAKuZ,KAAK5C,EAAKc,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAK5C,EAAKe,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKqB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKsB,GAAQ,GACvB7X,KAAKuZ,KAAK/C,EAAKoB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKqB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK2B,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK4B,GAAQ,GACvBhY,KAAKuZ,KAAKlD,EAAK0B,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK2B,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKiC,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKkC,GAAQ,GACvBnY,KAAKuZ,KAAKrD,EAAKgC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKiC,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKuC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKwC,IAAQ,GACvBtY,KAAKuZ,KAAKxD,EAAKsC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKuC,IAAQ,EAKlC,IAAIsB,IAAQja,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAK6C,IAAQ,GAIZ,KAAa,MAFnChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK8C,IAAQ,GACvBzY,KAAKuZ,KAAK3D,EAAK4C,IAAQ,KAEU,IAAO,EACrD7Y,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAK6C,IAAQ,IAErBjD,IAAQ,IAAO,IAAMoE,KAAO,IAAO,EAChDA,IAAM,SAEN/Z,EAAKG,KAAKuZ,KAAK1C,EAAKY,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAK1C,EAAKa,IACR1X,KAAKuZ,KAAKzC,EAAKW,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKzC,EAAKY,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKkB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKmB,GAAQ,GACvB7X,KAAKuZ,KAAK5C,EAAKiB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKkB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKwB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKyB,GAAQ,GACvBhY,KAAKuZ,KAAK/C,EAAKuB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKwB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK8B,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK+B,GAAQ,GACvBnY,KAAKuZ,KAAKlD,EAAK6B,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK8B,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKoC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKqC,IAAQ,GACvBtY,KAAKuZ,KAAKrD,EAAKmC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKoC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK0C,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK2C,IAAQ,GACvBzY,KAAKuZ,KAAKxD,EAAKyC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK0C,IAAQ,EAKlC,IAAIoB,IAAQla,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKgD,IAAQ,GAIZ,KAAa,MAFnCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKiD,IAAQ,GACvB5Y,KAAKuZ,KAAK3D,EAAK+C,IAAQ,KAEU,IAAO,EACrDhZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKgD,IAAQ,IAErBpD,IAAQ,IAAO,IAAMqE,KAAO,IAAO,EAChDA,IAAM,SAENha,EAAKG,KAAKuZ,KAAKvC,EAAKS,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKvC,EAAKU,IACR1X,KAAKuZ,KAAKtC,EAAKQ,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKtC,EAAKS,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKe,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKgB,GAAQ,GACvB7X,KAAKuZ,KAAKzC,EAAKc,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKe,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKqB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKsB,GAAQ,GACvBhY,KAAKuZ,KAAK5C,EAAKoB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKqB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK2B,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK4B,GAAQ,GACvBnY,KAAKuZ,KAAK/C,EAAK0B,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK2B,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKiC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKkC,IAAQ,GACvBtY,KAAKuZ,KAAKlD,EAAKgC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKiC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKuC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKwC,IAAQ,GACvBzY,KAAKuZ,KAAKrD,EAAKsC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKuC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK6C,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK8C,IAAQ,GACvB5Y,KAAKuZ,KAAKxD,EAAK4C,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK6C,IAAQ,EAKlC,IAAIkB,IAAQna,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKmD,IAAQ,GAIZ,KAAa,MAFnCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKoD,IAAQ,GACvB/Y,KAAKuZ,KAAK3D,EAAKkD,IAAQ,KAEU,IAAO,EACrDnZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKmD,IAAQ,IAErBvD,IAAQ,IAAO,IAAMsE,KAAO,IAAO,EAChDA,IAAM,SAENja,EAAKG,KAAKuZ,KAAKpC,EAAKM,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKpC,EAAKO,IACR1X,KAAKuZ,KAAKnC,EAAKK,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKnC,EAAKM,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKY,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKa,GAAQ,GACvB7X,KAAKuZ,KAAKtC,EAAKW,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKY,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKkB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKmB,GAAQ,GACvBhY,KAAKuZ,KAAKzC,EAAKiB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKkB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKwB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKyB,GAAQ,GACvBnY,KAAKuZ,KAAK5C,EAAKuB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKwB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK8B,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK+B,IAAQ,GACvBtY,KAAKuZ,KAAK/C,EAAK6B,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK8B,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKoC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKqC,IAAQ,GACvBzY,KAAKuZ,KAAKlD,EAAKmC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKoC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK0C,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK2C,IAAQ,GACvB5Y,KAAKuZ,KAAKrD,EAAKyC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK0C,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKgD,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKiD,IAAQ,GACvB/Y,KAAKuZ,KAAKxD,EAAK+C,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKgD,IAAQ,EAKlC,IAAIgB,IAAQpa,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKsD,IAAQ,GAIZ,KAAa,MAFnCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKuD,IAAQ,GACvBlZ,KAAKuZ,KAAK3D,EAAKqD,IAAQ,KAEU,IAAO,EACrDtZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKsD,IAAQ,IAErB1D,IAAQ,IAAO,IAAMuE,KAAO,IAAO,EAChDA,IAAM,SAENla,EAAKG,KAAKuZ,KAAKjC,EAAKG,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKI,IACR1X,KAAKuZ,KAAKhC,EAAKE,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKhC,EAAKG,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKS,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKU,GAAQ,GACvB7X,KAAKuZ,KAAKnC,EAAKQ,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKS,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKe,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKgB,GAAQ,GACvBhY,KAAKuZ,KAAKtC,EAAKc,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKe,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKqB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKsB,GAAQ,GACvBnY,KAAKuZ,KAAKzC,EAAKoB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKqB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK2B,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK4B,IAAQ,GACvBtY,KAAKuZ,KAAK5C,EAAK0B,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK2B,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKiC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKkC,IAAQ,GACvBzY,KAAKuZ,KAAK/C,EAAKgC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKiC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKuC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKwC,IAAQ,GACvB5Y,KAAKuZ,KAAKlD,EAAKsC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKuC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK6C,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK8C,IAAQ,GACvB/Y,KAAKuZ,KAAKrD,EAAK4C,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK6C,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKmD,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKoD,IAAQ,GACvBlZ,KAAKuZ,KAAKxD,EAAKkD,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKmD,IAAQ,EAKlC,IAAIc,IAAQra,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKyD,IAAQ,GAIZ,KAAa,MAFnC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK0D,IAAQ,GACvBrZ,KAAKuZ,KAAK3D,EAAKwD,IAAQ,KAEU,IAAO,EACrDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKyD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMwE,KAAO,IAAO,EAChDA,IAAM,SAENna,EAAKG,KAAKuZ,KAAKjC,EAAKM,GAEpBpC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKO,IACR7X,KAAKuZ,KAAKhC,EAAKK,GAAQ,EACpChY,EAAKI,KAAKuZ,KAAKhC,EAAKM,GACpBhY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKY,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKa,GAAQ,GACvBhY,KAAKuZ,KAAKnC,EAAKW,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKY,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKkB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKmB,GAAQ,GACvBnY,KAAKuZ,KAAKtC,EAAKiB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKkB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKwB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKyB,IAAQ,GACvBtY,KAAKuZ,KAAKzC,EAAKuB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKwB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK8B,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK+B,IAAQ,GACvBzY,KAAKuZ,KAAK5C,EAAK6B,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK8B,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKoC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKqC,IAAQ,GACvB5Y,KAAKuZ,KAAK/C,EAAKmC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKoC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK0C,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK2C,IAAQ,GACvB/Y,KAAKuZ,KAAKlD,EAAKyC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK0C,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKgD,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKiD,IAAQ,GACvBlZ,KAAKuZ,KAAKrD,EAAK+C,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKgD,IAAQ,EAKlC,IAAIe,IAASta,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKsD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKuD,IAAQ,GACvBrZ,KAAKuZ,KAAKxD,EAAKqD,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKsD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMyE,KAAQ,IAAO,EACjDA,IAAO,SAEPpa,EAAKG,KAAKuZ,KAAKjC,EAAKS,GAEpBvC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKU,IACRhY,KAAKuZ,KAAKhC,EAAKQ,GAAQ,EACpCnY,EAAKI,KAAKuZ,KAAKhC,EAAKS,GACpBnY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKe,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKgB,GAAQ,GACvBnY,KAAKuZ,KAAKnC,EAAKc,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKe,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKqB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKsB,IAAQ,GACvBtY,KAAKuZ,KAAKtC,EAAKoB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKqB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAK2B,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAK4B,IAAQ,GACvBzY,KAAKuZ,KAAKzC,EAAK0B,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAK2B,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKiC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKkC,IAAQ,GACvB5Y,KAAKuZ,KAAK5C,EAAKgC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKiC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKuC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKwC,IAAQ,GACvB/Y,KAAKuZ,KAAK/C,EAAKsC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKuC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK6C,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK8C,IAAQ,GACvBlZ,KAAKuZ,KAAKlD,EAAK4C,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK6C,IAAQ,EAKlC,IAAIgB,IAASva,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKmD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKoD,IAAQ,GACvBrZ,KAAKuZ,KAAKrD,EAAKkD,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKmD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM0E,KAAQ,IAAO,EACjDA,IAAO,SAEPra,EAAKG,KAAKuZ,KAAKjC,EAAKY,GAEpB1C,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKa,IACRnY,KAAKuZ,KAAKhC,EAAKW,GAAQ,EACpCtY,EAAKI,KAAKuZ,KAAKhC,EAAKY,GACpBtY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKkB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKmB,IAAQ,GACvBtY,KAAKuZ,KAAKnC,EAAKiB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKkB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKwB,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKyB,IAAQ,GACvBzY,KAAKuZ,KAAKtC,EAAKuB,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKwB,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAK8B,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAK+B,IAAQ,GACvB5Y,KAAKuZ,KAAKzC,EAAK6B,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAK8B,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKoC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKqC,IAAQ,GACvB/Y,KAAKuZ,KAAK5C,EAAKmC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKoC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK0C,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK2C,IAAQ,GACvBlZ,KAAKuZ,KAAK/C,EAAKyC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK0C,IAAQ,EAKlC,IAAIiB,IAASxa,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKgD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKiD,IAAQ,GACvBrZ,KAAKuZ,KAAKlD,EAAK+C,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKgD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM2E,KAAQ,IAAO,EACjDA,IAAO,SAEPta,EAAKG,KAAKuZ,KAAKjC,EAAKe,GAEpB7C,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKgB,KACRtY,KAAKuZ,KAAKhC,EAAKc,GAAQ,EACpCzY,EAAKI,KAAKuZ,KAAKhC,EAAKe,IACpBzY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKqB,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKsB,IAAQ,GACvBzY,KAAKuZ,KAAKnC,EAAKoB,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKqB,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAK2B,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAK4B,IAAQ,GACvB5Y,KAAKuZ,KAAKtC,EAAK0B,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAK2B,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKiC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKkC,IAAQ,GACvB/Y,KAAKuZ,KAAKzC,EAAKgC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKiC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKuC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKwC,IAAQ,GACvBlZ,KAAKuZ,KAAK5C,EAAKsC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKuC,IAAQ,EAKlC,IAAIkB,IAASza,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK6C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK8C,IAAQ,GACvBrZ,KAAKuZ,KAAK/C,EAAK4C,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK6C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM4E,KAAQ,IAAO,EACjDA,IAAO,SAEPva,EAAKG,KAAKuZ,KAAKjC,EAAKkB,IAEpBhD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKmB,KACRzY,KAAKuZ,KAAKhC,EAAKiB,IAAQ,EACpC5Y,EAAKI,KAAKuZ,KAAKhC,EAAKkB,IACpB5Y,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKwB,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKyB,IAAQ,GACvB5Y,KAAKuZ,KAAKnC,EAAKuB,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKwB,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAK8B,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAK+B,IAAQ,GACvB/Y,KAAKuZ,KAAKtC,EAAK6B,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAK8B,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKoC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKqC,IAAQ,GACvBlZ,KAAKuZ,KAAKzC,EAAKmC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKoC,IAAQ,EAKlC,IAAImB,IAAS1a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK0C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK2C,IAAQ,GACvBrZ,KAAKuZ,KAAK5C,EAAKyC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK0C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM6E,KAAQ,IAAO,EACjDA,IAAO,SAEPxa,EAAKG,KAAKuZ,KAAKjC,EAAKqB,IAEpBnD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKsB,KACR5Y,KAAKuZ,KAAKhC,EAAKoB,IAAQ,EACpC/Y,EAAKI,KAAKuZ,KAAKhC,EAAKqB,IACpB/Y,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAK2B,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAK4B,IAAQ,GACvB/Y,KAAKuZ,KAAKnC,EAAK0B,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAK2B,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKiC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKkC,IAAQ,GACvBlZ,KAAKuZ,KAAKtC,EAAKgC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKiC,IAAQ,EAKlC,IAAIoB,IAAS3a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKuC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKwC,IAAQ,GACvBrZ,KAAKuZ,KAAKzC,EAAKsC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKuC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM8E,KAAQ,IAAO,EACjDA,IAAO,SAEPza,EAAKG,KAAKuZ,KAAKjC,EAAKwB,IAEpBtD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKyB,KACR/Y,KAAKuZ,KAAKhC,EAAKuB,IAAQ,EACpClZ,EAAKI,KAAKuZ,KAAKhC,EAAKwB,IACpBlZ,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAK8B,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAK+B,IAAQ,GACvBlZ,KAAKuZ,KAAKnC,EAAK6B,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAK8B,IAAQ,EAKlC,IAAIqB,IAAS5a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKoC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKqC,IAAQ,GACvBrZ,KAAKuZ,KAAKtC,EAAKmC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKoC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM+E,KAAQ,IAAO,EACjDA,IAAO,SAEP1a,EAAKG,KAAKuZ,KAAKjC,EAAK2B,IAEpBzD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAK4B,KACRlZ,KAAKuZ,KAAKhC,EAAK0B,IAAQ,EACpCrZ,EAAKI,KAAKuZ,KAAKhC,EAAK2B,IAKpB,IAAIsB,IAAS7a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKiC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKkC,IAAQ,GACvBrZ,KAAKuZ,KAAKnC,EAAKgC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKiC,IAAQ,IAErB7D,IAAQ,IAAO,IAAMgF,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAAS9a,GAJbE,EAAKG,KAAKuZ,KAAKjC,EAAK8B,KAIG,KAAa,MAFpC5D,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAK+B,KACRrZ,KAAKuZ,KAAKhC,EAAK6B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAzZ,IAFAC,EAAKI,KAAKuZ,KAAKhC,EAAK8B,MAEP7D,IAAQ,IAAO,IAAMiF,KAAQ,IAAO,EACjDA,IAAO,SACPhF,EAAE,GAAK6D,GACP7D,EAAE,GAAK+D,GACP/D,EAAE,GAAKgE,GACPhE,EAAE,GAAKiE,GACPjE,EAAE,GAAKkE,GACPlE,EAAE,GAAKmE,GACPnE,EAAE,GAAKoE,GACPpE,EAAE,GAAKqE,GACPrE,EAAE,GAAKsE,GACPtE,EAAE,GAAKuE,GACPvE,EAAE,IAAMwE,GACRxE,EAAE,IAAMyE,GACRzE,EAAE,IAAM0E,GACR1E,EAAE,IAAM2E,GACR3E,EAAE,IAAM4E,GACR5E,EAAE,IAAM6E,GACR7E,EAAE,IAAM8E,GACR9E,EAAE,IAAM+E,GACR/E,EAAE,IAAMgF,GACE,IAAN9a,IACF8V,EAAE,IAAM9V,EACR0D,EAAIjK,UAECiK,GAiDT,SAASqX,EAAYvI,EAAM7H,EAAKjH,GAE9B,OADW,IAAIsX,GACHC,KAAKzI,EAAM7H,EAAKjH,GAsB9B,SAASsX,EAAM/Y,EAAGC,GAChBnH,KAAKkH,EAAIA,EACTlH,KAAKmH,EAAIA,EAvEN7B,KAAKuZ,OACRhE,EAAcrD,GAiDhBnI,EAAG3R,UAAUyiB,MAAQ,SAAgBvQ,EAAKjH,GACxC,IACI3H,EAAMhB,KAAKtB,OAASkR,EAAIlR,OAW5B,OAVoB,KAAhBsB,KAAKtB,QAAgC,KAAfkR,EAAIlR,OACtBmc,EAAY7a,KAAM4P,EAAKjH,GACpB3H,EAAM,GACTwW,EAAWxX,KAAM4P,EAAKjH,GACnB3H,EAAM,KArDnB,SAAmByW,EAAM7H,EAAKjH,GAC5BA,EAAIiN,SAAWhG,EAAIgG,SAAW6B,EAAK7B,SACnCjN,EAAIjK,OAAS+Y,EAAK/Y,OAASkR,EAAIlR,OAI/B,IAFA,IAAIqW,EAAQ,EACRqL,EAAU,EACLlQ,EAAI,EAAGA,EAAIvH,EAAIjK,OAAS,EAAGwR,IAAK,CAGvC,IAAIwH,EAAS0I,EACbA,EAAU,EAGV,IAFA,IAAIzI,EAAgB,SAAR5C,EACR6C,EAAOtS,KAAKC,IAAI2K,EAAGN,EAAIlR,OAAS,GAC3BkF,EAAI0B,KAAKuC,IAAI,EAAGqI,EAAIuH,EAAK/Y,OAAS,GAAIkF,GAAKgU,EAAMhU,IAAK,CAC7D,IAAIpC,EAAI0O,EAAItM,EAGRuL,GAFoB,EAAhBsI,EAAK5B,MAAMrU,KACI,EAAfoO,EAAIiG,MAAMjS,IAGduB,EAAS,SAAJgK,EAGTwI,EAAa,UADbxS,EAAMA,EAAKwS,EAAS,GAIpByI,IAFA1I,GAHAA,EAAUA,GAAWvI,EAAI,SAAa,GAAM,IAGxBhK,IAAO,IAAO,KAEZ,GACtBuS,GAAU,SAEZ/O,EAAIkN,MAAM3F,GAAKyH,EACf5C,EAAQ2C,EACRA,EAAS0I,EAQX,OANc,IAAVrL,EACFpM,EAAIkN,MAAM3F,GAAK6E,EAEfpM,EAAIjK,SAGCiK,EAAI+N,QAgBH2J,CAASrgB,KAAM4P,EAAKjH,GAEpBqX,EAAWhgB,KAAM4P,EAAKjH,IAchCsX,EAAKviB,UAAU4iB,QAAU,SAAkBC,GAGzC,IAFA,IAAI5H,EAAI,IAAInQ,MAAM+X,GACdlT,EAAIgC,EAAG3R,UAAUgb,WAAW6H,GAAK,EAC5B/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrBmX,EAAEnX,GAAKxB,KAAKwgB,OAAOhf,EAAG6L,EAAGkT,GAG3B,OAAO5H,GAITsH,EAAKviB,UAAU8iB,OAAS,SAAiBtZ,EAAGmG,EAAGkT,GAC7C,GAAU,IAANrZ,GAAWA,IAAMqZ,EAAI,EAAG,OAAOrZ,EAGnC,IADA,IAAIuZ,EAAK,EACAjf,EAAI,EAAGA,EAAI6L,EAAG7L,IACrBif,IAAW,EAAJvZ,IAAWmG,EAAI7L,EAAI,EAC1B0F,IAAM,EAGR,OAAOuZ,GAKTR,EAAKviB,UAAUgjB,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GACpE,IAAK,IAAI/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrBsf,EAAKtf,GAAKof,EAAID,EAAInf,IAClBuf,EAAKvf,GAAKqf,EAAIF,EAAInf,KAItBye,EAAKviB,UAAUsjB,UAAY,SAAoBJ,EAAKC,EAAKC,EAAMC,EAAMR,EAAGI,GACtE3gB,KAAK0gB,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GAExC,IAAK,IAAIU,EAAI,EAAGA,EAAIV,EAAGU,IAAM,EAM3B,IALA,IAAI5T,EAAI4T,GAAK,EAETC,EAAQ5b,KAAK6b,IAAI,EAAI7b,KAAK8b,GAAK/T,GAC/BgU,EAAQ/b,KAAKgc,IAAI,EAAIhc,KAAK8b,GAAK/T,GAE1BkG,EAAI,EAAGA,EAAIgN,EAAGhN,GAAKlG,EAI1B,IAHA,IAAIkU,EAASL,EACTM,EAASH,EAEJzd,EAAI,EAAGA,EAAIqd,EAAGrd,IAAK,CAC1B,IAAI6d,EAAKX,EAAKvN,EAAI3P,GACd8d,EAAKX,EAAKxN,EAAI3P,GAEd+d,EAAKb,EAAKvN,EAAI3P,EAAIqd,GAClBW,EAAKb,EAAKxN,EAAI3P,EAAIqd,GAElBY,EAAKN,EAASI,EAAKH,EAASI,EAEhCA,EAAKL,EAASK,EAAKJ,EAASG,EAC5BA,EAAKE,EAELf,EAAKvN,EAAI3P,GAAK6d,EAAKE,EACnBZ,EAAKxN,EAAI3P,GAAK8d,EAAKE,EAEnBd,EAAKvN,EAAI3P,EAAIqd,GAAKQ,EAAKE,EACvBZ,EAAKxN,EAAI3P,EAAIqd,GAAKS,EAAKE,EAGnBhe,IAAMyJ,IACRwU,EAAKX,EAAQK,EAASF,EAAQG,EAE9BA,EAASN,EAAQM,EAASH,EAAQE,EAClCA,EAASM,KAOnB5B,EAAKviB,UAAUokB,YAAc,SAAsBpf,EAAGC,GACpD,IAAI4d,EAAqB,EAAjBjb,KAAKuC,IAAIlF,EAAGD,GAChBqf,EAAU,EAAJxB,EACN/e,EAAI,EACR,IAAK+e,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/B/e,IAGF,OAAO,GAAKA,EAAI,EAAIugB,GAGtB9B,EAAKviB,UAAUskB,UAAY,SAAoBpB,EAAKC,EAAKN,GACvD,KAAIA,GAAK,GAET,IAAK,IAAI/e,EAAI,EAAGA,EAAI+e,EAAI,EAAG/e,IAAK,CAC9B,IAAImX,EAAIiI,EAAIpf,GAEZof,EAAIpf,GAAKof,EAAIL,EAAI/e,EAAI,GACrBof,EAAIL,EAAI/e,EAAI,GAAKmX,EAEjBA,EAAIkI,EAAIrf,GAERqf,EAAIrf,IAAMqf,EAAIN,EAAI/e,EAAI,GACtBqf,EAAIN,EAAI/e,EAAI,IAAMmX,IAItBsH,EAAKviB,UAAUukB,aAAe,SAAuBhS,EAAIsQ,GAEvD,IADA,IAAIxL,EAAQ,EACHvT,EAAI,EAAGA,EAAI+e,EAAI,EAAG/e,IAAK,CAC9B,IAAIqO,EAAoC,KAAhCvK,KAAK4c,MAAMjS,EAAG,EAAIzO,EAAI,GAAK+e,GACjCjb,KAAK4c,MAAMjS,EAAG,EAAIzO,GAAK+e,GACvBxL,EAEF9E,EAAGzO,GAAS,SAAJqO,EAGNkF,EADElF,EAAI,SACE,EAEAA,EAAI,SAAY,EAI5B,OAAOI,GAGTgQ,EAAKviB,UAAUykB,WAAa,SAAqBlS,EAAIjP,EAAK4f,EAAKL,GAE7D,IADA,IAAIxL,EAAQ,EACHvT,EAAI,EAAGA,EAAIR,EAAKQ,IACvBuT,GAAyB,EAAR9E,EAAGzO,GAEpBof,EAAI,EAAIpf,GAAa,KAARuT,EAAgBA,KAAkB,GAC/C6L,EAAI,EAAIpf,EAAI,GAAa,KAARuT,EAAgBA,KAAkB,GAIrD,IAAKvT,EAAI,EAAIR,EAAKQ,EAAI+e,IAAK/e,EACzBof,EAAIpf,GAAK,EAGXwN,EAAiB,IAAV+F,GACP/F,EAA6B,KAAb,KAAR+F,KAGVkL,EAAKviB,UAAU0kB,KAAO,SAAe7B,GAEnC,IADA,IAAI8B,EAAK,IAAI7Z,MAAM+X,GACV/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrB6gB,EAAG7gB,GAAK,EAGV,OAAO6gB,GAGTpC,EAAKviB,UAAUwiB,KAAO,SAAehZ,EAAGC,EAAGwB,GACzC,IAAI4X,EAAI,EAAIvgB,KAAK8hB,YAAY5a,EAAExI,OAAQyI,EAAEzI,QAErCiiB,EAAM3gB,KAAKsgB,QAAQC,GAEnB+B,EAAItiB,KAAKoiB,KAAK7B,GAEdK,EAAM,IAAIpY,MAAM+X,GAChBgC,EAAO,IAAI/Z,MAAM+X,GACjBiC,EAAO,IAAIha,MAAM+X,GAEjBkC,EAAO,IAAIja,MAAM+X,GACjBmC,EAAQ,IAAIla,MAAM+X,GAClBoC,EAAQ,IAAIna,MAAM+X,GAElBqC,EAAOja,EAAIkN,MACf+M,EAAKlkB,OAAS6hB,EAEdvgB,KAAKmiB,WAAWjb,EAAE2O,MAAO3O,EAAExI,OAAQkiB,EAAKL,GACxCvgB,KAAKmiB,WAAWhb,EAAE0O,MAAO1O,EAAEzI,OAAQ+jB,EAAMlC,GAEzCvgB,KAAKghB,UAAUJ,EAAK0B,EAAGC,EAAMC,EAAMjC,EAAGI,GACtC3gB,KAAKghB,UAAUyB,EAAMH,EAAGI,EAAOC,EAAOpC,EAAGI,GAEzC,IAAK,IAAInf,EAAI,EAAGA,EAAI+e,EAAG/e,IAAK,CAC1B,IAAIqgB,EAAKU,EAAK/gB,GAAKkhB,EAAMlhB,GAAKghB,EAAKhhB,GAAKmhB,EAAMnhB,GAC9CghB,EAAKhhB,GAAK+gB,EAAK/gB,GAAKmhB,EAAMnhB,GAAKghB,EAAKhhB,GAAKkhB,EAAMlhB,GAC/C+gB,EAAK/gB,GAAKqgB,EAUZ,OAPA7hB,KAAKgiB,UAAUO,EAAMC,EAAMjC,GAC3BvgB,KAAKghB,UAAUuB,EAAMC,EAAMI,EAAMN,EAAG/B,EAAGI,GACvC3gB,KAAKgiB,UAAUY,EAAMN,EAAG/B,GACxBvgB,KAAKiiB,aAAaW,EAAMrC,GAExB5X,EAAIiN,SAAW1O,EAAE0O,SAAWzO,EAAEyO,SAC9BjN,EAAIjK,OAASwI,EAAExI,OAASyI,EAAEzI,OACnBiK,EAAI+N,SAIbrH,EAAG3R,UAAUiM,IAAM,SAAciG,GAC/B,IAAIjH,EAAM,IAAI0G,EAAG,MAEjB,OADA1G,EAAIkN,MAAQ,IAAIrN,MAAMxI,KAAKtB,OAASkR,EAAIlR,QACjCsB,KAAKmgB,MAAMvQ,EAAKjH,IAIzB0G,EAAG3R,UAAUmlB,KAAO,SAAejT,GACjC,IAAIjH,EAAM,IAAI0G,EAAG,MAEjB,OADA1G,EAAIkN,MAAQ,IAAIrN,MAAMxI,KAAKtB,OAASkR,EAAIlR,QACjCshB,EAAWhgB,KAAM4P,EAAKjH,IAI/B0G,EAAG3R,UAAUmhB,KAAO,SAAejP,GACjC,OAAO5P,KAAKmQ,QAAQgQ,MAAMvQ,EAAK5P,OAGjCqP,EAAG3R,UAAUsZ,MAAQ,SAAgBpH,GACnCZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UAIb,IADA,IAAImF,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIqO,GAAqB,EAAhB7P,KAAK6V,MAAMrU,IAAUoO,EAC1BzK,GAAU,SAAJ0K,IAA0B,SAARkF,GAC5BA,IAAU,GACVA,GAAUlF,EAAI,SAAa,EAE3BkF,GAAS5P,IAAO,GAChBnF,KAAK6V,MAAMrU,GAAU,SAAL2D,EAQlB,OALc,IAAV4P,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAGAsB,MAGTqP,EAAG3R,UAAUolB,KAAO,SAAelT,GACjC,OAAO5P,KAAKmQ,QAAQ6G,MAAMpH,IAI5BP,EAAG3R,UAAUqlB,IAAM,WACjB,OAAO/iB,KAAK2J,IAAI3J,OAIlBqP,EAAG3R,UAAUslB,KAAO,WAClB,OAAOhjB,KAAK6e,KAAK7e,KAAKmQ,UAIxBd,EAAG3R,UAAUwM,IAAM,SAAc0F,GAC/B,IAAIC,EAxxCN,SAAqBD,GAGnB,IAFA,IAAIC,EAAI,IAAIrH,MAAMoH,EAAII,aAEbwK,EAAM,EAAGA,EAAM3K,EAAEnR,OAAQ8b,IAAO,CACvC,IAAI5D,EAAO4D,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAEjB3K,EAAE2K,IAAQ5K,EAAIiG,MAAMe,GAAQ,GAAK6D,KAAWA,EAG9C,OAAO5K,EA8wCCoT,CAAWrT,GACnB,GAAiB,IAAbC,EAAEnR,OAAc,OAAO,IAAI2Q,EAAG,GAIlC,IADA,IAAI7J,EAAMxF,KACDwB,EAAI,EAAGA,EAAIqO,EAAEnR,QACP,IAATmR,EAAErO,GADsBA,IAAKgE,EAAMA,EAAIud,OAI7C,KAAMvhB,EAAIqO,EAAEnR,OACV,IAAK,IAAI8Z,EAAIhT,EAAIud,MAAOvhB,EAAIqO,EAAEnR,OAAQ8C,IAAKgX,EAAIA,EAAEuK,MAClC,IAATlT,EAAErO,KAENgE,EAAMA,EAAImE,IAAI6O,IAIlB,OAAOhT,GAIT6J,EAAG3R,UAAUwlB,OAAS,SAAiBpT,GACrCd,EAAuB,iBAATc,GAAqBA,GAAQ,GAC3C,IAGItO,EAHA2N,EAAIW,EAAO,GACXmR,GAAKnR,EAAOX,GAAK,GACjBgU,EAAa,WAAe,GAAKhU,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAI4F,EAAQ,EAEZ,IAAKvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CAChC,IAAI4hB,EAAWpjB,KAAK6V,MAAMrU,GAAK2hB,EAC3Ble,GAAsB,EAAhBjF,KAAK6V,MAAMrU,IAAU4hB,GAAajU,EAC5CnP,KAAK6V,MAAMrU,GAAKyD,EAAI8P,EACpBA,EAAQqO,IAAc,GAAKjU,EAGzB4F,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAIT,GAAU,IAANuiB,EAAS,CACX,IAAKzf,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAChCxB,KAAK6V,MAAMrU,EAAIyf,GAAKjhB,KAAK6V,MAAMrU,GAGjC,IAAKA,EAAI,EAAGA,EAAIyf,EAAGzf,IACjBxB,KAAK6V,MAAMrU,GAAK,EAGlBxB,KAAKtB,QAAUuiB,EAGjB,OAAOjhB,KAAK0W,SAGdrH,EAAG3R,UAAU2lB,MAAQ,SAAgBvT,GAGnC,OADAd,EAAyB,IAAlBhP,KAAK4V,UACL5V,KAAKkjB,OAAOpT,IAMrBT,EAAG3R,UAAU+S,OAAS,SAAiBX,EAAMwT,EAAMC,GAEjD,IAAIC,EADJxU,EAAuB,iBAATc,GAAqBA,GAAQ,GAGzC0T,EADEF,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAInU,EAAIW,EAAO,GACXmR,EAAI3b,KAAKC,KAAKuK,EAAOX,GAAK,GAAInP,KAAKtB,QACnC+kB,EAAO,SAAc,WAActU,GAAMA,EACzCuU,EAAcH,EAMlB,GAJAC,GAAKvC,EACLuC,EAAIle,KAAKuC,IAAI,EAAG2b,GAGZE,EAAa,CACf,IAAK,IAAIliB,EAAI,EAAGA,EAAIyf,EAAGzf,IACrBkiB,EAAY7N,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAEpCkiB,EAAYhlB,OAASuiB,EAGvB,GAAU,IAANA,QAEG,GAAIjhB,KAAKtB,OAASuiB,EAEvB,IADAjhB,KAAKtB,QAAUuiB,EACVzf,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC3BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,EAAIyf,QAGjCjhB,KAAK6V,MAAM,GAAK,EAChB7V,KAAKtB,OAAS,EAGhB,IAAIqW,EAAQ,EACZ,IAAKvT,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,IAAgB,IAAVuT,GAAevT,GAAKgiB,GAAIhiB,IAAK,CAChE,IAAI4R,EAAuB,EAAhBpT,KAAK6V,MAAMrU,GACtBxB,KAAK6V,MAAMrU,GAAMuT,GAAU,GAAK5F,EAAOiE,IAASjE,EAChD4F,EAAQ3B,EAAOqQ,EAajB,OATIC,GAAyB,IAAV3O,IACjB2O,EAAY7N,MAAM6N,EAAYhlB,UAAYqW,GAGxB,IAAhB/U,KAAKtB,SACPsB,KAAK6V,MAAM,GAAK,EAChB7V,KAAKtB,OAAS,GAGTsB,KAAK0W,SAGdrH,EAAG3R,UAAUimB,MAAQ,SAAgB7T,EAAMwT,EAAMC,GAG/C,OADAvU,EAAyB,IAAlBhP,KAAK4V,UACL5V,KAAKyQ,OAAOX,EAAMwT,EAAMC,IAIjClU,EAAG3R,UAAUkmB,KAAO,SAAe9T,GACjC,OAAO9P,KAAKmQ,QAAQkT,MAAMvT,IAG5BT,EAAG3R,UAAUmmB,MAAQ,SAAgB/T,GACnC,OAAO9P,KAAKmQ,QAAQ+S,OAAOpT,IAI7BT,EAAG3R,UAAUomB,KAAO,SAAehU,GACjC,OAAO9P,KAAKmQ,QAAQwT,MAAM7T,IAG5BT,EAAG3R,UAAUqmB,MAAQ,SAAgBjU,GACnC,OAAO9P,KAAKmQ,QAAQM,OAAOX,IAI7BT,EAAG3R,UAAU0b,MAAQ,SAAgBoB,GACnCxL,EAAsB,iBAARwL,GAAoBA,GAAO,GACzC,IAAIrL,EAAIqL,EAAM,GACVyG,GAAKzG,EAAMrL,GAAK,GAChBqJ,EAAI,GAAKrJ,EAGb,QAAInP,KAAKtB,QAAUuiB,OAGXjhB,KAAK6V,MAAMoL,GAELzI,IAIhBnJ,EAAG3R,UAAUsmB,OAAS,SAAiBlU,GACrCd,EAAuB,iBAATc,GAAqBA,GAAQ,GAC3C,IAAIX,EAAIW,EAAO,GACXmR,GAAKnR,EAAOX,GAAK,GAIrB,GAFAH,EAAyB,IAAlBhP,KAAK4V,SAAgB,2CAExB5V,KAAKtB,QAAUuiB,EACjB,OAAOjhB,KAQT,GALU,IAANmP,GACF8R,IAEFjhB,KAAKtB,OAAS4G,KAAKC,IAAI0b,EAAGjhB,KAAKtB,QAErB,IAANyQ,EAAS,CACX,IAAIsU,EAAO,SAAc,WAActU,GAAMA,EAC7CnP,KAAK6V,MAAM7V,KAAKtB,OAAS,IAAM+kB,EAGjC,OAAOzjB,KAAK0W,SAIdrH,EAAG3R,UAAUumB,MAAQ,SAAgBnU,GACnC,OAAO9P,KAAKmQ,QAAQ6T,OAAOlU,IAI7BT,EAAG3R,UAAUwb,MAAQ,SAAgBtJ,GAGnC,OAFAZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UACTA,EAAM,EAAU5P,KAAKwQ,OAAOZ,GAGV,IAAlB5P,KAAK4V,SACa,IAAhB5V,KAAKtB,SAAiC,EAAhBsB,KAAK6V,MAAM,IAAUjG,GAC7C5P,KAAK6V,MAAM,GAAKjG,GAAuB,EAAhB5P,KAAK6V,MAAM,IAClC7V,KAAK4V,SAAW,EACT5V,OAGTA,KAAK4V,SAAW,EAChB5V,KAAKwQ,MAAMZ,GACX5P,KAAK4V,SAAW,EACT5V,MAIFA,KAAKiX,OAAOrH,IAGrBP,EAAG3R,UAAUuZ,OAAS,SAAiBrH,GACrC5P,KAAK6V,MAAM,IAAMjG,EAGjB,IAAK,IAAIpO,EAAI,EAAGA,EAAIxB,KAAKtB,QAAUsB,KAAK6V,MAAMrU,IAAM,SAAWA,IAC7DxB,KAAK6V,MAAMrU,IAAM,SACbA,IAAMxB,KAAKtB,OAAS,EACtBsB,KAAK6V,MAAMrU,EAAI,GAAK,EAEpBxB,KAAK6V,MAAMrU,EAAI,KAKnB,OAFAxB,KAAKtB,OAAS4G,KAAKuC,IAAI7H,KAAKtB,OAAQ8C,EAAI,GAEjCxB,MAITqP,EAAG3R,UAAU8S,MAAQ,SAAgBZ,GAGnC,GAFAZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UACTA,EAAM,EAAG,OAAO5P,KAAKkZ,OAAOtJ,GAEhC,GAAsB,IAAlB5P,KAAK4V,SAIP,OAHA5V,KAAK4V,SAAW,EAChB5V,KAAKkZ,MAAMtJ,GACX5P,KAAK4V,SAAW,EACT5V,KAKT,GAFAA,KAAK6V,MAAM,IAAMjG,EAEG,IAAhB5P,KAAKtB,QAAgBsB,KAAK6V,MAAM,GAAK,EACvC7V,KAAK6V,MAAM,IAAM7V,KAAK6V,MAAM,GAC5B7V,KAAK4V,SAAW,OAGhB,IAAK,IAAIpU,EAAI,EAAGA,EAAIxB,KAAKtB,QAAUsB,KAAK6V,MAAMrU,GAAK,EAAGA,IACpDxB,KAAK6V,MAAMrU,IAAM,SACjBxB,KAAK6V,MAAMrU,EAAI,IAAM,EAIzB,OAAOxB,KAAK0W,SAGdrH,EAAG3R,UAAUwmB,KAAO,SAAetU,GACjC,OAAO5P,KAAKmQ,QAAQ+I,MAAMtJ,IAG5BP,EAAG3R,UAAUymB,KAAO,SAAevU,GACjC,OAAO5P,KAAKmQ,QAAQK,MAAMZ,IAG5BP,EAAG3R,UAAU0mB,KAAO,WAGlB,OAFApkB,KAAK4V,SAAW,EAET5V,MAGTqP,EAAG3R,UAAUsb,IAAM,WACjB,OAAOhZ,KAAKmQ,QAAQiU,QAGtB/U,EAAG3R,UAAU2mB,aAAe,SAAuBzU,EAAKjG,EAAK2a,GAC3D,IACI9iB,EAIAqO,EALA7O,EAAM4O,EAAIlR,OAAS4lB,EAGvBtkB,KAAKmX,QAAQnW,GAGb,IAAI+T,EAAQ,EACZ,IAAKvT,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CAC/BqO,GAA6B,EAAxB7P,KAAK6V,MAAMrU,EAAI8iB,IAAcvP,EAClC,IAAIqB,GAAwB,EAAfxG,EAAIiG,MAAMrU,IAAUmI,EAEjCoL,IADAlF,GAAa,SAARuG,IACS,KAAQA,EAAQ,SAAa,GAC3CpW,KAAK6V,MAAMrU,EAAI8iB,GAAa,SAAJzU,EAE1B,KAAOrO,EAAIxB,KAAKtB,OAAS4lB,EAAO9iB,IAE9BuT,GADAlF,GAA6B,EAAxB7P,KAAK6V,MAAMrU,EAAI8iB,IAAcvP,IACrB,GACb/U,KAAK6V,MAAMrU,EAAI8iB,GAAa,SAAJzU,EAG1B,GAAc,IAAVkF,EAAa,OAAO/U,KAAK0W,QAK7B,IAFA1H,GAAkB,IAAX+F,GACPA,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAE3BuT,GADAlF,IAAsB,EAAhB7P,KAAK6V,MAAMrU,IAAUuT,IACd,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJqO,EAIlB,OAFA7P,KAAK4V,SAAW,EAET5V,KAAK0W,SAGdrH,EAAG3R,UAAU6mB,SAAW,SAAmB3U,EAAK4U,GAC9C,IAAIF,GAAQtkB,KAAKtB,OAASkR,EAAIlR,QAE1BuI,EAAIjH,KAAKmQ,QACT1N,EAAImN,EAGJ6U,EAA8B,EAAxBhiB,EAAEoT,MAAMpT,EAAE/D,OAAS,GAGf,KADd4lB,EAAQ,GADMtkB,KAAK0Y,WAAW+L,MAG5BhiB,EAAIA,EAAEohB,MAAMS,GACZrd,EAAEic,OAAOoB,GACTG,EAA8B,EAAxBhiB,EAAEoT,MAAMpT,EAAE/D,OAAS,IAI3B,IACI8Z,EADA7V,EAAIsE,EAAEvI,OAAS+D,EAAE/D,OAGrB,GAAa,QAAT8lB,EAAgB,EAClBhM,EAAI,IAAInJ,EAAG,OACT3Q,OAASiE,EAAI,EACf6V,EAAE3C,MAAQ,IAAIrN,MAAMgQ,EAAE9Z,QACtB,IAAK,IAAI8C,EAAI,EAAGA,EAAIgX,EAAE9Z,OAAQ8C,IAC5BgX,EAAE3C,MAAMrU,GAAK,EAIjB,IAAIkjB,EAAOzd,EAAEkJ,QAAQkU,aAAa5hB,EAAG,EAAGE,GAClB,IAAlB+hB,EAAK9O,WACP3O,EAAIyd,EACAlM,IACFA,EAAE3C,MAAMlT,GAAK,IAIjB,IAAK,IAAIiB,EAAIjB,EAAI,EAAGiB,GAAK,EAAGA,IAAK,CAC/B,IAAI+gB,EAAmC,UAAL,EAAxB1d,EAAE4O,MAAMpT,EAAE/D,OAASkF,KACE,EAA5BqD,EAAE4O,MAAMpT,EAAE/D,OAASkF,EAAI,IAO1B,IAHA+gB,EAAKrf,KAAKC,IAAKof,EAAKF,EAAO,EAAG,UAE9Bxd,EAAEod,aAAa5hB,EAAGkiB,EAAI/gB,GACA,IAAfqD,EAAE2O,UACP+O,IACA1d,EAAE2O,SAAW,EACb3O,EAAEod,aAAa5hB,EAAG,EAAGmB,GAChBqD,EAAE+Q,WACL/Q,EAAE2O,UAAY,GAGd4C,IACFA,EAAE3C,MAAMjS,GAAK+gB,GAajB,OAVInM,GACFA,EAAE9B,QAEJzP,EAAEyP,QAGW,QAAT8N,GAA4B,IAAVF,GACpBrd,EAAEwJ,OAAO6T,GAGJ,CACLM,IAAKpM,GAAK,KACVnI,IAAKpJ,IAQToI,EAAG3R,UAAUmnB,OAAS,SAAiBjV,EAAK4U,EAAMM,GAGhD,OAFA9V,GAAQY,EAAIoI,UAERhY,KAAKgY,SACA,CACL4M,IAAK,IAAIvV,EAAG,GACZgB,IAAK,IAAIhB,EAAG,IAKM,IAAlBrP,KAAK4V,UAAmC,IAAjBhG,EAAIgG,UAC7BpQ,EAAMxF,KAAKwZ,MAAMqL,OAAOjV,EAAK4U,GAEhB,QAATA,IACFI,EAAMpf,EAAIof,IAAIpL,OAGH,QAATgL,IACFnU,EAAM7K,EAAI6K,IAAImJ,MACVsL,GAA6B,IAAjBzU,EAAIuF,UAClBvF,EAAIqK,KAAK9K,IAIN,CACLgV,IAAKA,EACLvU,IAAKA,IAIa,IAAlBrQ,KAAK4V,UAAmC,IAAjBhG,EAAIgG,UAC7BpQ,EAAMxF,KAAK6kB,OAAOjV,EAAI4J,MAAOgL,GAEhB,QAATA,IACFI,EAAMpf,EAAIof,IAAIpL,OAGT,CACLoL,IAAKA,EACLvU,IAAK7K,EAAI6K,MAI0B,IAAlCrQ,KAAK4V,SAAWhG,EAAIgG,WACvBpQ,EAAMxF,KAAKwZ,MAAMqL,OAAOjV,EAAI4J,MAAOgL,GAEtB,QAATA,IACFnU,EAAM7K,EAAI6K,IAAImJ,MACVsL,GAA6B,IAAjBzU,EAAIuF,UAClBvF,EAAIsK,KAAK/K,IAIN,CACLgV,IAAKpf,EAAIof,IACTvU,IAAKA,IAOLT,EAAIlR,OAASsB,KAAKtB,QAAUsB,KAAKqW,IAAIzG,GAAO,EACvC,CACLgV,IAAK,IAAIvV,EAAG,GACZgB,IAAKrQ,MAKU,IAAf4P,EAAIlR,OACO,QAAT8lB,EACK,CACLI,IAAK5kB,KAAK+kB,KAAKnV,EAAIiG,MAAM,IACzBxF,IAAK,MAII,QAATmU,EACK,CACLI,IAAK,KACLvU,IAAK,IAAIhB,EAAGrP,KAAKiY,KAAKrI,EAAIiG,MAAM,MAI7B,CACL+O,IAAK5kB,KAAK+kB,KAAKnV,EAAIiG,MAAM,IACzBxF,IAAK,IAAIhB,EAAGrP,KAAKiY,KAAKrI,EAAIiG,MAAM,MAI7B7V,KAAKukB,SAAS3U,EAAK4U,GAlF1B,IAAII,EAAKvU,EAAK7K,GAsFhB6J,EAAG3R,UAAUknB,IAAM,SAAchV,GAC/B,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAOgV,KAIxCvV,EAAG3R,UAAU2S,IAAM,SAAcT,GAC/B,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAOS,KAGxChB,EAAG3R,UAAUsnB,KAAO,SAAepV,GACjC,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAMS,KAIvChB,EAAG3R,UAAUunB,SAAW,SAAmBrV,GACzC,IAAIsV,EAAKllB,KAAK6kB,OAAOjV,GAGrB,GAAIsV,EAAG7U,IAAI2H,SAAU,OAAOkN,EAAGN,IAE/B,IAAIvU,EAA0B,IAApB6U,EAAGN,IAAIhP,SAAiBsP,EAAG7U,IAAIsK,KAAK/K,GAAOsV,EAAG7U,IAEpD8U,EAAOvV,EAAImU,MAAM,GACjBqB,EAAKxV,EAAIU,MAAM,GACf+F,EAAMhG,EAAIgG,IAAI8O,GAGlB,OAAI9O,EAAM,GAAY,IAAP+O,GAAoB,IAAR/O,EAAkB6O,EAAGN,IAGrB,IAApBM,EAAGN,IAAIhP,SAAiBsP,EAAGN,IAAIpU,MAAM,GAAK0U,EAAGN,IAAI1L,MAAM,IAGhE7J,EAAG3R,UAAUua,KAAO,SAAerI,GACjCZ,EAAOY,GAAO,UAId,IAHA,IAAI2D,GAAK,GAAK,IAAM3D,EAEhByV,EAAM,EACD7jB,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IACpC6jB,GAAO9R,EAAI8R,GAAuB,EAAhBrlB,KAAK6V,MAAMrU,KAAWoO,EAG1C,OAAOyV,GAIThW,EAAG3R,UAAUwa,MAAQ,SAAgBtI,GACnCZ,EAAOY,GAAO,UAGd,IADA,IAAImF,EAAQ,EACHvT,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACzC,IAAIqO,GAAqB,EAAhB7P,KAAK6V,MAAMrU,IAAkB,SAARuT,EAC9B/U,KAAK6V,MAAMrU,GAAMqO,EAAID,EAAO,EAC5BmF,EAAQlF,EAAID,EAGd,OAAO5P,KAAK0W,SAGdrH,EAAG3R,UAAUqnB,KAAO,SAAenV,GACjC,OAAO5P,KAAKmQ,QAAQ+H,MAAMtI,IAG5BP,EAAG3R,UAAU4nB,KAAO,SAAe/R,GACjCvE,EAAsB,IAAfuE,EAAEqC,UACT5G,GAAQuE,EAAEyE,UAEV,IAAI9Q,EAAIlH,KACJmH,EAAIoM,EAAEpD,QAGRjJ,EADiB,IAAfA,EAAE0O,SACA1O,EAAE8d,KAAKzR,GAEPrM,EAAEiJ,QAaR,IATA,IAAIoV,EAAI,IAAIlW,EAAG,GACXmW,EAAI,IAAInW,EAAG,GAGXoW,EAAI,IAAIpW,EAAG,GACXqW,EAAI,IAAIrW,EAAG,GAEXsW,EAAI,EAEDze,EAAE0e,UAAYze,EAAEye,UACrB1e,EAAEuJ,OAAO,GACTtJ,EAAEsJ,OAAO,KACPkV,EAMJ,IAHA,IAAIE,EAAK1e,EAAEgJ,QACP2V,EAAK5e,EAAEiJ,SAEHjJ,EAAE8Q,UAAU,CAClB,IAAK,IAAIxW,EAAI,EAAGukB,EAAK,EAAyB,IAArB7e,EAAE2O,MAAM,GAAKkQ,IAAavkB,EAAI,KAAMA,EAAGukB,IAAO,GACvE,GAAIvkB,EAAI,EAEN,IADA0F,EAAEuJ,OAAOjP,GACFA,KAAM,IACP+jB,EAAEhV,SAAWiV,EAAEjV,WACjBgV,EAAE7K,KAAKmL,GACPL,EAAE7K,KAAKmL,IAGTP,EAAE9U,OAAO,GACT+U,EAAE/U,OAAO,GAIb,IAAK,IAAI7M,EAAI,EAAGoiB,EAAK,EAAyB,IAArB7e,EAAE0O,MAAM,GAAKmQ,IAAapiB,EAAI,KAAMA,EAAGoiB,IAAO,GACvE,GAAIpiB,EAAI,EAEN,IADAuD,EAAEsJ,OAAO7M,GACFA,KAAM,IACP6hB,EAAElV,SAAWmV,EAAEnV,WACjBkV,EAAE/K,KAAKmL,GACPH,EAAE/K,KAAKmL,IAGTL,EAAEhV,OAAO,GACTiV,EAAEjV,OAAO,GAITvJ,EAAEmP,IAAIlP,IAAM,GACdD,EAAEyT,KAAKxT,GACPoe,EAAE5K,KAAK8K,GACPD,EAAE7K,KAAK+K,KAEPve,EAAEwT,KAAKzT,GACPue,EAAE9K,KAAK4K,GACPG,EAAE/K,KAAK6K,IAIX,MAAO,CACLve,EAAGwe,EACHhjB,EAAGijB,EACHO,IAAK9e,EAAE+b,OAAOyC,KAOlBtW,EAAG3R,UAAUwoB,OAAS,SAAiB3S,GACrCvE,EAAsB,IAAfuE,EAAEqC,UACT5G,GAAQuE,EAAEyE,UAEV,IAAI/Q,EAAIjH,KACJyC,EAAI8Q,EAAEpD,QAGRlJ,EADiB,IAAfA,EAAE2O,SACA3O,EAAE+d,KAAKzR,GAEPtM,EAAEkJ,QAQR,IALA,IAuCI3K,EAvCA2gB,EAAK,IAAI9W,EAAG,GACZ+W,EAAK,IAAI/W,EAAG,GAEZgX,EAAQ5jB,EAAE0N,QAEPlJ,EAAE+J,KAAK,GAAK,GAAKvO,EAAEuO,KAAK,GAAK,GAAG,CACrC,IAAK,IAAIxP,EAAI,EAAGukB,EAAK,EAAyB,IAArB9e,EAAE4O,MAAM,GAAKkQ,IAAavkB,EAAI,KAAMA,EAAGukB,IAAO,GACvE,GAAIvkB,EAAI,EAEN,IADAyF,EAAEwJ,OAAOjP,GACFA,KAAM,GACP2kB,EAAG5V,SACL4V,EAAGzL,KAAK2L,GAGVF,EAAG1V,OAAO,GAId,IAAK,IAAI7M,EAAI,EAAGoiB,EAAK,EAAyB,IAArBvjB,EAAEoT,MAAM,GAAKmQ,IAAapiB,EAAI,KAAMA,EAAGoiB,IAAO,GACvE,GAAIpiB,EAAI,EAEN,IADAnB,EAAEgO,OAAO7M,GACFA,KAAM,GACPwiB,EAAG7V,SACL6V,EAAG1L,KAAK2L,GAGVD,EAAG3V,OAAO,GAIVxJ,EAAEoP,IAAI5T,IAAM,GACdwE,EAAE0T,KAAKlY,GACP0jB,EAAGxL,KAAKyL,KAER3jB,EAAEkY,KAAK1T,GACPmf,EAAGzL,KAAKwL,IAeZ,OATE3gB,EADgB,IAAdyB,EAAE+J,KAAK,GACHmV,EAEAC,GAGApV,KAAK,GAAK,GAChBxL,EAAIkV,KAAKnH,GAGJ/N,GAGT6J,EAAG3R,UAAUuoB,IAAM,SAAcrW,GAC/B,GAAI5P,KAAKgY,SAAU,OAAOpI,EAAIoJ,MAC9B,GAAIpJ,EAAIoI,SAAU,OAAOhY,KAAKgZ,MAE9B,IAAI/R,EAAIjH,KAAKmQ,QACT1N,EAAImN,EAAIO,QACZlJ,EAAE2O,SAAW,EACbnT,EAAEmT,SAAW,EAGb,IAAK,IAAI0O,EAAQ,EAAGrd,EAAE2e,UAAYnjB,EAAEmjB,SAAUtB,IAC5Crd,EAAEwJ,OAAO,GACThO,EAAEgO,OAAO,GAGX,OAAG,CACD,KAAOxJ,EAAE2e,UACP3e,EAAEwJ,OAAO,GAEX,KAAOhO,EAAEmjB,UACPnjB,EAAEgO,OAAO,GAGX,IAAItB,EAAIlI,EAAEoP,IAAI5T,GACd,GAAI0M,EAAI,EAAG,CAET,IAAIwJ,EAAI1R,EACRA,EAAIxE,EACJA,EAAIkW,OACC,GAAU,IAANxJ,GAAyB,IAAd1M,EAAEuO,KAAK,GAC3B,MAGF/J,EAAE0T,KAAKlY,GAGT,OAAOA,EAAEygB,OAAOoB,IAIlBjV,EAAG3R,UAAU4oB,KAAO,SAAe1W,GACjC,OAAO5P,KAAKslB,KAAK1V,GAAK3I,EAAE+d,KAAKpV,IAG/BP,EAAG3R,UAAUkoB,OAAS,WACpB,OAA+B,IAAP,EAAhB5lB,KAAK6V,MAAM,KAGrBxG,EAAG3R,UAAU6S,MAAQ,WACnB,OAA+B,IAAP,EAAhBvQ,KAAK6V,MAAM,KAIrBxG,EAAG3R,UAAU4S,MAAQ,SAAgBV,GACnC,OAAO5P,KAAK6V,MAAM,GAAKjG,GAIzBP,EAAG3R,UAAU6oB,MAAQ,SAAgB/L,GACnCxL,EAAsB,iBAARwL,GACd,IAAIrL,EAAIqL,EAAM,GACVyG,GAAKzG,EAAMrL,GAAK,GAChBqJ,EAAI,GAAKrJ,EAGb,GAAInP,KAAKtB,QAAUuiB,EAGjB,OAFAjhB,KAAKmX,QAAQ8J,EAAI,GACjBjhB,KAAK6V,MAAMoL,IAAMzI,EACVxY,KAKT,IADA,IAAI+U,EAAQyD,EACHhX,EAAIyf,EAAa,IAAVlM,GAAevT,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACnD,IAAIqO,EAAoB,EAAhB7P,KAAK6V,MAAMrU,GAEnBuT,GADAlF,GAAKkF,KACS,GACdlF,GAAK,SACL7P,KAAK6V,MAAMrU,GAAKqO,EAMlB,OAJc,IAAVkF,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAEAsB,MAGTqP,EAAG3R,UAAUsa,OAAS,WACpB,OAAuB,IAAhBhY,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,IAGzCxG,EAAG3R,UAAUsT,KAAO,SAAepB,GACjC,IAOIpK,EAPAoQ,EAAWhG,EAAM,EAErB,GAAsB,IAAlB5P,KAAK4V,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlB5V,KAAK4V,UAAkBA,EAAU,OAAO,EAK5C,GAHA5V,KAAK0W,QAGD1W,KAAKtB,OAAS,EAChB8G,EAAM,MACD,CACDoQ,IACFhG,GAAOA,GAGTZ,EAAOY,GAAO,SAAW,qBAEzB,IAAIC,EAAoB,EAAhB7P,KAAK6V,MAAM,GACnBrQ,EAAMqK,IAAMD,EAAM,EAAIC,EAAID,GAAO,EAAI,EAEvC,OAAsB,IAAlB5P,KAAK4V,SAA8B,GAANpQ,EAC1BA,GAOT6J,EAAG3R,UAAU2Y,IAAM,SAAczG,GAC/B,GAAsB,IAAlB5P,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAAgB,OAAQ,EACvD,GAAsB,IAAlB5V,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAAgB,OAAO,EAEtD,IAAIpQ,EAAMxF,KAAKwmB,KAAK5W,GACpB,OAAsB,IAAlB5P,KAAK4V,SAA8B,GAANpQ,EAC1BA,GAIT6J,EAAG3R,UAAU8oB,KAAO,SAAe5W,GAEjC,GAAI5P,KAAKtB,OAASkR,EAAIlR,OAAQ,OAAO,EACrC,GAAIsB,KAAKtB,OAASkR,EAAIlR,OAAQ,OAAQ,EAGtC,IADA,IAAI8G,EAAM,EACDhE,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACzC,IAAIyF,EAAoB,EAAhBjH,KAAK6V,MAAMrU,GACfiB,EAAmB,EAAfmN,EAAIiG,MAAMrU,GAElB,GAAIyF,IAAMxE,EAAV,CACIwE,EAAIxE,EACN+C,GAAO,EACEyB,EAAIxE,IACb+C,EAAM,GAER,OAEF,OAAOA,GAGT6J,EAAG3R,UAAU+oB,IAAM,SAAc7W,GAC/B,OAA0B,IAAnB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUgpB,GAAK,SAAa9W,GAC7B,OAAyB,IAAlB5P,KAAKqW,IAAIzG,IAGlBP,EAAG3R,UAAUipB,KAAO,SAAe/W,GACjC,OAAO5P,KAAKgR,KAAKpB,IAAQ,GAG3BP,EAAG3R,UAAUkpB,IAAM,SAAchX,GAC/B,OAAO5P,KAAKqW,IAAIzG,IAAQ,GAG1BP,EAAG3R,UAAUmpB,IAAM,SAAcjX,GAC/B,OAA2B,IAApB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUopB,GAAK,SAAalX,GAC7B,OAA0B,IAAnB5P,KAAKqW,IAAIzG,IAGlBP,EAAG3R,UAAUqpB,KAAO,SAAenX,GACjC,OAAO5P,KAAKgR,KAAKpB,IAAQ,GAG3BP,EAAG3R,UAAUspB,IAAM,SAAcpX,GAC/B,OAAO5P,KAAKqW,IAAIzG,IAAQ,GAG1BP,EAAG3R,UAAUupB,IAAM,SAAcrX,GAC/B,OAA0B,IAAnB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUwpB,GAAK,SAAatX,GAC7B,OAAyB,IAAlB5P,KAAKqW,IAAIzG,IAOlBP,EAAGyG,IAAM,SAAclG,GACrB,OAAO,IAAIuX,EAAIvX,IAGjBP,EAAG3R,UAAU0pB,MAAQ,SAAgBC,GAGnC,OAFArY,GAAQhP,KAAK8V,IAAK,yCAClB9G,EAAyB,IAAlBhP,KAAK4V,SAAgB,iCACrByR,EAAIC,UAAUtnB,MAAMunB,UAAUF,IAGvChY,EAAG3R,UAAU8pB,QAAU,WAErB,OADAxY,EAAOhP,KAAK8V,IAAK,wDACV9V,KAAK8V,IAAI2R,YAAYznB,OAG9BqP,EAAG3R,UAAU6pB,UAAY,SAAoBF,GAE3C,OADArnB,KAAK8V,IAAMuR,EACJrnB,MAGTqP,EAAG3R,UAAUgqB,SAAW,SAAmBL,GAEzC,OADArY,GAAQhP,KAAK8V,IAAK,yCACX9V,KAAKunB,UAAUF,IAGxBhY,EAAG3R,UAAUiqB,OAAS,SAAiB/X,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAI8E,IAAI5a,KAAM4P,IAG5BP,EAAG3R,UAAUkqB,QAAU,SAAkBhY,GAEvC,OADAZ,EAAOhP,KAAK8V,IAAK,uCACV9V,KAAK8V,IAAI4E,KAAK1a,KAAM4P,IAG7BP,EAAG3R,UAAUmqB,OAAS,SAAiBjY,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAIvK,IAAIvL,KAAM4P,IAG5BP,EAAG3R,UAAUoqB,QAAU,SAAkBlY,GAEvC,OADAZ,EAAOhP,KAAK8V,IAAK,uCACV9V,KAAK8V,IAAI6E,KAAK3a,KAAM4P,IAG7BP,EAAG3R,UAAUqqB,OAAS,SAAiBnY,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAIkS,IAAIhoB,KAAM4P,IAG5BP,EAAG3R,UAAUuqB,OAAS,SAAiBrY,GAGrC,OAFAZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIoS,SAASloB,KAAM4P,GACjB5P,KAAK8V,IAAInM,IAAI3J,KAAM4P,IAG5BP,EAAG3R,UAAUyqB,QAAU,SAAkBvY,GAGvC,OAFAZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIoS,SAASloB,KAAM4P,GACjB5P,KAAK8V,IAAI+I,KAAK7e,KAAM4P,IAG7BP,EAAG3R,UAAU0qB,OAAS,WAGpB,OAFApZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIiN,IAAI/iB,OAGtBqP,EAAG3R,UAAU4qB,QAAU,WAGrB,OAFAtZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIkN,KAAKhjB,OAIvBqP,EAAG3R,UAAU6qB,QAAU,WAGrB,OAFAvZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI0S,KAAKxoB,OAGvBqP,EAAG3R,UAAU+qB,QAAU,WAGrB,OAFAzZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIwQ,KAAKtmB,OAIvBqP,EAAG3R,UAAUgrB,OAAS,WAGpB,OAFA1Z,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI0D,IAAIxZ,OAGtBqP,EAAG3R,UAAUirB,OAAS,SAAiB/Y,GAGrC,OAFAZ,EAAOhP,KAAK8V,MAAQlG,EAAIkG,IAAK,qBAC7B9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI5L,IAAIlK,KAAM4P,IAI5B,IAAIgZ,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQ1X,EAAMgC,GAErBvT,KAAKuR,KAAOA,EACZvR,KAAKuT,EAAI,IAAIlE,EAAGkE,EAAG,IACnBvT,KAAK0C,EAAI1C,KAAKuT,EAAEvD,YAChBhQ,KAAKkQ,EAAI,IAAIb,EAAG,GAAG6T,OAAOljB,KAAK0C,GAAGiY,KAAK3a,KAAKuT,GAE5CvT,KAAKkpB,IAAMlpB,KAAKmpB,OAiDlB,SAASC,IACPH,EAAOhmB,KACLjD,KACA,OACA,2EA+DJ,SAASqpB,IACPJ,EAAOhmB,KACLjD,KACA,OACA,kEAIJ,SAASspB,IACPL,EAAOhmB,KACLjD,KACA,OACA,yDAIJ,SAASupB,IAEPN,EAAOhmB,KACLjD,KACA,QACA,uEA8CJ,SAASmnB,EAAKxkB,GACZ,GAAiB,iBAANA,EAAgB,CACzB,IAAI6mB,EAAQna,EAAGoa,OAAO9mB,GACtB3C,KAAK2C,EAAI6mB,EAAMjW,EACfvT,KAAKwpB,MAAQA,OAEbxa,EAAOrM,EAAE8jB,IAAI,GAAI,kCACjBzmB,KAAK2C,EAAIA,EACT3C,KAAKwpB,MAAQ,KAkOjB,SAASE,EAAM/mB,GACbwkB,EAAIlkB,KAAKjD,KAAM2C,GAEf3C,KAAKskB,MAAQtkB,KAAK2C,EAAEqN,YAChBhQ,KAAKskB,MAAQ,IAAO,IACtBtkB,KAAKskB,OAAS,GAAMtkB,KAAKskB,MAAQ,IAGnCtkB,KAAKmP,EAAI,IAAIE,EAAG,GAAG6T,OAAOljB,KAAKskB,OAC/BtkB,KAAKolB,GAAKplB,KAAK2pB,KAAK3pB,KAAKmP,EAAE4T,OAC3B/iB,KAAK4pB,KAAO5pB,KAAKmP,EAAE+W,OAAOlmB,KAAK2C,GAE/B3C,KAAK6pB,KAAO7pB,KAAK4pB,KAAKjgB,IAAI3J,KAAKmP,GAAGqB,MAAM,GAAGoU,IAAI5kB,KAAK2C,GACpD3C,KAAK6pB,KAAO7pB,KAAK6pB,KAAK7E,KAAKhlB,KAAKmP,GAChCnP,KAAK6pB,KAAO7pB,KAAKmP,EAAE5D,IAAIvL,KAAK6pB,MA5a9BZ,EAAOvrB,UAAUyrB,KAAO,WACtB,IAAID,EAAM,IAAI7Z,EAAG,MAEjB,OADA6Z,EAAIrT,MAAQ,IAAIrN,MAAMlD,KAAKqR,KAAK3W,KAAK0C,EAAI,KAClCwmB,GAGTD,EAAOvrB,UAAUosB,QAAU,SAAkBla,GAG3C,IACIma,EADA5a,EAAIS,EAGR,GACE5P,KAAKgqB,MAAM7a,EAAGnP,KAAKkpB,KAGnBa,GADA5a,GADAA,EAAInP,KAAKiqB,MAAM9a,IACTuL,KAAK1a,KAAKkpB,MACPlZ,kBACF+Z,EAAO/pB,KAAK0C,GAErB,IAAI2T,EAAM0T,EAAO/pB,KAAK0C,GAAK,EAAIyM,EAAEqX,KAAKxmB,KAAKuT,GAgB3C,OAfY,IAAR8C,GACFlH,EAAE0G,MAAM,GAAK,EACb1G,EAAEzQ,OAAS,GACF2X,EAAM,EACflH,EAAEwL,KAAK3a,KAAKuT,QAEInU,IAAZ+P,EAAEuH,MAEJvH,EAAEuH,QAGFvH,EAAE+a,SAIC/a,GAGT8Z,EAAOvrB,UAAUssB,MAAQ,SAAgBG,EAAOxhB,GAC9CwhB,EAAM1Z,OAAOzQ,KAAK0C,EAAG,EAAGiG,IAG1BsgB,EAAOvrB,UAAUusB,MAAQ,SAAgBra,GACvC,OAAOA,EAAIiP,KAAK7e,KAAKkQ,IASvB+C,EAASmW,EAAMH,GAEfG,EAAK1rB,UAAUssB,MAAQ,SAAgBG,EAAOC,GAK5C,IAHA,IAEIC,EAAS/kB,KAAKC,IAAI4kB,EAAMzrB,OAAQ,GAC3B8C,EAAI,EAAGA,EAAI6oB,EAAQ7oB,IAC1B4oB,EAAOvU,MAAMrU,GAAK2oB,EAAMtU,MAAMrU,GAIhC,GAFA4oB,EAAO1rB,OAAS2rB,EAEZF,EAAMzrB,QAAU,EAGlB,OAFAyrB,EAAMtU,MAAM,GAAK,OACjBsU,EAAMzrB,OAAS,GAKjB,IAAI4rB,EAAOH,EAAMtU,MAAM,GAGvB,IAFAuU,EAAOvU,MAAMuU,EAAO1rB,UAhBT,QAgBqB4rB,EAE3B9oB,EAAI,GAAIA,EAAI2oB,EAAMzrB,OAAQ8C,IAAK,CAClC,IAAI+oB,EAAwB,EAAjBJ,EAAMtU,MAAMrU,GACvB2oB,EAAMtU,MAAMrU,EAAI,KApBP,QAoBe+oB,IAAgB,EAAMD,IAAS,GACvDA,EAAOC,EAETD,KAAU,GACVH,EAAMtU,MAAMrU,EAAI,IAAM8oB,EACT,IAATA,GAAcH,EAAMzrB,OAAS,GAC/ByrB,EAAMzrB,QAAU,GAEhByrB,EAAMzrB,QAAU,GAIpB0qB,EAAK1rB,UAAUusB,MAAQ,SAAgBra,GAErCA,EAAIiG,MAAMjG,EAAIlR,QAAU,EACxBkR,EAAIiG,MAAMjG,EAAIlR,OAAS,GAAK,EAC5BkR,EAAIlR,QAAU,EAId,IADA,IAAIyG,EAAK,EACA3D,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CACnC,IAAIqO,EAAmB,EAAfD,EAAIiG,MAAMrU,GAClB2D,GAAU,IAAJ0K,EACND,EAAIiG,MAAMrU,GAAU,SAAL2D,EACfA,EAAS,GAAJ0K,GAAa1K,EAAK,SAAa,GAUtC,OANkC,IAA9ByK,EAAIiG,MAAMjG,EAAIlR,OAAS,KACzBkR,EAAIlR,SAC8B,IAA9BkR,EAAIiG,MAAMjG,EAAIlR,OAAS,IACzBkR,EAAIlR,UAGDkR,GASTqD,EAASoW,EAAMJ,GAQfhW,EAASqW,EAAML,GASfhW,EAASsW,EAAQN,GAEjBM,EAAO7rB,UAAUusB,MAAQ,SAAgBra,GAGvC,IADA,IAAImF,EAAQ,EACHvT,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CACnC,IAAI0D,EAA0B,IAAL,EAAf0K,EAAIiG,MAAMrU,IAAiBuT,EACjC5P,EAAU,SAALD,EACTA,KAAQ,GAER0K,EAAIiG,MAAMrU,GAAK2D,EACf4P,EAAQ7P,EAKV,OAHc,IAAV6P,IACFnF,EAAIiG,MAAMjG,EAAIlR,UAAYqW,GAErBnF,GAITP,EAAGoa,OAAS,SAAgBlY,GAE1B,GAAIqX,EAAOrX,GAAO,OAAOqX,EAAOrX,GAEhC,IAAIiY,EACJ,GAAa,SAATjY,EACFiY,EAAQ,IAAIJ,OACP,GAAa,SAAT7X,EACTiY,EAAQ,IAAIH,OACP,GAAa,SAAT9X,EACTiY,EAAQ,IAAIF,MACP,IAAa,WAAT/X,EAGT,MAAM,IAAItR,MAAM,iBAAmBsR,GAFnCiY,EAAQ,IAAID,EAMd,OAFAX,EAAOrX,GAAQiY,EAERA,GAkBTrC,EAAIzpB,UAAU2qB,SAAW,SAAmBphB,GAC1C+H,EAAsB,IAAf/H,EAAE2O,SAAgB,iCACzB5G,EAAO/H,EAAE6O,IAAK,oCAGhBqR,EAAIzpB,UAAUwqB,SAAW,SAAmBjhB,EAAGxE,GAC7CuM,EAAqC,IAA7B/H,EAAE2O,SAAWnT,EAAEmT,UAAiB,iCACxC5G,EAAO/H,EAAE6O,KAAO7O,EAAE6O,MAAQrT,EAAEqT,IAC1B,oCAGJqR,EAAIzpB,UAAUisB,KAAO,SAAe1iB,GAClC,OAAIjH,KAAKwpB,MAAcxpB,KAAKwpB,MAAMM,QAAQ7iB,GAAGsgB,UAAUvnB,MAChDiH,EAAE+d,KAAKhlB,KAAK2C,GAAG4kB,UAAUvnB,OAGlCmnB,EAAIzpB,UAAU8b,IAAM,SAAcvS,GAChC,OAAIA,EAAE+Q,SACG/Q,EAAEkJ,QAGJnQ,KAAK2C,EAAE4I,IAAItE,GAAGsgB,UAAUvnB,OAGjCmnB,EAAIzpB,UAAUkd,IAAM,SAAc3T,EAAGxE,GACnCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAE2T,IAAInY,GAIhB,OAHI+C,EAAI6Q,IAAIrW,KAAK2C,IAAM,GACrB6C,EAAImV,KAAK3a,KAAK2C,GAET6C,EAAI+hB,UAAUvnB,OAGvBmnB,EAAIzpB,UAAUgd,KAAO,SAAezT,EAAGxE,GACrCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEyT,KAAKjY,GAIjB,OAHI+C,EAAI6Q,IAAIrW,KAAK2C,IAAM,GACrB6C,EAAImV,KAAK3a,KAAK2C,GAET6C,GAGT2hB,EAAIzpB,UAAU6N,IAAM,SAActE,EAAGxE,GACnCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEsE,IAAI9I,GAIhB,OAHI+C,EAAIwL,KAAK,GAAK,GAChBxL,EAAIkV,KAAK1a,KAAK2C,GAET6C,EAAI+hB,UAAUvnB,OAGvBmnB,EAAIzpB,UAAUid,KAAO,SAAe1T,EAAGxE,GACrCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAE0T,KAAKlY,GAIjB,OAHI+C,EAAIwL,KAAK,GAAK,GAChBxL,EAAIkV,KAAK1a,KAAK2C,GAET6C,GAGT2hB,EAAIzpB,UAAUsqB,IAAM,SAAc/gB,EAAG2I,GAEnC,OADA5P,KAAKqoB,SAASphB,GACPjH,KAAK2pB,KAAK1iB,EAAE4c,MAAMjU,KAG3BuX,EAAIzpB,UAAUmhB,KAAO,SAAe5X,EAAGxE,GAErC,OADAzC,KAAKkoB,SAASjhB,EAAGxE,GACVzC,KAAK2pB,KAAK1iB,EAAE4X,KAAKpc,KAG1B0kB,EAAIzpB,UAAUiM,IAAM,SAAc1C,EAAGxE,GAEnC,OADAzC,KAAKkoB,SAASjhB,EAAGxE,GACVzC,KAAK2pB,KAAK1iB,EAAE0C,IAAIlH,KAGzB0kB,EAAIzpB,UAAUslB,KAAO,SAAe/b,GAClC,OAAOjH,KAAK6e,KAAK5X,EAAGA,EAAEkJ,UAGxBgX,EAAIzpB,UAAUqlB,IAAM,SAAc9b,GAChC,OAAOjH,KAAK2J,IAAI1C,EAAGA,IAGrBkgB,EAAIzpB,UAAU8qB,KAAO,SAAevhB,GAClC,GAAIA,EAAE+Q,SAAU,OAAO/Q,EAAEkJ,QAEzB,IAAIqa,EAAOxqB,KAAK2C,EAAE2N,MAAM,GAIxB,GAHAtB,EAAOwb,EAAO,GAAM,GAGP,IAATA,EAAY,CACd,IAAItgB,EAAMlK,KAAK2C,EAAEiY,IAAI,IAAIvL,EAAG,IAAIoB,OAAO,GACvC,OAAOzQ,KAAKkK,IAAIjD,EAAGiD,GAQrB,IAFA,IAAIsO,EAAIxY,KAAK2C,EAAEwhB,KAAK,GAChBlD,EAAI,GACAzI,EAAER,UAA2B,IAAfQ,EAAElI,MAAM,IAC5B2Q,IACAzI,EAAE/H,OAAO,GAEXzB,GAAQwJ,EAAER,UAEV,IAAIyS,EAAM,IAAIpb,EAAG,GAAG+X,MAAMpnB,MACtB0qB,EAAOD,EAAI/B,SAIXiC,EAAO3qB,KAAK2C,EAAEwhB,KAAK,GAAG1T,OAAO,GAC7BL,EAAIpQ,KAAK2C,EAAEqN,YAGf,IAFAI,EAAI,IAAIf,EAAG,EAAIe,EAAIA,GAAGgX,MAAMpnB,MAEW,IAAhCA,KAAKkK,IAAIkG,EAAGua,GAAMtU,IAAIqU,IAC3Bta,EAAEwX,QAAQ8C,GAOZ,IAJA,IAAIzlB,EAAIjF,KAAKkK,IAAIkG,EAAGoI,GAChBrJ,EAAInP,KAAKkK,IAAIjD,EAAGuR,EAAE0L,KAAK,GAAGzT,OAAO,IACjCkI,EAAI3Y,KAAKkK,IAAIjD,EAAGuR,GAChB7V,EAAIse,EACc,IAAftI,EAAEtC,IAAIoU,IAAY,CAEvB,IADA,IAAIvB,EAAMvQ,EACDnX,EAAI,EAAoB,IAAjB0nB,EAAI7S,IAAIoU,GAAYjpB,IAClC0nB,EAAMA,EAAId,SAEZpZ,EAAOxN,EAAImB,GACX,IAAIF,EAAIzC,KAAKkK,IAAIjF,EAAG,IAAIoK,EAAG,GAAG6T,OAAOvgB,EAAInB,EAAI,IAE7C2N,EAAIA,EAAE8Y,OAAOxlB,GACbwC,EAAIxC,EAAE2lB,SACNzP,EAAIA,EAAEsP,OAAOhjB,GACbtC,EAAInB,EAGN,OAAO2N,GAGTgY,EAAIzpB,UAAU4oB,KAAO,SAAerf,GAClC,IAAI2jB,EAAM3jB,EAAEif,OAAOlmB,KAAK2C,GACxB,OAAqB,IAAjBioB,EAAIhV,UACNgV,EAAIhV,SAAW,EACR5V,KAAK2pB,KAAKiB,GAAKlC,UAEf1oB,KAAK2pB,KAAKiB,IAIrBzD,EAAIzpB,UAAUwM,IAAM,SAAcjD,EAAG2I,GACnC,GAAIA,EAAIoI,SAAU,OAAO,IAAI3I,EAAG,GAAG+X,MAAMpnB,MACzC,GAAoB,IAAhB4P,EAAIoB,KAAK,GAAU,OAAO/J,EAAEkJ,QAEhC,IACI0a,EAAM,IAAIriB,MAAM,IACpBqiB,EAAI,GAAK,IAAIxb,EAAG,GAAG+X,MAAMpnB,MACzB6qB,EAAI,GAAK5jB,EACT,IAAK,IAAIzF,EAAI,EAAGA,EAAIqpB,EAAInsB,OAAQ8C,IAC9BqpB,EAAIrpB,GAAKxB,KAAK2J,IAAIkhB,EAAIrpB,EAAI,GAAIyF,GAGhC,IAAIzB,EAAMqlB,EAAI,GACVC,EAAU,EACVC,EAAa,EACb/oB,EAAQ4N,EAAII,YAAc,GAK9B,IAJc,IAAVhO,IACFA,EAAQ,IAGLR,EAAIoO,EAAIlR,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CAEpC,IADA,IAAI4R,EAAOxD,EAAIiG,MAAMrU,GACZoC,EAAI5B,EAAQ,EAAG4B,GAAK,EAAGA,IAAK,CACnC,IAAI4W,EAAOpH,GAAQxP,EAAK,EACpB4B,IAAQqlB,EAAI,KACdrlB,EAAMxF,KAAK+iB,IAAIvd,IAGL,IAARgV,GAAyB,IAAZsQ,GAKjBA,IAAY,EACZA,GAAWtQ,GA9BE,MA+BbuQ,GACwC,IAANvpB,GAAiB,IAANoC,KAE7C4B,EAAMxF,KAAK2J,IAAInE,EAAKqlB,EAAIC,IACxBC,EAAa,EACbD,EAAU,IAXRC,EAAa,EAajB/oB,EAAQ,GAGV,OAAOwD,GAGT2hB,EAAIzpB,UAAU4pB,UAAY,SAAoB1X,GAC5C,IAAIT,EAAIS,EAAIoV,KAAKhlB,KAAK2C,GAEtB,OAAOwM,IAAMS,EAAMT,EAAEgB,QAAUhB,GAGjCgY,EAAIzpB,UAAU+pB,YAAc,SAAsB7X,GAChD,IAAIpK,EAAMoK,EAAIO,QAEd,OADA3K,EAAIsQ,IAAM,KACHtQ,GAOT6J,EAAG2b,KAAO,SAAepb,GACvB,OAAO,IAAI8Z,EAAK9Z,IAmBlBqD,EAASyW,EAAMvC,GAEfuC,EAAKhsB,UAAU4pB,UAAY,SAAoB1X,GAC7C,OAAO5P,KAAK2pB,KAAK/Z,EAAIiU,MAAM7jB,KAAKskB,SAGlCoF,EAAKhsB,UAAU+pB,YAAc,SAAsB7X,GACjD,IAAIT,EAAInP,KAAK2pB,KAAK/Z,EAAIjG,IAAI3J,KAAK4pB,OAE/B,OADAza,EAAE2G,IAAM,KACD3G,GAGTua,EAAKhsB,UAAUmhB,KAAO,SAAe5X,EAAGxE,GACtC,GAAIwE,EAAE+Q,UAAYvV,EAAEuV,SAGlB,OAFA/Q,EAAE4O,MAAM,GAAK,EACb5O,EAAEvI,OAAS,EACJuI,EAGT,IAAI0R,EAAI1R,EAAE4X,KAAKpc,GACXwC,EAAI0T,EAAEsL,MAAMjkB,KAAKskB,OAAO3a,IAAI3J,KAAK6pB,MAAM7F,OAAOhkB,KAAKskB,OAAO3a,IAAI3J,KAAK2C,GACnEsoB,EAAItS,EAAEgC,KAAK1V,GAAGwL,OAAOzQ,KAAKskB,OAC1B9e,EAAMylB,EAQV,OANIA,EAAE5U,IAAIrW,KAAK2C,IAAM,EACnB6C,EAAMylB,EAAEtQ,KAAK3a,KAAK2C,GACTsoB,EAAEja,KAAK,GAAK,IACrBxL,EAAMylB,EAAEvQ,KAAK1a,KAAK2C,IAGb6C,EAAI+hB,UAAUvnB,OAGvB0pB,EAAKhsB,UAAUiM,IAAM,SAAc1C,EAAGxE,GACpC,GAAIwE,EAAE+Q,UAAYvV,EAAEuV,SAAU,OAAO,IAAI3I,EAAG,GAAGkY,UAAUvnB,MAEzD,IAAI2Y,EAAI1R,EAAE0C,IAAIlH,GACVwC,EAAI0T,EAAEsL,MAAMjkB,KAAKskB,OAAO3a,IAAI3J,KAAK6pB,MAAM7F,OAAOhkB,KAAKskB,OAAO3a,IAAI3J,KAAK2C,GACnEsoB,EAAItS,EAAEgC,KAAK1V,GAAGwL,OAAOzQ,KAAKskB,OAC1B9e,EAAMylB,EAOV,OANIA,EAAE5U,IAAIrW,KAAK2C,IAAM,EACnB6C,EAAMylB,EAAEtQ,KAAK3a,KAAK2C,GACTsoB,EAAEja,KAAK,GAAK,IACrBxL,EAAMylB,EAAEvQ,KAAK1a,KAAK2C,IAGb6C,EAAI+hB,UAAUvnB,OAGvB0pB,EAAKhsB,UAAU4oB,KAAO,SAAerf,GAGnC,OADUjH,KAAK2pB,KAAK1iB,EAAEif,OAAOlmB,KAAK2C,GAAGgH,IAAI3J,KAAKolB,KACnCmC,UAAUvnB,OAt2GzB,CAw2GoC3C,EAAQ2C,Q,mDCt2G5C,IAAMw7C,EAAM5pC,EAAQ,KAkBpB,SAAS6pC,EAAcC,GACrB,IAAIC,EAAiBD,EAUrB,MAR0B,MAAtBC,EAAe,KACjBA,EAAiB,IAAMA,GAGrB,SAASlD,KAAKkD,KAChBA,EAAiBA,EAAev3C,OAAO,EAAGu3C,EAAej9C,OAAS,IAG7Dk9C,mBAAmBD,GAG5Bt+C,EAAOC,QAAU,CACfu+C,eA/BF,SAAwBC,GACtB,IACIC,EADQ,IAAIP,EAAIM,GACFE,SAMlB,OAJID,EAAQr9C,QAAU,IACpBq9C,EAAU,KAGLN,EAAcM,IAwBrBE,cArBF,SAAuBC,GAErB,OADuBA,EAAKxvC,QAAQ,qBAAsB,KAqB1D+uC,kB,8BCrCF,YAEA,IAAIU,EAAW,EAAQ,KACnBC,EAAK,EAAQ,KACbC,EAAU,gCACVC,EAAa,0CAEbnmC,EAAO,IAAIkV,OAAO,gLAQtB,SAASkxB,EAAS/3C,GAChB,OAAQA,GAAY,IAAI/C,WAAWiL,QAAQyJ,EAAM,IAenD,IAAIqmC,EAAQ,CACV,CAAC,IAAK,QACN,CAAC,IAAK,SACN,SAAkBC,GAChB,OAAOA,EAAQ/vC,QAAQ,KAAM,MAE/B,CAAC,IAAK,YACN,CAAC,IAAK,OAAQ,GACd,CAACgwC,IAAK,YAAQt9C,EAAW,EAAG,GAC5B,CAAC,UAAW,YAAQA,EAAW,GAC/B,CAACs9C,IAAK,gBAAYt9C,EAAW,EAAG,IAW9Bu9C,EAAS,CAAE1kB,KAAM,EAAG2kB,MAAO,GAc/B,SAASC,EAAUC,GACjB,IAYIx+C,EALAy+C,GALkB,oBAAXxuC,OAAoCA,YACpB,IAAXlI,EAAoCA,EAC3B,oBAAToR,KAAkCA,KACjC,IAEQslC,UAAY,GAGjCC,EAAmB,GACnB57C,SAHJ07C,EAAMA,GAAOC,GAMb,GAAI,UAAYD,EAAIG,SAClBD,EAAmB,IAAIE,EAAIC,SAASL,EAAId,UAAW,SAC9C,GAAI,WAAa56C,EAEtB,IAAK9C,KADL0+C,EAAmB,IAAIE,EAAIJ,EAAK,IACpBH,SAAeK,EAAiB1+C,QACvC,GAAI,WAAa8C,EAAM,CAC5B,IAAK9C,KAAOw+C,EACNx+C,KAAOq+C,IACXK,EAAiB1+C,GAAOw+C,EAAIx+C,SAGGc,IAA7B49C,EAAiBX,UACnBW,EAAiBX,QAAUA,EAAQ5D,KAAKqE,EAAIZ,OAIhD,OAAOc,EAkBT,SAASI,EAAgBX,GACvBA,EAAUF,EAASE,GACnB,IAAI30C,EAAQw0C,EAAWpwB,KAAKuwB,GAE5B,MAAO,CACLQ,SAAUn1C,EAAM,GAAKA,EAAM,GAAGhG,cAAgB,GAC9Cu6C,UAAWv0C,EAAM,GACjBu1C,KAAMv1C,EAAM,IAsDhB,SAASo1C,EAAIT,EAASM,EAAUO,GAG9B,GAFAb,EAAUF,EAASE,KAEbz8C,gBAAgBk9C,GACpB,OAAO,IAAIA,EAAIT,EAASM,EAAUO,GAGpC,IAAIC,EAAUC,EAAWC,EAAOC,EAAanxB,EAAOjuB,EAChDq/C,EAAenB,EAAM57C,QACrBQ,SAAc27C,EACda,EAAM59C,KACNwB,EAAI,EAqCR,IAxBI,WAAaJ,GAAQ,WAAaA,IACpCk8C,EAASP,EACTA,EAAW,MAGTO,GAAU,mBAAsBA,IAAQA,EAASlB,EAAGqB,OAExDV,EAAWF,EAAUE,GAMrBQ,IADAC,EAAYJ,EAAgBX,GAAW,KACjBQ,WAAaO,EAAUnB,QAC7CuB,EAAIvB,QAAUmB,EAAUnB,SAAWkB,GAAYR,EAASV,QACxDuB,EAAIX,SAAWO,EAAUP,UAAYF,EAASE,UAAY,GAC1DR,EAAUe,EAAUH,KAMfG,EAAUnB,UAASsB,EAAa,GAAK,CAAC,OAAQ,aAE5Cn8C,EAAIm8C,EAAaj/C,OAAQ8C,IAGH,mBAF3Bk8C,EAAcC,EAAan8C,KAO3Bi8C,EAAQC,EAAY,GACpBp/C,EAAMo/C,EAAY,GAEdD,GAAUA,EACZG,EAAIt/C,GAAOm+C,EACF,iBAAoBgB,IACvBlxB,EAAQkwB,EAAQz5C,QAAQy6C,MACxB,iBAAoBC,EAAY,IAClCE,EAAIt/C,GAAOm+C,EAAQ77C,MAAM,EAAG2rB,GAC5BkwB,EAAUA,EAAQ77C,MAAM2rB,EAAQmxB,EAAY,MAE5CE,EAAIt/C,GAAOm+C,EAAQ77C,MAAM2rB,GACzBkwB,EAAUA,EAAQ77C,MAAM,EAAG2rB,MAGrBA,EAAQkxB,EAAMvxB,KAAKuwB,MAC7BmB,EAAIt/C,GAAOiuB,EAAM,GACjBkwB,EAAUA,EAAQ77C,MAAM,EAAG2rB,EAAMA,QAGnCqxB,EAAIt/C,GAAOs/C,EAAIt/C,IACbi/C,GAAYG,EAAY,IAAKX,EAASz+C,IAAa,GAOjDo/C,EAAY,KAAIE,EAAIt/C,GAAOs/C,EAAIt/C,GAAKwD,gBAhCtC26C,EAAUiB,EAAYjB,GAwCtBa,IAAQM,EAAIhB,MAAQU,EAAOM,EAAIhB,QAM/BW,GACCR,EAASV,SACkB,MAA3BuB,EAAI5B,SAAS/U,OAAO,KACF,KAAjB2W,EAAI5B,UAAyC,KAAtBe,EAASf,YAEpC4B,EAAI5B,SAjJR,SAAiBuB,EAAU7nC,GACzB,GAAiB,KAAb6nC,EAAiB,OAAO7nC,EAQ5B,IANA,IAAIyiC,GAAQziC,GAAQ,KAAKsU,MAAM,KAAKppB,MAAM,GAAI,GAAGwG,OAAOm2C,EAASvzB,MAAM,MACnExoB,EAAI22C,EAAKz5C,OACTgyC,EAAOyH,EAAK32C,EAAI,GAChB2uB,GAAU,EACV0tB,EAAK,EAEFr8C,KACW,MAAZ22C,EAAK32C,GACP22C,EAAK2F,OAAOt8C,EAAG,GACM,OAAZ22C,EAAK32C,IACd22C,EAAK2F,OAAOt8C,EAAG,GACfq8C,KACSA,IACC,IAANr8C,IAAS2uB,GAAU,GACvBgoB,EAAK2F,OAAOt8C,EAAG,GACfq8C,KAOJ,OAHI1tB,GAASgoB,EAAKhoB,QAAQ,IACb,MAATugB,GAAyB,OAATA,GAAeyH,EAAKzzC,KAAK,IAEtCyzC,EAAKpwC,KAAK,KAwHAinB,CAAQ4uB,EAAI5B,SAAUe,EAASf,WAQ3CG,EAASyB,EAAIG,KAAMH,EAAIX,YAC1BW,EAAII,KAAOJ,EAAIK,SACfL,EAAIG,KAAO,IAMbH,EAAIM,SAAWN,EAAI9e,SAAW,GAC1B8e,EAAIO,OACNT,EAAcE,EAAIO,KAAKn0B,MAAM,KAC7B4zB,EAAIM,SAAWR,EAAY,IAAM,GACjCE,EAAI9e,SAAW4e,EAAY,IAAM,IAGnCE,EAAIQ,OAASR,EAAIX,UAAYW,EAAII,MAAyB,UAAjBJ,EAAIX,SACzCW,EAAIX,SAAU,KAAMW,EAAII,KACxB,OAKJJ,EAAI1B,KAAO0B,EAAIn8C,WAiIjBy7C,EAAIx/C,UAAY,CAAEyO,IAjHlB,SAAakyC,EAAMzgD,EAAOwP,GACxB,IAAIwwC,EAAM59C,KAEV,OAAQq+C,GACN,IAAK,QACC,iBAAoBzgD,GAASA,EAAMc,SACrCd,GAASwP,GAAMgvC,EAAGqB,OAAO7/C,IAG3BggD,EAAIS,GAAQzgD,EACZ,MAEF,IAAK,OACHggD,EAAIS,GAAQzgD,EAEPu+C,EAASv+C,EAAOggD,EAAIX,UAGdr/C,IACTggD,EAAII,KAAOJ,EAAIK,SAAU,IAAKrgD,IAH9BggD,EAAII,KAAOJ,EAAIK,SACfL,EAAIS,GAAQ,IAKd,MAEF,IAAK,WACHT,EAAIS,GAAQzgD,EAERggD,EAAIG,OAAMngD,GAAS,IAAKggD,EAAIG,MAChCH,EAAII,KAAOpgD,EACX,MAEF,IAAK,OACHggD,EAAIS,GAAQzgD,EAER,QAAQ66C,KAAK76C,IACfA,EAAQA,EAAMosB,MAAM,KACpB4zB,EAAIG,KAAOngD,EAAMu0B,MACjByrB,EAAIK,SAAWrgD,EAAMmK,KAAK,OAE1B61C,EAAIK,SAAWrgD,EACfggD,EAAIG,KAAO,IAGb,MAEF,IAAK,WACHH,EAAIX,SAAWr/C,EAAMkE,cACrB87C,EAAIvB,SAAWjvC,EACf,MAEF,IAAK,WACL,IAAK,OACH,GAAIxP,EAAO,CACT,IAAI0gD,EAAgB,aAATD,EAAsB,IAAM,IACvCT,EAAIS,GAAQzgD,EAAMqpC,OAAO,KAAOqX,EAAOA,EAAO1gD,EAAQA,OAEtDggD,EAAIS,GAAQzgD,EAEd,MAEF,QACEggD,EAAIS,GAAQzgD,EAGhB,IAAK,IAAI4D,EAAI,EAAGA,EAAIg7C,EAAM99C,OAAQ8C,IAAK,CACrC,IAAI+8C,EAAM/B,EAAMh7C,GAEZ+8C,EAAI,KAAIX,EAAIW,EAAI,IAAMX,EAAIW,EAAI,IAAIz8C,eASxC,OANA87C,EAAIQ,OAASR,EAAIX,UAAYW,EAAII,MAAyB,UAAjBJ,EAAIX,SACzCW,EAAIX,SAAU,KAAMW,EAAII,KACxB,OAEJJ,EAAI1B,KAAO0B,EAAIn8C,WAERm8C,GAqCmBn8C,SA3B5B,SAAkBo4C,GACXA,GAAa,mBAAsBA,IAAWA,EAAYuC,EAAGvC,WAElE,IAAI+C,EACAgB,EAAM59C,KACNi9C,EAAWW,EAAIX,SAEfA,GAAqD,MAAzCA,EAAShW,OAAOgW,EAASv+C,OAAS,KAAYu+C,GAAY,KAE1E,IAAIvuC,EAASuuC,GAAYW,EAAIvB,QAAU,KAAO,IAe9C,OAbIuB,EAAIM,WACNxvC,GAAUkvC,EAAIM,SACVN,EAAI9e,WAAUpwB,GAAU,IAAKkvC,EAAI9e,UACrCpwB,GAAU,KAGZA,GAAUkvC,EAAII,KAAOJ,EAAI5B,UAEzBY,EAAQ,iBAAoBgB,EAAIhB,MAAQ/C,EAAU+D,EAAIhB,OAASgB,EAAIhB,SACxDluC,GAAU,MAAQkuC,EAAM3V,OAAO,GAAK,IAAK2V,EAAQA,GAExDgB,EAAI3lB,OAAMvpB,GAAUkvC,EAAI3lB,MAErBvpB,IASTwuC,EAAIE,gBAAkBA,EACtBF,EAAIH,SAAWF,EACfK,EAAIX,SAAWA,EACfW,EAAId,GAAKA,EAET/+C,EAAOC,QAAU4/C,I,oRC/bjB,IAAMsB,EAAY5sC,EAAQ,KAEpB6sC,EAAa7sC,EAAQ,KAGzB4oB,EACE5oB,EAAQ,KADV4oB,mBAGF,SAASkkB,EAAkB59C,EAAKo2C,EAAM91C,GACpC,IAAMD,EAAMs9C,EAAWzrC,IAAIlS,EAAKo2C,GAEhC,MAAa,UAAT91C,IAA2C,IAAvBoH,MAAMhJ,QAAQ2B,GAC7B,CAACA,GACU,WAATC,GAAqBoH,MAAMhJ,QAAQ2B,GACrCA,EAAI,GAGNA,EAUT,SAASw9C,EAAgBjwC,GAAQ,IAE7BkwC,EACElwC,EADFkwC,YAGF,IAAKA,EACH,MAAM,IAAI3+C,MAAM,+CAGlB,IAAMmqB,EAAS,GAIf,OAHAA,EAAOw0B,YAAcp2C,MAAMhJ,QAAQo/C,GAAeA,EAAY,GAAKA,EACnEH,EAAWtyC,IAAIie,EAAQ,uBAAwBs0B,EAAkBt0B,EAAQ,uBAAwB,UACjGq0B,EAAWtyC,IAAIie,EAAQ,uBAAwBq0B,EAAWzrC,IAAIoX,EAAQ,wBAAwBuM,KAAI,SAAA7kB,GAAQ,OAnB5G,SAA2BA,GACzB,IAAMsY,EAASjtB,OAAO83B,OAAO,GAAInjB,GAGjC,OAFA2sC,EAAWtyC,IAAIie,EAAQ,WAAYs0B,EAAkBt0B,EAAQ,WAAY,WACzEq0B,EAAWtyC,IAAIie,EAAQ,gBAAiBs0B,EAAkBt0B,EAAQ,gBAAiB,WAC5EA,EAeuGy0B,CAAkB/sC,OACzHsY,EAmET/sB,EAAOC,QAAU,CACfwhD,SAjEF,SAAkBC,GAChB,OAAO,IAAIhwB,SAAQ,SAAAC,GASjBA,EAAQ2vB,EAROH,EAAUf,MAAMsB,EAAK,CAClCrzB,WAAW,EACXoa,iBAAiB,UA8DrBkZ,qBApDF,SAA8BjzB,EAAOkzB,GAAiC,IAApBvsC,EAAoB,wDAC9DylC,EAAOvmC,EAAQ,KAD+C,EAUhEma,EALFmzB,gBAAiBC,OALiD,MAKvC,KALuC,IAUhEpzB,EAJFqzB,iBAAkBC,OANgD,MAMtC,IANsC,IAUhEtzB,EAHFuzB,aAAcC,OAPoD,MAOrC,KAPqC,IAUhExzB,EAFFyzB,eAAgBC,OARkD,MAQvC,KARuC,IAUhE1zB,EADF2zB,QAASC,OATyD,MASlD,KATkD,EAW9Dv+C,EAAOm+C,GAAwC,WAAxB,EAAOA,SAAgE,IAA5BA,EAAaK,WAA6B,YAAc,OAC1HrtC,EAAWioB,EAAmBykB,GAC9BY,EAAO,CACXttC,SAAUA,EACVutC,SAAU3H,EAAK2H,SAASvtC,GACxBwtC,QAASZ,EACTngD,KAAMmF,SAASk7C,EAAS,IACxBj+C,KAAMA,EACNu+C,KAAsB,iBAATA,EAAoBA,EAAKjzC,QAAQ,KAAM,IAAM,MAW5D,MARa,SAATtL,IACFy+C,EAAKG,KAAOP,GAAgC,iBAAbA,EAAwBA,EAASz1B,MAAM,KAAK,GAAK,IAG9EtX,IACFmtC,EAAK9zB,MAAQA,GAGR8zB,GAuBPI,mBApBF,SAA4BriD,GAC1B,OAAQA,EAAM6D,YACZ,IAAK,KACH,MAAO,YAET,IAAK,KAGL,IAAK,KAEH,MAAO,UAET,QACE,OAAO0C,SAASvG,EAAO,Q,gDCtG3BsiD,EACEtuC,EAAQ,KADVsuC,MAIAC,EACEvuC,EAAQ,KADVuuC,aAIAC,EACExuC,EAAQ,KADVwuC,WAOF/iD,EAAOC,QAAU,CAMf4iD,QACAC,eACAC,e,kQCxBF,IAAMF,EAAQtuC,EAAQ,KAEhByuC,EAAezuC,EAAQ,KAEvB0uC,EAAQ1uC,EAAQ,KAGpBnD,EACEmD,EAAQ,KADVnD,MA4GFpR,EAAOC,QAAU,CACf4iD,QACAK,WAnGF,SAAoBpI,GAClB,IAAMqI,EAAWrI,EAAKzrC,QAAQ,MATT,4BASgCA,QAAQ,QARtC,8BAUvB,OADkB+zC,mBAAmBD,GACpBx2B,MAVM,8BAUkBjiB,KAAK,QAAQiiB,MAXjC,4BAWuDjiB,KAAK,MAiGjF24C,QAxFF,WAA2B,2BAAPC,EAAO,yBAAPA,EAAO,gBACzB,OAAON,EAAaM,EAAMC,QAAO,SAACx2B,EAAQy2B,EAAUC,GAKlD,OAJkB,IAAdA,GAAgC,MAAbD,GAAiC,MAAbA,GAAkD,MAA9Bz2B,EAAOA,EAAO1rB,OAAS,KACpF0rB,EAAO1lB,KAAKm8C,GAGPz2B,IACN,MAkFH22B,sBA/DF,SAA+BC,EAAgBC,GACzCA,EAAcC,YAChBF,EAAeE,UAAYD,EAAcC,WAGvCD,EAAcE,aAChBH,EAAeG,WAAaF,EAAcE,YAGxCF,EAAc5/C,OAChB2/C,EAAe3/C,KAAO4/C,EAAc5/C,MAGlC4/C,EAActuC,SAA4C,WAAjC,EAAOsuC,EAActuC,WAChDquC,EAAeruC,QAAUlE,EAAMuyC,EAAeruC,SAAW,GAAIsuC,EAActuC,UAGhC,kBAAlCsuC,EAAcG,kBACvBJ,EAAeI,gBAAkBH,EAAcG,iBAG7CH,EAAcI,mBAChBL,EAAeK,iBAAmBJ,EAAcI,kBAG9CJ,EAAcK,kBAA8D,mBAAnCL,EAAcK,mBACzDN,EAAeM,iBAAmBL,EAAcK,kBAG9CL,EAAcznB,UAChBwnB,EAAexnB,QAAUynB,EAAcznB,QAEvCwnB,EAAeO,eAAiB,SAAAvvC,GAAM,OAAIA,GAAU,KAAOA,EAAS,KAAiB,KAAVA,KAgC7EwvC,QATF,SAAiBR,GACf,OAAOV,EAAMU,M,gBClHf3jD,EAAOC,QAAU,EAAQ,M,6BCEzBD,EAAOC,QAAU,SAAc8P,EAAIyB,GACjC,OAAO,WAEL,IADA,IAAIwf,EAAO,IAAI7lB,MAAMd,UAAUhJ,QACtB8C,EAAI,EAAGA,EAAI6sB,EAAK3vB,OAAQ8C,IAC/B6sB,EAAK7sB,GAAKkG,UAAUlG,GAEtB,OAAO4L,EAAGlH,MAAM2I,EAASwf,M,6BCN7B,IAAIjf,EAAQ,EAAQ,KAEpB,SAASM,EAAOvO,GACd,OAAOs/C,mBAAmBt/C,GACxBuL,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KAUrBrP,EAAOC,QAAU,SAAkBsgD,EAAK1Z,EAAQud,GAE9C,IAAKvd,EACH,OAAO0Z,EAGT,IAAI8D,EACJ,GAAID,EACFC,EAAmBD,EAAiBvd,QAC/B,GAAI90B,EAAMlB,kBAAkBg2B,GACjCwd,EAAmBxd,EAAOziC,eACrB,CACL,IAAIk/C,EAAQ,GAEZvxC,EAAMjC,QAAQ+2B,GAAQ,SAAmB/iC,EAAK7C,GACxC6C,UAIAiO,EAAM5P,QAAQ2B,GAChB7C,GAAY,KAEZ6C,EAAM,CAACA,GAGTiO,EAAMjC,QAAQhM,GAAK,SAAoBoqB,GACjCnc,EAAMvB,OAAO0d,GACfA,EAAIA,EAAEo2B,cACGvyC,EAAMrC,SAASwe,KACxBA,EAAIquB,KAAKC,UAAUtuB,IAErBo1B,EAAMj8C,KAAKgL,EAAOpR,GAAO,IAAMoR,EAAO6b,WAI1Cm2B,EAAmBf,EAAM54C,KAAK,KAGhC,GAAI25C,EAAkB,CACpB,IAAIE,EAAgBhE,EAAI56C,QAAQ,MACT,IAAnB4+C,IACFhE,EAAMA,EAAIh9C,MAAM,EAAGghD,IAGrBhE,KAA8B,IAAtBA,EAAI56C,QAAQ,KAAc,IAAM,KAAO0+C,EAGjD,OAAO9D,I,6BClETvgD,EAAOC,QAAU,SAAkBM,GACjC,SAAUA,IAASA,EAAMikD,c,8BCH3B,YAEA,IAAIzyC,EAAQ,EAAQ,KAChB0yC,EAAsB,EAAQ,KAE9BC,EAAuB,CACzB,eAAgB,qCAGlB,SAASC,EAAsBrvC,EAAS/U,IACjCwR,EAAMtC,YAAY6F,IAAYvD,EAAMtC,YAAY6F,EAAQ,mBAC3DA,EAAQ,gBAAkB/U,GAgB9B,IAXMqkD,EAWFC,EAAW,CACbD,UAX8B,oBAAnBE,qBAGmB,IAAZvsB,GAAuE,qBAA5Cz4B,OAAOO,UAAU+D,SAASwB,KAAK2yB,MAD1EqsB,EAAU,EAAQ,MAKbA,GAMPG,iBAAkB,CAAC,SAA0B/gD,EAAMsR,GAGjD,OAFAmvC,EAAoBnvC,EAAS,UAC7BmvC,EAAoBnvC,EAAS,gBACzBvD,EAAM5B,WAAWnM,IACnB+N,EAAM7B,cAAclM,IACpB+N,EAAMrO,SAASM,IACf+N,EAAMpB,SAAS3M,IACf+N,EAAMtB,OAAOzM,IACb+N,EAAMrB,OAAO1M,GAENA,EAEL+N,EAAM1B,kBAAkBrM,GACnBA,EAAKpD,OAEVmR,EAAMlB,kBAAkB7M,IAC1B2gD,EAAsBrvC,EAAS,mDACxBtR,EAAKI,YAEV2N,EAAMrC,SAAS1L,IACjB2gD,EAAsBrvC,EAAS,kCACxBinC,KAAKC,UAAUx4C,IAEjBA,IAGTghD,kBAAmB,CAAC,SAA2BhhD,GAE7C,GAAoB,iBAATA,EACT,IACEA,EAAOu4C,KAAK6D,MAAMp8C,GAClB,MAAOmF,IAEX,OAAOnF,IAOTihD,QAAS,EAETC,eAAgB,aAChBC,eAAgB,eAEhBnB,kBAAmB,EACnBoB,eAAgB,EAEhBlB,eAAgB,SAAwBvvC,GACtC,OAAOA,GAAU,KAAOA,EAAS,MAIrCkwC,EAASvvC,QAAU,CACjB6iC,OAAQ,CACN,OAAU,sCAIdpmC,EAAMjC,QAAQ,CAAC,SAAU,MAAO,SAAS,SAA6BgnB,GACpE+tB,EAASvvC,QAAQwhB,GAAU,MAG7B/kB,EAAMjC,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BgnB,GACrE+tB,EAASvvC,QAAQwhB,GAAU/kB,EAAMX,MAAMszC,MAGzC1kD,EAAOC,QAAU4kD,I,+CC/FjB,IAAI9yC,EAAQ,EAAQ,KAChBszC,EAAS,EAAQ,KACjBC,EAAU,EAAQ,KAClBC,EAAW,EAAQ,KACnBC,EAAgB,EAAQ,KACxBC,EAAe,EAAQ,KACvBC,EAAkB,EAAQ,KAC1BC,EAAc,EAAQ,KAE1B3lD,EAAOC,QAAU,SAAoBosC,GACnC,OAAO,IAAI3a,SAAQ,SAA4BC,EAASC,GACtD,IAAIg0B,EAAcvZ,EAAOroC,KACrB6hD,EAAiBxZ,EAAO/2B,QAExBvD,EAAM5B,WAAWy1C,WACZC,EAAe,iBAIrB9zC,EAAMrB,OAAOk1C,IAAgB7zC,EAAMtB,OAAOm1C,KAC3CA,EAAY7hD,aAEL8hD,EAAe,gBAGxB,IAAI1B,EAAU,IAAIW,eAGlB,GAAIzY,EAAOyU,KAAM,CACf,IAAID,EAAWxU,EAAOyU,KAAKD,UAAY,GACnCpf,EAAWqe,SAASsD,mBAAmB/W,EAAOyU,KAAKrf,YAAc,GACrEokB,EAAeC,cAAgB,SAAWC,KAAKlF,EAAW,IAAMpf,GAGlE,IAAIukB,EAAWR,EAAcnZ,EAAO4Z,QAAS5Z,EAAOkU,KA4EpD,GA3EA4D,EAAQ+B,KAAK7Z,EAAOvV,OAAOqvB,cAAeZ,EAASS,EAAU3Z,EAAOxF,OAAQwF,EAAO+X,mBAAmB,GAGtGD,EAAQc,QAAU5Y,EAAO4Y,QAGzBd,EAAQiC,mBAAqB,WAC3B,GAAKjC,GAAkC,IAAvBA,EAAQkC,aAQD,IAAnBlC,EAAQxvC,QAAkBwvC,EAAQmC,aAAwD,IAAzCnC,EAAQmC,YAAY3gD,QAAQ,UAAjF,CAKA,IAAI4gD,EAAkB,0BAA2BpC,EAAUsB,EAAatB,EAAQqC,yBAA2B,KAEvG/xC,EAAW,CACbzQ,KAFkBqoC,EAAOoa,cAAwC,SAAxBpa,EAAOoa,aAAiDtC,EAAQ1vC,SAA/B0vC,EAAQuC,aAGlF/xC,OAAQwvC,EAAQxvC,OAChBC,WAAYuvC,EAAQvvC,WACpBU,QAASixC,EACTla,OAAQA,EACR8X,QAASA,GAGXkB,EAAO1zB,EAASC,EAAQnd,GAGxB0vC,EAAU,OAIZA,EAAQwC,QAAU,WACXxC,IAILvyB,EAAO+zB,EAAY,kBAAmBtZ,EAAQ,eAAgB8X,IAG9DA,EAAU,OAIZA,EAAQ5lB,QAAU,WAGhB3M,EAAO+zB,EAAY,gBAAiBtZ,EAAQ,KAAM8X,IAGlDA,EAAU,MAIZA,EAAQyC,UAAY,WAClB,IAAIC,EAAsB,cAAgBxa,EAAO4Y,QAAU,cACvD5Y,EAAOwa,sBACTA,EAAsBxa,EAAOwa,qBAE/Bj1B,EAAO+zB,EAAYkB,EAAqBxa,EAAQ,eAC9C8X,IAGFA,EAAU,MAMRpyC,EAAMhB,uBAAwB,CAEhC,IAAI+1C,GAAaza,EAAO0X,iBAAmB2B,EAAgBM,KAAc3Z,EAAO6Y,eAC9EI,EAAQn/C,KAAKkmC,EAAO6Y,qBACpBnjD,EAEE+kD,IACFjB,EAAexZ,EAAO8Y,gBAAkB2B,GAuB5C,GAlBI,qBAAsB3C,GACxBpyC,EAAMjC,QAAQ+1C,GAAgB,SAA0B/hD,EAAK7C,QAChC,IAAhB2kD,GAAqD,iBAAtB3kD,EAAIwD,qBAErCohD,EAAe5kD,GAGtBkjD,EAAQ4C,iBAAiB9lD,EAAK6C,MAM/BiO,EAAMtC,YAAY48B,EAAO0X,mBAC5BI,EAAQJ,kBAAoB1X,EAAO0X,iBAIjC1X,EAAOoa,aACT,IACEtC,EAAQsC,aAAepa,EAAOoa,aAC9B,MAAOt9C,GAGP,GAA4B,SAAxBkjC,EAAOoa,aACT,MAAMt9C,EAM6B,mBAA9BkjC,EAAO2a,oBAChB7C,EAAQ8C,iBAAiB,WAAY5a,EAAO2a,oBAIP,mBAA5B3a,EAAO4X,kBAAmCE,EAAQ+C,QAC3D/C,EAAQ+C,OAAOD,iBAAiB,WAAY5a,EAAO4X,kBAGjD5X,EAAO8a,aAET9a,EAAO8a,YAAYC,QAAQC,MAAK,SAAoBC,GAC7CnD,IAILA,EAAQ3W,QACR5b,EAAO01B,GAEPnD,EAAU,SAITyB,IACHA,EAAc,MAIhBzB,EAAQoD,KAAK3B,Q,6BCrLjB,IAAI4B,EAAe,EAAQ,KAY3BxnD,EAAOC,QAAU,SAAqBm0B,EAASiY,EAAQt9B,EAAMo1C,EAAS1vC,GACpE,IAAIyf,EAAQ,IAAItxB,MAAMwxB,GACtB,OAAOozB,EAAatzB,EAAOmY,EAAQt9B,EAAMo1C,EAAS1vC,K,6BCdpD,IAAI1C,EAAQ,EAAQ,KAUpB/R,EAAOC,QAAU,SAAqBwnD,EAASC,GAE7CA,EAAUA,GAAW,GACrB,IAAIrb,EAAS,GAETsb,EAAuB,CAAC,MAAO,SAAU,QACzCC,EAA0B,CAAC,UAAW,OAAQ,QAAS,UACvDC,EAAuB,CACzB,UAAW,mBAAoB,oBAAqB,mBACpD,UAAW,iBAAkB,kBAAmB,UAAW,eAAgB,iBAC3E,iBAAkB,mBAAoB,qBAAsB,aAC5D,mBAAoB,gBAAiB,eAAgB,YAAa,YAClE,aAAc,cAAe,aAAc,oBAEzCC,EAAkB,CAAC,kBAEvB,SAASC,EAAep9C,EAAQkzB,GAC9B,OAAI9rB,EAAMpC,cAAchF,IAAWoH,EAAMpC,cAAckuB,GAC9C9rB,EAAMX,MAAMzG,EAAQkzB,GAClB9rB,EAAMpC,cAAckuB,GACtB9rB,EAAMX,MAAM,GAAIysB,GACd9rB,EAAM5P,QAAQ07B,GAChBA,EAAOt6B,QAETs6B,EAGT,SAASmqB,EAAoBnO,GACtB9nC,EAAMtC,YAAYi4C,EAAQ7N,IAEnB9nC,EAAMtC,YAAYg4C,EAAQ5N,MACpCxN,EAAOwN,GAAQkO,OAAehmD,EAAW0lD,EAAQ5N,KAFjDxN,EAAOwN,GAAQkO,EAAeN,EAAQ5N,GAAO6N,EAAQ7N,IAMzD9nC,EAAMjC,QAAQ63C,GAAsB,SAA0B9N,GACvD9nC,EAAMtC,YAAYi4C,EAAQ7N,MAC7BxN,EAAOwN,GAAQkO,OAAehmD,EAAW2lD,EAAQ7N,QAIrD9nC,EAAMjC,QAAQ83C,EAAyBI,GAEvCj2C,EAAMjC,QAAQ+3C,GAAsB,SAA0BhO,GACvD9nC,EAAMtC,YAAYi4C,EAAQ7N,IAEnB9nC,EAAMtC,YAAYg4C,EAAQ5N,MACpCxN,EAAOwN,GAAQkO,OAAehmD,EAAW0lD,EAAQ5N,KAFjDxN,EAAOwN,GAAQkO,OAAehmD,EAAW2lD,EAAQ7N,OAMrD9nC,EAAMjC,QAAQg4C,GAAiB,SAAejO,GACxCA,KAAQ6N,EACVrb,EAAOwN,GAAQkO,EAAeN,EAAQ5N,GAAO6N,EAAQ7N,IAC5CA,KAAQ4N,IACjBpb,EAAOwN,GAAQkO,OAAehmD,EAAW0lD,EAAQ5N,QAIrD,IAAIoO,EAAYN,EACb59C,OAAO69C,GACP79C,OAAO89C,GACP99C,OAAO+9C,GAENI,EAAYpoD,OACbsuB,KAAKq5B,GACL19C,OAAOjK,OAAOsuB,KAAKs5B,IACnB1yC,QAAO,SAAyB/T,GAC/B,OAAmC,IAA5BgnD,EAAUtiD,QAAQ1E,MAK7B,OAFA8Q,EAAMjC,QAAQo4C,EAAWF,GAElB3b,I,6BC7ET,SAAS8b,EAAO/zB,GACdzxB,KAAKyxB,QAAUA,EAGjB+zB,EAAO9nD,UAAU+D,SAAW,WAC1B,MAAO,UAAYzB,KAAKyxB,QAAU,KAAOzxB,KAAKyxB,QAAU,KAG1D+zB,EAAO9nD,UAAUmkD,YAAa,EAE9BxkD,EAAOC,QAAUkoD,G,6BChBjB,IAAMC,EAAa7zC,EAAQ,KAEvB8zC,EAAY,KAchBroD,EAAOC,QAAU,CACf8iD,WATF,WAKE,OAJKsF,IACHA,EAAY,IAAID,GAGXC,K,iCCZP5qB,EACElpB,EAAQ,KADVkpB,S,EAMElpB,EAAQ,KAFV+zC,E,EAAAA,IACAC,E,EAAAA,WAiDFvoD,EAAOC,QAAU,CACfuoD,wBA/CF,SAAiC3H,EAAUpf,GACzC,IAAMgnB,EAAUhrB,EAAS,GAAD,OAAIojB,EAAJ,YAAgBpf,IACxC,sBAAgBgnB,IA8ChBC,wBANF,SAAiCC,GAC/B,gBAAUA,EAAUC,WAApB,YAAkCD,EAAUE,eAM5CC,yBA5CF,SAAkCt6B,EAASgM,GACzC,IAAM+lB,EAAM/xB,EAAQ+xB,IAAIlxC,QAAQ,KAAM,IAChC05C,GAA2B,GAArBxI,EAAI56C,QAAQ,KAAa,IAAM46C,EAAIh9C,MAAMg9C,EAAI56C,QAAQ,MAC3DmxB,EAAStI,EAAQsI,OAAStI,EAAQsI,OAAOqvB,cAAgB,MACzD6C,IAAM,uBAAuB5N,KAAK5gB,EAAOwuB,MAAO,OAChDC,EAAW,kBAAWzuB,EAAO0uB,IAAK3lD,OAAO,GAEzC4lD,GADS3uB,EAAO4uB,OACVb,EAAW/tB,EAAOiM,UAAWjM,EAAOqmB,SAAUrmB,EAAO6uB,MAAO7uB,EAAOiH,SAAUjH,EAAO8uB,MAAO9uB,EAAO4uB,SACxGG,EAAMjB,EAAI,GAAD,OAAIxxB,EAAJ,YAAciyB,IACvBS,EAAuBlB,EAANU,EAAU,GAAD,OAAIG,EAAJ,YAAW3uB,EAAO8uB,MAAlB,YAA2BL,EAA3B,YAAuCzuB,EAAO4uB,OAA9C,YAAwDJ,EAAxD,YAA+DO,GAAa,GAAD,OAAIJ,EAAJ,YAAW3uB,EAAO8uB,MAAlB,YAA2BC,IAChIE,EAAa,CACjB5I,SAAUrmB,EAAOqmB,SACjBwI,MAAO7uB,EAAO6uB,MACdC,MAAO9uB,EAAO8uB,MACdP,MACAC,MACAv0C,SAAU+0C,EACVN,GAAID,EACJG,OAAQ5uB,EAAO4uB,OACf3iB,UAAWjM,EAAOiM,UAClBijB,OAAQlvB,EAAOkvB,QAEXC,EAAa,GAEnB,IAAK,IAAI92C,KAAK42C,EACRA,EAAW52C,KACH,QAANA,GAAqB,OAANA,GAAoB,cAANA,EAC/B82C,EAAWtiD,KAAX,UAAmBwL,EAAnB,YAAwB42C,EAAW52C,KAEnC82C,EAAWtiD,KAAX,UAAmBwL,EAAnB,aAAyB42C,EAAW52C,GAApC,OAKN,uBAAiB82C,EAAWj/C,KAAK,U,cClDnC,IAAItG,EAAW,GAAGA,SAElBpE,EAAOC,QAAUkL,MAAMhJ,SAAW,SAAU2D,GAC1C,MAA6B,kBAAtB1B,EAASwB,KAAKE,K,6BCFvB,IAAIjF,EAAS,EAAQ,KAAeA,OAChCsuB,EAAY,EAAQ,KAAmBA,UAS3C,SAASqc,EAAU1R,GACjB3K,EAAUvpB,KAAKjD,MAEfA,KAAKq3B,OAASn5B,EAAOW,YAAYs4B,GACjCn3B,KAAKu3B,WAAaJ,EAClBn3B,KAAKwpC,aAAe,EACpBxpC,KAAKypC,QAAU,CAAC,EAAG,EAAG,EAAG,GAEzBzpC,KAAKinD,YAAa,EAhBL,EAAQ,IAmBvBh0C,CAAS41B,EAAUrc,GAEnBqc,EAASnrC,UAAUkwB,WAAa,SAAUwN,EAAOl8B,EAAUgrC,GACzD,IAAI3Y,EAAQ,KACZ,IACEvxB,KAAKktB,OAAOkO,EAAOl8B,GACnB,MAAO6S,GACPwf,EAAQxf,EAGVm4B,EAAS3Y,IAGXsX,EAASnrC,UAAUmwB,OAAS,SAAUqc,GACpC,IAAI3Y,EAAQ,KACZ,IACEvxB,KAAK0E,KAAK1E,KAAK63B,UACf,MAAO9lB,GACPwf,EAAQxf,EAGVm4B,EAAS3Y,IAGXsX,EAASnrC,UAAUwvB,OAAS,SAAU7rB,EAAMnC,GAE1C,GA3CF,SAAmCiC,EAAK6lC,GACtC,IAAK9oC,EAAO6C,SAASI,IAAuB,iBAARA,EAClC,MAAM,IAAIpC,UAAUioC,EAAS,iCAwC/BkgB,CAAyB7lD,EAAM,QAC3BrB,KAAKinD,WAAY,MAAM,IAAIhnD,MAAM,yBAChC/B,EAAO6C,SAASM,KAAOA,EAAOnD,EAAOS,KAAK0C,EAAMnC,IAKrD,IAFA,IAAIu4B,EAAQz3B,KAAKq3B,OACbvzB,EAAS,EACN9D,KAAKwpC,aAAenoC,EAAK3C,OAASoF,GAAU9D,KAAKu3B,YAAY,CAClE,IAAK,IAAI/1B,EAAIxB,KAAKwpC,aAAchoC,EAAIxB,KAAKu3B,YAAaE,EAAMj2B,KAAOH,EAAKyC,KACxE9D,KAAKstB,UACLttB,KAAKwpC,aAAe,EAEtB,KAAO1lC,EAASzC,EAAK3C,QAAQ+4B,EAAMz3B,KAAKwpC,gBAAkBnoC,EAAKyC,KAG/D,IAAK,IAAIF,EAAI,EAAGmR,EAAsB,EAAd1T,EAAK3C,OAAYqW,EAAQ,IAAKnR,EACpD5D,KAAKypC,QAAQ7lC,IAAMmR,GACnBA,EAAS/U,KAAKypC,QAAQ7lC,GAAK,WAAgB,GAC/B,IAAG5D,KAAKypC,QAAQ7lC,IAAM,WAAemR,GAGnD,OAAO/U,MAGT6oC,EAASnrC,UAAU4vB,QAAU,WAC3B,MAAM,IAAIrtB,MAAM,+BAGlB4oC,EAASnrC,UAAUm6B,OAAS,SAAU34B,GACpC,GAAIc,KAAKinD,WAAY,MAAM,IAAIhnD,MAAM,yBACrCD,KAAKinD,YAAa,EAElB,IAAIpvB,EAAS73B,KAAKw5B,eACDp6B,IAAbF,IAAwB24B,EAASA,EAAOp2B,SAASvC,IAGrDc,KAAKq3B,OAAOp4B,KAAK,GACjBe,KAAKwpC,aAAe,EACpB,IAAK,IAAIhoC,EAAI,EAAGA,EAAI,IAAKA,EAAGxB,KAAKypC,QAAQjoC,GAAK,EAE9C,OAAOq2B,GAGTgR,EAASnrC,UAAU87B,QAAU,WAC3B,MAAM,IAAIv5B,MAAM,+BAGlB5C,EAAOC,QAAUurC,G,8BC9FjB,cAyBA,IAAI9U,EAHJ12B,EAAOC,QAAU22B,EAMjBA,EAASkzB,cAAgBA,EAGhB,EAAQ,KAAUx4B,aAA3B,IAEIy4B,EAAkB,SAAyBt4B,EAAS1tB,GACtD,OAAO0tB,EAAQ8C,UAAUxwB,GAAM1C,QAO7Bq8B,EAAS,EAAQ,KAIjB78B,EAAS,EAAQ,KAAUA,OAE3BkvC,EAAgB/mC,EAAOvG,YAAc,aAYzC,IAEIunD,EAFAC,EAAY,EAAQ,KAKtBD,EADEC,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,aAKV,IAcI96B,EACA+6B,EACA7oD,EAhBA8oD,EAAa,EAAQ,KAErBna,EAAc,EAAQ,KAGtBoa,EADW,EAAQ,KACSA,iBAE5BC,EAAiB,EAAQ,KAAa9xB,MACtC+xB,EAAuBD,EAAeC,qBACtCC,EAA4BF,EAAeE,0BAC3CC,EAA6BH,EAAeG,2BAC5CC,EAAqCJ,EAAeI,mCAOxD,EAAQ,IAAR,CAAoB9zB,EAAU8G,GAE9B,IAAIitB,EAAiB1a,EAAY0a,eAC7BC,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAa1D,SAASd,EAAct7B,EAASme,EAAQwD,GACtCzZ,EAASA,GAAU,EAAQ,KAC3BlI,EAAUA,GAAW,GAMG,kBAAb2hB,IAAwBA,EAAWxD,aAAkBjW,GAGhE/zB,KAAKytC,aAAe5hB,EAAQ4hB,WACxBD,IAAUxtC,KAAKytC,WAAaztC,KAAKytC,cAAgB5hB,EAAQq8B,oBAG7DloD,KAAK20B,cAAgB+yB,EAAiB1nD,KAAM6rB,EAAS,wBAAyB2hB,GAI9ExtC,KAAK/B,OAAS,IAAIwpD,EAClBznD,KAAKtB,OAAS,EACdsB,KAAKmoD,MAAQ,KACbnoD,KAAKooD,WAAa,EAClBpoD,KAAKqoD,QAAU,KACfroD,KAAKw0B,OAAQ,EACbx0B,KAAKyqC,YAAa,EAClBzqC,KAAKsoD,SAAU,EAKftoD,KAAKuuC,MAAO,EAGZvuC,KAAKuoD,cAAe,EACpBvoD,KAAKwoD,iBAAkB,EACvBxoD,KAAKyoD,mBAAoB,EACzBzoD,KAAK0oD,iBAAkB,EACvB1oD,KAAK2oD,QAAS,EAEd3oD,KAAK4oD,WAAkC,IAAtB/8B,EAAQ+8B,UAEzB5oD,KAAK6oD,cAAgBh9B,EAAQg9B,YAE7B7oD,KAAK60B,WAAY,EAIjB70B,KAAKouC,gBAAkBviB,EAAQuiB,iBAAmB,OAElDpuC,KAAK8oD,WAAa,EAElB9oD,KAAK+oD,aAAc,EACnB/oD,KAAKgpD,QAAU,KACfhpD,KAAKd,SAAW,KAEZ2sB,EAAQ3sB,WACLutB,IAAeA,EAAgB,EAAQ,KAAmBA,eAC/DzsB,KAAKgpD,QAAU,IAAIv8B,EAAcZ,EAAQ3sB,UACzCc,KAAKd,SAAW2sB,EAAQ3sB,UAI5B,SAAS+0B,EAASpI,GAEhB,GADAkI,EAASA,GAAU,EAAQ,OACrB/zB,gBAAgBi0B,GAAW,OAAO,IAAIA,EAASpI,GAGrD,IAAI2hB,EAAWxtC,gBAAgB+zB,EAC/B/zB,KAAK40B,eAAiB,IAAIuyB,EAAct7B,EAAS7rB,KAAMwtC,GAEvDxtC,KAAKo0B,UAAW,EAEZvI,IAC0B,mBAAjBA,EAAQroB,OAAqBxD,KAAKipD,MAAQp9B,EAAQroB,MAC9B,mBAApBqoB,EAAQ8P,UAAwB37B,KAAK80B,SAAWjJ,EAAQ8P,UAGrEZ,EAAO93B,KAAKjD,MAiEd,SAASkpD,EAAiBlf,EAAQ5O,EAAOl8B,EAAUiqD,EAAYC,GAC7D/B,EAAM,mBAAoBjsB,GAC1B,IAMM5J,EANFZ,EAAQoZ,EAAOpV,eAEnB,GAAc,OAAVwG,EACFxK,EAAM03B,SAAU,EAyOpB,SAAoBte,EAAQpZ,GAE1B,GADAy2B,EAAM,cACFz2B,EAAM4D,MAAO,OAEjB,GAAI5D,EAAMo4B,QAAS,CACjB,IAAI5tB,EAAQxK,EAAMo4B,QAAQ/mD,MAEtBm5B,GAASA,EAAM18B,SACjBkyB,EAAM3yB,OAAOyG,KAAK02B,GAClBxK,EAAMlyB,QAAUkyB,EAAM6c,WAAa,EAAIrS,EAAM18B,QAIjDkyB,EAAM4D,OAAQ,EAEV5D,EAAM2d,KAIR8a,EAAarf,IAGbpZ,EAAM23B,cAAe,EAEhB33B,EAAM43B,kBACT53B,EAAM43B,iBAAkB,EACxBc,EAActf,KAlQhBuf,CAAWvf,EAAQpZ,QAKnB,GAFKw4B,IAAgB53B,EAmDzB,SAAsBZ,EAAOwK,GAC3B,IAAI5J,EAhQiB1wB,EAkQFs6B,EAjQZl9B,EAAO6C,SAASD,IAAQA,aAAessC,GAiQA,iBAAVhS,QAAgCh8B,IAAVg8B,GAAwBxK,EAAM6c,aACtFjc,EAAK,IAAIo2B,EAAqB,QAAS,CAAC,SAAU,SAAU,cAAexsB,IAnQ/E,IAAuBt6B,EAsQrB,OAAO0wB,EA1DqBg4B,CAAa54B,EAAOwK,IAE1C5J,EACFw2B,EAAehe,EAAQxY,QAClB,GAAIZ,EAAM6c,YAAcrS,GAASA,EAAM18B,OAAS,EAKrD,GAJqB,iBAAV08B,GAAuBxK,EAAM6c,YAActwC,OAAO8P,eAAemuB,KAAWl9B,EAAOR,YAC5F09B,EAtNR,SAA6BA,GAC3B,OAAOl9B,EAAOS,KAAKy8B,GAqNLgV,CAAoBhV,IAG1B+tB,EACEv4B,EAAM6Z,WAAYud,EAAehe,EAAQ,IAAI+d,GAA2C0B,EAASzf,EAAQpZ,EAAOwK,GAAO,QACtH,GAAIxK,EAAM4D,MACfwzB,EAAehe,EAAQ,IAAI6d,OACtB,IAAIj3B,EAAMiE,UACf,OAAO,EAEPjE,EAAM03B,SAAU,EAEZ13B,EAAMo4B,UAAY9pD,GACpBk8B,EAAQxK,EAAMo4B,QAAQroD,MAAMy6B,GACxBxK,EAAM6c,YAA+B,IAAjBrS,EAAM18B,OAAc+qD,EAASzf,EAAQpZ,EAAOwK,GAAO,GAAYsuB,EAAc1f,EAAQpZ,IAE7G64B,EAASzf,EAAQpZ,EAAOwK,GAAO,QAGzB+tB,IACVv4B,EAAM03B,SAAU,EAChBoB,EAAc1f,EAAQpZ,IAO1B,OAAQA,EAAM4D,QAAU5D,EAAMlyB,OAASkyB,EAAM+D,eAAkC,IAAjB/D,EAAMlyB,QAGtE,SAAS+qD,EAASzf,EAAQpZ,EAAOwK,EAAO+tB,GAClCv4B,EAAMy3B,SAA4B,IAAjBz3B,EAAMlyB,SAAiBkyB,EAAM2d,MAChD3d,EAAMk4B,WAAa,EACnB9e,EAAO9Z,KAAK,OAAQkL,KAGpBxK,EAAMlyB,QAAUkyB,EAAM6c,WAAa,EAAIrS,EAAM18B,OACzCyqD,EAAYv4B,EAAM3yB,OAAOkyB,QAAQiL,GAAYxK,EAAM3yB,OAAOyG,KAAK02B,GAC/DxK,EAAM23B,cAAcc,EAAarf,IAGvC0f,EAAc1f,EAAQpZ,GAvHxBzzB,OAAO2J,eAAemtB,EAASv2B,UAAW,YAAa,CAIrDG,YAAY,EACZmV,IAAK,WACH,YAA4B5T,IAAxBY,KAAK40B,gBAIF50B,KAAK40B,eAAeC,WAE7B1oB,IAAK,SAAavO,GAGXoC,KAAK40B,iBAMV50B,KAAK40B,eAAeC,UAAYj3B,MAGpCq2B,EAASv2B,UAAUi+B,QAAU2R,EAAY3R,QACzC1H,EAASv2B,UAAUszC,WAAa1D,EAAY2D,UAE5Chd,EAASv2B,UAAUo3B,SAAW,SAAU/iB,EAAKgjB,GAC3CA,EAAGhjB,IAOLkiB,EAASv2B,UAAUgH,KAAO,SAAU02B,EAAOl8B,GACzC,IACIkqD,EADAx4B,EAAQ5wB,KAAK40B,eAkBjB,OAfKhE,EAAM6c,WAYT2b,GAAiB,EAXI,iBAAVhuB,KACTl8B,EAAWA,GAAY0xB,EAAMwd,mBAEZxd,EAAM1xB,WACrBk8B,EAAQl9B,EAAOS,KAAKy8B,EAAOl8B,GAC3BA,EAAW,IAGbkqD,GAAiB,GAMdF,EAAiBlpD,KAAMo7B,EAAOl8B,GAAU,EAAOkqD,IAIxDn1B,EAASv2B,UAAUyyB,QAAU,SAAUiL,GACrC,OAAO8tB,EAAiBlpD,KAAMo7B,EAAO,MAAM,GAAM,IAyEnDnH,EAASv2B,UAAUisD,SAAW,WAC5B,OAAuC,IAAhC3pD,KAAK40B,eAAeyzB,SAI7Bp0B,EAASv2B,UAAUksD,YAAc,SAAUt2C,GACpCmZ,IAAeA,EAAgB,EAAQ,KAAmBA,eAC/D,IAAIu8B,EAAU,IAAIv8B,EAAcnZ,GAChCtT,KAAK40B,eAAeo0B,QAAUA,EAE9BhpD,KAAK40B,eAAe11B,SAAWc,KAAK40B,eAAeo0B,QAAQ9pD,SAK3D,IAHA,IAAIqU,EAAIvT,KAAK40B,eAAe32B,OAAO4rD,KAC/B96C,EAAU,GAED,OAANwE,GACLxE,GAAWi6C,EAAQroD,MAAM4S,EAAElS,MAC3BkS,EAAIA,EAAEgX,KAOR,OAJAvqB,KAAK40B,eAAe32B,OAAO6rD,QAEX,KAAZ/6C,GAAgB/O,KAAK40B,eAAe32B,OAAOyG,KAAKqK,GACpD/O,KAAK40B,eAAel2B,OAASqQ,EAAQrQ,OAC9BsB,MA2BT,SAAS+pD,EAAcrnD,EAAGkuB,GACxB,OAAIluB,GAAK,GAAsB,IAAjBkuB,EAAMlyB,QAAgBkyB,EAAM4D,MAAc,EACpD5D,EAAM6c,WAAmB,EAEzB/qC,GAAMA,EAEJkuB,EAAMy3B,SAAWz3B,EAAMlyB,OAAekyB,EAAM3yB,OAAO4rD,KAAKxoD,KAAK3C,OAAmBkyB,EAAMlyB,QAIxFgE,EAAIkuB,EAAM+D,gBAAe/D,EAAM+D,cA/BrC,SAAiCjyB,GAgB/B,OAfIA,GAHQ,WAKVA,EALU,YASVA,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAGKA,EAe4CsnD,CAAwBtnD,IACvEA,GAAKkuB,EAAMlyB,OAAegE,EAEzBkuB,EAAM4D,MAKJ5D,EAAMlyB,QAJXkyB,EAAM23B,cAAe,EACd,IAwIX,SAASc,EAAarf,GACpB,IAAIpZ,EAAQoZ,EAAOpV,eACnByyB,EAAM,eAAgBz2B,EAAM23B,aAAc33B,EAAM43B,iBAChD53B,EAAM23B,cAAe,EAEhB33B,EAAM43B,kBACTnB,EAAM,eAAgBz2B,EAAMy3B,SAC5Bz3B,EAAM43B,iBAAkB,EACxB5yB,EAAQnB,SAAS60B,EAAetf,IAIpC,SAASsf,EAActf,GACrB,IAAIpZ,EAAQoZ,EAAOpV,eACnByyB,EAAM,gBAAiBz2B,EAAMiE,UAAWjE,EAAMlyB,OAAQkyB,EAAM4D,OAEvD5D,EAAMiE,YAAcjE,EAAMlyB,SAAUkyB,EAAM4D,QAC7CwV,EAAO9Z,KAAK,YACZU,EAAM43B,iBAAkB,GAS1B53B,EAAM23B,cAAgB33B,EAAMy3B,UAAYz3B,EAAM4D,OAAS5D,EAAMlyB,QAAUkyB,EAAM+D,cAC7Es1B,EAAKjgB,GASP,SAAS0f,EAAc1f,EAAQpZ,GACxBA,EAAMm4B,cACTn4B,EAAMm4B,aAAc,EACpBnzB,EAAQnB,SAASy1B,EAAgBlgB,EAAQpZ,IAI7C,SAASs5B,EAAelgB,EAAQpZ,GAwB9B,MAAQA,EAAM03B,UAAY13B,EAAM4D,QAAU5D,EAAMlyB,OAASkyB,EAAM+D,eAAiB/D,EAAMy3B,SAA4B,IAAjBz3B,EAAMlyB,SAAe,CACpH,IAAIsC,EAAM4vB,EAAMlyB,OAGhB,GAFA2oD,EAAM,wBACNrd,EAAOxmC,KAAK,GACRxC,IAAQ4vB,EAAMlyB,OAChB,MAGJkyB,EAAMm4B,aAAc,EA6QtB,SAASoB,EAAwB1yC,GAC/B,IAAImZ,EAAQnZ,EAAKmd,eACjBhE,EAAM63B,kBAAoBhxC,EAAK0Z,cAAc,YAAc,EAEvDP,EAAM83B,kBAAoB93B,EAAM+3B,OAGlC/3B,EAAMy3B,SAAU,EACP5wC,EAAK0Z,cAAc,QAAU,GACtC1Z,EAAK8jB,SAIT,SAAS6uB,EAAiB3yC,GACxB4vC,EAAM,4BACN5vC,EAAKjU,KAAK,GA4BZ,SAAS6mD,EAAQrgB,EAAQpZ,GACvBy2B,EAAM,SAAUz2B,EAAM03B,SAEjB13B,EAAM03B,SACTte,EAAOxmC,KAAK,GAGdotB,EAAM83B,iBAAkB,EACxB1e,EAAO9Z,KAAK,UACZ+5B,EAAKjgB,GACDpZ,EAAMy3B,UAAYz3B,EAAM03B,SAASte,EAAOxmC,KAAK,GAgBnD,SAASymD,EAAKjgB,GACZ,IAAIpZ,EAAQoZ,EAAOpV,eAGnB,IAFAyyB,EAAM,OAAQz2B,EAAMy3B,SAEbz3B,EAAMy3B,SAA6B,OAAlBre,EAAOxmC,UA4HjC,SAAS8mD,EAAS5nD,EAAGkuB,GAEnB,OAAqB,IAAjBA,EAAMlyB,OAAqB,MAE3BkyB,EAAM6c,WAAY/kC,EAAMkoB,EAAM3yB,OAAOqmB,SAAkB5hB,GAAKA,GAAKkuB,EAAMlyB,QAEtDgK,EAAfkoB,EAAMo4B,QAAep4B,EAAM3yB,OAAO8J,KAAK,IAAqC,IAAxB6oB,EAAM3yB,OAAOS,OAAoBkyB,EAAM3yB,OAAOyzC,QAAmB9gB,EAAM3yB,OAAOmJ,OAAOwpB,EAAMlyB,QACnJkyB,EAAM3yB,OAAO6rD,SAGbphD,EAAMkoB,EAAM3yB,OAAOssD,QAAQ7nD,EAAGkuB,EAAMo4B,SAE/BtgD,GATP,IAAIA,EAYN,SAAS8hD,EAAYxgB,GACnB,IAAIpZ,EAAQoZ,EAAOpV,eACnByyB,EAAM,cAAez2B,EAAM6Z,YAEtB7Z,EAAM6Z,aACT7Z,EAAM4D,OAAQ,EACdoB,EAAQnB,SAASg2B,EAAe75B,EAAOoZ,IAI3C,SAASygB,EAAc75B,EAAOoZ,GAG5B,GAFAqd,EAAM,gBAAiBz2B,EAAM6Z,WAAY7Z,EAAMlyB,SAE1CkyB,EAAM6Z,YAA+B,IAAjB7Z,EAAMlyB,SAC7BkyB,EAAM6Z,YAAa,EACnBT,EAAO5V,UAAW,EAClB4V,EAAO9Z,KAAK,OAERU,EAAMi4B,aAAa,CAGrB,IAAI6B,EAAS1gB,EAAOzV,iBAEfm2B,GAAUA,EAAO7B,aAAe6B,EAAOngB,WAC1CP,EAAOrO,WAgBf,SAAS34B,EAAQ2nD,EAAIzjD,GACnB,IAAK,IAAI1F,EAAI,EAAG6L,EAAIs9C,EAAGjsD,OAAQ8C,EAAI6L,EAAG7L,IACpC,GAAImpD,EAAGnpD,KAAO0F,EAAG,OAAO1F,EAG1B,OAAQ,EA3tBVyyB,EAASv2B,UAAU8F,KAAO,SAAUd,GAClC2kD,EAAM,OAAQ3kD,GACdA,EAAIyB,SAASzB,EAAG,IAChB,IAAIkuB,EAAQ5wB,KAAK40B,eACbg2B,EAAQloD,EAKZ,GAJU,IAANA,IAASkuB,EAAM43B,iBAAkB,GAI3B,IAAN9lD,GAAWkuB,EAAM23B,gBAA0C,IAAxB33B,EAAM+D,cAAsB/D,EAAMlyB,QAAUkyB,EAAM+D,cAAgB/D,EAAMlyB,OAAS,IAAMkyB,EAAM4D,OAGlI,OAFA6yB,EAAM,qBAAsBz2B,EAAMlyB,OAAQkyB,EAAM4D,OAC3B,IAAjB5D,EAAMlyB,QAAgBkyB,EAAM4D,MAAOg2B,EAAYxqD,MAAWqpD,EAAarpD,MACpE,KAKT,GAAU,KAFV0C,EAAIqnD,EAAcrnD,EAAGkuB,KAENA,EAAM4D,MAEnB,OADqB,IAAjB5D,EAAMlyB,QAAc8rD,EAAYxqD,MAC7B,KAyBT,IA4BI0I,EA5BAmiD,EAASj6B,EAAM23B,aAgDnB,OA/CAlB,EAAM,gBAAiBwD,IAEF,IAAjBj6B,EAAMlyB,QAAgBkyB,EAAMlyB,OAASgE,EAAIkuB,EAAM+D,gBAEjD0yB,EAAM,6BADNwD,GAAS,GAMPj6B,EAAM4D,OAAS5D,EAAM03B,QAEvBjB,EAAM,mBADNwD,GAAS,GAEAA,IACTxD,EAAM,WACNz2B,EAAM03B,SAAU,EAChB13B,EAAM2d,MAAO,EAEQ,IAAjB3d,EAAMlyB,SAAckyB,EAAM23B,cAAe,GAE7CvoD,KAAKipD,MAAMr4B,EAAM+D,eAEjB/D,EAAM2d,MAAO,EAGR3d,EAAM03B,UAAS5lD,EAAIqnD,EAAca,EAAOh6B,KAMnC,QAFDloB,EAAPhG,EAAI,EAAS4nD,EAAS5nD,EAAGkuB,GAAkB,OAG7CA,EAAM23B,aAAe33B,EAAMlyB,QAAUkyB,EAAM+D,cAC3CjyB,EAAI,IAEJkuB,EAAMlyB,QAAUgE,EAChBkuB,EAAMk4B,WAAa,GAGA,IAAjBl4B,EAAMlyB,SAGHkyB,EAAM4D,QAAO5D,EAAM23B,cAAe,GAEnCqC,IAAUloD,GAAKkuB,EAAM4D,OAAOg2B,EAAYxqD,OAGlC,OAAR0I,GAAc1I,KAAKkwB,KAAK,OAAQxnB,GAC7BA,GAwHTurB,EAASv2B,UAAUurD,MAAQ,SAAUvmD,GACnCslD,EAAehoD,KAAM,IAAI8nD,EAA2B,aAGtD7zB,EAASv2B,UAAUuQ,KAAO,SAAUiJ,EAAM4zC,GACxC,IAAI1sD,EAAM4B,KACN4wB,EAAQ5wB,KAAK40B,eAEjB,OAAQhE,EAAMw3B,YACZ,KAAK,EACHx3B,EAAMu3B,MAAQjxC,EACd,MAEF,KAAK,EACH0Z,EAAMu3B,MAAQ,CAACv3B,EAAMu3B,MAAOjxC,GAC5B,MAEF,QACE0Z,EAAMu3B,MAAMzjD,KAAKwS,GAIrB0Z,EAAMw3B,YAAc,EACpBf,EAAM,wBAAyBz2B,EAAMw3B,WAAY0C,GACjD,IACIC,IADUD,IAA6B,IAAjBA,EAAS7oD,MAAkBiV,IAAS0e,EAAQo1B,QAAU9zC,IAAS0e,EAAQq1B,OAC7E32B,EAAQ42B,EAI5B,SAASC,EAAS/2B,EAAUg3B,GAC1B/D,EAAM,YAEFjzB,IAAah2B,GACXgtD,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAoB5BhE,EAAM,WAENnwC,EAAKkY,eAAe,QAASqM,GAC7BvkB,EAAKkY,eAAe,SAAUib,GAC9BnzB,EAAKkY,eAAe,QAASkM,GAC7BpkB,EAAKkY,eAAe,QAASwM,GAC7B1kB,EAAKkY,eAAe,SAAU+7B,GAC9B/sD,EAAIgxB,eAAe,MAAOkF,GAC1Bl2B,EAAIgxB,eAAe,MAAO87B,GAC1B9sD,EAAIgxB,eAAe,OAAQ+L,GAC3BmwB,GAAY,GAMR16B,EAAMk4B,YAAgB5xC,EAAKqd,iBAAkBrd,EAAKqd,eAAeyZ,WAAY1S,KA9BnF,SAAShH,IACP+yB,EAAM,SACNnwC,EAAKjV,MAhBH2uB,EAAM6Z,WAAY7U,EAAQnB,SAASs2B,GAAY3sD,EAAIywB,KAAK,MAAOk8B,GACnE7zC,EAAK4a,GAAG,SAAUq5B,GAsBlB,IAAI7vB,EAwFN,SAAqBl9B,GACnB,OAAO,WACL,IAAIwyB,EAAQxyB,EAAIw2B,eAChByyB,EAAM,cAAez2B,EAAMk4B,YACvBl4B,EAAMk4B,YAAYl4B,EAAMk4B,aAEH,IAArBl4B,EAAMk4B,YAAoB1B,EAAgBhpD,EAAK,UACjDwyB,EAAMy3B,SAAU,EAChB4B,EAAK7rD,KAhGKmtD,CAAYntD,GAC1B8Y,EAAK4a,GAAG,QAASwJ,GACjB,IAAIgwB,GAAY,EAwBhB,SAASnwB,EAAOC,GACdisB,EAAM,UACN,IAAI3+C,EAAMwO,EAAKvW,MAAMy6B,GACrBisB,EAAM,aAAc3+C,IAER,IAARA,KAKwB,IAArBkoB,EAAMw3B,YAAoBx3B,EAAMu3B,QAAUjxC,GAAQ0Z,EAAMw3B,WAAa,IAAqC,IAAhCplD,EAAQ4tB,EAAMu3B,MAAOjxC,MAAkBo0C,IACpHjE,EAAM,8BAA+Bz2B,EAAMk4B,YAC3Cl4B,EAAMk4B,cAGR1qD,EAAIi9B,SAMR,SAASO,EAAQpK,GACf61B,EAAM,UAAW71B,GACjB05B,IACAh0C,EAAKkY,eAAe,QAASwM,GACU,IAAnCwrB,EAAgBlwC,EAAM,UAAgB8wC,EAAe9wC,EAAMsa,GAMjE,SAASiK,IACPvkB,EAAKkY,eAAe,SAAUib,GAC9B6gB,IAKF,SAAS7gB,IACPgd,EAAM,YACNnwC,EAAKkY,eAAe,QAASqM,GAC7ByvB,IAKF,SAASA,IACP7D,EAAM,UACNjpD,EAAI8sD,OAAOh0C,GAWb,OA7DA9Y,EAAI0zB,GAAG,OAAQqJ,GAtkBjB,SAAyBrM,EAAS08B,EAAOp+C,GAGvC,GAAuC,mBAA5B0hB,EAAQiD,gBAAgC,OAAOjD,EAAQiD,gBAAgBy5B,EAAOp+C,GAKpF0hB,EAAQO,SAAYP,EAAQO,QAAQm8B,GAAuChjD,MAAMhJ,QAAQsvB,EAAQO,QAAQm8B,IAAS18B,EAAQO,QAAQm8B,GAAOr7B,QAAQ/iB,GAAS0hB,EAAQO,QAAQm8B,GAAS,CAACp+C,EAAI0hB,EAAQO,QAAQm8B,IAA5J18B,EAAQgD,GAAG05B,EAAOp+C,GA6lBnE2kB,CAAgB7a,EAAM,QAAS0kB,GAO/B1kB,EAAK2X,KAAK,QAAS4M,GAQnBvkB,EAAK2X,KAAK,SAAUwb,GAQpBnzB,EAAKgZ,KAAK,OAAQ9xB,GAEbwyB,EAAMy3B,UACThB,EAAM,eACNjpD,EAAIm9B,UAGCrkB,GAgBT+c,EAASv2B,UAAUwtD,OAAS,SAAUh0C,GACpC,IAAI0Z,EAAQ5wB,KAAK40B,eACbw2B,EAAa,CACfC,YAAY,GAGd,GAAyB,IAArBz6B,EAAMw3B,WAAkB,OAAOpoD,KAEnC,GAAyB,IAArB4wB,EAAMw3B,WAER,OAAIlxC,GAAQA,IAAS0Z,EAAMu3B,QACtBjxC,IAAMA,EAAO0Z,EAAMu3B,OAExBv3B,EAAMu3B,MAAQ,KACdv3B,EAAMw3B,WAAa,EACnBx3B,EAAMy3B,SAAU,EACZnxC,GAAMA,EAAKgZ,KAAK,SAAUlwB,KAAMorD,IANKprD,KAW3C,IAAKkX,EAAM,CAET,IAAIu0C,EAAQ76B,EAAMu3B,MACdnnD,EAAM4vB,EAAMw3B,WAChBx3B,EAAMu3B,MAAQ,KACdv3B,EAAMw3B,WAAa,EACnBx3B,EAAMy3B,SAAU,EAEhB,IAAK,IAAI7mD,EAAI,EAAGA,EAAIR,EAAKQ,IACvBiqD,EAAMjqD,GAAG0uB,KAAK,SAAUlwB,KAAM,CAC5BqrD,YAAY,IAIhB,OAAOrrD,KAIT,IAAIusB,EAAQvpB,EAAQ4tB,EAAMu3B,MAAOjxC,GACjC,OAAe,IAAXqV,IACJqE,EAAMu3B,MAAMrK,OAAOvxB,EAAO,GAC1BqE,EAAMw3B,YAAc,EACK,IAArBx3B,EAAMw3B,aAAkBx3B,EAAMu3B,MAAQv3B,EAAMu3B,MAAM,IACtDjxC,EAAKgZ,KAAK,SAAUlwB,KAAMorD,IAJDprD,MAU3Bi0B,EAASv2B,UAAUo0B,GAAK,SAAU45B,EAAIt+C,GACpC,IAAI5H,EAAMu1B,EAAOr9B,UAAUo0B,GAAG7uB,KAAKjD,KAAM0rD,EAAIt+C,GACzCwjB,EAAQ5wB,KAAK40B,eAuBjB,MArBW,SAAP82B,GAGF96B,EAAM63B,kBAAoBzoD,KAAKmxB,cAAc,YAAc,GAErC,IAAlBP,EAAMy3B,SAAmBroD,KAAKu7B,UAClB,aAAPmwB,IACJ96B,EAAM6Z,YAAe7Z,EAAM63B,oBAC9B73B,EAAM63B,kBAAoB73B,EAAM23B,cAAe,EAC/C33B,EAAMy3B,SAAU,EAChBz3B,EAAM43B,iBAAkB,EACxBnB,EAAM,cAAez2B,EAAMlyB,OAAQkyB,EAAM03B,SAErC13B,EAAMlyB,OACR2qD,EAAarpD,MACH4wB,EAAM03B,SAChB1yB,EAAQnB,SAAS21B,EAAkBpqD,QAKlCwF,GAGTyuB,EAASv2B,UAAUm0B,YAAcoC,EAASv2B,UAAUo0B,GAEpDmC,EAASv2B,UAAU0xB,eAAiB,SAAUs8B,EAAIt+C,GAChD,IAAI5H,EAAMu1B,EAAOr9B,UAAU0xB,eAAensB,KAAKjD,KAAM0rD,EAAIt+C,GAYzD,MAVW,aAAPs+C,GAOF91B,EAAQnB,SAAS01B,EAAyBnqD,MAGrCwF,GAGTyuB,EAASv2B,UAAU20B,mBAAqB,SAAUq5B,GAChD,IAAIlmD,EAAMu1B,EAAOr9B,UAAU20B,mBAAmBnsB,MAAMlG,KAAM0H,WAY1D,MAVW,aAAPgkD,QAA4BtsD,IAAPssD,GAOvB91B,EAAQnB,SAAS01B,EAAyBnqD,MAGrCwF,GAuBTyuB,EAASv2B,UAAU69B,OAAS,WAC1B,IAAI3K,EAAQ5wB,KAAK40B,eAYjB,OAVKhE,EAAMy3B,UACThB,EAAM,UAINz2B,EAAMy3B,SAAWz3B,EAAM63B,kBAQ3B,SAAgBze,EAAQpZ,GACjBA,EAAM83B,kBACT93B,EAAM83B,iBAAkB,EACxB9yB,EAAQnB,SAAS41B,EAASrgB,EAAQpZ,IAVlC2K,CAAOv7B,KAAM4wB,IAGfA,EAAM+3B,QAAS,EACR3oD,MAuBTi0B,EAASv2B,UAAU29B,MAAQ,WAUzB,OATAgsB,EAAM,wBAAyBrnD,KAAK40B,eAAeyzB,UAEf,IAAhCroD,KAAK40B,eAAeyzB,UACtBhB,EAAM,SACNrnD,KAAK40B,eAAeyzB,SAAU,EAC9BroD,KAAKkwB,KAAK,UAGZlwB,KAAK40B,eAAe+zB,QAAS,EACtB3oD,MAeTi0B,EAASv2B,UAAUiuD,KAAO,SAAU3hB,GAClC,IAAIwC,EAAQxsC,KAER4wB,EAAQ5wB,KAAK40B,eACb+zB,GAAS,EA0Bb,IAAK,IAAInnD,KAzBTwoC,EAAOlY,GAAG,OAAO,WAGf,GAFAu1B,EAAM,eAEFz2B,EAAMo4B,UAAYp4B,EAAM4D,MAAO,CACjC,IAAI4G,EAAQxK,EAAMo4B,QAAQ/mD,MACtBm5B,GAASA,EAAM18B,QAAQ8tC,EAAM9nC,KAAK02B,GAGxCoR,EAAM9nC,KAAK,SAEbslC,EAAOlY,GAAG,QAAQ,SAAUsJ,IAC1BisB,EAAM,gBACFz2B,EAAMo4B,UAAS5tB,EAAQxK,EAAMo4B,QAAQroD,MAAMy6B,IAE3CxK,EAAM6c,YAAc,MAACrS,KAAyDxK,EAAM6c,YAAgBrS,GAAUA,EAAM18B,UAE9G8tC,EAAM9nC,KAAK02B,KAGnButB,GAAS,EACT3e,EAAO3O,aAKG2O,OACI5qC,IAAZY,KAAKwB,IAAyC,mBAAdwoC,EAAOxoC,KACzCxB,KAAKwB,GAAK,SAAoB2yB,GAC5B,OAAO,WACL,OAAO6V,EAAO7V,GAAQjuB,MAAM8jC,EAAQtiC,YAF9B,CAIRlG,IAKN,IAAK,IAAIkB,EAAI,EAAGA,EAAIulD,EAAavpD,OAAQgE,IACvCsnC,EAAOlY,GAAGm2B,EAAavlD,GAAI1C,KAAKkwB,KAAKrjB,KAAK7M,KAAMioD,EAAavlD,KAc/D,OATA1C,KAAKipD,MAAQ,SAAUvmD,GACrB2kD,EAAM,gBAAiB3kD,GAEnBimD,IACFA,GAAS,EACT3e,EAAOzO,WAIJv7B,MAGa,mBAAX4G,SACTqtB,EAASv2B,UAAUkJ,OAAOglD,eAAiB,WAKzC,YAJ0CxsD,IAAtCooD,IACFA,EAAoC,EAAQ,MAGvCA,EAAkCxnD,QAI7C7C,OAAO2J,eAAemtB,EAASv2B,UAAW,wBAAyB,CAIjEG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAK40B,eAAeD,iBAG/Bx3B,OAAO2J,eAAemtB,EAASv2B,UAAW,iBAAkB,CAI1DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAK40B,gBAAkB50B,KAAK40B,eAAe32B,UAGtDd,OAAO2J,eAAemtB,EAASv2B,UAAW,kBAAmB,CAI3DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAK40B,eAAeyzB,SAE7Bl8C,IAAK,SAAaykB,GACZ5wB,KAAK40B,iBACP50B,KAAK40B,eAAeyzB,QAAUz3B,MAKpCqD,EAAS43B,UAAYvB,EACrBntD,OAAO2J,eAAemtB,EAASv2B,UAAW,iBAAkB,CAI1DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAK40B,eAAel2B,UAoDT,mBAAXkI,SACTqtB,EAASt1B,KAAO,SAAUmtD,EAAU7hB,GAKlC,YAJa7qC,IAATT,IACFA,EAAO,EAAQ,MAGVA,EAAKs1B,EAAU63B,EAAU7hB,O,wCCzlCpC5sC,EAAOC,QAAU,EAAQ,KAAUqxB,c,gCCAnC,YAuDA,SAASo9B,EAAoBt0C,EAAM1F,GACjCi6C,EAAYv0C,EAAM1F,GAClBk6C,EAAYx0C,GAGd,SAASw0C,EAAYx0C,GACfA,EAAK8c,iBAAmB9c,EAAK8c,eAAeq0B,WAC5CnxC,EAAKmd,iBAAmBnd,EAAKmd,eAAeg0B,WAChDnxC,EAAKyY,KAAK,SAsBZ,SAAS87B,EAAYv0C,EAAM1F,GACzB0F,EAAKyY,KAAK,QAASne,GAcrB1U,EAAOC,QAAU,CACfq+B,QAnGF,SAAiB5pB,EAAKgjB,GACpB,IAAIyX,EAAQxsC,KAERksD,EAAoBlsD,KAAK40B,gBAAkB50B,KAAK40B,eAAeC,UAC/Ds3B,EAAoBnsD,KAAKu0B,gBAAkBv0B,KAAKu0B,eAAeM,UAEnE,OAAIq3B,GAAqBC,GACnBp3B,EACFA,EAAGhjB,GACMA,IACJ/R,KAAKu0B,eAEEv0B,KAAKu0B,eAAeua,eAC9B9uC,KAAKu0B,eAAeua,cAAe,EACnClZ,EAAQnB,SAASu3B,EAAahsD,KAAM+R,IAHpC6jB,EAAQnB,SAASu3B,EAAahsD,KAAM+R,IAOjC/R,OAKLA,KAAK40B,iBACP50B,KAAK40B,eAAeC,WAAY,GAI9B70B,KAAKu0B,iBACPv0B,KAAKu0B,eAAeM,WAAY,GAGlC70B,KAAK80B,SAAS/iB,GAAO,MAAM,SAAUA,IAC9BgjB,GAAMhjB,EACJy6B,EAAMjY,eAECiY,EAAMjY,eAAeua,aAI/BlZ,EAAQnB,SAASw3B,EAAazf,IAH9BA,EAAMjY,eAAeua,cAAe,EACpClZ,EAAQnB,SAASs3B,EAAqBvf,EAAOz6B,IAH7C6jB,EAAQnB,SAASs3B,EAAqBvf,EAAOz6B,GAOtCgjB,GACTa,EAAQnB,SAASw3B,EAAazf,GAC9BzX,EAAGhjB,IAEH6jB,EAAQnB,SAASw3B,EAAazf,MAI3BxsC,OAkDPixC,UApCF,WACMjxC,KAAK40B,iBACP50B,KAAK40B,eAAeC,WAAY,EAChC70B,KAAK40B,eAAe0zB,SAAU,EAC9BtoD,KAAK40B,eAAeJ,OAAQ,EAC5Bx0B,KAAK40B,eAAe6V,YAAa,GAG/BzqC,KAAKu0B,iBACPv0B,KAAKu0B,eAAeM,WAAY,EAChC70B,KAAKu0B,eAAeC,OAAQ,EAC5Bx0B,KAAKu0B,eAAe0Z,QAAS,EAC7BjuC,KAAKu0B,eAAewZ,aAAc,EAClC/tC,KAAKu0B,eAAe8a,aAAc,EAClCrvC,KAAKu0B,eAAegW,UAAW,EAC/BvqC,KAAKu0B,eAAeua,cAAe,IAsBrCkZ,eAdF,SAAwBhe,EAAQj4B,GAM9B,IAAIq6C,EAASpiB,EAAOpV,eAChB81B,EAAS1gB,EAAOzV,eAChB63B,GAAUA,EAAOvD,aAAe6B,GAAUA,EAAO7B,YAAa7e,EAAOrO,QAAQ5pB,GAAUi4B,EAAO9Z,KAAK,QAASne,O,+CC/FlH,IAAIs6C,EAAwB,EAAQ,KAAmBx2B,MAAMw2B,sBAsB7DhvD,EAAOC,QAAU,CACfoqD,iBAjBF,SAA0B92B,EAAO/E,EAASygC,EAAW9e,GACnD,IAAIG,EALN,SAA2B9hB,EAAS2hB,EAAU8e,GAC5C,OAAgC,MAAzBzgC,EAAQ8I,cAAwB9I,EAAQ8I,cAAgB6Y,EAAW3hB,EAAQygC,GAAa,KAIrFC,CAAkB1gC,EAAS2hB,EAAU8e,GAE/C,GAAW,MAAP3e,EAAa,CACf,IAAMrlC,SAASqlC,IAAQroC,KAAK0F,MAAM2iC,KAASA,GAAQA,EAAM,EAEvD,MAAM,IAAI0e,EADC7e,EAAW8e,EAAY,gBACI3e,GAGxC,OAAOroC,KAAK0F,MAAM2iC,GAIpB,OAAO/c,EAAM6c,WAAa,GAAK,S,8BCrBjC,cAqCA,SAASlB,EAAc3b,GACrB,IAAI4b,EAAQxsC,KAEZA,KAAKuqB,KAAO,KACZvqB,KAAKysC,MAAQ,KAEbzsC,KAAK0sC,OAAS,YAimBhB,SAAwBC,EAAS/b,EAAO7e,GACtC,IAAI06B,EAAQE,EAAQF,MACpBE,EAAQF,MAAQ,KAEhB,KAAOA,GAAO,CACZ,IAAI1X,EAAK0X,EAAMvC,SACftZ,EAAMgc,YACN7X,EAAGhjB,GACH06B,EAAQA,EAAMliB,KAIhBqG,EAAMic,mBAAmBtiB,KAAOoiB,EA5mB9BG,CAAeN,EAAO5b,IAQ1B,IAAImD,EA3BJ12B,EAAOC,QAAU42B,EA8BjBA,EAASgZ,cAAgBA,EAGzB,IAAIC,EAAe,CACjBt6B,UAAW,EAAQ,MAMjBkoB,EAAS,EAAQ,KAIjB78B,EAAS,EAAQ,KAAUA,OAE3BkvC,EAAgB/mC,EAAOvG,YAAc,aAUzC,IAkIIutC,EAlIAC,EAAc,EAAQ,KAGtBoa,EADW,EAAQ,KACSA,iBAE5BC,EAAiB,EAAQ,KAAa9xB,MACtC+xB,EAAuBD,EAAeC,qBACtCE,EAA6BH,EAAeG,2BAC5C0E,EAAwB7E,EAAe6E,sBACvCC,EAAyB9E,EAAe8E,uBACxCC,EAAuB/E,EAAe+E,qBACtCC,EAAyBhF,EAAegF,uBACxCC,EAA6BjF,EAAeiF,2BAC5CC,EAAuBlF,EAAekF,qBAEtC7E,EAAiB1a,EAAY0a,eAIjC,SAASza,KAET,SAASL,EAAcrhB,EAASme,EAAQwD,GACtCzZ,EAASA,GAAU,EAAQ,KAC3BlI,EAAUA,GAAW,GAMG,kBAAb2hB,IAAwBA,EAAWxD,aAAkBjW,GAGhE/zB,KAAKytC,aAAe5hB,EAAQ4hB,WACxBD,IAAUxtC,KAAKytC,WAAaztC,KAAKytC,cAAgB5hB,EAAQ6hB,oBAI7D1tC,KAAK20B,cAAgB+yB,EAAiB1nD,KAAM6rB,EAAS,wBAAyB2hB,GAE9ExtC,KAAK+tC,aAAc,EAEnB/tC,KAAKguC,WAAY,EAEjBhuC,KAAKiuC,QAAS,EAEdjuC,KAAKw0B,OAAQ,EAEbx0B,KAAKuqC,UAAW,EAEhBvqC,KAAK60B,WAAY,EAIjB,IAAIqZ,GAAqC,IAA1BriB,EAAQsiB,cACvBnuC,KAAKmuC,eAAiBD,EAItBluC,KAAKouC,gBAAkBviB,EAAQuiB,iBAAmB,OAIlDpuC,KAAKtB,OAAS,EAEdsB,KAAKquC,SAAU,EAEfruC,KAAKsuC,OAAS,EAKdtuC,KAAKuuC,MAAO,EAIZvuC,KAAKwuC,kBAAmB,EAExBxuC,KAAKyuC,QAAU,SAAUjd,IA6R3B,SAAiBwY,EAAQxY,GACvB,IAAIZ,EAAQoZ,EAAOzV,eACfga,EAAO3d,EAAM2d,KACbxZ,EAAKnE,EAAM8d,QACf,GAAkB,mBAAP3Z,EAAmB,MAAM,IAAIy3B,EAExC,GAbF,SAA4B57B,GAC1BA,EAAMyd,SAAU,EAChBzd,EAAM8d,QAAU,KAChB9d,EAAMlyB,QAAUkyB,EAAM+d,SACtB/d,EAAM+d,SAAW,EAQjBC,CAAmBhe,GACfY,GArCN,SAAsBwY,EAAQpZ,EAAO2d,EAAM/c,EAAIuD,KAC3CnE,EAAMgc,UAEJ2B,GAGF3Y,EAAQnB,SAASM,EAAIvD,GAGrBoE,EAAQnB,SAASoa,EAAa7E,EAAQpZ,GACtCoZ,EAAOzV,eAAeua,cAAe,EACrCkZ,EAAehe,EAAQxY,KAIvBuD,EAAGvD,GACHwY,EAAOzV,eAAeua,cAAe,EACrCkZ,EAAehe,EAAQxY,GAGvBqd,EAAY7E,EAAQpZ,IAiBdme,CAAa/E,EAAQpZ,EAAO2d,EAAM/c,EAAIuD,OAAS,CAErD,IAAIwV,EAAWyE,EAAWpe,IAAUoZ,EAAOnV,UAEtC0V,GAAa3Z,EAAM0d,QAAW1d,EAAM4d,mBAAoB5d,EAAMqe,iBACjEC,EAAYlF,EAAQpZ,GAGlB2d,EACF3Y,EAAQnB,SAAS0a,EAAYnF,EAAQpZ,EAAO2Z,EAAUxV,GAEtDoa,EAAWnF,EAAQpZ,EAAO2Z,EAAUxV,IA7StC0Z,CAAQzE,EAAQxY,IAIlBxxB,KAAK0uC,QAAU,KAEf1uC,KAAK2uC,SAAW,EAChB3uC,KAAKivC,gBAAkB,KACvBjvC,KAAKovC,oBAAsB,KAG3BpvC,KAAK4sC,UAAY,EAGjB5sC,KAAKqvC,aAAc,EAEnBrvC,KAAK8uC,cAAe,EAEpB9uC,KAAK4oD,WAAkC,IAAtB/8B,EAAQ+8B,UAEzB5oD,KAAK6oD,cAAgBh9B,EAAQg9B,YAE7B7oD,KAAKsvC,qBAAuB,EAG5BtvC,KAAK6sC,mBAAqB,IAAIN,EAAcvsC,MA4C9C,SAASk0B,EAASrI,GAUhB,IAAI2hB,EAAWxtC,gBATf+zB,EAASA,GAAU,EAAQ,MAU3B,IAAKyZ,IAAaH,EAAgBpqC,KAAKixB,EAAUl0B,MAAO,OAAO,IAAIk0B,EAASrI,GAC5E7rB,KAAKu0B,eAAiB,IAAI2Y,EAAcrhB,EAAS7rB,KAAMwtC,GAEvDxtC,KAAKlC,UAAW,EAEZ+tB,IAC2B,mBAAlBA,EAAQlrB,QAAsBX,KAAKuvC,OAAS1jB,EAAQlrB,OACjC,mBAAnBkrB,EAAQ2jB,SAAuBxvC,KAAKyvC,QAAU5jB,EAAQ2jB,QAClC,mBAApB3jB,EAAQ8P,UAAwB37B,KAAK80B,SAAWjJ,EAAQ8P,SACtC,mBAAlB9P,EAAQgB,QAAsB7sB,KAAK8sB,OAASjB,EAAQgB,QAGjEkO,EAAO93B,KAAKjD,MAwJd,SAAS0vC,EAAQ1F,EAAQpZ,EAAO4e,EAAQxuC,EAAKo6B,EAAOl8B,EAAU61B,GAC5DnE,EAAM+d,SAAW3tC,EACjB4vB,EAAM8d,QAAU3Z,EAChBnE,EAAMyd,SAAU,EAChBzd,EAAM2d,MAAO,EACT3d,EAAMiE,UAAWjE,EAAM6d,QAAQ,IAAIie,EAAqB,UAAmBld,EAAQxF,EAAOyF,QAAQrU,EAAOxK,EAAM6d,SAAczE,EAAOuF,OAAOnU,EAAOl8B,EAAU0xB,EAAM6d,SACtK7d,EAAM2d,MAAO,EAwDf,SAASY,EAAWnF,EAAQpZ,EAAO2Z,EAAUxV,GACtCwV,GASP,SAAsBP,EAAQpZ,GACP,IAAjBA,EAAMlyB,QAAgBkyB,EAAMod,YAC9Bpd,EAAMod,WAAY,EAClBhE,EAAO9Z,KAAK,UAZCyf,CAAa3F,EAAQpZ,GACpCA,EAAMgc,YACN7X,IACA8Z,EAAY7E,EAAQpZ,GActB,SAASse,EAAYlF,EAAQpZ,GAC3BA,EAAM4d,kBAAmB,EACzB,IAAI/B,EAAQ7b,EAAMqe,gBAElB,GAAIjF,EAAOyF,SAAWhD,GAASA,EAAMliB,KAAM,CAEzC,IAAIld,EAAIujB,EAAM0e,qBACVrxC,EAAS,IAAIuK,MAAM6E,GACnBuiC,EAAShf,EAAMic,mBACnB+C,EAAOnD,MAAQA,EAIf,IAHA,IAAIpc,EAAQ,EACRwf,GAAa,EAEVpD,GACLxuC,EAAOoyB,GAASoc,EACXA,EAAMqD,QAAOD,GAAa,GAC/BpD,EAAQA,EAAMliB,KACd8F,GAAS,EAGXpyB,EAAO4xC,WAAaA,EACpBH,EAAQ1F,EAAQpZ,GAAO,EAAMA,EAAMlyB,OAAQT,EAAQ,GAAI2xC,EAAOlD,QAG9D9b,EAAMgc,YACNhc,EAAMwe,oBAAsB,KAExBQ,EAAOrlB,MACTqG,EAAMic,mBAAqB+C,EAAOrlB,KAClCqlB,EAAOrlB,KAAO,MAEdqG,EAAMic,mBAAqB,IAAIN,EAAc3b,GAG/CA,EAAM0e,qBAAuB,MACxB,CAEL,KAAO7C,GAAO,CACZ,IAAIrR,EAAQqR,EAAMrR,MACdl8B,EAAWutC,EAAMvtC,SACjB61B,EAAK0X,EAAMvC,SASf,GAPAwF,EAAQ1F,EAAQpZ,GAAO,EADbA,EAAM6c,WAAa,EAAIrS,EAAM18B,OACJ08B,EAAOl8B,EAAU61B,GACpD0X,EAAQA,EAAMliB,KACdqG,EAAM0e,uBAKF1e,EAAMyd,QACR,MAIU,OAAV5B,IAAgB7b,EAAMwe,oBAAsB,MAGlDxe,EAAMqe,gBAAkBxC,EACxB7b,EAAM4d,kBAAmB,EA2C3B,SAASQ,EAAWpe,GAClB,OAAOA,EAAMqd,QAA2B,IAAjBrd,EAAMlyB,QAA0C,OAA1BkyB,EAAMqe,kBAA6Bre,EAAM2Z,WAAa3Z,EAAMyd,QAG3G,SAAS0B,EAAU/F,EAAQpZ,GACzBoZ,EAAOld,QAAO,SAAU/a,GACtB6e,EAAMgc,YAEF76B,GACFi2C,EAAehe,EAAQj4B,GAGzB6e,EAAMye,aAAc,EACpBrF,EAAO9Z,KAAK,aACZ2e,EAAY7E,EAAQpZ,MAiBxB,SAASie,EAAY7E,EAAQpZ,GAC3B,IAAIof,EAAOhB,EAAWpe,GAEtB,GAAIof,IAhBN,SAAmBhG,EAAQpZ,GACpBA,EAAMye,aAAgBze,EAAMmd,cACF,mBAAlB/D,EAAOld,QAA0B8D,EAAMiE,WAKhDjE,EAAMye,aAAc,EACpBrF,EAAO9Z,KAAK,eALZU,EAAMgc,YACNhc,EAAMmd,aAAc,EACpBnY,EAAQnB,SAASsb,EAAW/F,EAAQpZ,KAYtCqf,CAAUjG,EAAQpZ,GAEM,IAApBA,EAAMgc,YACRhc,EAAM2Z,UAAW,EACjBP,EAAO9Z,KAAK,UAERU,EAAMi4B,cAAa,CAGrB,IAAIuD,EAASpiB,EAAOpV,iBAEfw3B,GAAUA,EAAOvD,aAAeuD,EAAO3hB,aAC1CT,EAAOrO,UAMf,OAAOqU,EA3hBT,EAAQ,IAAR,CAAoB9b,EAAU6G,GAyF9BmS,EAAcxvC,UAAUu5B,UAAY,WAIlC,IAHA,IAAInM,EAAU9qB,KAAKivC,gBACftmC,EAAM,GAEHmiB,GACLniB,EAAIjE,KAAKomB,GACTA,EAAUA,EAAQP,KAGpB,OAAO5hB,GAGT,WACE,IACExL,OAAO2J,eAAeomC,EAAcxvC,UAAW,SAAU,CACvDsV,IAAKm6B,EAAat6B,WAAU,WAC1B,OAAO7S,KAAKi3B,cACX,6EAAmF,aAExF,MAAO3U,KAPX,GAcsB,mBAAX1b,QAAyBA,OAAOspC,aAAiE,mBAA3C5hB,SAAS5wB,UAAUkJ,OAAOspC,cACzF7C,EAAkB/e,SAAS5wB,UAAUkJ,OAAOspC,aAC5C/yC,OAAO2J,eAAeotB,EAAUttB,OAAOspC,YAAa,CAClDtyC,MAAO,SAAeuyC,GACpB,QAAI9C,EAAgBpqC,KAAKjD,KAAMmwC,IAC3BnwC,OAASk0B,IACNic,GAAUA,EAAO5b,0BAA0B2Y,OAItDG,EAAkB,SAAyB8C,GACzC,OAAOA,aAAkBnwC,MA+B7Bk0B,EAASx2B,UAAUuQ,KAAO,WACxB+5C,EAAehoD,KAAM,IAAIysD,IA+B3Bv4B,EAASx2B,UAAUiD,MAAQ,SAAUy6B,EAAOl8B,EAAU61B,GACpD,IAnNqBj0B,EAmNjB8vB,EAAQ5wB,KAAKu0B,eACb7rB,GAAM,EAENonC,GAASlf,EAAM6c,aAtNE3sC,EAsN0Bs6B,EArNxCl9B,EAAO6C,SAASD,IAAQA,aAAessC,GAsO9C,OAfI0C,IAAU5xC,EAAO6C,SAASq6B,KAC5BA,EA7NJ,SAA6BA,GAC3B,OAAOl9B,EAAOS,KAAKy8B,GA4NTgV,CAAoBhV,IAGN,mBAAbl8B,IACT61B,EAAK71B,EACLA,EAAW,MAGT4wC,EAAO5wC,EAAW,SAAmBA,IAAUA,EAAW0xB,EAAMwd,iBAClD,mBAAPrZ,IAAmBA,EAAKwY,GAC/B3c,EAAMqd,OA7CZ,SAAuBjE,EAAQjV,GAC7B,IAAIvD,EAAK,IAAIo7B,EAEb5E,EAAehe,EAAQxY,GACvBoE,EAAQnB,SAASM,EAAIvD,GAyCH6e,CAAcrwC,KAAM+0B,IAAa+a,GAnCrD,SAAoB9F,EAAQpZ,EAAOwK,EAAOrG,GACxC,IAAIvD,EAQJ,OANc,OAAV4J,EACF5J,EAAK,IAAIm7B,EACiB,iBAAVvxB,GAAuBxK,EAAM6c,aAC7Cjc,EAAK,IAAIo2B,EAAqB,QAAS,CAAC,SAAU,UAAWxsB,KAG3D5J,IACFw2B,EAAehe,EAAQxY,GACvBoE,EAAQnB,SAASM,EAAIvD,IACd,GAuBmD+e,CAAWvwC,KAAM4wB,EAAOwK,EAAOrG,MACzFnE,EAAMgc,YACNlkC,EAwDJ,SAAuBshC,EAAQpZ,EAAOkf,EAAO1U,EAAOl8B,EAAU61B,GAC5D,IAAK+a,EAAO,CACV,IAAIU,EAtBR,SAAqB5f,EAAOwK,EAAOl8B,GAC5B0xB,EAAM6c,aAAsC,IAAxB7c,EAAMud,eAA4C,iBAAV/S,IAC/DA,EAAQl9B,EAAOS,KAAKy8B,EAAOl8B,IAG7B,OAAOk8B,EAiBUqV,CAAY7f,EAAOwK,EAAOl8B,GAErCk8B,IAAUoV,IACZV,GAAQ,EACR5wC,EAAW,SACXk8B,EAAQoV,GAIZ,IAAIxvC,EAAM4vB,EAAM6c,WAAa,EAAIrS,EAAM18B,OACvCkyB,EAAMlyB,QAAUsC,EAChB,IAAI0H,EAAMkoB,EAAMlyB,OAASkyB,EAAM+D,cAE1BjsB,IAAKkoB,EAAMod,WAAY,GAE5B,GAAIpd,EAAMyd,SAAWzd,EAAM0d,OAAQ,CACjC,IAAIoC,EAAO9f,EAAMwe,oBACjBxe,EAAMwe,oBAAsB,CAC1BhU,MAAOA,EACPl8B,SAAUA,EACV4wC,MAAOA,EACP5F,SAAUnV,EACVxK,KAAM,MAGJmmB,EACFA,EAAKnmB,KAAOqG,EAAMwe,oBAElBxe,EAAMqe,gBAAkBre,EAAMwe,oBAGhCxe,EAAM0e,sBAAwB,OAE9BI,EAAQ1F,EAAQpZ,GAAO,EAAO5vB,EAAKo6B,EAAOl8B,EAAU61B,GAGtD,OAAOrsB,EA9FCioC,CAAc3wC,KAAM4wB,EAAOkf,EAAO1U,EAAOl8B,EAAU61B,IAEpDrsB,GAGTwrB,EAASx2B,UAAUkzC,KAAO,WACxB5wC,KAAKu0B,eAAe+Z,UAGtBpa,EAASx2B,UAAUmzC,OAAS,WAC1B,IAAIjgB,EAAQ5wB,KAAKu0B,eAEb3D,EAAM0d,SACR1d,EAAM0d,SACD1d,EAAMyd,SAAYzd,EAAM0d,QAAW1d,EAAM4d,mBAAoB5d,EAAMqe,iBAAiBC,EAAYlvC,KAAM4wB,KAI/GsD,EAASx2B,UAAUozC,mBAAqB,SAA4B5xC,GAGlE,GADwB,iBAAbA,IAAuBA,EAAWA,EAAS4C,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAOkB,SAAS9D,EAAW,IAAI4C,gBAAkB,GAAI,MAAM,IAAI+qD,EAAqB3tD,GAExL,OADAc,KAAKu0B,eAAe6Z,gBAAkBlvC,EAC/Bc,MAGT7C,OAAO2J,eAAeotB,EAASx2B,UAAW,iBAAkB,CAI1DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,gBAAkBv0B,KAAKu0B,eAAe0C,eAYtD95B,OAAO2J,eAAeotB,EAASx2B,UAAW,wBAAyB,CAIjEG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,eAAeI,iBA4L/BT,EAASx2B,UAAU6xC,OAAS,SAAUnU,EAAOl8B,EAAU61B,GACrDA,EAAG,IAAI+yB,EAA2B,cAGpC5zB,EAASx2B,UAAU+xC,QAAU,KAE7Bvb,EAASx2B,UAAUuE,IAAM,SAAUm5B,EAAOl8B,EAAU61B,GAClD,IAAInE,EAAQ5wB,KAAKu0B,eAoBjB,MAlBqB,mBAAV6G,GACTrG,EAAKqG,EACLA,EAAQ,KACRl8B,EAAW,MACkB,mBAAbA,IAChB61B,EAAK71B,EACLA,EAAW,MAGTk8B,SAAuCp7B,KAAKW,MAAMy6B,EAAOl8B,GAEzD0xB,EAAM0d,SACR1d,EAAM0d,OAAS,EACftuC,KAAK6wC,UAIFjgB,EAAMqd,QAsEb,SAAqBjE,EAAQpZ,EAAOmE,GAClCnE,EAAMqd,QAAS,EACfY,EAAY7E,EAAQpZ,GAEhBmE,IACEnE,EAAM2Z,SAAU3U,EAAQnB,SAASM,GAASiV,EAAOnb,KAAK,SAAUkG,IAGtEnE,EAAM4D,OAAQ,EACdwV,EAAOlsC,UAAW,EA/ECizC,CAAY/wC,KAAM4wB,EAAOmE,GACrC/0B,MAGT7C,OAAO2J,eAAeotB,EAASx2B,UAAW,iBAAkB,CAI1DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,eAAe71B,UAuF/BvB,OAAO2J,eAAeotB,EAASx2B,UAAW,YAAa,CAIrDG,YAAY,EACZmV,IAAK,WACH,YAA4B5T,IAAxBY,KAAKu0B,gBAIFv0B,KAAKu0B,eAAeM,WAE7B1oB,IAAK,SAAavO,GAGXoC,KAAKu0B,iBAMVv0B,KAAKu0B,eAAeM,UAAYj3B,MAGpCs2B,EAASx2B,UAAUi+B,QAAU2R,EAAY3R,QACzCzH,EAASx2B,UAAUszC,WAAa1D,EAAY2D,UAE5C/c,EAASx2B,UAAUo3B,SAAW,SAAU/iB,EAAKgjB,GAC3CA,EAAGhjB,M,qDCxnBL1U,EAAOC,QAAUkvB,EAEjB,IAAIm7B,EAAiB,EAAQ,KAAa9xB,MACtCiyB,EAA6BH,EAAeG,2BAC5C0E,EAAwB7E,EAAe6E,sBACvCM,EAAqCnF,EAAemF,mCACpDC,EAA8BpF,EAAeoF,4BAE7Ch5B,EAAS,EAAQ,KAIrB,SAASi5B,EAAex7B,EAAInwB,GAC1B,IAAI4rD,EAAKjtD,KAAKktD,gBACdD,EAAGE,cAAe,EAClB,IAAIp4B,EAAKk4B,EAAGve,QAEZ,GAAW,OAAP3Z,EACF,OAAO/0B,KAAKkwB,KAAK,QAAS,IAAIs8B,GAGhCS,EAAGG,WAAa,KAChBH,EAAGve,QAAU,KACD,MAARrtC,GACFrB,KAAK0E,KAAKrD,GACZ0zB,EAAGvD,GACH,IAAI67B,EAAKrtD,KAAK40B,eACdy4B,EAAG/E,SAAU,GAET+E,EAAG9E,cAAgB8E,EAAG3uD,OAAS2uD,EAAG14B,gBACpC30B,KAAKipD,MAAMoE,EAAG14B,eAIlB,SAASnI,EAAUX,GACjB,KAAM7rB,gBAAgBwsB,GAAY,OAAO,IAAIA,EAAUX,GACvDkI,EAAO9wB,KAAKjD,KAAM6rB,GAClB7rB,KAAKktD,gBAAkB,CACrBF,eAAgBA,EAAengD,KAAK7M,MACpCstD,eAAe,EACfH,cAAc,EACdze,QAAS,KACT0e,WAAY,KACZG,cAAe,MAGjBvtD,KAAK40B,eAAe2zB,cAAe,EAInCvoD,KAAK40B,eAAe2Z,MAAO,EAEvB1iB,IAC+B,mBAAtBA,EAAQ7K,YAA0BhhB,KAAK4tB,WAAa/B,EAAQ7K,WAC1C,mBAAlB6K,EAAQ2hC,QAAsBxtD,KAAK6tB,OAAShC,EAAQ2hC,QAIjExtD,KAAK8xB,GAAG,YAAame,GAGvB,SAASA,IACP,IAAIzD,EAAQxsC,KAEe,mBAAhBA,KAAK6tB,QAA0B7tB,KAAK40B,eAAeC,UAK5D/G,EAAK9tB,KAAM,KAAM,MAJjBA,KAAK6tB,QAAO,SAAU2D,EAAInwB,GACxBysB,EAAK0e,EAAOhb,EAAInwB,MA6DtB,SAASysB,EAAKkc,EAAQxY,EAAInwB,GACxB,GAAImwB,EAAI,OAAOwY,EAAO9Z,KAAK,QAASsB,GAMpC,GALY,MAARnwB,GACF2oC,EAAOtlC,KAAKrD,GAIV2oC,EAAOzV,eAAe71B,OAAQ,MAAM,IAAIquD,EAC5C,GAAI/iB,EAAOkjB,gBAAgBC,aAAc,MAAM,IAAIL,EACnD,OAAO9iB,EAAOtlC,KAAK,MA9HrB,EAAQ,IAAR,CAAoB8nB,EAAWuH,GA+D/BvH,EAAU9uB,UAAUgH,KAAO,SAAU02B,EAAOl8B,GAE1C,OADAc,KAAKktD,gBAAgBI,eAAgB,EAC9Bv5B,EAAOr2B,UAAUgH,KAAKzB,KAAKjD,KAAMo7B,EAAOl8B,IAajDstB,EAAU9uB,UAAUkwB,WAAa,SAAUwN,EAAOl8B,EAAU61B,GAC1DA,EAAG,IAAI+yB,EAA2B,kBAGpCt7B,EAAU9uB,UAAU6xC,OAAS,SAAUnU,EAAOl8B,EAAU61B,GACtD,IAAIk4B,EAAKjtD,KAAKktD,gBAKd,GAJAD,EAAGve,QAAU3Z,EACbk4B,EAAGG,WAAahyB,EAChB6xB,EAAGM,cAAgBruD,GAEd+tD,EAAGE,aAAc,CACpB,IAAIE,EAAKrtD,KAAK40B,gBACVq4B,EAAGK,eAAiBD,EAAG9E,cAAgB8E,EAAG3uD,OAAS2uD,EAAG14B,gBAAe30B,KAAKipD,MAAMoE,EAAG14B,iBAO3FnI,EAAU9uB,UAAUurD,MAAQ,SAAUvmD,GACpC,IAAIuqD,EAAKjtD,KAAKktD,gBAEQ,OAAlBD,EAAGG,YAAwBH,EAAGE,aAOhCF,EAAGK,eAAgB,GANnBL,EAAGE,cAAe,EAElBntD,KAAK4tB,WAAWq/B,EAAGG,WAAYH,EAAGM,cAAeN,EAAGD,kBAQxDxgC,EAAU9uB,UAAUo3B,SAAW,SAAU/iB,EAAKgjB,GAC5ChB,EAAOr2B,UAAUo3B,SAAS7xB,KAAKjD,KAAM+R,GAAK,SAAU07C,GAClD14B,EAAG04B,Q,gBClLP,IAAIx6C,EAAW,EAAQ,KACnBikB,EAAO,EAAQ,KACfh5B,EAAS,EAAQ,KAAeA,OAEhCwvD,EAAI,CACN,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,UAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,YAGlCC,EAAI,IAAInlD,MAAM,IAElB,SAASolD,IACP5tD,KAAK4uB,OAEL5uB,KAAK6tD,GAAKF,EAEVz2B,EAAKj0B,KAAKjD,KAAM,GAAI,IAkBtB,SAAS2U,EAAIzN,EAAGC,EAAGiJ,GACjB,OAAOA,EAAKlJ,GAAKC,EAAIiJ,GAGvB,SAAS09C,EAAK5mD,EAAGC,EAAGiJ,GAClB,OAAQlJ,EAAIC,EAAMiJ,GAAKlJ,EAAIC,GAG7B,SAAS4mD,EAAQ7mD,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAGvE,SAAS8mD,EAAQ9mD,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,KAAOA,IAAM,GAAKA,GAAK,GAGvE,SAAS+mD,EAAQ/mD,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAAOA,IAAM,EAhC7D+L,EAAS26C,EAAQ12B,GAEjB02B,EAAOlwD,UAAUkxB,KAAO,WAUtB,OATA5uB,KAAK+oC,GAAK,WACV/oC,KAAKgpC,GAAK,WACVhpC,KAAKipC,GAAK,WACVjpC,KAAKkpC,GAAK,WACVlpC,KAAKqrC,GAAK,WACVrrC,KAAKkuD,GAAK,WACVluD,KAAKmuD,GAAK,UACVnuD,KAAKouD,GAAK,WAEHpuD,MA2BT4tD,EAAOlwD,UAAU4vB,QAAU,SAAU4O,GAYnC,IAXA,IALeh1B,EAKXymD,EAAI3tD,KAAK6tD,GAET5mD,EAAc,EAAVjH,KAAK+oC,GACTtmC,EAAc,EAAVzC,KAAKgpC,GACT/jC,EAAc,EAAVjF,KAAKipC,GACTh1B,EAAc,EAAVjU,KAAKkpC,GACT1iC,EAAc,EAAVxG,KAAKqrC,GACTgjB,EAAc,EAAVruD,KAAKkuD,GACTvoC,EAAc,EAAV3lB,KAAKmuD,GACT3qC,EAAc,EAAVxjB,KAAKouD,GAEJ5sD,EAAI,EAAGA,EAAI,KAAMA,EAAGmsD,EAAEnsD,GAAK06B,EAAE1xB,YAAgB,EAAJhJ,GAClD,KAAOA,EAAI,KAAMA,EAAGmsD,EAAEnsD,GAAqE,KAjB5E0F,EAiBoBymD,EAAEnsD,EAAI,MAhB3B,GAAK0F,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAAOA,IAAM,IAgBbymD,EAAEnsD,EAAI,GAAKysD,EAAON,EAAEnsD,EAAI,KAAOmsD,EAAEnsD,EAAI,IAEpF,IAAK,IAAIoC,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAI0qD,EAAM9qC,EAAIwqC,EAAOxnD,GAAKmO,EAAGnO,EAAG6nD,EAAG1oC,GAAK+nC,EAAE9pD,GAAK+pD,EAAE/pD,GAAM,EACnD2qD,EAAMR,EAAO9mD,GAAK6mD,EAAI7mD,EAAGxE,EAAGwC,GAAM,EAEtCue,EAAImC,EACJA,EAAI0oC,EACJA,EAAI7nD,EACJA,EAAKyN,EAAIq6C,EAAM,EACfr6C,EAAIhP,EACJA,EAAIxC,EACJA,EAAIwE,EACJA,EAAKqnD,EAAKC,EAAM,EAGlBvuD,KAAK+oC,GAAM9hC,EAAIjH,KAAK+oC,GAAM,EAC1B/oC,KAAKgpC,GAAMvmC,EAAIzC,KAAKgpC,GAAM,EAC1BhpC,KAAKipC,GAAMhkC,EAAIjF,KAAKipC,GAAM,EAC1BjpC,KAAKkpC,GAAMj1B,EAAIjU,KAAKkpC,GAAM,EAC1BlpC,KAAKqrC,GAAM7kC,EAAIxG,KAAKqrC,GAAM,EAC1BrrC,KAAKkuD,GAAMG,EAAIruD,KAAKkuD,GAAM,EAC1BluD,KAAKmuD,GAAMxoC,EAAI3lB,KAAKmuD,GAAM,EAC1BnuD,KAAKouD,GAAM5qC,EAAIxjB,KAAKouD,GAAM,GAG5BR,EAAOlwD,UAAUw6B,MAAQ,WACvB,IAAIs2B,EAAItwD,EAAOW,YAAY,IAW3B,OATA2vD,EAAE3iD,aAAa7L,KAAK+oC,GAAI,GACxBylB,EAAE3iD,aAAa7L,KAAKgpC,GAAI,GACxBwlB,EAAE3iD,aAAa7L,KAAKipC,GAAI,GACxBulB,EAAE3iD,aAAa7L,KAAKkpC,GAAI,IACxBslB,EAAE3iD,aAAa7L,KAAKqrC,GAAI,IACxBmjB,EAAE3iD,aAAa7L,KAAKkuD,GAAI,IACxBM,EAAE3iD,aAAa7L,KAAKmuD,GAAI,IACxBK,EAAE3iD,aAAa7L,KAAKouD,GAAI,IAEjBI,GAGTnxD,EAAOC,QAAUswD,G,gBCtIjB,IAAI36C,EAAW,EAAQ,KACnBikB,EAAO,EAAQ,KACfh5B,EAAS,EAAQ,KAAeA,OAEhCwvD,EAAI,CACN,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,UAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,YAGlCC,EAAI,IAAInlD,MAAM,KAElB,SAASimD,IACPzuD,KAAK4uB,OACL5uB,KAAK6tD,GAAKF,EAEVz2B,EAAKj0B,KAAKjD,KAAM,IAAK,KA2BvB,SAAS0uD,EAAIxnD,EAAGC,EAAGiJ,GACjB,OAAOA,EAAKlJ,GAAKC,EAAIiJ,GAGvB,SAAS09C,EAAK5mD,EAAGC,EAAGiJ,GAClB,OAAQlJ,EAAIC,EAAMiJ,GAAKlJ,EAAIC,GAG7B,SAAS4mD,EAAQ7mD,EAAGynD,GAClB,OAAQznD,IAAM,GAAKynD,GAAM,IAAMA,IAAO,EAAIznD,GAAK,KAAOynD,IAAO,EAAIznD,GAAK,IAGxE,SAAS8mD,EAAQ9mD,EAAGynD,GAClB,OAAQznD,IAAM,GAAKynD,GAAM,KAAOznD,IAAM,GAAKynD,GAAM,KAAOA,IAAO,EAAIznD,GAAK,IAG1E,SAAS0nD,EAAQ1nD,EAAGynD,GAClB,OAAQznD,IAAM,EAAIynD,GAAM,KAAOznD,IAAM,EAAIynD,GAAM,IAAOznD,IAAM,EAG9D,SAAS2nD,EAAS3nD,EAAGynD,GACnB,OAAQznD,IAAM,EAAIynD,GAAM,KAAOznD,IAAM,EAAIynD,GAAM,KAAOznD,IAAM,EAAIynD,GAAM,IAGxE,SAASG,EAAQ5nD,EAAGynD,GAClB,OAAQznD,IAAM,GAAKynD,GAAM,KAAOA,IAAO,GAAKznD,GAAK,GAAMA,IAAM,EAG/D,SAAS6nD,EAAS7nD,EAAGynD,GACnB,OAAQznD,IAAM,GAAKynD,GAAM,KAAOA,IAAO,GAAKznD,GAAK,IAAMA,IAAM,EAAIynD,GAAM,IAGzE,SAASK,EAAU/nD,EAAGxE,GACpB,OAAQwE,IAAM,EAAMxE,IAAM,EAAK,EAAI,EAzDrCwQ,EAASw7C,EAAQv3B,GAEjBu3B,EAAO/wD,UAAUkxB,KAAO,WAmBtB,OAlBA5uB,KAAKivD,IAAM,WACXjvD,KAAKkvD,IAAM,WACXlvD,KAAKmvD,IAAM,WACXnvD,KAAKovD,IAAM,WACXpvD,KAAKqvD,IAAM,WACXrvD,KAAKsvD,IAAM,WACXtvD,KAAKuvD,IAAM,UACXvvD,KAAKwvD,IAAM,WAEXxvD,KAAKyvD,IAAM,WACXzvD,KAAK0vD,IAAM,WACX1vD,KAAK2vD,IAAM,WACX3vD,KAAK4vD,IAAM,WACX5vD,KAAK6vD,IAAM,WACX7vD,KAAK8vD,IAAM,UACX9vD,KAAK+vD,IAAM,WACX/vD,KAAKgwD,IAAM,UAEJhwD,MAuCTyuD,EAAO/wD,UAAU4vB,QAAU,SAAU4O,GAqBnC,IApBA,IAAIyxB,EAAI3tD,KAAK6tD,GAETz5C,EAAgB,EAAXpU,KAAKivD,IACV36C,EAAgB,EAAXtU,KAAKkvD,IACVv6C,EAAgB,EAAX3U,KAAKmvD,IACVt6C,EAAgB,EAAX7U,KAAKovD,IACVl6C,EAAgB,EAAXlV,KAAKqvD,IACVY,EAAgB,EAAXjwD,KAAKsvD,IACVY,EAAgB,EAAXlwD,KAAKuvD,IACVY,EAAgB,EAAXnwD,KAAKwvD,IAEVn7C,EAAgB,EAAXrU,KAAKyvD,IACVj7C,EAAgB,EAAXxU,KAAK0vD,IACV96C,EAAgB,EAAX5U,KAAK2vD,IACV76C,EAAgB,EAAX9U,KAAK4vD,IACVz6C,EAAgB,EAAXnV,KAAK6vD,IACVO,EAAgB,EAAXpwD,KAAK8vD,IACVO,EAAgB,EAAXrwD,KAAK+vD,IACV5kB,EAAgB,EAAXnrC,KAAKgwD,IAELxuD,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAC3BmsD,EAAEnsD,GAAK06B,EAAE1xB,YAAgB,EAAJhJ,GACrBmsD,EAAEnsD,EAAI,GAAK06B,EAAE1xB,YAAgB,EAAJhJ,EAAQ,GAEnC,KAAOA,EAAI,IAAKA,GAAK,EAAG,CACtB,IAAI8uD,EAAK3C,EAAEnsD,EAAI,IACXmtD,EAAKhB,EAAEnsD,EAAI,GAAS,GACpBysD,EAASW,EAAO0B,EAAI3B,GACpB4B,EAAU1B,EAAQF,EAAI2B,GAItBE,EAAS1B,EAFbwB,EAAK3C,EAAEnsD,EAAI,GACXmtD,EAAKhB,EAAEnsD,EAAI,EAAQ,IAEfivD,EAAU1B,EAAQJ,EAAI2B,GAGtBI,EAAO/C,EAAEnsD,EAAI,IACbmvD,EAAOhD,EAAEnsD,EAAI,GAAQ,GAErBovD,EAAQjD,EAAEnsD,EAAI,IACdqvD,EAAQlD,EAAEnsD,EAAI,GAAS,GAEvBsvD,EAAOP,EAAUI,EAAQ,EACzBI,EAAO9C,EAASyC,EAAO1B,EAAS8B,EAAKP,GAAY,EAIrDQ,GAFAA,EAAOA,EAAMP,EAASxB,EADtB8B,EAAOA,EAAML,EAAW,EACYA,GAAY,GAEnCG,EAAQ5B,EADrB8B,EAAOA,EAAMD,EAAS,EACaA,GAAU,EAE7ClD,EAAEnsD,GAAKuvD,EACPpD,EAAEnsD,EAAI,GAAKsvD,EAGb,IAAK,IAAIltD,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAAG,CAC/BmtD,EAAMpD,EAAE/pD,GACRktD,EAAMnD,EAAE/pD,EAAI,GAEZ,IAAIotD,EAAOlD,EAAI15C,EAAIE,EAAIK,GACnBs8C,EAAOnD,EAAIz5C,EAAIG,EAAII,GAEnBs8C,EAAUnD,EAAO35C,EAAIC,GACrB88C,EAAUpD,EAAO15C,EAAID,GACrBg9C,EAAUpD,EAAO94C,EAAIC,GACrBk8C,EAAUrD,EAAO74C,EAAID,GAGrBo8C,EAAM5D,EAAE9pD,GACR2tD,EAAM7D,EAAE9pD,EAAI,GAEZ4tD,EAAM9C,EAAGx5C,EAAI+6C,EAAIC,GACjBuB,EAAM/C,EAAGv5C,EAAIi7C,EAAIC,GAEjBqB,EAAOvmB,EAAKkmB,EAAW,EACvBM,EAAOxB,EAAKiB,EAAUpC,EAAS0C,EAAKvmB,GAAO,EAM/CwmB,GAFAA,GAFAA,EAAOA,EAAMH,EAAMxC,EADnB0C,EAAOA,EAAMD,EAAO,EACaA,GAAQ,GAE5BH,EAAMtC,EADnB0C,EAAOA,EAAMH,EAAO,EACaA,GAAQ,GAE5BR,EAAM/B,EADnB0C,EAAOA,EAAMZ,EAAO,EACaA,GAAQ,EAGzC,IAAIc,GAAOT,EAAUF,EAAQ,EACzBY,GAAOX,EAAUF,EAAOhC,EAAS4C,GAAKT,GAAY,EAEtDhB,EAAKD,EACL/kB,EAAKklB,EACLH,EAAKD,EACLI,EAAKD,EACLH,EAAK/6C,EACLk7C,EAAKj7C,EAELD,EAAML,EAAK88C,EAAM3C,EADjB75C,EAAML,EAAK48C,EAAO,EACY58C,GAAO,EACrCD,EAAKF,EACLG,EAAKF,EACLD,EAAKL,EACLM,EAAKJ,EACLF,EAAKF,EACLI,EAAKH,EAELD,EAAMu9C,EAAME,GAAM7C,EADlB36C,EAAMq9C,EAAME,GAAO,EACYF,GAAQ,EAGzC1xD,KAAKyvD,IAAOzvD,KAAKyvD,IAAMp7C,EAAM,EAC7BrU,KAAK0vD,IAAO1vD,KAAK0vD,IAAMl7C,EAAM,EAC7BxU,KAAK2vD,IAAO3vD,KAAK2vD,IAAM/6C,EAAM,EAC7B5U,KAAK4vD,IAAO5vD,KAAK4vD,IAAM96C,EAAM,EAC7B9U,KAAK6vD,IAAO7vD,KAAK6vD,IAAM16C,EAAM,EAC7BnV,KAAK8vD,IAAO9vD,KAAK8vD,IAAMM,EAAM,EAC7BpwD,KAAK+vD,IAAO/vD,KAAK+vD,IAAMM,EAAM,EAC7BrwD,KAAKgwD,IAAOhwD,KAAKgwD,IAAM7kB,EAAM,EAE7BnrC,KAAKivD,IAAOjvD,KAAKivD,IAAM76C,EAAK46C,EAAShvD,KAAKyvD,IAAKp7C,GAAO,EACtDrU,KAAKkvD,IAAOlvD,KAAKkvD,IAAM56C,EAAK06C,EAAShvD,KAAK0vD,IAAKl7C,GAAO,EACtDxU,KAAKmvD,IAAOnvD,KAAKmvD,IAAMx6C,EAAKq6C,EAAShvD,KAAK2vD,IAAK/6C,GAAO,EACtD5U,KAAKovD,IAAOpvD,KAAKovD,IAAMv6C,EAAKm6C,EAAShvD,KAAK4vD,IAAK96C,GAAO,EACtD9U,KAAKqvD,IAAOrvD,KAAKqvD,IAAMn6C,EAAK85C,EAAShvD,KAAK6vD,IAAK16C,GAAO,EACtDnV,KAAKsvD,IAAOtvD,KAAKsvD,IAAMW,EAAKjB,EAAShvD,KAAK8vD,IAAKM,GAAO,EACtDpwD,KAAKuvD,IAAOvvD,KAAKuvD,IAAMW,EAAKlB,EAAShvD,KAAK+vD,IAAKM,GAAO,EACtDrwD,KAAKwvD,IAAOxvD,KAAKwvD,IAAMW,EAAKnB,EAAShvD,KAAKgwD,IAAK7kB,GAAO,GAGxDsjB,EAAO/wD,UAAUw6B,MAAQ,WACvB,IAAIs2B,EAAItwD,EAAOW,YAAY,IAE3B,SAASizD,EAActuC,EAAGnW,EAAGvJ,GAC3B0qD,EAAE3iD,aAAa2X,EAAG1f,GAClB0qD,EAAE3iD,aAAawB,EAAGvJ,EAAS,GAY7B,OATAguD,EAAa9xD,KAAKivD,IAAKjvD,KAAKyvD,IAAK,GACjCqC,EAAa9xD,KAAKkvD,IAAKlvD,KAAK0vD,IAAK,GACjCoC,EAAa9xD,KAAKmvD,IAAKnvD,KAAK2vD,IAAK,IACjCmC,EAAa9xD,KAAKovD,IAAKpvD,KAAK4vD,IAAK,IACjCkC,EAAa9xD,KAAKqvD,IAAKrvD,KAAK6vD,IAAK,IACjCiC,EAAa9xD,KAAKsvD,IAAKtvD,KAAK8vD,IAAK,IACjCgC,EAAa9xD,KAAKuvD,IAAKvvD,KAAK+vD,IAAK,IACjC+B,EAAa9xD,KAAKwvD,IAAKxvD,KAAKgwD,IAAK,IAE1BxB,GAGTnxD,EAAOC,QAAUmxD,G,8BCnQjB,cAyBA,IAAI56B,EAAM,EAAQ,KAGlBx2B,EAAOC,QAAU22B,EAGjB,IAIIF,EAJAv0B,EAAU,EAAQ,KAOtBy0B,EAASkzB,cAAgBA,EAGhB,EAAQ,KAAUx4B,aAA3B,IAEIy4B,EAAkB,SAAUt4B,EAAS1tB,GACvC,OAAO0tB,EAAQ8C,UAAUxwB,GAAM1C,QAK7Bq8B,EAAS,EAAQ,KAKjB78B,EAAS,EAAQ,KAAeA,OAChCkvC,EAAgB/mC,EAAOvG,YAAc,aAWzC,IAAIk0B,EAAO,EAAQ,KACnBA,EAAK/gB,SAAW,EAAQ,KAIxB,IAAIq0C,EAAY,EAAQ,KACpBD,OAAQ,EAEVA,EADEC,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,aAIV,IAEI96B,EAFAg7B,EAAa,EAAQ,KACrBna,EAAc,EAAQ,KAG1BtZ,EAAK/gB,SAASghB,EAAU8G,GAExB,IAAIktB,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAc1D,SAASd,EAAct7B,EAASme,GAG9Bne,EAAUA,GAAW,GAOrB,IAAI2hB,EAAWxD,aATfjW,EAASA,GAAU,EAAQ,MAa3B/zB,KAAKytC,aAAe5hB,EAAQ4hB,WAExBD,IAAUxtC,KAAKytC,WAAaztC,KAAKytC,cAAgB5hB,EAAQq8B,oBAI7D,IAAIva,EAAM9hB,EAAQ8I,cACdo9B,EAAclmC,EAAQmmC,sBACtBlkB,EAAa9tC,KAAKytC,WAAa,GAAK,MAElBztC,KAAK20B,cAAvBgZ,GAAe,IAARA,EAAgCA,EAAaH,IAAaukB,GAA+B,IAAhBA,GAAyCA,EAAsCjkB,EAGnK9tC,KAAK20B,cAAgBrvB,KAAK0F,MAAMhL,KAAK20B,eAKrC30B,KAAK/B,OAAS,IAAIwpD,EAClBznD,KAAKtB,OAAS,EACdsB,KAAKmoD,MAAQ,KACbnoD,KAAKooD,WAAa,EAClBpoD,KAAKqoD,QAAU,KACfroD,KAAKw0B,OAAQ,EACbx0B,KAAKyqC,YAAa,EAClBzqC,KAAKsoD,SAAU,EAMftoD,KAAKuuC,MAAO,EAIZvuC,KAAKuoD,cAAe,EACpBvoD,KAAKwoD,iBAAkB,EACvBxoD,KAAKyoD,mBAAoB,EACzBzoD,KAAK0oD,iBAAkB,EAGvB1oD,KAAK60B,WAAY,EAKjB70B,KAAKouC,gBAAkBviB,EAAQuiB,iBAAmB,OAGlDpuC,KAAK8oD,WAAa,EAGlB9oD,KAAK+oD,aAAc,EAEnB/oD,KAAKgpD,QAAU,KACfhpD,KAAKd,SAAW,KACZ2sB,EAAQ3sB,WACLutB,IAAeA,EAAgB,EAAQ,KAAmBA,eAC/DzsB,KAAKgpD,QAAU,IAAIv8B,EAAcZ,EAAQ3sB,UACzCc,KAAKd,SAAW2sB,EAAQ3sB,UAI5B,SAAS+0B,EAASpI,GAGhB,GAFAkI,EAASA,GAAU,EAAQ,OAErB/zB,gBAAgBi0B,GAAW,OAAO,IAAIA,EAASpI,GAErD7rB,KAAK40B,eAAiB,IAAIuyB,EAAct7B,EAAS7rB,MAGjDA,KAAKo0B,UAAW,EAEZvI,IAC0B,mBAAjBA,EAAQroB,OAAqBxD,KAAKipD,MAAQp9B,EAAQroB,MAE9B,mBAApBqoB,EAAQ8P,UAAwB37B,KAAK80B,SAAWjJ,EAAQ8P,UAGrEZ,EAAO93B,KAAKjD,MA2Dd,SAASkpD,EAAiBlf,EAAQ5O,EAAOl8B,EAAUiqD,EAAYC,GAC7D,IAKM53B,EALFZ,EAAQoZ,EAAOpV,eACL,OAAVwG,GACFxK,EAAM03B,SAAU,EA0NpB,SAAoBte,EAAQpZ,GAC1B,GAAIA,EAAM4D,MAAO,OACjB,GAAI5D,EAAMo4B,QAAS,CACjB,IAAI5tB,EAAQxK,EAAMo4B,QAAQ/mD,MACtBm5B,GAASA,EAAM18B,SACjBkyB,EAAM3yB,OAAOyG,KAAK02B,GAClBxK,EAAMlyB,QAAUkyB,EAAM6c,WAAa,EAAIrS,EAAM18B,QAGjDkyB,EAAM4D,OAAQ,EAGd60B,EAAarf,GArOXuf,CAAWvf,EAAQpZ,KAGdw4B,IAAgB53B,EA2CzB,SAAsBZ,EAAOwK,GAC3B,IAAI5J,EApPiB1wB,EAqPFs6B,EApPZl9B,EAAO6C,SAASD,IAAQA,aAAessC,GAoPA,iBAAVhS,QAAgCh8B,IAAVg8B,GAAwBxK,EAAM6c,aACtFjc,EAAK,IAAIzyB,UAAU,oCAtPvB,IAAuB+B,EAwPrB,OAAO0wB,EAhDqBg4B,CAAa54B,EAAOwK,IAC1C5J,EACFwY,EAAO9Z,KAAK,QAASsB,GACZZ,EAAM6c,YAAcrS,GAASA,EAAM18B,OAAS,GAChC,iBAAV08B,GAAuBxK,EAAM6c,YAActwC,OAAO8P,eAAemuB,KAAWl9B,EAAOR,YAC5F09B,EAhNR,SAA6BA,GAC3B,OAAOl9B,EAAOS,KAAKy8B,GA+MLgV,CAAoBhV,IAG1B+tB,EACEv4B,EAAM6Z,WAAYT,EAAO9Z,KAAK,QAAS,IAAIjwB,MAAM,qCAA0CwpD,EAASzf,EAAQpZ,EAAOwK,GAAO,GACrHxK,EAAM4D,MACfwV,EAAO9Z,KAAK,QAAS,IAAIjwB,MAAM,6BAE/B2wB,EAAM03B,SAAU,EACZ13B,EAAMo4B,UAAY9pD,GACpBk8B,EAAQxK,EAAMo4B,QAAQroD,MAAMy6B,GACxBxK,EAAM6c,YAA+B,IAAjBrS,EAAM18B,OAAc+qD,EAASzf,EAAQpZ,EAAOwK,GAAO,GAAYsuB,EAAc1f,EAAQpZ,IAE7G64B,EAASzf,EAAQpZ,EAAOwK,GAAO,KAGzB+tB,IACVv4B,EAAM03B,SAAU,IAIpB,OAgCF,SAAsB13B,GACpB,OAAQA,EAAM4D,QAAU5D,EAAM23B,cAAgB33B,EAAMlyB,OAASkyB,EAAM+D,eAAkC,IAAjB/D,EAAMlyB,QAjCnFuzD,CAAarhC,GAGtB,SAAS64B,EAASzf,EAAQpZ,EAAOwK,EAAO+tB,GAClCv4B,EAAMy3B,SAA4B,IAAjBz3B,EAAMlyB,SAAiBkyB,EAAM2d,MAChDvE,EAAO9Z,KAAK,OAAQkL,GACpB4O,EAAOxmC,KAAK,KAGZotB,EAAMlyB,QAAUkyB,EAAM6c,WAAa,EAAIrS,EAAM18B,OACzCyqD,EAAYv4B,EAAM3yB,OAAOkyB,QAAQiL,GAAYxK,EAAM3yB,OAAOyG,KAAK02B,GAE/DxK,EAAM23B,cAAcc,EAAarf,IAEvC0f,EAAc1f,EAAQpZ,GAvGxBzzB,OAAO2J,eAAemtB,EAASv2B,UAAW,YAAa,CACrDsV,IAAK,WACH,YAA4B5T,IAAxBY,KAAK40B,gBAGF50B,KAAK40B,eAAeC,WAE7B1oB,IAAK,SAAUvO,GAGRoC,KAAK40B,iBAMV50B,KAAK40B,eAAeC,UAAYj3B,MAIpCq2B,EAASv2B,UAAUi+B,QAAU2R,EAAY3R,QACzC1H,EAASv2B,UAAUszC,WAAa1D,EAAY2D,UAC5Chd,EAASv2B,UAAUo3B,SAAW,SAAU/iB,EAAKgjB,GAC3C/0B,KAAK0E,KAAK,MACVqwB,EAAGhjB,IAOLkiB,EAASv2B,UAAUgH,KAAO,SAAU02B,EAAOl8B,GACzC,IACIkqD,EADAx4B,EAAQ5wB,KAAK40B,eAgBjB,OAbKhE,EAAM6c,WAUT2b,GAAiB,EATI,iBAAVhuB,KACTl8B,EAAWA,GAAY0xB,EAAMwd,mBACZxd,EAAM1xB,WACrBk8B,EAAQl9B,EAAOS,KAAKy8B,EAAOl8B,GAC3BA,EAAW,IAEbkqD,GAAiB,GAMdF,EAAiBlpD,KAAMo7B,EAAOl8B,GAAU,EAAOkqD,IAIxDn1B,EAASv2B,UAAUyyB,QAAU,SAAUiL,GACrC,OAAO8tB,EAAiBlpD,KAAMo7B,EAAO,MAAM,GAAM,IAwEnDnH,EAASv2B,UAAUisD,SAAW,WAC5B,OAAuC,IAAhC3pD,KAAK40B,eAAeyzB,SAI7Bp0B,EAASv2B,UAAUksD,YAAc,SAAUt2C,GAIzC,OAHKmZ,IAAeA,EAAgB,EAAQ,KAAmBA,eAC/DzsB,KAAK40B,eAAeo0B,QAAU,IAAIv8B,EAAcnZ,GAChDtT,KAAK40B,eAAe11B,SAAWoU,EACxBtT,MAwBT,SAAS+pD,EAAcrnD,EAAGkuB,GACxB,OAAIluB,GAAK,GAAsB,IAAjBkuB,EAAMlyB,QAAgBkyB,EAAM4D,MAAc,EACpD5D,EAAM6c,WAAmB,EACzB/qC,GAAMA,EAEJkuB,EAAMy3B,SAAWz3B,EAAMlyB,OAAekyB,EAAM3yB,OAAO4rD,KAAKxoD,KAAK3C,OAAmBkyB,EAAMlyB,QAGxFgE,EAAIkuB,EAAM+D,gBAAe/D,EAAM+D,cA3BrC,SAAiCjyB,GAc/B,OAbIA,GAFQ,QAGVA,EAHU,SAOVA,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAEKA,EAa4CsnD,CAAwBtnD,IACvEA,GAAKkuB,EAAMlyB,OAAegE,EAEzBkuB,EAAM4D,MAIJ5D,EAAMlyB,QAHXkyB,EAAM23B,cAAe,EACd,IA4HX,SAASc,EAAarf,GACpB,IAAIpZ,EAAQoZ,EAAOpV,eACnBhE,EAAM23B,cAAe,EAChB33B,EAAM43B,kBACTnB,EAAM,eAAgBz2B,EAAMy3B,SAC5Bz3B,EAAM43B,iBAAkB,EACpB53B,EAAM2d,KAAM1a,EAAIY,SAAS60B,EAAetf,GAAasf,EAActf,IAI3E,SAASsf,EAActf,GACrBqd,EAAM,iBACNrd,EAAO9Z,KAAK,YACZ+5B,EAAKjgB,GASP,SAAS0f,EAAc1f,EAAQpZ,GACxBA,EAAMm4B,cACTn4B,EAAMm4B,aAAc,EACpBl1B,EAAIY,SAASy1B,EAAgBlgB,EAAQpZ,IAIzC,SAASs5B,EAAelgB,EAAQpZ,GAE9B,IADA,IAAI5vB,EAAM4vB,EAAMlyB,QACRkyB,EAAM03B,UAAY13B,EAAMy3B,UAAYz3B,EAAM4D,OAAS5D,EAAMlyB,OAASkyB,EAAM+D,gBAC9E0yB,EAAM,wBACNrd,EAAOxmC,KAAK,GACRxC,IAAQ4vB,EAAMlyB,SAELsC,EAAM4vB,EAAMlyB,OAE3BkyB,EAAMm4B,aAAc,EAyOtB,SAASqB,EAAiB3yC,GACxB4vC,EAAM,4BACN5vC,EAAKjU,KAAK,GAsBZ,SAAS6mD,EAAQrgB,EAAQpZ,GAClBA,EAAM03B,UACTjB,EAAM,iBACNrd,EAAOxmC,KAAK,IAGdotB,EAAM83B,iBAAkB,EACxB93B,EAAMk4B,WAAa,EACnB9e,EAAO9Z,KAAK,UACZ+5B,EAAKjgB,GACDpZ,EAAMy3B,UAAYz3B,EAAM03B,SAASte,EAAOxmC,KAAK,GAanD,SAASymD,EAAKjgB,GACZ,IAAIpZ,EAAQoZ,EAAOpV,eAEnB,IADAyyB,EAAM,OAAQz2B,EAAMy3B,SACbz3B,EAAMy3B,SAA6B,OAAlBre,EAAOxmC,UAmFjC,SAAS8mD,EAAS5nD,EAAGkuB,GAEnB,OAAqB,IAAjBA,EAAMlyB,OAAqB,MAG3BkyB,EAAM6c,WAAY/kC,EAAMkoB,EAAM3yB,OAAOqmB,SAAkB5hB,GAAKA,GAAKkuB,EAAMlyB,QAEtDgK,EAAfkoB,EAAMo4B,QAAep4B,EAAM3yB,OAAO8J,KAAK,IAAqC,IAAxB6oB,EAAM3yB,OAAOS,OAAoBkyB,EAAM3yB,OAAO4rD,KAAKxoD,KAAgBuvB,EAAM3yB,OAAOmJ,OAAOwpB,EAAMlyB,QACrJkyB,EAAM3yB,OAAO6rD,SAGbphD,EASJ,SAAyBhG,EAAG2E,EAAM6qD,GAChC,IAAIxpD,EACAhG,EAAI2E,EAAKwiD,KAAKxoD,KAAK3C,QAErBgK,EAAMrB,EAAKwiD,KAAKxoD,KAAKT,MAAM,EAAG8B,GAC9B2E,EAAKwiD,KAAKxoD,KAAOgG,EAAKwiD,KAAKxoD,KAAKT,MAAM8B,IAGtCgG,EAFShG,IAAM2E,EAAKwiD,KAAKxoD,KAAK3C,OAExB2I,EAAKid,QAGL4tC,EASV,SAA8BxvD,EAAG2E,GAC/B,IAAIkM,EAAIlM,EAAKwiD,KACT5kD,EAAI,EACJyD,EAAM6K,EAAElS,KACZqB,GAAKgG,EAAIhK,OACT,KAAO6U,EAAIA,EAAEgX,MAAM,CACjB,IAAI/lB,EAAM+O,EAAElS,KACRmxB,EAAK9vB,EAAI8B,EAAI9F,OAAS8F,EAAI9F,OAASgE,EAGvC,GAFI8vB,IAAOhuB,EAAI9F,OAAQgK,GAAOlE,EAASkE,GAAOlE,EAAI5D,MAAM,EAAG8B,GAEjD,KADVA,GAAK8vB,GACQ,CACPA,IAAOhuB,EAAI9F,UACXuG,EACEsO,EAAEgX,KAAMljB,EAAKwiD,KAAOt2C,EAAEgX,KAAUljB,EAAKwiD,KAAOxiD,EAAK8qD,KAAO,OAE5D9qD,EAAKwiD,KAAOt2C,EACZA,EAAElS,KAAOmD,EAAI5D,MAAM4xB,IAErB,QAEAvtB,EAGJ,OADAoC,EAAK3I,QAAUuG,EACRyD,EAhCc0pD,CAAqB1vD,EAAG2E,GAsC/C,SAAwB3E,EAAG2E,GACzB,IAAIqB,EAAMxK,EAAOW,YAAY6D,GACzB6Q,EAAIlM,EAAKwiD,KACT5kD,EAAI,EACRsO,EAAElS,KAAKH,KAAKwH,GACZhG,GAAK6Q,EAAElS,KAAK3C,OACZ,KAAO6U,EAAIA,EAAEgX,MAAM,CACjB,IAAIprB,EAAMoU,EAAElS,KACRmxB,EAAK9vB,EAAIvD,EAAIT,OAASS,EAAIT,OAASgE,EAGvC,GAFAvD,EAAI+B,KAAKwH,EAAKA,EAAIhK,OAASgE,EAAG,EAAG8vB,GAEvB,KADV9vB,GAAK8vB,GACQ,CACPA,IAAOrzB,EAAIT,UACXuG,EACEsO,EAAEgX,KAAMljB,EAAKwiD,KAAOt2C,EAAEgX,KAAUljB,EAAKwiD,KAAOxiD,EAAK8qD,KAAO,OAE5D9qD,EAAKwiD,KAAOt2C,EACZA,EAAElS,KAAOlC,EAAIyB,MAAM4xB,IAErB,QAEAvtB,EAGJ,OADAoC,EAAK3I,QAAUuG,EACRyD,EA9D8C2pD,CAAe3vD,EAAG2E,GAEvE,OAAOqB,EAtBC4pD,CAAgB5vD,EAAGkuB,EAAM3yB,OAAQ2yB,EAAMo4B,SAGxCtgD,GAVP,IAAIA,EA4FN,SAAS8hD,EAAYxgB,GACnB,IAAIpZ,EAAQoZ,EAAOpV,eAInB,GAAIhE,EAAMlyB,OAAS,EAAG,MAAM,IAAIuB,MAAM,8CAEjC2wB,EAAM6Z,aACT7Z,EAAM4D,OAAQ,EACdX,EAAIY,SAASg2B,EAAe75B,EAAOoZ,IAIvC,SAASygB,EAAc75B,EAAOoZ,GAEvBpZ,EAAM6Z,YAA+B,IAAjB7Z,EAAMlyB,SAC7BkyB,EAAM6Z,YAAa,EACnBT,EAAO5V,UAAW,EAClB4V,EAAO9Z,KAAK,QAIhB,SAASltB,EAAQ2nD,EAAIzjD,GACnB,IAAK,IAAI1F,EAAI,EAAG6L,EAAIs9C,EAAGjsD,OAAQ8C,EAAI6L,EAAG7L,IACpC,GAAImpD,EAAGnpD,KAAO0F,EAAG,OAAO1F,EAE1B,OAAQ,EApoBVyyB,EAASv2B,UAAU8F,KAAO,SAAUd,GAClC2kD,EAAM,OAAQ3kD,GACdA,EAAIyB,SAASzB,EAAG,IAChB,IAAIkuB,EAAQ5wB,KAAK40B,eACbg2B,EAAQloD,EAOZ,GALU,IAANA,IAASkuB,EAAM43B,iBAAkB,GAK3B,IAAN9lD,GAAWkuB,EAAM23B,eAAiB33B,EAAMlyB,QAAUkyB,EAAM+D,eAAiB/D,EAAM4D,OAGjF,OAFA6yB,EAAM,qBAAsBz2B,EAAMlyB,OAAQkyB,EAAM4D,OAC3B,IAAjB5D,EAAMlyB,QAAgBkyB,EAAM4D,MAAOg2B,EAAYxqD,MAAWqpD,EAAarpD,MACpE,KAMT,GAAU,KAHV0C,EAAIqnD,EAAcrnD,EAAGkuB,KAGNA,EAAM4D,MAEnB,OADqB,IAAjB5D,EAAMlyB,QAAc8rD,EAAYxqD,MAC7B,KA0BT,IA4BI0I,EA5BAmiD,EAASj6B,EAAM23B,aAiDnB,OAhDAlB,EAAM,gBAAiBwD,IAGF,IAAjBj6B,EAAMlyB,QAAgBkyB,EAAMlyB,OAASgE,EAAIkuB,EAAM+D,gBAEjD0yB,EAAM,6BADNwD,GAAS,GAMPj6B,EAAM4D,OAAS5D,EAAM03B,QAEvBjB,EAAM,mBADNwD,GAAS,GAEAA,IACTxD,EAAM,WACNz2B,EAAM03B,SAAU,EAChB13B,EAAM2d,MAAO,EAEQ,IAAjB3d,EAAMlyB,SAAckyB,EAAM23B,cAAe,GAE7CvoD,KAAKipD,MAAMr4B,EAAM+D,eACjB/D,EAAM2d,MAAO,EAGR3d,EAAM03B,UAAS5lD,EAAIqnD,EAAca,EAAOh6B,KAMnC,QAFDloB,EAAPhG,EAAI,EAAS4nD,EAAS5nD,EAAGkuB,GAAkB,OAG7CA,EAAM23B,cAAe,EACrB7lD,EAAI,GAEJkuB,EAAMlyB,QAAUgE,EAGG,IAAjBkuB,EAAMlyB,SAGHkyB,EAAM4D,QAAO5D,EAAM23B,cAAe,GAGnCqC,IAAUloD,GAAKkuB,EAAM4D,OAAOg2B,EAAYxqD,OAGlC,OAAR0I,GAAc1I,KAAKkwB,KAAK,OAAQxnB,GAE7BA,GAkETurB,EAASv2B,UAAUurD,MAAQ,SAAUvmD,GACnC1C,KAAKkwB,KAAK,QAAS,IAAIjwB,MAAM,gCAG/Bg0B,EAASv2B,UAAUuQ,KAAO,SAAUiJ,EAAM4zC,GACxC,IAAI1sD,EAAM4B,KACN4wB,EAAQ5wB,KAAK40B,eAEjB,OAAQhE,EAAMw3B,YACZ,KAAK,EACHx3B,EAAMu3B,MAAQjxC,EACd,MACF,KAAK,EACH0Z,EAAMu3B,MAAQ,CAACv3B,EAAMu3B,MAAOjxC,GAC5B,MACF,QACE0Z,EAAMu3B,MAAMzjD,KAAKwS,GAGrB0Z,EAAMw3B,YAAc,EACpBf,EAAM,wBAAyBz2B,EAAMw3B,WAAY0C,GAEjD,IAEIC,IAFUD,IAA6B,IAAjBA,EAAS7oD,MAAkBiV,IAAS0e,EAAQo1B,QAAU9zC,IAAS0e,EAAQq1B,OAE7E32B,EAAQ42B,EAI5B,SAASC,EAAS/2B,EAAUg3B,GAC1B/D,EAAM,YACFjzB,IAAah2B,GACXgtD,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAoB5BhE,EAAM,WAENnwC,EAAKkY,eAAe,QAASqM,GAC7BvkB,EAAKkY,eAAe,SAAUib,GAC9BnzB,EAAKkY,eAAe,QAASkM,GAC7BpkB,EAAKkY,eAAe,QAASwM,GAC7B1kB,EAAKkY,eAAe,SAAU+7B,GAC9B/sD,EAAIgxB,eAAe,MAAOkF,GAC1Bl2B,EAAIgxB,eAAe,MAAO87B,GAC1B9sD,EAAIgxB,eAAe,OAAQ+L,GAE3BmwB,GAAY,GAOR16B,EAAMk4B,YAAgB5xC,EAAKqd,iBAAkBrd,EAAKqd,eAAeyZ,WAAY1S,KAhCnF,SAAShH,IACP+yB,EAAM,SACNnwC,EAAKjV,MAfH2uB,EAAM6Z,WAAY5W,EAAIY,SAASs2B,GAAY3sD,EAAIywB,KAAK,MAAOk8B,GAE/D7zC,EAAK4a,GAAG,SAAUq5B,GAoBlB,IAAI7vB,EA4FN,SAAqBl9B,GACnB,OAAO,WACL,IAAIwyB,EAAQxyB,EAAIw2B,eAChByyB,EAAM,cAAez2B,EAAMk4B,YACvBl4B,EAAMk4B,YAAYl4B,EAAMk4B,aACH,IAArBl4B,EAAMk4B,YAAoB1B,EAAgBhpD,EAAK,UACjDwyB,EAAMy3B,SAAU,EAChB4B,EAAK7rD,KAnGKmtD,CAAYntD,GAC1B8Y,EAAK4a,GAAG,QAASwJ,GAEjB,IAAIgwB,GAAY,EA2BhB,IAAIiH,GAAsB,EAE1B,SAASp3B,EAAOC,GACdisB,EAAM,UACNkL,GAAsB,GAElB,IADMr7C,EAAKvW,MAAMy6B,IACCm3B,KAKM,IAArB3hC,EAAMw3B,YAAoBx3B,EAAMu3B,QAAUjxC,GAAQ0Z,EAAMw3B,WAAa,IAAqC,IAAhCplD,EAAQ4tB,EAAMu3B,MAAOjxC,MAAkBo0C,IACpHjE,EAAM,8BAA+BjpD,EAAIw2B,eAAek0B,YACxD1qD,EAAIw2B,eAAek0B,aACnByJ,GAAsB,GAExBn0D,EAAIi9B,SAMR,SAASO,EAAQpK,GACf61B,EAAM,UAAW71B,GACjB05B,IACAh0C,EAAKkY,eAAe,QAASwM,GACU,IAAnCwrB,EAAgBlwC,EAAM,UAAgBA,EAAKgZ,KAAK,QAASsB,GAO/D,SAASiK,IACPvkB,EAAKkY,eAAe,SAAUib,GAC9B6gB,IAGF,SAAS7gB,IACPgd,EAAM,YACNnwC,EAAKkY,eAAe,QAASqM,GAC7ByvB,IAIF,SAASA,IACP7D,EAAM,UACNjpD,EAAI8sD,OAAOh0C,GAYb,OA1DA9Y,EAAI0zB,GAAG,OAAQqJ,GA9gBjB,SAAyBrM,EAAS08B,EAAOp+C,GAGvC,GAAuC,mBAA5B0hB,EAAQiD,gBAAgC,OAAOjD,EAAQiD,gBAAgBy5B,EAAOp+C,GAMpF0hB,EAAQO,SAAYP,EAAQO,QAAQm8B,GAAuChsD,EAAQsvB,EAAQO,QAAQm8B,IAAS18B,EAAQO,QAAQm8B,GAAOr7B,QAAQ/iB,GAAS0hB,EAAQO,QAAQm8B,GAAS,CAACp+C,EAAI0hB,EAAQO,QAAQm8B,IAAtJ18B,EAAQgD,GAAG05B,EAAOp+C,GAkiBnE2kB,CAAgB7a,EAAM,QAAS0kB,GAO/B1kB,EAAK2X,KAAK,QAAS4M,GAMnBvkB,EAAK2X,KAAK,SAAUwb,GAQpBnzB,EAAKgZ,KAAK,OAAQ9xB,GAGbwyB,EAAMy3B,UACThB,EAAM,eACNjpD,EAAIm9B,UAGCrkB,GAeT+c,EAASv2B,UAAUwtD,OAAS,SAAUh0C,GACpC,IAAI0Z,EAAQ5wB,KAAK40B,eACbw2B,EAAa,CAAEC,YAAY,GAG/B,GAAyB,IAArBz6B,EAAMw3B,WAAkB,OAAOpoD,KAGnC,GAAyB,IAArB4wB,EAAMw3B,WAER,OAAIlxC,GAAQA,IAAS0Z,EAAMu3B,QAEtBjxC,IAAMA,EAAO0Z,EAAMu3B,OAGxBv3B,EAAMu3B,MAAQ,KACdv3B,EAAMw3B,WAAa,EACnBx3B,EAAMy3B,SAAU,EACZnxC,GAAMA,EAAKgZ,KAAK,SAAUlwB,KAAMorD,IARKprD,KAc3C,IAAKkX,EAAM,CAET,IAAIu0C,EAAQ76B,EAAMu3B,MACdnnD,EAAM4vB,EAAMw3B,WAChBx3B,EAAMu3B,MAAQ,KACdv3B,EAAMw3B,WAAa,EACnBx3B,EAAMy3B,SAAU,EAEhB,IAAK,IAAI7mD,EAAI,EAAGA,EAAIR,EAAKQ,IACvBiqD,EAAMjqD,GAAG0uB,KAAK,SAAUlwB,KAAMorD,GAC/B,OAAOprD,KAIV,IAAIusB,EAAQvpB,EAAQ4tB,EAAMu3B,MAAOjxC,GACjC,OAAe,IAAXqV,IAEJqE,EAAMu3B,MAAMrK,OAAOvxB,EAAO,GAC1BqE,EAAMw3B,YAAc,EACK,IAArBx3B,EAAMw3B,aAAkBx3B,EAAMu3B,MAAQv3B,EAAMu3B,MAAM,IAEtDjxC,EAAKgZ,KAAK,SAAUlwB,KAAMorD,IANDprD,MAa3Bi0B,EAASv2B,UAAUo0B,GAAK,SAAU45B,EAAIt+C,GACpC,IAAI5H,EAAMu1B,EAAOr9B,UAAUo0B,GAAG7uB,KAAKjD,KAAM0rD,EAAIt+C,GAE7C,GAAW,SAAPs+C,GAEkC,IAAhC1rD,KAAK40B,eAAeyzB,SAAmBroD,KAAKu7B,cAC3C,GAAW,aAAPmwB,EAAmB,CAC5B,IAAI96B,EAAQ5wB,KAAK40B,eACZhE,EAAM6Z,YAAe7Z,EAAM63B,oBAC9B73B,EAAM63B,kBAAoB73B,EAAM23B,cAAe,EAC/C33B,EAAM43B,iBAAkB,EACnB53B,EAAM03B,QAEA13B,EAAMlyB,QACf2qD,EAAarpD,MAFb6zB,EAAIY,SAAS21B,EAAkBpqD,OAOrC,OAAOwF,GAETyuB,EAASv2B,UAAUm0B,YAAcoC,EAASv2B,UAAUo0B,GASpDmC,EAASv2B,UAAU69B,OAAS,WAC1B,IAAI3K,EAAQ5wB,KAAK40B,eAMjB,OALKhE,EAAMy3B,UACThB,EAAM,UACNz2B,EAAMy3B,SAAU,EAMpB,SAAgBre,EAAQpZ,GACjBA,EAAM83B,kBACT93B,EAAM83B,iBAAkB,EACxB70B,EAAIY,SAAS41B,EAASrgB,EAAQpZ,IAR9B2K,CAAOv7B,KAAM4wB,IAER5wB,MAuBTi0B,EAASv2B,UAAU29B,MAAQ,WAOzB,OANAgsB,EAAM,wBAAyBrnD,KAAK40B,eAAeyzB,UAC/C,IAAUroD,KAAK40B,eAAeyzB,UAChChB,EAAM,SACNrnD,KAAK40B,eAAeyzB,SAAU,EAC9BroD,KAAKkwB,KAAK,UAELlwB,MAYTi0B,EAASv2B,UAAUiuD,KAAO,SAAU3hB,GAClC,IAAIwC,EAAQxsC,KAER4wB,EAAQ5wB,KAAK40B,eACb+zB,GAAS,EA4Bb,IAAK,IAAInnD,KA1BTwoC,EAAOlY,GAAG,OAAO,WAEf,GADAu1B,EAAM,eACFz2B,EAAMo4B,UAAYp4B,EAAM4D,MAAO,CACjC,IAAI4G,EAAQxK,EAAMo4B,QAAQ/mD,MACtBm5B,GAASA,EAAM18B,QAAQ8tC,EAAM9nC,KAAK02B,GAGxCoR,EAAM9nC,KAAK,SAGbslC,EAAOlY,GAAG,QAAQ,SAAUsJ,IAC1BisB,EAAM,gBACFz2B,EAAMo4B,UAAS5tB,EAAQxK,EAAMo4B,QAAQroD,MAAMy6B,IAG3CxK,EAAM6c,YAAc,MAACrS,KAAyDxK,EAAM6c,YAAgBrS,GAAUA,EAAM18B,UAE9G8tC,EAAM9nC,KAAK02B,KAEnButB,GAAS,EACT3e,EAAO3O,aAMG2O,OACI5qC,IAAZY,KAAKwB,IAAyC,mBAAdwoC,EAAOxoC,KACzCxB,KAAKwB,GAAK,SAAU2yB,GAClB,OAAO,WACL,OAAO6V,EAAO7V,GAAQjuB,MAAM8jC,EAAQtiC,YAF9B,CAIRlG,IAKN,IAAK,IAAIkB,EAAI,EAAGA,EAAIulD,EAAavpD,OAAQgE,IACvCsnC,EAAOlY,GAAGm2B,EAAavlD,GAAI1C,KAAKkwB,KAAKrjB,KAAK7M,KAAMioD,EAAavlD,KAa/D,OARA1C,KAAKipD,MAAQ,SAAUvmD,GACrB2kD,EAAM,gBAAiB3kD,GACnBimD,IACFA,GAAS,EACT3e,EAAOzO,WAIJv7B,MAGT7C,OAAO2J,eAAemtB,EAASv2B,UAAW,wBAAyB,CAIjEG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAK40B,eAAeD,iBAK/BV,EAAS43B,UAAYvB,I,wCCz3BrBjtD,EAAOC,QAAU,EAAQ,KAAUqxB,c,+BCInC,IAAIkF,EAAM,EAAQ,KA8DlB,SAASm4B,EAAYv0C,EAAM1F,GACzB0F,EAAKyY,KAAK,QAASne,GAGrB1U,EAAOC,QAAU,CACfq+B,QA/DF,SAAiB5pB,EAAKgjB,GACpB,IAAIyX,EAAQxsC,KAERksD,EAAoBlsD,KAAK40B,gBAAkB50B,KAAK40B,eAAeC,UAC/Ds3B,EAAoBnsD,KAAKu0B,gBAAkBv0B,KAAKu0B,eAAeM,UAEnE,OAAIq3B,GAAqBC,GACnBp3B,EACFA,EAAGhjB,IACMA,GAAS/R,KAAKu0B,gBAAmBv0B,KAAKu0B,eAAeua,cAC9Djb,EAAIY,SAASu3B,EAAahsD,KAAM+R,GAE3B/R,OAMLA,KAAK40B,iBACP50B,KAAK40B,eAAeC,WAAY,GAI9B70B,KAAKu0B,iBACPv0B,KAAKu0B,eAAeM,WAAY,GAGlC70B,KAAK80B,SAAS/iB,GAAO,MAAM,SAAUA,IAC9BgjB,GAAMhjB,GACT8hB,EAAIY,SAASu3B,EAAaxf,EAAOz6B,GAC7By6B,EAAMjY,iBACRiY,EAAMjY,eAAeua,cAAe,IAE7B/Z,GACTA,EAAGhjB,MAIA/R,OA0BPixC,UAvBF,WACMjxC,KAAK40B,iBACP50B,KAAK40B,eAAeC,WAAY,EAChC70B,KAAK40B,eAAe0zB,SAAU,EAC9BtoD,KAAK40B,eAAeJ,OAAQ,EAC5Bx0B,KAAK40B,eAAe6V,YAAa,GAG/BzqC,KAAKu0B,iBACPv0B,KAAKu0B,eAAeM,WAAY,EAChC70B,KAAKu0B,eAAeC,OAAQ,EAC5Bx0B,KAAKu0B,eAAe0Z,QAAS,EAC7BjuC,KAAKu0B,eAAegW,UAAW,EAC/BvqC,KAAKu0B,eAAeua,cAAe,M,6BCGvCzxC,EAAOC,QAAUkvB,EAEjB,IAAIuH,EAAS,EAAQ,KAGjBC,EAAO,EAAQ,KAMnB,SAASg5B,EAAex7B,EAAInwB,GAC1B,IAAI4rD,EAAKjtD,KAAKktD,gBACdD,EAAGE,cAAe,EAElB,IAAIp4B,EAAKk4B,EAAGve,QAEZ,IAAK3Z,EACH,OAAO/0B,KAAKkwB,KAAK,QAAS,IAAIjwB,MAAM,yCAGtCgtD,EAAGG,WAAa,KAChBH,EAAGve,QAAU,KAED,MAARrtC,GACFrB,KAAK0E,KAAKrD,GAEZ0zB,EAAGvD,GAEH,IAAI67B,EAAKrtD,KAAK40B,eACdy4B,EAAG/E,SAAU,GACT+E,EAAG9E,cAAgB8E,EAAG3uD,OAAS2uD,EAAG14B,gBACpC30B,KAAKipD,MAAMoE,EAAG14B,eAIlB,SAASnI,EAAUX,GACjB,KAAM7rB,gBAAgBwsB,GAAY,OAAO,IAAIA,EAAUX,GAEvDkI,EAAO9wB,KAAKjD,KAAM6rB,GAElB7rB,KAAKktD,gBAAkB,CACrBF,eAAgBA,EAAengD,KAAK7M,MACpCstD,eAAe,EACfH,cAAc,EACdze,QAAS,KACT0e,WAAY,KACZG,cAAe,MAIjBvtD,KAAK40B,eAAe2zB,cAAe,EAKnCvoD,KAAK40B,eAAe2Z,MAAO,EAEvB1iB,IAC+B,mBAAtBA,EAAQ7K,YAA0BhhB,KAAK4tB,WAAa/B,EAAQ7K,WAE1C,mBAAlB6K,EAAQ2hC,QAAsBxtD,KAAK6tB,OAAShC,EAAQ2hC,QAIjExtD,KAAK8xB,GAAG,YAAame,GAGvB,SAASA,IACP,IAAIzD,EAAQxsC,KAEe,mBAAhBA,KAAK6tB,OACd7tB,KAAK6tB,QAAO,SAAU2D,EAAInwB,GACxBysB,EAAK0e,EAAOhb,EAAInwB,MAGlBysB,EAAK9tB,KAAM,KAAM,MA2DrB,SAAS8tB,EAAKkc,EAAQxY,EAAInwB,GACxB,GAAImwB,EAAI,OAAOwY,EAAO9Z,KAAK,QAASsB,GAOpC,GALY,MAARnwB,GACF2oC,EAAOtlC,KAAKrD,GAIV2oC,EAAOzV,eAAe71B,OAAQ,MAAM,IAAIuB,MAAM,8CAElD,GAAI+pC,EAAOkjB,gBAAgBC,aAAc,MAAM,IAAIltD,MAAM,kDAEzD,OAAO+pC,EAAOtlC,KAAK,MA7IrBsvB,EAAK/gB,SAAW,EAAQ,KAGxB+gB,EAAK/gB,SAASuZ,EAAWuH,GAuEzBvH,EAAU9uB,UAAUgH,KAAO,SAAU02B,EAAOl8B,GAE1C,OADAc,KAAKktD,gBAAgBI,eAAgB,EAC9Bv5B,EAAOr2B,UAAUgH,KAAKzB,KAAKjD,KAAMo7B,EAAOl8B,IAajDstB,EAAU9uB,UAAUkwB,WAAa,SAAUwN,EAAOl8B,EAAU61B,GAC1D,MAAM,IAAI90B,MAAM,oCAGlBusB,EAAU9uB,UAAU6xC,OAAS,SAAUnU,EAAOl8B,EAAU61B,GACtD,IAAIk4B,EAAKjtD,KAAKktD,gBAId,GAHAD,EAAGve,QAAU3Z,EACbk4B,EAAGG,WAAahyB,EAChB6xB,EAAGM,cAAgBruD,GACd+tD,EAAGE,aAAc,CACpB,IAAIE,EAAKrtD,KAAK40B,gBACVq4B,EAAGK,eAAiBD,EAAG9E,cAAgB8E,EAAG3uD,OAAS2uD,EAAG14B,gBAAe30B,KAAKipD,MAAMoE,EAAG14B,iBAO3FnI,EAAU9uB,UAAUurD,MAAQ,SAAUvmD,GACpC,IAAIuqD,EAAKjtD,KAAKktD,gBAEQ,OAAlBD,EAAGG,YAAuBH,EAAGve,UAAYue,EAAGE,cAC9CF,EAAGE,cAAe,EAClBntD,KAAK4tB,WAAWq/B,EAAGG,WAAYH,EAAGM,cAAeN,EAAGD,iBAIpDC,EAAGK,eAAgB,GAIvB9gC,EAAU9uB,UAAUo3B,SAAW,SAAU/iB,EAAKgjB,GAC5C,IAAIy9B,EAASxyD,KAEb+zB,EAAOr2B,UAAUo3B,SAAS7xB,KAAKjD,KAAM+R,GAAK,SAAU07C,GAClD14B,EAAG04B,GACH+E,EAAOtiC,KAAK,c,6BCnMhB,IAAIjd,EAAW,EAAQ,KACnBw/C,EAAS,EAAQ,KACjB18B,EAAO,EAAQ,KACf73B,EAAS,EAAQ,KAAeA,OAChCynD,EAAM,EAAQ,KACdvtB,EAAY,EAAQ,KAEpBC,EAAM,EAAQ,KAEdq6B,EAAQx0D,EAAOU,MAAM,KAEzB,SAAS+zD,EAAMr6B,EAAKh6B,GAClBy3B,EAAK9yB,KAAKjD,KAAM,UACG,iBAAR1B,IACTA,EAAMJ,EAAOS,KAAKL,IAGpB,IAAIs0D,EAAqB,WAARt6B,GAA4B,WAARA,EAAoB,IAAM,IAE/Dt4B,KAAK6yD,KAAOv6B,EACZt4B,KAAK69B,KAAOv/B,EACRA,EAAII,OAASk0D,GAEft0D,GADmB,WAARg6B,EAAmB,IAAIF,EAAcC,EAAIC,IACzCpL,OAAO5uB,GAAKu5B,SACdv5B,EAAII,OAASk0D,IACtBt0D,EAAMJ,EAAOkJ,OAAO,CAAC9I,EAAKo0D,GAAQE,IAMpC,IAHA,IAAIE,EAAO9yD,KAAK+yD,MAAQ70D,EAAOW,YAAY+zD,GACvCI,EAAOhzD,KAAKizD,MAAQ/0D,EAAOW,YAAY+zD,GAElCpxD,EAAI,EAAGA,EAAIoxD,EAAWpxD,IAC7BsxD,EAAKtxD,GAAc,GAATlD,EAAIkD,GACdwxD,EAAKxxD,GAAc,GAATlD,EAAIkD,GAEhBxB,KAAKk4B,MAAgB,WAARI,EAAmB,IAAIF,EAAcC,EAAIC,GACtDt4B,KAAKk4B,MAAMhL,OAAO4lC,GAGpB7/C,EAAS0/C,EAAM58B,GAEf48B,EAAKj1D,UAAU4vB,QAAU,SAAUjsB,GACjCrB,KAAKk4B,MAAMhL,OAAO7rB,IAGpBsxD,EAAKj1D,UAAUovB,OAAS,WACtB,IAAItJ,EAAIxjB,KAAKk4B,MAAML,SAEnB,OADyB,WAAd73B,KAAK6yD,KAAoB,IAAIz6B,EAAcC,EAAIr4B,KAAK6yD,OACnD3lC,OAAOltB,KAAKizD,OAAO/lC,OAAO1J,GAAGqU,UAG3Cx6B,EAAOC,QAAU,SAAqBg7B,EAAKh6B,GAEzC,MAAY,YADZg6B,EAAMA,EAAIx2B,gBACsB,cAARw2B,EACf,IAAIq6B,EAAK,SAAUr0D,GAEhB,QAARg6B,EACK,IAAIm6B,EAAO9M,EAAKrnD,GAElB,IAAIq0D,EAAKr6B,EAAKh6B,K,gBC5DvB,IAAI65B,EAAM,EAAQ,KAElB96B,EAAOC,QAAU,SAAUW,GACzB,OAAO,IAAIk6B,GAAMjL,OAAOjvB,GAAQ45B,W,qnECHlCv6B,EAAQ41D,OAAS,EAAQ,KACzB51D,EAAQunC,WAAa,EAAQ,M,cCD7B,IAAIsuB,EAAY7tD,KAAK4E,IAAI,EAAG,IAAM,EAElC7M,EAAOC,QAAU,SAAU81D,EAAYxuB,GACrC,GAA0B,iBAAfwuB,EACT,MAAM,IAAIr0D,UAAU,2BAGtB,GAAIq0D,EAAa,EACf,MAAM,IAAIr0D,UAAU,kBAGtB,GAAsB,iBAAX6lC,EACT,MAAM,IAAI7lC,UAAU,2BAGtB,GAAI6lC,EAAS,GAAKA,EAASuuB,GAAavuB,GAAWA,EACjD,MAAM,IAAI7lC,UAAU,oB,iBChBxB,kBAEA,GAAI62B,EAAQoX,QACVoB,EAAkB,aACb,GAAIxY,EAAQkG,QAAS,CAG1BsS,EAFoBjqC,SAASyxB,EAAQkG,QAAQ9R,MAAM,KAAK,GAAGppB,MAAM,GAAI,KAElC,EAAI,QAAU,cAEjDwtC,EAAkB,QAEpB/wC,EAAOC,QAAU8wC,I,kCCXjB,IAAIuX,EAAM,EAAQ,KACdvtB,EAAY,EAAQ,KACpBC,EAAM,EAAQ,KACdn6B,EAAS,EAAQ,KAAeA,OAEhCm1D,EAAkB,EAAQ,KAC1BjlB,EAAkB,EAAQ,KAC1Bh2B,EAAW,EAAQ,KAEnBs6C,EAAQx0D,EAAOU,MAAM,KACrB00D,EAAQ,CACV3N,IAAK,GACLzZ,KAAM,GACNC,OAAQ,GACRC,OAAQ,GACRC,OAAQ,GACRC,OAAQ,GACRinB,OAAQ,GACR5d,UAAW,IAGb,SAASgd,EAAMr6B,EAAKh6B,EAAKk1D,GACvB,IAAIv7B,EAkCN,SAAoBK,GAClB,SAASm7B,EAASpyD,GAChB,OAAOg3B,EAAIC,GAAKpL,OAAO7rB,GAAMw2B,SAM/B,MAAY,WAARS,GAA4B,cAARA,EAJxB,SAAqBj3B,GACnB,OAAO,IAAI+2B,GAAYlL,OAAO7rB,GAAMw2B,UAI1B,QAARS,EAAsBqtB,EACnB8N,EA5CIC,CAAUp7B,GACjBs6B,EAAqB,WAARt6B,GAA4B,WAARA,EAAoB,IAAM,GAE3Dh6B,EAAII,OAASk0D,EACft0D,EAAM25B,EAAK35B,GACFA,EAAII,OAASk0D,IACtBt0D,EAAMJ,EAAOkJ,OAAO,CAAC9I,EAAKo0D,GAAQE,IAKpC,IAFA,IAAIE,EAAO50D,EAAOW,YAAY+zD,EAAYU,EAAMh7B,IAC5C06B,EAAO90D,EAAOW,YAAY+zD,EAAYU,EAAMh7B,IACvC92B,EAAI,EAAGA,EAAIoxD,EAAWpxD,IAC7BsxD,EAAKtxD,GAAc,GAATlD,EAAIkD,GACdwxD,EAAKxxD,GAAc,GAATlD,EAAIkD,GAGhB,IAAImyD,EAAQz1D,EAAOW,YAAY+zD,EAAYY,EAAU,GACrDV,EAAK5xD,KAAKyyD,EAAO,EAAG,EAAGf,GACvB5yD,KAAK2zD,MAAQA,EACb3zD,KAAK4zD,MAAQd,EACb9yD,KAAKgzD,KAAOA,EACZhzD,KAAKs4B,IAAMA,EACXt4B,KAAK4yD,UAAYA,EACjB5yD,KAAKi4B,KAAOA,EACZj4B,KAAKhB,KAAOs0D,EAAMh7B,GAGpBq6B,EAAKj1D,UAAUm2D,IAAM,SAAUxyD,EAAMyxD,GAInC,OAHAzxD,EAAKH,KAAK4xD,EAAM9yD,KAAK4yD,WACb5yD,KAAKi4B,KAAK66B,GAChB5xD,KAAKlB,KAAKgzD,KAAMhzD,KAAK4yD,WAChB5yD,KAAKi4B,KAAKj4B,KAAKgzD,OAmDxB31D,EAAOC,QAnCP,SAAiBwhC,EAAUC,EAAMq0B,EAAYxuB,EAAQ/M,GACnDw7B,EAAgBD,EAAYxuB,GAM5B,IAAI8Q,EAAO,IAAIid,EAFf96B,EAASA,GAAU,OAHnBiH,EAAW1mB,EAAS0mB,EAAUsP,EAAiB,aAC/CrP,EAAO3mB,EAAS2mB,EAAMqP,EAAiB,SAII1vC,QAEvCo1D,EAAK51D,EAAOW,YAAY+lC,GACxBmvB,EAAS71D,EAAOW,YAAYkgC,EAAKrgC,OAAS,GAC9CqgC,EAAK79B,KAAK6yD,EAAQ,EAAG,EAAGh1B,EAAKrgC,QAM7B,IAJA,IAAIs1D,EAAU,EACVC,EAAOX,EAAMz7B,GACbxqB,EAAI/H,KAAKqR,KAAKiuB,EAASqvB,GAElBzyD,EAAI,EAAGA,GAAK6L,EAAG7L,IAAK,CAC3BuyD,EAAO3oD,cAAc5J,EAAGu9B,EAAKrgC,QAK7B,IAHA,IAAIw1D,EAAIxe,EAAKme,IAAIE,EAAQre,EAAKie,OAC1BQ,EAAID,EAECtwD,EAAI,EAAGA,EAAIwvD,EAAYxvD,IAAK,CACnCuwD,EAAIze,EAAKme,IAAIM,EAAGze,EAAKke,OACrB,IAAK,IAAI1jD,EAAI,EAAGA,EAAI+jD,EAAM/jD,IAAKgkD,EAAEhkD,IAAMikD,EAAEjkD,GAG3CgkD,EAAEhzD,KAAK4yD,EAAIE,GACXA,GAAWC,EAGb,OAAOH,I,gBCrGT,IAAI51D,EAAS,EAAQ,KAAeA,OAEpCb,EAAOC,QAAU,SAAUo5B,EAAOx3B,EAAUqS,GAC1C,GAAIrT,EAAO6C,SAAS21B,GAClB,OAAOA,EACF,GAAqB,iBAAVA,EAChB,OAAOx4B,EAAOS,KAAK+3B,EAAOx3B,GACrB,GAAIgB,YAAYwB,OAAOg1B,GAC5B,OAAOx4B,EAAOS,KAAK+3B,EAAMz4B,QAEzB,MAAM,IAAIc,UAAUwS,EAAO,8D,6BCR/BjU,EAAQ0M,aAAe,SAAsBnB,EAAO+N,GAKlD,OAJY/N,EAAM,EAAI+N,IAAQ,GAClB/N,EAAM,EAAI+N,IAAQ,GAClB/N,EAAM,EAAI+N,IAAQ,EACnB/N,EAAM,EAAI+N,MACN,GAGjBtZ,EAAQ8N,cAAgB,SAAuBvC,EAAOjL,EAAOgZ,GAC3D/N,EAAM,EAAI+N,GAAOhZ,IAAU,GAC3BiL,EAAM,EAAI+N,GAAQhZ,IAAU,GAAM,IAClCiL,EAAM,EAAI+N,GAAQhZ,IAAU,EAAK,IACjCiL,EAAM,EAAI+N,GAAe,IAARhZ,GAGnBN,EAAQ82D,GAAK,SAAYC,EAAKC,EAAK3rD,EAAKiO,GAItC,IAHA,IAAI29C,EAAO,EACPC,EAAO,EAEFhzD,EAAI,EAAGA,GAAK,EAAGA,GAAK,EAAG,CAC9B,IAAK,IAAIoC,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B2wD,IAAS,EACTA,GAASD,IAAS1wD,EAAIpC,EAAM,EAE9B,IAASoC,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B2wD,IAAS,EACTA,GAASF,IAASzwD,EAAIpC,EAAM,EAIhC,IAASA,EAAI,EAAGA,GAAK,EAAGA,GAAK,EAAG,CAC9B,IAASoC,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B4wD,IAAS,EACTA,GAASF,IAAS1wD,EAAIpC,EAAM,EAE9B,IAASoC,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B4wD,IAAS,EACTA,GAASH,IAASzwD,EAAIpC,EAAM,EAIhCmH,EAAIiO,EAAM,GAAK29C,IAAS,EACxB5rD,EAAIiO,EAAM,GAAK49C,IAAS,GAG1Bl3D,EAAQm3D,IAAM,SAAaJ,EAAKC,EAAK3rD,EAAKiO,GAIxC,IAHA,IAAI29C,EAAO,EACPC,EAAO,EAEFhzD,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAAK,IAAIoC,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAC5B2wD,IAAS,EACTA,GAASD,IAAS1wD,EAAIpC,EAAM,EAC5B+yD,IAAS,EACTA,GAASF,IAASzwD,EAAIpC,EAAM,EAGhC,IAASA,EAAI,EAAGA,EAAI,EAAGA,IACrB,IAASoC,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAC5B4wD,IAAS,EACTA,GAASF,IAAS1wD,EAAIpC,EAAM,EAC5BgzD,IAAS,EACTA,GAASH,IAASzwD,EAAIpC,EAAM,EAIhCmH,EAAIiO,EAAM,GAAK29C,IAAS,EACxB5rD,EAAIiO,EAAM,GAAK49C,IAAS,GAG1Bl3D,EAAQo3D,IAAM,SAAaL,EAAKC,EAAK3rD,EAAKiO,GAQxC,IAPA,IAAI29C,EAAO,EACPC,EAAO,EAMFhzD,EAAI,EAAGA,GAAK,EAAGA,IAAK,CAC3B,IAAK,IAAIoC,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B2wD,IAAS,EACTA,GAASD,GAAQ1wD,EAAIpC,EAAM,EAE7B,IAASoC,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B2wD,IAAS,EACTA,GAASF,GAAQzwD,EAAIpC,EAAM,EAG/B,IAASoC,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B2wD,IAAS,EACTA,GAASD,GAAQ1wD,EAAIpC,EAAM,EAO7B,IAASA,EAAI,EAAGA,GAAK,EAAGA,IAAK,CAC3B,IAASoC,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B4wD,IAAS,EACTA,GAASF,GAAQ1wD,EAAIpC,EAAM,EAE7B,IAASoC,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B4wD,IAAS,EACTA,GAASH,GAAQzwD,EAAIpC,EAAM,EAG/B,IAASoC,EAAI,EAAGA,GAAK,GAAIA,GAAK,EAC5B4wD,IAAS,EACTA,GAASH,GAAQzwD,EAAIpC,EAAM,EAG7BmH,EAAIiO,EAAM,GAAK29C,IAAS,EACxB5rD,EAAIiO,EAAM,GAAK49C,IAAS,GAG1Bl3D,EAAQq3D,OAAS,SAAgB/kD,EAAK0U,GACpC,OAAS1U,GAAO0U,EAAS,UAAc1U,IAAS,GAAK0U,GAGvD,IAAIswC,EAAW,CAEb,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAC3B,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GACzB,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAGzB,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GACzB,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EACzB,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAG5Bt3D,EAAQu3D,IAAM,SAAaR,EAAKC,EAAK3rD,EAAKiO,GAKxC,IAJA,IAAI29C,EAAO,EACPC,EAAO,EAEPxzD,EAAM4zD,EAASl2D,SAAW,EACrB8C,EAAI,EAAGA,EAAIR,EAAKQ,IACvB+yD,IAAS,EACTA,GAASF,IAAQO,EAASpzD,GAAM,EAElC,IAASA,EAAIR,EAAKQ,EAAIozD,EAASl2D,OAAQ8C,IACrCgzD,IAAS,EACTA,GAASF,IAAQM,EAASpzD,GAAM,EAGlCmH,EAAIiO,EAAM,GAAK29C,IAAS,EACxB5rD,EAAIiO,EAAM,GAAK49C,IAAS,GAG1Bl3D,EAAQw3D,OAAS,SAAgB3lD,EAAGxG,EAAKiO,GACvC,IAAI29C,EAAO,EACPC,EAAO,EAEXD,GAAa,EAAJplD,IAAU,EAAMA,IAAM,GAC/B,IAAK,IAAI3N,EAAI,GAAIA,GAAK,GAAIA,GAAK,EAC7B+yD,IAAS,EACTA,GAASplD,IAAM3N,EAAK,GAEtB,IAASA,EAAI,GAAIA,GAAK,EAAGA,GAAK,EAC5BgzD,GAASrlD,IAAM3N,EAAK,GACpBgzD,IAAS,EAEXA,IAAc,GAAJrlD,IAAa,EAAMA,IAAM,GAEnCxG,EAAIiO,EAAM,GAAK29C,IAAS,EACxB5rD,EAAIiO,EAAM,GAAK49C,IAAS,GAG1B,IAAIO,EAAS,CACX,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EACpD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClD,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAClD,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAEnD,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAClD,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EACnD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EACpD,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAElD,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GACjD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EACpD,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EACjD,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAEpD,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EACnD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EACnD,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EACpD,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAEjD,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EACpD,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAClD,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GACnD,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAElD,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EACnD,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EACnD,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAClD,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAElD,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GACnD,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAClD,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EACpD,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAEjD,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EACnD,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EACnD,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAClD,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAGpDz3D,EAAQ03D,WAAa,SAAoBX,EAAKC,GAE5C,IADA,IAAI3rD,EAAM,EACDnH,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAI1BmH,IAAQ,EACRA,GAHSosD,EAAW,GAAJvzD,GADP6yD,IAAS,GAAS,EAAJ7yD,EAAU,KAMnC,IAASA,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAI1BmH,IAAQ,EACRA,GAHSosD,EAAO,IAAe,GAAJvzD,GADlB8yD,IAAS,GAAS,EAAJ9yD,EAAU,KAMnC,OAAOmH,IAAQ,GAGjB,IAAIssD,EAAe,CACjB,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GACvD,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAG1D33D,EAAQojB,QAAU,SAAiB9Q,GAEjC,IADA,IAAIjH,EAAM,EACDnH,EAAI,EAAGA,EAAIyzD,EAAav2D,OAAQ8C,IACvCmH,IAAQ,EACRA,GAAQiH,IAAQqlD,EAAazzD,GAAM,EAErC,OAAOmH,IAAQ,GAGjBrL,EAAQ43D,SAAW,SAAkBtlD,EAAK5Q,EAAMm2D,GAE9C,IADA,IAAI3wD,EAAMoL,EAAInO,SAAS,GAChB+C,EAAI9F,OAASM,GAClBwF,EAAM,IAAMA,EAGd,IADA,IAAImE,EAAM,GACDnH,EAAI,EAAGA,EAAIxC,EAAMwC,GAAK2zD,EAC7BxsD,EAAIjE,KAAKF,EAAI5D,MAAMY,EAAGA,EAAI2zD,IAC5B,OAAOxsD,EAAIZ,KAAK,O,6BC5PlB,IAAIiH,EAAS,EAAQ,KACjBiE,EAAW,EAAQ,KAEnB7D,EAAQ,EAAQ,KAChB8hC,EAAS,EAAQ,KAErB,SAASkkB,IACPp1D,KAAKkpB,IAAM,IAAI1gB,MAAM,GACrBxI,KAAKyrB,KAAO,KAGd,SAAS4pC,EAAIxpC,GACXqlB,EAAOjuC,KAAKjD,KAAM6rB,GAElB,IAAI+E,EAAQ,IAAIwkC,EAChBp1D,KAAKs1D,UAAY1kC,EAEjB5wB,KAAKu1D,WAAW3kC,EAAO/E,EAAQvtB,KAEjC2U,EAASoiD,EAAKnkB,GACd7zC,EAAOC,QAAU+3D,EAEjBA,EAAIj4D,OAAS,SAAgByuB,GAC3B,OAAO,IAAIwpC,EAAIxpC,IAGjB,IAAI2pC,EAAa,CACf,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EACrB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGvBH,EAAI33D,UAAU63D,WAAa,SAAoB3kC,EAAOtyB,GACpDsyB,EAAMnF,KAAO,IAAIjjB,MAAM,IAEvBwG,EAAOE,MAAM5Q,EAAII,OAAQsB,KAAKm3B,UAAW,sBAEzC,IAAIs+B,EAAKrmD,EAAMpF,aAAa1L,EAAK,GAC7Bo3D,EAAKtmD,EAAMpF,aAAa1L,EAAK,GAEjC8Q,EAAMslD,IAAIe,EAAIC,EAAI9kC,EAAM1H,IAAK,GAC7BusC,EAAK7kC,EAAM1H,IAAI,GACfwsC,EAAK9kC,EAAM1H,IAAI,GACf,IAAK,IAAI1nB,EAAI,EAAGA,EAAIovB,EAAMnF,KAAK/sB,OAAQ8C,GAAK,EAAG,CAC7C,IAAI8iB,EAAQkxC,EAAWh0D,IAAM,GAC7Bi0D,EAAKrmD,EAAMulD,OAAOc,EAAInxC,GACtBoxC,EAAKtmD,EAAMulD,OAAOe,EAAIpxC,GACtBlV,EAAMylD,IAAIY,EAAIC,EAAI9kC,EAAMnF,KAAMjqB,KAIlC6zD,EAAI33D,UAAU4vB,QAAU,SAAiBqoC,EAAKC,EAAOjtD,EAAKktD,GACxD,IAAIjlC,EAAQ5wB,KAAKs1D,UAEbjoD,EAAI+B,EAAMpF,aAAa2rD,EAAKC,GAC5BzmD,EAAIC,EAAMpF,aAAa2rD,EAAKC,EAAQ,GAGxCxmD,EAAMglD,GAAG/mD,EAAG8B,EAAGyhB,EAAM1H,IAAK,GAC1B7b,EAAIujB,EAAM1H,IAAI,GACd/Z,EAAIyhB,EAAM1H,IAAI,GAEI,YAAdlpB,KAAKoB,KACPpB,KAAK81D,SAASllC,EAAOvjB,EAAG8B,EAAGyhB,EAAM1H,IAAK,GAEtClpB,KAAK+1D,SAASnlC,EAAOvjB,EAAG8B,EAAGyhB,EAAM1H,IAAK,GAExC7b,EAAIujB,EAAM1H,IAAI,GACd/Z,EAAIyhB,EAAM1H,IAAI,GAEd9Z,EAAMhE,cAAczC,EAAK0E,EAAGwoD,GAC5BzmD,EAAMhE,cAAczC,EAAKwG,EAAG0mD,EAAS,IAGvCR,EAAI33D,UAAU67B,KAAO,SAAct7B,EAAQ2Y,GAEzC,IADA,IAAIhZ,EAAQK,EAAOS,OAASkY,EACnBpV,EAAIoV,EAAKpV,EAAIvD,EAAOS,OAAQ8C,IACnCvD,EAAOuD,GAAK5D,EAEd,OAAO,GAGTy3D,EAAI33D,UAAUm0C,OAAS,SAAgB5zC,GAErC,IADA,IAAI+3D,EAAM/3D,EAAOA,EAAOS,OAAS,GACxB8C,EAAIvD,EAAOS,OAASs3D,EAAKx0D,EAAIvD,EAAOS,OAAQ8C,IACnDwN,EAAOE,MAAMjR,EAAOuD,GAAIw0D,GAE1B,OAAO/3D,EAAO2C,MAAM,EAAG3C,EAAOS,OAASs3D,IAGzCX,EAAI33D,UAAUo4D,SAAW,SAAkBllC,EAAOqlC,EAAQC,EAAQvtD,EAAKiO,GAKrE,IAJA,IAAIvJ,EAAI4oD,EACJ9mD,EAAI+mD,EAGC10D,EAAI,EAAGA,EAAIovB,EAAMnF,KAAK/sB,OAAQ8C,GAAK,EAAG,CAC7C,IAAI20D,EAAOvlC,EAAMnF,KAAKjqB,GAClB40D,EAAOxlC,EAAMnF,KAAKjqB,EAAI,GAG1B4N,EAAM0lD,OAAO3lD,EAAGyhB,EAAM1H,IAAK,GAE3BitC,GAAQvlC,EAAM1H,IAAI,GAClBktC,GAAQxlC,EAAM1H,IAAI,GAClB,IAAIjI,EAAI7R,EAAM4lD,WAAWmB,EAAMC,GAG3Bz9C,EAAIxJ,EACRA,GAAK9B,EAHG+B,EAAMsR,QAAQO,MAGN,EAChB5T,EAAIsL,EAINvJ,EAAMqlD,IAAItlD,EAAG9B,EAAG1E,EAAKiO,IAGvBy+C,EAAI33D,UAAUq4D,SAAW,SAAkBnlC,EAAOqlC,EAAQC,EAAQvtD,EAAKiO,GAKrE,IAJA,IAAIvJ,EAAI6oD,EACJ/mD,EAAI8mD,EAGCz0D,EAAIovB,EAAMnF,KAAK/sB,OAAS,EAAG8C,GAAK,EAAGA,GAAK,EAAG,CAClD,IAAI20D,EAAOvlC,EAAMnF,KAAKjqB,GAClB40D,EAAOxlC,EAAMnF,KAAKjqB,EAAI,GAG1B4N,EAAM0lD,OAAOznD,EAAGujB,EAAM1H,IAAK,GAE3BitC,GAAQvlC,EAAM1H,IAAI,GAClBktC,GAAQxlC,EAAM1H,IAAI,GAClB,IAAIjI,EAAI7R,EAAM4lD,WAAWmB,EAAMC,GAG3Bz9C,EAAItL,EACRA,GAAK8B,EAHGC,EAAMsR,QAAQO,MAGN,EAChB9R,EAAIwJ,EAINvJ,EAAMqlD,IAAIpnD,EAAG8B,EAAGxG,EAAKiO,K,gBC5IvB,IAAIuD,EAAM,EAAQ,KACdjc,EAAS,EAAQ,KAAeA,OAChCm4D,EAAS,EAAQ,KAErB,SAASC,EAAU7+C,GACjB,IAAI9O,EAAM8O,EAAK8+C,QAAQ93B,gBAAgBhnB,EAAK++C,OAE5C,OADAH,EAAO5+C,EAAK++C,OACL7tD,EAITrL,EAAQm5D,QAAU,SAAUh/C,EAAM2jB,GAChC,IAAIs7B,EAAWpxD,KAAKqR,KAAKykB,EAAM18B,OAFjB,IAGVsD,EAAQyV,EAAKk/C,OAAOj4D,OACxB+Y,EAAKk/C,OAASz4D,EAAOkJ,OAAO,CAC1BqQ,EAAKk/C,OACLz4D,EAAOW,YANK,GAMO63D,KAErB,IAAK,IAAIl1D,EAAI,EAAGA,EAAIk1D,EAAUl1D,IAAK,CACjC,IAAImH,EAAM2tD,EAAS7+C,GACf3T,EAAS9B,EAVD,GAUSR,EACrBiW,EAAKk/C,OAAOvrD,cAAczC,EAAI,GAAI7E,EAAS,GAC3C2T,EAAKk/C,OAAOvrD,cAAczC,EAAI,GAAI7E,EAAS,GAC3C2T,EAAKk/C,OAAOvrD,cAAczC,EAAI,GAAI7E,EAAS,GAC3C2T,EAAKk/C,OAAOvrD,cAAczC,EAAI,GAAI7E,EAAS,IAE7C,IAAIkyD,EAAMv+C,EAAKk/C,OAAO/1D,MAAM,EAAGw6B,EAAM18B,QAErC,OADA+Y,EAAKk/C,OAASl/C,EAAKk/C,OAAO/1D,MAAMw6B,EAAM18B,QAC/Byb,EAAIihB,EAAO46B,K,cCdpB34D,EAAOC,QAdP,SAAiB6hC,GAGf,IAFA,IACItF,EADA74B,EAAMm+B,EAAGzgC,OAENsC,KAAO,CAEZ,GAAa,OADb64B,EAAOsF,EAAGt1B,UAAU7I,IAGb,CACL64B,IACAsF,EAAGp0B,WAAW8uB,EAAM74B,GACpB,MAJAm+B,EAAGp0B,WAAW,EAAG/J,M,4lECNvB,IAAI41D,EAAM,EAAQ,KACd14D,EAAS,EAAQ,KAAeA,OAChCsuB,EAAY,EAAQ,KACpBvZ,EAAW,EAAQ,KACnB4jD,EAAQ,EAAQ,KAChB18C,EAAM,EAAQ,KACdk8C,EAAS,EAAQ,KAqCrB,SAASS,EAActyC,EAAMlmB,EAAK6gC,EAAIkF,GACpC7X,EAAUvpB,KAAKjD,MAEf,IAAIwjB,EAAItlB,EAAOU,MAAM,EAAG,GAExBoB,KAAKu2D,QAAU,IAAIK,EAAIh5B,IAAIt/B,GAC3B,IAAIy4D,EAAK/2D,KAAKu2D,QAAQ73B,aAAalb,GACnCxjB,KAAKg3D,OAAS,IAAIH,EAAME,GACxB53B,EA/BF,SAAiB1nB,EAAM0nB,EAAI43B,GACzB,GAAkB,KAAd53B,EAAGzgC,OAEL,OADA+Y,EAAKw/C,OAAS/4D,EAAOkJ,OAAO,CAAC+3B,EAAIjhC,EAAOS,KAAK,CAAC,EAAG,EAAG,EAAG,MAChDT,EAAOkJ,OAAO,CAAC+3B,EAAIjhC,EAAOS,KAAK,CAAC,EAAG,EAAG,EAAG,MAElD,IAAIu4D,EAAQ,IAAIL,EAAME,GAClB/1D,EAAMm+B,EAAGzgC,OACTy4D,EAAQn2D,EAAM,GAClBk2D,EAAMhqC,OAAOiS,GACTg4B,IACFA,EAAQ,GAAKA,EACbD,EAAMhqC,OAAOhvB,EAAOU,MAAMu4D,EAAO,KAEnCD,EAAMhqC,OAAOhvB,EAAOU,MAAM,EAAG,IAC7B,IAAIw4D,EAAe,EAANp2D,EACTmxD,EAAOj0D,EAAOU,MAAM,GACxBuzD,EAAKrnD,YAAYssD,EAAQ,EAAG,GAC5BF,EAAMhqC,OAAOilC,GACb16C,EAAKw/C,OAASC,EAAMtmC,MACpB,IAAIjoB,EAAMzK,EAAOS,KAAK8Y,EAAKw/C,QAE3B,OADAZ,EAAO1tD,GACAA,EAUF0uD,CAAOr3D,KAAMm/B,EAAI43B,GAEtB/2D,KAAKw2D,MAAQt4D,EAAOS,KAAKwgC,GACzBn/B,KAAK22D,OAASz4D,EAAOW,YAAY,GACjCmB,KAAKs3D,UAAYp5D,EAAOW,YAAY,GACpCmB,KAAK+1D,SAAW1xB,EAChBrkC,KAAKu3D,MAAQ,EACbv3D,KAAKw3B,KAAO,EACZx3B,KAAKw3D,MAAQhzC,EAEbxkB,KAAKy3D,SAAW,KAChBz3D,KAAK03D,SAAU,EAGjBzkD,EAAS6jD,EAActqC,GAEvBsqC,EAAap5D,UAAU4vB,QAAU,SAAU8N,GACzC,IAAKp7B,KAAK03D,SAAW13D,KAAKu3D,MAAO,CAC/B,IAAII,EAAO,GAAM33D,KAAKu3D,MAAQ,GAC1BI,EAAO,KACTA,EAAOz5D,EAAOU,MAAM+4D,EAAM,GAC1B33D,KAAKg3D,OAAO9pC,OAAOyqC,IAIvB33D,KAAK03D,SAAU,EACf,IAAI/uD,EAAM3I,KAAKw3D,MAAMf,QAAQz2D,KAAMo7B,GAOnC,OANIp7B,KAAK+1D,SACP/1D,KAAKg3D,OAAO9pC,OAAOkO,GAEnBp7B,KAAKg3D,OAAO9pC,OAAOvkB,GAErB3I,KAAKw3B,MAAQ4D,EAAM18B,OACZiK,GAGTmuD,EAAap5D,UAAUovB,OAAS,WAC9B,GAAI9sB,KAAK+1D,WAAa/1D,KAAKy3D,SAAU,MAAM,IAAIx3D,MAAM,oDAErD,IAAIwjC,EAAMtpB,EAAIna,KAAKg3D,OAAOnqC,MAAmB,EAAb7sB,KAAKu3D,MAAuB,EAAZv3D,KAAKw3B,MAAWx3B,KAAKu2D,QAAQ73B,aAAa1+B,KAAKi3D,SAC/F,GAAIj3D,KAAK+1D,UAnFX,SAAkB9uD,EAAGxE,GACnB,IAAIkG,EAAM,EACN1B,EAAEvI,SAAW+D,EAAE/D,QAAQiK,IAG3B,IADA,IAAI3H,EAAMsE,KAAKC,IAAI0B,EAAEvI,OAAQ+D,EAAE/D,QACtB8C,EAAI,EAAGA,EAAIR,IAAOQ,EACzBmH,GAAQ1B,EAAEzF,GAAKiB,EAAEjB,GAGnB,OAAOmH,EA0EcivD,CAAQn0B,EAAKzjC,KAAKy3D,UAAW,MAAM,IAAIx3D,MAAM,oDAElED,KAAKy3D,SAAWh0B,EAChBzjC,KAAKu2D,QAAQ13B,SAGfi4B,EAAap5D,UAAU+vB,WAAa,WAClC,GAAIztB,KAAK+1D,WAAa73D,EAAO6C,SAASf,KAAKy3D,UAAW,MAAM,IAAIx3D,MAAM,mDAEtE,OAAOD,KAAKy3D,UAGdX,EAAap5D,UAAUgwB,WAAa,SAAqB+V,GACvD,IAAKzjC,KAAK+1D,SAAU,MAAM,IAAI91D,MAAM,mDAEpCD,KAAKy3D,SAAWh0B,GAGlBqzB,EAAap5D,UAAUiwB,OAAS,SAAiBxuB,GAC/C,GAAIa,KAAK03D,QAAS,MAAM,IAAIz3D,MAAM,8CAElCD,KAAKg3D,OAAO9pC,OAAO/tB,GACnBa,KAAKu3D,OAASp4D,EAAIT,QAGpBrB,EAAOC,QAAUw5D,G,gBCpHjB,IAAIF,EAAM,EAAQ,KACd14D,EAAS,EAAQ,KAAeA,OAChCsuB,EAAY,EAAQ,KAGxB,SAASsqC,EAActyC,EAAMlmB,EAAK6gC,EAAIkF,GACpC7X,EAAUvpB,KAAKjD,MAEfA,KAAKu2D,QAAU,IAAIK,EAAIh5B,IAAIt/B,GAC3B0B,KAAKw2D,MAAQt4D,EAAOS,KAAKwgC,GACzBn/B,KAAK22D,OAASz4D,EAAOW,YAAY,GACjCmB,KAAKs3D,UAAYp5D,EAAOW,YAAY,GACpCmB,KAAK+1D,SAAW1xB,EAChBrkC,KAAKw3D,MAAQhzC,EAVA,EAAQ,IAavBvR,CAAS6jD,EAActqC,GAEvBsqC,EAAap5D,UAAU4vB,QAAU,SAAU8N,GACzC,OAAOp7B,KAAKw3D,MAAMf,QAAQz2D,KAAMo7B,EAAOp7B,KAAK+1D,WAG9Ce,EAAap5D,UAAUovB,OAAS,WAC9B9sB,KAAKu2D,QAAQ13B,SAGfxhC,EAAOC,QAAUw5D,G,gBC1BjB,IAAIvjB,EAAc,EAAQ,KAC1Bl2C,EAAOC,QAAUu6D,EACjBA,EAAUC,YAAcA,EACxBD,EAAUE,WAAaA,EACvB,IAAI1oD,EAAK,EAAQ,KACb2oD,EAAa,IAAI3oD,EAAG,IAEpB4oD,EAAc,IADA,EAAQ,MAEtBC,EAAM,IAAI7oD,EAAG,GACb8oD,EAAM,IAAI9oD,EAAG,GACb+oD,EAAO,IAAI/oD,EAAG,GAGdgpD,GAFU,IAAIhpD,EAAG,IACT,IAAIA,EAAG,GACT,IAAIA,EAAG,KACbipD,EAAQ,IAAIjpD,EAAG,GAEfkpD,GADQ,IAAIlpD,EAAG,GACN,IAAIA,EAAG,KAChBmpD,EAAO,IAAInpD,EAAG,GAEduZ,GADS,IAAIvZ,EAAG,IACP,MAEb,SAASopD,IACP,GAAe,OAAX7vC,EACF,OAAOA,EAET,IACIpjB,EAAM,GACVA,EAAI,GAAK,EACT,IAAK,IAAIhE,EAAI,EAAG0O,EAAI,EAAGA,EAHX,QAGsBA,GAAK,EAAG,CAExC,IADA,IAAIsY,EAAOljB,KAAKqR,KAAKrR,KAAKkjB,KAAKtY,IACtBtM,EAAI,EAAGA,EAAIpC,GAAKgE,EAAI5B,IAAM4kB,GAC7BtY,EAAI1K,EAAI5B,IAAO,EADoBA,KAIrCpC,IAAMoC,GAAK4B,EAAI5B,IAAM4kB,IAGzBhjB,EAAIhE,KAAO0O,GAGb,OADA0Y,EAASpjB,EACFA,EAGT,SAASsyD,EAAYvkD,GAGnB,IAFA,IAAIqV,EAAS6vC,IAEJj3D,EAAI,EAAGA,EAAIonB,EAAOlqB,OAAQ8C,IACjC,GAA0B,IAAtB+R,EAAE0E,KAAK2Q,EAAOpnB,IAChB,OAA0B,IAAtB+R,EAAEvC,KAAK4X,EAAOpnB,IAOtB,OAAO,EAGT,SAASu2D,EAAWxkD,GAClB,IAAIuC,EAAMzG,EAAG2b,KAAKzX,GAClB,OAA8D,IAAvD4kD,EAAI/wC,MAAMtR,GAAK6S,OAAOpV,EAAE4Q,KAAK,IAAIqD,UAAUxW,KAAK,GAGzD,SAAS6mD,EAAU/nD,EAAM4oD,GACvB,GAAI5oD,EAAO,GAET,OACS,IAAIT,EADD,IAARqpD,GAAqB,IAARA,EACD,CAAC,IAAM,KAEP,CAAC,IAAM,KAKzB,IAAI9oD,EAAK+oD,EAET,IAJAD,EAAM,IAAIrpD,EAAGqpD,KAIA,CAEX,IADA9oD,EAAM,IAAIP,EAAGkkC,EAAYjuC,KAAKqR,KAAK7G,EAAO,KACnCF,EAAII,YAAcF,GACvBF,EAAI+T,MAAM,GAQZ,GANI/T,EAAIgW,UACNhW,EAAI8K,KAAKw9C,GAENtoD,EAAIwJ,MAAM,IACbxJ,EAAI8K,KAAKy9C,GAENO,EAAIriD,IAAI8hD,IAIN,IAAKO,EAAIriD,IAAI+hD,GAClB,KAAOxoD,EAAIS,IAAIgoD,GAAKhiD,IAAIiiD,IACtB1oD,EAAI8K,KAAK89C,QALX,KAAO5oD,EAAIS,IAAI2nD,GAAY3hD,IAAIkiD,IAC7B3oD,EAAI8K,KAAK89C,GAQb,GAAIV,EADJa,EAAK/oD,EAAIkU,KAAK,KACSg0C,EAAYloD,IACjCmoD,EAAWY,IAAOZ,EAAWnoD,IAC7BqoD,EAAYxf,KAAKkgB,IAAOV,EAAYxf,KAAK7oC,GACzC,OAAOA,K,iBCpGb,2BACE,aAGA,SAASZ,EAAQ7N,EAAK8N,GACpB,IAAK9N,EAAK,MAAM,IAAIlB,MAAMgP,GAAO,oBAKnC,SAASgE,EAAU1V,EAAMC,GACvBD,EAAKE,OAASD,EACd,IAAIQ,EAAW,aACfA,EAASN,UAAYF,EAAUE,UAC/BH,EAAKG,UAAY,IAAIM,EACrBT,EAAKG,UAAUC,YAAcJ,EAK/B,SAAS8R,EAAIoG,EAAQC,EAAMjC,GACzB,GAAIpE,EAAGsG,KAAKF,GACV,OAAOA,EAGTzV,KAAK4V,SAAW,EAChB5V,KAAK6V,MAAQ,KACb7V,KAAKtB,OAAS,EAGdsB,KAAK8V,IAAM,KAEI,OAAXL,IACW,OAATC,GAA0B,OAATA,IACnBjC,EAASiC,EACTA,EAAO,IAGT1V,KAAK+V,MAAMN,GAAU,EAAGC,GAAQ,GAAIjC,GAAU,OAYlD,IAAIvV,EATkB,iBAAXb,EACTA,EAAOC,QAAU+R,EAEjB/R,EAAQ+R,GAAKA,EAGfA,EAAGA,GAAKA,EACRA,EAAG2G,SAAW,GAGd,IACE9X,EAAS,EAAQ,KAAUA,OAC3B,MAAOsI,IAoIT,SAASyP,EAAUzR,EAAKxC,EAAOC,GAG7B,IAFA,IAAIkN,EAAI,EACJnO,EAAMsE,KAAKC,IAAIf,EAAI9F,OAAQuD,GACtBT,EAAIQ,EAAOR,EAAIR,EAAKQ,IAAK,CAChC,IAAIyD,EAAIT,EAAIG,WAAWnD,GAAK,GAE5B2N,IAAM,EAIJA,GADElK,GAAK,IAAMA,GAAK,GACbA,EAAI,GAAK,GAGLA,GAAK,IAAMA,GAAK,GACpBA,EAAI,GAAK,GAIL,GAAJA,EAGT,OAAOkK,EAiCT,SAAS+G,EAAW1R,EAAKxC,EAAOC,EAAK0H,GAGnC,IAFA,IAAIwF,EAAI,EACJnO,EAAMsE,KAAKC,IAAIf,EAAI9F,OAAQuD,GACtBT,EAAIQ,EAAOR,EAAIR,EAAKQ,IAAK,CAChC,IAAIyD,EAAIT,EAAIG,WAAWnD,GAAK,GAE5B2N,GAAKxF,EAIHwF,GADElK,GAAK,GACFA,EAAI,GAAK,GAGLA,GAAK,GACTA,EAAI,GAAK,GAITA,EAGT,OAAOkK,EA5MTE,EAAGsG,KAAO,SAAe/F,GACvB,OAAIA,aAAeP,GAIJ,OAARO,GAA+B,iBAARA,GAC5BA,EAAIjS,YAAYqY,WAAa3G,EAAG2G,UAAYxN,MAAMhJ,QAAQoQ,EAAIiG,QAGlExG,EAAGxH,IAAM,SAAcsO,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGT/G,EAAG9J,IAAM,SAAc4Q,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGT/G,EAAG3R,UAAUqY,MAAQ,SAAeN,EAAQC,EAAMjC,GAChD,GAAsB,iBAAXgC,EACT,OAAOzV,KAAKsW,YAAYb,EAAQC,EAAMjC,GAGxC,GAAsB,iBAAXgC,EACT,OAAOzV,KAAKuW,WAAWd,EAAQC,EAAMjC,GAG1B,QAATiC,IACFA,EAAO,IAET1G,EAAO0G,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,IAGnD,IAAI1T,EAAQ,EACM,OAFlByT,EAASA,EAAOhU,WAAWiL,QAAQ,OAAQ,KAEhC,IACT1K,IAGW,KAAT0T,EACF1V,KAAKwW,UAAUf,EAAQzT,GAEvBhC,KAAKyW,WAAWhB,EAAQC,EAAM1T,GAGd,MAAdyT,EAAO,KACTzV,KAAK4V,SAAW,GAGlB5V,KAAK0W,QAEU,OAAXjD,GAEJzT,KAAKuW,WAAWvW,KAAKwP,UAAWkG,EAAMjC,IAGxCpE,EAAG3R,UAAU4Y,YAAc,SAAsBb,EAAQC,EAAMjC,GACzDgC,EAAS,IACXzV,KAAK4V,SAAW,EAChBH,GAAUA,GAERA,EAAS,UACXzV,KAAK6V,MAAQ,CAAW,SAATJ,GACfzV,KAAKtB,OAAS,GACL+W,EAAS,kBAClBzV,KAAK6V,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,UAEzBzV,KAAKtB,OAAS,IAEdsQ,EAAOyG,EAAS,kBAChBzV,KAAK6V,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,SACvB,GAEFzV,KAAKtB,OAAS,GAGD,OAAX+U,GAGJzT,KAAKuW,WAAWvW,KAAKwP,UAAWkG,EAAMjC,IAGxCpE,EAAG3R,UAAU6Y,WAAa,SAAqBd,EAAQC,EAAMjC,GAG3D,GADAzE,EAAgC,iBAAlByG,EAAO/W,QACjB+W,EAAO/W,QAAU,EAGnB,OAFAsB,KAAK6V,MAAQ,CAAE,GACf7V,KAAKtB,OAAS,EACPsB,KAGTA,KAAKtB,OAAS4G,KAAKqR,KAAKlB,EAAO/W,OAAS,GACxCsB,KAAK6V,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BxB,KAAK6V,MAAMrU,GAAK,EAGlB,IAAIoC,EAAGiM,EACH+G,EAAM,EACV,GAAe,OAAXnD,EACF,IAAKjS,EAAIiU,EAAO/W,OAAS,EAAGkF,EAAI,EAAGpC,GAAK,EAAGA,GAAK,EAC9CqO,EAAI4F,EAAOjU,GAAMiU,EAAOjU,EAAI,IAAM,EAAMiU,EAAOjU,EAAI,IAAM,GACzDxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,GAAMiM,IAAO,GAAK+G,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACPhT,UAGC,GAAe,OAAX6P,EACT,IAAKjS,EAAI,EAAGoC,EAAI,EAAGpC,EAAIiU,EAAO/W,OAAQ8C,GAAK,EACzCqO,EAAI4F,EAAOjU,GAAMiU,EAAOjU,EAAI,IAAM,EAAMiU,EAAOjU,EAAI,IAAM,GACzDxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,GAAMiM,IAAO,GAAK+G,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACPhT,KAIN,OAAO5D,KAAK0W,SA2BdrH,EAAG3R,UAAU8Y,UAAY,SAAoBf,EAAQzT,GAEnDhC,KAAKtB,OAAS4G,KAAKqR,MAAMlB,EAAO/W,OAASsD,GAAS,GAClDhC,KAAK6V,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BxB,KAAK6V,MAAMrU,GAAK,EAGlB,IAAIoC,EAAGiM,EAEH+G,EAAM,EACV,IAAKpV,EAAIiU,EAAO/W,OAAS,EAAGkF,EAAI,EAAGpC,GAAKQ,EAAOR,GAAK,EAClDqO,EAAIoG,EAASR,EAAQjU,EAAGA,EAAI,GAC5BxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAE9B5W,KAAK6V,MAAMjS,EAAI,IAAMiM,IAAO,GAAK+G,EAAO,SACxCA,GAAO,KACI,KACTA,GAAO,GACPhT,KAGApC,EAAI,IAAMQ,IACZ6N,EAAIoG,EAASR,EAAQzT,EAAOR,EAAI,GAChCxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,IAAMiM,IAAO,GAAK+G,EAAO,SAE1C5W,KAAK0W,SA2BPrH,EAAG3R,UAAU+Y,WAAa,SAAqBhB,EAAQC,EAAM1T,GAE3DhC,KAAK6V,MAAQ,CAAE,GACf7V,KAAKtB,OAAS,EAGd,IAAK,IAAImY,EAAU,EAAGC,EAAU,EAAGA,GAAW,SAAWA,GAAWpB,EAClEmB,IAEFA,IACAC,EAAWA,EAAUpB,EAAQ,EAO7B,IALA,IAAIqB,EAAQtB,EAAO/W,OAASsD,EACxBqO,EAAM0G,EAAQF,EACd5U,EAAMqD,KAAKC,IAAIwR,EAAOA,EAAQ1G,GAAOrO,EAErCoR,EAAO,EACF5R,EAAIQ,EAAOR,EAAIS,EAAKT,GAAKqV,EAChCzD,EAAO8C,EAAUT,EAAQjU,EAAGA,EAAIqV,EAASnB,GAEzC1V,KAAKgX,MAAMF,GACP9W,KAAK6V,MAAM,GAAKzC,EAAO,SACzBpT,KAAK6V,MAAM,IAAMzC,EAEjBpT,KAAKiX,OAAO7D,GAIhB,GAAY,IAAR/C,EAAW,CACb,IAAInG,EAAM,EAGV,IAFAkJ,EAAO8C,EAAUT,EAAQjU,EAAGiU,EAAO/W,OAAQgX,GAEtClU,EAAI,EAAGA,EAAI6O,EAAK7O,IACnB0I,GAAOwL,EAGT1V,KAAKgX,MAAM9M,GACPlK,KAAK6V,MAAM,GAAKzC,EAAO,SACzBpT,KAAK6V,MAAM,IAAMzC,EAEjBpT,KAAKiX,OAAO7D,KAKlB/D,EAAG3R,UAAUwD,KAAO,SAAegW,GACjCA,EAAKrB,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/B0V,EAAKrB,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAE7B0V,EAAKxY,OAASsB,KAAKtB,OACnBwY,EAAKtB,SAAW5V,KAAK4V,SACrBsB,EAAKpB,IAAM9V,KAAK8V,KAGlBzG,EAAG3R,UAAUyS,MAAQ,WACnB,IAAIhB,EAAI,IAAIE,EAAG,MAEf,OADArP,KAAKkB,KAAKiO,GACHA,GAGTE,EAAG3R,UAAUyZ,QAAU,SAAkBnY,GACvC,KAAOgB,KAAKtB,OAASM,GACnBgB,KAAK6V,MAAM7V,KAAKtB,UAAY,EAE9B,OAAOsB,MAITqP,EAAG3R,UAAUgZ,MAAQ,WACnB,KAAO1W,KAAKtB,OAAS,GAAqC,IAAhCsB,KAAK6V,MAAM7V,KAAKtB,OAAS,IACjDsB,KAAKtB,SAEP,OAAOsB,KAAKoX,aAGd/H,EAAG3R,UAAU0Z,UAAY,WAKvB,OAHoB,IAAhBpX,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,KAClC7V,KAAK4V,SAAW,GAEX5V,MAGTqP,EAAG3R,UAAUkK,QAAU,WACrB,OAAQ5H,KAAK8V,IAAM,UAAY,SAAW9V,KAAKyB,SAAS,IAAM,KAiChE,IAAI4V,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UAsjB9D,SAASC,EAAYC,EAAM7H,EAAKjH,GAC9BA,EAAIiN,SAAWhG,EAAIgG,SAAW6B,EAAK7B,SACnC,IAAI5U,EAAOyW,EAAK/Y,OAASkR,EAAIlR,OAAU,EACvCiK,EAAIjK,OAASsC,EACbA,EAAOA,EAAM,EAAK,EAGlB,IAAIiG,EAAoB,EAAhBwQ,EAAK5B,MAAM,GACfpT,EAAmB,EAAfmN,EAAIiG,MAAM,GACd1G,EAAIlI,EAAIxE,EAER0C,EAAS,SAAJgK,EACL4F,EAAS5F,EAAI,SAAa,EAC9BxG,EAAIkN,MAAM,GAAK1Q,EAEf,IAAK,IAAI+K,EAAI,EAAGA,EAAIlP,EAAKkP,IAAK,CAM5B,IAHA,IAAIwH,EAAS3C,IAAU,GACnB4C,EAAgB,SAAR5C,EACR6C,EAAOtS,KAAKC,IAAI2K,EAAGN,EAAIlR,OAAS,GAC3BkF,EAAI0B,KAAKuC,IAAI,EAAGqI,EAAIuH,EAAK/Y,OAAS,GAAIkF,GAAKgU,EAAMhU,IAAK,CAC7D,IAAIpC,EAAK0O,EAAItM,EAAK,EAIlB8T,IADAvI,GAFAlI,EAAoB,EAAhBwQ,EAAK5B,MAAMrU,KACfiB,EAAmB,EAAfmN,EAAIiG,MAAMjS,IACF+T,GACG,SAAa,EAC5BA,EAAY,SAAJxI,EAEVxG,EAAIkN,MAAM3F,GAAa,EAARyH,EACf5C,EAAiB,EAAT2C,EAQV,OANc,IAAV3C,EACFpM,EAAIkN,MAAM3F,GAAa,EAAR6E,EAEfpM,EAAIjK,SAGCiK,EAAI+N,QAzlBbrH,EAAG3R,UAAU+D,SAAW,SAAmBiU,EAAMmC,GAI/C,IAAIlP,EACJ,GAHAkP,EAAoB,EAAVA,GAAe,EAGZ,MAJbnC,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjC/M,EAAM,GAGN,IAFA,IAAIiO,EAAM,EACN7B,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIqO,EAAI7P,KAAK6V,MAAMrU,GACf4R,GAA+B,UAArBvD,GAAK+G,EAAO7B,IAAmBtT,SAAS,IAGpDkH,EADY,KADdoM,EAASlF,IAAO,GAAK+G,EAAQ,WACVpV,IAAMxB,KAAKtB,OAAS,EAC/B2Y,EAAM,EAAIjE,EAAK1U,QAAU0U,EAAOzK,EAEhCyK,EAAOzK,GAEfiO,GAAO,IACI,KACTA,GAAO,GACPpV,KAMJ,IAHc,IAAVuT,IACFpM,EAAMoM,EAAMtT,SAAS,IAAMkH,GAEtBA,EAAIjK,OAASmZ,GAAY,GAC9BlP,EAAM,IAAMA,EAKd,OAHsB,IAAlB3I,KAAK4V,WACPjN,EAAM,IAAMA,GAEPA,EAGT,GAAI+M,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,GAAI,CAElD,IAAIoC,EAAYR,EAAW5B,GAEvBqC,EAAYR,EAAW7B,GAC3B/M,EAAM,GACN,IAAI1D,EAAIjF,KAAKmQ,QAEb,IADAlL,EAAE2Q,SAAW,GACL3Q,EAAE+S,UAAU,CAClB,IAAI7I,EAAIlK,EAAEgT,KAAKF,GAAWtW,SAASiU,GAMjC/M,GALF1D,EAAIA,EAAEiT,MAAMH,IAELC,SAGC7I,EAAIxG,EAFJ0O,EAAMS,EAAY3I,EAAEzQ,QAAUyQ,EAAIxG,EAQ5C,IAHI3I,KAAKgY,WACPrP,EAAM,IAAMA,GAEPA,EAAIjK,OAASmZ,GAAY,GAC9BlP,EAAM,IAAMA,EAKd,OAHsB,IAAlB3I,KAAK4V,WACPjN,EAAM,IAAMA,GAEPA,EAGTqG,GAAO,EAAO,oCAGhBK,EAAG3R,UAAUya,SAAW,WACtB,IAAIzP,EAAM1I,KAAK6V,MAAM,GASrB,OARoB,IAAhB7V,KAAKtB,OACPgK,GAAuB,SAAhB1I,KAAK6V,MAAM,GACO,IAAhB7V,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,GAEzCnN,GAAO,iBAAoC,SAAhB1I,KAAK6V,MAAM,GAC7B7V,KAAKtB,OAAS,GACvBsQ,GAAO,EAAO,8CAEU,IAAlBhP,KAAK4V,UAAmBlN,EAAMA,GAGxC2G,EAAG3R,UAAU6K,OAAS,WACpB,OAAOvI,KAAKyB,SAAS,KAGvB4N,EAAG3R,UAAU0a,SAAW,SAAmB3E,EAAQ/U,GAEjD,OADAsQ,OAAyB,IAAX9Q,GACP8B,KAAKqY,YAAYna,EAAQuV,EAAQ/U,IAG1C2Q,EAAG3R,UAAU8R,QAAU,SAAkBiE,EAAQ/U,GAC/C,OAAOsB,KAAKqY,YAAY7P,MAAOiL,EAAQ/U,IAGzC2Q,EAAG3R,UAAU2a,YAAc,SAAsBC,EAAW7E,EAAQ/U,GAClE,IAAI2B,EAAaL,KAAKK,aAClBkY,EAAY7Z,GAAU4G,KAAKuC,IAAI,EAAGxH,GACtC2O,EAAO3O,GAAckY,EAAW,yCAChCvJ,EAAOuJ,EAAY,EAAG,+BAEtBvY,KAAK0W,QACL,IAGIjU,EAAGjB,EAHH0H,EAA0B,OAAXuK,EACfjO,EAAM,IAAI8S,EAAUC,GAGpBC,EAAIxY,KAAKmQ,QACb,GAAKjH,EAYE,CACL,IAAK1H,EAAI,GAAIgX,EAAER,SAAUxW,IACvBiB,EAAI+V,EAAElI,MAAM,KACZkI,EAAE/H,OAAO,GAETjL,EAAIhE,GAAKiB,EAGX,KAAOjB,EAAI+W,EAAW/W,IACpBgE,EAAIhE,GAAK,MArBM,CAEjB,IAAKA,EAAI,EAAGA,EAAI+W,EAAYlY,EAAYmB,IACtCgE,EAAIhE,GAAK,EAGX,IAAKA,EAAI,GAAIgX,EAAER,SAAUxW,IACvBiB,EAAI+V,EAAElI,MAAM,KACZkI,EAAE/H,OAAO,GAETjL,EAAI+S,EAAY/W,EAAI,GAAKiB,EAe7B,OAAO+C,GAGLF,KAAKmT,MACPpJ,EAAG3R,UAAUgb,WAAa,SAAqB7I,GAC7C,OAAO,GAAKvK,KAAKmT,MAAM5I,IAGzBR,EAAG3R,UAAUgb,WAAa,SAAqB7I,GAC7C,IAAI8I,EAAI9I,EACJV,EAAI,EAiBR,OAhBIwJ,GAAK,OACPxJ,GAAK,GACLwJ,KAAO,IAELA,GAAK,KACPxJ,GAAK,EACLwJ,KAAO,GAELA,GAAK,IACPxJ,GAAK,EACLwJ,KAAO,GAELA,GAAK,IACPxJ,GAAK,EACLwJ,KAAO,GAEFxJ,EAAIwJ,GAIftJ,EAAG3R,UAAUkb,UAAY,SAAoB/I,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAI8I,EAAI9I,EACJV,EAAI,EAoBR,OAnBqB,IAAZ,KAAJwJ,KACHxJ,GAAK,GACLwJ,KAAO,IAEU,IAAV,IAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,GAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,EAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,EAAJA,IACHxJ,IAEKA,GAITE,EAAG3R,UAAUsS,UAAY,WACvB,IAAIH,EAAI7P,KAAK6V,MAAM7V,KAAKtB,OAAS,GAC7BwG,EAAKlF,KAAK0Y,WAAW7I,GACzB,OAA2B,IAAnB7P,KAAKtB,OAAS,GAAUwG,GAiBlCmK,EAAG3R,UAAUmb,SAAW,WACtB,GAAI7Y,KAAKgY,SAAU,OAAO,EAG1B,IADA,IAAI7I,EAAI,EACC3N,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIiB,EAAIzC,KAAK4Y,UAAU5Y,KAAK6V,MAAMrU,IAElC,GADA2N,GAAK1M,EACK,KAANA,EAAU,MAEhB,OAAO0M,GAGTE,EAAG3R,UAAU2C,WAAa,WACxB,OAAOiF,KAAKqR,KAAK3W,KAAKgQ,YAAc,IAGtCX,EAAG3R,UAAUob,OAAS,SAAiBC,GACrC,OAAsB,IAAlB/Y,KAAK4V,SACA5V,KAAKgZ,MAAMC,MAAMF,GAAOG,MAAM,GAEhClZ,KAAKmQ,SAGdd,EAAG3R,UAAUyb,SAAW,SAAmBJ,GACzC,OAAI/Y,KAAKoZ,MAAML,EAAQ,GACd/Y,KAAKqZ,KAAKN,GAAOG,MAAM,GAAGI,OAE5BtZ,KAAKmQ,SAGdd,EAAG3R,UAAU6b,MAAQ,WACnB,OAAyB,IAAlBvZ,KAAK4V,UAIdvG,EAAG3R,UAAU8b,IAAM,WACjB,OAAOxZ,KAAKmQ,QAAQmJ,QAGtBjK,EAAG3R,UAAU4b,KAAO,WAKlB,OAJKtZ,KAAKgY,WACRhY,KAAK4V,UAAY,GAGZ5V,MAITqP,EAAG3R,UAAU+b,KAAO,SAAe7J,GACjC,KAAO5P,KAAKtB,OAASkR,EAAIlR,QACvBsB,KAAK6V,MAAM7V,KAAKtB,UAAY,EAG9B,IAAK,IAAI8C,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAC9BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAAKoO,EAAIiG,MAAMrU,GAG5C,OAAOxB,KAAK0W,SAGdrH,EAAG3R,UAAUgc,IAAM,SAAc9J,GAE/B,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAKyZ,KAAK7J,IAInBP,EAAG3R,UAAUic,GAAK,SAAa/J,GAC7B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQuJ,IAAI9J,GAC/CA,EAAIO,QAAQuJ,IAAI1Z,OAGzBqP,EAAG3R,UAAUkc,IAAM,SAAchK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQsJ,KAAK7J,GAChDA,EAAIO,QAAQsJ,KAAKzZ,OAI1BqP,EAAG3R,UAAUmc,MAAQ,SAAgBjK,GAEnC,IAAInN,EAEFA,EADEzC,KAAKtB,OAASkR,EAAIlR,OAChBkR,EAEA5P,KAGN,IAAK,IAAIwB,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAAKoO,EAAIiG,MAAMrU,GAK5C,OAFAxB,KAAKtB,OAAS+D,EAAE/D,OAETsB,KAAK0W,SAGdrH,EAAG3R,UAAUoc,KAAO,SAAelK,GAEjC,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAK6Z,MAAMjK,IAIpBP,EAAG3R,UAAUqc,IAAM,SAAcnK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ2J,KAAKlK,GAChDA,EAAIO,QAAQ2J,KAAK9Z,OAG1BqP,EAAG3R,UAAUsc,KAAO,SAAepK,GACjC,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ0J,MAAMjK,GACjDA,EAAIO,QAAQ0J,MAAM7Z,OAI3BqP,EAAG3R,UAAUuc,MAAQ,SAAgBrK,GAEnC,IAAI3I,EACAxE,EACAzC,KAAKtB,OAASkR,EAAIlR,QACpBuI,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAGN,IAAK,IAAIwB,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAAKiB,EAAEoT,MAAMrU,GAGvC,GAAIxB,OAASiH,EACX,KAAOzF,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAM5B,OAFAxB,KAAKtB,OAASuI,EAAEvI,OAETsB,KAAK0W,SAGdrH,EAAG3R,UAAUwc,KAAO,SAAetK,GAEjC,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAKia,MAAMrK,IAIpBP,EAAG3R,UAAUyc,IAAM,SAAcvK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ+J,KAAKtK,GAChDA,EAAIO,QAAQ+J,KAAKla,OAG1BqP,EAAG3R,UAAU0c,KAAO,SAAexK,GACjC,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ8J,MAAMrK,GACjDA,EAAIO,QAAQ8J,MAAMja,OAI3BqP,EAAG3R,UAAUub,MAAQ,SAAgBF,GACnC/J,EAAwB,iBAAV+J,GAAsBA,GAAS,GAE7C,IAAIsB,EAAsC,EAAxB/U,KAAKqR,KAAKoC,EAAQ,IAChCuB,EAAWvB,EAAQ,GAGvB/Y,KAAKmX,QAAQkD,GAETC,EAAW,GACbD,IAIF,IAAK,IAAI7Y,EAAI,EAAGA,EAAI6Y,EAAa7Y,IAC/BxB,KAAK6V,MAAMrU,GAAsB,UAAhBxB,KAAK6V,MAAMrU,GAS9B,OALI8Y,EAAW,IACbta,KAAK6V,MAAMrU,IAAMxB,KAAK6V,MAAMrU,GAAM,UAAc,GAAK8Y,GAIhDta,KAAK0W,SAGdrH,EAAG3R,UAAU2b,KAAO,SAAeN,GACjC,OAAO/Y,KAAKmQ,QAAQ8I,MAAMF,IAI5B1J,EAAG3R,UAAU6c,KAAO,SAAeC,EAAKrZ,GACtC6N,EAAsB,iBAARwL,GAAoBA,GAAO,GAEzC,IAAI5D,EAAO4D,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAUjB,OARAxa,KAAKmX,QAAQP,EAAM,GAGjB5W,KAAK6V,MAAMe,GADTzV,EACgBnB,KAAK6V,MAAMe,GAAQ,GAAK6D,EAExBza,KAAK6V,MAAMe,KAAS,GAAK6D,GAGtCza,KAAK0W,SAIdrH,EAAG3R,UAAUgd,KAAO,SAAe9K,GACjC,IAAIT,EAkBAlI,EAAGxE,EAfP,GAAsB,IAAlBzC,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAI7B,OAHA5V,KAAK4V,SAAW,EAChBzG,EAAInP,KAAK2a,KAAK/K,GACd5P,KAAK4V,UAAY,EACV5V,KAAKoX,YAGP,GAAsB,IAAlBpX,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAIpC,OAHAhG,EAAIgG,SAAW,EACfzG,EAAInP,KAAK2a,KAAK/K,GACdA,EAAIgG,SAAW,EACRzG,EAAEiI,YAKPpX,KAAKtB,OAASkR,EAAIlR,QACpBuI,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAIN,IADA,IAAI+U,EAAQ,EACHvT,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5B2N,GAAkB,EAAblI,EAAE4O,MAAMrU,KAAwB,EAAbiB,EAAEoT,MAAMrU,IAAUuT,EAC1C/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAChB4F,EAAQ5F,IAAM,GAEhB,KAAiB,IAAV4F,GAAevT,EAAIyF,EAAEvI,OAAQ8C,IAClC2N,GAAkB,EAAblI,EAAE4O,MAAMrU,IAAUuT,EACvB/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAChB4F,EAAQ5F,IAAM,GAIhB,GADAnP,KAAKtB,OAASuI,EAAEvI,OACF,IAAVqW,EACF/U,KAAK6V,MAAM7V,KAAKtB,QAAUqW,EAC1B/U,KAAKtB,cAEA,GAAIuI,IAAMjH,KACf,KAAOwB,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAI5B,OAAOxB,MAITqP,EAAG3R,UAAUkd,IAAM,SAAchL,GAC/B,IAAIpK,EACJ,OAAqB,IAAjBoK,EAAIgG,UAAoC,IAAlB5V,KAAK4V,UAC7BhG,EAAIgG,SAAW,EACfpQ,EAAMxF,KAAKuL,IAAIqE,GACfA,EAAIgG,UAAY,EACTpQ,GACmB,IAAjBoK,EAAIgG,UAAoC,IAAlB5V,KAAK4V,UACpC5V,KAAK4V,SAAW,EAChBpQ,EAAMoK,EAAIrE,IAAIvL,MACdA,KAAK4V,SAAW,EACTpQ,GAGLxF,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQuK,KAAK9K,GAEhDA,EAAIO,QAAQuK,KAAK1a,OAI1BqP,EAAG3R,UAAUid,KAAO,SAAe/K,GAEjC,GAAqB,IAAjBA,EAAIgG,SAAgB,CACtBhG,EAAIgG,SAAW,EACf,IAAIzG,EAAInP,KAAK0a,KAAK9K,GAElB,OADAA,EAAIgG,SAAW,EACRzG,EAAEiI,YAGJ,GAAsB,IAAlBpX,KAAK4V,SAId,OAHA5V,KAAK4V,SAAW,EAChB5V,KAAK0a,KAAK9K,GACV5P,KAAK4V,SAAW,EACT5V,KAAKoX,YAId,IAWInQ,EAAGxE,EAXH4T,EAAMrW,KAAKqW,IAAIzG,GAGnB,GAAY,IAARyG,EAIF,OAHArW,KAAK4V,SAAW,EAChB5V,KAAKtB,OAAS,EACdsB,KAAK6V,MAAM,GAAK,EACT7V,KAKLqW,EAAM,GACRpP,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAIN,IADA,IAAI+U,EAAQ,EACHvT,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAE5BuT,GADA5F,GAAkB,EAAblI,EAAE4O,MAAMrU,KAAwB,EAAbiB,EAAEoT,MAAMrU,IAAUuT,IAC7B,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAElB,KAAiB,IAAV4F,GAAevT,EAAIyF,EAAEvI,OAAQ8C,IAElCuT,GADA5F,GAAkB,EAAblI,EAAE4O,MAAMrU,IAAUuT,IACV,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAIlB,GAAc,IAAV4F,GAAevT,EAAIyF,EAAEvI,QAAUuI,IAAMjH,KACvC,KAAOwB,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAU5B,OANAxB,KAAKtB,OAAS4G,KAAKuC,IAAI7H,KAAKtB,OAAQ8C,GAEhCyF,IAAMjH,OACRA,KAAK4V,SAAW,GAGX5V,KAAK0W,SAIdrH,EAAG3R,UAAU6N,IAAM,SAAcqE,GAC/B,OAAO5P,KAAKmQ,QAAQwK,KAAK/K,IA+C3B,IAAIiL,EAAc,SAAsBpD,EAAM7H,EAAKjH,GACjD,IAIIxD,EACA2V,EACA5V,EANA+B,EAAIwQ,EAAK5B,MACTpT,EAAImN,EAAIiG,MACRkF,EAAIpS,EAAIkN,MACR5Q,EAAI,EAIJ+V,EAAY,EAAP/T,EAAE,GACPgU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPlU,EAAE,GACPmU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPrU,EAAE,GACPsU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxU,EAAE,GACPyU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3U,EAAE,GACP4U,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9U,EAAE,GACP+U,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjV,EAAE,GACPkV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPpV,EAAE,GACPqV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPvV,EAAE,GACPwV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP1V,EAAE,GACP2V,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPra,EAAE,GACPsa,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxa,EAAE,GACPya,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3a,EAAE,GACP4a,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9a,EAAE,GACP+a,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjb,EAAE,GACPkb,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAPpb,EAAE,GACPqb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPvb,EAAE,GACPwb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP1b,EAAE,GACP2b,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP7b,EAAE,GACP8b,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPhc,EAAE,GACPic,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjB9V,EAAIiN,SAAW6B,EAAK7B,SAAWhG,EAAIgG,SACnCjN,EAAIjK,OAAS,GAMb,IAAIkgB,IAAQ3Z,GAJZE,EAAKG,KAAKuZ,KAAK5D,EAAK8B,IAIE,KAAa,MAFnCjC,GADAA,EAAMxV,KAAKuZ,KAAK5D,EAAK+B,IACR1X,KAAKuZ,KAAK3D,EAAK6B,GAAQ,KAEU,IAAO,EACrD9X,IAFAC,EAAKI,KAAKuZ,KAAK3D,EAAK8B,KAEPlC,IAAQ,IAAO,IAAM8D,KAAO,IAAO,EAChDA,IAAM,SAENzZ,EAAKG,KAAKuZ,KAAKzD,EAAK2B,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKzD,EAAK4B,IACR1X,KAAKuZ,KAAKxD,EAAK0B,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKxD,EAAK2B,GAKpB,IAAI8B,IAAQ7Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKiC,GAAQ,GAIZ,KAAa,MAFnCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKkC,GAAQ,GACvB7X,KAAKuZ,KAAK3D,EAAKgC,GAAQ,KAEU,IAAO,EACrDjY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKiC,GAAQ,IAErBrC,IAAQ,IAAO,IAAMgE,KAAO,IAAO,EAChDA,IAAM,SAEN3Z,EAAKG,KAAKuZ,KAAKtD,EAAKwB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKtD,EAAKyB,IACR1X,KAAKuZ,KAAKrD,EAAKuB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKrD,EAAKwB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK8B,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK+B,GAAQ,GACvB7X,KAAKuZ,KAAKxD,EAAK6B,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK8B,GAAQ,EAKlC,IAAI4B,IAAQ9Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKoC,GAAQ,GAIZ,KAAa,MAFnCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKqC,GAAQ,GACvBhY,KAAKuZ,KAAK3D,EAAKmC,GAAQ,KAEU,IAAO,EACrDpY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKoC,GAAQ,IAErBxC,IAAQ,IAAO,IAAMiE,KAAO,IAAO,EAChDA,IAAM,SAEN5Z,EAAKG,KAAKuZ,KAAKnD,EAAKqB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKnD,EAAKsB,IACR1X,KAAKuZ,KAAKlD,EAAKoB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKlD,EAAKqB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK2B,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK4B,GAAQ,GACvB7X,KAAKuZ,KAAKrD,EAAK0B,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK2B,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKiC,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKkC,GAAQ,GACvBhY,KAAKuZ,KAAKxD,EAAKgC,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKiC,GAAQ,EAKlC,IAAI0B,IAAQ/Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKuC,GAAQ,GAIZ,KAAa,MAFnC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKwC,GAAQ,GACvBnY,KAAKuZ,KAAK3D,EAAKsC,GAAQ,KAEU,IAAO,EACrDvY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKuC,GAAQ,IAErB3C,IAAQ,IAAO,IAAMkE,KAAO,IAAO,EAChDA,IAAM,SAEN7Z,EAAKG,KAAKuZ,KAAKhD,EAAKkB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKhD,EAAKmB,IACR1X,KAAKuZ,KAAK/C,EAAKiB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAK/C,EAAKkB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKwB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKyB,GAAQ,GACvB7X,KAAKuZ,KAAKlD,EAAKuB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKwB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK8B,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK+B,GAAQ,GACvBhY,KAAKuZ,KAAKrD,EAAK6B,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK8B,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKoC,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKqC,GAAQ,GACvBnY,KAAKuZ,KAAKxD,EAAKmC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKoC,GAAQ,EAKlC,IAAIwB,IAAQha,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAK0C,GAAQ,GAIZ,KAAa,MAFnC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK2C,IAAQ,GACvBtY,KAAKuZ,KAAK3D,EAAKyC,GAAQ,KAEU,IAAO,EACrD1Y,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAK0C,IAAQ,IAErB9C,IAAQ,IAAO,IAAMmE,KAAO,IAAO,EAChDA,IAAM,SAEN9Z,EAAKG,KAAKuZ,KAAK7C,EAAKe,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAK7C,EAAKgB,IACR1X,KAAKuZ,KAAK5C,EAAKc,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAK5C,EAAKe,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKqB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKsB,GAAQ,GACvB7X,KAAKuZ,KAAK/C,EAAKoB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKqB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK2B,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK4B,GAAQ,GACvBhY,KAAKuZ,KAAKlD,EAAK0B,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK2B,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKiC,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKkC,GAAQ,GACvBnY,KAAKuZ,KAAKrD,EAAKgC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKiC,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKuC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKwC,IAAQ,GACvBtY,KAAKuZ,KAAKxD,EAAKsC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKuC,IAAQ,EAKlC,IAAIsB,IAAQja,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAK6C,IAAQ,GAIZ,KAAa,MAFnChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK8C,IAAQ,GACvBzY,KAAKuZ,KAAK3D,EAAK4C,IAAQ,KAEU,IAAO,EACrD7Y,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAK6C,IAAQ,IAErBjD,IAAQ,IAAO,IAAMoE,KAAO,IAAO,EAChDA,IAAM,SAEN/Z,EAAKG,KAAKuZ,KAAK1C,EAAKY,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAK1C,EAAKa,IACR1X,KAAKuZ,KAAKzC,EAAKW,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKzC,EAAKY,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKkB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKmB,GAAQ,GACvB7X,KAAKuZ,KAAK5C,EAAKiB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKkB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKwB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKyB,GAAQ,GACvBhY,KAAKuZ,KAAK/C,EAAKuB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKwB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK8B,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK+B,GAAQ,GACvBnY,KAAKuZ,KAAKlD,EAAK6B,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK8B,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKoC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKqC,IAAQ,GACvBtY,KAAKuZ,KAAKrD,EAAKmC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKoC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK0C,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK2C,IAAQ,GACvBzY,KAAKuZ,KAAKxD,EAAKyC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK0C,IAAQ,EAKlC,IAAIoB,IAAQla,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKgD,IAAQ,GAIZ,KAAa,MAFnCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKiD,IAAQ,GACvB5Y,KAAKuZ,KAAK3D,EAAK+C,IAAQ,KAEU,IAAO,EACrDhZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKgD,IAAQ,IAErBpD,IAAQ,IAAO,IAAMqE,KAAO,IAAO,EAChDA,IAAM,SAENha,EAAKG,KAAKuZ,KAAKvC,EAAKS,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKvC,EAAKU,IACR1X,KAAKuZ,KAAKtC,EAAKQ,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKtC,EAAKS,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKe,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKgB,GAAQ,GACvB7X,KAAKuZ,KAAKzC,EAAKc,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKe,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKqB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKsB,GAAQ,GACvBhY,KAAKuZ,KAAK5C,EAAKoB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKqB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK2B,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK4B,GAAQ,GACvBnY,KAAKuZ,KAAK/C,EAAK0B,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK2B,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKiC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKkC,IAAQ,GACvBtY,KAAKuZ,KAAKlD,EAAKgC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKiC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKuC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKwC,IAAQ,GACvBzY,KAAKuZ,KAAKrD,EAAKsC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKuC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK6C,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK8C,IAAQ,GACvB5Y,KAAKuZ,KAAKxD,EAAK4C,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK6C,IAAQ,EAKlC,IAAIkB,IAAQna,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKmD,IAAQ,GAIZ,KAAa,MAFnCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKoD,IAAQ,GACvB/Y,KAAKuZ,KAAK3D,EAAKkD,IAAQ,KAEU,IAAO,EACrDnZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKmD,IAAQ,IAErBvD,IAAQ,IAAO,IAAMsE,KAAO,IAAO,EAChDA,IAAM,SAENja,EAAKG,KAAKuZ,KAAKpC,EAAKM,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKpC,EAAKO,IACR1X,KAAKuZ,KAAKnC,EAAKK,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKnC,EAAKM,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKY,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKa,GAAQ,GACvB7X,KAAKuZ,KAAKtC,EAAKW,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKY,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKkB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKmB,GAAQ,GACvBhY,KAAKuZ,KAAKzC,EAAKiB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKkB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKwB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKyB,GAAQ,GACvBnY,KAAKuZ,KAAK5C,EAAKuB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKwB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK8B,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK+B,IAAQ,GACvBtY,KAAKuZ,KAAK/C,EAAK6B,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK8B,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKoC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKqC,IAAQ,GACvBzY,KAAKuZ,KAAKlD,EAAKmC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKoC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK0C,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK2C,IAAQ,GACvB5Y,KAAKuZ,KAAKrD,EAAKyC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK0C,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKgD,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKiD,IAAQ,GACvB/Y,KAAKuZ,KAAKxD,EAAK+C,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKgD,IAAQ,EAKlC,IAAIgB,IAAQpa,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKsD,IAAQ,GAIZ,KAAa,MAFnCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKuD,IAAQ,GACvBlZ,KAAKuZ,KAAK3D,EAAKqD,IAAQ,KAEU,IAAO,EACrDtZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKsD,IAAQ,IAErB1D,IAAQ,IAAO,IAAMuE,KAAO,IAAO,EAChDA,IAAM,SAENla,EAAKG,KAAKuZ,KAAKjC,EAAKG,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKI,IACR1X,KAAKuZ,KAAKhC,EAAKE,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKhC,EAAKG,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKS,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKU,GAAQ,GACvB7X,KAAKuZ,KAAKnC,EAAKQ,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKS,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKe,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKgB,GAAQ,GACvBhY,KAAKuZ,KAAKtC,EAAKc,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKe,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKqB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKsB,GAAQ,GACvBnY,KAAKuZ,KAAKzC,EAAKoB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKqB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK2B,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK4B,IAAQ,GACvBtY,KAAKuZ,KAAK5C,EAAK0B,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK2B,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKiC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKkC,IAAQ,GACvBzY,KAAKuZ,KAAK/C,EAAKgC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKiC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKuC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKwC,IAAQ,GACvB5Y,KAAKuZ,KAAKlD,EAAKsC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKuC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK6C,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK8C,IAAQ,GACvB/Y,KAAKuZ,KAAKrD,EAAK4C,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK6C,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKmD,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKoD,IAAQ,GACvBlZ,KAAKuZ,KAAKxD,EAAKkD,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKmD,IAAQ,EAKlC,IAAIc,IAAQra,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKyD,IAAQ,GAIZ,KAAa,MAFnC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK0D,IAAQ,GACvBrZ,KAAKuZ,KAAK3D,EAAKwD,IAAQ,KAEU,IAAO,EACrDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKyD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMwE,KAAO,IAAO,EAChDA,IAAM,SAENna,EAAKG,KAAKuZ,KAAKjC,EAAKM,GAEpBpC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKO,IACR7X,KAAKuZ,KAAKhC,EAAKK,GAAQ,EACpChY,EAAKI,KAAKuZ,KAAKhC,EAAKM,GACpBhY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKY,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKa,GAAQ,GACvBhY,KAAKuZ,KAAKnC,EAAKW,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKY,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKkB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKmB,GAAQ,GACvBnY,KAAKuZ,KAAKtC,EAAKiB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKkB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKwB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKyB,IAAQ,GACvBtY,KAAKuZ,KAAKzC,EAAKuB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKwB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK8B,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK+B,IAAQ,GACvBzY,KAAKuZ,KAAK5C,EAAK6B,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK8B,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKoC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKqC,IAAQ,GACvB5Y,KAAKuZ,KAAK/C,EAAKmC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKoC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK0C,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK2C,IAAQ,GACvB/Y,KAAKuZ,KAAKlD,EAAKyC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK0C,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKgD,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKiD,IAAQ,GACvBlZ,KAAKuZ,KAAKrD,EAAK+C,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKgD,IAAQ,EAKlC,IAAIe,IAASta,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKsD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKuD,IAAQ,GACvBrZ,KAAKuZ,KAAKxD,EAAKqD,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKsD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMyE,KAAQ,IAAO,EACjDA,IAAO,SAEPpa,EAAKG,KAAKuZ,KAAKjC,EAAKS,GAEpBvC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKU,IACRhY,KAAKuZ,KAAKhC,EAAKQ,GAAQ,EACpCnY,EAAKI,KAAKuZ,KAAKhC,EAAKS,GACpBnY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKe,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKgB,GAAQ,GACvBnY,KAAKuZ,KAAKnC,EAAKc,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKe,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKqB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKsB,IAAQ,GACvBtY,KAAKuZ,KAAKtC,EAAKoB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKqB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAK2B,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAK4B,IAAQ,GACvBzY,KAAKuZ,KAAKzC,EAAK0B,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAK2B,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKiC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKkC,IAAQ,GACvB5Y,KAAKuZ,KAAK5C,EAAKgC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKiC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKuC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKwC,IAAQ,GACvB/Y,KAAKuZ,KAAK/C,EAAKsC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKuC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK6C,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK8C,IAAQ,GACvBlZ,KAAKuZ,KAAKlD,EAAK4C,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK6C,IAAQ,EAKlC,IAAIgB,IAASva,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKmD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKoD,IAAQ,GACvBrZ,KAAKuZ,KAAKrD,EAAKkD,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKmD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM0E,KAAQ,IAAO,EACjDA,IAAO,SAEPra,EAAKG,KAAKuZ,KAAKjC,EAAKY,GAEpB1C,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKa,IACRnY,KAAKuZ,KAAKhC,EAAKW,GAAQ,EACpCtY,EAAKI,KAAKuZ,KAAKhC,EAAKY,GACpBtY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKkB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKmB,IAAQ,GACvBtY,KAAKuZ,KAAKnC,EAAKiB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKkB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKwB,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKyB,IAAQ,GACvBzY,KAAKuZ,KAAKtC,EAAKuB,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKwB,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAK8B,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAK+B,IAAQ,GACvB5Y,KAAKuZ,KAAKzC,EAAK6B,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAK8B,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKoC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKqC,IAAQ,GACvB/Y,KAAKuZ,KAAK5C,EAAKmC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKoC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK0C,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK2C,IAAQ,GACvBlZ,KAAKuZ,KAAK/C,EAAKyC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK0C,IAAQ,EAKlC,IAAIiB,IAASxa,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKgD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKiD,IAAQ,GACvBrZ,KAAKuZ,KAAKlD,EAAK+C,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKgD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM2E,KAAQ,IAAO,EACjDA,IAAO,SAEPta,EAAKG,KAAKuZ,KAAKjC,EAAKe,GAEpB7C,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKgB,KACRtY,KAAKuZ,KAAKhC,EAAKc,GAAQ,EACpCzY,EAAKI,KAAKuZ,KAAKhC,EAAKe,IACpBzY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKqB,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKsB,IAAQ,GACvBzY,KAAKuZ,KAAKnC,EAAKoB,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKqB,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAK2B,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAK4B,IAAQ,GACvB5Y,KAAKuZ,KAAKtC,EAAK0B,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAK2B,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKiC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKkC,IAAQ,GACvB/Y,KAAKuZ,KAAKzC,EAAKgC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKiC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKuC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKwC,IAAQ,GACvBlZ,KAAKuZ,KAAK5C,EAAKsC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKuC,IAAQ,EAKlC,IAAIkB,IAASza,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK6C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK8C,IAAQ,GACvBrZ,KAAKuZ,KAAK/C,EAAK4C,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK6C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM4E,KAAQ,IAAO,EACjDA,IAAO,SAEPva,EAAKG,KAAKuZ,KAAKjC,EAAKkB,IAEpBhD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKmB,KACRzY,KAAKuZ,KAAKhC,EAAKiB,IAAQ,EACpC5Y,EAAKI,KAAKuZ,KAAKhC,EAAKkB,IACpB5Y,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKwB,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKyB,IAAQ,GACvB5Y,KAAKuZ,KAAKnC,EAAKuB,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKwB,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAK8B,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAK+B,IAAQ,GACvB/Y,KAAKuZ,KAAKtC,EAAK6B,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAK8B,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKoC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKqC,IAAQ,GACvBlZ,KAAKuZ,KAAKzC,EAAKmC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKoC,IAAQ,EAKlC,IAAImB,IAAS1a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK0C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK2C,IAAQ,GACvBrZ,KAAKuZ,KAAK5C,EAAKyC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK0C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM6E,KAAQ,IAAO,EACjDA,IAAO,SAEPxa,EAAKG,KAAKuZ,KAAKjC,EAAKqB,IAEpBnD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKsB,KACR5Y,KAAKuZ,KAAKhC,EAAKoB,IAAQ,EACpC/Y,EAAKI,KAAKuZ,KAAKhC,EAAKqB,IACpB/Y,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAK2B,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAK4B,IAAQ,GACvB/Y,KAAKuZ,KAAKnC,EAAK0B,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAK2B,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKiC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKkC,IAAQ,GACvBlZ,KAAKuZ,KAAKtC,EAAKgC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKiC,IAAQ,EAKlC,IAAIoB,IAAS3a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKuC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKwC,IAAQ,GACvBrZ,KAAKuZ,KAAKzC,EAAKsC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKuC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM8E,KAAQ,IAAO,EACjDA,IAAO,SAEPza,EAAKG,KAAKuZ,KAAKjC,EAAKwB,IAEpBtD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKyB,KACR/Y,KAAKuZ,KAAKhC,EAAKuB,IAAQ,EACpClZ,EAAKI,KAAKuZ,KAAKhC,EAAKwB,IACpBlZ,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAK8B,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAK+B,IAAQ,GACvBlZ,KAAKuZ,KAAKnC,EAAK6B,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAK8B,IAAQ,EAKlC,IAAIqB,IAAS5a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKoC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKqC,IAAQ,GACvBrZ,KAAKuZ,KAAKtC,EAAKmC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKoC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM+E,KAAQ,IAAO,EACjDA,IAAO,SAEP1a,EAAKG,KAAKuZ,KAAKjC,EAAK2B,IAEpBzD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAK4B,KACRlZ,KAAKuZ,KAAKhC,EAAK0B,IAAQ,EACpCrZ,EAAKI,KAAKuZ,KAAKhC,EAAK2B,IAKpB,IAAIsB,IAAS7a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKiC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKkC,IAAQ,GACvBrZ,KAAKuZ,KAAKnC,EAAKgC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKiC,IAAQ,IAErB7D,IAAQ,IAAO,IAAMgF,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAAS9a,GAJbE,EAAKG,KAAKuZ,KAAKjC,EAAK8B,KAIG,KAAa,MAFpC5D,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAK+B,KACRrZ,KAAKuZ,KAAKhC,EAAK6B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAzZ,IAFAC,EAAKI,KAAKuZ,KAAKhC,EAAK8B,MAEP7D,IAAQ,IAAO,IAAMiF,KAAQ,IAAO,EACjDA,IAAO,SACPhF,EAAE,GAAK6D,GACP7D,EAAE,GAAK+D,GACP/D,EAAE,GAAKgE,GACPhE,EAAE,GAAKiE,GACPjE,EAAE,GAAKkE,GACPlE,EAAE,GAAKmE,GACPnE,EAAE,GAAKoE,GACPpE,EAAE,GAAKqE,GACPrE,EAAE,GAAKsE,GACPtE,EAAE,GAAKuE,GACPvE,EAAE,IAAMwE,GACRxE,EAAE,IAAMyE,GACRzE,EAAE,IAAM0E,GACR1E,EAAE,IAAM2E,GACR3E,EAAE,IAAM4E,GACR5E,EAAE,IAAM6E,GACR7E,EAAE,IAAM8E,GACR9E,EAAE,IAAM+E,GACR/E,EAAE,IAAMgF,GACE,IAAN9a,IACF8V,EAAE,IAAM9V,EACR0D,EAAIjK,UAECiK,GAiDT,SAASqX,EAAYvI,EAAM7H,EAAKjH,GAE9B,OADW,IAAIsX,GACHC,KAAKzI,EAAM7H,EAAKjH,GAsB9B,SAASsX,EAAM/Y,EAAGC,GAChBnH,KAAKkH,EAAIA,EACTlH,KAAKmH,EAAIA,EAvEN7B,KAAKuZ,OACRhE,EAAcrD,GAiDhBnI,EAAG3R,UAAUyiB,MAAQ,SAAgBvQ,EAAKjH,GACxC,IACI3H,EAAMhB,KAAKtB,OAASkR,EAAIlR,OAW5B,OAVoB,KAAhBsB,KAAKtB,QAAgC,KAAfkR,EAAIlR,OACtBmc,EAAY7a,KAAM4P,EAAKjH,GACpB3H,EAAM,GACTwW,EAAWxX,KAAM4P,EAAKjH,GACnB3H,EAAM,KArDnB,SAAmByW,EAAM7H,EAAKjH,GAC5BA,EAAIiN,SAAWhG,EAAIgG,SAAW6B,EAAK7B,SACnCjN,EAAIjK,OAAS+Y,EAAK/Y,OAASkR,EAAIlR,OAI/B,IAFA,IAAIqW,EAAQ,EACRqL,EAAU,EACLlQ,EAAI,EAAGA,EAAIvH,EAAIjK,OAAS,EAAGwR,IAAK,CAGvC,IAAIwH,EAAS0I,EACbA,EAAU,EAGV,IAFA,IAAIzI,EAAgB,SAAR5C,EACR6C,EAAOtS,KAAKC,IAAI2K,EAAGN,EAAIlR,OAAS,GAC3BkF,EAAI0B,KAAKuC,IAAI,EAAGqI,EAAIuH,EAAK/Y,OAAS,GAAIkF,GAAKgU,EAAMhU,IAAK,CAC7D,IAAIpC,EAAI0O,EAAItM,EAGRuL,GAFoB,EAAhBsI,EAAK5B,MAAMrU,KACI,EAAfoO,EAAIiG,MAAMjS,IAGduB,EAAS,SAAJgK,EAGTwI,EAAa,UADbxS,EAAMA,EAAKwS,EAAS,GAIpByI,IAFA1I,GAHAA,EAAUA,GAAWvI,EAAI,SAAa,GAAM,IAGxBhK,IAAO,IAAO,KAEZ,GACtBuS,GAAU,SAEZ/O,EAAIkN,MAAM3F,GAAKyH,EACf5C,EAAQ2C,EACRA,EAAS0I,EAQX,OANc,IAAVrL,EACFpM,EAAIkN,MAAM3F,GAAK6E,EAEfpM,EAAIjK,SAGCiK,EAAI+N,QAgBH2J,CAASrgB,KAAM4P,EAAKjH,GAEpBqX,EAAWhgB,KAAM4P,EAAKjH,IAchCsX,EAAKviB,UAAU4iB,QAAU,SAAkBC,GAGzC,IAFA,IAAI5H,EAAI,IAAInQ,MAAM+X,GACdlT,EAAIgC,EAAG3R,UAAUgb,WAAW6H,GAAK,EAC5B/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrBmX,EAAEnX,GAAKxB,KAAKwgB,OAAOhf,EAAG6L,EAAGkT,GAG3B,OAAO5H,GAITsH,EAAKviB,UAAU8iB,OAAS,SAAiBtZ,EAAGmG,EAAGkT,GAC7C,GAAU,IAANrZ,GAAWA,IAAMqZ,EAAI,EAAG,OAAOrZ,EAGnC,IADA,IAAIuZ,EAAK,EACAjf,EAAI,EAAGA,EAAI6L,EAAG7L,IACrBif,IAAW,EAAJvZ,IAAWmG,EAAI7L,EAAI,EAC1B0F,IAAM,EAGR,OAAOuZ,GAKTR,EAAKviB,UAAUgjB,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GACpE,IAAK,IAAI/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrBsf,EAAKtf,GAAKof,EAAID,EAAInf,IAClBuf,EAAKvf,GAAKqf,EAAIF,EAAInf,KAItBye,EAAKviB,UAAUsjB,UAAY,SAAoBJ,EAAKC,EAAKC,EAAMC,EAAMR,EAAGI,GACtE3gB,KAAK0gB,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GAExC,IAAK,IAAIU,EAAI,EAAGA,EAAIV,EAAGU,IAAM,EAM3B,IALA,IAAI5T,EAAI4T,GAAK,EAETC,EAAQ5b,KAAK6b,IAAI,EAAI7b,KAAK8b,GAAK/T,GAC/BgU,EAAQ/b,KAAKgc,IAAI,EAAIhc,KAAK8b,GAAK/T,GAE1BkG,EAAI,EAAGA,EAAIgN,EAAGhN,GAAKlG,EAI1B,IAHA,IAAIkU,EAASL,EACTM,EAASH,EAEJzd,EAAI,EAAGA,EAAIqd,EAAGrd,IAAK,CAC1B,IAAI6d,EAAKX,EAAKvN,EAAI3P,GACd8d,EAAKX,EAAKxN,EAAI3P,GAEd+d,EAAKb,EAAKvN,EAAI3P,EAAIqd,GAClBW,EAAKb,EAAKxN,EAAI3P,EAAIqd,GAElBY,EAAKN,EAASI,EAAKH,EAASI,EAEhCA,EAAKL,EAASK,EAAKJ,EAASG,EAC5BA,EAAKE,EAELf,EAAKvN,EAAI3P,GAAK6d,EAAKE,EACnBZ,EAAKxN,EAAI3P,GAAK8d,EAAKE,EAEnBd,EAAKvN,EAAI3P,EAAIqd,GAAKQ,EAAKE,EACvBZ,EAAKxN,EAAI3P,EAAIqd,GAAKS,EAAKE,EAGnBhe,IAAMyJ,IACRwU,EAAKX,EAAQK,EAASF,EAAQG,EAE9BA,EAASN,EAAQM,EAASH,EAAQE,EAClCA,EAASM,KAOnB5B,EAAKviB,UAAUokB,YAAc,SAAsBpf,EAAGC,GACpD,IAAI4d,EAAqB,EAAjBjb,KAAKuC,IAAIlF,EAAGD,GAChBqf,EAAU,EAAJxB,EACN/e,EAAI,EACR,IAAK+e,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/B/e,IAGF,OAAO,GAAKA,EAAI,EAAIugB,GAGtB9B,EAAKviB,UAAUskB,UAAY,SAAoBpB,EAAKC,EAAKN,GACvD,KAAIA,GAAK,GAET,IAAK,IAAI/e,EAAI,EAAGA,EAAI+e,EAAI,EAAG/e,IAAK,CAC9B,IAAImX,EAAIiI,EAAIpf,GAEZof,EAAIpf,GAAKof,EAAIL,EAAI/e,EAAI,GACrBof,EAAIL,EAAI/e,EAAI,GAAKmX,EAEjBA,EAAIkI,EAAIrf,GAERqf,EAAIrf,IAAMqf,EAAIN,EAAI/e,EAAI,GACtBqf,EAAIN,EAAI/e,EAAI,IAAMmX,IAItBsH,EAAKviB,UAAUukB,aAAe,SAAuBhS,EAAIsQ,GAEvD,IADA,IAAIxL,EAAQ,EACHvT,EAAI,EAAGA,EAAI+e,EAAI,EAAG/e,IAAK,CAC9B,IAAIqO,EAAoC,KAAhCvK,KAAK4c,MAAMjS,EAAG,EAAIzO,EAAI,GAAK+e,GACjCjb,KAAK4c,MAAMjS,EAAG,EAAIzO,GAAK+e,GACvBxL,EAEF9E,EAAGzO,GAAS,SAAJqO,EAGNkF,EADElF,EAAI,SACE,EAEAA,EAAI,SAAY,EAI5B,OAAOI,GAGTgQ,EAAKviB,UAAUykB,WAAa,SAAqBlS,EAAIjP,EAAK4f,EAAKL,GAE7D,IADA,IAAIxL,EAAQ,EACHvT,EAAI,EAAGA,EAAIR,EAAKQ,IACvBuT,GAAyB,EAAR9E,EAAGzO,GAEpBof,EAAI,EAAIpf,GAAa,KAARuT,EAAgBA,KAAkB,GAC/C6L,EAAI,EAAIpf,EAAI,GAAa,KAARuT,EAAgBA,KAAkB,GAIrD,IAAKvT,EAAI,EAAIR,EAAKQ,EAAI+e,IAAK/e,EACzBof,EAAIpf,GAAK,EAGXwN,EAAiB,IAAV+F,GACP/F,EAA6B,KAAb,KAAR+F,KAGVkL,EAAKviB,UAAU0kB,KAAO,SAAe7B,GAEnC,IADA,IAAI8B,EAAK,IAAI7Z,MAAM+X,GACV/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrB6gB,EAAG7gB,GAAK,EAGV,OAAO6gB,GAGTpC,EAAKviB,UAAUwiB,KAAO,SAAehZ,EAAGC,EAAGwB,GACzC,IAAI4X,EAAI,EAAIvgB,KAAK8hB,YAAY5a,EAAExI,OAAQyI,EAAEzI,QAErCiiB,EAAM3gB,KAAKsgB,QAAQC,GAEnB+B,EAAItiB,KAAKoiB,KAAK7B,GAEdK,EAAM,IAAIpY,MAAM+X,GAChBgC,EAAO,IAAI/Z,MAAM+X,GACjBiC,EAAO,IAAIha,MAAM+X,GAEjBkC,EAAO,IAAIja,MAAM+X,GACjBmC,EAAQ,IAAIla,MAAM+X,GAClBoC,EAAQ,IAAIna,MAAM+X,GAElBqC,EAAOja,EAAIkN,MACf+M,EAAKlkB,OAAS6hB,EAEdvgB,KAAKmiB,WAAWjb,EAAE2O,MAAO3O,EAAExI,OAAQkiB,EAAKL,GACxCvgB,KAAKmiB,WAAWhb,EAAE0O,MAAO1O,EAAEzI,OAAQ+jB,EAAMlC,GAEzCvgB,KAAKghB,UAAUJ,EAAK0B,EAAGC,EAAMC,EAAMjC,EAAGI,GACtC3gB,KAAKghB,UAAUyB,EAAMH,EAAGI,EAAOC,EAAOpC,EAAGI,GAEzC,IAAK,IAAInf,EAAI,EAAGA,EAAI+e,EAAG/e,IAAK,CAC1B,IAAIqgB,EAAKU,EAAK/gB,GAAKkhB,EAAMlhB,GAAKghB,EAAKhhB,GAAKmhB,EAAMnhB,GAC9CghB,EAAKhhB,GAAK+gB,EAAK/gB,GAAKmhB,EAAMnhB,GAAKghB,EAAKhhB,GAAKkhB,EAAMlhB,GAC/C+gB,EAAK/gB,GAAKqgB,EAUZ,OAPA7hB,KAAKgiB,UAAUO,EAAMC,EAAMjC,GAC3BvgB,KAAKghB,UAAUuB,EAAMC,EAAMI,EAAMN,EAAG/B,EAAGI,GACvC3gB,KAAKgiB,UAAUY,EAAMN,EAAG/B,GACxBvgB,KAAKiiB,aAAaW,EAAMrC,GAExB5X,EAAIiN,SAAW1O,EAAE0O,SAAWzO,EAAEyO,SAC9BjN,EAAIjK,OAASwI,EAAExI,OAASyI,EAAEzI,OACnBiK,EAAI+N,SAIbrH,EAAG3R,UAAUiM,IAAM,SAAciG,GAC/B,IAAIjH,EAAM,IAAI0G,EAAG,MAEjB,OADA1G,EAAIkN,MAAQ,IAAIrN,MAAMxI,KAAKtB,OAASkR,EAAIlR,QACjCsB,KAAKmgB,MAAMvQ,EAAKjH,IAIzB0G,EAAG3R,UAAUmlB,KAAO,SAAejT,GACjC,IAAIjH,EAAM,IAAI0G,EAAG,MAEjB,OADA1G,EAAIkN,MAAQ,IAAIrN,MAAMxI,KAAKtB,OAASkR,EAAIlR,QACjCshB,EAAWhgB,KAAM4P,EAAKjH,IAI/B0G,EAAG3R,UAAUmhB,KAAO,SAAejP,GACjC,OAAO5P,KAAKmQ,QAAQgQ,MAAMvQ,EAAK5P,OAGjCqP,EAAG3R,UAAUsZ,MAAQ,SAAgBpH,GACnCZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UAIb,IADA,IAAImF,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIqO,GAAqB,EAAhB7P,KAAK6V,MAAMrU,IAAUoO,EAC1BzK,GAAU,SAAJ0K,IAA0B,SAARkF,GAC5BA,IAAU,GACVA,GAAUlF,EAAI,SAAa,EAE3BkF,GAAS5P,IAAO,GAChBnF,KAAK6V,MAAMrU,GAAU,SAAL2D,EAQlB,OALc,IAAV4P,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAGAsB,MAGTqP,EAAG3R,UAAUolB,KAAO,SAAelT,GACjC,OAAO5P,KAAKmQ,QAAQ6G,MAAMpH,IAI5BP,EAAG3R,UAAUqlB,IAAM,WACjB,OAAO/iB,KAAK2J,IAAI3J,OAIlBqP,EAAG3R,UAAUslB,KAAO,WAClB,OAAOhjB,KAAK6e,KAAK7e,KAAKmQ,UAIxBd,EAAG3R,UAAUwM,IAAM,SAAc0F,GAC/B,IAAIC,EAxxCN,SAAqBD,GAGnB,IAFA,IAAIC,EAAI,IAAIrH,MAAMoH,EAAII,aAEbwK,EAAM,EAAGA,EAAM3K,EAAEnR,OAAQ8b,IAAO,CACvC,IAAI5D,EAAO4D,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAEjB3K,EAAE2K,IAAQ5K,EAAIiG,MAAMe,GAAQ,GAAK6D,KAAWA,EAG9C,OAAO5K,EA8wCCoT,CAAWrT,GACnB,GAAiB,IAAbC,EAAEnR,OAAc,OAAO,IAAI2Q,EAAG,GAIlC,IADA,IAAI7J,EAAMxF,KACDwB,EAAI,EAAGA,EAAIqO,EAAEnR,QACP,IAATmR,EAAErO,GADsBA,IAAKgE,EAAMA,EAAIud,OAI7C,KAAMvhB,EAAIqO,EAAEnR,OACV,IAAK,IAAI8Z,EAAIhT,EAAIud,MAAOvhB,EAAIqO,EAAEnR,OAAQ8C,IAAKgX,EAAIA,EAAEuK,MAClC,IAATlT,EAAErO,KAENgE,EAAMA,EAAImE,IAAI6O,IAIlB,OAAOhT,GAIT6J,EAAG3R,UAAUwlB,OAAS,SAAiBpT,GACrCd,EAAuB,iBAATc,GAAqBA,GAAQ,GAC3C,IAGItO,EAHA2N,EAAIW,EAAO,GACXmR,GAAKnR,EAAOX,GAAK,GACjBgU,EAAa,WAAe,GAAKhU,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAI4F,EAAQ,EAEZ,IAAKvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CAChC,IAAI4hB,EAAWpjB,KAAK6V,MAAMrU,GAAK2hB,EAC3Ble,GAAsB,EAAhBjF,KAAK6V,MAAMrU,IAAU4hB,GAAajU,EAC5CnP,KAAK6V,MAAMrU,GAAKyD,EAAI8P,EACpBA,EAAQqO,IAAc,GAAKjU,EAGzB4F,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAIT,GAAU,IAANuiB,EAAS,CACX,IAAKzf,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAChCxB,KAAK6V,MAAMrU,EAAIyf,GAAKjhB,KAAK6V,MAAMrU,GAGjC,IAAKA,EAAI,EAAGA,EAAIyf,EAAGzf,IACjBxB,KAAK6V,MAAMrU,GAAK,EAGlBxB,KAAKtB,QAAUuiB,EAGjB,OAAOjhB,KAAK0W,SAGdrH,EAAG3R,UAAU2lB,MAAQ,SAAgBvT,GAGnC,OADAd,EAAyB,IAAlBhP,KAAK4V,UACL5V,KAAKkjB,OAAOpT,IAMrBT,EAAG3R,UAAU+S,OAAS,SAAiBX,EAAMwT,EAAMC,GAEjD,IAAIC,EADJxU,EAAuB,iBAATc,GAAqBA,GAAQ,GAGzC0T,EADEF,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAInU,EAAIW,EAAO,GACXmR,EAAI3b,KAAKC,KAAKuK,EAAOX,GAAK,GAAInP,KAAKtB,QACnC+kB,EAAO,SAAc,WAActU,GAAMA,EACzCuU,EAAcH,EAMlB,GAJAC,GAAKvC,EACLuC,EAAIle,KAAKuC,IAAI,EAAG2b,GAGZE,EAAa,CACf,IAAK,IAAIliB,EAAI,EAAGA,EAAIyf,EAAGzf,IACrBkiB,EAAY7N,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAEpCkiB,EAAYhlB,OAASuiB,EAGvB,GAAU,IAANA,QAEG,GAAIjhB,KAAKtB,OAASuiB,EAEvB,IADAjhB,KAAKtB,QAAUuiB,EACVzf,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC3BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,EAAIyf,QAGjCjhB,KAAK6V,MAAM,GAAK,EAChB7V,KAAKtB,OAAS,EAGhB,IAAIqW,EAAQ,EACZ,IAAKvT,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,IAAgB,IAAVuT,GAAevT,GAAKgiB,GAAIhiB,IAAK,CAChE,IAAI4R,EAAuB,EAAhBpT,KAAK6V,MAAMrU,GACtBxB,KAAK6V,MAAMrU,GAAMuT,GAAU,GAAK5F,EAAOiE,IAASjE,EAChD4F,EAAQ3B,EAAOqQ,EAajB,OATIC,GAAyB,IAAV3O,IACjB2O,EAAY7N,MAAM6N,EAAYhlB,UAAYqW,GAGxB,IAAhB/U,KAAKtB,SACPsB,KAAK6V,MAAM,GAAK,EAChB7V,KAAKtB,OAAS,GAGTsB,KAAK0W,SAGdrH,EAAG3R,UAAUimB,MAAQ,SAAgB7T,EAAMwT,EAAMC,GAG/C,OADAvU,EAAyB,IAAlBhP,KAAK4V,UACL5V,KAAKyQ,OAAOX,EAAMwT,EAAMC,IAIjClU,EAAG3R,UAAUkmB,KAAO,SAAe9T,GACjC,OAAO9P,KAAKmQ,QAAQkT,MAAMvT,IAG5BT,EAAG3R,UAAUmmB,MAAQ,SAAgB/T,GACnC,OAAO9P,KAAKmQ,QAAQ+S,OAAOpT,IAI7BT,EAAG3R,UAAUomB,KAAO,SAAehU,GACjC,OAAO9P,KAAKmQ,QAAQwT,MAAM7T,IAG5BT,EAAG3R,UAAUqmB,MAAQ,SAAgBjU,GACnC,OAAO9P,KAAKmQ,QAAQM,OAAOX,IAI7BT,EAAG3R,UAAU0b,MAAQ,SAAgBoB,GACnCxL,EAAsB,iBAARwL,GAAoBA,GAAO,GACzC,IAAIrL,EAAIqL,EAAM,GACVyG,GAAKzG,EAAMrL,GAAK,GAChBqJ,EAAI,GAAKrJ,EAGb,QAAInP,KAAKtB,QAAUuiB,OAGXjhB,KAAK6V,MAAMoL,GAELzI,IAIhBnJ,EAAG3R,UAAUsmB,OAAS,SAAiBlU,GACrCd,EAAuB,iBAATc,GAAqBA,GAAQ,GAC3C,IAAIX,EAAIW,EAAO,GACXmR,GAAKnR,EAAOX,GAAK,GAIrB,GAFAH,EAAyB,IAAlBhP,KAAK4V,SAAgB,2CAExB5V,KAAKtB,QAAUuiB,EACjB,OAAOjhB,KAQT,GALU,IAANmP,GACF8R,IAEFjhB,KAAKtB,OAAS4G,KAAKC,IAAI0b,EAAGjhB,KAAKtB,QAErB,IAANyQ,EAAS,CACX,IAAIsU,EAAO,SAAc,WAActU,GAAMA,EAC7CnP,KAAK6V,MAAM7V,KAAKtB,OAAS,IAAM+kB,EAGjC,OAAOzjB,KAAK0W,SAIdrH,EAAG3R,UAAUumB,MAAQ,SAAgBnU,GACnC,OAAO9P,KAAKmQ,QAAQ6T,OAAOlU,IAI7BT,EAAG3R,UAAUwb,MAAQ,SAAgBtJ,GAGnC,OAFAZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UACTA,EAAM,EAAU5P,KAAKwQ,OAAOZ,GAGV,IAAlB5P,KAAK4V,SACa,IAAhB5V,KAAKtB,SAAiC,EAAhBsB,KAAK6V,MAAM,IAAUjG,GAC7C5P,KAAK6V,MAAM,GAAKjG,GAAuB,EAAhB5P,KAAK6V,MAAM,IAClC7V,KAAK4V,SAAW,EACT5V,OAGTA,KAAK4V,SAAW,EAChB5V,KAAKwQ,MAAMZ,GACX5P,KAAK4V,SAAW,EACT5V,MAIFA,KAAKiX,OAAOrH,IAGrBP,EAAG3R,UAAUuZ,OAAS,SAAiBrH,GACrC5P,KAAK6V,MAAM,IAAMjG,EAGjB,IAAK,IAAIpO,EAAI,EAAGA,EAAIxB,KAAKtB,QAAUsB,KAAK6V,MAAMrU,IAAM,SAAWA,IAC7DxB,KAAK6V,MAAMrU,IAAM,SACbA,IAAMxB,KAAKtB,OAAS,EACtBsB,KAAK6V,MAAMrU,EAAI,GAAK,EAEpBxB,KAAK6V,MAAMrU,EAAI,KAKnB,OAFAxB,KAAKtB,OAAS4G,KAAKuC,IAAI7H,KAAKtB,OAAQ8C,EAAI,GAEjCxB,MAITqP,EAAG3R,UAAU8S,MAAQ,SAAgBZ,GAGnC,GAFAZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UACTA,EAAM,EAAG,OAAO5P,KAAKkZ,OAAOtJ,GAEhC,GAAsB,IAAlB5P,KAAK4V,SAIP,OAHA5V,KAAK4V,SAAW,EAChB5V,KAAKkZ,MAAMtJ,GACX5P,KAAK4V,SAAW,EACT5V,KAKT,GAFAA,KAAK6V,MAAM,IAAMjG,EAEG,IAAhB5P,KAAKtB,QAAgBsB,KAAK6V,MAAM,GAAK,EACvC7V,KAAK6V,MAAM,IAAM7V,KAAK6V,MAAM,GAC5B7V,KAAK4V,SAAW,OAGhB,IAAK,IAAIpU,EAAI,EAAGA,EAAIxB,KAAKtB,QAAUsB,KAAK6V,MAAMrU,GAAK,EAAGA,IACpDxB,KAAK6V,MAAMrU,IAAM,SACjBxB,KAAK6V,MAAMrU,EAAI,IAAM,EAIzB,OAAOxB,KAAK0W,SAGdrH,EAAG3R,UAAUwmB,KAAO,SAAetU,GACjC,OAAO5P,KAAKmQ,QAAQ+I,MAAMtJ,IAG5BP,EAAG3R,UAAUymB,KAAO,SAAevU,GACjC,OAAO5P,KAAKmQ,QAAQK,MAAMZ,IAG5BP,EAAG3R,UAAU0mB,KAAO,WAGlB,OAFApkB,KAAK4V,SAAW,EAET5V,MAGTqP,EAAG3R,UAAUsb,IAAM,WACjB,OAAOhZ,KAAKmQ,QAAQiU,QAGtB/U,EAAG3R,UAAU2mB,aAAe,SAAuBzU,EAAKjG,EAAK2a,GAC3D,IACI9iB,EAIAqO,EALA7O,EAAM4O,EAAIlR,OAAS4lB,EAGvBtkB,KAAKmX,QAAQnW,GAGb,IAAI+T,EAAQ,EACZ,IAAKvT,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CAC/BqO,GAA6B,EAAxB7P,KAAK6V,MAAMrU,EAAI8iB,IAAcvP,EAClC,IAAIqB,GAAwB,EAAfxG,EAAIiG,MAAMrU,IAAUmI,EAEjCoL,IADAlF,GAAa,SAARuG,IACS,KAAQA,EAAQ,SAAa,GAC3CpW,KAAK6V,MAAMrU,EAAI8iB,GAAa,SAAJzU,EAE1B,KAAOrO,EAAIxB,KAAKtB,OAAS4lB,EAAO9iB,IAE9BuT,GADAlF,GAA6B,EAAxB7P,KAAK6V,MAAMrU,EAAI8iB,IAAcvP,IACrB,GACb/U,KAAK6V,MAAMrU,EAAI8iB,GAAa,SAAJzU,EAG1B,GAAc,IAAVkF,EAAa,OAAO/U,KAAK0W,QAK7B,IAFA1H,GAAkB,IAAX+F,GACPA,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAE3BuT,GADAlF,IAAsB,EAAhB7P,KAAK6V,MAAMrU,IAAUuT,IACd,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJqO,EAIlB,OAFA7P,KAAK4V,SAAW,EAET5V,KAAK0W,SAGdrH,EAAG3R,UAAU6mB,SAAW,SAAmB3U,EAAK4U,GAC9C,IAAIF,GAAQtkB,KAAKtB,OAASkR,EAAIlR,QAE1BuI,EAAIjH,KAAKmQ,QACT1N,EAAImN,EAGJ6U,EAA8B,EAAxBhiB,EAAEoT,MAAMpT,EAAE/D,OAAS,GAGf,KADd4lB,EAAQ,GADMtkB,KAAK0Y,WAAW+L,MAG5BhiB,EAAIA,EAAEohB,MAAMS,GACZrd,EAAEic,OAAOoB,GACTG,EAA8B,EAAxBhiB,EAAEoT,MAAMpT,EAAE/D,OAAS,IAI3B,IACI8Z,EADA7V,EAAIsE,EAAEvI,OAAS+D,EAAE/D,OAGrB,GAAa,QAAT8lB,EAAgB,EAClBhM,EAAI,IAAInJ,EAAG,OACT3Q,OAASiE,EAAI,EACf6V,EAAE3C,MAAQ,IAAIrN,MAAMgQ,EAAE9Z,QACtB,IAAK,IAAI8C,EAAI,EAAGA,EAAIgX,EAAE9Z,OAAQ8C,IAC5BgX,EAAE3C,MAAMrU,GAAK,EAIjB,IAAIkjB,EAAOzd,EAAEkJ,QAAQkU,aAAa5hB,EAAG,EAAGE,GAClB,IAAlB+hB,EAAK9O,WACP3O,EAAIyd,EACAlM,IACFA,EAAE3C,MAAMlT,GAAK,IAIjB,IAAK,IAAIiB,EAAIjB,EAAI,EAAGiB,GAAK,EAAGA,IAAK,CAC/B,IAAI+gB,EAAmC,UAAL,EAAxB1d,EAAE4O,MAAMpT,EAAE/D,OAASkF,KACE,EAA5BqD,EAAE4O,MAAMpT,EAAE/D,OAASkF,EAAI,IAO1B,IAHA+gB,EAAKrf,KAAKC,IAAKof,EAAKF,EAAO,EAAG,UAE9Bxd,EAAEod,aAAa5hB,EAAGkiB,EAAI/gB,GACA,IAAfqD,EAAE2O,UACP+O,IACA1d,EAAE2O,SAAW,EACb3O,EAAEod,aAAa5hB,EAAG,EAAGmB,GAChBqD,EAAE+Q,WACL/Q,EAAE2O,UAAY,GAGd4C,IACFA,EAAE3C,MAAMjS,GAAK+gB,GAajB,OAVInM,GACFA,EAAE9B,QAEJzP,EAAEyP,QAGW,QAAT8N,GAA4B,IAAVF,GACpBrd,EAAEwJ,OAAO6T,GAGJ,CACLM,IAAKpM,GAAK,KACVnI,IAAKpJ,IAQToI,EAAG3R,UAAUmnB,OAAS,SAAiBjV,EAAK4U,EAAMM,GAGhD,OAFA9V,GAAQY,EAAIoI,UAERhY,KAAKgY,SACA,CACL4M,IAAK,IAAIvV,EAAG,GACZgB,IAAK,IAAIhB,EAAG,IAKM,IAAlBrP,KAAK4V,UAAmC,IAAjBhG,EAAIgG,UAC7BpQ,EAAMxF,KAAKwZ,MAAMqL,OAAOjV,EAAK4U,GAEhB,QAATA,IACFI,EAAMpf,EAAIof,IAAIpL,OAGH,QAATgL,IACFnU,EAAM7K,EAAI6K,IAAImJ,MACVsL,GAA6B,IAAjBzU,EAAIuF,UAClBvF,EAAIqK,KAAK9K,IAIN,CACLgV,IAAKA,EACLvU,IAAKA,IAIa,IAAlBrQ,KAAK4V,UAAmC,IAAjBhG,EAAIgG,UAC7BpQ,EAAMxF,KAAK6kB,OAAOjV,EAAI4J,MAAOgL,GAEhB,QAATA,IACFI,EAAMpf,EAAIof,IAAIpL,OAGT,CACLoL,IAAKA,EACLvU,IAAK7K,EAAI6K,MAI0B,IAAlCrQ,KAAK4V,SAAWhG,EAAIgG,WACvBpQ,EAAMxF,KAAKwZ,MAAMqL,OAAOjV,EAAI4J,MAAOgL,GAEtB,QAATA,IACFnU,EAAM7K,EAAI6K,IAAImJ,MACVsL,GAA6B,IAAjBzU,EAAIuF,UAClBvF,EAAIsK,KAAK/K,IAIN,CACLgV,IAAKpf,EAAIof,IACTvU,IAAKA,IAOLT,EAAIlR,OAASsB,KAAKtB,QAAUsB,KAAKqW,IAAIzG,GAAO,EACvC,CACLgV,IAAK,IAAIvV,EAAG,GACZgB,IAAKrQ,MAKU,IAAf4P,EAAIlR,OACO,QAAT8lB,EACK,CACLI,IAAK5kB,KAAK+kB,KAAKnV,EAAIiG,MAAM,IACzBxF,IAAK,MAII,QAATmU,EACK,CACLI,IAAK,KACLvU,IAAK,IAAIhB,EAAGrP,KAAKiY,KAAKrI,EAAIiG,MAAM,MAI7B,CACL+O,IAAK5kB,KAAK+kB,KAAKnV,EAAIiG,MAAM,IACzBxF,IAAK,IAAIhB,EAAGrP,KAAKiY,KAAKrI,EAAIiG,MAAM,MAI7B7V,KAAKukB,SAAS3U,EAAK4U,GAlF1B,IAAII,EAAKvU,EAAK7K,GAsFhB6J,EAAG3R,UAAUknB,IAAM,SAAchV,GAC/B,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAOgV,KAIxCvV,EAAG3R,UAAU2S,IAAM,SAAcT,GAC/B,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAOS,KAGxChB,EAAG3R,UAAUsnB,KAAO,SAAepV,GACjC,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAMS,KAIvChB,EAAG3R,UAAUunB,SAAW,SAAmBrV,GACzC,IAAIsV,EAAKllB,KAAK6kB,OAAOjV,GAGrB,GAAIsV,EAAG7U,IAAI2H,SAAU,OAAOkN,EAAGN,IAE/B,IAAIvU,EAA0B,IAApB6U,EAAGN,IAAIhP,SAAiBsP,EAAG7U,IAAIsK,KAAK/K,GAAOsV,EAAG7U,IAEpD8U,EAAOvV,EAAImU,MAAM,GACjBqB,EAAKxV,EAAIU,MAAM,GACf+F,EAAMhG,EAAIgG,IAAI8O,GAGlB,OAAI9O,EAAM,GAAY,IAAP+O,GAAoB,IAAR/O,EAAkB6O,EAAGN,IAGrB,IAApBM,EAAGN,IAAIhP,SAAiBsP,EAAGN,IAAIpU,MAAM,GAAK0U,EAAGN,IAAI1L,MAAM,IAGhE7J,EAAG3R,UAAUua,KAAO,SAAerI,GACjCZ,EAAOY,GAAO,UAId,IAHA,IAAI2D,GAAK,GAAK,IAAM3D,EAEhByV,EAAM,EACD7jB,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IACpC6jB,GAAO9R,EAAI8R,GAAuB,EAAhBrlB,KAAK6V,MAAMrU,KAAWoO,EAG1C,OAAOyV,GAIThW,EAAG3R,UAAUwa,MAAQ,SAAgBtI,GACnCZ,EAAOY,GAAO,UAGd,IADA,IAAImF,EAAQ,EACHvT,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACzC,IAAIqO,GAAqB,EAAhB7P,KAAK6V,MAAMrU,IAAkB,SAARuT,EAC9B/U,KAAK6V,MAAMrU,GAAMqO,EAAID,EAAO,EAC5BmF,EAAQlF,EAAID,EAGd,OAAO5P,KAAK0W,SAGdrH,EAAG3R,UAAUqnB,KAAO,SAAenV,GACjC,OAAO5P,KAAKmQ,QAAQ+H,MAAMtI,IAG5BP,EAAG3R,UAAU4nB,KAAO,SAAe/R,GACjCvE,EAAsB,IAAfuE,EAAEqC,UACT5G,GAAQuE,EAAEyE,UAEV,IAAI9Q,EAAIlH,KACJmH,EAAIoM,EAAEpD,QAGRjJ,EADiB,IAAfA,EAAE0O,SACA1O,EAAE8d,KAAKzR,GAEPrM,EAAEiJ,QAaR,IATA,IAAIoV,EAAI,IAAIlW,EAAG,GACXmW,EAAI,IAAInW,EAAG,GAGXoW,EAAI,IAAIpW,EAAG,GACXqW,EAAI,IAAIrW,EAAG,GAEXsW,EAAI,EAEDze,EAAE0e,UAAYze,EAAEye,UACrB1e,EAAEuJ,OAAO,GACTtJ,EAAEsJ,OAAO,KACPkV,EAMJ,IAHA,IAAIE,EAAK1e,EAAEgJ,QACP2V,EAAK5e,EAAEiJ,SAEHjJ,EAAE8Q,UAAU,CAClB,IAAK,IAAIxW,EAAI,EAAGukB,EAAK,EAAyB,IAArB7e,EAAE2O,MAAM,GAAKkQ,IAAavkB,EAAI,KAAMA,EAAGukB,IAAO,GACvE,GAAIvkB,EAAI,EAEN,IADA0F,EAAEuJ,OAAOjP,GACFA,KAAM,IACP+jB,EAAEhV,SAAWiV,EAAEjV,WACjBgV,EAAE7K,KAAKmL,GACPL,EAAE7K,KAAKmL,IAGTP,EAAE9U,OAAO,GACT+U,EAAE/U,OAAO,GAIb,IAAK,IAAI7M,EAAI,EAAGoiB,EAAK,EAAyB,IAArB7e,EAAE0O,MAAM,GAAKmQ,IAAapiB,EAAI,KAAMA,EAAGoiB,IAAO,GACvE,GAAIpiB,EAAI,EAEN,IADAuD,EAAEsJ,OAAO7M,GACFA,KAAM,IACP6hB,EAAElV,SAAWmV,EAAEnV,WACjBkV,EAAE/K,KAAKmL,GACPH,EAAE/K,KAAKmL,IAGTL,EAAEhV,OAAO,GACTiV,EAAEjV,OAAO,GAITvJ,EAAEmP,IAAIlP,IAAM,GACdD,EAAEyT,KAAKxT,GACPoe,EAAE5K,KAAK8K,GACPD,EAAE7K,KAAK+K,KAEPve,EAAEwT,KAAKzT,GACPue,EAAE9K,KAAK4K,GACPG,EAAE/K,KAAK6K,IAIX,MAAO,CACLve,EAAGwe,EACHhjB,EAAGijB,EACHO,IAAK9e,EAAE+b,OAAOyC,KAOlBtW,EAAG3R,UAAUwoB,OAAS,SAAiB3S,GACrCvE,EAAsB,IAAfuE,EAAEqC,UACT5G,GAAQuE,EAAEyE,UAEV,IAAI/Q,EAAIjH,KACJyC,EAAI8Q,EAAEpD,QAGRlJ,EADiB,IAAfA,EAAE2O,SACA3O,EAAE+d,KAAKzR,GAEPtM,EAAEkJ,QAQR,IALA,IAuCI3K,EAvCA2gB,EAAK,IAAI9W,EAAG,GACZ+W,EAAK,IAAI/W,EAAG,GAEZgX,EAAQ5jB,EAAE0N,QAEPlJ,EAAE+J,KAAK,GAAK,GAAKvO,EAAEuO,KAAK,GAAK,GAAG,CACrC,IAAK,IAAIxP,EAAI,EAAGukB,EAAK,EAAyB,IAArB9e,EAAE4O,MAAM,GAAKkQ,IAAavkB,EAAI,KAAMA,EAAGukB,IAAO,GACvE,GAAIvkB,EAAI,EAEN,IADAyF,EAAEwJ,OAAOjP,GACFA,KAAM,GACP2kB,EAAG5V,SACL4V,EAAGzL,KAAK2L,GAGVF,EAAG1V,OAAO,GAId,IAAK,IAAI7M,EAAI,EAAGoiB,EAAK,EAAyB,IAArBvjB,EAAEoT,MAAM,GAAKmQ,IAAapiB,EAAI,KAAMA,EAAGoiB,IAAO,GACvE,GAAIpiB,EAAI,EAEN,IADAnB,EAAEgO,OAAO7M,GACFA,KAAM,GACPwiB,EAAG7V,SACL6V,EAAG1L,KAAK2L,GAGVD,EAAG3V,OAAO,GAIVxJ,EAAEoP,IAAI5T,IAAM,GACdwE,EAAE0T,KAAKlY,GACP0jB,EAAGxL,KAAKyL,KAER3jB,EAAEkY,KAAK1T,GACPmf,EAAGzL,KAAKwL,IAeZ,OATE3gB,EADgB,IAAdyB,EAAE+J,KAAK,GACHmV,EAEAC,GAGApV,KAAK,GAAK,GAChBxL,EAAIkV,KAAKnH,GAGJ/N,GAGT6J,EAAG3R,UAAUuoB,IAAM,SAAcrW,GAC/B,GAAI5P,KAAKgY,SAAU,OAAOpI,EAAIoJ,MAC9B,GAAIpJ,EAAIoI,SAAU,OAAOhY,KAAKgZ,MAE9B,IAAI/R,EAAIjH,KAAKmQ,QACT1N,EAAImN,EAAIO,QACZlJ,EAAE2O,SAAW,EACbnT,EAAEmT,SAAW,EAGb,IAAK,IAAI0O,EAAQ,EAAGrd,EAAE2e,UAAYnjB,EAAEmjB,SAAUtB,IAC5Crd,EAAEwJ,OAAO,GACThO,EAAEgO,OAAO,GAGX,OAAG,CACD,KAAOxJ,EAAE2e,UACP3e,EAAEwJ,OAAO,GAEX,KAAOhO,EAAEmjB,UACPnjB,EAAEgO,OAAO,GAGX,IAAItB,EAAIlI,EAAEoP,IAAI5T,GACd,GAAI0M,EAAI,EAAG,CAET,IAAIwJ,EAAI1R,EACRA,EAAIxE,EACJA,EAAIkW,OACC,GAAU,IAANxJ,GAAyB,IAAd1M,EAAEuO,KAAK,GAC3B,MAGF/J,EAAE0T,KAAKlY,GAGT,OAAOA,EAAEygB,OAAOoB,IAIlBjV,EAAG3R,UAAU4oB,KAAO,SAAe1W,GACjC,OAAO5P,KAAKslB,KAAK1V,GAAK3I,EAAE+d,KAAKpV,IAG/BP,EAAG3R,UAAUkoB,OAAS,WACpB,OAA+B,IAAP,EAAhB5lB,KAAK6V,MAAM,KAGrBxG,EAAG3R,UAAU6S,MAAQ,WACnB,OAA+B,IAAP,EAAhBvQ,KAAK6V,MAAM,KAIrBxG,EAAG3R,UAAU4S,MAAQ,SAAgBV,GACnC,OAAO5P,KAAK6V,MAAM,GAAKjG,GAIzBP,EAAG3R,UAAU6oB,MAAQ,SAAgB/L,GACnCxL,EAAsB,iBAARwL,GACd,IAAIrL,EAAIqL,EAAM,GACVyG,GAAKzG,EAAMrL,GAAK,GAChBqJ,EAAI,GAAKrJ,EAGb,GAAInP,KAAKtB,QAAUuiB,EAGjB,OAFAjhB,KAAKmX,QAAQ8J,EAAI,GACjBjhB,KAAK6V,MAAMoL,IAAMzI,EACVxY,KAKT,IADA,IAAI+U,EAAQyD,EACHhX,EAAIyf,EAAa,IAAVlM,GAAevT,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACnD,IAAIqO,EAAoB,EAAhB7P,KAAK6V,MAAMrU,GAEnBuT,GADAlF,GAAKkF,KACS,GACdlF,GAAK,SACL7P,KAAK6V,MAAMrU,GAAKqO,EAMlB,OAJc,IAAVkF,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAEAsB,MAGTqP,EAAG3R,UAAUsa,OAAS,WACpB,OAAuB,IAAhBhY,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,IAGzCxG,EAAG3R,UAAUsT,KAAO,SAAepB,GACjC,IAOIpK,EAPAoQ,EAAWhG,EAAM,EAErB,GAAsB,IAAlB5P,KAAK4V,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlB5V,KAAK4V,UAAkBA,EAAU,OAAO,EAK5C,GAHA5V,KAAK0W,QAGD1W,KAAKtB,OAAS,EAChB8G,EAAM,MACD,CACDoQ,IACFhG,GAAOA,GAGTZ,EAAOY,GAAO,SAAW,qBAEzB,IAAIC,EAAoB,EAAhB7P,KAAK6V,MAAM,GACnBrQ,EAAMqK,IAAMD,EAAM,EAAIC,EAAID,GAAO,EAAI,EAEvC,OAAsB,IAAlB5P,KAAK4V,SAA8B,GAANpQ,EAC1BA,GAOT6J,EAAG3R,UAAU2Y,IAAM,SAAczG,GAC/B,GAAsB,IAAlB5P,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAAgB,OAAQ,EACvD,GAAsB,IAAlB5V,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAAgB,OAAO,EAEtD,IAAIpQ,EAAMxF,KAAKwmB,KAAK5W,GACpB,OAAsB,IAAlB5P,KAAK4V,SAA8B,GAANpQ,EAC1BA,GAIT6J,EAAG3R,UAAU8oB,KAAO,SAAe5W,GAEjC,GAAI5P,KAAKtB,OAASkR,EAAIlR,OAAQ,OAAO,EACrC,GAAIsB,KAAKtB,OAASkR,EAAIlR,OAAQ,OAAQ,EAGtC,IADA,IAAI8G,EAAM,EACDhE,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACzC,IAAIyF,EAAoB,EAAhBjH,KAAK6V,MAAMrU,GACfiB,EAAmB,EAAfmN,EAAIiG,MAAMrU,GAElB,GAAIyF,IAAMxE,EAAV,CACIwE,EAAIxE,EACN+C,GAAO,EACEyB,EAAIxE,IACb+C,EAAM,GAER,OAEF,OAAOA,GAGT6J,EAAG3R,UAAU+oB,IAAM,SAAc7W,GAC/B,OAA0B,IAAnB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUgpB,GAAK,SAAa9W,GAC7B,OAAyB,IAAlB5P,KAAKqW,IAAIzG,IAGlBP,EAAG3R,UAAUipB,KAAO,SAAe/W,GACjC,OAAO5P,KAAKgR,KAAKpB,IAAQ,GAG3BP,EAAG3R,UAAUkpB,IAAM,SAAchX,GAC/B,OAAO5P,KAAKqW,IAAIzG,IAAQ,GAG1BP,EAAG3R,UAAUmpB,IAAM,SAAcjX,GAC/B,OAA2B,IAApB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUopB,GAAK,SAAalX,GAC7B,OAA0B,IAAnB5P,KAAKqW,IAAIzG,IAGlBP,EAAG3R,UAAUqpB,KAAO,SAAenX,GACjC,OAAO5P,KAAKgR,KAAKpB,IAAQ,GAG3BP,EAAG3R,UAAUspB,IAAM,SAAcpX,GAC/B,OAAO5P,KAAKqW,IAAIzG,IAAQ,GAG1BP,EAAG3R,UAAUupB,IAAM,SAAcrX,GAC/B,OAA0B,IAAnB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUwpB,GAAK,SAAatX,GAC7B,OAAyB,IAAlB5P,KAAKqW,IAAIzG,IAOlBP,EAAGyG,IAAM,SAAclG,GACrB,OAAO,IAAIuX,EAAIvX,IAGjBP,EAAG3R,UAAU0pB,MAAQ,SAAgBC,GAGnC,OAFArY,GAAQhP,KAAK8V,IAAK,yCAClB9G,EAAyB,IAAlBhP,KAAK4V,SAAgB,iCACrByR,EAAIC,UAAUtnB,MAAMunB,UAAUF,IAGvChY,EAAG3R,UAAU8pB,QAAU,WAErB,OADAxY,EAAOhP,KAAK8V,IAAK,wDACV9V,KAAK8V,IAAI2R,YAAYznB,OAG9BqP,EAAG3R,UAAU6pB,UAAY,SAAoBF,GAE3C,OADArnB,KAAK8V,IAAMuR,EACJrnB,MAGTqP,EAAG3R,UAAUgqB,SAAW,SAAmBL,GAEzC,OADArY,GAAQhP,KAAK8V,IAAK,yCACX9V,KAAKunB,UAAUF,IAGxBhY,EAAG3R,UAAUiqB,OAAS,SAAiB/X,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAI8E,IAAI5a,KAAM4P,IAG5BP,EAAG3R,UAAUkqB,QAAU,SAAkBhY,GAEvC,OADAZ,EAAOhP,KAAK8V,IAAK,uCACV9V,KAAK8V,IAAI4E,KAAK1a,KAAM4P,IAG7BP,EAAG3R,UAAUmqB,OAAS,SAAiBjY,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAIvK,IAAIvL,KAAM4P,IAG5BP,EAAG3R,UAAUoqB,QAAU,SAAkBlY,GAEvC,OADAZ,EAAOhP,KAAK8V,IAAK,uCACV9V,KAAK8V,IAAI6E,KAAK3a,KAAM4P,IAG7BP,EAAG3R,UAAUqqB,OAAS,SAAiBnY,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAIkS,IAAIhoB,KAAM4P,IAG5BP,EAAG3R,UAAUuqB,OAAS,SAAiBrY,GAGrC,OAFAZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIoS,SAASloB,KAAM4P,GACjB5P,KAAK8V,IAAInM,IAAI3J,KAAM4P,IAG5BP,EAAG3R,UAAUyqB,QAAU,SAAkBvY,GAGvC,OAFAZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIoS,SAASloB,KAAM4P,GACjB5P,KAAK8V,IAAI+I,KAAK7e,KAAM4P,IAG7BP,EAAG3R,UAAU0qB,OAAS,WAGpB,OAFApZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIiN,IAAI/iB,OAGtBqP,EAAG3R,UAAU4qB,QAAU,WAGrB,OAFAtZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIkN,KAAKhjB,OAIvBqP,EAAG3R,UAAU6qB,QAAU,WAGrB,OAFAvZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI0S,KAAKxoB,OAGvBqP,EAAG3R,UAAU+qB,QAAU,WAGrB,OAFAzZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIwQ,KAAKtmB,OAIvBqP,EAAG3R,UAAUgrB,OAAS,WAGpB,OAFA1Z,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI0D,IAAIxZ,OAGtBqP,EAAG3R,UAAUirB,OAAS,SAAiB/Y,GAGrC,OAFAZ,EAAOhP,KAAK8V,MAAQlG,EAAIkG,IAAK,qBAC7B9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI5L,IAAIlK,KAAM4P,IAI5B,IAAIgZ,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQ1X,EAAMgC,GAErBvT,KAAKuR,KAAOA,EACZvR,KAAKuT,EAAI,IAAIlE,EAAGkE,EAAG,IACnBvT,KAAK0C,EAAI1C,KAAKuT,EAAEvD,YAChBhQ,KAAKkQ,EAAI,IAAIb,EAAG,GAAG6T,OAAOljB,KAAK0C,GAAGiY,KAAK3a,KAAKuT,GAE5CvT,KAAKkpB,IAAMlpB,KAAKmpB,OAiDlB,SAASC,IACPH,EAAOhmB,KACLjD,KACA,OACA,2EA+DJ,SAASqpB,IACPJ,EAAOhmB,KACLjD,KACA,OACA,kEAIJ,SAASspB,IACPL,EAAOhmB,KACLjD,KACA,OACA,yDAIJ,SAASupB,IAEPN,EAAOhmB,KACLjD,KACA,QACA,uEA8CJ,SAASmnB,EAAKxkB,GACZ,GAAiB,iBAANA,EAAgB,CACzB,IAAI6mB,EAAQna,EAAGoa,OAAO9mB,GACtB3C,KAAK2C,EAAI6mB,EAAMjW,EACfvT,KAAKwpB,MAAQA,OAEbxa,EAAOrM,EAAE8jB,IAAI,GAAI,kCACjBzmB,KAAK2C,EAAIA,EACT3C,KAAKwpB,MAAQ,KAkOjB,SAASE,EAAM/mB,GACbwkB,EAAIlkB,KAAKjD,KAAM2C,GAEf3C,KAAKskB,MAAQtkB,KAAK2C,EAAEqN,YAChBhQ,KAAKskB,MAAQ,IAAO,IACtBtkB,KAAKskB,OAAS,GAAMtkB,KAAKskB,MAAQ,IAGnCtkB,KAAKmP,EAAI,IAAIE,EAAG,GAAG6T,OAAOljB,KAAKskB,OAC/BtkB,KAAKolB,GAAKplB,KAAK2pB,KAAK3pB,KAAKmP,EAAE4T,OAC3B/iB,KAAK4pB,KAAO5pB,KAAKmP,EAAE+W,OAAOlmB,KAAK2C,GAE/B3C,KAAK6pB,KAAO7pB,KAAK4pB,KAAKjgB,IAAI3J,KAAKmP,GAAGqB,MAAM,GAAGoU,IAAI5kB,KAAK2C,GACpD3C,KAAK6pB,KAAO7pB,KAAK6pB,KAAK7E,KAAKhlB,KAAKmP,GAChCnP,KAAK6pB,KAAO7pB,KAAKmP,EAAE5D,IAAIvL,KAAK6pB,MA5a9BZ,EAAOvrB,UAAUyrB,KAAO,WACtB,IAAID,EAAM,IAAI7Z,EAAG,MAEjB,OADA6Z,EAAIrT,MAAQ,IAAIrN,MAAMlD,KAAKqR,KAAK3W,KAAK0C,EAAI,KAClCwmB,GAGTD,EAAOvrB,UAAUosB,QAAU,SAAkBla,GAG3C,IACIma,EADA5a,EAAIS,EAGR,GACE5P,KAAKgqB,MAAM7a,EAAGnP,KAAKkpB,KAGnBa,GADA5a,GADAA,EAAInP,KAAKiqB,MAAM9a,IACTuL,KAAK1a,KAAKkpB,MACPlZ,kBACF+Z,EAAO/pB,KAAK0C,GAErB,IAAI2T,EAAM0T,EAAO/pB,KAAK0C,GAAK,EAAIyM,EAAEqX,KAAKxmB,KAAKuT,GAgB3C,OAfY,IAAR8C,GACFlH,EAAE0G,MAAM,GAAK,EACb1G,EAAEzQ,OAAS,GACF2X,EAAM,EACflH,EAAEwL,KAAK3a,KAAKuT,QAEInU,IAAZ+P,EAAEuH,MAEJvH,EAAEuH,QAGFvH,EAAE+a,SAIC/a,GAGT8Z,EAAOvrB,UAAUssB,MAAQ,SAAgBG,EAAOxhB,GAC9CwhB,EAAM1Z,OAAOzQ,KAAK0C,EAAG,EAAGiG,IAG1BsgB,EAAOvrB,UAAUusB,MAAQ,SAAgBra,GACvC,OAAOA,EAAIiP,KAAK7e,KAAKkQ,IASvB+C,EAASmW,EAAMH,GAEfG,EAAK1rB,UAAUssB,MAAQ,SAAgBG,EAAOC,GAK5C,IAHA,IAEIC,EAAS/kB,KAAKC,IAAI4kB,EAAMzrB,OAAQ,GAC3B8C,EAAI,EAAGA,EAAI6oB,EAAQ7oB,IAC1B4oB,EAAOvU,MAAMrU,GAAK2oB,EAAMtU,MAAMrU,GAIhC,GAFA4oB,EAAO1rB,OAAS2rB,EAEZF,EAAMzrB,QAAU,EAGlB,OAFAyrB,EAAMtU,MAAM,GAAK,OACjBsU,EAAMzrB,OAAS,GAKjB,IAAI4rB,EAAOH,EAAMtU,MAAM,GAGvB,IAFAuU,EAAOvU,MAAMuU,EAAO1rB,UAhBT,QAgBqB4rB,EAE3B9oB,EAAI,GAAIA,EAAI2oB,EAAMzrB,OAAQ8C,IAAK,CAClC,IAAI+oB,EAAwB,EAAjBJ,EAAMtU,MAAMrU,GACvB2oB,EAAMtU,MAAMrU,EAAI,KApBP,QAoBe+oB,IAAgB,EAAMD,IAAS,GACvDA,EAAOC,EAETD,KAAU,GACVH,EAAMtU,MAAMrU,EAAI,IAAM8oB,EACT,IAATA,GAAcH,EAAMzrB,OAAS,GAC/ByrB,EAAMzrB,QAAU,GAEhByrB,EAAMzrB,QAAU,GAIpB0qB,EAAK1rB,UAAUusB,MAAQ,SAAgBra,GAErCA,EAAIiG,MAAMjG,EAAIlR,QAAU,EACxBkR,EAAIiG,MAAMjG,EAAIlR,OAAS,GAAK,EAC5BkR,EAAIlR,QAAU,EAId,IADA,IAAIyG,EAAK,EACA3D,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CACnC,IAAIqO,EAAmB,EAAfD,EAAIiG,MAAMrU,GAClB2D,GAAU,IAAJ0K,EACND,EAAIiG,MAAMrU,GAAU,SAAL2D,EACfA,EAAS,GAAJ0K,GAAa1K,EAAK,SAAa,GAUtC,OANkC,IAA9ByK,EAAIiG,MAAMjG,EAAIlR,OAAS,KACzBkR,EAAIlR,SAC8B,IAA9BkR,EAAIiG,MAAMjG,EAAIlR,OAAS,IACzBkR,EAAIlR,UAGDkR,GASTqD,EAASoW,EAAMJ,GAQfhW,EAASqW,EAAML,GASfhW,EAASsW,EAAQN,GAEjBM,EAAO7rB,UAAUusB,MAAQ,SAAgBra,GAGvC,IADA,IAAImF,EAAQ,EACHvT,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CACnC,IAAI0D,EAA0B,IAAL,EAAf0K,EAAIiG,MAAMrU,IAAiBuT,EACjC5P,EAAU,SAALD,EACTA,KAAQ,GAER0K,EAAIiG,MAAMrU,GAAK2D,EACf4P,EAAQ7P,EAKV,OAHc,IAAV6P,IACFnF,EAAIiG,MAAMjG,EAAIlR,UAAYqW,GAErBnF,GAITP,EAAGoa,OAAS,SAAgBlY,GAE1B,GAAIqX,EAAOrX,GAAO,OAAOqX,EAAOrX,GAEhC,IAAIiY,EACJ,GAAa,SAATjY,EACFiY,EAAQ,IAAIJ,OACP,GAAa,SAAT7X,EACTiY,EAAQ,IAAIH,OACP,GAAa,SAAT9X,EACTiY,EAAQ,IAAIF,MACP,IAAa,WAAT/X,EAGT,MAAM,IAAItR,MAAM,iBAAmBsR,GAFnCiY,EAAQ,IAAID,EAMd,OAFAX,EAAOrX,GAAQiY,EAERA,GAkBTrC,EAAIzpB,UAAU2qB,SAAW,SAAmBphB,GAC1C+H,EAAsB,IAAf/H,EAAE2O,SAAgB,iCACzB5G,EAAO/H,EAAE6O,IAAK,oCAGhBqR,EAAIzpB,UAAUwqB,SAAW,SAAmBjhB,EAAGxE,GAC7CuM,EAAqC,IAA7B/H,EAAE2O,SAAWnT,EAAEmT,UAAiB,iCACxC5G,EAAO/H,EAAE6O,KAAO7O,EAAE6O,MAAQrT,EAAEqT,IAC1B,oCAGJqR,EAAIzpB,UAAUisB,KAAO,SAAe1iB,GAClC,OAAIjH,KAAKwpB,MAAcxpB,KAAKwpB,MAAMM,QAAQ7iB,GAAGsgB,UAAUvnB,MAChDiH,EAAE+d,KAAKhlB,KAAK2C,GAAG4kB,UAAUvnB,OAGlCmnB,EAAIzpB,UAAU8b,IAAM,SAAcvS,GAChC,OAAIA,EAAE+Q,SACG/Q,EAAEkJ,QAGJnQ,KAAK2C,EAAE4I,IAAItE,GAAGsgB,UAAUvnB,OAGjCmnB,EAAIzpB,UAAUkd,IAAM,SAAc3T,EAAGxE,GACnCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAE2T,IAAInY,GAIhB,OAHI+C,EAAI6Q,IAAIrW,KAAK2C,IAAM,GACrB6C,EAAImV,KAAK3a,KAAK2C,GAET6C,EAAI+hB,UAAUvnB,OAGvBmnB,EAAIzpB,UAAUgd,KAAO,SAAezT,EAAGxE,GACrCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEyT,KAAKjY,GAIjB,OAHI+C,EAAI6Q,IAAIrW,KAAK2C,IAAM,GACrB6C,EAAImV,KAAK3a,KAAK2C,GAET6C,GAGT2hB,EAAIzpB,UAAU6N,IAAM,SAActE,EAAGxE,GACnCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEsE,IAAI9I,GAIhB,OAHI+C,EAAIwL,KAAK,GAAK,GAChBxL,EAAIkV,KAAK1a,KAAK2C,GAET6C,EAAI+hB,UAAUvnB,OAGvBmnB,EAAIzpB,UAAUid,KAAO,SAAe1T,EAAGxE,GACrCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAE0T,KAAKlY,GAIjB,OAHI+C,EAAIwL,KAAK,GAAK,GAChBxL,EAAIkV,KAAK1a,KAAK2C,GAET6C,GAGT2hB,EAAIzpB,UAAUsqB,IAAM,SAAc/gB,EAAG2I,GAEnC,OADA5P,KAAKqoB,SAASphB,GACPjH,KAAK2pB,KAAK1iB,EAAE4c,MAAMjU,KAG3BuX,EAAIzpB,UAAUmhB,KAAO,SAAe5X,EAAGxE,GAErC,OADAzC,KAAKkoB,SAASjhB,EAAGxE,GACVzC,KAAK2pB,KAAK1iB,EAAE4X,KAAKpc,KAG1B0kB,EAAIzpB,UAAUiM,IAAM,SAAc1C,EAAGxE,GAEnC,OADAzC,KAAKkoB,SAASjhB,EAAGxE,GACVzC,KAAK2pB,KAAK1iB,EAAE0C,IAAIlH,KAGzB0kB,EAAIzpB,UAAUslB,KAAO,SAAe/b,GAClC,OAAOjH,KAAK6e,KAAK5X,EAAGA,EAAEkJ,UAGxBgX,EAAIzpB,UAAUqlB,IAAM,SAAc9b,GAChC,OAAOjH,KAAK2J,IAAI1C,EAAGA,IAGrBkgB,EAAIzpB,UAAU8qB,KAAO,SAAevhB,GAClC,GAAIA,EAAE+Q,SAAU,OAAO/Q,EAAEkJ,QAEzB,IAAIqa,EAAOxqB,KAAK2C,EAAE2N,MAAM,GAIxB,GAHAtB,EAAOwb,EAAO,GAAM,GAGP,IAATA,EAAY,CACd,IAAItgB,EAAMlK,KAAK2C,EAAEiY,IAAI,IAAIvL,EAAG,IAAIoB,OAAO,GACvC,OAAOzQ,KAAKkK,IAAIjD,EAAGiD,GAQrB,IAFA,IAAIsO,EAAIxY,KAAK2C,EAAEwhB,KAAK,GAChBlD,EAAI,GACAzI,EAAER,UAA2B,IAAfQ,EAAElI,MAAM,IAC5B2Q,IACAzI,EAAE/H,OAAO,GAEXzB,GAAQwJ,EAAER,UAEV,IAAIyS,EAAM,IAAIpb,EAAG,GAAG+X,MAAMpnB,MACtB0qB,EAAOD,EAAI/B,SAIXiC,EAAO3qB,KAAK2C,EAAEwhB,KAAK,GAAG1T,OAAO,GAC7BL,EAAIpQ,KAAK2C,EAAEqN,YAGf,IAFAI,EAAI,IAAIf,EAAG,EAAIe,EAAIA,GAAGgX,MAAMpnB,MAEW,IAAhCA,KAAKkK,IAAIkG,EAAGua,GAAMtU,IAAIqU,IAC3Bta,EAAEwX,QAAQ8C,GAOZ,IAJA,IAAIzlB,EAAIjF,KAAKkK,IAAIkG,EAAGoI,GAChBrJ,EAAInP,KAAKkK,IAAIjD,EAAGuR,EAAE0L,KAAK,GAAGzT,OAAO,IACjCkI,EAAI3Y,KAAKkK,IAAIjD,EAAGuR,GAChB7V,EAAIse,EACc,IAAftI,EAAEtC,IAAIoU,IAAY,CAEvB,IADA,IAAIvB,EAAMvQ,EACDnX,EAAI,EAAoB,IAAjB0nB,EAAI7S,IAAIoU,GAAYjpB,IAClC0nB,EAAMA,EAAId,SAEZpZ,EAAOxN,EAAImB,GACX,IAAIF,EAAIzC,KAAKkK,IAAIjF,EAAG,IAAIoK,EAAG,GAAG6T,OAAOvgB,EAAInB,EAAI,IAE7C2N,EAAIA,EAAE8Y,OAAOxlB,GACbwC,EAAIxC,EAAE2lB,SACNzP,EAAIA,EAAEsP,OAAOhjB,GACbtC,EAAInB,EAGN,OAAO2N,GAGTgY,EAAIzpB,UAAU4oB,KAAO,SAAerf,GAClC,IAAI2jB,EAAM3jB,EAAEif,OAAOlmB,KAAK2C,GACxB,OAAqB,IAAjBioB,EAAIhV,UACNgV,EAAIhV,SAAW,EACR5V,KAAK2pB,KAAKiB,GAAKlC,UAEf1oB,KAAK2pB,KAAKiB,IAIrBzD,EAAIzpB,UAAUwM,IAAM,SAAcjD,EAAG2I,GACnC,GAAIA,EAAIoI,SAAU,OAAO,IAAI3I,EAAG,GAAG+X,MAAMpnB,MACzC,GAAoB,IAAhB4P,EAAIoB,KAAK,GAAU,OAAO/J,EAAEkJ,QAEhC,IACI0a,EAAM,IAAIriB,MAAM,IACpBqiB,EAAI,GAAK,IAAIxb,EAAG,GAAG+X,MAAMpnB,MACzB6qB,EAAI,GAAK5jB,EACT,IAAK,IAAIzF,EAAI,EAAGA,EAAIqpB,EAAInsB,OAAQ8C,IAC9BqpB,EAAIrpB,GAAKxB,KAAK2J,IAAIkhB,EAAIrpB,EAAI,GAAIyF,GAGhC,IAAIzB,EAAMqlB,EAAI,GACVC,EAAU,EACVC,EAAa,EACb/oB,EAAQ4N,EAAII,YAAc,GAK9B,IAJc,IAAVhO,IACFA,EAAQ,IAGLR,EAAIoO,EAAIlR,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CAEpC,IADA,IAAI4R,EAAOxD,EAAIiG,MAAMrU,GACZoC,EAAI5B,EAAQ,EAAG4B,GAAK,EAAGA,IAAK,CACnC,IAAI4W,EAAOpH,GAAQxP,EAAK,EACpB4B,IAAQqlB,EAAI,KACdrlB,EAAMxF,KAAK+iB,IAAIvd,IAGL,IAARgV,GAAyB,IAAZsQ,GAKjBA,IAAY,EACZA,GAAWtQ,GA9BE,MA+BbuQ,GACwC,IAANvpB,GAAiB,IAANoC,KAE7C4B,EAAMxF,KAAK2J,IAAInE,EAAKqlB,EAAIC,IACxBC,EAAa,EACbD,EAAU,IAXRC,EAAa,EAajB/oB,EAAQ,GAGV,OAAOwD,GAGT2hB,EAAIzpB,UAAU4pB,UAAY,SAAoB1X,GAC5C,IAAIT,EAAIS,EAAIoV,KAAKhlB,KAAK2C,GAEtB,OAAOwM,IAAMS,EAAMT,EAAEgB,QAAUhB,GAGjCgY,EAAIzpB,UAAU+pB,YAAc,SAAsB7X,GAChD,IAAIpK,EAAMoK,EAAIO,QAEd,OADA3K,EAAIsQ,IAAM,KACHtQ,GAOT6J,EAAG2b,KAAO,SAAepb,GACvB,OAAO,IAAI8Z,EAAK9Z,IAmBlBqD,EAASyW,EAAMvC,GAEfuC,EAAKhsB,UAAU4pB,UAAY,SAAoB1X,GAC7C,OAAO5P,KAAK2pB,KAAK/Z,EAAIiU,MAAM7jB,KAAKskB,SAGlCoF,EAAKhsB,UAAU+pB,YAAc,SAAsB7X,GACjD,IAAIT,EAAInP,KAAK2pB,KAAK/Z,EAAIjG,IAAI3J,KAAK4pB,OAE/B,OADAza,EAAE2G,IAAM,KACD3G,GAGTua,EAAKhsB,UAAUmhB,KAAO,SAAe5X,EAAGxE,GACtC,GAAIwE,EAAE+Q,UAAYvV,EAAEuV,SAGlB,OAFA/Q,EAAE4O,MAAM,GAAK,EACb5O,EAAEvI,OAAS,EACJuI,EAGT,IAAI0R,EAAI1R,EAAE4X,KAAKpc,GACXwC,EAAI0T,EAAEsL,MAAMjkB,KAAKskB,OAAO3a,IAAI3J,KAAK6pB,MAAM7F,OAAOhkB,KAAKskB,OAAO3a,IAAI3J,KAAK2C,GACnEsoB,EAAItS,EAAEgC,KAAK1V,GAAGwL,OAAOzQ,KAAKskB,OAC1B9e,EAAMylB,EAQV,OANIA,EAAE5U,IAAIrW,KAAK2C,IAAM,EACnB6C,EAAMylB,EAAEtQ,KAAK3a,KAAK2C,GACTsoB,EAAEja,KAAK,GAAK,IACrBxL,EAAMylB,EAAEvQ,KAAK1a,KAAK2C,IAGb6C,EAAI+hB,UAAUvnB,OAGvB0pB,EAAKhsB,UAAUiM,IAAM,SAAc1C,EAAGxE,GACpC,GAAIwE,EAAE+Q,UAAYvV,EAAEuV,SAAU,OAAO,IAAI3I,EAAG,GAAGkY,UAAUvnB,MAEzD,IAAI2Y,EAAI1R,EAAE0C,IAAIlH,GACVwC,EAAI0T,EAAEsL,MAAMjkB,KAAKskB,OAAO3a,IAAI3J,KAAK6pB,MAAM7F,OAAOhkB,KAAKskB,OAAO3a,IAAI3J,KAAK2C,GACnEsoB,EAAItS,EAAEgC,KAAK1V,GAAGwL,OAAOzQ,KAAKskB,OAC1B9e,EAAMylB,EAOV,OANIA,EAAE5U,IAAIrW,KAAK2C,IAAM,EACnB6C,EAAMylB,EAAEtQ,KAAK3a,KAAK2C,GACTsoB,EAAEja,KAAK,GAAK,IACrBxL,EAAMylB,EAAEvQ,KAAK1a,KAAK2C,IAGb6C,EAAI+hB,UAAUvnB,OAGvB0pB,EAAKhsB,UAAU4oB,KAAO,SAAerf,GAGnC,OADUjH,KAAK2pB,KAAK1iB,EAAEif,OAAOlmB,KAAK2C,GAAGgH,IAAI3J,KAAKolB,KACnCmC,UAAUvnB,OAt2GzB,CAw2GoC3C,EAAQ2C,Q,uCCx2G5C,IAAI6zC,EAAK,EAAQ,KACb+kB,EAAU,EAAQ,KAEtB,SAASC,EAAY3lB,GACnBlzC,KAAKkzC,KAAOA,GAAQ,IAAI0lB,EAAQ3lB,KAElC51C,EAAOC,QAAUu7D,EAEjBA,EAAYz7D,OAAS,SAAgB81C,GACnC,OAAO,IAAI2lB,EAAY3lB,IAGzB2lB,EAAYn7D,UAAUo7D,WAAa,SAAoBp2D,GACrD,IAAI1B,EAAM0B,EAAEsN,YACR+oD,EAAYzzD,KAAKqR,KAAK3V,EAAM,GAIhC,GACE,IAAIiG,EAAI,IAAI4sC,EAAG7zC,KAAKkzC,KAAKC,SAAS4lB,UAC7B9xD,EAAEoP,IAAI3T,IAAM,GAEnB,OAAOuE,GAGT4xD,EAAYn7D,UAAUs7D,WAAa,SAAoBh3D,EAAOi3D,GAE5D,IAAIj6D,EAAOi6D,EAAK1tD,IAAIvJ,GACpB,OAAOA,EAAM4Y,IAAI5a,KAAK84D,WAAW95D,KAGnC65D,EAAYn7D,UAAU+6C,KAAO,SAAc/1C,EAAGwN,EAAG6kB,GAC/C,IAAI/zB,EAAM0B,EAAEsN,YACR8F,EAAM+9B,EAAG7oB,KAAKtoB,GACdw2D,EAAO,IAAIrlB,EAAG,GAAGzsB,MAAMtR,GAEtB5F,IACHA,EAAI5K,KAAKuC,IAAI,EAAI7G,EAAM,GAAM,IAI/B,IADA,IAAIm4D,EAAKz2D,EAAEyhB,KAAK,GACPlD,EAAI,GAAIk4C,EAAG//C,MAAM6H,GAAIA,KAM9B,IALA,IAAIhN,EAAIvR,EAAEohB,KAAK7C,GAEXm4C,EAAMD,EAAG/xC,MAAMtR,GAGZ5F,EAAI,EAAGA,IAAK,CACjB,IAAIjJ,EAAIjH,KAAKg5D,WAAW,IAAInlB,EAAG,GAAIslB,GAC/BpkC,GACFA,EAAG9tB,GAEL,IAAIC,EAAID,EAAEmgB,MAAMtR,GAAK6S,OAAO1U,GAC5B,GAAoB,IAAhB/M,EAAEmP,IAAI6iD,IAA8B,IAAfhyD,EAAEmP,IAAI+iD,GAA/B,CAGA,IAAK,IAAI53D,EAAI,EAAGA,EAAIyf,EAAGzf,IAAK,CAG1B,GAAoB,KAFpB0F,EAAIA,EAAEkhB,UAEA/R,IAAI6iD,GACR,OAAO,EACT,GAAmB,IAAfhyD,EAAEmP,IAAI+iD,GACR,MAGJ,GAAI53D,IAAMyf,EACR,OAAO,GAGX,OAvBY,GA0Bd43C,EAAYn7D,UAAU27D,WAAa,SAAoB32D,EAAGwN,GACxD,IAAIlP,EAAM0B,EAAEsN,YACR8F,EAAM+9B,EAAG7oB,KAAKtoB,GACdw2D,EAAO,IAAIrlB,EAAG,GAAGzsB,MAAMtR,GAEtB5F,IACHA,EAAI5K,KAAKuC,IAAI,EAAI7G,EAAM,GAAM,IAI/B,IADA,IAAIm4D,EAAKz2D,EAAEyhB,KAAK,GACPlD,EAAI,GAAIk4C,EAAG//C,MAAM6H,GAAIA,KAK9B,IAJA,IAAIhN,EAAIvR,EAAEohB,KAAK7C,GAEXm4C,EAAMD,EAAG/xC,MAAMtR,GAEZ5F,EAAI,EAAGA,IAAK,CACjB,IAAIjJ,EAAIjH,KAAKg5D,WAAW,IAAInlB,EAAG,GAAIslB,GAE/BxzC,EAAIjjB,EAAEujB,IAAIhf,GACd,GAAkB,IAAd0e,EAAE3U,KAAK,GACT,OAAO2U,EAET,IAAIze,EAAID,EAAEmgB,MAAMtR,GAAK6S,OAAO1U,GAC5B,GAAoB,IAAhB/M,EAAEmP,IAAI6iD,IAA8B,IAAfhyD,EAAEmP,IAAI+iD,GAA/B,CAGA,IAAK,IAAI53D,EAAI,EAAGA,EAAIyf,EAAGzf,IAAK,CAG1B,GAAoB,KAFpB0F,EAAIA,EAAEkhB,UAEA/R,IAAI6iD,GACR,OAAOhyD,EAAEsgB,UAAUrD,KAAK,GAAG8B,IAAIvjB,GACjC,GAAmB,IAAfwE,EAAEmP,IAAI+iD,GACR,MAGJ,GAAI53D,IAAMyf,EAER,OADA/Z,EAAIA,EAAEkhB,UACGZ,UAAUrD,KAAK,GAAG8B,IAAIvjB,IAInC,OAAO,I,gCCjHT,cAyBA,IAAIqxB,EAHJ12B,EAAOC,QAAU22B,EAMjBA,EAASkzB,cAAgBA,EAGhB,EAAQ,KAAUx4B,aAA3B,IAEIy4B,EAAkB,SAAyBt4B,EAAS1tB,GACtD,OAAO0tB,EAAQ8C,UAAUxwB,GAAM1C,QAO7Bq8B,EAAS,EAAQ,KAIjB78B,EAAS,EAAQ,KAAUA,OAE3BkvC,EAAgB/mC,EAAOvG,YAAc,aAYzC,IAEIunD,EAFAC,EAAY,EAAQ,KAKtBD,EADEC,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,aAKV,IAcI96B,EACA+6B,EACA7oD,EAhBA8oD,EAAa,EAAQ,KAErBna,EAAc,EAAQ,KAGtBoa,EADW,EAAQ,KACSA,iBAE5BC,EAAiB,EAAQ,KAAa9xB,MACtC+xB,EAAuBD,EAAeC,qBACtCC,EAA4BF,EAAeE,0BAC3CC,EAA6BH,EAAeG,2BAC5CC,EAAqCJ,EAAeI,mCAOxD,EAAQ,IAAR,CAAoB9zB,EAAU8G,GAE9B,IAAIitB,EAAiB1a,EAAY0a,eAC7BC,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAa1D,SAASd,EAAct7B,EAASme,EAAQwD,GACtCzZ,EAASA,GAAU,EAAQ,KAC3BlI,EAAUA,GAAW,GAMG,kBAAb2hB,IAAwBA,EAAWxD,aAAkBjW,GAGhE/zB,KAAKytC,aAAe5hB,EAAQ4hB,WACxBD,IAAUxtC,KAAKytC,WAAaztC,KAAKytC,cAAgB5hB,EAAQq8B,oBAG7DloD,KAAK20B,cAAgB+yB,EAAiB1nD,KAAM6rB,EAAS,wBAAyB2hB,GAI9ExtC,KAAK/B,OAAS,IAAIwpD,EAClBznD,KAAKtB,OAAS,EACdsB,KAAKmoD,MAAQ,KACbnoD,KAAKooD,WAAa,EAClBpoD,KAAKqoD,QAAU,KACfroD,KAAKw0B,OAAQ,EACbx0B,KAAKyqC,YAAa,EAClBzqC,KAAKsoD,SAAU,EAKftoD,KAAKuuC,MAAO,EAGZvuC,KAAKuoD,cAAe,EACpBvoD,KAAKwoD,iBAAkB,EACvBxoD,KAAKyoD,mBAAoB,EACzBzoD,KAAK0oD,iBAAkB,EACvB1oD,KAAK2oD,QAAS,EAEd3oD,KAAK4oD,WAAkC,IAAtB/8B,EAAQ+8B,UAEzB5oD,KAAK6oD,cAAgBh9B,EAAQg9B,YAE7B7oD,KAAK60B,WAAY,EAIjB70B,KAAKouC,gBAAkBviB,EAAQuiB,iBAAmB,OAElDpuC,KAAK8oD,WAAa,EAElB9oD,KAAK+oD,aAAc,EACnB/oD,KAAKgpD,QAAU,KACfhpD,KAAKd,SAAW,KAEZ2sB,EAAQ3sB,WACLutB,IAAeA,EAAgB,EAAQ,KAAmBA,eAC/DzsB,KAAKgpD,QAAU,IAAIv8B,EAAcZ,EAAQ3sB,UACzCc,KAAKd,SAAW2sB,EAAQ3sB,UAI5B,SAAS+0B,EAASpI,GAEhB,GADAkI,EAASA,GAAU,EAAQ,OACrB/zB,gBAAgBi0B,GAAW,OAAO,IAAIA,EAASpI,GAGrD,IAAI2hB,EAAWxtC,gBAAgB+zB,EAC/B/zB,KAAK40B,eAAiB,IAAIuyB,EAAct7B,EAAS7rB,KAAMwtC,GAEvDxtC,KAAKo0B,UAAW,EAEZvI,IAC0B,mBAAjBA,EAAQroB,OAAqBxD,KAAKipD,MAAQp9B,EAAQroB,MAC9B,mBAApBqoB,EAAQ8P,UAAwB37B,KAAK80B,SAAWjJ,EAAQ8P,UAGrEZ,EAAO93B,KAAKjD,MAiEd,SAASkpD,EAAiBlf,EAAQ5O,EAAOl8B,EAAUiqD,EAAYC,GAC7D/B,EAAM,mBAAoBjsB,GAC1B,IAMM5J,EANFZ,EAAQoZ,EAAOpV,eAEnB,GAAc,OAAVwG,EACFxK,EAAM03B,SAAU,EAyOpB,SAAoBte,EAAQpZ,GAE1B,GADAy2B,EAAM,cACFz2B,EAAM4D,MAAO,OAEjB,GAAI5D,EAAMo4B,QAAS,CACjB,IAAI5tB,EAAQxK,EAAMo4B,QAAQ/mD,MAEtBm5B,GAASA,EAAM18B,SACjBkyB,EAAM3yB,OAAOyG,KAAK02B,GAClBxK,EAAMlyB,QAAUkyB,EAAM6c,WAAa,EAAIrS,EAAM18B,QAIjDkyB,EAAM4D,OAAQ,EAEV5D,EAAM2d,KAIR8a,EAAarf,IAGbpZ,EAAM23B,cAAe,EAEhB33B,EAAM43B,kBACT53B,EAAM43B,iBAAkB,EACxBc,EAActf,KAlQhBuf,CAAWvf,EAAQpZ,QAKnB,GAFKw4B,IAAgB53B,EAmDzB,SAAsBZ,EAAOwK,GAC3B,IAAI5J,EAhQiB1wB,EAkQFs6B,EAjQZl9B,EAAO6C,SAASD,IAAQA,aAAessC,GAiQA,iBAAVhS,QAAgCh8B,IAAVg8B,GAAwBxK,EAAM6c,aACtFjc,EAAK,IAAIo2B,EAAqB,QAAS,CAAC,SAAU,SAAU,cAAexsB,IAnQ/E,IAAuBt6B,EAsQrB,OAAO0wB,EA1DqBg4B,CAAa54B,EAAOwK,IAE1C5J,EACFw2B,EAAehe,EAAQxY,QAClB,GAAIZ,EAAM6c,YAAcrS,GAASA,EAAM18B,OAAS,EAKrD,GAJqB,iBAAV08B,GAAuBxK,EAAM6c,YAActwC,OAAO8P,eAAemuB,KAAWl9B,EAAOR,YAC5F09B,EAtNR,SAA6BA,GAC3B,OAAOl9B,EAAOS,KAAKy8B,GAqNLgV,CAAoBhV,IAG1B+tB,EACEv4B,EAAM6Z,WAAYud,EAAehe,EAAQ,IAAI+d,GAA2C0B,EAASzf,EAAQpZ,EAAOwK,GAAO,QACtH,GAAIxK,EAAM4D,MACfwzB,EAAehe,EAAQ,IAAI6d,OACtB,IAAIj3B,EAAMiE,UACf,OAAO,EAEPjE,EAAM03B,SAAU,EAEZ13B,EAAMo4B,UAAY9pD,GACpBk8B,EAAQxK,EAAMo4B,QAAQroD,MAAMy6B,GACxBxK,EAAM6c,YAA+B,IAAjBrS,EAAM18B,OAAc+qD,EAASzf,EAAQpZ,EAAOwK,GAAO,GAAYsuB,EAAc1f,EAAQpZ,IAE7G64B,EAASzf,EAAQpZ,EAAOwK,GAAO,QAGzB+tB,IACVv4B,EAAM03B,SAAU,EAChBoB,EAAc1f,EAAQpZ,IAO1B,OAAQA,EAAM4D,QAAU5D,EAAMlyB,OAASkyB,EAAM+D,eAAkC,IAAjB/D,EAAMlyB,QAGtE,SAAS+qD,EAASzf,EAAQpZ,EAAOwK,EAAO+tB,GAClCv4B,EAAMy3B,SAA4B,IAAjBz3B,EAAMlyB,SAAiBkyB,EAAM2d,MAChD3d,EAAMk4B,WAAa,EACnB9e,EAAO9Z,KAAK,OAAQkL,KAGpBxK,EAAMlyB,QAAUkyB,EAAM6c,WAAa,EAAIrS,EAAM18B,OACzCyqD,EAAYv4B,EAAM3yB,OAAOkyB,QAAQiL,GAAYxK,EAAM3yB,OAAOyG,KAAK02B,GAC/DxK,EAAM23B,cAAcc,EAAarf,IAGvC0f,EAAc1f,EAAQpZ,GAvHxBzzB,OAAO2J,eAAemtB,EAASv2B,UAAW,YAAa,CAIrDG,YAAY,EACZmV,IAAK,WACH,YAA4B5T,IAAxBY,KAAK40B,gBAIF50B,KAAK40B,eAAeC,WAE7B1oB,IAAK,SAAavO,GAGXoC,KAAK40B,iBAMV50B,KAAK40B,eAAeC,UAAYj3B,MAGpCq2B,EAASv2B,UAAUi+B,QAAU2R,EAAY3R,QACzC1H,EAASv2B,UAAUszC,WAAa1D,EAAY2D,UAE5Chd,EAASv2B,UAAUo3B,SAAW,SAAU/iB,EAAKgjB,GAC3CA,EAAGhjB,IAOLkiB,EAASv2B,UAAUgH,KAAO,SAAU02B,EAAOl8B,GACzC,IACIkqD,EADAx4B,EAAQ5wB,KAAK40B,eAkBjB,OAfKhE,EAAM6c,WAYT2b,GAAiB,EAXI,iBAAVhuB,KACTl8B,EAAWA,GAAY0xB,EAAMwd,mBAEZxd,EAAM1xB,WACrBk8B,EAAQl9B,EAAOS,KAAKy8B,EAAOl8B,GAC3BA,EAAW,IAGbkqD,GAAiB,GAMdF,EAAiBlpD,KAAMo7B,EAAOl8B,GAAU,EAAOkqD,IAIxDn1B,EAASv2B,UAAUyyB,QAAU,SAAUiL,GACrC,OAAO8tB,EAAiBlpD,KAAMo7B,EAAO,MAAM,GAAM,IAyEnDnH,EAASv2B,UAAUisD,SAAW,WAC5B,OAAuC,IAAhC3pD,KAAK40B,eAAeyzB,SAI7Bp0B,EAASv2B,UAAUksD,YAAc,SAAUt2C,GACpCmZ,IAAeA,EAAgB,EAAQ,KAAmBA,eAC/D,IAAIu8B,EAAU,IAAIv8B,EAAcnZ,GAChCtT,KAAK40B,eAAeo0B,QAAUA,EAE9BhpD,KAAK40B,eAAe11B,SAAWc,KAAK40B,eAAeo0B,QAAQ9pD,SAK3D,IAHA,IAAIqU,EAAIvT,KAAK40B,eAAe32B,OAAO4rD,KAC/B96C,EAAU,GAED,OAANwE,GACLxE,GAAWi6C,EAAQroD,MAAM4S,EAAElS,MAC3BkS,EAAIA,EAAEgX,KAOR,OAJAvqB,KAAK40B,eAAe32B,OAAO6rD,QAEX,KAAZ/6C,GAAgB/O,KAAK40B,eAAe32B,OAAOyG,KAAKqK,GACpD/O,KAAK40B,eAAel2B,OAASqQ,EAAQrQ,OAC9BsB,MA2BT,SAAS+pD,EAAcrnD,EAAGkuB,GACxB,OAAIluB,GAAK,GAAsB,IAAjBkuB,EAAMlyB,QAAgBkyB,EAAM4D,MAAc,EACpD5D,EAAM6c,WAAmB,EAEzB/qC,GAAMA,EAEJkuB,EAAMy3B,SAAWz3B,EAAMlyB,OAAekyB,EAAM3yB,OAAO4rD,KAAKxoD,KAAK3C,OAAmBkyB,EAAMlyB,QAIxFgE,EAAIkuB,EAAM+D,gBAAe/D,EAAM+D,cA/BrC,SAAiCjyB,GAgB/B,OAfIA,GAHQ,WAKVA,EALU,YASVA,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAGKA,EAe4CsnD,CAAwBtnD,IACvEA,GAAKkuB,EAAMlyB,OAAegE,EAEzBkuB,EAAM4D,MAKJ5D,EAAMlyB,QAJXkyB,EAAM23B,cAAe,EACd,IAwIX,SAASc,EAAarf,GACpB,IAAIpZ,EAAQoZ,EAAOpV,eACnByyB,EAAM,eAAgBz2B,EAAM23B,aAAc33B,EAAM43B,iBAChD53B,EAAM23B,cAAe,EAEhB33B,EAAM43B,kBACTnB,EAAM,eAAgBz2B,EAAMy3B,SAC5Bz3B,EAAM43B,iBAAkB,EACxB5yB,EAAQnB,SAAS60B,EAAetf,IAIpC,SAASsf,EAActf,GACrB,IAAIpZ,EAAQoZ,EAAOpV,eACnByyB,EAAM,gBAAiBz2B,EAAMiE,UAAWjE,EAAMlyB,OAAQkyB,EAAM4D,OAEvD5D,EAAMiE,YAAcjE,EAAMlyB,SAAUkyB,EAAM4D,QAC7CwV,EAAO9Z,KAAK,YACZU,EAAM43B,iBAAkB,GAS1B53B,EAAM23B,cAAgB33B,EAAMy3B,UAAYz3B,EAAM4D,OAAS5D,EAAMlyB,QAAUkyB,EAAM+D,cAC7Es1B,EAAKjgB,GASP,SAAS0f,EAAc1f,EAAQpZ,GACxBA,EAAMm4B,cACTn4B,EAAMm4B,aAAc,EACpBnzB,EAAQnB,SAASy1B,EAAgBlgB,EAAQpZ,IAI7C,SAASs5B,EAAelgB,EAAQpZ,GAwB9B,MAAQA,EAAM03B,UAAY13B,EAAM4D,QAAU5D,EAAMlyB,OAASkyB,EAAM+D,eAAiB/D,EAAMy3B,SAA4B,IAAjBz3B,EAAMlyB,SAAe,CACpH,IAAIsC,EAAM4vB,EAAMlyB,OAGhB,GAFA2oD,EAAM,wBACNrd,EAAOxmC,KAAK,GACRxC,IAAQ4vB,EAAMlyB,OAChB,MAGJkyB,EAAMm4B,aAAc,EA6QtB,SAASoB,EAAwB1yC,GAC/B,IAAImZ,EAAQnZ,EAAKmd,eACjBhE,EAAM63B,kBAAoBhxC,EAAK0Z,cAAc,YAAc,EAEvDP,EAAM83B,kBAAoB93B,EAAM+3B,OAGlC/3B,EAAMy3B,SAAU,EACP5wC,EAAK0Z,cAAc,QAAU,GACtC1Z,EAAK8jB,SAIT,SAAS6uB,EAAiB3yC,GACxB4vC,EAAM,4BACN5vC,EAAKjU,KAAK,GA4BZ,SAAS6mD,EAAQrgB,EAAQpZ,GACvBy2B,EAAM,SAAUz2B,EAAM03B,SAEjB13B,EAAM03B,SACTte,EAAOxmC,KAAK,GAGdotB,EAAM83B,iBAAkB,EACxB1e,EAAO9Z,KAAK,UACZ+5B,EAAKjgB,GACDpZ,EAAMy3B,UAAYz3B,EAAM03B,SAASte,EAAOxmC,KAAK,GAgBnD,SAASymD,EAAKjgB,GACZ,IAAIpZ,EAAQoZ,EAAOpV,eAGnB,IAFAyyB,EAAM,OAAQz2B,EAAMy3B,SAEbz3B,EAAMy3B,SAA6B,OAAlBre,EAAOxmC,UA4HjC,SAAS8mD,EAAS5nD,EAAGkuB,GAEnB,OAAqB,IAAjBA,EAAMlyB,OAAqB,MAE3BkyB,EAAM6c,WAAY/kC,EAAMkoB,EAAM3yB,OAAOqmB,SAAkB5hB,GAAKA,GAAKkuB,EAAMlyB,QAEtDgK,EAAfkoB,EAAMo4B,QAAep4B,EAAM3yB,OAAO8J,KAAK,IAAqC,IAAxB6oB,EAAM3yB,OAAOS,OAAoBkyB,EAAM3yB,OAAOyzC,QAAmB9gB,EAAM3yB,OAAOmJ,OAAOwpB,EAAMlyB,QACnJkyB,EAAM3yB,OAAO6rD,SAGbphD,EAAMkoB,EAAM3yB,OAAOssD,QAAQ7nD,EAAGkuB,EAAMo4B,SAE/BtgD,GATP,IAAIA,EAYN,SAAS8hD,EAAYxgB,GACnB,IAAIpZ,EAAQoZ,EAAOpV,eACnByyB,EAAM,cAAez2B,EAAM6Z,YAEtB7Z,EAAM6Z,aACT7Z,EAAM4D,OAAQ,EACdoB,EAAQnB,SAASg2B,EAAe75B,EAAOoZ,IAI3C,SAASygB,EAAc75B,EAAOoZ,GAG5B,GAFAqd,EAAM,gBAAiBz2B,EAAM6Z,WAAY7Z,EAAMlyB,SAE1CkyB,EAAM6Z,YAA+B,IAAjB7Z,EAAMlyB,SAC7BkyB,EAAM6Z,YAAa,EACnBT,EAAO5V,UAAW,EAClB4V,EAAO9Z,KAAK,OAERU,EAAMi4B,aAAa,CAGrB,IAAI6B,EAAS1gB,EAAOzV,iBAEfm2B,GAAUA,EAAO7B,aAAe6B,EAAOngB,WAC1CP,EAAOrO,WAgBf,SAAS34B,EAAQ2nD,EAAIzjD,GACnB,IAAK,IAAI1F,EAAI,EAAG6L,EAAIs9C,EAAGjsD,OAAQ8C,EAAI6L,EAAG7L,IACpC,GAAImpD,EAAGnpD,KAAO0F,EAAG,OAAO1F,EAG1B,OAAQ,EA3tBVyyB,EAASv2B,UAAU8F,KAAO,SAAUd,GAClC2kD,EAAM,OAAQ3kD,GACdA,EAAIyB,SAASzB,EAAG,IAChB,IAAIkuB,EAAQ5wB,KAAK40B,eACbg2B,EAAQloD,EAKZ,GAJU,IAANA,IAASkuB,EAAM43B,iBAAkB,GAI3B,IAAN9lD,GAAWkuB,EAAM23B,gBAA0C,IAAxB33B,EAAM+D,cAAsB/D,EAAMlyB,QAAUkyB,EAAM+D,cAAgB/D,EAAMlyB,OAAS,IAAMkyB,EAAM4D,OAGlI,OAFA6yB,EAAM,qBAAsBz2B,EAAMlyB,OAAQkyB,EAAM4D,OAC3B,IAAjB5D,EAAMlyB,QAAgBkyB,EAAM4D,MAAOg2B,EAAYxqD,MAAWqpD,EAAarpD,MACpE,KAKT,GAAU,KAFV0C,EAAIqnD,EAAcrnD,EAAGkuB,KAENA,EAAM4D,MAEnB,OADqB,IAAjB5D,EAAMlyB,QAAc8rD,EAAYxqD,MAC7B,KAyBT,IA4BI0I,EA5BAmiD,EAASj6B,EAAM23B,aAgDnB,OA/CAlB,EAAM,gBAAiBwD,IAEF,IAAjBj6B,EAAMlyB,QAAgBkyB,EAAMlyB,OAASgE,EAAIkuB,EAAM+D,gBAEjD0yB,EAAM,6BADNwD,GAAS,GAMPj6B,EAAM4D,OAAS5D,EAAM03B,QAEvBjB,EAAM,mBADNwD,GAAS,GAEAA,IACTxD,EAAM,WACNz2B,EAAM03B,SAAU,EAChB13B,EAAM2d,MAAO,EAEQ,IAAjB3d,EAAMlyB,SAAckyB,EAAM23B,cAAe,GAE7CvoD,KAAKipD,MAAMr4B,EAAM+D,eAEjB/D,EAAM2d,MAAO,EAGR3d,EAAM03B,UAAS5lD,EAAIqnD,EAAca,EAAOh6B,KAMnC,QAFDloB,EAAPhG,EAAI,EAAS4nD,EAAS5nD,EAAGkuB,GAAkB,OAG7CA,EAAM23B,aAAe33B,EAAMlyB,QAAUkyB,EAAM+D,cAC3CjyB,EAAI,IAEJkuB,EAAMlyB,QAAUgE,EAChBkuB,EAAMk4B,WAAa,GAGA,IAAjBl4B,EAAMlyB,SAGHkyB,EAAM4D,QAAO5D,EAAM23B,cAAe,GAEnCqC,IAAUloD,GAAKkuB,EAAM4D,OAAOg2B,EAAYxqD,OAGlC,OAAR0I,GAAc1I,KAAKkwB,KAAK,OAAQxnB,GAC7BA,GAwHTurB,EAASv2B,UAAUurD,MAAQ,SAAUvmD,GACnCslD,EAAehoD,KAAM,IAAI8nD,EAA2B,aAGtD7zB,EAASv2B,UAAUuQ,KAAO,SAAUiJ,EAAM4zC,GACxC,IAAI1sD,EAAM4B,KACN4wB,EAAQ5wB,KAAK40B,eAEjB,OAAQhE,EAAMw3B,YACZ,KAAK,EACHx3B,EAAMu3B,MAAQjxC,EACd,MAEF,KAAK,EACH0Z,EAAMu3B,MAAQ,CAACv3B,EAAMu3B,MAAOjxC,GAC5B,MAEF,QACE0Z,EAAMu3B,MAAMzjD,KAAKwS,GAIrB0Z,EAAMw3B,YAAc,EACpBf,EAAM,wBAAyBz2B,EAAMw3B,WAAY0C,GACjD,IACIC,IADUD,IAA6B,IAAjBA,EAAS7oD,MAAkBiV,IAAS0e,EAAQo1B,QAAU9zC,IAAS0e,EAAQq1B,OAC7E32B,EAAQ42B,EAI5B,SAASC,EAAS/2B,EAAUg3B,GAC1B/D,EAAM,YAEFjzB,IAAah2B,GACXgtD,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAoB5BhE,EAAM,WAENnwC,EAAKkY,eAAe,QAASqM,GAC7BvkB,EAAKkY,eAAe,SAAUib,GAC9BnzB,EAAKkY,eAAe,QAASkM,GAC7BpkB,EAAKkY,eAAe,QAASwM,GAC7B1kB,EAAKkY,eAAe,SAAU+7B,GAC9B/sD,EAAIgxB,eAAe,MAAOkF,GAC1Bl2B,EAAIgxB,eAAe,MAAO87B,GAC1B9sD,EAAIgxB,eAAe,OAAQ+L,GAC3BmwB,GAAY,GAMR16B,EAAMk4B,YAAgB5xC,EAAKqd,iBAAkBrd,EAAKqd,eAAeyZ,WAAY1S,KA9BnF,SAAShH,IACP+yB,EAAM,SACNnwC,EAAKjV,MAhBH2uB,EAAM6Z,WAAY7U,EAAQnB,SAASs2B,GAAY3sD,EAAIywB,KAAK,MAAOk8B,GACnE7zC,EAAK4a,GAAG,SAAUq5B,GAsBlB,IAAI7vB,EAwFN,SAAqBl9B,GACnB,OAAO,WACL,IAAIwyB,EAAQxyB,EAAIw2B,eAChByyB,EAAM,cAAez2B,EAAMk4B,YACvBl4B,EAAMk4B,YAAYl4B,EAAMk4B,aAEH,IAArBl4B,EAAMk4B,YAAoB1B,EAAgBhpD,EAAK,UACjDwyB,EAAMy3B,SAAU,EAChB4B,EAAK7rD,KAhGKmtD,CAAYntD,GAC1B8Y,EAAK4a,GAAG,QAASwJ,GACjB,IAAIgwB,GAAY,EAwBhB,SAASnwB,EAAOC,GACdisB,EAAM,UACN,IAAI3+C,EAAMwO,EAAKvW,MAAMy6B,GACrBisB,EAAM,aAAc3+C,IAER,IAARA,KAKwB,IAArBkoB,EAAMw3B,YAAoBx3B,EAAMu3B,QAAUjxC,GAAQ0Z,EAAMw3B,WAAa,IAAqC,IAAhCplD,EAAQ4tB,EAAMu3B,MAAOjxC,MAAkBo0C,IACpHjE,EAAM,8BAA+Bz2B,EAAMk4B,YAC3Cl4B,EAAMk4B,cAGR1qD,EAAIi9B,SAMR,SAASO,EAAQpK,GACf61B,EAAM,UAAW71B,GACjB05B,IACAh0C,EAAKkY,eAAe,QAASwM,GACU,IAAnCwrB,EAAgBlwC,EAAM,UAAgB8wC,EAAe9wC,EAAMsa,GAMjE,SAASiK,IACPvkB,EAAKkY,eAAe,SAAUib,GAC9B6gB,IAKF,SAAS7gB,IACPgd,EAAM,YACNnwC,EAAKkY,eAAe,QAASqM,GAC7ByvB,IAKF,SAASA,IACP7D,EAAM,UACNjpD,EAAI8sD,OAAOh0C,GAWb,OA7DA9Y,EAAI0zB,GAAG,OAAQqJ,GAtkBjB,SAAyBrM,EAAS08B,EAAOp+C,GAGvC,GAAuC,mBAA5B0hB,EAAQiD,gBAAgC,OAAOjD,EAAQiD,gBAAgBy5B,EAAOp+C,GAKpF0hB,EAAQO,SAAYP,EAAQO,QAAQm8B,GAAuChjD,MAAMhJ,QAAQsvB,EAAQO,QAAQm8B,IAAS18B,EAAQO,QAAQm8B,GAAOr7B,QAAQ/iB,GAAS0hB,EAAQO,QAAQm8B,GAAS,CAACp+C,EAAI0hB,EAAQO,QAAQm8B,IAA5J18B,EAAQgD,GAAG05B,EAAOp+C,GA6lBnE2kB,CAAgB7a,EAAM,QAAS0kB,GAO/B1kB,EAAK2X,KAAK,QAAS4M,GAQnBvkB,EAAK2X,KAAK,SAAUwb,GAQpBnzB,EAAKgZ,KAAK,OAAQ9xB,GAEbwyB,EAAMy3B,UACThB,EAAM,eACNjpD,EAAIm9B,UAGCrkB,GAgBT+c,EAASv2B,UAAUwtD,OAAS,SAAUh0C,GACpC,IAAI0Z,EAAQ5wB,KAAK40B,eACbw2B,EAAa,CACfC,YAAY,GAGd,GAAyB,IAArBz6B,EAAMw3B,WAAkB,OAAOpoD,KAEnC,GAAyB,IAArB4wB,EAAMw3B,WAER,OAAIlxC,GAAQA,IAAS0Z,EAAMu3B,QACtBjxC,IAAMA,EAAO0Z,EAAMu3B,OAExBv3B,EAAMu3B,MAAQ,KACdv3B,EAAMw3B,WAAa,EACnBx3B,EAAMy3B,SAAU,EACZnxC,GAAMA,EAAKgZ,KAAK,SAAUlwB,KAAMorD,IANKprD,KAW3C,IAAKkX,EAAM,CAET,IAAIu0C,EAAQ76B,EAAMu3B,MACdnnD,EAAM4vB,EAAMw3B,WAChBx3B,EAAMu3B,MAAQ,KACdv3B,EAAMw3B,WAAa,EACnBx3B,EAAMy3B,SAAU,EAEhB,IAAK,IAAI7mD,EAAI,EAAGA,EAAIR,EAAKQ,IACvBiqD,EAAMjqD,GAAG0uB,KAAK,SAAUlwB,KAAM,CAC5BqrD,YAAY,IAIhB,OAAOrrD,KAIT,IAAIusB,EAAQvpB,EAAQ4tB,EAAMu3B,MAAOjxC,GACjC,OAAe,IAAXqV,IACJqE,EAAMu3B,MAAMrK,OAAOvxB,EAAO,GAC1BqE,EAAMw3B,YAAc,EACK,IAArBx3B,EAAMw3B,aAAkBx3B,EAAMu3B,MAAQv3B,EAAMu3B,MAAM,IACtDjxC,EAAKgZ,KAAK,SAAUlwB,KAAMorD,IAJDprD,MAU3Bi0B,EAASv2B,UAAUo0B,GAAK,SAAU45B,EAAIt+C,GACpC,IAAI5H,EAAMu1B,EAAOr9B,UAAUo0B,GAAG7uB,KAAKjD,KAAM0rD,EAAIt+C,GACzCwjB,EAAQ5wB,KAAK40B,eAuBjB,MArBW,SAAP82B,GAGF96B,EAAM63B,kBAAoBzoD,KAAKmxB,cAAc,YAAc,GAErC,IAAlBP,EAAMy3B,SAAmBroD,KAAKu7B,UAClB,aAAPmwB,IACJ96B,EAAM6Z,YAAe7Z,EAAM63B,oBAC9B73B,EAAM63B,kBAAoB73B,EAAM23B,cAAe,EAC/C33B,EAAMy3B,SAAU,EAChBz3B,EAAM43B,iBAAkB,EACxBnB,EAAM,cAAez2B,EAAMlyB,OAAQkyB,EAAM03B,SAErC13B,EAAMlyB,OACR2qD,EAAarpD,MACH4wB,EAAM03B,SAChB1yB,EAAQnB,SAAS21B,EAAkBpqD,QAKlCwF,GAGTyuB,EAASv2B,UAAUm0B,YAAcoC,EAASv2B,UAAUo0B,GAEpDmC,EAASv2B,UAAU0xB,eAAiB,SAAUs8B,EAAIt+C,GAChD,IAAI5H,EAAMu1B,EAAOr9B,UAAU0xB,eAAensB,KAAKjD,KAAM0rD,EAAIt+C,GAYzD,MAVW,aAAPs+C,GAOF91B,EAAQnB,SAAS01B,EAAyBnqD,MAGrCwF,GAGTyuB,EAASv2B,UAAU20B,mBAAqB,SAAUq5B,GAChD,IAAIlmD,EAAMu1B,EAAOr9B,UAAU20B,mBAAmBnsB,MAAMlG,KAAM0H,WAY1D,MAVW,aAAPgkD,QAA4BtsD,IAAPssD,GAOvB91B,EAAQnB,SAAS01B,EAAyBnqD,MAGrCwF,GAuBTyuB,EAASv2B,UAAU69B,OAAS,WAC1B,IAAI3K,EAAQ5wB,KAAK40B,eAYjB,OAVKhE,EAAMy3B,UACThB,EAAM,UAINz2B,EAAMy3B,SAAWz3B,EAAM63B,kBAQ3B,SAAgBze,EAAQpZ,GACjBA,EAAM83B,kBACT93B,EAAM83B,iBAAkB,EACxB9yB,EAAQnB,SAAS41B,EAASrgB,EAAQpZ,IAVlC2K,CAAOv7B,KAAM4wB,IAGfA,EAAM+3B,QAAS,EACR3oD,MAuBTi0B,EAASv2B,UAAU29B,MAAQ,WAUzB,OATAgsB,EAAM,wBAAyBrnD,KAAK40B,eAAeyzB,UAEf,IAAhCroD,KAAK40B,eAAeyzB,UACtBhB,EAAM,SACNrnD,KAAK40B,eAAeyzB,SAAU,EAC9BroD,KAAKkwB,KAAK,UAGZlwB,KAAK40B,eAAe+zB,QAAS,EACtB3oD,MAeTi0B,EAASv2B,UAAUiuD,KAAO,SAAU3hB,GAClC,IAAIwC,EAAQxsC,KAER4wB,EAAQ5wB,KAAK40B,eACb+zB,GAAS,EA0Bb,IAAK,IAAInnD,KAzBTwoC,EAAOlY,GAAG,OAAO,WAGf,GAFAu1B,EAAM,eAEFz2B,EAAMo4B,UAAYp4B,EAAM4D,MAAO,CACjC,IAAI4G,EAAQxK,EAAMo4B,QAAQ/mD,MACtBm5B,GAASA,EAAM18B,QAAQ8tC,EAAM9nC,KAAK02B,GAGxCoR,EAAM9nC,KAAK,SAEbslC,EAAOlY,GAAG,QAAQ,SAAUsJ,IAC1BisB,EAAM,gBACFz2B,EAAMo4B,UAAS5tB,EAAQxK,EAAMo4B,QAAQroD,MAAMy6B,IAE3CxK,EAAM6c,YAAc,MAACrS,KAAyDxK,EAAM6c,YAAgBrS,GAAUA,EAAM18B,UAE9G8tC,EAAM9nC,KAAK02B,KAGnButB,GAAS,EACT3e,EAAO3O,aAKG2O,OACI5qC,IAAZY,KAAKwB,IAAyC,mBAAdwoC,EAAOxoC,KACzCxB,KAAKwB,GAAK,SAAoB2yB,GAC5B,OAAO,WACL,OAAO6V,EAAO7V,GAAQjuB,MAAM8jC,EAAQtiC,YAF9B,CAIRlG,IAKN,IAAK,IAAIkB,EAAI,EAAGA,EAAIulD,EAAavpD,OAAQgE,IACvCsnC,EAAOlY,GAAGm2B,EAAavlD,GAAI1C,KAAKkwB,KAAKrjB,KAAK7M,KAAMioD,EAAavlD,KAc/D,OATA1C,KAAKipD,MAAQ,SAAUvmD,GACrB2kD,EAAM,gBAAiB3kD,GAEnBimD,IACFA,GAAS,EACT3e,EAAOzO,WAIJv7B,MAGa,mBAAX4G,SACTqtB,EAASv2B,UAAUkJ,OAAOglD,eAAiB,WAKzC,YAJ0CxsD,IAAtCooD,IACFA,EAAoC,EAAQ,MAGvCA,EAAkCxnD,QAI7C7C,OAAO2J,eAAemtB,EAASv2B,UAAW,wBAAyB,CAIjEG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAK40B,eAAeD,iBAG/Bx3B,OAAO2J,eAAemtB,EAASv2B,UAAW,iBAAkB,CAI1DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAK40B,gBAAkB50B,KAAK40B,eAAe32B,UAGtDd,OAAO2J,eAAemtB,EAASv2B,UAAW,kBAAmB,CAI3DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAK40B,eAAeyzB,SAE7Bl8C,IAAK,SAAaykB,GACZ5wB,KAAK40B,iBACP50B,KAAK40B,eAAeyzB,QAAUz3B,MAKpCqD,EAAS43B,UAAYvB,EACrBntD,OAAO2J,eAAemtB,EAASv2B,UAAW,iBAAkB,CAI1DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAK40B,eAAel2B,UAoDT,mBAAXkI,SACTqtB,EAASt1B,KAAO,SAAUmtD,EAAU7hB,GAKlC,YAJa7qC,IAATT,IACFA,EAAO,EAAQ,MAGVA,EAAKs1B,EAAU63B,EAAU7hB,O,wCCzlCpC5sC,EAAOC,QAAU,EAAQ,KAAUqxB,c,gCCAnC,YAuDA,SAASo9B,EAAoBt0C,EAAM1F,GACjCi6C,EAAYv0C,EAAM1F,GAClBk6C,EAAYx0C,GAGd,SAASw0C,EAAYx0C,GACfA,EAAK8c,iBAAmB9c,EAAK8c,eAAeq0B,WAC5CnxC,EAAKmd,iBAAmBnd,EAAKmd,eAAeg0B,WAChDnxC,EAAKyY,KAAK,SAsBZ,SAAS87B,EAAYv0C,EAAM1F,GACzB0F,EAAKyY,KAAK,QAASne,GAcrB1U,EAAOC,QAAU,CACfq+B,QAnGF,SAAiB5pB,EAAKgjB,GACpB,IAAIyX,EAAQxsC,KAERksD,EAAoBlsD,KAAK40B,gBAAkB50B,KAAK40B,eAAeC,UAC/Ds3B,EAAoBnsD,KAAKu0B,gBAAkBv0B,KAAKu0B,eAAeM,UAEnE,OAAIq3B,GAAqBC,GACnBp3B,EACFA,EAAGhjB,GACMA,IACJ/R,KAAKu0B,eAEEv0B,KAAKu0B,eAAeua,eAC9B9uC,KAAKu0B,eAAeua,cAAe,EACnClZ,EAAQnB,SAASu3B,EAAahsD,KAAM+R,IAHpC6jB,EAAQnB,SAASu3B,EAAahsD,KAAM+R,IAOjC/R,OAKLA,KAAK40B,iBACP50B,KAAK40B,eAAeC,WAAY,GAI9B70B,KAAKu0B,iBACPv0B,KAAKu0B,eAAeM,WAAY,GAGlC70B,KAAK80B,SAAS/iB,GAAO,MAAM,SAAUA,IAC9BgjB,GAAMhjB,EACJy6B,EAAMjY,eAECiY,EAAMjY,eAAeua,aAI/BlZ,EAAQnB,SAASw3B,EAAazf,IAH9BA,EAAMjY,eAAeua,cAAe,EACpClZ,EAAQnB,SAASs3B,EAAqBvf,EAAOz6B,IAH7C6jB,EAAQnB,SAASs3B,EAAqBvf,EAAOz6B,GAOtCgjB,GACTa,EAAQnB,SAASw3B,EAAazf,GAC9BzX,EAAGhjB,IAEH6jB,EAAQnB,SAASw3B,EAAazf,MAI3BxsC,OAkDPixC,UApCF,WACMjxC,KAAK40B,iBACP50B,KAAK40B,eAAeC,WAAY,EAChC70B,KAAK40B,eAAe0zB,SAAU,EAC9BtoD,KAAK40B,eAAeJ,OAAQ,EAC5Bx0B,KAAK40B,eAAe6V,YAAa,GAG/BzqC,KAAKu0B,iBACPv0B,KAAKu0B,eAAeM,WAAY,EAChC70B,KAAKu0B,eAAeC,OAAQ,EAC5Bx0B,KAAKu0B,eAAe0Z,QAAS,EAC7BjuC,KAAKu0B,eAAewZ,aAAc,EAClC/tC,KAAKu0B,eAAe8a,aAAc,EAClCrvC,KAAKu0B,eAAegW,UAAW,EAC/BvqC,KAAKu0B,eAAeua,cAAe,IAsBrCkZ,eAdF,SAAwBhe,EAAQj4B,GAM9B,IAAIq6C,EAASpiB,EAAOpV,eAChB81B,EAAS1gB,EAAOzV,eAChB63B,GAAUA,EAAOvD,aAAe6B,GAAUA,EAAO7B,YAAa7e,EAAOrO,QAAQ5pB,GAAUi4B,EAAO9Z,KAAK,QAASne,O,+CC/FlH,IAAIs6C,EAAwB,EAAQ,KAAmBx2B,MAAMw2B,sBAsB7DhvD,EAAOC,QAAU,CACfoqD,iBAjBF,SAA0B92B,EAAO/E,EAASygC,EAAW9e,GACnD,IAAIG,EALN,SAA2B9hB,EAAS2hB,EAAU8e,GAC5C,OAAgC,MAAzBzgC,EAAQ8I,cAAwB9I,EAAQ8I,cAAgB6Y,EAAW3hB,EAAQygC,GAAa,KAIrFC,CAAkB1gC,EAAS2hB,EAAU8e,GAE/C,GAAW,MAAP3e,EAAa,CACf,IAAMrlC,SAASqlC,IAAQroC,KAAK0F,MAAM2iC,KAASA,GAAQA,EAAM,EAEvD,MAAM,IAAI0e,EADC7e,EAAW8e,EAAY,gBACI3e,GAGxC,OAAOroC,KAAK0F,MAAM2iC,GAIpB,OAAO/c,EAAM6c,WAAa,GAAK,S,8BCrBjC,cAqCA,SAASlB,EAAc3b,GACrB,IAAI4b,EAAQxsC,KAEZA,KAAKuqB,KAAO,KACZvqB,KAAKysC,MAAQ,KAEbzsC,KAAK0sC,OAAS,YAimBhB,SAAwBC,EAAS/b,EAAO7e,GACtC,IAAI06B,EAAQE,EAAQF,MACpBE,EAAQF,MAAQ,KAEhB,KAAOA,GAAO,CACZ,IAAI1X,EAAK0X,EAAMvC,SACftZ,EAAMgc,YACN7X,EAAGhjB,GACH06B,EAAQA,EAAMliB,KAIhBqG,EAAMic,mBAAmBtiB,KAAOoiB,EA5mB9BG,CAAeN,EAAO5b,IAQ1B,IAAImD,EA3BJ12B,EAAOC,QAAU42B,EA8BjBA,EAASgZ,cAAgBA,EAGzB,IAAIC,EAAe,CACjBt6B,UAAW,EAAQ,MAMjBkoB,EAAS,EAAQ,KAIjB78B,EAAS,EAAQ,KAAUA,OAE3BkvC,EAAgB/mC,EAAOvG,YAAc,aAUzC,IAkIIutC,EAlIAC,EAAc,EAAQ,KAGtBoa,EADW,EAAQ,KACSA,iBAE5BC,EAAiB,EAAQ,KAAa9xB,MACtC+xB,EAAuBD,EAAeC,qBACtCE,EAA6BH,EAAeG,2BAC5C0E,EAAwB7E,EAAe6E,sBACvCC,EAAyB9E,EAAe8E,uBACxCC,EAAuB/E,EAAe+E,qBACtCC,EAAyBhF,EAAegF,uBACxCC,EAA6BjF,EAAeiF,2BAC5CC,EAAuBlF,EAAekF,qBAEtC7E,EAAiB1a,EAAY0a,eAIjC,SAASza,KAET,SAASL,EAAcrhB,EAASme,EAAQwD,GACtCzZ,EAASA,GAAU,EAAQ,KAC3BlI,EAAUA,GAAW,GAMG,kBAAb2hB,IAAwBA,EAAWxD,aAAkBjW,GAGhE/zB,KAAKytC,aAAe5hB,EAAQ4hB,WACxBD,IAAUxtC,KAAKytC,WAAaztC,KAAKytC,cAAgB5hB,EAAQ6hB,oBAI7D1tC,KAAK20B,cAAgB+yB,EAAiB1nD,KAAM6rB,EAAS,wBAAyB2hB,GAE9ExtC,KAAK+tC,aAAc,EAEnB/tC,KAAKguC,WAAY,EAEjBhuC,KAAKiuC,QAAS,EAEdjuC,KAAKw0B,OAAQ,EAEbx0B,KAAKuqC,UAAW,EAEhBvqC,KAAK60B,WAAY,EAIjB,IAAIqZ,GAAqC,IAA1BriB,EAAQsiB,cACvBnuC,KAAKmuC,eAAiBD,EAItBluC,KAAKouC,gBAAkBviB,EAAQuiB,iBAAmB,OAIlDpuC,KAAKtB,OAAS,EAEdsB,KAAKquC,SAAU,EAEfruC,KAAKsuC,OAAS,EAKdtuC,KAAKuuC,MAAO,EAIZvuC,KAAKwuC,kBAAmB,EAExBxuC,KAAKyuC,QAAU,SAAUjd,IA6R3B,SAAiBwY,EAAQxY,GACvB,IAAIZ,EAAQoZ,EAAOzV,eACfga,EAAO3d,EAAM2d,KACbxZ,EAAKnE,EAAM8d,QACf,GAAkB,mBAAP3Z,EAAmB,MAAM,IAAIy3B,EAExC,GAbF,SAA4B57B,GAC1BA,EAAMyd,SAAU,EAChBzd,EAAM8d,QAAU,KAChB9d,EAAMlyB,QAAUkyB,EAAM+d,SACtB/d,EAAM+d,SAAW,EAQjBC,CAAmBhe,GACfY,GArCN,SAAsBwY,EAAQpZ,EAAO2d,EAAM/c,EAAIuD,KAC3CnE,EAAMgc,UAEJ2B,GAGF3Y,EAAQnB,SAASM,EAAIvD,GAGrBoE,EAAQnB,SAASoa,EAAa7E,EAAQpZ,GACtCoZ,EAAOzV,eAAeua,cAAe,EACrCkZ,EAAehe,EAAQxY,KAIvBuD,EAAGvD,GACHwY,EAAOzV,eAAeua,cAAe,EACrCkZ,EAAehe,EAAQxY,GAGvBqd,EAAY7E,EAAQpZ,IAiBdme,CAAa/E,EAAQpZ,EAAO2d,EAAM/c,EAAIuD,OAAS,CAErD,IAAIwV,EAAWyE,EAAWpe,IAAUoZ,EAAOnV,UAEtC0V,GAAa3Z,EAAM0d,QAAW1d,EAAM4d,mBAAoB5d,EAAMqe,iBACjEC,EAAYlF,EAAQpZ,GAGlB2d,EACF3Y,EAAQnB,SAAS0a,EAAYnF,EAAQpZ,EAAO2Z,EAAUxV,GAEtDoa,EAAWnF,EAAQpZ,EAAO2Z,EAAUxV,IA7StC0Z,CAAQzE,EAAQxY,IAIlBxxB,KAAK0uC,QAAU,KAEf1uC,KAAK2uC,SAAW,EAChB3uC,KAAKivC,gBAAkB,KACvBjvC,KAAKovC,oBAAsB,KAG3BpvC,KAAK4sC,UAAY,EAGjB5sC,KAAKqvC,aAAc,EAEnBrvC,KAAK8uC,cAAe,EAEpB9uC,KAAK4oD,WAAkC,IAAtB/8B,EAAQ+8B,UAEzB5oD,KAAK6oD,cAAgBh9B,EAAQg9B,YAE7B7oD,KAAKsvC,qBAAuB,EAG5BtvC,KAAK6sC,mBAAqB,IAAIN,EAAcvsC,MA4C9C,SAASk0B,EAASrI,GAUhB,IAAI2hB,EAAWxtC,gBATf+zB,EAASA,GAAU,EAAQ,MAU3B,IAAKyZ,IAAaH,EAAgBpqC,KAAKixB,EAAUl0B,MAAO,OAAO,IAAIk0B,EAASrI,GAC5E7rB,KAAKu0B,eAAiB,IAAI2Y,EAAcrhB,EAAS7rB,KAAMwtC,GAEvDxtC,KAAKlC,UAAW,EAEZ+tB,IAC2B,mBAAlBA,EAAQlrB,QAAsBX,KAAKuvC,OAAS1jB,EAAQlrB,OACjC,mBAAnBkrB,EAAQ2jB,SAAuBxvC,KAAKyvC,QAAU5jB,EAAQ2jB,QAClC,mBAApB3jB,EAAQ8P,UAAwB37B,KAAK80B,SAAWjJ,EAAQ8P,SACtC,mBAAlB9P,EAAQgB,QAAsB7sB,KAAK8sB,OAASjB,EAAQgB,QAGjEkO,EAAO93B,KAAKjD,MAwJd,SAAS0vC,EAAQ1F,EAAQpZ,EAAO4e,EAAQxuC,EAAKo6B,EAAOl8B,EAAU61B,GAC5DnE,EAAM+d,SAAW3tC,EACjB4vB,EAAM8d,QAAU3Z,EAChBnE,EAAMyd,SAAU,EAChBzd,EAAM2d,MAAO,EACT3d,EAAMiE,UAAWjE,EAAM6d,QAAQ,IAAIie,EAAqB,UAAmBld,EAAQxF,EAAOyF,QAAQrU,EAAOxK,EAAM6d,SAAczE,EAAOuF,OAAOnU,EAAOl8B,EAAU0xB,EAAM6d,SACtK7d,EAAM2d,MAAO,EAwDf,SAASY,EAAWnF,EAAQpZ,EAAO2Z,EAAUxV,GACtCwV,GASP,SAAsBP,EAAQpZ,GACP,IAAjBA,EAAMlyB,QAAgBkyB,EAAMod,YAC9Bpd,EAAMod,WAAY,EAClBhE,EAAO9Z,KAAK,UAZCyf,CAAa3F,EAAQpZ,GACpCA,EAAMgc,YACN7X,IACA8Z,EAAY7E,EAAQpZ,GActB,SAASse,EAAYlF,EAAQpZ,GAC3BA,EAAM4d,kBAAmB,EACzB,IAAI/B,EAAQ7b,EAAMqe,gBAElB,GAAIjF,EAAOyF,SAAWhD,GAASA,EAAMliB,KAAM,CAEzC,IAAIld,EAAIujB,EAAM0e,qBACVrxC,EAAS,IAAIuK,MAAM6E,GACnBuiC,EAAShf,EAAMic,mBACnB+C,EAAOnD,MAAQA,EAIf,IAHA,IAAIpc,EAAQ,EACRwf,GAAa,EAEVpD,GACLxuC,EAAOoyB,GAASoc,EACXA,EAAMqD,QAAOD,GAAa,GAC/BpD,EAAQA,EAAMliB,KACd8F,GAAS,EAGXpyB,EAAO4xC,WAAaA,EACpBH,EAAQ1F,EAAQpZ,GAAO,EAAMA,EAAMlyB,OAAQT,EAAQ,GAAI2xC,EAAOlD,QAG9D9b,EAAMgc,YACNhc,EAAMwe,oBAAsB,KAExBQ,EAAOrlB,MACTqG,EAAMic,mBAAqB+C,EAAOrlB,KAClCqlB,EAAOrlB,KAAO,MAEdqG,EAAMic,mBAAqB,IAAIN,EAAc3b,GAG/CA,EAAM0e,qBAAuB,MACxB,CAEL,KAAO7C,GAAO,CACZ,IAAIrR,EAAQqR,EAAMrR,MACdl8B,EAAWutC,EAAMvtC,SACjB61B,EAAK0X,EAAMvC,SASf,GAPAwF,EAAQ1F,EAAQpZ,GAAO,EADbA,EAAM6c,WAAa,EAAIrS,EAAM18B,OACJ08B,EAAOl8B,EAAU61B,GACpD0X,EAAQA,EAAMliB,KACdqG,EAAM0e,uBAKF1e,EAAMyd,QACR,MAIU,OAAV5B,IAAgB7b,EAAMwe,oBAAsB,MAGlDxe,EAAMqe,gBAAkBxC,EACxB7b,EAAM4d,kBAAmB,EA2C3B,SAASQ,EAAWpe,GAClB,OAAOA,EAAMqd,QAA2B,IAAjBrd,EAAMlyB,QAA0C,OAA1BkyB,EAAMqe,kBAA6Bre,EAAM2Z,WAAa3Z,EAAMyd,QAG3G,SAAS0B,EAAU/F,EAAQpZ,GACzBoZ,EAAOld,QAAO,SAAU/a,GACtB6e,EAAMgc,YAEF76B,GACFi2C,EAAehe,EAAQj4B,GAGzB6e,EAAMye,aAAc,EACpBrF,EAAO9Z,KAAK,aACZ2e,EAAY7E,EAAQpZ,MAiBxB,SAASie,EAAY7E,EAAQpZ,GAC3B,IAAIof,EAAOhB,EAAWpe,GAEtB,GAAIof,IAhBN,SAAmBhG,EAAQpZ,GACpBA,EAAMye,aAAgBze,EAAMmd,cACF,mBAAlB/D,EAAOld,QAA0B8D,EAAMiE,WAKhDjE,EAAMye,aAAc,EACpBrF,EAAO9Z,KAAK,eALZU,EAAMgc,YACNhc,EAAMmd,aAAc,EACpBnY,EAAQnB,SAASsb,EAAW/F,EAAQpZ,KAYtCqf,CAAUjG,EAAQpZ,GAEM,IAApBA,EAAMgc,YACRhc,EAAM2Z,UAAW,EACjBP,EAAO9Z,KAAK,UAERU,EAAMi4B,cAAa,CAGrB,IAAIuD,EAASpiB,EAAOpV,iBAEfw3B,GAAUA,EAAOvD,aAAeuD,EAAO3hB,aAC1CT,EAAOrO,UAMf,OAAOqU,EA3hBT,EAAQ,IAAR,CAAoB9b,EAAU6G,GAyF9BmS,EAAcxvC,UAAUu5B,UAAY,WAIlC,IAHA,IAAInM,EAAU9qB,KAAKivC,gBACftmC,EAAM,GAEHmiB,GACLniB,EAAIjE,KAAKomB,GACTA,EAAUA,EAAQP,KAGpB,OAAO5hB,GAGT,WACE,IACExL,OAAO2J,eAAeomC,EAAcxvC,UAAW,SAAU,CACvDsV,IAAKm6B,EAAat6B,WAAU,WAC1B,OAAO7S,KAAKi3B,cACX,6EAAmF,aAExF,MAAO3U,KAPX,GAcsB,mBAAX1b,QAAyBA,OAAOspC,aAAiE,mBAA3C5hB,SAAS5wB,UAAUkJ,OAAOspC,cACzF7C,EAAkB/e,SAAS5wB,UAAUkJ,OAAOspC,aAC5C/yC,OAAO2J,eAAeotB,EAAUttB,OAAOspC,YAAa,CAClDtyC,MAAO,SAAeuyC,GACpB,QAAI9C,EAAgBpqC,KAAKjD,KAAMmwC,IAC3BnwC,OAASk0B,IACNic,GAAUA,EAAO5b,0BAA0B2Y,OAItDG,EAAkB,SAAyB8C,GACzC,OAAOA,aAAkBnwC,MA+B7Bk0B,EAASx2B,UAAUuQ,KAAO,WACxB+5C,EAAehoD,KAAM,IAAIysD,IA+B3Bv4B,EAASx2B,UAAUiD,MAAQ,SAAUy6B,EAAOl8B,EAAU61B,GACpD,IAnNqBj0B,EAmNjB8vB,EAAQ5wB,KAAKu0B,eACb7rB,GAAM,EAENonC,GAASlf,EAAM6c,aAtNE3sC,EAsN0Bs6B,EArNxCl9B,EAAO6C,SAASD,IAAQA,aAAessC,GAsO9C,OAfI0C,IAAU5xC,EAAO6C,SAASq6B,KAC5BA,EA7NJ,SAA6BA,GAC3B,OAAOl9B,EAAOS,KAAKy8B,GA4NTgV,CAAoBhV,IAGN,mBAAbl8B,IACT61B,EAAK71B,EACLA,EAAW,MAGT4wC,EAAO5wC,EAAW,SAAmBA,IAAUA,EAAW0xB,EAAMwd,iBAClD,mBAAPrZ,IAAmBA,EAAKwY,GAC/B3c,EAAMqd,OA7CZ,SAAuBjE,EAAQjV,GAC7B,IAAIvD,EAAK,IAAIo7B,EAEb5E,EAAehe,EAAQxY,GACvBoE,EAAQnB,SAASM,EAAIvD,GAyCH6e,CAAcrwC,KAAM+0B,IAAa+a,GAnCrD,SAAoB9F,EAAQpZ,EAAOwK,EAAOrG,GACxC,IAAIvD,EAQJ,OANc,OAAV4J,EACF5J,EAAK,IAAIm7B,EACiB,iBAAVvxB,GAAuBxK,EAAM6c,aAC7Cjc,EAAK,IAAIo2B,EAAqB,QAAS,CAAC,SAAU,UAAWxsB,KAG3D5J,IACFw2B,EAAehe,EAAQxY,GACvBoE,EAAQnB,SAASM,EAAIvD,IACd,GAuBmD+e,CAAWvwC,KAAM4wB,EAAOwK,EAAOrG,MACzFnE,EAAMgc,YACNlkC,EAwDJ,SAAuBshC,EAAQpZ,EAAOkf,EAAO1U,EAAOl8B,EAAU61B,GAC5D,IAAK+a,EAAO,CACV,IAAIU,EAtBR,SAAqB5f,EAAOwK,EAAOl8B,GAC5B0xB,EAAM6c,aAAsC,IAAxB7c,EAAMud,eAA4C,iBAAV/S,IAC/DA,EAAQl9B,EAAOS,KAAKy8B,EAAOl8B,IAG7B,OAAOk8B,EAiBUqV,CAAY7f,EAAOwK,EAAOl8B,GAErCk8B,IAAUoV,IACZV,GAAQ,EACR5wC,EAAW,SACXk8B,EAAQoV,GAIZ,IAAIxvC,EAAM4vB,EAAM6c,WAAa,EAAIrS,EAAM18B,OACvCkyB,EAAMlyB,QAAUsC,EAChB,IAAI0H,EAAMkoB,EAAMlyB,OAASkyB,EAAM+D,cAE1BjsB,IAAKkoB,EAAMod,WAAY,GAE5B,GAAIpd,EAAMyd,SAAWzd,EAAM0d,OAAQ,CACjC,IAAIoC,EAAO9f,EAAMwe,oBACjBxe,EAAMwe,oBAAsB,CAC1BhU,MAAOA,EACPl8B,SAAUA,EACV4wC,MAAOA,EACP5F,SAAUnV,EACVxK,KAAM,MAGJmmB,EACFA,EAAKnmB,KAAOqG,EAAMwe,oBAElBxe,EAAMqe,gBAAkBre,EAAMwe,oBAGhCxe,EAAM0e,sBAAwB,OAE9BI,EAAQ1F,EAAQpZ,GAAO,EAAO5vB,EAAKo6B,EAAOl8B,EAAU61B,GAGtD,OAAOrsB,EA9FCioC,CAAc3wC,KAAM4wB,EAAOkf,EAAO1U,EAAOl8B,EAAU61B,IAEpDrsB,GAGTwrB,EAASx2B,UAAUkzC,KAAO,WACxB5wC,KAAKu0B,eAAe+Z,UAGtBpa,EAASx2B,UAAUmzC,OAAS,WAC1B,IAAIjgB,EAAQ5wB,KAAKu0B,eAEb3D,EAAM0d,SACR1d,EAAM0d,SACD1d,EAAMyd,SAAYzd,EAAM0d,QAAW1d,EAAM4d,mBAAoB5d,EAAMqe,iBAAiBC,EAAYlvC,KAAM4wB,KAI/GsD,EAASx2B,UAAUozC,mBAAqB,SAA4B5xC,GAGlE,GADwB,iBAAbA,IAAuBA,EAAWA,EAAS4C,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAOkB,SAAS9D,EAAW,IAAI4C,gBAAkB,GAAI,MAAM,IAAI+qD,EAAqB3tD,GAExL,OADAc,KAAKu0B,eAAe6Z,gBAAkBlvC,EAC/Bc,MAGT7C,OAAO2J,eAAeotB,EAASx2B,UAAW,iBAAkB,CAI1DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,gBAAkBv0B,KAAKu0B,eAAe0C,eAYtD95B,OAAO2J,eAAeotB,EAASx2B,UAAW,wBAAyB,CAIjEG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,eAAeI,iBA4L/BT,EAASx2B,UAAU6xC,OAAS,SAAUnU,EAAOl8B,EAAU61B,GACrDA,EAAG,IAAI+yB,EAA2B,cAGpC5zB,EAASx2B,UAAU+xC,QAAU,KAE7Bvb,EAASx2B,UAAUuE,IAAM,SAAUm5B,EAAOl8B,EAAU61B,GAClD,IAAInE,EAAQ5wB,KAAKu0B,eAoBjB,MAlBqB,mBAAV6G,GACTrG,EAAKqG,EACLA,EAAQ,KACRl8B,EAAW,MACkB,mBAAbA,IAChB61B,EAAK71B,EACLA,EAAW,MAGTk8B,SAAuCp7B,KAAKW,MAAMy6B,EAAOl8B,GAEzD0xB,EAAM0d,SACR1d,EAAM0d,OAAS,EACftuC,KAAK6wC,UAIFjgB,EAAMqd,QAsEb,SAAqBjE,EAAQpZ,EAAOmE,GAClCnE,EAAMqd,QAAS,EACfY,EAAY7E,EAAQpZ,GAEhBmE,IACEnE,EAAM2Z,SAAU3U,EAAQnB,SAASM,GAASiV,EAAOnb,KAAK,SAAUkG,IAGtEnE,EAAM4D,OAAQ,EACdwV,EAAOlsC,UAAW,EA/ECizC,CAAY/wC,KAAM4wB,EAAOmE,GACrC/0B,MAGT7C,OAAO2J,eAAeotB,EAASx2B,UAAW,iBAAkB,CAI1DG,YAAY,EACZmV,IAAK,WACH,OAAOhT,KAAKu0B,eAAe71B,UAuF/BvB,OAAO2J,eAAeotB,EAASx2B,UAAW,YAAa,CAIrDG,YAAY,EACZmV,IAAK,WACH,YAA4B5T,IAAxBY,KAAKu0B,gBAIFv0B,KAAKu0B,eAAeM,WAE7B1oB,IAAK,SAAavO,GAGXoC,KAAKu0B,iBAMVv0B,KAAKu0B,eAAeM,UAAYj3B,MAGpCs2B,EAASx2B,UAAUi+B,QAAU2R,EAAY3R,QACzCzH,EAASx2B,UAAUszC,WAAa1D,EAAY2D,UAE5C/c,EAASx2B,UAAUo3B,SAAW,SAAU/iB,EAAKgjB,GAC3CA,EAAGhjB,M,qDCxnBL1U,EAAOC,QAAUkvB,EAEjB,IAAIm7B,EAAiB,EAAQ,KAAa9xB,MACtCiyB,EAA6BH,EAAeG,2BAC5C0E,EAAwB7E,EAAe6E,sBACvCM,EAAqCnF,EAAemF,mCACpDC,EAA8BpF,EAAeoF,4BAE7Ch5B,EAAS,EAAQ,KAIrB,SAASi5B,EAAex7B,EAAInwB,GAC1B,IAAI4rD,EAAKjtD,KAAKktD,gBACdD,EAAGE,cAAe,EAClB,IAAIp4B,EAAKk4B,EAAGve,QAEZ,GAAW,OAAP3Z,EACF,OAAO/0B,KAAKkwB,KAAK,QAAS,IAAIs8B,GAGhCS,EAAGG,WAAa,KAChBH,EAAGve,QAAU,KACD,MAARrtC,GACFrB,KAAK0E,KAAKrD,GACZ0zB,EAAGvD,GACH,IAAI67B,EAAKrtD,KAAK40B,eACdy4B,EAAG/E,SAAU,GAET+E,EAAG9E,cAAgB8E,EAAG3uD,OAAS2uD,EAAG14B,gBACpC30B,KAAKipD,MAAMoE,EAAG14B,eAIlB,SAASnI,EAAUX,GACjB,KAAM7rB,gBAAgBwsB,GAAY,OAAO,IAAIA,EAAUX,GACvDkI,EAAO9wB,KAAKjD,KAAM6rB,GAClB7rB,KAAKktD,gBAAkB,CACrBF,eAAgBA,EAAengD,KAAK7M,MACpCstD,eAAe,EACfH,cAAc,EACdze,QAAS,KACT0e,WAAY,KACZG,cAAe,MAGjBvtD,KAAK40B,eAAe2zB,cAAe,EAInCvoD,KAAK40B,eAAe2Z,MAAO,EAEvB1iB,IAC+B,mBAAtBA,EAAQ7K,YAA0BhhB,KAAK4tB,WAAa/B,EAAQ7K,WAC1C,mBAAlB6K,EAAQ2hC,QAAsBxtD,KAAK6tB,OAAShC,EAAQ2hC,QAIjExtD,KAAK8xB,GAAG,YAAame,GAGvB,SAASA,IACP,IAAIzD,EAAQxsC,KAEe,mBAAhBA,KAAK6tB,QAA0B7tB,KAAK40B,eAAeC,UAK5D/G,EAAK9tB,KAAM,KAAM,MAJjBA,KAAK6tB,QAAO,SAAU2D,EAAInwB,GACxBysB,EAAK0e,EAAOhb,EAAInwB,MA6DtB,SAASysB,EAAKkc,EAAQxY,EAAInwB,GACxB,GAAImwB,EAAI,OAAOwY,EAAO9Z,KAAK,QAASsB,GAMpC,GALY,MAARnwB,GACF2oC,EAAOtlC,KAAKrD,GAIV2oC,EAAOzV,eAAe71B,OAAQ,MAAM,IAAIquD,EAC5C,GAAI/iB,EAAOkjB,gBAAgBC,aAAc,MAAM,IAAIL,EACnD,OAAO9iB,EAAOtlC,KAAK,MA9HrB,EAAQ,IAAR,CAAoB8nB,EAAWuH,GA+D/BvH,EAAU9uB,UAAUgH,KAAO,SAAU02B,EAAOl8B,GAE1C,OADAc,KAAKktD,gBAAgBI,eAAgB,EAC9Bv5B,EAAOr2B,UAAUgH,KAAKzB,KAAKjD,KAAMo7B,EAAOl8B,IAajDstB,EAAU9uB,UAAUkwB,WAAa,SAAUwN,EAAOl8B,EAAU61B,GAC1DA,EAAG,IAAI+yB,EAA2B,kBAGpCt7B,EAAU9uB,UAAU6xC,OAAS,SAAUnU,EAAOl8B,EAAU61B,GACtD,IAAIk4B,EAAKjtD,KAAKktD,gBAKd,GAJAD,EAAGve,QAAU3Z,EACbk4B,EAAGG,WAAahyB,EAChB6xB,EAAGM,cAAgBruD,GAEd+tD,EAAGE,aAAc,CACpB,IAAIE,EAAKrtD,KAAK40B,gBACVq4B,EAAGK,eAAiBD,EAAG9E,cAAgB8E,EAAG3uD,OAAS2uD,EAAG14B,gBAAe30B,KAAKipD,MAAMoE,EAAG14B,iBAO3FnI,EAAU9uB,UAAUurD,MAAQ,SAAUvmD,GACpC,IAAIuqD,EAAKjtD,KAAKktD,gBAEQ,OAAlBD,EAAGG,YAAwBH,EAAGE,aAOhCF,EAAGK,eAAgB,GANnBL,EAAGE,cAAe,EAElBntD,KAAK4tB,WAAWq/B,EAAGG,WAAYH,EAAGM,cAAeN,EAAGD,kBAQxDxgC,EAAU9uB,UAAUo3B,SAAW,SAAU/iB,EAAKgjB,GAC5ChB,EAAOr2B,UAAUo3B,SAAS7xB,KAAKjD,KAAM+R,GAAK,SAAU07C,GAClD14B,EAAG04B,Q,+BCxLP,IAAIr+C,EAAQ9R,EAkCZ,SAASmS,EAAM2D,GACb,OAAoB,IAAhBA,EAAK1U,OACA,IAAM0U,EAENA,EAIX,SAASxK,EAAMqG,GAEb,IADA,IAAIzJ,EAAM,GACDhE,EAAI,EAAGA,EAAIyN,EAAIvQ,OAAQ8C,IAC9BgE,GAAOiK,EAAMR,EAAIzN,GAAGC,SAAS,KAC/B,OAAO+D,EAdT4J,EAAMI,QA9BN,SAAiBP,EAAKqE,GACpB,GAAI9K,MAAMhJ,QAAQyP,GAChB,OAAOA,EAAIrO,QACb,IAAKqO,EACH,MAAO,GACT,IAAIzJ,EAAM,GACV,GAAmB,iBAARyJ,EAAkB,CAC3B,IAAK,IAAIzN,EAAI,EAAGA,EAAIyN,EAAIvQ,OAAQ8C,IAC9BgE,EAAIhE,GAAc,EAATyN,EAAIzN,GACf,OAAOgE,EAET,GAAY,QAAR8N,EAAe,EACjBrE,EAAMA,EAAIvC,QAAQ,eAAgB,KAC1BhO,OAAS,GAAM,IACrBuQ,EAAM,IAAMA,GACd,IAASzN,EAAI,EAAGA,EAAIyN,EAAIvQ,OAAQ8C,GAAK,EACnCgE,EAAId,KAAKP,SAAS8K,EAAIzN,GAAKyN,EAAIzN,EAAI,GAAI,UAEzC,IAASA,EAAI,EAAGA,EAAIyN,EAAIvQ,OAAQ8C,IAAK,CACnC,IAAIyD,EAAIgK,EAAItK,WAAWnD,GACnB0D,EAAKD,GAAK,EACVE,EAAS,IAAJF,EACLC,EACFM,EAAId,KAAKQ,EAAIC,GAEbK,EAAId,KAAKS,GAGf,OAAOK,GAUT4J,EAAMK,MAAQA,EAQdL,EAAMxG,MAAQA,EAEdwG,EAAMM,OAAS,SAAgBvM,EAAKmQ,GAClC,MAAY,QAARA,EACK1K,EAAMzF,GAENA,I,6BCtDX,IAAIm9B,EAAQhjC,EAEZgjC,EAAM5qB,KAAO,EAAQ,KACrB4qB,EAAM4U,MAAQ,EAAQ,KACtB5U,EAAMtV,KAAO,EAAQ,KACrBsV,EAAM6U,QAAU,EAAQ,M,6BCLxB,IACIvhC,EADQ,EAAQ,KACDA,OAYnB,SAAS0lD,EAAKpyD,EAAGC,EAAGiJ,GAClB,OAAQlJ,EAAIC,GAAQD,EAAKkJ,EAI3B,SAASmpD,EAAMryD,EAAGC,EAAGiJ,GACnB,OAAQlJ,EAAIC,EAAMD,EAAIkJ,EAAMjJ,EAAIiJ,EAIlC,SAASopD,EAAItyD,EAAGC,EAAGiJ,GACjB,OAAOlJ,EAAIC,EAAIiJ,EAbjB9S,EAAQm8D,KARR,SAAcx4C,EAAG/Z,EAAGC,EAAGiJ,GACrB,OAAU,IAAN6Q,EACKq4C,EAAKpyD,EAAGC,EAAGiJ,GACV,IAAN6Q,GAAiB,IAANA,EACNu4C,EAAItyD,EAAGC,EAAGiJ,GACT,IAAN6Q,EACKs4C,EAAMryD,EAAGC,EAAGiJ,QADrB,GAQF9S,EAAQg8D,KAAOA,EAKfh8D,EAAQi8D,MAAQA,EAKhBj8D,EAAQk8D,IAAMA,EAKdl8D,EAAQo8D,OAHR,SAAgBxyD,GACd,OAAO0M,EAAO1M,EAAG,GAAK0M,EAAO1M,EAAG,IAAM0M,EAAO1M,EAAG,KAOlD5J,EAAQq8D,OAHR,SAAgBzyD,GACd,OAAO0M,EAAO1M,EAAG,GAAK0M,EAAO1M,EAAG,IAAM0M,EAAO1M,EAAG,KAOlD5J,EAAQs8D,OAHR,SAAgB1yD,GACd,OAAO0M,EAAO1M,EAAG,GAAK0M,EAAO1M,EAAG,IAAOA,IAAM,GAO/C5J,EAAQu8D,OAHR,SAAgB3yD,GACd,OAAO0M,EAAO1M,EAAG,IAAM0M,EAAO1M,EAAG,IAAOA,IAAM,K,6BC5ChD,IAAIkI,EAAQ,EAAQ,KAChBomC,EAAS,EAAQ,KACjBskB,EAAY,EAAQ,KACpB9qD,EAAS,EAAQ,KAEjB8E,EAAQ1E,EAAM0E,MACdE,EAAU5E,EAAM4E,QAChBE,EAAU9E,EAAM8E,QAChBolD,EAAOQ,EAAUR,KACjBC,EAAQO,EAAUP,MAClBG,EAASI,EAAUJ,OACnBC,EAASG,EAAUH,OACnBC,EAASE,EAAUF,OACnBC,EAASC,EAAUD,OAEnB9gC,EAAYyc,EAAOzc,UAEnBghC,EAAW,CACb,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,UAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,YAGtC,SAASC,IACP,KAAMh6D,gBAAgBg6D,GACpB,OAAO,IAAIA,EAEbjhC,EAAU91B,KAAKjD,MACfA,KAAKwjB,EAAI,CACP,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,YAEtCxjB,KAAKkQ,EAAI6pD,EACT/5D,KAAK2tD,EAAI,IAAInlD,MAAM,IAErB4G,EAAM6D,SAAS+mD,EAAQjhC,GACvB17B,EAAOC,QAAU08D,EAEjBA,EAAO7iC,UAAY,IACnB6iC,EAAO9gC,QAAU,IACjB8gC,EAAO7gC,aAAe,IACtB6gC,EAAO5gC,UAAY,GAEnB4gC,EAAOt8D,UAAU4vB,QAAU,SAAiBre,EAAKjN,GAG/C,IAFA,IAAI2rD,EAAI3tD,KAAK2tD,EAEJnsD,EAAI,EAAGA,EAAI,GAAIA,IACtBmsD,EAAEnsD,GAAKyN,EAAIjN,EAAQR,GACrB,KAAOA,EAAImsD,EAAEjvD,OAAQ8C,IACnBmsD,EAAEnsD,GAAKwS,EAAQ6lD,EAAOlM,EAAEnsD,EAAI,IAAKmsD,EAAEnsD,EAAI,GAAIo4D,EAAOjM,EAAEnsD,EAAI,KAAMmsD,EAAEnsD,EAAI,KAEtE,IAAIyF,EAAIjH,KAAKwjB,EAAE,GACX/gB,EAAIzC,KAAKwjB,EAAE,GACXve,EAAIjF,KAAKwjB,EAAE,GACXvP,EAAIjU,KAAKwjB,EAAE,GACXhd,EAAIxG,KAAKwjB,EAAE,GACX6qC,EAAIruD,KAAKwjB,EAAE,GACXmC,EAAI3lB,KAAKwjB,EAAE,GACXA,EAAIxjB,KAAKwjB,EAAE,GAGf,IADAxU,EAAOhP,KAAKkQ,EAAExR,SAAWivD,EAAEjvD,QACtB8C,EAAI,EAAGA,EAAImsD,EAAEjvD,OAAQ8C,IAAK,CAC7B,IAAI8sD,EAAKp6C,EAAQsP,EAAGm2C,EAAOnzD,GAAI8yD,EAAK9yD,EAAG6nD,EAAG1oC,GAAI3lB,KAAKkQ,EAAE1O,GAAImsD,EAAEnsD,IACvD+sD,EAAKz6C,EAAM4lD,EAAOzyD,GAAIsyD,EAAMtyD,EAAGxE,EAAGwC,IACtCue,EAAImC,EACJA,EAAI0oC,EACJA,EAAI7nD,EACJA,EAAIsN,EAAMG,EAAGq6C,GACbr6C,EAAIhP,EACJA,EAAIxC,EACJA,EAAIwE,EACJA,EAAI6M,EAAMw6C,EAAIC,GAGhBvuD,KAAKwjB,EAAE,GAAK1P,EAAM9T,KAAKwjB,EAAE,GAAIvc,GAC7BjH,KAAKwjB,EAAE,GAAK1P,EAAM9T,KAAKwjB,EAAE,GAAI/gB,GAC7BzC,KAAKwjB,EAAE,GAAK1P,EAAM9T,KAAKwjB,EAAE,GAAIve,GAC7BjF,KAAKwjB,EAAE,GAAK1P,EAAM9T,KAAKwjB,EAAE,GAAIvP,GAC7BjU,KAAKwjB,EAAE,GAAK1P,EAAM9T,KAAKwjB,EAAE,GAAIhd,GAC7BxG,KAAKwjB,EAAE,GAAK1P,EAAM9T,KAAKwjB,EAAE,GAAI6qC,GAC7BruD,KAAKwjB,EAAE,GAAK1P,EAAM9T,KAAKwjB,EAAE,GAAImC,GAC7B3lB,KAAKwjB,EAAE,GAAK1P,EAAM9T,KAAKwjB,EAAE,GAAIA,IAG/Bw2C,EAAOt8D,UAAU87B,QAAU,SAAgBlmB,GACzC,MAAY,QAARA,EACKlE,EAAMoE,QAAQxT,KAAKwjB,EAAG,OAEtBpU,EAAMuE,QAAQ3T,KAAKwjB,EAAG,S,6BCrGjC,IAAIpU,EAAQ,EAAQ,KAChBomC,EAAS,EAAQ,KACjBxmC,EAAS,EAAQ,KAEjBqG,EAAYjG,EAAMiG,UAClBC,EAAYlG,EAAMkG,UAClBC,EAAWnG,EAAMmG,SACjBC,EAAWpG,EAAMoG,SACjBrB,EAAQ/E,EAAM+E,MACdI,EAAWnF,EAAMmF,SACjBE,EAAWrF,EAAMqF,SACjBC,EAAatF,EAAMsF,WACnBM,EAAa5F,EAAM4F,WACnBC,EAAa7F,EAAM6F,WACnBG,EAAahG,EAAMgG,WAEnB2jB,EAAYyc,EAAOzc,UAEnBkhC,EAAW,CACb,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,UAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,YAGtC,SAASC,IACP,KAAMl6D,gBAAgBk6D,GACpB,OAAO,IAAIA,EAEbnhC,EAAU91B,KAAKjD,MACfA,KAAKwjB,EAAI,CACP,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,UACZ,UAAY,WACZ,WAAY,WACdxjB,KAAKkQ,EAAI+pD,EACTj6D,KAAK2tD,EAAI,IAAInlD,MAAM,KAyIrB,SAAS2xD,EAAQ7J,EAAI3B,EAAIyL,EAAIC,EAAIC,GAC/B,IAAInrD,EAAKmhD,EAAK8J,GAAS9J,EAAMgK,EAG7B,OAFInrD,EAAI,IACNA,GAAK,YACAA,EAGT,SAASorD,EAAQjK,EAAI3B,EAAIyL,EAAIC,EAAIC,EAAIvvB,GACnC,IAAI57B,EAAKw/C,EAAK0L,GAAS1L,EAAM5jB,EAG7B,OAFI57B,EAAI,IACNA,GAAK,YACAA,EAGT,SAASqrD,EAASlK,EAAI3B,EAAIyL,EAAIC,EAAIC,GAChC,IAAInrD,EAAKmhD,EAAK8J,EAAO9J,EAAKgK,EAAOF,EAAKE,EAGtC,OAFInrD,EAAI,IACNA,GAAK,YACAA,EAGT,SAASsrD,EAASnK,EAAI3B,EAAIyL,EAAIC,EAAIC,EAAIvvB,GACpC,IAAI57B,EAAKw/C,EAAK0L,EAAO1L,EAAK5jB,EAAOsvB,EAAKtvB,EAGtC,OAFI57B,EAAI,IACNA,GAAK,YACAA,EAGT,SAASurD,EAAUpK,EAAI3B,GACrB,IAIIx/C,EAJQkG,EAAUi7C,EAAI3B,EAAI,IAClBt5C,EAAUs5C,EAAI2B,EAAI,GAClBj7C,EAAUs5C,EAAI2B,EAAI,GAK9B,OAFInhD,EAAI,IACNA,GAAK,YACAA,EAGT,SAASwrD,EAAUrK,EAAI3B,GACrB,IAIIx/C,EAJQmG,EAAUg7C,EAAI3B,EAAI,IAClBr5C,EAAUq5C,EAAI2B,EAAI,GAClBh7C,EAAUq5C,EAAI2B,EAAI,GAK9B,OAFInhD,EAAI,IACNA,GAAK,YACAA,EAGT,SAASyrD,EAAUtK,EAAI3B,GACrB,IAIIx/C,EAJQkG,EAAUi7C,EAAI3B,EAAI,IAClBt5C,EAAUi7C,EAAI3B,EAAI,IAClBt5C,EAAUs5C,EAAI2B,EAAI,GAK9B,OAFInhD,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS0rD,EAAUvK,EAAI3B,GACrB,IAIIx/C,EAJQmG,EAAUg7C,EAAI3B,EAAI,IAClBr5C,EAAUg7C,EAAI3B,EAAI,IAClBr5C,EAAUq5C,EAAI2B,EAAI,GAK9B,OAFInhD,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS2rD,EAAUxK,EAAI3B,GACrB,IAIIx/C,EAJQkG,EAAUi7C,EAAI3B,EAAI,GAClBt5C,EAAUi7C,EAAI3B,EAAI,GAClBp5C,EAAS+6C,EAAI3B,EAAI,GAK7B,OAFIx/C,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS4rD,EAAUzK,EAAI3B,GACrB,IAIIx/C,EAJQmG,EAAUg7C,EAAI3B,EAAI,GAClBr5C,EAAUg7C,EAAI3B,EAAI,GAClBn5C,EAAS86C,EAAI3B,EAAI,GAK7B,OAFIx/C,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS6rD,EAAU1K,EAAI3B,GACrB,IAIIx/C,EAJQkG,EAAUi7C,EAAI3B,EAAI,IAClBt5C,EAAUs5C,EAAI2B,EAAI,IAClB/6C,EAAS+6C,EAAI3B,EAAI,GAK7B,OAFIx/C,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS8rD,EAAU3K,EAAI3B,GACrB,IAIIx/C,EAJQmG,EAAUg7C,EAAI3B,EAAI,IAClBr5C,EAAUq5C,EAAI2B,EAAI,IAClB96C,EAAS86C,EAAI3B,EAAI,GAK7B,OAFIx/C,EAAI,IACNA,GAAK,YACAA,EAxPTC,EAAM6D,SAASinD,EAAQnhC,GACvB17B,EAAOC,QAAU48D,EAEjBA,EAAO/iC,UAAY,KACnB+iC,EAAOhhC,QAAU,IACjBghC,EAAO/gC,aAAe,IACtB+gC,EAAO9gC,UAAY,IAEnB8gC,EAAOx8D,UAAUw9D,cAAgB,SAAuBjsD,EAAKjN,GAI3D,IAHA,IAAI2rD,EAAI3tD,KAAK2tD,EAGJnsD,EAAI,EAAGA,EAAI,GAAIA,IACtBmsD,EAAEnsD,GAAKyN,EAAIjN,EAAQR,GACrB,KAAOA,EAAImsD,EAAEjvD,OAAQ8C,GAAK,EAAG,CAC3B,IAAI25D,EAAQH,EAAUrN,EAAEnsD,EAAI,GAAImsD,EAAEnsD,EAAI,IAClC45D,EAAQH,EAAUtN,EAAEnsD,EAAI,GAAImsD,EAAEnsD,EAAI,IAClC65D,EAAQ1N,EAAEnsD,EAAI,IACd85D,EAAQ3N,EAAEnsD,EAAI,IACd+5D,EAAQT,EAAUnN,EAAEnsD,EAAI,IAAKmsD,EAAEnsD,EAAI,KACnCg6D,EAAQT,EAAUpN,EAAEnsD,EAAI,IAAKmsD,EAAEnsD,EAAI,KACnCi6D,EAAQ9N,EAAEnsD,EAAI,IACdk6D,EAAQ/N,EAAEnsD,EAAI,IAElBmsD,EAAEnsD,GAAKkT,EACLymD,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,GACT/N,EAAEnsD,EAAI,GAAKwT,EACTmmD,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,KAIbxB,EAAOx8D,UAAU4vB,QAAU,SAAiBre,EAAKjN,GAC/ChC,KAAKk7D,cAAcjsD,EAAKjN,GAExB,IAAI2rD,EAAI3tD,KAAK2tD,EAETv5C,EAAKpU,KAAKwjB,EAAE,GACZnP,EAAKrU,KAAKwjB,EAAE,GACZlP,EAAKtU,KAAKwjB,EAAE,GACZhP,EAAKxU,KAAKwjB,EAAE,GACZ7O,EAAK3U,KAAKwjB,EAAE,GACZ5O,EAAK5U,KAAKwjB,EAAE,GACZ3O,EAAK7U,KAAKwjB,EAAE,GACZ1O,EAAK9U,KAAKwjB,EAAE,GACZtO,EAAKlV,KAAKwjB,EAAE,GACZrO,EAAKnV,KAAKwjB,EAAE,GACZysC,EAAKjwD,KAAKwjB,EAAE,IACZ4sC,EAAKpwD,KAAKwjB,EAAE,IACZ0sC,EAAKlwD,KAAKwjB,EAAE,IACZ6sC,EAAKrwD,KAAKwjB,EAAE,IACZ2sC,EAAKnwD,KAAKwjB,EAAE,IACZ2nB,EAAKnrC,KAAKwjB,EAAE,IAEhBxU,EAAOhP,KAAKkQ,EAAExR,SAAWivD,EAAEjvD,QAC3B,IAAK,IAAI8C,EAAI,EAAGA,EAAImsD,EAAEjvD,OAAQ8C,GAAK,EAAG,CACpC,IAAI25D,EAAQhL,EACRiL,EAAQjwB,EACRkwB,EAAQT,EAAU1lD,EAAIC,GACtBmmD,EAAQT,EAAU3lD,EAAIC,GACtBomD,EAAQpB,EAAQjlD,EAAIC,EAAI86C,EAAIG,EAAIF,GAChCsL,EAAQjB,EAAQrlD,EAAIC,EAAI86C,EAAIG,EAAIF,EAAIG,GACpCoL,EAAQz7D,KAAKkQ,EAAE1O,GACfk6D,EAAQ17D,KAAKkQ,EAAE1O,EAAI,GACnBm6D,EAAQhO,EAAEnsD,GACVo6D,EAAQjO,EAAEnsD,EAAI,GAEdq6D,EAAQ5mD,EACVkmD,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,GACLE,EAAQ1mD,EACV+lD,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,GAETT,EAAQT,EAAUtmD,EAAIC,GACtB+mD,EAAQT,EAAUvmD,EAAIC,GACtBgnD,EAAQb,EAASpmD,EAAIC,EAAIC,EAAIE,EAAIG,GACjC2mD,EAAQb,EAASrmD,EAAIC,EAAIC,EAAIE,EAAIG,EAAIC,GAErC,IAAImnD,EAAQxnD,EAAS4mD,EAAOC,EAAOC,EAAOC,GACtCU,EAAQvnD,EAAS0mD,EAAOC,EAAOC,EAAOC,GAE1CnL,EAAKD,EACL/kB,EAAKklB,EAELH,EAAKD,EACLI,EAAKD,EAELH,EAAK/6C,EACLk7C,EAAKj7C,EAELD,EAAKX,EAASM,EAAIC,EAAI+mD,EAAOC,GAC7B3mD,EAAKV,EAASK,EAAIA,EAAI+mD,EAAOC,GAE7BjnD,EAAKF,EACLG,EAAKF,EAELD,EAAKL,EACLM,EAAKJ,EAELF,EAAKF,EACLI,EAAKH,EAELD,EAAKG,EAASsnD,EAAOC,EAAOC,EAAOC,GACnC3nD,EAAKI,EAASonD,EAAOC,EAAOC,EAAOC,GAGrC7nD,EAAMnU,KAAKwjB,EAAG,EAAGpP,EAAIC,GACrBF,EAAMnU,KAAKwjB,EAAG,EAAGlP,EAAIE,GACrBL,EAAMnU,KAAKwjB,EAAG,EAAG7O,EAAIC,GACrBT,EAAMnU,KAAKwjB,EAAG,EAAG3O,EAAIC,GACrBX,EAAMnU,KAAKwjB,EAAG,EAAGtO,EAAIC,GACrBhB,EAAMnU,KAAKwjB,EAAG,GAAIysC,EAAIG,GACtBj8C,EAAMnU,KAAKwjB,EAAG,GAAI0sC,EAAIG,GACtBl8C,EAAMnU,KAAKwjB,EAAG,GAAI2sC,EAAIhlB,IAGxB+uB,EAAOx8D,UAAU87B,QAAU,SAAgBlmB,GACzC,MAAY,QAARA,EACKlE,EAAMoE,QAAQxT,KAAKwjB,EAAG,OAEtBpU,EAAMuE,QAAQ3T,KAAKwjB,EAAG,S,iBCpNjC,2BACE,aAGA,SAASxU,EAAQ7N,EAAK8N,GACpB,IAAK9N,EAAK,MAAM,IAAIlB,MAAMgP,GAAO,oBAKnC,SAASgE,EAAU1V,EAAMC,GACvBD,EAAKE,OAASD,EACd,IAAIQ,EAAW,aACfA,EAASN,UAAYF,EAAUE,UAC/BH,EAAKG,UAAY,IAAIM,EACrBT,EAAKG,UAAUC,YAAcJ,EAK/B,SAAS8R,EAAIoG,EAAQC,EAAMjC,GACzB,GAAIpE,EAAGsG,KAAKF,GACV,OAAOA,EAGTzV,KAAK4V,SAAW,EAChB5V,KAAK6V,MAAQ,KACb7V,KAAKtB,OAAS,EAGdsB,KAAK8V,IAAM,KAEI,OAAXL,IACW,OAATC,GAA0B,OAATA,IACnBjC,EAASiC,EACTA,EAAO,IAGT1V,KAAK+V,MAAMN,GAAU,EAAGC,GAAQ,GAAIjC,GAAU,OAYlD,IAAIvV,EATkB,iBAAXb,EACTA,EAAOC,QAAU+R,EAEjB/R,EAAQ+R,GAAKA,EAGfA,EAAGA,GAAKA,EACRA,EAAG2G,SAAW,GAGd,IACE9X,EAAS,EAAQ,KAAUA,OAC3B,MAAOsI,IAoIT,SAASyP,EAAUzR,EAAKxC,EAAOC,GAI7B,IAHA,IAAIkN,EAAI,EACJnO,EAAMsE,KAAKC,IAAIf,EAAI9F,OAAQuD,GAC3BmO,EAAI,EACC5O,EAAIQ,EAAOR,EAAIR,EAAKQ,IAAK,CAChC,IAIIiB,EAJAwC,EAAIT,EAAIG,WAAWnD,GAAK,GAE5B2N,IAAM,EAiBNA,GAXE1M,EADEwC,GAAK,IAAMA,GAAK,GACdA,EAAI,GAAK,GAGJA,GAAK,IAAMA,GAAK,GACrBA,EAAI,GAAK,GAITA,EAINmL,GAAK3N,EAIP,OADAuM,IAAa,IAAJoB,GAAW,wBAA0B5L,GACvC2K,EAiCT,SAAS+G,EAAW1R,EAAKxC,EAAOC,EAAK0H,GAInC,IAHA,IAAIwF,EAAI,EACJ1M,EAAI,EACJzB,EAAMsE,KAAKC,IAAIf,EAAI9F,OAAQuD,GACtBT,EAAIQ,EAAOR,EAAIR,EAAKQ,IAAK,CAChC,IAAIyD,EAAIT,EAAIG,WAAWnD,GAAK,GAE5B2N,GAAKxF,EAIHlH,EADEwC,GAAK,GACHA,EAAI,GAAK,GAGJA,GAAK,GACVA,EAAI,GAAK,GAITA,EAEN+J,EAAO/J,GAAK,GAAKxC,EAAIkH,EAAK,qBAC1BwF,GAAK1M,EAEP,OAAO0M,EA0DT,SAAS8sD,EAAM/kD,EAAM9Y,GACnB8Y,EAAKrB,MAAQzX,EAAIyX,MACjBqB,EAAKxY,OAASN,EAAIM,OAClBwY,EAAKtB,SAAWxX,EAAIwX,SACpBsB,EAAKpB,IAAM1X,EAAI0X,IAsCjB,GA3TAzG,EAAGsG,KAAO,SAAe/F,GACvB,OAAIA,aAAeP,GAIJ,OAARO,GAA+B,iBAARA,GAC5BA,EAAIjS,YAAYqY,WAAa3G,EAAG2G,UAAYxN,MAAMhJ,QAAQoQ,EAAIiG,QAGlExG,EAAGxH,IAAM,SAAcsO,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGT/G,EAAG9J,IAAM,SAAc4Q,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGT/G,EAAG3R,UAAUqY,MAAQ,SAAeN,EAAQC,EAAMjC,GAChD,GAAsB,iBAAXgC,EACT,OAAOzV,KAAKsW,YAAYb,EAAQC,EAAMjC,GAGxC,GAAsB,iBAAXgC,EACT,OAAOzV,KAAKuW,WAAWd,EAAQC,EAAMjC,GAG1B,QAATiC,IACFA,EAAO,IAET1G,EAAO0G,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,IAGnD,IAAI1T,EAAQ,EACM,OAFlByT,EAASA,EAAOhU,WAAWiL,QAAQ,OAAQ,KAEhC,IACT1K,IAGW,KAAT0T,EACF1V,KAAKwW,UAAUf,EAAQzT,GAEvBhC,KAAKyW,WAAWhB,EAAQC,EAAM1T,GAGd,MAAdyT,EAAO,KACTzV,KAAK4V,SAAW,GAGlB5V,KAAKkqB,SAEU,OAAXzW,GAEJzT,KAAKuW,WAAWvW,KAAKwP,UAAWkG,EAAMjC,IAGxCpE,EAAG3R,UAAU4Y,YAAc,SAAsBb,EAAQC,EAAMjC,GACzDgC,EAAS,IACXzV,KAAK4V,SAAW,EAChBH,GAAUA,GAERA,EAAS,UACXzV,KAAK6V,MAAQ,CAAU,SAATJ,GACdzV,KAAKtB,OAAS,GACL+W,EAAS,kBAClBzV,KAAK6V,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,UAEzBzV,KAAKtB,OAAS,IAEdsQ,EAAOyG,EAAS,kBAChBzV,KAAK6V,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,SACvB,GAEFzV,KAAKtB,OAAS,GAGD,OAAX+U,GAGJzT,KAAKuW,WAAWvW,KAAKwP,UAAWkG,EAAMjC,IAGxCpE,EAAG3R,UAAU6Y,WAAa,SAAqBd,EAAQC,EAAMjC,GAG3D,GADAzE,EAAgC,iBAAlByG,EAAO/W,QACjB+W,EAAO/W,QAAU,EAGnB,OAFAsB,KAAK6V,MAAQ,CAAC,GACd7V,KAAKtB,OAAS,EACPsB,KAGTA,KAAKtB,OAAS4G,KAAKqR,KAAKlB,EAAO/W,OAAS,GACxCsB,KAAK6V,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BxB,KAAK6V,MAAMrU,GAAK,EAGlB,IAAIoC,EAAGiM,EACH+G,EAAM,EACV,GAAe,OAAXnD,EACF,IAAKjS,EAAIiU,EAAO/W,OAAS,EAAGkF,EAAI,EAAGpC,GAAK,EAAGA,GAAK,EAC9CqO,EAAI4F,EAAOjU,GAAMiU,EAAOjU,EAAI,IAAM,EAAMiU,EAAOjU,EAAI,IAAM,GACzDxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,GAAMiM,IAAO,GAAK+G,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACPhT,UAGC,GAAe,OAAX6P,EACT,IAAKjS,EAAI,EAAGoC,EAAI,EAAGpC,EAAIiU,EAAO/W,OAAQ8C,GAAK,EACzCqO,EAAI4F,EAAOjU,GAAMiU,EAAOjU,EAAI,IAAM,EAAMiU,EAAOjU,EAAI,IAAM,GACzDxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,GAAMiM,IAAO,GAAK+G,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACPhT,KAIN,OAAO5D,KAAKkqB,UAmCd7a,EAAG3R,UAAU8Y,UAAY,SAAoBf,EAAQzT,GAEnDhC,KAAKtB,OAAS4G,KAAKqR,MAAMlB,EAAO/W,OAASsD,GAAS,GAClDhC,KAAK6V,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BxB,KAAK6V,MAAMrU,GAAK,EAGlB,IAAIoC,EAAGiM,EAEH+G,EAAM,EACV,IAAKpV,EAAIiU,EAAO/W,OAAS,EAAGkF,EAAI,EAAGpC,GAAKQ,EAAOR,GAAK,EAClDqO,EAAIoG,EAASR,EAAQjU,EAAGA,EAAI,GAC5BxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAE9B5W,KAAK6V,MAAMjS,EAAI,IAAMiM,IAAO,GAAK+G,EAAO,SACxCA,GAAO,KACI,KACTA,GAAO,GACPhT,KAGApC,EAAI,IAAMQ,IACZ6N,EAAIoG,EAASR,EAAQzT,EAAOR,EAAI,GAChCxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,IAAMiM,IAAO,GAAK+G,EAAO,SAE1C5W,KAAKkqB,UA8BP7a,EAAG3R,UAAU+Y,WAAa,SAAqBhB,EAAQC,EAAM1T,GAE3DhC,KAAK6V,MAAQ,CAAC,GACd7V,KAAKtB,OAAS,EAGd,IAAK,IAAImY,EAAU,EAAGC,EAAU,EAAGA,GAAW,SAAWA,GAAWpB,EAClEmB,IAEFA,IACAC,EAAWA,EAAUpB,EAAQ,EAO7B,IALA,IAAIqB,EAAQtB,EAAO/W,OAASsD,EACxBqO,EAAM0G,EAAQF,EACd5U,EAAMqD,KAAKC,IAAIwR,EAAOA,EAAQ1G,GAAOrO,EAErCoR,EAAO,EACF5R,EAAIQ,EAAOR,EAAIS,EAAKT,GAAKqV,EAChCzD,EAAO8C,EAAUT,EAAQjU,EAAGA,EAAIqV,EAASnB,GAEzC1V,KAAKgX,MAAMF,GACP9W,KAAK6V,MAAM,GAAKzC,EAAO,SACzBpT,KAAK6V,MAAM,IAAMzC,EAEjBpT,KAAKiX,OAAO7D,GAIhB,GAAY,IAAR/C,EAAW,CACb,IAAInG,EAAM,EAGV,IAFAkJ,EAAO8C,EAAUT,EAAQjU,EAAGiU,EAAO/W,OAAQgX,GAEtClU,EAAI,EAAGA,EAAI6O,EAAK7O,IACnB0I,GAAOwL,EAGT1V,KAAKgX,MAAM9M,GACPlK,KAAK6V,MAAM,GAAKzC,EAAO,SACzBpT,KAAK6V,MAAM,IAAMzC,EAEjBpT,KAAKiX,OAAO7D,KAKlB/D,EAAG3R,UAAUwD,KAAO,SAAegW,GACjCA,EAAKrB,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/B0V,EAAKrB,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAE7B0V,EAAKxY,OAASsB,KAAKtB,OACnBwY,EAAKtB,SAAW5V,KAAK4V,SACrBsB,EAAKpB,IAAM9V,KAAK8V,KAUlBzG,EAAG3R,UAAUw+D,MAAQ,SAAgBhlD,GACnC+kD,EAAK/kD,EAAMlX,OAGbqP,EAAG3R,UAAUyS,MAAQ,WACnB,IAAIhB,EAAI,IAAIE,EAAG,MAEf,OADArP,KAAKkB,KAAKiO,GACHA,GAGTE,EAAG3R,UAAUyZ,QAAU,SAAkBnY,GACvC,KAAOgB,KAAKtB,OAASM,GACnBgB,KAAK6V,MAAM7V,KAAKtB,UAAY,EAE9B,OAAOsB,MAITqP,EAAG3R,UAAUwsB,OAAS,WACpB,KAAOlqB,KAAKtB,OAAS,GAAqC,IAAhCsB,KAAK6V,MAAM7V,KAAKtB,OAAS,IACjDsB,KAAKtB,SAEP,OAAOsB,KAAKoX,aAGd/H,EAAG3R,UAAU0Z,UAAY,WAKvB,OAHoB,IAAhBpX,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,KAClC7V,KAAK4V,SAAW,GAEX5V,MAKa,oBAAX4G,QAAgD,mBAAfA,OAAOu1D,IACjD,IACE9sD,EAAG3R,UAAUkJ,OAAOu1D,IAAI,+BAAiCv0D,EACzD,MAAOpB,GACP6I,EAAG3R,UAAUkK,QAAUA,OAGzByH,EAAG3R,UAAUkK,QAAUA,EAGzB,SAASA,IACP,OAAQ5H,KAAK8V,IAAM,UAAY,SAAW9V,KAAKyB,SAAS,IAAM,IAiChE,IAAI4V,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UAG9DlI,EAAG3R,UAAU+D,SAAW,SAAmBiU,EAAMmC,GAI/C,IAAIlP,EACJ,GAHAkP,EAAoB,EAAVA,GAAe,EAGZ,MAJbnC,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjC/M,EAAM,GAGN,IAFA,IAAIiO,EAAM,EACN7B,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIqO,EAAI7P,KAAK6V,MAAMrU,GACf4R,GAA+B,UAArBvD,GAAK+G,EAAO7B,IAAmBtT,SAAS,IAGpDkH,EADY,KADdoM,EAASlF,IAAO,GAAK+G,EAAQ,WACVpV,IAAMxB,KAAKtB,OAAS,EAC/B2Y,EAAM,EAAIjE,EAAK1U,QAAU0U,EAAOzK,EAEhCyK,EAAOzK,GAEfiO,GAAO,IACI,KACTA,GAAO,GACPpV,KAMJ,IAHc,IAAVuT,IACFpM,EAAMoM,EAAMtT,SAAS,IAAMkH,GAEtBA,EAAIjK,OAASmZ,GAAY,GAC9BlP,EAAM,IAAMA,EAKd,OAHsB,IAAlB3I,KAAK4V,WACPjN,EAAM,IAAMA,GAEPA,EAGT,GAAI+M,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,GAAI,CAElD,IAAIoC,EAAYR,EAAW5B,GAEvBqC,EAAYR,EAAW7B,GAC3B/M,EAAM,GACN,IAAI1D,EAAIjF,KAAKmQ,QAEb,IADAlL,EAAE2Q,SAAW,GACL3Q,EAAE+S,UAAU,CAClB,IAAI7I,EAAIlK,EAAEm3D,MAAMrkD,GAAWtW,SAASiU,GAMlC/M,GALF1D,EAAIA,EAAEiT,MAAMH,IAELC,SAGC7I,EAAIxG,EAFJ0O,EAAMS,EAAY3I,EAAEzQ,QAAUyQ,EAAIxG,EAQ5C,IAHI3I,KAAKgY,WACPrP,EAAM,IAAMA,GAEPA,EAAIjK,OAASmZ,GAAY,GAC9BlP,EAAM,IAAMA,EAKd,OAHsB,IAAlB3I,KAAK4V,WACPjN,EAAM,IAAMA,GAEPA,EAGTqG,GAAO,EAAO,oCAGhBK,EAAG3R,UAAUya,SAAW,WACtB,IAAIzP,EAAM1I,KAAK6V,MAAM,GASrB,OARoB,IAAhB7V,KAAKtB,OACPgK,GAAuB,SAAhB1I,KAAK6V,MAAM,GACO,IAAhB7V,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,GAEzCnN,GAAO,iBAAoC,SAAhB1I,KAAK6V,MAAM,GAC7B7V,KAAKtB,OAAS,GACvBsQ,GAAO,EAAO,8CAEU,IAAlBhP,KAAK4V,UAAmBlN,EAAMA,GAGxC2G,EAAG3R,UAAU6K,OAAS,WACpB,OAAOvI,KAAKyB,SAAS,GAAI,IAGvBvD,IACFmR,EAAG3R,UAAU0a,SAAW,SAAmB3E,EAAQ/U,GACjD,OAAOsB,KAAKqY,YAAYna,EAAQuV,EAAQ/U,KAI5C2Q,EAAG3R,UAAU8R,QAAU,SAAkBiE,EAAQ/U,GAC/C,OAAOsB,KAAKqY,YAAY7P,MAAOiL,EAAQ/U,IA4gBzC,SAAS8Y,EAAYC,EAAM7H,EAAKjH,GAC9BA,EAAIiN,SAAWhG,EAAIgG,SAAW6B,EAAK7B,SACnC,IAAI5U,EAAOyW,EAAK/Y,OAASkR,EAAIlR,OAAU,EACvCiK,EAAIjK,OAASsC,EACbA,EAAOA,EAAM,EAAK,EAGlB,IAAIiG,EAAoB,EAAhBwQ,EAAK5B,MAAM,GACfpT,EAAmB,EAAfmN,EAAIiG,MAAM,GACd1G,EAAIlI,EAAIxE,EAER0C,EAAS,SAAJgK,EACL4F,EAAS5F,EAAI,SAAa,EAC9BxG,EAAIkN,MAAM,GAAK1Q,EAEf,IAAK,IAAI+K,EAAI,EAAGA,EAAIlP,EAAKkP,IAAK,CAM5B,IAHA,IAAIwH,EAAS3C,IAAU,GACnB4C,EAAgB,SAAR5C,EACR6C,EAAOtS,KAAKC,IAAI2K,EAAGN,EAAIlR,OAAS,GAC3BkF,EAAI0B,KAAKuC,IAAI,EAAGqI,EAAIuH,EAAK/Y,OAAS,GAAIkF,GAAKgU,EAAMhU,IAAK,CAC7D,IAAIpC,EAAK0O,EAAItM,EAAK,EAIlB8T,IADAvI,GAFAlI,EAAoB,EAAhBwQ,EAAK5B,MAAMrU,KACfiB,EAAmB,EAAfmN,EAAIiG,MAAMjS,IACF+T,GACG,SAAa,EAC5BA,EAAY,SAAJxI,EAEVxG,EAAIkN,MAAM3F,GAAa,EAARyH,EACf5C,EAAiB,EAAT2C,EAQV,OANc,IAAV3C,EACFpM,EAAIkN,MAAM3F,GAAa,EAAR6E,EAEfpM,EAAIjK,SAGCiK,EAAIuhB,SAxiBb7a,EAAG3R,UAAU2a,YAAc,SAAsBC,EAAW7E,EAAQ/U,GAClEsB,KAAKkqB,SAEL,IAAI7pB,EAAaL,KAAKK,aAClBkY,EAAY7Z,GAAU4G,KAAKuC,IAAI,EAAGxH,GACtC2O,EAAO3O,GAAckY,EAAW,yCAChCvJ,EAAOuJ,EAAY,EAAG,+BAEtB,IAAI/S,EAfS,SAAmB8S,EAAWtZ,GAC3C,OAAIsZ,EAAUzZ,YACLyZ,EAAUzZ,YAAYG,GAExB,IAAIsZ,EAAUtZ,GAWXq9D,CAAS/jD,EAAWC,GAG9B,OADAvY,KAAK,gBADoB,OAAXyT,EAAkB,KAAO,OACRjO,EAAKnF,GAC7BmF,GAGT6J,EAAG3R,UAAU4+D,eAAiB,SAAyB92D,EAAKnF,GAI1D,IAHA,IAAI4xB,EAAW,EACXld,EAAQ,EAEHvT,EAAI,EAAG8iB,EAAQ,EAAG9iB,EAAIxB,KAAKtB,OAAQ8C,IAAK,CAC/C,IAAI4R,EAAQpT,KAAK6V,MAAMrU,IAAM8iB,EAASvP,EAEtCvP,EAAIysB,KAAqB,IAAP7e,EACd6e,EAAWzsB,EAAI9G,SACjB8G,EAAIysB,KAAe7e,GAAQ,EAAK,KAE9B6e,EAAWzsB,EAAI9G,SACjB8G,EAAIysB,KAAe7e,GAAQ,GAAM,KAGrB,IAAVkR,GACE2N,EAAWzsB,EAAI9G,SACjB8G,EAAIysB,KAAe7e,GAAQ,GAAM,KAEnC2B,EAAQ,EACRuP,EAAQ,IAERvP,EAAQ3B,IAAS,GACjBkR,GAAS,GAIb,GAAI2N,EAAWzsB,EAAI9G,OAGjB,IAFA8G,EAAIysB,KAAcld,EAEXkd,EAAWzsB,EAAI9G,QACpB8G,EAAIysB,KAAc,GAKxB5iB,EAAG3R,UAAU6+D,eAAiB,SAAyB/2D,EAAKnF,GAI1D,IAHA,IAAI4xB,EAAWzsB,EAAI9G,OAAS,EACxBqW,EAAQ,EAEHvT,EAAI,EAAG8iB,EAAQ,EAAG9iB,EAAIxB,KAAKtB,OAAQ8C,IAAK,CAC/C,IAAI4R,EAAQpT,KAAK6V,MAAMrU,IAAM8iB,EAASvP,EAEtCvP,EAAIysB,KAAqB,IAAP7e,EACd6e,GAAY,IACdzsB,EAAIysB,KAAe7e,GAAQ,EAAK,KAE9B6e,GAAY,IACdzsB,EAAIysB,KAAe7e,GAAQ,GAAM,KAGrB,IAAVkR,GACE2N,GAAY,IACdzsB,EAAIysB,KAAe7e,GAAQ,GAAM,KAEnC2B,EAAQ,EACRuP,EAAQ,IAERvP,EAAQ3B,IAAS,GACjBkR,GAAS,GAIb,GAAI2N,GAAY,EAGd,IAFAzsB,EAAIysB,KAAcld,EAEXkd,GAAY,GACjBzsB,EAAIysB,KAAc,GAKpB3sB,KAAKmT,MACPpJ,EAAG3R,UAAUgb,WAAa,SAAqB7I,GAC7C,OAAO,GAAKvK,KAAKmT,MAAM5I,IAGzBR,EAAG3R,UAAUgb,WAAa,SAAqB7I,GAC7C,IAAI8I,EAAI9I,EACJV,EAAI,EAiBR,OAhBIwJ,GAAK,OACPxJ,GAAK,GACLwJ,KAAO,IAELA,GAAK,KACPxJ,GAAK,EACLwJ,KAAO,GAELA,GAAK,IACPxJ,GAAK,EACLwJ,KAAO,GAELA,GAAK,IACPxJ,GAAK,EACLwJ,KAAO,GAEFxJ,EAAIwJ,GAIftJ,EAAG3R,UAAUkb,UAAY,SAAoB/I,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAI8I,EAAI9I,EACJV,EAAI,EAoBR,OAnBqB,IAAZ,KAAJwJ,KACHxJ,GAAK,GACLwJ,KAAO,IAEU,IAAV,IAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,GAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,EAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,EAAJA,IACHxJ,IAEKA,GAITE,EAAG3R,UAAUsS,UAAY,WACvB,IAAIH,EAAI7P,KAAK6V,MAAM7V,KAAKtB,OAAS,GAC7BwG,EAAKlF,KAAK0Y,WAAW7I,GACzB,OAA2B,IAAnB7P,KAAKtB,OAAS,GAAUwG,GAiBlCmK,EAAG3R,UAAUmb,SAAW,WACtB,GAAI7Y,KAAKgY,SAAU,OAAO,EAG1B,IADA,IAAI7I,EAAI,EACC3N,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIiB,EAAIzC,KAAK4Y,UAAU5Y,KAAK6V,MAAMrU,IAElC,GADA2N,GAAK1M,EACK,KAANA,EAAU,MAEhB,OAAO0M,GAGTE,EAAG3R,UAAU2C,WAAa,WACxB,OAAOiF,KAAKqR,KAAK3W,KAAKgQ,YAAc,IAGtCX,EAAG3R,UAAUob,OAAS,SAAiBC,GACrC,OAAsB,IAAlB/Y,KAAK4V,SACA5V,KAAKgZ,MAAMC,MAAMF,GAAOG,MAAM,GAEhClZ,KAAKmQ,SAGdd,EAAG3R,UAAUyb,SAAW,SAAmBJ,GACzC,OAAI/Y,KAAKoZ,MAAML,EAAQ,GACd/Y,KAAKqZ,KAAKN,GAAOG,MAAM,GAAGI,OAE5BtZ,KAAKmQ,SAGdd,EAAG3R,UAAU6b,MAAQ,WACnB,OAAyB,IAAlBvZ,KAAK4V,UAIdvG,EAAG3R,UAAU8b,IAAM,WACjB,OAAOxZ,KAAKmQ,QAAQmJ,QAGtBjK,EAAG3R,UAAU4b,KAAO,WAKlB,OAJKtZ,KAAKgY,WACRhY,KAAK4V,UAAY,GAGZ5V,MAITqP,EAAG3R,UAAU+b,KAAO,SAAe7J,GACjC,KAAO5P,KAAKtB,OAASkR,EAAIlR,QACvBsB,KAAK6V,MAAM7V,KAAKtB,UAAY,EAG9B,IAAK,IAAI8C,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAC9BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAAKoO,EAAIiG,MAAMrU,GAG5C,OAAOxB,KAAKkqB,UAGd7a,EAAG3R,UAAUgc,IAAM,SAAc9J,GAE/B,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAKyZ,KAAK7J,IAInBP,EAAG3R,UAAUic,GAAK,SAAa/J,GAC7B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQuJ,IAAI9J,GAC/CA,EAAIO,QAAQuJ,IAAI1Z,OAGzBqP,EAAG3R,UAAUkc,IAAM,SAAchK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQsJ,KAAK7J,GAChDA,EAAIO,QAAQsJ,KAAKzZ,OAI1BqP,EAAG3R,UAAUmc,MAAQ,SAAgBjK,GAEnC,IAAInN,EAEFA,EADEzC,KAAKtB,OAASkR,EAAIlR,OAChBkR,EAEA5P,KAGN,IAAK,IAAIwB,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAAKoO,EAAIiG,MAAMrU,GAK5C,OAFAxB,KAAKtB,OAAS+D,EAAE/D,OAETsB,KAAKkqB,UAGd7a,EAAG3R,UAAUoc,KAAO,SAAelK,GAEjC,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAK6Z,MAAMjK,IAIpBP,EAAG3R,UAAUqc,IAAM,SAAcnK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ2J,KAAKlK,GAChDA,EAAIO,QAAQ2J,KAAK9Z,OAG1BqP,EAAG3R,UAAUsc,KAAO,SAAepK,GACjC,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ0J,MAAMjK,GACjDA,EAAIO,QAAQ0J,MAAM7Z,OAI3BqP,EAAG3R,UAAUuc,MAAQ,SAAgBrK,GAEnC,IAAI3I,EACAxE,EACAzC,KAAKtB,OAASkR,EAAIlR,QACpBuI,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAGN,IAAK,IAAIwB,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAAKiB,EAAEoT,MAAMrU,GAGvC,GAAIxB,OAASiH,EACX,KAAOzF,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAM5B,OAFAxB,KAAKtB,OAASuI,EAAEvI,OAETsB,KAAKkqB,UAGd7a,EAAG3R,UAAUwc,KAAO,SAAetK,GAEjC,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAKia,MAAMrK,IAIpBP,EAAG3R,UAAUyc,IAAM,SAAcvK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ+J,KAAKtK,GAChDA,EAAIO,QAAQ+J,KAAKla,OAG1BqP,EAAG3R,UAAU0c,KAAO,SAAexK,GACjC,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ8J,MAAMrK,GACjDA,EAAIO,QAAQ8J,MAAMja,OAI3BqP,EAAG3R,UAAUub,MAAQ,SAAgBF,GACnC/J,EAAwB,iBAAV+J,GAAsBA,GAAS,GAE7C,IAAIsB,EAAsC,EAAxB/U,KAAKqR,KAAKoC,EAAQ,IAChCuB,EAAWvB,EAAQ,GAGvB/Y,KAAKmX,QAAQkD,GAETC,EAAW,GACbD,IAIF,IAAK,IAAI7Y,EAAI,EAAGA,EAAI6Y,EAAa7Y,IAC/BxB,KAAK6V,MAAMrU,GAAsB,UAAhBxB,KAAK6V,MAAMrU,GAS9B,OALI8Y,EAAW,IACbta,KAAK6V,MAAMrU,IAAMxB,KAAK6V,MAAMrU,GAAM,UAAc,GAAK8Y,GAIhDta,KAAKkqB,UAGd7a,EAAG3R,UAAU2b,KAAO,SAAeN,GACjC,OAAO/Y,KAAKmQ,QAAQ8I,MAAMF,IAI5B1J,EAAG3R,UAAU6c,KAAO,SAAeC,EAAKrZ,GACtC6N,EAAsB,iBAARwL,GAAoBA,GAAO,GAEzC,IAAI5D,EAAO4D,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAUjB,OARAxa,KAAKmX,QAAQP,EAAM,GAGjB5W,KAAK6V,MAAMe,GADTzV,EACgBnB,KAAK6V,MAAMe,GAAQ,GAAK6D,EAExBza,KAAK6V,MAAMe,KAAS,GAAK6D,GAGtCza,KAAKkqB,UAId7a,EAAG3R,UAAUgd,KAAO,SAAe9K,GACjC,IAAIT,EAkBAlI,EAAGxE,EAfP,GAAsB,IAAlBzC,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAI7B,OAHA5V,KAAK4V,SAAW,EAChBzG,EAAInP,KAAK2a,KAAK/K,GACd5P,KAAK4V,UAAY,EACV5V,KAAKoX,YAGP,GAAsB,IAAlBpX,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAIpC,OAHAhG,EAAIgG,SAAW,EACfzG,EAAInP,KAAK2a,KAAK/K,GACdA,EAAIgG,SAAW,EACRzG,EAAEiI,YAKPpX,KAAKtB,OAASkR,EAAIlR,QACpBuI,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAIN,IADA,IAAI+U,EAAQ,EACHvT,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5B2N,GAAkB,EAAblI,EAAE4O,MAAMrU,KAAwB,EAAbiB,EAAEoT,MAAMrU,IAAUuT,EAC1C/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAChB4F,EAAQ5F,IAAM,GAEhB,KAAiB,IAAV4F,GAAevT,EAAIyF,EAAEvI,OAAQ8C,IAClC2N,GAAkB,EAAblI,EAAE4O,MAAMrU,IAAUuT,EACvB/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAChB4F,EAAQ5F,IAAM,GAIhB,GADAnP,KAAKtB,OAASuI,EAAEvI,OACF,IAAVqW,EACF/U,KAAK6V,MAAM7V,KAAKtB,QAAUqW,EAC1B/U,KAAKtB,cAEA,GAAIuI,IAAMjH,KACf,KAAOwB,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAI5B,OAAOxB,MAITqP,EAAG3R,UAAUkd,IAAM,SAAchL,GAC/B,IAAIpK,EACJ,OAAqB,IAAjBoK,EAAIgG,UAAoC,IAAlB5V,KAAK4V,UAC7BhG,EAAIgG,SAAW,EACfpQ,EAAMxF,KAAKuL,IAAIqE,GACfA,EAAIgG,UAAY,EACTpQ,GACmB,IAAjBoK,EAAIgG,UAAoC,IAAlB5V,KAAK4V,UACpC5V,KAAK4V,SAAW,EAChBpQ,EAAMoK,EAAIrE,IAAIvL,MACdA,KAAK4V,SAAW,EACTpQ,GAGLxF,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQuK,KAAK9K,GAEhDA,EAAIO,QAAQuK,KAAK1a,OAI1BqP,EAAG3R,UAAUid,KAAO,SAAe/K,GAEjC,GAAqB,IAAjBA,EAAIgG,SAAgB,CACtBhG,EAAIgG,SAAW,EACf,IAAIzG,EAAInP,KAAK0a,KAAK9K,GAElB,OADAA,EAAIgG,SAAW,EACRzG,EAAEiI,YAGJ,GAAsB,IAAlBpX,KAAK4V,SAId,OAHA5V,KAAK4V,SAAW,EAChB5V,KAAK0a,KAAK9K,GACV5P,KAAK4V,SAAW,EACT5V,KAAKoX,YAId,IAWInQ,EAAGxE,EAXH4T,EAAMrW,KAAKqW,IAAIzG,GAGnB,GAAY,IAARyG,EAIF,OAHArW,KAAK4V,SAAW,EAChB5V,KAAKtB,OAAS,EACdsB,KAAK6V,MAAM,GAAK,EACT7V,KAKLqW,EAAM,GACRpP,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAIN,IADA,IAAI+U,EAAQ,EACHvT,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAE5BuT,GADA5F,GAAkB,EAAblI,EAAE4O,MAAMrU,KAAwB,EAAbiB,EAAEoT,MAAMrU,IAAUuT,IAC7B,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAElB,KAAiB,IAAV4F,GAAevT,EAAIyF,EAAEvI,OAAQ8C,IAElCuT,GADA5F,GAAkB,EAAblI,EAAE4O,MAAMrU,IAAUuT,IACV,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAIlB,GAAc,IAAV4F,GAAevT,EAAIyF,EAAEvI,QAAUuI,IAAMjH,KACvC,KAAOwB,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAU5B,OANAxB,KAAKtB,OAAS4G,KAAKuC,IAAI7H,KAAKtB,OAAQ8C,GAEhCyF,IAAMjH,OACRA,KAAK4V,SAAW,GAGX5V,KAAKkqB,UAId7a,EAAG3R,UAAU6N,IAAM,SAAcqE,GAC/B,OAAO5P,KAAKmQ,QAAQwK,KAAK/K,IA+C3B,IAAIiL,EAAc,SAAsBpD,EAAM7H,EAAKjH,GACjD,IAIIxD,EACA2V,EACA5V,EANA+B,EAAIwQ,EAAK5B,MACTpT,EAAImN,EAAIiG,MACRkF,EAAIpS,EAAIkN,MACR5Q,EAAI,EAIJ+V,EAAY,EAAP/T,EAAE,GACPgU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPlU,EAAE,GACPmU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPrU,EAAE,GACPsU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxU,EAAE,GACPyU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3U,EAAE,GACP4U,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9U,EAAE,GACP+U,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjV,EAAE,GACPkV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPpV,EAAE,GACPqV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPvV,EAAE,GACPwV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP1V,EAAE,GACP2V,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPra,EAAE,GACPsa,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxa,EAAE,GACPya,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3a,EAAE,GACP4a,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9a,EAAE,GACP+a,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjb,EAAE,GACPkb,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAPpb,EAAE,GACPqb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPvb,EAAE,GACPwb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP1b,EAAE,GACP2b,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP7b,EAAE,GACP8b,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPhc,EAAE,GACPic,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjB9V,EAAIiN,SAAW6B,EAAK7B,SAAWhG,EAAIgG,SACnCjN,EAAIjK,OAAS,GAMb,IAAIkgB,IAAQ3Z,GAJZE,EAAKG,KAAKuZ,KAAK5D,EAAK8B,IAIE,KAAa,MAFnCjC,GADAA,EAAMxV,KAAKuZ,KAAK5D,EAAK+B,IACR1X,KAAKuZ,KAAK3D,EAAK6B,GAAQ,KAEU,IAAO,EACrD9X,IAFAC,EAAKI,KAAKuZ,KAAK3D,EAAK8B,KAEPlC,IAAQ,IAAO,IAAM8D,KAAO,IAAO,EAChDA,IAAM,SAENzZ,EAAKG,KAAKuZ,KAAKzD,EAAK2B,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKzD,EAAK4B,IACR1X,KAAKuZ,KAAKxD,EAAK0B,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKxD,EAAK2B,GAKpB,IAAI8B,IAAQ7Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKiC,GAAQ,GAIZ,KAAa,MAFnCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKkC,GAAQ,GACvB7X,KAAKuZ,KAAK3D,EAAKgC,GAAQ,KAEU,IAAO,EACrDjY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKiC,GAAQ,IAErBrC,IAAQ,IAAO,IAAMgE,KAAO,IAAO,EAChDA,IAAM,SAEN3Z,EAAKG,KAAKuZ,KAAKtD,EAAKwB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKtD,EAAKyB,IACR1X,KAAKuZ,KAAKrD,EAAKuB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKrD,EAAKwB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK8B,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK+B,GAAQ,GACvB7X,KAAKuZ,KAAKxD,EAAK6B,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK8B,GAAQ,EAKlC,IAAI4B,IAAQ9Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKoC,GAAQ,GAIZ,KAAa,MAFnCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKqC,GAAQ,GACvBhY,KAAKuZ,KAAK3D,EAAKmC,GAAQ,KAEU,IAAO,EACrDpY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKoC,GAAQ,IAErBxC,IAAQ,IAAO,IAAMiE,KAAO,IAAO,EAChDA,IAAM,SAEN5Z,EAAKG,KAAKuZ,KAAKnD,EAAKqB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKnD,EAAKsB,IACR1X,KAAKuZ,KAAKlD,EAAKoB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKlD,EAAKqB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK2B,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK4B,GAAQ,GACvB7X,KAAKuZ,KAAKrD,EAAK0B,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK2B,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKiC,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKkC,GAAQ,GACvBhY,KAAKuZ,KAAKxD,EAAKgC,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKiC,GAAQ,EAKlC,IAAI0B,IAAQ/Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKuC,GAAQ,GAIZ,KAAa,MAFnC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKwC,GAAQ,GACvBnY,KAAKuZ,KAAK3D,EAAKsC,GAAQ,KAEU,IAAO,EACrDvY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKuC,GAAQ,IAErB3C,IAAQ,IAAO,IAAMkE,KAAO,IAAO,EAChDA,IAAM,SAEN7Z,EAAKG,KAAKuZ,KAAKhD,EAAKkB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKhD,EAAKmB,IACR1X,KAAKuZ,KAAK/C,EAAKiB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAK/C,EAAKkB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKwB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKyB,GAAQ,GACvB7X,KAAKuZ,KAAKlD,EAAKuB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKwB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK8B,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK+B,GAAQ,GACvBhY,KAAKuZ,KAAKrD,EAAK6B,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK8B,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKoC,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKqC,GAAQ,GACvBnY,KAAKuZ,KAAKxD,EAAKmC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKoC,GAAQ,EAKlC,IAAIwB,IAAQha,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAK0C,GAAQ,GAIZ,KAAa,MAFnC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK2C,IAAQ,GACvBtY,KAAKuZ,KAAK3D,EAAKyC,GAAQ,KAEU,IAAO,EACrD1Y,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAK0C,IAAQ,IAErB9C,IAAQ,IAAO,IAAMmE,KAAO,IAAO,EAChDA,IAAM,SAEN9Z,EAAKG,KAAKuZ,KAAK7C,EAAKe,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAK7C,EAAKgB,IACR1X,KAAKuZ,KAAK5C,EAAKc,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAK5C,EAAKe,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKqB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKsB,GAAQ,GACvB7X,KAAKuZ,KAAK/C,EAAKoB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKqB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK2B,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK4B,GAAQ,GACvBhY,KAAKuZ,KAAKlD,EAAK0B,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK2B,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKiC,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKkC,GAAQ,GACvBnY,KAAKuZ,KAAKrD,EAAKgC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKiC,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKuC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKwC,IAAQ,GACvBtY,KAAKuZ,KAAKxD,EAAKsC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKuC,IAAQ,EAKlC,IAAIsB,IAAQja,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAK6C,IAAQ,GAIZ,KAAa,MAFnChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK8C,IAAQ,GACvBzY,KAAKuZ,KAAK3D,EAAK4C,IAAQ,KAEU,IAAO,EACrD7Y,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAK6C,IAAQ,IAErBjD,IAAQ,IAAO,IAAMoE,KAAO,IAAO,EAChDA,IAAM,SAEN/Z,EAAKG,KAAKuZ,KAAK1C,EAAKY,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAK1C,EAAKa,IACR1X,KAAKuZ,KAAKzC,EAAKW,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKzC,EAAKY,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKkB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKmB,GAAQ,GACvB7X,KAAKuZ,KAAK5C,EAAKiB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKkB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKwB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKyB,GAAQ,GACvBhY,KAAKuZ,KAAK/C,EAAKuB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKwB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK8B,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK+B,GAAQ,GACvBnY,KAAKuZ,KAAKlD,EAAK6B,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK8B,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKoC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKqC,IAAQ,GACvBtY,KAAKuZ,KAAKrD,EAAKmC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKoC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK0C,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK2C,IAAQ,GACvBzY,KAAKuZ,KAAKxD,EAAKyC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK0C,IAAQ,EAKlC,IAAIoB,IAAQla,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKgD,IAAQ,GAIZ,KAAa,MAFnCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKiD,IAAQ,GACvB5Y,KAAKuZ,KAAK3D,EAAK+C,IAAQ,KAEU,IAAO,EACrDhZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKgD,IAAQ,IAErBpD,IAAQ,IAAO,IAAMqE,KAAO,IAAO,EAChDA,IAAM,SAENha,EAAKG,KAAKuZ,KAAKvC,EAAKS,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKvC,EAAKU,IACR1X,KAAKuZ,KAAKtC,EAAKQ,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKtC,EAAKS,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKe,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKgB,GAAQ,GACvB7X,KAAKuZ,KAAKzC,EAAKc,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKe,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKqB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKsB,GAAQ,GACvBhY,KAAKuZ,KAAK5C,EAAKoB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKqB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK2B,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK4B,GAAQ,GACvBnY,KAAKuZ,KAAK/C,EAAK0B,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK2B,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKiC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKkC,IAAQ,GACvBtY,KAAKuZ,KAAKlD,EAAKgC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKiC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKuC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKwC,IAAQ,GACvBzY,KAAKuZ,KAAKrD,EAAKsC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKuC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK6C,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK8C,IAAQ,GACvB5Y,KAAKuZ,KAAKxD,EAAK4C,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK6C,IAAQ,EAKlC,IAAIkB,IAAQna,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKmD,IAAQ,GAIZ,KAAa,MAFnCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKoD,IAAQ,GACvB/Y,KAAKuZ,KAAK3D,EAAKkD,IAAQ,KAEU,IAAO,EACrDnZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKmD,IAAQ,IAErBvD,IAAQ,IAAO,IAAMsE,KAAO,IAAO,EAChDA,IAAM,SAENja,EAAKG,KAAKuZ,KAAKpC,EAAKM,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKpC,EAAKO,IACR1X,KAAKuZ,KAAKnC,EAAKK,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKnC,EAAKM,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKY,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKa,GAAQ,GACvB7X,KAAKuZ,KAAKtC,EAAKW,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKY,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKkB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKmB,GAAQ,GACvBhY,KAAKuZ,KAAKzC,EAAKiB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKkB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKwB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKyB,GAAQ,GACvBnY,KAAKuZ,KAAK5C,EAAKuB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKwB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK8B,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK+B,IAAQ,GACvBtY,KAAKuZ,KAAK/C,EAAK6B,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK8B,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKoC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKqC,IAAQ,GACvBzY,KAAKuZ,KAAKlD,EAAKmC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKoC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK0C,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK2C,IAAQ,GACvB5Y,KAAKuZ,KAAKrD,EAAKyC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK0C,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKgD,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKiD,IAAQ,GACvB/Y,KAAKuZ,KAAKxD,EAAK+C,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKgD,IAAQ,EAKlC,IAAIgB,IAAQpa,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKsD,IAAQ,GAIZ,KAAa,MAFnCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKuD,IAAQ,GACvBlZ,KAAKuZ,KAAK3D,EAAKqD,IAAQ,KAEU,IAAO,EACrDtZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKsD,IAAQ,IAErB1D,IAAQ,IAAO,IAAMuE,KAAO,IAAO,EAChDA,IAAM,SAENla,EAAKG,KAAKuZ,KAAKjC,EAAKG,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKI,IACR1X,KAAKuZ,KAAKhC,EAAKE,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKhC,EAAKG,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKS,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKU,GAAQ,GACvB7X,KAAKuZ,KAAKnC,EAAKQ,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKS,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKe,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKgB,GAAQ,GACvBhY,KAAKuZ,KAAKtC,EAAKc,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKe,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKqB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKsB,GAAQ,GACvBnY,KAAKuZ,KAAKzC,EAAKoB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKqB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK2B,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK4B,IAAQ,GACvBtY,KAAKuZ,KAAK5C,EAAK0B,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK2B,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKiC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKkC,IAAQ,GACvBzY,KAAKuZ,KAAK/C,EAAKgC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKiC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKuC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKwC,IAAQ,GACvB5Y,KAAKuZ,KAAKlD,EAAKsC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKuC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK6C,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK8C,IAAQ,GACvB/Y,KAAKuZ,KAAKrD,EAAK4C,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK6C,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKmD,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKoD,IAAQ,GACvBlZ,KAAKuZ,KAAKxD,EAAKkD,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKmD,IAAQ,EAKlC,IAAIc,IAAQra,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKyD,IAAQ,GAIZ,KAAa,MAFnC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK0D,IAAQ,GACvBrZ,KAAKuZ,KAAK3D,EAAKwD,IAAQ,KAEU,IAAO,EACrDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKyD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMwE,KAAO,IAAO,EAChDA,IAAM,SAENna,EAAKG,KAAKuZ,KAAKjC,EAAKM,GAEpBpC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKO,IACR7X,KAAKuZ,KAAKhC,EAAKK,GAAQ,EACpChY,EAAKI,KAAKuZ,KAAKhC,EAAKM,GACpBhY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKY,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKa,GAAQ,GACvBhY,KAAKuZ,KAAKnC,EAAKW,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKY,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKkB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKmB,GAAQ,GACvBnY,KAAKuZ,KAAKtC,EAAKiB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKkB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKwB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKyB,IAAQ,GACvBtY,KAAKuZ,KAAKzC,EAAKuB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKwB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK8B,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK+B,IAAQ,GACvBzY,KAAKuZ,KAAK5C,EAAK6B,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK8B,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKoC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKqC,IAAQ,GACvB5Y,KAAKuZ,KAAK/C,EAAKmC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKoC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK0C,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK2C,IAAQ,GACvB/Y,KAAKuZ,KAAKlD,EAAKyC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK0C,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKgD,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKiD,IAAQ,GACvBlZ,KAAKuZ,KAAKrD,EAAK+C,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKgD,IAAQ,EAKlC,IAAIe,IAASta,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKsD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKuD,IAAQ,GACvBrZ,KAAKuZ,KAAKxD,EAAKqD,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKsD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMyE,KAAQ,IAAO,EACjDA,IAAO,SAEPpa,EAAKG,KAAKuZ,KAAKjC,EAAKS,GAEpBvC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKU,IACRhY,KAAKuZ,KAAKhC,EAAKQ,GAAQ,EACpCnY,EAAKI,KAAKuZ,KAAKhC,EAAKS,GACpBnY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKe,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKgB,GAAQ,GACvBnY,KAAKuZ,KAAKnC,EAAKc,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKe,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKqB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKsB,IAAQ,GACvBtY,KAAKuZ,KAAKtC,EAAKoB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKqB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAK2B,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAK4B,IAAQ,GACvBzY,KAAKuZ,KAAKzC,EAAK0B,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAK2B,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKiC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKkC,IAAQ,GACvB5Y,KAAKuZ,KAAK5C,EAAKgC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKiC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKuC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKwC,IAAQ,GACvB/Y,KAAKuZ,KAAK/C,EAAKsC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKuC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK6C,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK8C,IAAQ,GACvBlZ,KAAKuZ,KAAKlD,EAAK4C,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK6C,IAAQ,EAKlC,IAAIgB,IAASva,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKmD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKoD,IAAQ,GACvBrZ,KAAKuZ,KAAKrD,EAAKkD,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKmD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM0E,KAAQ,IAAO,EACjDA,IAAO,SAEPra,EAAKG,KAAKuZ,KAAKjC,EAAKY,GAEpB1C,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKa,IACRnY,KAAKuZ,KAAKhC,EAAKW,GAAQ,EACpCtY,EAAKI,KAAKuZ,KAAKhC,EAAKY,GACpBtY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKkB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKmB,IAAQ,GACvBtY,KAAKuZ,KAAKnC,EAAKiB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKkB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKwB,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKyB,IAAQ,GACvBzY,KAAKuZ,KAAKtC,EAAKuB,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKwB,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAK8B,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAK+B,IAAQ,GACvB5Y,KAAKuZ,KAAKzC,EAAK6B,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAK8B,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKoC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKqC,IAAQ,GACvB/Y,KAAKuZ,KAAK5C,EAAKmC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKoC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK0C,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK2C,IAAQ,GACvBlZ,KAAKuZ,KAAK/C,EAAKyC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK0C,IAAQ,EAKlC,IAAIiB,IAASxa,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKgD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKiD,IAAQ,GACvBrZ,KAAKuZ,KAAKlD,EAAK+C,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKgD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM2E,KAAQ,IAAO,EACjDA,IAAO,SAEPta,EAAKG,KAAKuZ,KAAKjC,EAAKe,GAEpB7C,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKgB,KACRtY,KAAKuZ,KAAKhC,EAAKc,GAAQ,EACpCzY,EAAKI,KAAKuZ,KAAKhC,EAAKe,IACpBzY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKqB,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKsB,IAAQ,GACvBzY,KAAKuZ,KAAKnC,EAAKoB,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKqB,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAK2B,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAK4B,IAAQ,GACvB5Y,KAAKuZ,KAAKtC,EAAK0B,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAK2B,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKiC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKkC,IAAQ,GACvB/Y,KAAKuZ,KAAKzC,EAAKgC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKiC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKuC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKwC,IAAQ,GACvBlZ,KAAKuZ,KAAK5C,EAAKsC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKuC,IAAQ,EAKlC,IAAIkB,IAASza,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK6C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK8C,IAAQ,GACvBrZ,KAAKuZ,KAAK/C,EAAK4C,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK6C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM4E,KAAQ,IAAO,EACjDA,IAAO,SAEPva,EAAKG,KAAKuZ,KAAKjC,EAAKkB,IAEpBhD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKmB,KACRzY,KAAKuZ,KAAKhC,EAAKiB,IAAQ,EACpC5Y,EAAKI,KAAKuZ,KAAKhC,EAAKkB,IACpB5Y,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKwB,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKyB,IAAQ,GACvB5Y,KAAKuZ,KAAKnC,EAAKuB,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKwB,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAK8B,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAK+B,IAAQ,GACvB/Y,KAAKuZ,KAAKtC,EAAK6B,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAK8B,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKoC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKqC,IAAQ,GACvBlZ,KAAKuZ,KAAKzC,EAAKmC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKoC,IAAQ,EAKlC,IAAImB,IAAS1a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK0C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK2C,IAAQ,GACvBrZ,KAAKuZ,KAAK5C,EAAKyC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK0C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM6E,KAAQ,IAAO,EACjDA,IAAO,SAEPxa,EAAKG,KAAKuZ,KAAKjC,EAAKqB,IAEpBnD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKsB,KACR5Y,KAAKuZ,KAAKhC,EAAKoB,IAAQ,EACpC/Y,EAAKI,KAAKuZ,KAAKhC,EAAKqB,IACpB/Y,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAK2B,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAK4B,IAAQ,GACvB/Y,KAAKuZ,KAAKnC,EAAK0B,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAK2B,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKiC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKkC,IAAQ,GACvBlZ,KAAKuZ,KAAKtC,EAAKgC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKiC,IAAQ,EAKlC,IAAIoB,IAAS3a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKuC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKwC,IAAQ,GACvBrZ,KAAKuZ,KAAKzC,EAAKsC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKuC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM8E,KAAQ,IAAO,EACjDA,IAAO,SAEPza,EAAKG,KAAKuZ,KAAKjC,EAAKwB,IAEpBtD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKyB,KACR/Y,KAAKuZ,KAAKhC,EAAKuB,IAAQ,EACpClZ,EAAKI,KAAKuZ,KAAKhC,EAAKwB,IACpBlZ,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAK8B,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAK+B,IAAQ,GACvBlZ,KAAKuZ,KAAKnC,EAAK6B,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAK8B,IAAQ,EAKlC,IAAIqB,IAAS5a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKoC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKqC,IAAQ,GACvBrZ,KAAKuZ,KAAKtC,EAAKmC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKoC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM+E,KAAQ,IAAO,EACjDA,IAAO,SAEP1a,EAAKG,KAAKuZ,KAAKjC,EAAK2B,IAEpBzD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAK4B,KACRlZ,KAAKuZ,KAAKhC,EAAK0B,IAAQ,EACpCrZ,EAAKI,KAAKuZ,KAAKhC,EAAK2B,IAKpB,IAAIsB,IAAS7a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKiC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKkC,IAAQ,GACvBrZ,KAAKuZ,KAAKnC,EAAKgC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKiC,IAAQ,IAErB7D,IAAQ,IAAO,IAAMgF,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAAS9a,GAJbE,EAAKG,KAAKuZ,KAAKjC,EAAK8B,KAIG,KAAa,MAFpC5D,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAK+B,KACRrZ,KAAKuZ,KAAKhC,EAAK6B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAzZ,IAFAC,EAAKI,KAAKuZ,KAAKhC,EAAK8B,MAEP7D,IAAQ,IAAO,IAAMiF,KAAQ,IAAO,EACjDA,IAAO,SACPhF,EAAE,GAAK6D,GACP7D,EAAE,GAAK+D,GACP/D,EAAE,GAAKgE,GACPhE,EAAE,GAAKiE,GACPjE,EAAE,GAAKkE,GACPlE,EAAE,GAAKmE,GACPnE,EAAE,GAAKoE,GACPpE,EAAE,GAAKqE,GACPrE,EAAE,GAAKsE,GACPtE,EAAE,GAAKuE,GACPvE,EAAE,IAAMwE,GACRxE,EAAE,IAAMyE,GACRzE,EAAE,IAAM0E,GACR1E,EAAE,IAAM2E,GACR3E,EAAE,IAAM4E,GACR5E,EAAE,IAAM6E,GACR7E,EAAE,IAAM8E,GACR9E,EAAE,IAAM+E,GACR/E,EAAE,IAAMgF,GACE,IAAN9a,IACF8V,EAAE,IAAM9V,EACR0D,EAAIjK,UAECiK,GAQT,SAAS0X,EAAU5I,EAAM7H,EAAKjH,GAC5BA,EAAIiN,SAAWhG,EAAIgG,SAAW6B,EAAK7B,SACnCjN,EAAIjK,OAAS+Y,EAAK/Y,OAASkR,EAAIlR,OAI/B,IAFA,IAAIqW,EAAQ,EACRqL,EAAU,EACLlQ,EAAI,EAAGA,EAAIvH,EAAIjK,OAAS,EAAGwR,IAAK,CAGvC,IAAIwH,EAAS0I,EACbA,EAAU,EAGV,IAFA,IAAIzI,EAAgB,SAAR5C,EACR6C,EAAOtS,KAAKC,IAAI2K,EAAGN,EAAIlR,OAAS,GAC3BkF,EAAI0B,KAAKuC,IAAI,EAAGqI,EAAIuH,EAAK/Y,OAAS,GAAIkF,GAAKgU,EAAMhU,IAAK,CAC7D,IAAIpC,EAAI0O,EAAItM,EAGRuL,GAFoB,EAAhBsI,EAAK5B,MAAMrU,KACI,EAAfoO,EAAIiG,MAAMjS,IAGduB,EAAS,SAAJgK,EAGTwI,EAAa,UADbxS,EAAMA,EAAKwS,EAAS,GAIpByI,IAFA1I,GAHAA,EAAUA,GAAWvI,EAAI,SAAa,GAAM,IAGxBhK,IAAO,IAAO,KAEZ,GACtBuS,GAAU,SAEZ/O,EAAIkN,MAAM3F,GAAKyH,EACf5C,EAAQ2C,EACRA,EAAS0I,EAQX,OANc,IAAVrL,EACFpM,EAAIkN,MAAM3F,GAAK6E,EAEfpM,EAAIjK,SAGCiK,EAAIuhB,SAGb,SAASlK,EAAYvI,EAAM7H,EAAKjH,GAI9B,OAAO0X,EAAS5I,EAAM7H,EAAKjH,GAsB7B,SAASsX,EAAM/Y,EAAGC,GAChBnH,KAAKkH,EAAIA,EACTlH,KAAKmH,EAAIA,EAzEN7B,KAAKuZ,OACRhE,EAAcrD,GAmDhBnI,EAAG3R,UAAUyiB,MAAQ,SAAgBvQ,EAAKjH,GACxC,IACI3H,EAAMhB,KAAKtB,OAASkR,EAAIlR,OAW5B,OAVoB,KAAhBsB,KAAKtB,QAAgC,KAAfkR,EAAIlR,OACtBmc,EAAY7a,KAAM4P,EAAKjH,GACpB3H,EAAM,GACTwW,EAAWxX,KAAM4P,EAAKjH,GACnB3H,EAAM,KACTqf,EAASrgB,KAAM4P,EAAKjH,GAEpBqX,EAAWhgB,KAAM4P,EAAKjH,IAchCsX,EAAKviB,UAAU4iB,QAAU,SAAkBC,GAGzC,IAFA,IAAI5H,EAAI,IAAInQ,MAAM+X,GACdlT,EAAIgC,EAAG3R,UAAUgb,WAAW6H,GAAK,EAC5B/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrBmX,EAAEnX,GAAKxB,KAAKwgB,OAAOhf,EAAG6L,EAAGkT,GAG3B,OAAO5H,GAITsH,EAAKviB,UAAU8iB,OAAS,SAAiBtZ,EAAGmG,EAAGkT,GAC7C,GAAU,IAANrZ,GAAWA,IAAMqZ,EAAI,EAAG,OAAOrZ,EAGnC,IADA,IAAIuZ,EAAK,EACAjf,EAAI,EAAGA,EAAI6L,EAAG7L,IACrBif,IAAW,EAAJvZ,IAAWmG,EAAI7L,EAAI,EAC1B0F,IAAM,EAGR,OAAOuZ,GAKTR,EAAKviB,UAAUgjB,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GACpE,IAAK,IAAI/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrBsf,EAAKtf,GAAKof,EAAID,EAAInf,IAClBuf,EAAKvf,GAAKqf,EAAIF,EAAInf,KAItBye,EAAKviB,UAAUsjB,UAAY,SAAoBJ,EAAKC,EAAKC,EAAMC,EAAMR,EAAGI,GACtE3gB,KAAK0gB,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GAExC,IAAK,IAAIU,EAAI,EAAGA,EAAIV,EAAGU,IAAM,EAM3B,IALA,IAAI5T,EAAI4T,GAAK,EAETC,EAAQ5b,KAAK6b,IAAI,EAAI7b,KAAK8b,GAAK/T,GAC/BgU,EAAQ/b,KAAKgc,IAAI,EAAIhc,KAAK8b,GAAK/T,GAE1BkG,EAAI,EAAGA,EAAIgN,EAAGhN,GAAKlG,EAI1B,IAHA,IAAIkU,EAASL,EACTM,EAASH,EAEJzd,EAAI,EAAGA,EAAIqd,EAAGrd,IAAK,CAC1B,IAAI6d,EAAKX,EAAKvN,EAAI3P,GACd8d,EAAKX,EAAKxN,EAAI3P,GAEd+d,EAAKb,EAAKvN,EAAI3P,EAAIqd,GAClBW,EAAKb,EAAKxN,EAAI3P,EAAIqd,GAElBY,EAAKN,EAASI,EAAKH,EAASI,EAEhCA,EAAKL,EAASK,EAAKJ,EAASG,EAC5BA,EAAKE,EAELf,EAAKvN,EAAI3P,GAAK6d,EAAKE,EACnBZ,EAAKxN,EAAI3P,GAAK8d,EAAKE,EAEnBd,EAAKvN,EAAI3P,EAAIqd,GAAKQ,EAAKE,EACvBZ,EAAKxN,EAAI3P,EAAIqd,GAAKS,EAAKE,EAGnBhe,IAAMyJ,IACRwU,EAAKX,EAAQK,EAASF,EAAQG,EAE9BA,EAASN,EAAQM,EAASH,EAAQE,EAClCA,EAASM,KAOnB5B,EAAKviB,UAAUokB,YAAc,SAAsBpf,EAAGC,GACpD,IAAI4d,EAAqB,EAAjBjb,KAAKuC,IAAIlF,EAAGD,GAChBqf,EAAU,EAAJxB,EACN/e,EAAI,EACR,IAAK+e,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/B/e,IAGF,OAAO,GAAKA,EAAI,EAAIugB,GAGtB9B,EAAKviB,UAAUskB,UAAY,SAAoBpB,EAAKC,EAAKN,GACvD,KAAIA,GAAK,GAET,IAAK,IAAI/e,EAAI,EAAGA,EAAI+e,EAAI,EAAG/e,IAAK,CAC9B,IAAImX,EAAIiI,EAAIpf,GAEZof,EAAIpf,GAAKof,EAAIL,EAAI/e,EAAI,GACrBof,EAAIL,EAAI/e,EAAI,GAAKmX,EAEjBA,EAAIkI,EAAIrf,GAERqf,EAAIrf,IAAMqf,EAAIN,EAAI/e,EAAI,GACtBqf,EAAIN,EAAI/e,EAAI,IAAMmX,IAItBsH,EAAKviB,UAAUukB,aAAe,SAAuBhS,EAAIsQ,GAEvD,IADA,IAAIxL,EAAQ,EACHvT,EAAI,EAAGA,EAAI+e,EAAI,EAAG/e,IAAK,CAC9B,IAAIqO,EAAoC,KAAhCvK,KAAK4c,MAAMjS,EAAG,EAAIzO,EAAI,GAAK+e,GACjCjb,KAAK4c,MAAMjS,EAAG,EAAIzO,GAAK+e,GACvBxL,EAEF9E,EAAGzO,GAAS,SAAJqO,EAGNkF,EADElF,EAAI,SACE,EAEAA,EAAI,SAAY,EAI5B,OAAOI,GAGTgQ,EAAKviB,UAAUykB,WAAa,SAAqBlS,EAAIjP,EAAK4f,EAAKL,GAE7D,IADA,IAAIxL,EAAQ,EACHvT,EAAI,EAAGA,EAAIR,EAAKQ,IACvBuT,GAAyB,EAAR9E,EAAGzO,GAEpBof,EAAI,EAAIpf,GAAa,KAARuT,EAAgBA,KAAkB,GAC/C6L,EAAI,EAAIpf,EAAI,GAAa,KAARuT,EAAgBA,KAAkB,GAIrD,IAAKvT,EAAI,EAAIR,EAAKQ,EAAI+e,IAAK/e,EACzBof,EAAIpf,GAAK,EAGXwN,EAAiB,IAAV+F,GACP/F,EAA6B,KAAb,KAAR+F,KAGVkL,EAAKviB,UAAU0kB,KAAO,SAAe7B,GAEnC,IADA,IAAI8B,EAAK,IAAI7Z,MAAM+X,GACV/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrB6gB,EAAG7gB,GAAK,EAGV,OAAO6gB,GAGTpC,EAAKviB,UAAUwiB,KAAO,SAAehZ,EAAGC,EAAGwB,GACzC,IAAI4X,EAAI,EAAIvgB,KAAK8hB,YAAY5a,EAAExI,OAAQyI,EAAEzI,QAErCiiB,EAAM3gB,KAAKsgB,QAAQC,GAEnB+B,EAAItiB,KAAKoiB,KAAK7B,GAEdK,EAAM,IAAIpY,MAAM+X,GAChBgC,EAAO,IAAI/Z,MAAM+X,GACjBiC,EAAO,IAAIha,MAAM+X,GAEjBkC,EAAO,IAAIja,MAAM+X,GACjBmC,EAAQ,IAAIla,MAAM+X,GAClBoC,EAAQ,IAAIna,MAAM+X,GAElBqC,EAAOja,EAAIkN,MACf+M,EAAKlkB,OAAS6hB,EAEdvgB,KAAKmiB,WAAWjb,EAAE2O,MAAO3O,EAAExI,OAAQkiB,EAAKL,GACxCvgB,KAAKmiB,WAAWhb,EAAE0O,MAAO1O,EAAEzI,OAAQ+jB,EAAMlC,GAEzCvgB,KAAKghB,UAAUJ,EAAK0B,EAAGC,EAAMC,EAAMjC,EAAGI,GACtC3gB,KAAKghB,UAAUyB,EAAMH,EAAGI,EAAOC,EAAOpC,EAAGI,GAEzC,IAAK,IAAInf,EAAI,EAAGA,EAAI+e,EAAG/e,IAAK,CAC1B,IAAIqgB,EAAKU,EAAK/gB,GAAKkhB,EAAMlhB,GAAKghB,EAAKhhB,GAAKmhB,EAAMnhB,GAC9CghB,EAAKhhB,GAAK+gB,EAAK/gB,GAAKmhB,EAAMnhB,GAAKghB,EAAKhhB,GAAKkhB,EAAMlhB,GAC/C+gB,EAAK/gB,GAAKqgB,EAUZ,OAPA7hB,KAAKgiB,UAAUO,EAAMC,EAAMjC,GAC3BvgB,KAAKghB,UAAUuB,EAAMC,EAAMI,EAAMN,EAAG/B,EAAGI,GACvC3gB,KAAKgiB,UAAUY,EAAMN,EAAG/B,GACxBvgB,KAAKiiB,aAAaW,EAAMrC,GAExB5X,EAAIiN,SAAW1O,EAAE0O,SAAWzO,EAAEyO,SAC9BjN,EAAIjK,OAASwI,EAAExI,OAASyI,EAAEzI,OACnBiK,EAAIuhB,UAIb7a,EAAG3R,UAAUiM,IAAM,SAAciG,GAC/B,IAAIjH,EAAM,IAAI0G,EAAG,MAEjB,OADA1G,EAAIkN,MAAQ,IAAIrN,MAAMxI,KAAKtB,OAASkR,EAAIlR,QACjCsB,KAAKmgB,MAAMvQ,EAAKjH,IAIzB0G,EAAG3R,UAAUmlB,KAAO,SAAejT,GACjC,IAAIjH,EAAM,IAAI0G,EAAG,MAEjB,OADA1G,EAAIkN,MAAQ,IAAIrN,MAAMxI,KAAKtB,OAASkR,EAAIlR,QACjCshB,EAAWhgB,KAAM4P,EAAKjH,IAI/B0G,EAAG3R,UAAUmhB,KAAO,SAAejP,GACjC,OAAO5P,KAAKmQ,QAAQgQ,MAAMvQ,EAAK5P,OAGjCqP,EAAG3R,UAAUsZ,MAAQ,SAAgBpH,GACnC,IAAI4sD,EAAW5sD,EAAM,EACjB4sD,IAAU5sD,GAAOA,GAErBZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UAIb,IADA,IAAImF,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIqO,GAAqB,EAAhB7P,KAAK6V,MAAMrU,IAAUoO,EAC1BzK,GAAU,SAAJ0K,IAA0B,SAARkF,GAC5BA,IAAU,GACVA,GAAUlF,EAAI,SAAa,EAE3BkF,GAAS5P,IAAO,GAChBnF,KAAK6V,MAAMrU,GAAU,SAAL2D,EAQlB,OALc,IAAV4P,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAGA89D,EAAWx8D,KAAKsZ,OAAStZ,MAGlCqP,EAAG3R,UAAUolB,KAAO,SAAelT,GACjC,OAAO5P,KAAKmQ,QAAQ6G,MAAMpH,IAI5BP,EAAG3R,UAAUqlB,IAAM,WACjB,OAAO/iB,KAAK2J,IAAI3J,OAIlBqP,EAAG3R,UAAUslB,KAAO,WAClB,OAAOhjB,KAAK6e,KAAK7e,KAAKmQ,UAIxBd,EAAG3R,UAAUwM,IAAM,SAAc0F,GAC/B,IAAIC,EA7xCN,SAAqBD,GAGnB,IAFA,IAAIC,EAAI,IAAIrH,MAAMoH,EAAII,aAEbwK,EAAM,EAAGA,EAAM3K,EAAEnR,OAAQ8b,IAAO,CACvC,IAAI5D,EAAO4D,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAEjB3K,EAAE2K,GAAQ5K,EAAIiG,MAAMe,KAAS6D,EAAQ,EAGvC,OAAO5K,EAmxCCoT,CAAWrT,GACnB,GAAiB,IAAbC,EAAEnR,OAAc,OAAO,IAAI2Q,EAAG,GAIlC,IADA,IAAI7J,EAAMxF,KACDwB,EAAI,EAAGA,EAAIqO,EAAEnR,QACP,IAATmR,EAAErO,GADsBA,IAAKgE,EAAMA,EAAIud,OAI7C,KAAMvhB,EAAIqO,EAAEnR,OACV,IAAK,IAAI8Z,EAAIhT,EAAIud,MAAOvhB,EAAIqO,EAAEnR,OAAQ8C,IAAKgX,EAAIA,EAAEuK,MAClC,IAATlT,EAAErO,KAENgE,EAAMA,EAAImE,IAAI6O,IAIlB,OAAOhT,GAIT6J,EAAG3R,UAAUwlB,OAAS,SAAiBpT,GACrCd,EAAuB,iBAATc,GAAqBA,GAAQ,GAC3C,IAGItO,EAHA2N,EAAIW,EAAO,GACXmR,GAAKnR,EAAOX,GAAK,GACjBgU,EAAa,WAAe,GAAKhU,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAI4F,EAAQ,EAEZ,IAAKvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CAChC,IAAI4hB,EAAWpjB,KAAK6V,MAAMrU,GAAK2hB,EAC3Ble,GAAsB,EAAhBjF,KAAK6V,MAAMrU,IAAU4hB,GAAajU,EAC5CnP,KAAK6V,MAAMrU,GAAKyD,EAAI8P,EACpBA,EAAQqO,IAAc,GAAKjU,EAGzB4F,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAIT,GAAU,IAANuiB,EAAS,CACX,IAAKzf,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAChCxB,KAAK6V,MAAMrU,EAAIyf,GAAKjhB,KAAK6V,MAAMrU,GAGjC,IAAKA,EAAI,EAAGA,EAAIyf,EAAGzf,IACjBxB,KAAK6V,MAAMrU,GAAK,EAGlBxB,KAAKtB,QAAUuiB,EAGjB,OAAOjhB,KAAKkqB,UAGd7a,EAAG3R,UAAU2lB,MAAQ,SAAgBvT,GAGnC,OADAd,EAAyB,IAAlBhP,KAAK4V,UACL5V,KAAKkjB,OAAOpT,IAMrBT,EAAG3R,UAAU+S,OAAS,SAAiBX,EAAMwT,EAAMC,GAEjD,IAAIC,EADJxU,EAAuB,iBAATc,GAAqBA,GAAQ,GAGzC0T,EADEF,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAInU,EAAIW,EAAO,GACXmR,EAAI3b,KAAKC,KAAKuK,EAAOX,GAAK,GAAInP,KAAKtB,QACnC+kB,EAAO,SAAc,WAActU,GAAMA,EACzCuU,EAAcH,EAMlB,GAJAC,GAAKvC,EACLuC,EAAIle,KAAKuC,IAAI,EAAG2b,GAGZE,EAAa,CACf,IAAK,IAAIliB,EAAI,EAAGA,EAAIyf,EAAGzf,IACrBkiB,EAAY7N,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAEpCkiB,EAAYhlB,OAASuiB,EAGvB,GAAU,IAANA,QAEG,GAAIjhB,KAAKtB,OAASuiB,EAEvB,IADAjhB,KAAKtB,QAAUuiB,EACVzf,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC3BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,EAAIyf,QAGjCjhB,KAAK6V,MAAM,GAAK,EAChB7V,KAAKtB,OAAS,EAGhB,IAAIqW,EAAQ,EACZ,IAAKvT,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,IAAgB,IAAVuT,GAAevT,GAAKgiB,GAAIhiB,IAAK,CAChE,IAAI4R,EAAuB,EAAhBpT,KAAK6V,MAAMrU,GACtBxB,KAAK6V,MAAMrU,GAAMuT,GAAU,GAAK5F,EAAOiE,IAASjE,EAChD4F,EAAQ3B,EAAOqQ,EAajB,OATIC,GAAyB,IAAV3O,IACjB2O,EAAY7N,MAAM6N,EAAYhlB,UAAYqW,GAGxB,IAAhB/U,KAAKtB,SACPsB,KAAK6V,MAAM,GAAK,EAChB7V,KAAKtB,OAAS,GAGTsB,KAAKkqB,UAGd7a,EAAG3R,UAAUimB,MAAQ,SAAgB7T,EAAMwT,EAAMC,GAG/C,OADAvU,EAAyB,IAAlBhP,KAAK4V,UACL5V,KAAKyQ,OAAOX,EAAMwT,EAAMC,IAIjClU,EAAG3R,UAAUkmB,KAAO,SAAe9T,GACjC,OAAO9P,KAAKmQ,QAAQkT,MAAMvT,IAG5BT,EAAG3R,UAAUmmB,MAAQ,SAAgB/T,GACnC,OAAO9P,KAAKmQ,QAAQ+S,OAAOpT,IAI7BT,EAAG3R,UAAUomB,KAAO,SAAehU,GACjC,OAAO9P,KAAKmQ,QAAQwT,MAAM7T,IAG5BT,EAAG3R,UAAUqmB,MAAQ,SAAgBjU,GACnC,OAAO9P,KAAKmQ,QAAQM,OAAOX,IAI7BT,EAAG3R,UAAU0b,MAAQ,SAAgBoB,GACnCxL,EAAsB,iBAARwL,GAAoBA,GAAO,GACzC,IAAIrL,EAAIqL,EAAM,GACVyG,GAAKzG,EAAMrL,GAAK,GAChBqJ,EAAI,GAAKrJ,EAGb,QAAInP,KAAKtB,QAAUuiB,OAGXjhB,KAAK6V,MAAMoL,GAELzI,IAIhBnJ,EAAG3R,UAAUsmB,OAAS,SAAiBlU,GACrCd,EAAuB,iBAATc,GAAqBA,GAAQ,GAC3C,IAAIX,EAAIW,EAAO,GACXmR,GAAKnR,EAAOX,GAAK,GAIrB,GAFAH,EAAyB,IAAlBhP,KAAK4V,SAAgB,2CAExB5V,KAAKtB,QAAUuiB,EACjB,OAAOjhB,KAQT,GALU,IAANmP,GACF8R,IAEFjhB,KAAKtB,OAAS4G,KAAKC,IAAI0b,EAAGjhB,KAAKtB,QAErB,IAANyQ,EAAS,CACX,IAAIsU,EAAO,SAAc,WAActU,GAAMA,EAC7CnP,KAAK6V,MAAM7V,KAAKtB,OAAS,IAAM+kB,EAGjC,OAAOzjB,KAAKkqB,UAId7a,EAAG3R,UAAUumB,MAAQ,SAAgBnU,GACnC,OAAO9P,KAAKmQ,QAAQ6T,OAAOlU,IAI7BT,EAAG3R,UAAUwb,MAAQ,SAAgBtJ,GAGnC,OAFAZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UACTA,EAAM,EAAU5P,KAAKwQ,OAAOZ,GAGV,IAAlB5P,KAAK4V,SACa,IAAhB5V,KAAKtB,SAAiC,EAAhBsB,KAAK6V,MAAM,KAAWjG,GAC9C5P,KAAK6V,MAAM,GAAKjG,GAAuB,EAAhB5P,KAAK6V,MAAM,IAClC7V,KAAK4V,SAAW,EACT5V,OAGTA,KAAK4V,SAAW,EAChB5V,KAAKwQ,MAAMZ,GACX5P,KAAK4V,SAAW,EACT5V,MAIFA,KAAKiX,OAAOrH,IAGrBP,EAAG3R,UAAUuZ,OAAS,SAAiBrH,GACrC5P,KAAK6V,MAAM,IAAMjG,EAGjB,IAAK,IAAIpO,EAAI,EAAGA,EAAIxB,KAAKtB,QAAUsB,KAAK6V,MAAMrU,IAAM,SAAWA,IAC7DxB,KAAK6V,MAAMrU,IAAM,SACbA,IAAMxB,KAAKtB,OAAS,EACtBsB,KAAK6V,MAAMrU,EAAI,GAAK,EAEpBxB,KAAK6V,MAAMrU,EAAI,KAKnB,OAFAxB,KAAKtB,OAAS4G,KAAKuC,IAAI7H,KAAKtB,OAAQ8C,EAAI,GAEjCxB,MAITqP,EAAG3R,UAAU8S,MAAQ,SAAgBZ,GAGnC,GAFAZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UACTA,EAAM,EAAG,OAAO5P,KAAKkZ,OAAOtJ,GAEhC,GAAsB,IAAlB5P,KAAK4V,SAIP,OAHA5V,KAAK4V,SAAW,EAChB5V,KAAKkZ,MAAMtJ,GACX5P,KAAK4V,SAAW,EACT5V,KAKT,GAFAA,KAAK6V,MAAM,IAAMjG,EAEG,IAAhB5P,KAAKtB,QAAgBsB,KAAK6V,MAAM,GAAK,EACvC7V,KAAK6V,MAAM,IAAM7V,KAAK6V,MAAM,GAC5B7V,KAAK4V,SAAW,OAGhB,IAAK,IAAIpU,EAAI,EAAGA,EAAIxB,KAAKtB,QAAUsB,KAAK6V,MAAMrU,GAAK,EAAGA,IACpDxB,KAAK6V,MAAMrU,IAAM,SACjBxB,KAAK6V,MAAMrU,EAAI,IAAM,EAIzB,OAAOxB,KAAKkqB,UAGd7a,EAAG3R,UAAUwmB,KAAO,SAAetU,GACjC,OAAO5P,KAAKmQ,QAAQ+I,MAAMtJ,IAG5BP,EAAG3R,UAAUymB,KAAO,SAAevU,GACjC,OAAO5P,KAAKmQ,QAAQK,MAAMZ,IAG5BP,EAAG3R,UAAU0mB,KAAO,WAGlB,OAFApkB,KAAK4V,SAAW,EAET5V,MAGTqP,EAAG3R,UAAUsb,IAAM,WACjB,OAAOhZ,KAAKmQ,QAAQiU,QAGtB/U,EAAG3R,UAAU2mB,aAAe,SAAuBzU,EAAKjG,EAAK2a,GAC3D,IACI9iB,EAIAqO,EALA7O,EAAM4O,EAAIlR,OAAS4lB,EAGvBtkB,KAAKmX,QAAQnW,GAGb,IAAI+T,EAAQ,EACZ,IAAKvT,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CAC/BqO,GAA6B,EAAxB7P,KAAK6V,MAAMrU,EAAI8iB,IAAcvP,EAClC,IAAIqB,GAAwB,EAAfxG,EAAIiG,MAAMrU,IAAUmI,EAEjCoL,IADAlF,GAAa,SAARuG,IACS,KAAQA,EAAQ,SAAa,GAC3CpW,KAAK6V,MAAMrU,EAAI8iB,GAAa,SAAJzU,EAE1B,KAAOrO,EAAIxB,KAAKtB,OAAS4lB,EAAO9iB,IAE9BuT,GADAlF,GAA6B,EAAxB7P,KAAK6V,MAAMrU,EAAI8iB,IAAcvP,IACrB,GACb/U,KAAK6V,MAAMrU,EAAI8iB,GAAa,SAAJzU,EAG1B,GAAc,IAAVkF,EAAa,OAAO/U,KAAKkqB,SAK7B,IAFAlb,GAAkB,IAAX+F,GACPA,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAE3BuT,GADAlF,IAAsB,EAAhB7P,KAAK6V,MAAMrU,IAAUuT,IACd,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJqO,EAIlB,OAFA7P,KAAK4V,SAAW,EAET5V,KAAKkqB,UAGd7a,EAAG3R,UAAU6mB,SAAW,SAAmB3U,EAAK4U,GAC9C,IAAIF,GAAQtkB,KAAKtB,OAASkR,EAAIlR,QAE1BuI,EAAIjH,KAAKmQ,QACT1N,EAAImN,EAGJ6U,EAA8B,EAAxBhiB,EAAEoT,MAAMpT,EAAE/D,OAAS,GAGf,KADd4lB,EAAQ,GADMtkB,KAAK0Y,WAAW+L,MAG5BhiB,EAAIA,EAAEohB,MAAMS,GACZrd,EAAEic,OAAOoB,GACTG,EAA8B,EAAxBhiB,EAAEoT,MAAMpT,EAAE/D,OAAS,IAI3B,IACI8Z,EADA7V,EAAIsE,EAAEvI,OAAS+D,EAAE/D,OAGrB,GAAa,QAAT8lB,EAAgB,EAClBhM,EAAI,IAAInJ,EAAG,OACT3Q,OAASiE,EAAI,EACf6V,EAAE3C,MAAQ,IAAIrN,MAAMgQ,EAAE9Z,QACtB,IAAK,IAAI8C,EAAI,EAAGA,EAAIgX,EAAE9Z,OAAQ8C,IAC5BgX,EAAE3C,MAAMrU,GAAK,EAIjB,IAAIkjB,EAAOzd,EAAEkJ,QAAQkU,aAAa5hB,EAAG,EAAGE,GAClB,IAAlB+hB,EAAK9O,WACP3O,EAAIyd,EACAlM,IACFA,EAAE3C,MAAMlT,GAAK,IAIjB,IAAK,IAAIiB,EAAIjB,EAAI,EAAGiB,GAAK,EAAGA,IAAK,CAC/B,IAAI+gB,EAAmC,UAAL,EAAxB1d,EAAE4O,MAAMpT,EAAE/D,OAASkF,KACE,EAA5BqD,EAAE4O,MAAMpT,EAAE/D,OAASkF,EAAI,IAO1B,IAHA+gB,EAAKrf,KAAKC,IAAKof,EAAKF,EAAO,EAAG,UAE9Bxd,EAAEod,aAAa5hB,EAAGkiB,EAAI/gB,GACA,IAAfqD,EAAE2O,UACP+O,IACA1d,EAAE2O,SAAW,EACb3O,EAAEod,aAAa5hB,EAAG,EAAGmB,GAChBqD,EAAE+Q,WACL/Q,EAAE2O,UAAY,GAGd4C,IACFA,EAAE3C,MAAMjS,GAAK+gB,GAajB,OAVInM,GACFA,EAAE0R,SAEJjjB,EAAEijB,SAGW,QAAT1F,GAA4B,IAAVF,GACpBrd,EAAEwJ,OAAO6T,GAGJ,CACLM,IAAKpM,GAAK,KACVnI,IAAKpJ,IAQToI,EAAG3R,UAAUmnB,OAAS,SAAiBjV,EAAK4U,EAAMM,GAGhD,OAFA9V,GAAQY,EAAIoI,UAERhY,KAAKgY,SACA,CACL4M,IAAK,IAAIvV,EAAG,GACZgB,IAAK,IAAIhB,EAAG,IAKM,IAAlBrP,KAAK4V,UAAmC,IAAjBhG,EAAIgG,UAC7BpQ,EAAMxF,KAAKwZ,MAAMqL,OAAOjV,EAAK4U,GAEhB,QAATA,IACFI,EAAMpf,EAAIof,IAAIpL,OAGH,QAATgL,IACFnU,EAAM7K,EAAI6K,IAAImJ,MACVsL,GAA6B,IAAjBzU,EAAIuF,UAClBvF,EAAIqK,KAAK9K,IAIN,CACLgV,IAAKA,EACLvU,IAAKA,IAIa,IAAlBrQ,KAAK4V,UAAmC,IAAjBhG,EAAIgG,UAC7BpQ,EAAMxF,KAAK6kB,OAAOjV,EAAI4J,MAAOgL,GAEhB,QAATA,IACFI,EAAMpf,EAAIof,IAAIpL,OAGT,CACLoL,IAAKA,EACLvU,IAAK7K,EAAI6K,MAI0B,IAAlCrQ,KAAK4V,SAAWhG,EAAIgG,WACvBpQ,EAAMxF,KAAKwZ,MAAMqL,OAAOjV,EAAI4J,MAAOgL,GAEtB,QAATA,IACFnU,EAAM7K,EAAI6K,IAAImJ,MACVsL,GAA6B,IAAjBzU,EAAIuF,UAClBvF,EAAIsK,KAAK/K,IAIN,CACLgV,IAAKpf,EAAIof,IACTvU,IAAKA,IAOLT,EAAIlR,OAASsB,KAAKtB,QAAUsB,KAAKqW,IAAIzG,GAAO,EACvC,CACLgV,IAAK,IAAIvV,EAAG,GACZgB,IAAKrQ,MAKU,IAAf4P,EAAIlR,OACO,QAAT8lB,EACK,CACLI,IAAK5kB,KAAK+kB,KAAKnV,EAAIiG,MAAM,IACzBxF,IAAK,MAII,QAATmU,EACK,CACLI,IAAK,KACLvU,IAAK,IAAIhB,EAAGrP,KAAKo8D,MAAMxsD,EAAIiG,MAAM,MAI9B,CACL+O,IAAK5kB,KAAK+kB,KAAKnV,EAAIiG,MAAM,IACzBxF,IAAK,IAAIhB,EAAGrP,KAAKo8D,MAAMxsD,EAAIiG,MAAM,MAI9B7V,KAAKukB,SAAS3U,EAAK4U,GAlF1B,IAAII,EAAKvU,EAAK7K,GAsFhB6J,EAAG3R,UAAUknB,IAAM,SAAchV,GAC/B,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAOgV,KAIxCvV,EAAG3R,UAAU2S,IAAM,SAAcT,GAC/B,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAOS,KAGxChB,EAAG3R,UAAUsnB,KAAO,SAAepV,GACjC,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAMS,KAIvChB,EAAG3R,UAAUunB,SAAW,SAAmBrV,GACzC,IAAIsV,EAAKllB,KAAK6kB,OAAOjV,GAGrB,GAAIsV,EAAG7U,IAAI2H,SAAU,OAAOkN,EAAGN,IAE/B,IAAIvU,EAA0B,IAApB6U,EAAGN,IAAIhP,SAAiBsP,EAAG7U,IAAIsK,KAAK/K,GAAOsV,EAAG7U,IAEpD8U,EAAOvV,EAAImU,MAAM,GACjBqB,EAAKxV,EAAIU,MAAM,GACf+F,EAAMhG,EAAIgG,IAAI8O,GAGlB,OAAI9O,EAAM,GAAa,IAAP+O,GAAoB,IAAR/O,EAAmB6O,EAAGN,IAGvB,IAApBM,EAAGN,IAAIhP,SAAiBsP,EAAGN,IAAIpU,MAAM,GAAK0U,EAAGN,IAAI1L,MAAM,IAGhE7J,EAAG3R,UAAU0+D,MAAQ,SAAgBxsD,GACnC,IAAI4sD,EAAW5sD,EAAM,EACjB4sD,IAAU5sD,GAAOA,GAErBZ,EAAOY,GAAO,UAId,IAHA,IAAI2D,GAAK,GAAK,IAAM3D,EAEhByV,EAAM,EACD7jB,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IACpC6jB,GAAO9R,EAAI8R,GAAuB,EAAhBrlB,KAAK6V,MAAMrU,KAAWoO,EAG1C,OAAO4sD,GAAYn3C,EAAMA,GAI3BhW,EAAG3R,UAAUua,KAAO,SAAerI,GACjC,OAAO5P,KAAKo8D,MAAMxsD,IAIpBP,EAAG3R,UAAUwa,MAAQ,SAAgBtI,GACnC,IAAI4sD,EAAW5sD,EAAM,EACjB4sD,IAAU5sD,GAAOA,GAErBZ,EAAOY,GAAO,UAGd,IADA,IAAImF,EAAQ,EACHvT,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACzC,IAAIqO,GAAqB,EAAhB7P,KAAK6V,MAAMrU,IAAkB,SAARuT,EAC9B/U,KAAK6V,MAAMrU,GAAMqO,EAAID,EAAO,EAC5BmF,EAAQlF,EAAID,EAId,OADA5P,KAAKkqB,SACEsyC,EAAWx8D,KAAKsZ,OAAStZ,MAGlCqP,EAAG3R,UAAUqnB,KAAO,SAAenV,GACjC,OAAO5P,KAAKmQ,QAAQ+H,MAAMtI,IAG5BP,EAAG3R,UAAU4nB,KAAO,SAAe/R,GACjCvE,EAAsB,IAAfuE,EAAEqC,UACT5G,GAAQuE,EAAEyE,UAEV,IAAI9Q,EAAIlH,KACJmH,EAAIoM,EAAEpD,QAGRjJ,EADiB,IAAfA,EAAE0O,SACA1O,EAAE8d,KAAKzR,GAEPrM,EAAEiJ,QAaR,IATA,IAAIoV,EAAI,IAAIlW,EAAG,GACXmW,EAAI,IAAInW,EAAG,GAGXoW,EAAI,IAAIpW,EAAG,GACXqW,EAAI,IAAIrW,EAAG,GAEXsW,EAAI,EAEDze,EAAE0e,UAAYze,EAAEye,UACrB1e,EAAEuJ,OAAO,GACTtJ,EAAEsJ,OAAO,KACPkV,EAMJ,IAHA,IAAIE,EAAK1e,EAAEgJ,QACP2V,EAAK5e,EAAEiJ,SAEHjJ,EAAE8Q,UAAU,CAClB,IAAK,IAAIxW,EAAI,EAAGukB,EAAK,EAAyB,IAArB7e,EAAE2O,MAAM,GAAKkQ,IAAavkB,EAAI,KAAMA,EAAGukB,IAAO,GACvE,GAAIvkB,EAAI,EAEN,IADA0F,EAAEuJ,OAAOjP,GACFA,KAAM,IACP+jB,EAAEhV,SAAWiV,EAAEjV,WACjBgV,EAAE7K,KAAKmL,GACPL,EAAE7K,KAAKmL,IAGTP,EAAE9U,OAAO,GACT+U,EAAE/U,OAAO,GAIb,IAAK,IAAI7M,EAAI,EAAGoiB,EAAK,EAAyB,IAArB7e,EAAE0O,MAAM,GAAKmQ,IAAapiB,EAAI,KAAMA,EAAGoiB,IAAO,GACvE,GAAIpiB,EAAI,EAEN,IADAuD,EAAEsJ,OAAO7M,GACFA,KAAM,IACP6hB,EAAElV,SAAWmV,EAAEnV,WACjBkV,EAAE/K,KAAKmL,GACPH,EAAE/K,KAAKmL,IAGTL,EAAEhV,OAAO,GACTiV,EAAEjV,OAAO,GAITvJ,EAAEmP,IAAIlP,IAAM,GACdD,EAAEyT,KAAKxT,GACPoe,EAAE5K,KAAK8K,GACPD,EAAE7K,KAAK+K,KAEPve,EAAEwT,KAAKzT,GACPue,EAAE9K,KAAK4K,GACPG,EAAE/K,KAAK6K,IAIX,MAAO,CACLve,EAAGwe,EACHhjB,EAAGijB,EACHO,IAAK9e,EAAE+b,OAAOyC,KAOlBtW,EAAG3R,UAAUwoB,OAAS,SAAiB3S,GACrCvE,EAAsB,IAAfuE,EAAEqC,UACT5G,GAAQuE,EAAEyE,UAEV,IAAI/Q,EAAIjH,KACJyC,EAAI8Q,EAAEpD,QAGRlJ,EADiB,IAAfA,EAAE2O,SACA3O,EAAE+d,KAAKzR,GAEPtM,EAAEkJ,QAQR,IALA,IAuCI3K,EAvCA2gB,EAAK,IAAI9W,EAAG,GACZ+W,EAAK,IAAI/W,EAAG,GAEZgX,EAAQ5jB,EAAE0N,QAEPlJ,EAAE+J,KAAK,GAAK,GAAKvO,EAAEuO,KAAK,GAAK,GAAG,CACrC,IAAK,IAAIxP,EAAI,EAAGukB,EAAK,EAAyB,IAArB9e,EAAE4O,MAAM,GAAKkQ,IAAavkB,EAAI,KAAMA,EAAGukB,IAAO,GACvE,GAAIvkB,EAAI,EAEN,IADAyF,EAAEwJ,OAAOjP,GACFA,KAAM,GACP2kB,EAAG5V,SACL4V,EAAGzL,KAAK2L,GAGVF,EAAG1V,OAAO,GAId,IAAK,IAAI7M,EAAI,EAAGoiB,EAAK,EAAyB,IAArBvjB,EAAEoT,MAAM,GAAKmQ,IAAapiB,EAAI,KAAMA,EAAGoiB,IAAO,GACvE,GAAIpiB,EAAI,EAEN,IADAnB,EAAEgO,OAAO7M,GACFA,KAAM,GACPwiB,EAAG7V,SACL6V,EAAG1L,KAAK2L,GAGVD,EAAG3V,OAAO,GAIVxJ,EAAEoP,IAAI5T,IAAM,GACdwE,EAAE0T,KAAKlY,GACP0jB,EAAGxL,KAAKyL,KAER3jB,EAAEkY,KAAK1T,GACPmf,EAAGzL,KAAKwL,IAeZ,OATE3gB,EADgB,IAAdyB,EAAE+J,KAAK,GACHmV,EAEAC,GAGApV,KAAK,GAAK,GAChBxL,EAAIkV,KAAKnH,GAGJ/N,GAGT6J,EAAG3R,UAAUuoB,IAAM,SAAcrW,GAC/B,GAAI5P,KAAKgY,SAAU,OAAOpI,EAAIoJ,MAC9B,GAAIpJ,EAAIoI,SAAU,OAAOhY,KAAKgZ,MAE9B,IAAI/R,EAAIjH,KAAKmQ,QACT1N,EAAImN,EAAIO,QACZlJ,EAAE2O,SAAW,EACbnT,EAAEmT,SAAW,EAGb,IAAK,IAAI0O,EAAQ,EAAGrd,EAAE2e,UAAYnjB,EAAEmjB,SAAUtB,IAC5Crd,EAAEwJ,OAAO,GACThO,EAAEgO,OAAO,GAGX,OAAG,CACD,KAAOxJ,EAAE2e,UACP3e,EAAEwJ,OAAO,GAEX,KAAOhO,EAAEmjB,UACPnjB,EAAEgO,OAAO,GAGX,IAAItB,EAAIlI,EAAEoP,IAAI5T,GACd,GAAI0M,EAAI,EAAG,CAET,IAAIwJ,EAAI1R,EACRA,EAAIxE,EACJA,EAAIkW,OACC,GAAU,IAANxJ,GAAyB,IAAd1M,EAAEuO,KAAK,GAC3B,MAGF/J,EAAE0T,KAAKlY,GAGT,OAAOA,EAAEygB,OAAOoB,IAIlBjV,EAAG3R,UAAU4oB,KAAO,SAAe1W,GACjC,OAAO5P,KAAKslB,KAAK1V,GAAK3I,EAAE+d,KAAKpV,IAG/BP,EAAG3R,UAAUkoB,OAAS,WACpB,OAA+B,IAAP,EAAhB5lB,KAAK6V,MAAM,KAGrBxG,EAAG3R,UAAU6S,MAAQ,WACnB,OAA+B,IAAP,EAAhBvQ,KAAK6V,MAAM,KAIrBxG,EAAG3R,UAAU4S,MAAQ,SAAgBV,GACnC,OAAO5P,KAAK6V,MAAM,GAAKjG,GAIzBP,EAAG3R,UAAU6oB,MAAQ,SAAgB/L,GACnCxL,EAAsB,iBAARwL,GACd,IAAIrL,EAAIqL,EAAM,GACVyG,GAAKzG,EAAMrL,GAAK,GAChBqJ,EAAI,GAAKrJ,EAGb,GAAInP,KAAKtB,QAAUuiB,EAGjB,OAFAjhB,KAAKmX,QAAQ8J,EAAI,GACjBjhB,KAAK6V,MAAMoL,IAAMzI,EACVxY,KAKT,IADA,IAAI+U,EAAQyD,EACHhX,EAAIyf,EAAa,IAAVlM,GAAevT,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACnD,IAAIqO,EAAoB,EAAhB7P,KAAK6V,MAAMrU,GAEnBuT,GADAlF,GAAKkF,KACS,GACdlF,GAAK,SACL7P,KAAK6V,MAAMrU,GAAKqO,EAMlB,OAJc,IAAVkF,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAEAsB,MAGTqP,EAAG3R,UAAUsa,OAAS,WACpB,OAAuB,IAAhBhY,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,IAGzCxG,EAAG3R,UAAUsT,KAAO,SAAepB,GACjC,IAOIpK,EAPAoQ,EAAWhG,EAAM,EAErB,GAAsB,IAAlB5P,KAAK4V,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlB5V,KAAK4V,UAAkBA,EAAU,OAAO,EAK5C,GAHA5V,KAAKkqB,SAGDlqB,KAAKtB,OAAS,EAChB8G,EAAM,MACD,CACDoQ,IACFhG,GAAOA,GAGTZ,EAAOY,GAAO,SAAW,qBAEzB,IAAIC,EAAoB,EAAhB7P,KAAK6V,MAAM,GACnBrQ,EAAMqK,IAAMD,EAAM,EAAIC,EAAID,GAAO,EAAI,EAEvC,OAAsB,IAAlB5P,KAAK4V,SAA8B,GAANpQ,EAC1BA,GAOT6J,EAAG3R,UAAU2Y,IAAM,SAAczG,GAC/B,GAAsB,IAAlB5P,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAAgB,OAAQ,EACvD,GAAsB,IAAlB5V,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAAgB,OAAO,EAEtD,IAAIpQ,EAAMxF,KAAKwmB,KAAK5W,GACpB,OAAsB,IAAlB5P,KAAK4V,SAA8B,GAANpQ,EAC1BA,GAIT6J,EAAG3R,UAAU8oB,KAAO,SAAe5W,GAEjC,GAAI5P,KAAKtB,OAASkR,EAAIlR,OAAQ,OAAO,EACrC,GAAIsB,KAAKtB,OAASkR,EAAIlR,OAAQ,OAAQ,EAGtC,IADA,IAAI8G,EAAM,EACDhE,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACzC,IAAIyF,EAAoB,EAAhBjH,KAAK6V,MAAMrU,GACfiB,EAAmB,EAAfmN,EAAIiG,MAAMrU,GAElB,GAAIyF,IAAMxE,EAAV,CACIwE,EAAIxE,EACN+C,GAAO,EACEyB,EAAIxE,IACb+C,EAAM,GAER,OAEF,OAAOA,GAGT6J,EAAG3R,UAAU+oB,IAAM,SAAc7W,GAC/B,OAA0B,IAAnB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUgpB,GAAK,SAAa9W,GAC7B,OAAyB,IAAlB5P,KAAKqW,IAAIzG,IAGlBP,EAAG3R,UAAUipB,KAAO,SAAe/W,GACjC,OAAO5P,KAAKgR,KAAKpB,IAAQ,GAG3BP,EAAG3R,UAAUkpB,IAAM,SAAchX,GAC/B,OAAO5P,KAAKqW,IAAIzG,IAAQ,GAG1BP,EAAG3R,UAAUmpB,IAAM,SAAcjX,GAC/B,OAA2B,IAApB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUopB,GAAK,SAAalX,GAC7B,OAA0B,IAAnB5P,KAAKqW,IAAIzG,IAGlBP,EAAG3R,UAAUqpB,KAAO,SAAenX,GACjC,OAAO5P,KAAKgR,KAAKpB,IAAQ,GAG3BP,EAAG3R,UAAUspB,IAAM,SAAcpX,GAC/B,OAAO5P,KAAKqW,IAAIzG,IAAQ,GAG1BP,EAAG3R,UAAUupB,IAAM,SAAcrX,GAC/B,OAA0B,IAAnB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUwpB,GAAK,SAAatX,GAC7B,OAAyB,IAAlB5P,KAAKqW,IAAIzG,IAOlBP,EAAGyG,IAAM,SAAclG,GACrB,OAAO,IAAIuX,EAAIvX,IAGjBP,EAAG3R,UAAU0pB,MAAQ,SAAgBC,GAGnC,OAFArY,GAAQhP,KAAK8V,IAAK,yCAClB9G,EAAyB,IAAlBhP,KAAK4V,SAAgB,iCACrByR,EAAIC,UAAUtnB,MAAMunB,UAAUF,IAGvChY,EAAG3R,UAAU8pB,QAAU,WAErB,OADAxY,EAAOhP,KAAK8V,IAAK,wDACV9V,KAAK8V,IAAI2R,YAAYznB,OAG9BqP,EAAG3R,UAAU6pB,UAAY,SAAoBF,GAE3C,OADArnB,KAAK8V,IAAMuR,EACJrnB,MAGTqP,EAAG3R,UAAUgqB,SAAW,SAAmBL,GAEzC,OADArY,GAAQhP,KAAK8V,IAAK,yCACX9V,KAAKunB,UAAUF,IAGxBhY,EAAG3R,UAAUiqB,OAAS,SAAiB/X,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAI8E,IAAI5a,KAAM4P,IAG5BP,EAAG3R,UAAUkqB,QAAU,SAAkBhY,GAEvC,OADAZ,EAAOhP,KAAK8V,IAAK,uCACV9V,KAAK8V,IAAI4E,KAAK1a,KAAM4P,IAG7BP,EAAG3R,UAAUmqB,OAAS,SAAiBjY,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAIvK,IAAIvL,KAAM4P,IAG5BP,EAAG3R,UAAUoqB,QAAU,SAAkBlY,GAEvC,OADAZ,EAAOhP,KAAK8V,IAAK,uCACV9V,KAAK8V,IAAI6E,KAAK3a,KAAM4P,IAG7BP,EAAG3R,UAAUqqB,OAAS,SAAiBnY,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAIkS,IAAIhoB,KAAM4P,IAG5BP,EAAG3R,UAAUuqB,OAAS,SAAiBrY,GAGrC,OAFAZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIoS,SAASloB,KAAM4P,GACjB5P,KAAK8V,IAAInM,IAAI3J,KAAM4P,IAG5BP,EAAG3R,UAAUyqB,QAAU,SAAkBvY,GAGvC,OAFAZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIoS,SAASloB,KAAM4P,GACjB5P,KAAK8V,IAAI+I,KAAK7e,KAAM4P,IAG7BP,EAAG3R,UAAU0qB,OAAS,WAGpB,OAFApZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIiN,IAAI/iB,OAGtBqP,EAAG3R,UAAU4qB,QAAU,WAGrB,OAFAtZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIkN,KAAKhjB,OAIvBqP,EAAG3R,UAAU6qB,QAAU,WAGrB,OAFAvZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI0S,KAAKxoB,OAGvBqP,EAAG3R,UAAU+qB,QAAU,WAGrB,OAFAzZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIwQ,KAAKtmB,OAIvBqP,EAAG3R,UAAUgrB,OAAS,WAGpB,OAFA1Z,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI0D,IAAIxZ,OAGtBqP,EAAG3R,UAAUirB,OAAS,SAAiB/Y,GAGrC,OAFAZ,EAAOhP,KAAK8V,MAAQlG,EAAIkG,IAAK,qBAC7B9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI5L,IAAIlK,KAAM4P,IAI5B,IAAIgZ,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQ1X,EAAMgC,GAErBvT,KAAKuR,KAAOA,EACZvR,KAAKuT,EAAI,IAAIlE,EAAGkE,EAAG,IACnBvT,KAAK0C,EAAI1C,KAAKuT,EAAEvD,YAChBhQ,KAAKkQ,EAAI,IAAIb,EAAG,GAAG6T,OAAOljB,KAAK0C,GAAGiY,KAAK3a,KAAKuT,GAE5CvT,KAAKkpB,IAAMlpB,KAAKmpB,OAiDlB,SAASC,IACPH,EAAOhmB,KACLjD,KACA,OACA,2EA+DJ,SAASqpB,IACPJ,EAAOhmB,KACLjD,KACA,OACA,kEAIJ,SAASspB,IACPL,EAAOhmB,KACLjD,KACA,OACA,yDAIJ,SAASupB,IAEPN,EAAOhmB,KACLjD,KACA,QACA,uEA8CJ,SAASmnB,EAAKxkB,GACZ,GAAiB,iBAANA,EAAgB,CACzB,IAAI6mB,EAAQna,EAAGoa,OAAO9mB,GACtB3C,KAAK2C,EAAI6mB,EAAMjW,EACfvT,KAAKwpB,MAAQA,OAEbxa,EAAOrM,EAAE8jB,IAAI,GAAI,kCACjBzmB,KAAK2C,EAAIA,EACT3C,KAAKwpB,MAAQ,KAoOjB,SAASE,EAAM/mB,GACbwkB,EAAIlkB,KAAKjD,KAAM2C,GAEf3C,KAAKskB,MAAQtkB,KAAK2C,EAAEqN,YAChBhQ,KAAKskB,MAAQ,IAAO,IACtBtkB,KAAKskB,OAAS,GAAMtkB,KAAKskB,MAAQ,IAGnCtkB,KAAKmP,EAAI,IAAIE,EAAG,GAAG6T,OAAOljB,KAAKskB,OAC/BtkB,KAAKolB,GAAKplB,KAAK2pB,KAAK3pB,KAAKmP,EAAE4T,OAC3B/iB,KAAK4pB,KAAO5pB,KAAKmP,EAAE+W,OAAOlmB,KAAK2C,GAE/B3C,KAAK6pB,KAAO7pB,KAAK4pB,KAAKjgB,IAAI3J,KAAKmP,GAAGqB,MAAM,GAAGoU,IAAI5kB,KAAK2C,GACpD3C,KAAK6pB,KAAO7pB,KAAK6pB,KAAK7E,KAAKhlB,KAAKmP,GAChCnP,KAAK6pB,KAAO7pB,KAAKmP,EAAE5D,IAAIvL,KAAK6pB,MA9a9BZ,EAAOvrB,UAAUyrB,KAAO,WACtB,IAAID,EAAM,IAAI7Z,EAAG,MAEjB,OADA6Z,EAAIrT,MAAQ,IAAIrN,MAAMlD,KAAKqR,KAAK3W,KAAK0C,EAAI,KAClCwmB,GAGTD,EAAOvrB,UAAUosB,QAAU,SAAkBla,GAG3C,IACIma,EADA5a,EAAIS,EAGR,GACE5P,KAAKgqB,MAAM7a,EAAGnP,KAAKkpB,KAGnBa,GADA5a,GADAA,EAAInP,KAAKiqB,MAAM9a,IACTuL,KAAK1a,KAAKkpB,MACPlZ,kBACF+Z,EAAO/pB,KAAK0C,GAErB,IAAI2T,EAAM0T,EAAO/pB,KAAK0C,GAAK,EAAIyM,EAAEqX,KAAKxmB,KAAKuT,GAgB3C,OAfY,IAAR8C,GACFlH,EAAE0G,MAAM,GAAK,EACb1G,EAAEzQ,OAAS,GACF2X,EAAM,EACflH,EAAEwL,KAAK3a,KAAKuT,QAEInU,IAAZ+P,EAAEuH,MAEJvH,EAAEuH,QAGFvH,EAAE+a,SAIC/a,GAGT8Z,EAAOvrB,UAAUssB,MAAQ,SAAgBG,EAAOxhB,GAC9CwhB,EAAM1Z,OAAOzQ,KAAK0C,EAAG,EAAGiG,IAG1BsgB,EAAOvrB,UAAUusB,MAAQ,SAAgBra,GACvC,OAAOA,EAAIiP,KAAK7e,KAAKkQ,IASvB+C,EAASmW,EAAMH,GAEfG,EAAK1rB,UAAUssB,MAAQ,SAAgBG,EAAOC,GAK5C,IAHA,IAEIC,EAAS/kB,KAAKC,IAAI4kB,EAAMzrB,OAAQ,GAC3B8C,EAAI,EAAGA,EAAI6oB,EAAQ7oB,IAC1B4oB,EAAOvU,MAAMrU,GAAK2oB,EAAMtU,MAAMrU,GAIhC,GAFA4oB,EAAO1rB,OAAS2rB,EAEZF,EAAMzrB,QAAU,EAGlB,OAFAyrB,EAAMtU,MAAM,GAAK,OACjBsU,EAAMzrB,OAAS,GAKjB,IAAI4rB,EAAOH,EAAMtU,MAAM,GAGvB,IAFAuU,EAAOvU,MAAMuU,EAAO1rB,UAhBT,QAgBqB4rB,EAE3B9oB,EAAI,GAAIA,EAAI2oB,EAAMzrB,OAAQ8C,IAAK,CAClC,IAAI+oB,EAAwB,EAAjBJ,EAAMtU,MAAMrU,GACvB2oB,EAAMtU,MAAMrU,EAAI,KApBP,QAoBe+oB,IAAgB,EAAMD,IAAS,GACvDA,EAAOC,EAETD,KAAU,GACVH,EAAMtU,MAAMrU,EAAI,IAAM8oB,EACT,IAATA,GAAcH,EAAMzrB,OAAS,GAC/ByrB,EAAMzrB,QAAU,GAEhByrB,EAAMzrB,QAAU,GAIpB0qB,EAAK1rB,UAAUusB,MAAQ,SAAgBra,GAErCA,EAAIiG,MAAMjG,EAAIlR,QAAU,EACxBkR,EAAIiG,MAAMjG,EAAIlR,OAAS,GAAK,EAC5BkR,EAAIlR,QAAU,EAId,IADA,IAAIyG,EAAK,EACA3D,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CACnC,IAAIqO,EAAmB,EAAfD,EAAIiG,MAAMrU,GAClB2D,GAAU,IAAJ0K,EACND,EAAIiG,MAAMrU,GAAU,SAAL2D,EACfA,EAAS,GAAJ0K,GAAa1K,EAAK,SAAa,GAUtC,OANkC,IAA9ByK,EAAIiG,MAAMjG,EAAIlR,OAAS,KACzBkR,EAAIlR,SAC8B,IAA9BkR,EAAIiG,MAAMjG,EAAIlR,OAAS,IACzBkR,EAAIlR,UAGDkR,GASTqD,EAASoW,EAAMJ,GAQfhW,EAASqW,EAAML,GASfhW,EAASsW,EAAQN,GAEjBM,EAAO7rB,UAAUusB,MAAQ,SAAgBra,GAGvC,IADA,IAAImF,EAAQ,EACHvT,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CACnC,IAAI0D,EAA0B,IAAL,EAAf0K,EAAIiG,MAAMrU,IAAiBuT,EACjC5P,EAAU,SAALD,EACTA,KAAQ,GAER0K,EAAIiG,MAAMrU,GAAK2D,EACf4P,EAAQ7P,EAKV,OAHc,IAAV6P,IACFnF,EAAIiG,MAAMjG,EAAIlR,UAAYqW,GAErBnF,GAITP,EAAGoa,OAAS,SAAgBlY,GAE1B,GAAIqX,EAAOrX,GAAO,OAAOqX,EAAOrX,GAEhC,IAAIiY,EACJ,GAAa,SAATjY,EACFiY,EAAQ,IAAIJ,OACP,GAAa,SAAT7X,EACTiY,EAAQ,IAAIH,OACP,GAAa,SAAT9X,EACTiY,EAAQ,IAAIF,MACP,IAAa,WAAT/X,EAGT,MAAM,IAAItR,MAAM,iBAAmBsR,GAFnCiY,EAAQ,IAAID,EAMd,OAFAX,EAAOrX,GAAQiY,EAERA,GAkBTrC,EAAIzpB,UAAU2qB,SAAW,SAAmBphB,GAC1C+H,EAAsB,IAAf/H,EAAE2O,SAAgB,iCACzB5G,EAAO/H,EAAE6O,IAAK,oCAGhBqR,EAAIzpB,UAAUwqB,SAAW,SAAmBjhB,EAAGxE,GAC7CuM,EAAqC,IAA7B/H,EAAE2O,SAAWnT,EAAEmT,UAAiB,iCACxC5G,EAAO/H,EAAE6O,KAAO7O,EAAE6O,MAAQrT,EAAEqT,IAC1B,oCAGJqR,EAAIzpB,UAAUisB,KAAO,SAAe1iB,GAClC,OAAIjH,KAAKwpB,MAAcxpB,KAAKwpB,MAAMM,QAAQ7iB,GAAGsgB,UAAUvnB,OAEvDi8D,EAAKh1D,EAAGA,EAAE+d,KAAKhlB,KAAK2C,GAAG4kB,UAAUvnB,OAC1BiH,IAGTkgB,EAAIzpB,UAAU8b,IAAM,SAAcvS,GAChC,OAAIA,EAAE+Q,SACG/Q,EAAEkJ,QAGJnQ,KAAK2C,EAAE4I,IAAItE,GAAGsgB,UAAUvnB,OAGjCmnB,EAAIzpB,UAAUkd,IAAM,SAAc3T,EAAGxE,GACnCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAE2T,IAAInY,GAIhB,OAHI+C,EAAI6Q,IAAIrW,KAAK2C,IAAM,GACrB6C,EAAImV,KAAK3a,KAAK2C,GAET6C,EAAI+hB,UAAUvnB,OAGvBmnB,EAAIzpB,UAAUgd,KAAO,SAAezT,EAAGxE,GACrCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEyT,KAAKjY,GAIjB,OAHI+C,EAAI6Q,IAAIrW,KAAK2C,IAAM,GACrB6C,EAAImV,KAAK3a,KAAK2C,GAET6C,GAGT2hB,EAAIzpB,UAAU6N,IAAM,SAActE,EAAGxE,GACnCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEsE,IAAI9I,GAIhB,OAHI+C,EAAIwL,KAAK,GAAK,GAChBxL,EAAIkV,KAAK1a,KAAK2C,GAET6C,EAAI+hB,UAAUvnB,OAGvBmnB,EAAIzpB,UAAUid,KAAO,SAAe1T,EAAGxE,GACrCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAE0T,KAAKlY,GAIjB,OAHI+C,EAAIwL,KAAK,GAAK,GAChBxL,EAAIkV,KAAK1a,KAAK2C,GAET6C,GAGT2hB,EAAIzpB,UAAUsqB,IAAM,SAAc/gB,EAAG2I,GAEnC,OADA5P,KAAKqoB,SAASphB,GACPjH,KAAK2pB,KAAK1iB,EAAE4c,MAAMjU,KAG3BuX,EAAIzpB,UAAUmhB,KAAO,SAAe5X,EAAGxE,GAErC,OADAzC,KAAKkoB,SAASjhB,EAAGxE,GACVzC,KAAK2pB,KAAK1iB,EAAE4X,KAAKpc,KAG1B0kB,EAAIzpB,UAAUiM,IAAM,SAAc1C,EAAGxE,GAEnC,OADAzC,KAAKkoB,SAASjhB,EAAGxE,GACVzC,KAAK2pB,KAAK1iB,EAAE0C,IAAIlH,KAGzB0kB,EAAIzpB,UAAUslB,KAAO,SAAe/b,GAClC,OAAOjH,KAAK6e,KAAK5X,EAAGA,EAAEkJ,UAGxBgX,EAAIzpB,UAAUqlB,IAAM,SAAc9b,GAChC,OAAOjH,KAAK2J,IAAI1C,EAAGA,IAGrBkgB,EAAIzpB,UAAU8qB,KAAO,SAAevhB,GAClC,GAAIA,EAAE+Q,SAAU,OAAO/Q,EAAEkJ,QAEzB,IAAIqa,EAAOxqB,KAAK2C,EAAE2N,MAAM,GAIxB,GAHAtB,EAAOwb,EAAO,GAAM,GAGP,IAATA,EAAY,CACd,IAAItgB,EAAMlK,KAAK2C,EAAEiY,IAAI,IAAIvL,EAAG,IAAIoB,OAAO,GACvC,OAAOzQ,KAAKkK,IAAIjD,EAAGiD,GAQrB,IAFA,IAAIsO,EAAIxY,KAAK2C,EAAEwhB,KAAK,GAChBlD,EAAI,GACAzI,EAAER,UAA2B,IAAfQ,EAAElI,MAAM,IAC5B2Q,IACAzI,EAAE/H,OAAO,GAEXzB,GAAQwJ,EAAER,UAEV,IAAIyS,EAAM,IAAIpb,EAAG,GAAG+X,MAAMpnB,MACtB0qB,EAAOD,EAAI/B,SAIXiC,EAAO3qB,KAAK2C,EAAEwhB,KAAK,GAAG1T,OAAO,GAC7BL,EAAIpQ,KAAK2C,EAAEqN,YAGf,IAFAI,EAAI,IAAIf,EAAG,EAAIe,EAAIA,GAAGgX,MAAMpnB,MAEW,IAAhCA,KAAKkK,IAAIkG,EAAGua,GAAMtU,IAAIqU,IAC3Bta,EAAEwX,QAAQ8C,GAOZ,IAJA,IAAIzlB,EAAIjF,KAAKkK,IAAIkG,EAAGoI,GAChBrJ,EAAInP,KAAKkK,IAAIjD,EAAGuR,EAAE0L,KAAK,GAAGzT,OAAO,IACjCkI,EAAI3Y,KAAKkK,IAAIjD,EAAGuR,GAChB7V,EAAIse,EACc,IAAftI,EAAEtC,IAAIoU,IAAY,CAEvB,IADA,IAAIvB,EAAMvQ,EACDnX,EAAI,EAAoB,IAAjB0nB,EAAI7S,IAAIoU,GAAYjpB,IAClC0nB,EAAMA,EAAId,SAEZpZ,EAAOxN,EAAImB,GACX,IAAIF,EAAIzC,KAAKkK,IAAIjF,EAAG,IAAIoK,EAAG,GAAG6T,OAAOvgB,EAAInB,EAAI,IAE7C2N,EAAIA,EAAE8Y,OAAOxlB,GACbwC,EAAIxC,EAAE2lB,SACNzP,EAAIA,EAAEsP,OAAOhjB,GACbtC,EAAInB,EAGN,OAAO2N,GAGTgY,EAAIzpB,UAAU4oB,KAAO,SAAerf,GAClC,IAAI2jB,EAAM3jB,EAAEif,OAAOlmB,KAAK2C,GACxB,OAAqB,IAAjBioB,EAAIhV,UACNgV,EAAIhV,SAAW,EACR5V,KAAK2pB,KAAKiB,GAAKlC,UAEf1oB,KAAK2pB,KAAKiB,IAIrBzD,EAAIzpB,UAAUwM,IAAM,SAAcjD,EAAG2I,GACnC,GAAIA,EAAIoI,SAAU,OAAO,IAAI3I,EAAG,GAAG+X,MAAMpnB,MACzC,GAAoB,IAAhB4P,EAAIoB,KAAK,GAAU,OAAO/J,EAAEkJ,QAEhC,IACI0a,EAAM,IAAIriB,MAAM,IACpBqiB,EAAI,GAAK,IAAIxb,EAAG,GAAG+X,MAAMpnB,MACzB6qB,EAAI,GAAK5jB,EACT,IAAK,IAAIzF,EAAI,EAAGA,EAAIqpB,EAAInsB,OAAQ8C,IAC9BqpB,EAAIrpB,GAAKxB,KAAK2J,IAAIkhB,EAAIrpB,EAAI,GAAIyF,GAGhC,IAAIzB,EAAMqlB,EAAI,GACVC,EAAU,EACVC,EAAa,EACb/oB,EAAQ4N,EAAII,YAAc,GAK9B,IAJc,IAAVhO,IACFA,EAAQ,IAGLR,EAAIoO,EAAIlR,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CAEpC,IADA,IAAI4R,EAAOxD,EAAIiG,MAAMrU,GACZoC,EAAI5B,EAAQ,EAAG4B,GAAK,EAAGA,IAAK,CACnC,IAAI4W,EAAOpH,GAAQxP,EAAK,EACpB4B,IAAQqlB,EAAI,KACdrlB,EAAMxF,KAAK+iB,IAAIvd,IAGL,IAARgV,GAAyB,IAAZsQ,GAKjBA,IAAY,EACZA,GAAWtQ,GA9BE,MA+BbuQ,GACwC,IAANvpB,GAAiB,IAANoC,KAE7C4B,EAAMxF,KAAK2J,IAAInE,EAAKqlB,EAAIC,IACxBC,EAAa,EACbD,EAAU,IAXRC,EAAa,EAajB/oB,EAAQ,GAGV,OAAOwD,GAGT2hB,EAAIzpB,UAAU4pB,UAAY,SAAoB1X,GAC5C,IAAIT,EAAIS,EAAIoV,KAAKhlB,KAAK2C,GAEtB,OAAOwM,IAAMS,EAAMT,EAAEgB,QAAUhB,GAGjCgY,EAAIzpB,UAAU+pB,YAAc,SAAsB7X,GAChD,IAAIpK,EAAMoK,EAAIO,QAEd,OADA3K,EAAIsQ,IAAM,KACHtQ,GAOT6J,EAAG2b,KAAO,SAAepb,GACvB,OAAO,IAAI8Z,EAAK9Z,IAmBlBqD,EAASyW,EAAMvC,GAEfuC,EAAKhsB,UAAU4pB,UAAY,SAAoB1X,GAC7C,OAAO5P,KAAK2pB,KAAK/Z,EAAIiU,MAAM7jB,KAAKskB,SAGlCoF,EAAKhsB,UAAU+pB,YAAc,SAAsB7X,GACjD,IAAIT,EAAInP,KAAK2pB,KAAK/Z,EAAIjG,IAAI3J,KAAK4pB,OAE/B,OADAza,EAAE2G,IAAM,KACD3G,GAGTua,EAAKhsB,UAAUmhB,KAAO,SAAe5X,EAAGxE,GACtC,GAAIwE,EAAE+Q,UAAYvV,EAAEuV,SAGlB,OAFA/Q,EAAE4O,MAAM,GAAK,EACb5O,EAAEvI,OAAS,EACJuI,EAGT,IAAI0R,EAAI1R,EAAE4X,KAAKpc,GACXwC,EAAI0T,EAAEsL,MAAMjkB,KAAKskB,OAAO3a,IAAI3J,KAAK6pB,MAAM7F,OAAOhkB,KAAKskB,OAAO3a,IAAI3J,KAAK2C,GACnEsoB,EAAItS,EAAEgC,KAAK1V,GAAGwL,OAAOzQ,KAAKskB,OAC1B9e,EAAMylB,EAQV,OANIA,EAAE5U,IAAIrW,KAAK2C,IAAM,EACnB6C,EAAMylB,EAAEtQ,KAAK3a,KAAK2C,GACTsoB,EAAEja,KAAK,GAAK,IACrBxL,EAAMylB,EAAEvQ,KAAK1a,KAAK2C,IAGb6C,EAAI+hB,UAAUvnB,OAGvB0pB,EAAKhsB,UAAUiM,IAAM,SAAc1C,EAAGxE,GACpC,GAAIwE,EAAE+Q,UAAYvV,EAAEuV,SAAU,OAAO,IAAI3I,EAAG,GAAGkY,UAAUvnB,MAEzD,IAAI2Y,EAAI1R,EAAE0C,IAAIlH,GACVwC,EAAI0T,EAAEsL,MAAMjkB,KAAKskB,OAAO3a,IAAI3J,KAAK6pB,MAAM7F,OAAOhkB,KAAKskB,OAAO3a,IAAI3J,KAAK2C,GACnEsoB,EAAItS,EAAEgC,KAAK1V,GAAGwL,OAAOzQ,KAAKskB,OAC1B9e,EAAMylB,EAOV,OANIA,EAAE5U,IAAIrW,KAAK2C,IAAM,EACnB6C,EAAMylB,EAAEtQ,KAAK3a,KAAK2C,GACTsoB,EAAEja,KAAK,GAAK,IACrBxL,EAAMylB,EAAEvQ,KAAK1a,KAAK2C,IAGb6C,EAAI+hB,UAAUvnB,OAGvB0pB,EAAKhsB,UAAU4oB,KAAO,SAAerf,GAGnC,OADUjH,KAAK2pB,KAAK1iB,EAAEif,OAAOlmB,KAAK2C,GAAGgH,IAAI3J,KAAKolB,KACnCmC,UAAUvnB,OAj9GzB,CAm9GoC3C,EAAQ2C,Q,oDCj9G5C,MAAM+iC,EAAOzlC,EAEbylC,EAAK05B,OAAS,EAAQ,KAEtB15B,EAAK25B,OAAS,EAAQ,KAAcA,OACpC35B,EAAKrtB,KAAO,EAAQ,KACpBqtB,EAAKiT,UAAY,EAAQ,KACzBjT,EAAK45B,SAAW,EAAQ,KACxB55B,EAAK65B,SAAW,EAAQ,M,iBCVxB,2BACE,aAGA,SAAS5tD,EAAQ7N,EAAK8N,GACpB,IAAK9N,EAAK,MAAM,IAAIlB,MAAMgP,GAAO,oBAKnC,SAASgE,EAAU1V,EAAMC,GACvBD,EAAKE,OAASD,EACd,IAAIQ,EAAW,aACfA,EAASN,UAAYF,EAAUE,UAC/BH,EAAKG,UAAY,IAAIM,EACrBT,EAAKG,UAAUC,YAAcJ,EAK/B,SAAS8R,EAAIoG,EAAQC,EAAMjC,GACzB,GAAIpE,EAAGsG,KAAKF,GACV,OAAOA,EAGTzV,KAAK4V,SAAW,EAChB5V,KAAK6V,MAAQ,KACb7V,KAAKtB,OAAS,EAGdsB,KAAK8V,IAAM,KAEI,OAAXL,IACW,OAATC,GAA0B,OAATA,IACnBjC,EAASiC,EACTA,EAAO,IAGT1V,KAAK+V,MAAMN,GAAU,EAAGC,GAAQ,GAAIjC,GAAU,OAYlD,IAAIvV,EATkB,iBAAXb,EACTA,EAAOC,QAAU+R,EAEjB/R,EAAQ+R,GAAKA,EAGfA,EAAGA,GAAKA,EACRA,EAAG2G,SAAW,GAGd,IACE9X,EAAS,EAAQ,KAAUA,OAC3B,MAAOsI,IAoIT,SAASyP,EAAUzR,EAAKxC,EAAOC,GAG7B,IAFA,IAAIkN,EAAI,EACJnO,EAAMsE,KAAKC,IAAIf,EAAI9F,OAAQuD,GACtBT,EAAIQ,EAAOR,EAAIR,EAAKQ,IAAK,CAChC,IAAIyD,EAAIT,EAAIG,WAAWnD,GAAK,GAE5B2N,IAAM,EAIJA,GADElK,GAAK,IAAMA,GAAK,GACbA,EAAI,GAAK,GAGLA,GAAK,IAAMA,GAAK,GACpBA,EAAI,GAAK,GAIL,GAAJA,EAGT,OAAOkK,EAiCT,SAAS+G,EAAW1R,EAAKxC,EAAOC,EAAK0H,GAGnC,IAFA,IAAIwF,EAAI,EACJnO,EAAMsE,KAAKC,IAAIf,EAAI9F,OAAQuD,GACtBT,EAAIQ,EAAOR,EAAIR,EAAKQ,IAAK,CAChC,IAAIyD,EAAIT,EAAIG,WAAWnD,GAAK,GAE5B2N,GAAKxF,EAIHwF,GADElK,GAAK,GACFA,EAAI,GAAK,GAGLA,GAAK,GACTA,EAAI,GAAK,GAITA,EAGT,OAAOkK,EA5MTE,EAAGsG,KAAO,SAAe/F,GACvB,OAAIA,aAAeP,GAIJ,OAARO,GAA+B,iBAARA,GAC5BA,EAAIjS,YAAYqY,WAAa3G,EAAG2G,UAAYxN,MAAMhJ,QAAQoQ,EAAIiG,QAGlExG,EAAGxH,IAAM,SAAcsO,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGT/G,EAAG9J,IAAM,SAAc4Q,EAAMC,GAC3B,OAAID,EAAKE,IAAID,GAAS,EAAUD,EACzBC,GAGT/G,EAAG3R,UAAUqY,MAAQ,SAAeN,EAAQC,EAAMjC,GAChD,GAAsB,iBAAXgC,EACT,OAAOzV,KAAKsW,YAAYb,EAAQC,EAAMjC,GAGxC,GAAsB,iBAAXgC,EACT,OAAOzV,KAAKuW,WAAWd,EAAQC,EAAMjC,GAG1B,QAATiC,IACFA,EAAO,IAET1G,EAAO0G,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,IAGnD,IAAI1T,EAAQ,EACM,OAFlByT,EAASA,EAAOhU,WAAWiL,QAAQ,OAAQ,KAEhC,IACT1K,IAGW,KAAT0T,EACF1V,KAAKwW,UAAUf,EAAQzT,GAEvBhC,KAAKyW,WAAWhB,EAAQC,EAAM1T,GAGd,MAAdyT,EAAO,KACTzV,KAAK4V,SAAW,GAGlB5V,KAAK0W,QAEU,OAAXjD,GAEJzT,KAAKuW,WAAWvW,KAAKwP,UAAWkG,EAAMjC,IAGxCpE,EAAG3R,UAAU4Y,YAAc,SAAsBb,EAAQC,EAAMjC,GACzDgC,EAAS,IACXzV,KAAK4V,SAAW,EAChBH,GAAUA,GAERA,EAAS,UACXzV,KAAK6V,MAAQ,CAAW,SAATJ,GACfzV,KAAKtB,OAAS,GACL+W,EAAS,kBAClBzV,KAAK6V,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,UAEzBzV,KAAKtB,OAAS,IAEdsQ,EAAOyG,EAAS,kBAChBzV,KAAK6V,MAAQ,CACF,SAATJ,EACCA,EAAS,SAAa,SACvB,GAEFzV,KAAKtB,OAAS,GAGD,OAAX+U,GAGJzT,KAAKuW,WAAWvW,KAAKwP,UAAWkG,EAAMjC,IAGxCpE,EAAG3R,UAAU6Y,WAAa,SAAqBd,EAAQC,EAAMjC,GAG3D,GADAzE,EAAgC,iBAAlByG,EAAO/W,QACjB+W,EAAO/W,QAAU,EAGnB,OAFAsB,KAAK6V,MAAQ,CAAE,GACf7V,KAAKtB,OAAS,EACPsB,KAGTA,KAAKtB,OAAS4G,KAAKqR,KAAKlB,EAAO/W,OAAS,GACxCsB,KAAK6V,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BxB,KAAK6V,MAAMrU,GAAK,EAGlB,IAAIoC,EAAGiM,EACH+G,EAAM,EACV,GAAe,OAAXnD,EACF,IAAKjS,EAAIiU,EAAO/W,OAAS,EAAGkF,EAAI,EAAGpC,GAAK,EAAGA,GAAK,EAC9CqO,EAAI4F,EAAOjU,GAAMiU,EAAOjU,EAAI,IAAM,EAAMiU,EAAOjU,EAAI,IAAM,GACzDxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,GAAMiM,IAAO,GAAK+G,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACPhT,UAGC,GAAe,OAAX6P,EACT,IAAKjS,EAAI,EAAGoC,EAAI,EAAGpC,EAAIiU,EAAO/W,OAAQ8C,GAAK,EACzCqO,EAAI4F,EAAOjU,GAAMiU,EAAOjU,EAAI,IAAM,EAAMiU,EAAOjU,EAAI,IAAM,GACzDxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,GAAMiM,IAAO,GAAK+G,EAAQ,UACzCA,GAAO,KACI,KACTA,GAAO,GACPhT,KAIN,OAAO5D,KAAK0W,SA2BdrH,EAAG3R,UAAU8Y,UAAY,SAAoBf,EAAQzT,GAEnDhC,KAAKtB,OAAS4G,KAAKqR,MAAMlB,EAAO/W,OAASsD,GAAS,GAClDhC,KAAK6V,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/BxB,KAAK6V,MAAMrU,GAAK,EAGlB,IAAIoC,EAAGiM,EAEH+G,EAAM,EACV,IAAKpV,EAAIiU,EAAO/W,OAAS,EAAGkF,EAAI,EAAGpC,GAAKQ,EAAOR,GAAK,EAClDqO,EAAIoG,EAASR,EAAQjU,EAAGA,EAAI,GAC5BxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAE9B5W,KAAK6V,MAAMjS,EAAI,IAAMiM,IAAO,GAAK+G,EAAO,SACxCA,GAAO,KACI,KACTA,GAAO,GACPhT,KAGApC,EAAI,IAAMQ,IACZ6N,EAAIoG,EAASR,EAAQzT,EAAOR,EAAI,GAChCxB,KAAK6V,MAAMjS,IAAOiM,GAAK+G,EAAO,SAC9B5W,KAAK6V,MAAMjS,EAAI,IAAMiM,IAAO,GAAK+G,EAAO,SAE1C5W,KAAK0W,SA2BPrH,EAAG3R,UAAU+Y,WAAa,SAAqBhB,EAAQC,EAAM1T,GAE3DhC,KAAK6V,MAAQ,CAAE,GACf7V,KAAKtB,OAAS,EAGd,IAAK,IAAImY,EAAU,EAAGC,EAAU,EAAGA,GAAW,SAAWA,GAAWpB,EAClEmB,IAEFA,IACAC,EAAWA,EAAUpB,EAAQ,EAO7B,IALA,IAAIqB,EAAQtB,EAAO/W,OAASsD,EACxBqO,EAAM0G,EAAQF,EACd5U,EAAMqD,KAAKC,IAAIwR,EAAOA,EAAQ1G,GAAOrO,EAErCoR,EAAO,EACF5R,EAAIQ,EAAOR,EAAIS,EAAKT,GAAKqV,EAChCzD,EAAO8C,EAAUT,EAAQjU,EAAGA,EAAIqV,EAASnB,GAEzC1V,KAAKgX,MAAMF,GACP9W,KAAK6V,MAAM,GAAKzC,EAAO,SACzBpT,KAAK6V,MAAM,IAAMzC,EAEjBpT,KAAKiX,OAAO7D,GAIhB,GAAY,IAAR/C,EAAW,CACb,IAAInG,EAAM,EAGV,IAFAkJ,EAAO8C,EAAUT,EAAQjU,EAAGiU,EAAO/W,OAAQgX,GAEtClU,EAAI,EAAGA,EAAI6O,EAAK7O,IACnB0I,GAAOwL,EAGT1V,KAAKgX,MAAM9M,GACPlK,KAAK6V,MAAM,GAAKzC,EAAO,SACzBpT,KAAK6V,MAAM,IAAMzC,EAEjBpT,KAAKiX,OAAO7D,KAKlB/D,EAAG3R,UAAUwD,KAAO,SAAegW,GACjCA,EAAKrB,MAAQ,IAAIrN,MAAMxI,KAAKtB,QAC5B,IAAK,IAAI8C,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC/B0V,EAAKrB,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAE7B0V,EAAKxY,OAASsB,KAAKtB,OACnBwY,EAAKtB,SAAW5V,KAAK4V,SACrBsB,EAAKpB,IAAM9V,KAAK8V,KAGlBzG,EAAG3R,UAAUyS,MAAQ,WACnB,IAAIhB,EAAI,IAAIE,EAAG,MAEf,OADArP,KAAKkB,KAAKiO,GACHA,GAGTE,EAAG3R,UAAUyZ,QAAU,SAAkBnY,GACvC,KAAOgB,KAAKtB,OAASM,GACnBgB,KAAK6V,MAAM7V,KAAKtB,UAAY,EAE9B,OAAOsB,MAITqP,EAAG3R,UAAUgZ,MAAQ,WACnB,KAAO1W,KAAKtB,OAAS,GAAqC,IAAhCsB,KAAK6V,MAAM7V,KAAKtB,OAAS,IACjDsB,KAAKtB,SAEP,OAAOsB,KAAKoX,aAGd/H,EAAG3R,UAAU0Z,UAAY,WAKvB,OAHoB,IAAhBpX,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,KAClC7V,KAAK4V,SAAW,GAEX5V,MAGTqP,EAAG3R,UAAUkK,QAAU,WACrB,OAAQ5H,KAAK8V,IAAM,UAAY,SAAW9V,KAAKyB,SAAS,IAAM,KAiChE,IAAI4V,EAAQ,CACV,GACA,IACA,KACA,MACA,OACA,QACA,SACA,UACA,WACA,YACA,aACA,cACA,eACA,gBACA,iBACA,kBACA,mBACA,oBACA,qBACA,sBACA,uBACA,wBACA,yBACA,0BACA,2BACA,6BAGEC,EAAa,CACf,EAAG,EACH,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EACvB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAClB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGhBC,EAAa,CACf,EAAG,EACH,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAC5D,SAAU,IAAU,SAAU,SAAU,SAAU,QAAS,SAC3D,SAAU,SAAU,SAAU,SAAU,KAAU,QAAS,QAC3D,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,SACzD,MAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UAsjB9D,SAASC,EAAYC,EAAM7H,EAAKjH,GAC9BA,EAAIiN,SAAWhG,EAAIgG,SAAW6B,EAAK7B,SACnC,IAAI5U,EAAOyW,EAAK/Y,OAASkR,EAAIlR,OAAU,EACvCiK,EAAIjK,OAASsC,EACbA,EAAOA,EAAM,EAAK,EAGlB,IAAIiG,EAAoB,EAAhBwQ,EAAK5B,MAAM,GACfpT,EAAmB,EAAfmN,EAAIiG,MAAM,GACd1G,EAAIlI,EAAIxE,EAER0C,EAAS,SAAJgK,EACL4F,EAAS5F,EAAI,SAAa,EAC9BxG,EAAIkN,MAAM,GAAK1Q,EAEf,IAAK,IAAI+K,EAAI,EAAGA,EAAIlP,EAAKkP,IAAK,CAM5B,IAHA,IAAIwH,EAAS3C,IAAU,GACnB4C,EAAgB,SAAR5C,EACR6C,EAAOtS,KAAKC,IAAI2K,EAAGN,EAAIlR,OAAS,GAC3BkF,EAAI0B,KAAKuC,IAAI,EAAGqI,EAAIuH,EAAK/Y,OAAS,GAAIkF,GAAKgU,EAAMhU,IAAK,CAC7D,IAAIpC,EAAK0O,EAAItM,EAAK,EAIlB8T,IADAvI,GAFAlI,EAAoB,EAAhBwQ,EAAK5B,MAAMrU,KACfiB,EAAmB,EAAfmN,EAAIiG,MAAMjS,IACF+T,GACG,SAAa,EAC5BA,EAAY,SAAJxI,EAEVxG,EAAIkN,MAAM3F,GAAa,EAARyH,EACf5C,EAAiB,EAAT2C,EAQV,OANc,IAAV3C,EACFpM,EAAIkN,MAAM3F,GAAa,EAAR6E,EAEfpM,EAAIjK,SAGCiK,EAAI+N,QAzlBbrH,EAAG3R,UAAU+D,SAAW,SAAmBiU,EAAMmC,GAI/C,IAAIlP,EACJ,GAHAkP,EAAoB,EAAVA,GAAe,EAGZ,MAJbnC,EAAOA,GAAQ,KAIa,QAATA,EAAgB,CACjC/M,EAAM,GAGN,IAFA,IAAIiO,EAAM,EACN7B,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIqO,EAAI7P,KAAK6V,MAAMrU,GACf4R,GAA+B,UAArBvD,GAAK+G,EAAO7B,IAAmBtT,SAAS,IAGpDkH,EADY,KADdoM,EAASlF,IAAO,GAAK+G,EAAQ,WACVpV,IAAMxB,KAAKtB,OAAS,EAC/B2Y,EAAM,EAAIjE,EAAK1U,QAAU0U,EAAOzK,EAEhCyK,EAAOzK,GAEfiO,GAAO,IACI,KACTA,GAAO,GACPpV,KAMJ,IAHc,IAAVuT,IACFpM,EAAMoM,EAAMtT,SAAS,IAAMkH,GAEtBA,EAAIjK,OAASmZ,GAAY,GAC9BlP,EAAM,IAAMA,EAKd,OAHsB,IAAlB3I,KAAK4V,WACPjN,EAAM,IAAMA,GAEPA,EAGT,GAAI+M,KAAiB,EAAPA,IAAaA,GAAQ,GAAKA,GAAQ,GAAI,CAElD,IAAIoC,EAAYR,EAAW5B,GAEvBqC,EAAYR,EAAW7B,GAC3B/M,EAAM,GACN,IAAI1D,EAAIjF,KAAKmQ,QAEb,IADAlL,EAAE2Q,SAAW,GACL3Q,EAAE+S,UAAU,CAClB,IAAI7I,EAAIlK,EAAEgT,KAAKF,GAAWtW,SAASiU,GAMjC/M,GALF1D,EAAIA,EAAEiT,MAAMH,IAELC,SAGC7I,EAAIxG,EAFJ0O,EAAMS,EAAY3I,EAAEzQ,QAAUyQ,EAAIxG,EAQ5C,IAHI3I,KAAKgY,WACPrP,EAAM,IAAMA,GAEPA,EAAIjK,OAASmZ,GAAY,GAC9BlP,EAAM,IAAMA,EAKd,OAHsB,IAAlB3I,KAAK4V,WACPjN,EAAM,IAAMA,GAEPA,EAGTqG,GAAO,EAAO,oCAGhBK,EAAG3R,UAAUya,SAAW,WACtB,IAAIzP,EAAM1I,KAAK6V,MAAM,GASrB,OARoB,IAAhB7V,KAAKtB,OACPgK,GAAuB,SAAhB1I,KAAK6V,MAAM,GACO,IAAhB7V,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,GAEzCnN,GAAO,iBAAoC,SAAhB1I,KAAK6V,MAAM,GAC7B7V,KAAKtB,OAAS,GACvBsQ,GAAO,EAAO,8CAEU,IAAlBhP,KAAK4V,UAAmBlN,EAAMA,GAGxC2G,EAAG3R,UAAU6K,OAAS,WACpB,OAAOvI,KAAKyB,SAAS,KAGvB4N,EAAG3R,UAAU0a,SAAW,SAAmB3E,EAAQ/U,GAEjD,OADAsQ,OAAyB,IAAX9Q,GACP8B,KAAKqY,YAAYna,EAAQuV,EAAQ/U,IAG1C2Q,EAAG3R,UAAU8R,QAAU,SAAkBiE,EAAQ/U,GAC/C,OAAOsB,KAAKqY,YAAY7P,MAAOiL,EAAQ/U,IAGzC2Q,EAAG3R,UAAU2a,YAAc,SAAsBC,EAAW7E,EAAQ/U,GAClE,IAAI2B,EAAaL,KAAKK,aAClBkY,EAAY7Z,GAAU4G,KAAKuC,IAAI,EAAGxH,GACtC2O,EAAO3O,GAAckY,EAAW,yCAChCvJ,EAAOuJ,EAAY,EAAG,+BAEtBvY,KAAK0W,QACL,IAGIjU,EAAGjB,EAHH0H,EAA0B,OAAXuK,EACfjO,EAAM,IAAI8S,EAAUC,GAGpBC,EAAIxY,KAAKmQ,QACb,GAAKjH,EAYE,CACL,IAAK1H,EAAI,GAAIgX,EAAER,SAAUxW,IACvBiB,EAAI+V,EAAElI,MAAM,KACZkI,EAAE/H,OAAO,GAETjL,EAAIhE,GAAKiB,EAGX,KAAOjB,EAAI+W,EAAW/W,IACpBgE,EAAIhE,GAAK,MArBM,CAEjB,IAAKA,EAAI,EAAGA,EAAI+W,EAAYlY,EAAYmB,IACtCgE,EAAIhE,GAAK,EAGX,IAAKA,EAAI,GAAIgX,EAAER,SAAUxW,IACvBiB,EAAI+V,EAAElI,MAAM,KACZkI,EAAE/H,OAAO,GAETjL,EAAI+S,EAAY/W,EAAI,GAAKiB,EAe7B,OAAO+C,GAGLF,KAAKmT,MACPpJ,EAAG3R,UAAUgb,WAAa,SAAqB7I,GAC7C,OAAO,GAAKvK,KAAKmT,MAAM5I,IAGzBR,EAAG3R,UAAUgb,WAAa,SAAqB7I,GAC7C,IAAI8I,EAAI9I,EACJV,EAAI,EAiBR,OAhBIwJ,GAAK,OACPxJ,GAAK,GACLwJ,KAAO,IAELA,GAAK,KACPxJ,GAAK,EACLwJ,KAAO,GAELA,GAAK,IACPxJ,GAAK,EACLwJ,KAAO,GAELA,GAAK,IACPxJ,GAAK,EACLwJ,KAAO,GAEFxJ,EAAIwJ,GAIftJ,EAAG3R,UAAUkb,UAAY,SAAoB/I,GAE3C,GAAU,IAANA,EAAS,OAAO,GAEpB,IAAI8I,EAAI9I,EACJV,EAAI,EAoBR,OAnBqB,IAAZ,KAAJwJ,KACHxJ,GAAK,GACLwJ,KAAO,IAEU,IAAV,IAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,GAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,EAAJA,KACHxJ,GAAK,EACLwJ,KAAO,GAES,IAAT,EAAJA,IACHxJ,IAEKA,GAITE,EAAG3R,UAAUsS,UAAY,WACvB,IAAIH,EAAI7P,KAAK6V,MAAM7V,KAAKtB,OAAS,GAC7BwG,EAAKlF,KAAK0Y,WAAW7I,GACzB,OAA2B,IAAnB7P,KAAKtB,OAAS,GAAUwG,GAiBlCmK,EAAG3R,UAAUmb,SAAW,WACtB,GAAI7Y,KAAKgY,SAAU,OAAO,EAG1B,IADA,IAAI7I,EAAI,EACC3N,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIiB,EAAIzC,KAAK4Y,UAAU5Y,KAAK6V,MAAMrU,IAElC,GADA2N,GAAK1M,EACK,KAANA,EAAU,MAEhB,OAAO0M,GAGTE,EAAG3R,UAAU2C,WAAa,WACxB,OAAOiF,KAAKqR,KAAK3W,KAAKgQ,YAAc,IAGtCX,EAAG3R,UAAUob,OAAS,SAAiBC,GACrC,OAAsB,IAAlB/Y,KAAK4V,SACA5V,KAAKgZ,MAAMC,MAAMF,GAAOG,MAAM,GAEhClZ,KAAKmQ,SAGdd,EAAG3R,UAAUyb,SAAW,SAAmBJ,GACzC,OAAI/Y,KAAKoZ,MAAML,EAAQ,GACd/Y,KAAKqZ,KAAKN,GAAOG,MAAM,GAAGI,OAE5BtZ,KAAKmQ,SAGdd,EAAG3R,UAAU6b,MAAQ,WACnB,OAAyB,IAAlBvZ,KAAK4V,UAIdvG,EAAG3R,UAAU8b,IAAM,WACjB,OAAOxZ,KAAKmQ,QAAQmJ,QAGtBjK,EAAG3R,UAAU4b,KAAO,WAKlB,OAJKtZ,KAAKgY,WACRhY,KAAK4V,UAAY,GAGZ5V,MAITqP,EAAG3R,UAAU+b,KAAO,SAAe7J,GACjC,KAAO5P,KAAKtB,OAASkR,EAAIlR,QACvBsB,KAAK6V,MAAM7V,KAAKtB,UAAY,EAG9B,IAAK,IAAI8C,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAC9BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAAKoO,EAAIiG,MAAMrU,GAG5C,OAAOxB,KAAK0W,SAGdrH,EAAG3R,UAAUgc,IAAM,SAAc9J,GAE/B,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAKyZ,KAAK7J,IAInBP,EAAG3R,UAAUic,GAAK,SAAa/J,GAC7B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQuJ,IAAI9J,GAC/CA,EAAIO,QAAQuJ,IAAI1Z,OAGzBqP,EAAG3R,UAAUkc,IAAM,SAAchK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQsJ,KAAK7J,GAChDA,EAAIO,QAAQsJ,KAAKzZ,OAI1BqP,EAAG3R,UAAUmc,MAAQ,SAAgBjK,GAEnC,IAAInN,EAEFA,EADEzC,KAAKtB,OAASkR,EAAIlR,OAChBkR,EAEA5P,KAGN,IAAK,IAAIwB,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAAKoO,EAAIiG,MAAMrU,GAK5C,OAFAxB,KAAKtB,OAAS+D,EAAE/D,OAETsB,KAAK0W,SAGdrH,EAAG3R,UAAUoc,KAAO,SAAelK,GAEjC,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAK6Z,MAAMjK,IAIpBP,EAAG3R,UAAUqc,IAAM,SAAcnK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ2J,KAAKlK,GAChDA,EAAIO,QAAQ2J,KAAK9Z,OAG1BqP,EAAG3R,UAAUsc,KAAO,SAAepK,GACjC,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ0J,MAAMjK,GACjDA,EAAIO,QAAQ0J,MAAM7Z,OAI3BqP,EAAG3R,UAAUuc,MAAQ,SAAgBrK,GAEnC,IAAI3I,EACAxE,EACAzC,KAAKtB,OAASkR,EAAIlR,QACpBuI,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAGN,IAAK,IAAIwB,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5BxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAAKiB,EAAEoT,MAAMrU,GAGvC,GAAIxB,OAASiH,EACX,KAAOzF,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAM5B,OAFAxB,KAAKtB,OAASuI,EAAEvI,OAETsB,KAAK0W,SAGdrH,EAAG3R,UAAUwc,KAAO,SAAetK,GAEjC,OADAZ,EAA0C,IAAlChP,KAAK4V,SAAWhG,EAAIgG,WACrB5V,KAAKia,MAAMrK,IAIpBP,EAAG3R,UAAUyc,IAAM,SAAcvK,GAC/B,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ+J,KAAKtK,GAChDA,EAAIO,QAAQ+J,KAAKla,OAG1BqP,EAAG3R,UAAU0c,KAAO,SAAexK,GACjC,OAAI5P,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQ8J,MAAMrK,GACjDA,EAAIO,QAAQ8J,MAAMja,OAI3BqP,EAAG3R,UAAUub,MAAQ,SAAgBF,GACnC/J,EAAwB,iBAAV+J,GAAsBA,GAAS,GAE7C,IAAIsB,EAAsC,EAAxB/U,KAAKqR,KAAKoC,EAAQ,IAChCuB,EAAWvB,EAAQ,GAGvB/Y,KAAKmX,QAAQkD,GAETC,EAAW,GACbD,IAIF,IAAK,IAAI7Y,EAAI,EAAGA,EAAI6Y,EAAa7Y,IAC/BxB,KAAK6V,MAAMrU,GAAsB,UAAhBxB,KAAK6V,MAAMrU,GAS9B,OALI8Y,EAAW,IACbta,KAAK6V,MAAMrU,IAAMxB,KAAK6V,MAAMrU,GAAM,UAAc,GAAK8Y,GAIhDta,KAAK0W,SAGdrH,EAAG3R,UAAU2b,KAAO,SAAeN,GACjC,OAAO/Y,KAAKmQ,QAAQ8I,MAAMF,IAI5B1J,EAAG3R,UAAU6c,KAAO,SAAeC,EAAKrZ,GACtC6N,EAAsB,iBAARwL,GAAoBA,GAAO,GAEzC,IAAI5D,EAAO4D,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAUjB,OARAxa,KAAKmX,QAAQP,EAAM,GAGjB5W,KAAK6V,MAAMe,GADTzV,EACgBnB,KAAK6V,MAAMe,GAAQ,GAAK6D,EAExBza,KAAK6V,MAAMe,KAAS,GAAK6D,GAGtCza,KAAK0W,SAIdrH,EAAG3R,UAAUgd,KAAO,SAAe9K,GACjC,IAAIT,EAkBAlI,EAAGxE,EAfP,GAAsB,IAAlBzC,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAI7B,OAHA5V,KAAK4V,SAAW,EAChBzG,EAAInP,KAAK2a,KAAK/K,GACd5P,KAAK4V,UAAY,EACV5V,KAAKoX,YAGP,GAAsB,IAAlBpX,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAIpC,OAHAhG,EAAIgG,SAAW,EACfzG,EAAInP,KAAK2a,KAAK/K,GACdA,EAAIgG,SAAW,EACRzG,EAAEiI,YAKPpX,KAAKtB,OAASkR,EAAIlR,QACpBuI,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAIN,IADA,IAAI+U,EAAQ,EACHvT,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAC5B2N,GAAkB,EAAblI,EAAE4O,MAAMrU,KAAwB,EAAbiB,EAAEoT,MAAMrU,IAAUuT,EAC1C/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAChB4F,EAAQ5F,IAAM,GAEhB,KAAiB,IAAV4F,GAAevT,EAAIyF,EAAEvI,OAAQ8C,IAClC2N,GAAkB,EAAblI,EAAE4O,MAAMrU,IAAUuT,EACvB/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAChB4F,EAAQ5F,IAAM,GAIhB,GADAnP,KAAKtB,OAASuI,EAAEvI,OACF,IAAVqW,EACF/U,KAAK6V,MAAM7V,KAAKtB,QAAUqW,EAC1B/U,KAAKtB,cAEA,GAAIuI,IAAMjH,KACf,KAAOwB,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAI5B,OAAOxB,MAITqP,EAAG3R,UAAUkd,IAAM,SAAchL,GAC/B,IAAIpK,EACJ,OAAqB,IAAjBoK,EAAIgG,UAAoC,IAAlB5V,KAAK4V,UAC7BhG,EAAIgG,SAAW,EACfpQ,EAAMxF,KAAKuL,IAAIqE,GACfA,EAAIgG,UAAY,EACTpQ,GACmB,IAAjBoK,EAAIgG,UAAoC,IAAlB5V,KAAK4V,UACpC5V,KAAK4V,SAAW,EAChBpQ,EAAMoK,EAAIrE,IAAIvL,MACdA,KAAK4V,SAAW,EACTpQ,GAGLxF,KAAKtB,OAASkR,EAAIlR,OAAesB,KAAKmQ,QAAQuK,KAAK9K,GAEhDA,EAAIO,QAAQuK,KAAK1a,OAI1BqP,EAAG3R,UAAUid,KAAO,SAAe/K,GAEjC,GAAqB,IAAjBA,EAAIgG,SAAgB,CACtBhG,EAAIgG,SAAW,EACf,IAAIzG,EAAInP,KAAK0a,KAAK9K,GAElB,OADAA,EAAIgG,SAAW,EACRzG,EAAEiI,YAGJ,GAAsB,IAAlBpX,KAAK4V,SAId,OAHA5V,KAAK4V,SAAW,EAChB5V,KAAK0a,KAAK9K,GACV5P,KAAK4V,SAAW,EACT5V,KAAKoX,YAId,IAWInQ,EAAGxE,EAXH4T,EAAMrW,KAAKqW,IAAIzG,GAGnB,GAAY,IAARyG,EAIF,OAHArW,KAAK4V,SAAW,EAChB5V,KAAKtB,OAAS,EACdsB,KAAK6V,MAAM,GAAK,EACT7V,KAKLqW,EAAM,GACRpP,EAAIjH,KACJyC,EAAImN,IAEJ3I,EAAI2I,EACJnN,EAAIzC,MAIN,IADA,IAAI+U,EAAQ,EACHvT,EAAI,EAAGA,EAAIiB,EAAE/D,OAAQ8C,IAE5BuT,GADA5F,GAAkB,EAAblI,EAAE4O,MAAMrU,KAAwB,EAAbiB,EAAEoT,MAAMrU,IAAUuT,IAC7B,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAElB,KAAiB,IAAV4F,GAAevT,EAAIyF,EAAEvI,OAAQ8C,IAElCuT,GADA5F,GAAkB,EAAblI,EAAE4O,MAAMrU,IAAUuT,IACV,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJ2N,EAIlB,GAAc,IAAV4F,GAAevT,EAAIyF,EAAEvI,QAAUuI,IAAMjH,KACvC,KAAOwB,EAAIyF,EAAEvI,OAAQ8C,IACnBxB,KAAK6V,MAAMrU,GAAKyF,EAAE4O,MAAMrU,GAU5B,OANAxB,KAAKtB,OAAS4G,KAAKuC,IAAI7H,KAAKtB,OAAQ8C,GAEhCyF,IAAMjH,OACRA,KAAK4V,SAAW,GAGX5V,KAAK0W,SAIdrH,EAAG3R,UAAU6N,IAAM,SAAcqE,GAC/B,OAAO5P,KAAKmQ,QAAQwK,KAAK/K,IA+C3B,IAAIiL,EAAc,SAAsBpD,EAAM7H,EAAKjH,GACjD,IAIIxD,EACA2V,EACA5V,EANA+B,EAAIwQ,EAAK5B,MACTpT,EAAImN,EAAIiG,MACRkF,EAAIpS,EAAIkN,MACR5Q,EAAI,EAIJ+V,EAAY,EAAP/T,EAAE,GACPgU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPlU,EAAE,GACPmU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPrU,EAAE,GACPsU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxU,EAAE,GACPyU,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3U,EAAE,GACP4U,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9U,EAAE,GACP+U,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjV,EAAE,GACPkV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPpV,EAAE,GACPqV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPvV,EAAE,GACPwV,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP1V,EAAE,GACP2V,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPra,EAAE,GACPsa,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPxa,EAAE,GACPya,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP3a,EAAE,GACP4a,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAP9a,EAAE,GACP+a,EAAW,KAALD,EACNE,EAAMF,IAAO,GACbG,EAAY,EAAPjb,EAAE,GACPkb,EAAW,KAALD,EACNE,GAAMF,IAAO,GACbG,GAAY,EAAPpb,EAAE,GACPqb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPvb,EAAE,GACPwb,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP1b,EAAE,GACP2b,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAP7b,EAAE,GACP8b,GAAW,KAALD,GACNE,GAAMF,KAAO,GACbG,GAAY,EAAPhc,EAAE,GACPic,GAAW,KAALD,GACNE,GAAMF,KAAO,GAEjB9V,EAAIiN,SAAW6B,EAAK7B,SAAWhG,EAAIgG,SACnCjN,EAAIjK,OAAS,GAMb,IAAIkgB,IAAQ3Z,GAJZE,EAAKG,KAAKuZ,KAAK5D,EAAK8B,IAIE,KAAa,MAFnCjC,GADAA,EAAMxV,KAAKuZ,KAAK5D,EAAK+B,IACR1X,KAAKuZ,KAAK3D,EAAK6B,GAAQ,KAEU,IAAO,EACrD9X,IAFAC,EAAKI,KAAKuZ,KAAK3D,EAAK8B,KAEPlC,IAAQ,IAAO,IAAM8D,KAAO,IAAO,EAChDA,IAAM,SAENzZ,EAAKG,KAAKuZ,KAAKzD,EAAK2B,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKzD,EAAK4B,IACR1X,KAAKuZ,KAAKxD,EAAK0B,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKxD,EAAK2B,GAKpB,IAAI8B,IAAQ7Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKiC,GAAQ,GAIZ,KAAa,MAFnCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKkC,GAAQ,GACvB7X,KAAKuZ,KAAK3D,EAAKgC,GAAQ,KAEU,IAAO,EACrDjY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKiC,GAAQ,IAErBrC,IAAQ,IAAO,IAAMgE,KAAO,IAAO,EAChDA,IAAM,SAEN3Z,EAAKG,KAAKuZ,KAAKtD,EAAKwB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKtD,EAAKyB,IACR1X,KAAKuZ,KAAKrD,EAAKuB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKrD,EAAKwB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK8B,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK+B,GAAQ,GACvB7X,KAAKuZ,KAAKxD,EAAK6B,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK8B,GAAQ,EAKlC,IAAI4B,IAAQ9Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKoC,GAAQ,GAIZ,KAAa,MAFnCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKqC,GAAQ,GACvBhY,KAAKuZ,KAAK3D,EAAKmC,GAAQ,KAEU,IAAO,EACrDpY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKoC,GAAQ,IAErBxC,IAAQ,IAAO,IAAMiE,KAAO,IAAO,EAChDA,IAAM,SAEN5Z,EAAKG,KAAKuZ,KAAKnD,EAAKqB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKnD,EAAKsB,IACR1X,KAAKuZ,KAAKlD,EAAKoB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKlD,EAAKqB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK2B,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK4B,GAAQ,GACvB7X,KAAKuZ,KAAKrD,EAAK0B,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK2B,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKiC,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKkC,GAAQ,GACvBhY,KAAKuZ,KAAKxD,EAAKgC,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKiC,GAAQ,EAKlC,IAAI0B,IAAQ/Z,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKuC,GAAQ,GAIZ,KAAa,MAFnC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKwC,GAAQ,GACvBnY,KAAKuZ,KAAK3D,EAAKsC,GAAQ,KAEU,IAAO,EACrDvY,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKuC,GAAQ,IAErB3C,IAAQ,IAAO,IAAMkE,KAAO,IAAO,EAChDA,IAAM,SAEN7Z,EAAKG,KAAKuZ,KAAKhD,EAAKkB,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKhD,EAAKmB,IACR1X,KAAKuZ,KAAK/C,EAAKiB,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAK/C,EAAKkB,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKwB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKyB,GAAQ,GACvB7X,KAAKuZ,KAAKlD,EAAKuB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKwB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK8B,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK+B,GAAQ,GACvBhY,KAAKuZ,KAAKrD,EAAK6B,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK8B,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKoC,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKqC,GAAQ,GACvBnY,KAAKuZ,KAAKxD,EAAKmC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKoC,GAAQ,EAKlC,IAAIwB,IAAQha,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAK0C,GAAQ,GAIZ,KAAa,MAFnC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK2C,IAAQ,GACvBtY,KAAKuZ,KAAK3D,EAAKyC,GAAQ,KAEU,IAAO,EACrD1Y,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAK0C,IAAQ,IAErB9C,IAAQ,IAAO,IAAMmE,KAAO,IAAO,EAChDA,IAAM,SAEN9Z,EAAKG,KAAKuZ,KAAK7C,EAAKe,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAK7C,EAAKgB,IACR1X,KAAKuZ,KAAK5C,EAAKc,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAK5C,EAAKe,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKqB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKsB,GAAQ,GACvB7X,KAAKuZ,KAAK/C,EAAKoB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKqB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK2B,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK4B,GAAQ,GACvBhY,KAAKuZ,KAAKlD,EAAK0B,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK2B,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKiC,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKkC,GAAQ,GACvBnY,KAAKuZ,KAAKrD,EAAKgC,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKiC,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKuC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKwC,IAAQ,GACvBtY,KAAKuZ,KAAKxD,EAAKsC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKuC,IAAQ,EAKlC,IAAIsB,IAAQja,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAK6C,IAAQ,GAIZ,KAAa,MAFnChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK8C,IAAQ,GACvBzY,KAAKuZ,KAAK3D,EAAK4C,IAAQ,KAEU,IAAO,EACrD7Y,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAK6C,IAAQ,IAErBjD,IAAQ,IAAO,IAAMoE,KAAO,IAAO,EAChDA,IAAM,SAEN/Z,EAAKG,KAAKuZ,KAAK1C,EAAKY,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAK1C,EAAKa,IACR1X,KAAKuZ,KAAKzC,EAAKW,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKzC,EAAKY,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKkB,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKmB,GAAQ,GACvB7X,KAAKuZ,KAAK5C,EAAKiB,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKkB,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKwB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKyB,GAAQ,GACvBhY,KAAKuZ,KAAK/C,EAAKuB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKwB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK8B,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK+B,GAAQ,GACvBnY,KAAKuZ,KAAKlD,EAAK6B,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK8B,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKoC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKqC,IAAQ,GACvBtY,KAAKuZ,KAAKrD,EAAKmC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKoC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK0C,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK2C,IAAQ,GACvBzY,KAAKuZ,KAAKxD,EAAKyC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK0C,IAAQ,EAKlC,IAAIoB,IAAQla,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKgD,IAAQ,GAIZ,KAAa,MAFnCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKiD,IAAQ,GACvB5Y,KAAKuZ,KAAK3D,EAAK+C,IAAQ,KAEU,IAAO,EACrDhZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKgD,IAAQ,IAErBpD,IAAQ,IAAO,IAAMqE,KAAO,IAAO,EAChDA,IAAM,SAENha,EAAKG,KAAKuZ,KAAKvC,EAAKS,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKvC,EAAKU,IACR1X,KAAKuZ,KAAKtC,EAAKQ,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKtC,EAAKS,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKe,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKgB,GAAQ,GACvB7X,KAAKuZ,KAAKzC,EAAKc,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKe,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKqB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKsB,GAAQ,GACvBhY,KAAKuZ,KAAK5C,EAAKoB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKqB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK2B,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK4B,GAAQ,GACvBnY,KAAKuZ,KAAK/C,EAAK0B,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK2B,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKiC,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKkC,IAAQ,GACvBtY,KAAKuZ,KAAKlD,EAAKgC,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKiC,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKuC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKwC,IAAQ,GACvBzY,KAAKuZ,KAAKrD,EAAKsC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKuC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAK6C,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAK8C,IAAQ,GACvB5Y,KAAKuZ,KAAKxD,EAAK4C,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAK6C,IAAQ,EAKlC,IAAIkB,IAAQna,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKmD,IAAQ,GAIZ,KAAa,MAFnCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKoD,IAAQ,GACvB/Y,KAAKuZ,KAAK3D,EAAKkD,IAAQ,KAEU,IAAO,EACrDnZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKmD,IAAQ,IAErBvD,IAAQ,IAAO,IAAMsE,KAAO,IAAO,EAChDA,IAAM,SAENja,EAAKG,KAAKuZ,KAAKpC,EAAKM,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKpC,EAAKO,IACR1X,KAAKuZ,KAAKnC,EAAKK,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKnC,EAAKM,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKY,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKa,GAAQ,GACvB7X,KAAKuZ,KAAKtC,EAAKW,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKY,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKkB,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKmB,GAAQ,GACvBhY,KAAKuZ,KAAKzC,EAAKiB,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKkB,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKwB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKyB,GAAQ,GACvBnY,KAAKuZ,KAAK5C,EAAKuB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKwB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK8B,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK+B,IAAQ,GACvBtY,KAAKuZ,KAAK/C,EAAK6B,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK8B,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKoC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKqC,IAAQ,GACvBzY,KAAKuZ,KAAKlD,EAAKmC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKoC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK0C,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK2C,IAAQ,GACvB5Y,KAAKuZ,KAAKrD,EAAKyC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK0C,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKgD,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKiD,IAAQ,GACvB/Y,KAAKuZ,KAAKxD,EAAK+C,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKgD,IAAQ,EAKlC,IAAIgB,IAAQpa,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKsD,IAAQ,GAIZ,KAAa,MAFnCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAKuD,IAAQ,GACvBlZ,KAAKuZ,KAAK3D,EAAKqD,IAAQ,KAEU,IAAO,EACrDtZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKsD,IAAQ,IAErB1D,IAAQ,IAAO,IAAMuE,KAAO,IAAO,EAChDA,IAAM,SAENla,EAAKG,KAAKuZ,KAAKjC,EAAKG,GAEpBjC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKI,IACR1X,KAAKuZ,KAAKhC,EAAKE,GAAQ,EACpC7X,EAAKI,KAAKuZ,KAAKhC,EAAKG,GACpB7X,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKS,GAAQ,EAElCpC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKU,GAAQ,GACvB7X,KAAKuZ,KAAKnC,EAAKQ,GAAQ,EACpChY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKS,GAAQ,EAClChY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKe,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKgB,GAAQ,GACvBhY,KAAKuZ,KAAKtC,EAAKc,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKe,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKqB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKsB,GAAQ,GACvBnY,KAAKuZ,KAAKzC,EAAKoB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKqB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK2B,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK4B,IAAQ,GACvBtY,KAAKuZ,KAAK5C,EAAK0B,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK2B,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKiC,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKkC,IAAQ,GACvBzY,KAAKuZ,KAAK/C,EAAKgC,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKiC,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKuC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKwC,IAAQ,GACvB5Y,KAAKuZ,KAAKlD,EAAKsC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKuC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAK6C,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAK8C,IAAQ,GACvB/Y,KAAKuZ,KAAKrD,EAAK4C,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAK6C,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKmD,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKoD,IAAQ,GACvBlZ,KAAKuZ,KAAKxD,EAAKkD,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKmD,IAAQ,EAKlC,IAAIc,IAAQra,GAJZE,EAAMA,EAAKG,KAAKuZ,KAAK5D,EAAKyD,IAAQ,GAIZ,KAAa,MAFnC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK5D,EAAK0D,IAAQ,GACvBrZ,KAAKuZ,KAAK3D,EAAKwD,IAAQ,KAEU,IAAO,EACrDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK3D,EAAKyD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMwE,KAAO,IAAO,EAChDA,IAAM,SAENna,EAAKG,KAAKuZ,KAAKjC,EAAKM,GAEpBpC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKO,IACR7X,KAAKuZ,KAAKhC,EAAKK,GAAQ,EACpChY,EAAKI,KAAKuZ,KAAKhC,EAAKM,GACpBhY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKY,GAAQ,EAElCvC,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKa,GAAQ,GACvBhY,KAAKuZ,KAAKnC,EAAKW,GAAQ,EACpCnY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKY,GAAQ,EAClCnY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKkB,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKmB,GAAQ,GACvBnY,KAAKuZ,KAAKtC,EAAKiB,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKkB,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKwB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKyB,IAAQ,GACvBtY,KAAKuZ,KAAKzC,EAAKuB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKwB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK8B,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK+B,IAAQ,GACvBzY,KAAKuZ,KAAK5C,EAAK6B,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK8B,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKoC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKqC,IAAQ,GACvB5Y,KAAKuZ,KAAK/C,EAAKmC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKoC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK0C,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK2C,IAAQ,GACvB/Y,KAAKuZ,KAAKlD,EAAKyC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK0C,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKgD,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKiD,IAAQ,GACvBlZ,KAAKuZ,KAAKrD,EAAK+C,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKgD,IAAQ,EAKlC,IAAIe,IAASta,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKzD,EAAKsD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKzD,EAAKuD,IAAQ,GACvBrZ,KAAKuZ,KAAKxD,EAAKqD,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKxD,EAAKsD,IAAQ,IAErB7D,IAAQ,IAAO,IAAMyE,KAAQ,IAAO,EACjDA,IAAO,SAEPpa,EAAKG,KAAKuZ,KAAKjC,EAAKS,GAEpBvC,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKU,IACRhY,KAAKuZ,KAAKhC,EAAKQ,GAAQ,EACpCnY,EAAKI,KAAKuZ,KAAKhC,EAAKS,GACpBnY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKe,GAAQ,EAElC1C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKgB,GAAQ,GACvBnY,KAAKuZ,KAAKnC,EAAKc,GAAQ,EACpCtY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKe,GAAQ,EAClCtY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKqB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKsB,IAAQ,GACvBtY,KAAKuZ,KAAKtC,EAAKoB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKqB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAK2B,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAK4B,IAAQ,GACvBzY,KAAKuZ,KAAKzC,EAAK0B,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAK2B,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKiC,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKkC,IAAQ,GACvB5Y,KAAKuZ,KAAK5C,EAAKgC,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKiC,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAKuC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAKwC,IAAQ,GACvB/Y,KAAKuZ,KAAK/C,EAAKsC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAKuC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAK6C,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAK8C,IAAQ,GACvBlZ,KAAKuZ,KAAKlD,EAAK4C,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAK6C,IAAQ,EAKlC,IAAIgB,IAASva,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKtD,EAAKmD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKtD,EAAKoD,IAAQ,GACvBrZ,KAAKuZ,KAAKrD,EAAKkD,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKrD,EAAKmD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM0E,KAAQ,IAAO,EACjDA,IAAO,SAEPra,EAAKG,KAAKuZ,KAAKjC,EAAKY,GAEpB1C,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKa,IACRnY,KAAKuZ,KAAKhC,EAAKW,GAAQ,EACpCtY,EAAKI,KAAKuZ,KAAKhC,EAAKY,GACpBtY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKkB,GAAQ,EAElC7C,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKmB,IAAQ,GACvBtY,KAAKuZ,KAAKnC,EAAKiB,GAAQ,EACpCzY,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKkB,IAAQ,EAClCzY,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKwB,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKyB,IAAQ,GACvBzY,KAAKuZ,KAAKtC,EAAKuB,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKwB,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAK8B,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAK+B,IAAQ,GACvB5Y,KAAKuZ,KAAKzC,EAAK6B,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAK8B,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKoC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKqC,IAAQ,GACvB/Y,KAAKuZ,KAAK5C,EAAKmC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKoC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK0C,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK2C,IAAQ,GACvBlZ,KAAKuZ,KAAK/C,EAAKyC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK0C,IAAQ,EAKlC,IAAIiB,IAASxa,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKnD,EAAKgD,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKnD,EAAKiD,IAAQ,GACvBrZ,KAAKuZ,KAAKlD,EAAK+C,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKlD,EAAKgD,IAAQ,IAErB7D,IAAQ,IAAO,IAAM2E,KAAQ,IAAO,EACjDA,IAAO,SAEPta,EAAKG,KAAKuZ,KAAKjC,EAAKe,GAEpB7C,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKgB,KACRtY,KAAKuZ,KAAKhC,EAAKc,GAAQ,EACpCzY,EAAKI,KAAKuZ,KAAKhC,EAAKe,IACpBzY,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKqB,IAAQ,EAElChD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKsB,IAAQ,GACvBzY,KAAKuZ,KAAKnC,EAAKoB,IAAQ,EACpC5Y,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKqB,IAAQ,EAClC5Y,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAK2B,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAK4B,IAAQ,GACvB5Y,KAAKuZ,KAAKtC,EAAK0B,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAK2B,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKiC,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKkC,IAAQ,GACvB/Y,KAAKuZ,KAAKzC,EAAKgC,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKiC,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAKuC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAKwC,IAAQ,GACvBlZ,KAAKuZ,KAAK5C,EAAKsC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAKuC,IAAQ,EAKlC,IAAIkB,IAASza,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKhD,EAAK6C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKhD,EAAK8C,IAAQ,GACvBrZ,KAAKuZ,KAAK/C,EAAK4C,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK/C,EAAK6C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM4E,KAAQ,IAAO,EACjDA,IAAO,SAEPva,EAAKG,KAAKuZ,KAAKjC,EAAKkB,IAEpBhD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKmB,KACRzY,KAAKuZ,KAAKhC,EAAKiB,IAAQ,EACpC5Y,EAAKI,KAAKuZ,KAAKhC,EAAKkB,IACpB5Y,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKwB,IAAQ,EAElCnD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKyB,IAAQ,GACvB5Y,KAAKuZ,KAAKnC,EAAKuB,IAAQ,EACpC/Y,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKwB,IAAQ,EAClC/Y,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAK8B,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAK+B,IAAQ,GACvB/Y,KAAKuZ,KAAKtC,EAAK6B,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAK8B,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKoC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKqC,IAAQ,GACvBlZ,KAAKuZ,KAAKzC,EAAKmC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKoC,IAAQ,EAKlC,IAAImB,IAAS1a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAK7C,EAAK0C,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK7C,EAAK2C,IAAQ,GACvBrZ,KAAKuZ,KAAK5C,EAAKyC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAK5C,EAAK0C,IAAQ,IAErB7D,IAAQ,IAAO,IAAM6E,KAAQ,IAAO,EACjDA,IAAO,SAEPxa,EAAKG,KAAKuZ,KAAKjC,EAAKqB,IAEpBnD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKsB,KACR5Y,KAAKuZ,KAAKhC,EAAKoB,IAAQ,EACpC/Y,EAAKI,KAAKuZ,KAAKhC,EAAKqB,IACpB/Y,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAK2B,IAAQ,EAElCtD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAK4B,IAAQ,GACvB/Y,KAAKuZ,KAAKnC,EAAK0B,IAAQ,EACpClZ,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAK2B,IAAQ,EAClClZ,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKiC,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKkC,IAAQ,GACvBlZ,KAAKuZ,KAAKtC,EAAKgC,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKiC,IAAQ,EAKlC,IAAIoB,IAAS3a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAK1C,EAAKuC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAK1C,EAAKwC,IAAQ,GACvBrZ,KAAKuZ,KAAKzC,EAAKsC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKzC,EAAKuC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM8E,KAAQ,IAAO,EACjDA,IAAO,SAEPza,EAAKG,KAAKuZ,KAAKjC,EAAKwB,IAEpBtD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAKyB,KACR/Y,KAAKuZ,KAAKhC,EAAKuB,IAAQ,EACpClZ,EAAKI,KAAKuZ,KAAKhC,EAAKwB,IACpBlZ,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAK8B,IAAQ,EAElCzD,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAK+B,IAAQ,GACvBlZ,KAAKuZ,KAAKnC,EAAK6B,IAAQ,EACpCrZ,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAK8B,IAAQ,EAKlC,IAAIqB,IAAS5a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKvC,EAAKoC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKvC,EAAKqC,IAAQ,GACvBrZ,KAAKuZ,KAAKtC,EAAKmC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKtC,EAAKoC,IAAQ,IAErB7D,IAAQ,IAAO,IAAM+E,KAAQ,IAAO,EACjDA,IAAO,SAEP1a,EAAKG,KAAKuZ,KAAKjC,EAAK2B,IAEpBzD,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAK4B,KACRlZ,KAAKuZ,KAAKhC,EAAK0B,IAAQ,EACpCrZ,EAAKI,KAAKuZ,KAAKhC,EAAK2B,IAKpB,IAAIsB,IAAS7a,GAJbE,EAAMA,EAAKG,KAAKuZ,KAAKpC,EAAKiC,IAAQ,GAIX,KAAa,MAFpC5D,GADAA,EAAOA,EAAMxV,KAAKuZ,KAAKpC,EAAKkC,IAAQ,GACvBrZ,KAAKuZ,KAAKnC,EAAKgC,IAAQ,KAEW,IAAO,EACtDzZ,IAFAC,EAAMA,EAAKI,KAAKuZ,KAAKnC,EAAKiC,IAAQ,IAErB7D,IAAQ,IAAO,IAAMgF,KAAQ,IAAO,EACjDA,IAAO,SAMP,IAAIC,IAAS9a,GAJbE,EAAKG,KAAKuZ,KAAKjC,EAAK8B,KAIG,KAAa,MAFpC5D,GADAA,EAAMxV,KAAKuZ,KAAKjC,EAAK+B,KACRrZ,KAAKuZ,KAAKhC,EAAK6B,IAAQ,KAEW,IAAO,EA0BtD,OAzBAzZ,IAFAC,EAAKI,KAAKuZ,KAAKhC,EAAK8B,MAEP7D,IAAQ,IAAO,IAAMiF,KAAQ,IAAO,EACjDA,IAAO,SACPhF,EAAE,GAAK6D,GACP7D,EAAE,GAAK+D,GACP/D,EAAE,GAAKgE,GACPhE,EAAE,GAAKiE,GACPjE,EAAE,GAAKkE,GACPlE,EAAE,GAAKmE,GACPnE,EAAE,GAAKoE,GACPpE,EAAE,GAAKqE,GACPrE,EAAE,GAAKsE,GACPtE,EAAE,GAAKuE,GACPvE,EAAE,IAAMwE,GACRxE,EAAE,IAAMyE,GACRzE,EAAE,IAAM0E,GACR1E,EAAE,IAAM2E,GACR3E,EAAE,IAAM4E,GACR5E,EAAE,IAAM6E,GACR7E,EAAE,IAAM8E,GACR9E,EAAE,IAAM+E,GACR/E,EAAE,IAAMgF,GACE,IAAN9a,IACF8V,EAAE,IAAM9V,EACR0D,EAAIjK,UAECiK,GAiDT,SAASqX,EAAYvI,EAAM7H,EAAKjH,GAE9B,OADW,IAAIsX,GACHC,KAAKzI,EAAM7H,EAAKjH,GAsB9B,SAASsX,EAAM/Y,EAAGC,GAChBnH,KAAKkH,EAAIA,EACTlH,KAAKmH,EAAIA,EAvEN7B,KAAKuZ,OACRhE,EAAcrD,GAiDhBnI,EAAG3R,UAAUyiB,MAAQ,SAAgBvQ,EAAKjH,GACxC,IACI3H,EAAMhB,KAAKtB,OAASkR,EAAIlR,OAW5B,OAVoB,KAAhBsB,KAAKtB,QAAgC,KAAfkR,EAAIlR,OACtBmc,EAAY7a,KAAM4P,EAAKjH,GACpB3H,EAAM,GACTwW,EAAWxX,KAAM4P,EAAKjH,GACnB3H,EAAM,KArDnB,SAAmByW,EAAM7H,EAAKjH,GAC5BA,EAAIiN,SAAWhG,EAAIgG,SAAW6B,EAAK7B,SACnCjN,EAAIjK,OAAS+Y,EAAK/Y,OAASkR,EAAIlR,OAI/B,IAFA,IAAIqW,EAAQ,EACRqL,EAAU,EACLlQ,EAAI,EAAGA,EAAIvH,EAAIjK,OAAS,EAAGwR,IAAK,CAGvC,IAAIwH,EAAS0I,EACbA,EAAU,EAGV,IAFA,IAAIzI,EAAgB,SAAR5C,EACR6C,EAAOtS,KAAKC,IAAI2K,EAAGN,EAAIlR,OAAS,GAC3BkF,EAAI0B,KAAKuC,IAAI,EAAGqI,EAAIuH,EAAK/Y,OAAS,GAAIkF,GAAKgU,EAAMhU,IAAK,CAC7D,IAAIpC,EAAI0O,EAAItM,EAGRuL,GAFoB,EAAhBsI,EAAK5B,MAAMrU,KACI,EAAfoO,EAAIiG,MAAMjS,IAGduB,EAAS,SAAJgK,EAGTwI,EAAa,UADbxS,EAAMA,EAAKwS,EAAS,GAIpByI,IAFA1I,GAHAA,EAAUA,GAAWvI,EAAI,SAAa,GAAM,IAGxBhK,IAAO,IAAO,KAEZ,GACtBuS,GAAU,SAEZ/O,EAAIkN,MAAM3F,GAAKyH,EACf5C,EAAQ2C,EACRA,EAAS0I,EAQX,OANc,IAAVrL,EACFpM,EAAIkN,MAAM3F,GAAK6E,EAEfpM,EAAIjK,SAGCiK,EAAI+N,QAgBH2J,CAASrgB,KAAM4P,EAAKjH,GAEpBqX,EAAWhgB,KAAM4P,EAAKjH,IAchCsX,EAAKviB,UAAU4iB,QAAU,SAAkBC,GAGzC,IAFA,IAAI5H,EAAI,IAAInQ,MAAM+X,GACdlT,EAAIgC,EAAG3R,UAAUgb,WAAW6H,GAAK,EAC5B/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrBmX,EAAEnX,GAAKxB,KAAKwgB,OAAOhf,EAAG6L,EAAGkT,GAG3B,OAAO5H,GAITsH,EAAKviB,UAAU8iB,OAAS,SAAiBtZ,EAAGmG,EAAGkT,GAC7C,GAAU,IAANrZ,GAAWA,IAAMqZ,EAAI,EAAG,OAAOrZ,EAGnC,IADA,IAAIuZ,EAAK,EACAjf,EAAI,EAAGA,EAAI6L,EAAG7L,IACrBif,IAAW,EAAJvZ,IAAWmG,EAAI7L,EAAI,EAC1B0F,IAAM,EAGR,OAAOuZ,GAKTR,EAAKviB,UAAUgjB,QAAU,SAAkBC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GACpE,IAAK,IAAI/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrBsf,EAAKtf,GAAKof,EAAID,EAAInf,IAClBuf,EAAKvf,GAAKqf,EAAIF,EAAInf,KAItBye,EAAKviB,UAAUsjB,UAAY,SAAoBJ,EAAKC,EAAKC,EAAMC,EAAMR,EAAGI,GACtE3gB,KAAK0gB,QAAQC,EAAKC,EAAKC,EAAKC,EAAMC,EAAMR,GAExC,IAAK,IAAIU,EAAI,EAAGA,EAAIV,EAAGU,IAAM,EAM3B,IALA,IAAI5T,EAAI4T,GAAK,EAETC,EAAQ5b,KAAK6b,IAAI,EAAI7b,KAAK8b,GAAK/T,GAC/BgU,EAAQ/b,KAAKgc,IAAI,EAAIhc,KAAK8b,GAAK/T,GAE1BkG,EAAI,EAAGA,EAAIgN,EAAGhN,GAAKlG,EAI1B,IAHA,IAAIkU,EAASL,EACTM,EAASH,EAEJzd,EAAI,EAAGA,EAAIqd,EAAGrd,IAAK,CAC1B,IAAI6d,EAAKX,EAAKvN,EAAI3P,GACd8d,EAAKX,EAAKxN,EAAI3P,GAEd+d,EAAKb,EAAKvN,EAAI3P,EAAIqd,GAClBW,EAAKb,EAAKxN,EAAI3P,EAAIqd,GAElBY,EAAKN,EAASI,EAAKH,EAASI,EAEhCA,EAAKL,EAASK,EAAKJ,EAASG,EAC5BA,EAAKE,EAELf,EAAKvN,EAAI3P,GAAK6d,EAAKE,EACnBZ,EAAKxN,EAAI3P,GAAK8d,EAAKE,EAEnBd,EAAKvN,EAAI3P,EAAIqd,GAAKQ,EAAKE,EACvBZ,EAAKxN,EAAI3P,EAAIqd,GAAKS,EAAKE,EAGnBhe,IAAMyJ,IACRwU,EAAKX,EAAQK,EAASF,EAAQG,EAE9BA,EAASN,EAAQM,EAASH,EAAQE,EAClCA,EAASM,KAOnB5B,EAAKviB,UAAUokB,YAAc,SAAsBpf,EAAGC,GACpD,IAAI4d,EAAqB,EAAjBjb,KAAKuC,IAAIlF,EAAGD,GAChBqf,EAAU,EAAJxB,EACN/e,EAAI,EACR,IAAK+e,EAAIA,EAAI,EAAI,EAAGA,EAAGA,KAAU,EAC/B/e,IAGF,OAAO,GAAKA,EAAI,EAAIugB,GAGtB9B,EAAKviB,UAAUskB,UAAY,SAAoBpB,EAAKC,EAAKN,GACvD,KAAIA,GAAK,GAET,IAAK,IAAI/e,EAAI,EAAGA,EAAI+e,EAAI,EAAG/e,IAAK,CAC9B,IAAImX,EAAIiI,EAAIpf,GAEZof,EAAIpf,GAAKof,EAAIL,EAAI/e,EAAI,GACrBof,EAAIL,EAAI/e,EAAI,GAAKmX,EAEjBA,EAAIkI,EAAIrf,GAERqf,EAAIrf,IAAMqf,EAAIN,EAAI/e,EAAI,GACtBqf,EAAIN,EAAI/e,EAAI,IAAMmX,IAItBsH,EAAKviB,UAAUukB,aAAe,SAAuBhS,EAAIsQ,GAEvD,IADA,IAAIxL,EAAQ,EACHvT,EAAI,EAAGA,EAAI+e,EAAI,EAAG/e,IAAK,CAC9B,IAAIqO,EAAoC,KAAhCvK,KAAK4c,MAAMjS,EAAG,EAAIzO,EAAI,GAAK+e,GACjCjb,KAAK4c,MAAMjS,EAAG,EAAIzO,GAAK+e,GACvBxL,EAEF9E,EAAGzO,GAAS,SAAJqO,EAGNkF,EADElF,EAAI,SACE,EAEAA,EAAI,SAAY,EAI5B,OAAOI,GAGTgQ,EAAKviB,UAAUykB,WAAa,SAAqBlS,EAAIjP,EAAK4f,EAAKL,GAE7D,IADA,IAAIxL,EAAQ,EACHvT,EAAI,EAAGA,EAAIR,EAAKQ,IACvBuT,GAAyB,EAAR9E,EAAGzO,GAEpBof,EAAI,EAAIpf,GAAa,KAARuT,EAAgBA,KAAkB,GAC/C6L,EAAI,EAAIpf,EAAI,GAAa,KAARuT,EAAgBA,KAAkB,GAIrD,IAAKvT,EAAI,EAAIR,EAAKQ,EAAI+e,IAAK/e,EACzBof,EAAIpf,GAAK,EAGXwN,EAAiB,IAAV+F,GACP/F,EAA6B,KAAb,KAAR+F,KAGVkL,EAAKviB,UAAU0kB,KAAO,SAAe7B,GAEnC,IADA,IAAI8B,EAAK,IAAI7Z,MAAM+X,GACV/e,EAAI,EAAGA,EAAI+e,EAAG/e,IACrB6gB,EAAG7gB,GAAK,EAGV,OAAO6gB,GAGTpC,EAAKviB,UAAUwiB,KAAO,SAAehZ,EAAGC,EAAGwB,GACzC,IAAI4X,EAAI,EAAIvgB,KAAK8hB,YAAY5a,EAAExI,OAAQyI,EAAEzI,QAErCiiB,EAAM3gB,KAAKsgB,QAAQC,GAEnB+B,EAAItiB,KAAKoiB,KAAK7B,GAEdK,EAAM,IAAIpY,MAAM+X,GAChBgC,EAAO,IAAI/Z,MAAM+X,GACjBiC,EAAO,IAAIha,MAAM+X,GAEjBkC,EAAO,IAAIja,MAAM+X,GACjBmC,EAAQ,IAAIla,MAAM+X,GAClBoC,EAAQ,IAAIna,MAAM+X,GAElBqC,EAAOja,EAAIkN,MACf+M,EAAKlkB,OAAS6hB,EAEdvgB,KAAKmiB,WAAWjb,EAAE2O,MAAO3O,EAAExI,OAAQkiB,EAAKL,GACxCvgB,KAAKmiB,WAAWhb,EAAE0O,MAAO1O,EAAEzI,OAAQ+jB,EAAMlC,GAEzCvgB,KAAKghB,UAAUJ,EAAK0B,EAAGC,EAAMC,EAAMjC,EAAGI,GACtC3gB,KAAKghB,UAAUyB,EAAMH,EAAGI,EAAOC,EAAOpC,EAAGI,GAEzC,IAAK,IAAInf,EAAI,EAAGA,EAAI+e,EAAG/e,IAAK,CAC1B,IAAIqgB,EAAKU,EAAK/gB,GAAKkhB,EAAMlhB,GAAKghB,EAAKhhB,GAAKmhB,EAAMnhB,GAC9CghB,EAAKhhB,GAAK+gB,EAAK/gB,GAAKmhB,EAAMnhB,GAAKghB,EAAKhhB,GAAKkhB,EAAMlhB,GAC/C+gB,EAAK/gB,GAAKqgB,EAUZ,OAPA7hB,KAAKgiB,UAAUO,EAAMC,EAAMjC,GAC3BvgB,KAAKghB,UAAUuB,EAAMC,EAAMI,EAAMN,EAAG/B,EAAGI,GACvC3gB,KAAKgiB,UAAUY,EAAMN,EAAG/B,GACxBvgB,KAAKiiB,aAAaW,EAAMrC,GAExB5X,EAAIiN,SAAW1O,EAAE0O,SAAWzO,EAAEyO,SAC9BjN,EAAIjK,OAASwI,EAAExI,OAASyI,EAAEzI,OACnBiK,EAAI+N,SAIbrH,EAAG3R,UAAUiM,IAAM,SAAciG,GAC/B,IAAIjH,EAAM,IAAI0G,EAAG,MAEjB,OADA1G,EAAIkN,MAAQ,IAAIrN,MAAMxI,KAAKtB,OAASkR,EAAIlR,QACjCsB,KAAKmgB,MAAMvQ,EAAKjH,IAIzB0G,EAAG3R,UAAUmlB,KAAO,SAAejT,GACjC,IAAIjH,EAAM,IAAI0G,EAAG,MAEjB,OADA1G,EAAIkN,MAAQ,IAAIrN,MAAMxI,KAAKtB,OAASkR,EAAIlR,QACjCshB,EAAWhgB,KAAM4P,EAAKjH,IAI/B0G,EAAG3R,UAAUmhB,KAAO,SAAejP,GACjC,OAAO5P,KAAKmQ,QAAQgQ,MAAMvQ,EAAK5P,OAGjCqP,EAAG3R,UAAUsZ,MAAQ,SAAgBpH,GACnCZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UAIb,IADA,IAAImF,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACpC,IAAIqO,GAAqB,EAAhB7P,KAAK6V,MAAMrU,IAAUoO,EAC1BzK,GAAU,SAAJ0K,IAA0B,SAARkF,GAC5BA,IAAU,GACVA,GAAUlF,EAAI,SAAa,EAE3BkF,GAAS5P,IAAO,GAChBnF,KAAK6V,MAAMrU,GAAU,SAAL2D,EAQlB,OALc,IAAV4P,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAGAsB,MAGTqP,EAAG3R,UAAUolB,KAAO,SAAelT,GACjC,OAAO5P,KAAKmQ,QAAQ6G,MAAMpH,IAI5BP,EAAG3R,UAAUqlB,IAAM,WACjB,OAAO/iB,KAAK2J,IAAI3J,OAIlBqP,EAAG3R,UAAUslB,KAAO,WAClB,OAAOhjB,KAAK6e,KAAK7e,KAAKmQ,UAIxBd,EAAG3R,UAAUwM,IAAM,SAAc0F,GAC/B,IAAIC,EAxxCN,SAAqBD,GAGnB,IAFA,IAAIC,EAAI,IAAIrH,MAAMoH,EAAII,aAEbwK,EAAM,EAAGA,EAAM3K,EAAEnR,OAAQ8b,IAAO,CACvC,IAAI5D,EAAO4D,EAAM,GAAM,EACnBC,EAAOD,EAAM,GAEjB3K,EAAE2K,IAAQ5K,EAAIiG,MAAMe,GAAQ,GAAK6D,KAAWA,EAG9C,OAAO5K,EA8wCCoT,CAAWrT,GACnB,GAAiB,IAAbC,EAAEnR,OAAc,OAAO,IAAI2Q,EAAG,GAIlC,IADA,IAAI7J,EAAMxF,KACDwB,EAAI,EAAGA,EAAIqO,EAAEnR,QACP,IAATmR,EAAErO,GADsBA,IAAKgE,EAAMA,EAAIud,OAI7C,KAAMvhB,EAAIqO,EAAEnR,OACV,IAAK,IAAI8Z,EAAIhT,EAAIud,MAAOvhB,EAAIqO,EAAEnR,OAAQ8C,IAAKgX,EAAIA,EAAEuK,MAClC,IAATlT,EAAErO,KAENgE,EAAMA,EAAImE,IAAI6O,IAIlB,OAAOhT,GAIT6J,EAAG3R,UAAUwlB,OAAS,SAAiBpT,GACrCd,EAAuB,iBAATc,GAAqBA,GAAQ,GAC3C,IAGItO,EAHA2N,EAAIW,EAAO,GACXmR,GAAKnR,EAAOX,GAAK,GACjBgU,EAAa,WAAe,GAAKhU,GAAQ,GAAKA,EAGlD,GAAU,IAANA,EAAS,CACX,IAAI4F,EAAQ,EAEZ,IAAKvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAAK,CAChC,IAAI4hB,EAAWpjB,KAAK6V,MAAMrU,GAAK2hB,EAC3Ble,GAAsB,EAAhBjF,KAAK6V,MAAMrU,IAAU4hB,GAAajU,EAC5CnP,KAAK6V,MAAMrU,GAAKyD,EAAI8P,EACpBA,EAAQqO,IAAc,GAAKjU,EAGzB4F,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAIT,GAAU,IAANuiB,EAAS,CACX,IAAKzf,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAChCxB,KAAK6V,MAAMrU,EAAIyf,GAAKjhB,KAAK6V,MAAMrU,GAGjC,IAAKA,EAAI,EAAGA,EAAIyf,EAAGzf,IACjBxB,KAAK6V,MAAMrU,GAAK,EAGlBxB,KAAKtB,QAAUuiB,EAGjB,OAAOjhB,KAAK0W,SAGdrH,EAAG3R,UAAU2lB,MAAQ,SAAgBvT,GAGnC,OADAd,EAAyB,IAAlBhP,KAAK4V,UACL5V,KAAKkjB,OAAOpT,IAMrBT,EAAG3R,UAAU+S,OAAS,SAAiBX,EAAMwT,EAAMC,GAEjD,IAAIC,EADJxU,EAAuB,iBAATc,GAAqBA,GAAQ,GAGzC0T,EADEF,GACGA,EAAQA,EAAO,IAAO,GAEvB,EAGN,IAAInU,EAAIW,EAAO,GACXmR,EAAI3b,KAAKC,KAAKuK,EAAOX,GAAK,GAAInP,KAAKtB,QACnC+kB,EAAO,SAAc,WAActU,GAAMA,EACzCuU,EAAcH,EAMlB,GAJAC,GAAKvC,EACLuC,EAAIle,KAAKuC,IAAI,EAAG2b,GAGZE,EAAa,CACf,IAAK,IAAIliB,EAAI,EAAGA,EAAIyf,EAAGzf,IACrBkiB,EAAY7N,MAAMrU,GAAKxB,KAAK6V,MAAMrU,GAEpCkiB,EAAYhlB,OAASuiB,EAGvB,GAAU,IAANA,QAEG,GAAIjhB,KAAKtB,OAASuiB,EAEvB,IADAjhB,KAAKtB,QAAUuiB,EACVzf,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAC3BxB,KAAK6V,MAAMrU,GAAKxB,KAAK6V,MAAMrU,EAAIyf,QAGjCjhB,KAAK6V,MAAM,GAAK,EAChB7V,KAAKtB,OAAS,EAGhB,IAAIqW,EAAQ,EACZ,IAAKvT,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,IAAgB,IAAVuT,GAAevT,GAAKgiB,GAAIhiB,IAAK,CAChE,IAAI4R,EAAuB,EAAhBpT,KAAK6V,MAAMrU,GACtBxB,KAAK6V,MAAMrU,GAAMuT,GAAU,GAAK5F,EAAOiE,IAASjE,EAChD4F,EAAQ3B,EAAOqQ,EAajB,OATIC,GAAyB,IAAV3O,IACjB2O,EAAY7N,MAAM6N,EAAYhlB,UAAYqW,GAGxB,IAAhB/U,KAAKtB,SACPsB,KAAK6V,MAAM,GAAK,EAChB7V,KAAKtB,OAAS,GAGTsB,KAAK0W,SAGdrH,EAAG3R,UAAUimB,MAAQ,SAAgB7T,EAAMwT,EAAMC,GAG/C,OADAvU,EAAyB,IAAlBhP,KAAK4V,UACL5V,KAAKyQ,OAAOX,EAAMwT,EAAMC,IAIjClU,EAAG3R,UAAUkmB,KAAO,SAAe9T,GACjC,OAAO9P,KAAKmQ,QAAQkT,MAAMvT,IAG5BT,EAAG3R,UAAUmmB,MAAQ,SAAgB/T,GACnC,OAAO9P,KAAKmQ,QAAQ+S,OAAOpT,IAI7BT,EAAG3R,UAAUomB,KAAO,SAAehU,GACjC,OAAO9P,KAAKmQ,QAAQwT,MAAM7T,IAG5BT,EAAG3R,UAAUqmB,MAAQ,SAAgBjU,GACnC,OAAO9P,KAAKmQ,QAAQM,OAAOX,IAI7BT,EAAG3R,UAAU0b,MAAQ,SAAgBoB,GACnCxL,EAAsB,iBAARwL,GAAoBA,GAAO,GACzC,IAAIrL,EAAIqL,EAAM,GACVyG,GAAKzG,EAAMrL,GAAK,GAChBqJ,EAAI,GAAKrJ,EAGb,QAAInP,KAAKtB,QAAUuiB,OAGXjhB,KAAK6V,MAAMoL,GAELzI,IAIhBnJ,EAAG3R,UAAUsmB,OAAS,SAAiBlU,GACrCd,EAAuB,iBAATc,GAAqBA,GAAQ,GAC3C,IAAIX,EAAIW,EAAO,GACXmR,GAAKnR,EAAOX,GAAK,GAIrB,GAFAH,EAAyB,IAAlBhP,KAAK4V,SAAgB,2CAExB5V,KAAKtB,QAAUuiB,EACjB,OAAOjhB,KAQT,GALU,IAANmP,GACF8R,IAEFjhB,KAAKtB,OAAS4G,KAAKC,IAAI0b,EAAGjhB,KAAKtB,QAErB,IAANyQ,EAAS,CACX,IAAIsU,EAAO,SAAc,WAActU,GAAMA,EAC7CnP,KAAK6V,MAAM7V,KAAKtB,OAAS,IAAM+kB,EAGjC,OAAOzjB,KAAK0W,SAIdrH,EAAG3R,UAAUumB,MAAQ,SAAgBnU,GACnC,OAAO9P,KAAKmQ,QAAQ6T,OAAOlU,IAI7BT,EAAG3R,UAAUwb,MAAQ,SAAgBtJ,GAGnC,OAFAZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UACTA,EAAM,EAAU5P,KAAKwQ,OAAOZ,GAGV,IAAlB5P,KAAK4V,SACa,IAAhB5V,KAAKtB,SAAiC,EAAhBsB,KAAK6V,MAAM,IAAUjG,GAC7C5P,KAAK6V,MAAM,GAAKjG,GAAuB,EAAhB5P,KAAK6V,MAAM,IAClC7V,KAAK4V,SAAW,EACT5V,OAGTA,KAAK4V,SAAW,EAChB5V,KAAKwQ,MAAMZ,GACX5P,KAAK4V,SAAW,EACT5V,MAIFA,KAAKiX,OAAOrH,IAGrBP,EAAG3R,UAAUuZ,OAAS,SAAiBrH,GACrC5P,KAAK6V,MAAM,IAAMjG,EAGjB,IAAK,IAAIpO,EAAI,EAAGA,EAAIxB,KAAKtB,QAAUsB,KAAK6V,MAAMrU,IAAM,SAAWA,IAC7DxB,KAAK6V,MAAMrU,IAAM,SACbA,IAAMxB,KAAKtB,OAAS,EACtBsB,KAAK6V,MAAMrU,EAAI,GAAK,EAEpBxB,KAAK6V,MAAMrU,EAAI,KAKnB,OAFAxB,KAAKtB,OAAS4G,KAAKuC,IAAI7H,KAAKtB,OAAQ8C,EAAI,GAEjCxB,MAITqP,EAAG3R,UAAU8S,MAAQ,SAAgBZ,GAGnC,GAFAZ,EAAsB,iBAARY,GACdZ,EAAOY,EAAM,UACTA,EAAM,EAAG,OAAO5P,KAAKkZ,OAAOtJ,GAEhC,GAAsB,IAAlB5P,KAAK4V,SAIP,OAHA5V,KAAK4V,SAAW,EAChB5V,KAAKkZ,MAAMtJ,GACX5P,KAAK4V,SAAW,EACT5V,KAKT,GAFAA,KAAK6V,MAAM,IAAMjG,EAEG,IAAhB5P,KAAKtB,QAAgBsB,KAAK6V,MAAM,GAAK,EACvC7V,KAAK6V,MAAM,IAAM7V,KAAK6V,MAAM,GAC5B7V,KAAK4V,SAAW,OAGhB,IAAK,IAAIpU,EAAI,EAAGA,EAAIxB,KAAKtB,QAAUsB,KAAK6V,MAAMrU,GAAK,EAAGA,IACpDxB,KAAK6V,MAAMrU,IAAM,SACjBxB,KAAK6V,MAAMrU,EAAI,IAAM,EAIzB,OAAOxB,KAAK0W,SAGdrH,EAAG3R,UAAUwmB,KAAO,SAAetU,GACjC,OAAO5P,KAAKmQ,QAAQ+I,MAAMtJ,IAG5BP,EAAG3R,UAAUymB,KAAO,SAAevU,GACjC,OAAO5P,KAAKmQ,QAAQK,MAAMZ,IAG5BP,EAAG3R,UAAU0mB,KAAO,WAGlB,OAFApkB,KAAK4V,SAAW,EAET5V,MAGTqP,EAAG3R,UAAUsb,IAAM,WACjB,OAAOhZ,KAAKmQ,QAAQiU,QAGtB/U,EAAG3R,UAAU2mB,aAAe,SAAuBzU,EAAKjG,EAAK2a,GAC3D,IACI9iB,EAIAqO,EALA7O,EAAM4O,EAAIlR,OAAS4lB,EAGvBtkB,KAAKmX,QAAQnW,GAGb,IAAI+T,EAAQ,EACZ,IAAKvT,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CAC/BqO,GAA6B,EAAxB7P,KAAK6V,MAAMrU,EAAI8iB,IAAcvP,EAClC,IAAIqB,GAAwB,EAAfxG,EAAIiG,MAAMrU,IAAUmI,EAEjCoL,IADAlF,GAAa,SAARuG,IACS,KAAQA,EAAQ,SAAa,GAC3CpW,KAAK6V,MAAMrU,EAAI8iB,GAAa,SAAJzU,EAE1B,KAAOrO,EAAIxB,KAAKtB,OAAS4lB,EAAO9iB,IAE9BuT,GADAlF,GAA6B,EAAxB7P,KAAK6V,MAAMrU,EAAI8iB,IAAcvP,IACrB,GACb/U,KAAK6V,MAAMrU,EAAI8iB,GAAa,SAAJzU,EAG1B,GAAc,IAAVkF,EAAa,OAAO/U,KAAK0W,QAK7B,IAFA1H,GAAkB,IAAX+F,GACPA,EAAQ,EACHvT,EAAI,EAAGA,EAAIxB,KAAKtB,OAAQ8C,IAE3BuT,GADAlF,IAAsB,EAAhB7P,KAAK6V,MAAMrU,IAAUuT,IACd,GACb/U,KAAK6V,MAAMrU,GAAS,SAAJqO,EAIlB,OAFA7P,KAAK4V,SAAW,EAET5V,KAAK0W,SAGdrH,EAAG3R,UAAU6mB,SAAW,SAAmB3U,EAAK4U,GAC9C,IAAIF,GAAQtkB,KAAKtB,OAASkR,EAAIlR,QAE1BuI,EAAIjH,KAAKmQ,QACT1N,EAAImN,EAGJ6U,EAA8B,EAAxBhiB,EAAEoT,MAAMpT,EAAE/D,OAAS,GAGf,KADd4lB,EAAQ,GADMtkB,KAAK0Y,WAAW+L,MAG5BhiB,EAAIA,EAAEohB,MAAMS,GACZrd,EAAEic,OAAOoB,GACTG,EAA8B,EAAxBhiB,EAAEoT,MAAMpT,EAAE/D,OAAS,IAI3B,IACI8Z,EADA7V,EAAIsE,EAAEvI,OAAS+D,EAAE/D,OAGrB,GAAa,QAAT8lB,EAAgB,EAClBhM,EAAI,IAAInJ,EAAG,OACT3Q,OAASiE,EAAI,EACf6V,EAAE3C,MAAQ,IAAIrN,MAAMgQ,EAAE9Z,QACtB,IAAK,IAAI8C,EAAI,EAAGA,EAAIgX,EAAE9Z,OAAQ8C,IAC5BgX,EAAE3C,MAAMrU,GAAK,EAIjB,IAAIkjB,EAAOzd,EAAEkJ,QAAQkU,aAAa5hB,EAAG,EAAGE,GAClB,IAAlB+hB,EAAK9O,WACP3O,EAAIyd,EACAlM,IACFA,EAAE3C,MAAMlT,GAAK,IAIjB,IAAK,IAAIiB,EAAIjB,EAAI,EAAGiB,GAAK,EAAGA,IAAK,CAC/B,IAAI+gB,EAAmC,UAAL,EAAxB1d,EAAE4O,MAAMpT,EAAE/D,OAASkF,KACE,EAA5BqD,EAAE4O,MAAMpT,EAAE/D,OAASkF,EAAI,IAO1B,IAHA+gB,EAAKrf,KAAKC,IAAKof,EAAKF,EAAO,EAAG,UAE9Bxd,EAAEod,aAAa5hB,EAAGkiB,EAAI/gB,GACA,IAAfqD,EAAE2O,UACP+O,IACA1d,EAAE2O,SAAW,EACb3O,EAAEod,aAAa5hB,EAAG,EAAGmB,GAChBqD,EAAE+Q,WACL/Q,EAAE2O,UAAY,GAGd4C,IACFA,EAAE3C,MAAMjS,GAAK+gB,GAajB,OAVInM,GACFA,EAAE9B,QAEJzP,EAAEyP,QAGW,QAAT8N,GAA4B,IAAVF,GACpBrd,EAAEwJ,OAAO6T,GAGJ,CACLM,IAAKpM,GAAK,KACVnI,IAAKpJ,IAQToI,EAAG3R,UAAUmnB,OAAS,SAAiBjV,EAAK4U,EAAMM,GAGhD,OAFA9V,GAAQY,EAAIoI,UAERhY,KAAKgY,SACA,CACL4M,IAAK,IAAIvV,EAAG,GACZgB,IAAK,IAAIhB,EAAG,IAKM,IAAlBrP,KAAK4V,UAAmC,IAAjBhG,EAAIgG,UAC7BpQ,EAAMxF,KAAKwZ,MAAMqL,OAAOjV,EAAK4U,GAEhB,QAATA,IACFI,EAAMpf,EAAIof,IAAIpL,OAGH,QAATgL,IACFnU,EAAM7K,EAAI6K,IAAImJ,MACVsL,GAA6B,IAAjBzU,EAAIuF,UAClBvF,EAAIqK,KAAK9K,IAIN,CACLgV,IAAKA,EACLvU,IAAKA,IAIa,IAAlBrQ,KAAK4V,UAAmC,IAAjBhG,EAAIgG,UAC7BpQ,EAAMxF,KAAK6kB,OAAOjV,EAAI4J,MAAOgL,GAEhB,QAATA,IACFI,EAAMpf,EAAIof,IAAIpL,OAGT,CACLoL,IAAKA,EACLvU,IAAK7K,EAAI6K,MAI0B,IAAlCrQ,KAAK4V,SAAWhG,EAAIgG,WACvBpQ,EAAMxF,KAAKwZ,MAAMqL,OAAOjV,EAAI4J,MAAOgL,GAEtB,QAATA,IACFnU,EAAM7K,EAAI6K,IAAImJ,MACVsL,GAA6B,IAAjBzU,EAAIuF,UAClBvF,EAAIsK,KAAK/K,IAIN,CACLgV,IAAKpf,EAAIof,IACTvU,IAAKA,IAOLT,EAAIlR,OAASsB,KAAKtB,QAAUsB,KAAKqW,IAAIzG,GAAO,EACvC,CACLgV,IAAK,IAAIvV,EAAG,GACZgB,IAAKrQ,MAKU,IAAf4P,EAAIlR,OACO,QAAT8lB,EACK,CACLI,IAAK5kB,KAAK+kB,KAAKnV,EAAIiG,MAAM,IACzBxF,IAAK,MAII,QAATmU,EACK,CACLI,IAAK,KACLvU,IAAK,IAAIhB,EAAGrP,KAAKiY,KAAKrI,EAAIiG,MAAM,MAI7B,CACL+O,IAAK5kB,KAAK+kB,KAAKnV,EAAIiG,MAAM,IACzBxF,IAAK,IAAIhB,EAAGrP,KAAKiY,KAAKrI,EAAIiG,MAAM,MAI7B7V,KAAKukB,SAAS3U,EAAK4U,GAlF1B,IAAII,EAAKvU,EAAK7K,GAsFhB6J,EAAG3R,UAAUknB,IAAM,SAAchV,GAC/B,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAOgV,KAIxCvV,EAAG3R,UAAU2S,IAAM,SAAcT,GAC/B,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAOS,KAGxChB,EAAG3R,UAAUsnB,KAAO,SAAepV,GACjC,OAAO5P,KAAK6kB,OAAOjV,EAAK,OAAO,GAAMS,KAIvChB,EAAG3R,UAAUunB,SAAW,SAAmBrV,GACzC,IAAIsV,EAAKllB,KAAK6kB,OAAOjV,GAGrB,GAAIsV,EAAG7U,IAAI2H,SAAU,OAAOkN,EAAGN,IAE/B,IAAIvU,EAA0B,IAApB6U,EAAGN,IAAIhP,SAAiBsP,EAAG7U,IAAIsK,KAAK/K,GAAOsV,EAAG7U,IAEpD8U,EAAOvV,EAAImU,MAAM,GACjBqB,EAAKxV,EAAIU,MAAM,GACf+F,EAAMhG,EAAIgG,IAAI8O,GAGlB,OAAI9O,EAAM,GAAY,IAAP+O,GAAoB,IAAR/O,EAAkB6O,EAAGN,IAGrB,IAApBM,EAAGN,IAAIhP,SAAiBsP,EAAGN,IAAIpU,MAAM,GAAK0U,EAAGN,IAAI1L,MAAM,IAGhE7J,EAAG3R,UAAUua,KAAO,SAAerI,GACjCZ,EAAOY,GAAO,UAId,IAHA,IAAI2D,GAAK,GAAK,IAAM3D,EAEhByV,EAAM,EACD7jB,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IACpC6jB,GAAO9R,EAAI8R,GAAuB,EAAhBrlB,KAAK6V,MAAMrU,KAAWoO,EAG1C,OAAOyV,GAIThW,EAAG3R,UAAUwa,MAAQ,SAAgBtI,GACnCZ,EAAOY,GAAO,UAGd,IADA,IAAImF,EAAQ,EACHvT,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACzC,IAAIqO,GAAqB,EAAhB7P,KAAK6V,MAAMrU,IAAkB,SAARuT,EAC9B/U,KAAK6V,MAAMrU,GAAMqO,EAAID,EAAO,EAC5BmF,EAAQlF,EAAID,EAGd,OAAO5P,KAAK0W,SAGdrH,EAAG3R,UAAUqnB,KAAO,SAAenV,GACjC,OAAO5P,KAAKmQ,QAAQ+H,MAAMtI,IAG5BP,EAAG3R,UAAU4nB,KAAO,SAAe/R,GACjCvE,EAAsB,IAAfuE,EAAEqC,UACT5G,GAAQuE,EAAEyE,UAEV,IAAI9Q,EAAIlH,KACJmH,EAAIoM,EAAEpD,QAGRjJ,EADiB,IAAfA,EAAE0O,SACA1O,EAAE8d,KAAKzR,GAEPrM,EAAEiJ,QAaR,IATA,IAAIoV,EAAI,IAAIlW,EAAG,GACXmW,EAAI,IAAInW,EAAG,GAGXoW,EAAI,IAAIpW,EAAG,GACXqW,EAAI,IAAIrW,EAAG,GAEXsW,EAAI,EAEDze,EAAE0e,UAAYze,EAAEye,UACrB1e,EAAEuJ,OAAO,GACTtJ,EAAEsJ,OAAO,KACPkV,EAMJ,IAHA,IAAIE,EAAK1e,EAAEgJ,QACP2V,EAAK5e,EAAEiJ,SAEHjJ,EAAE8Q,UAAU,CAClB,IAAK,IAAIxW,EAAI,EAAGukB,EAAK,EAAyB,IAArB7e,EAAE2O,MAAM,GAAKkQ,IAAavkB,EAAI,KAAMA,EAAGukB,IAAO,GACvE,GAAIvkB,EAAI,EAEN,IADA0F,EAAEuJ,OAAOjP,GACFA,KAAM,IACP+jB,EAAEhV,SAAWiV,EAAEjV,WACjBgV,EAAE7K,KAAKmL,GACPL,EAAE7K,KAAKmL,IAGTP,EAAE9U,OAAO,GACT+U,EAAE/U,OAAO,GAIb,IAAK,IAAI7M,EAAI,EAAGoiB,EAAK,EAAyB,IAArB7e,EAAE0O,MAAM,GAAKmQ,IAAapiB,EAAI,KAAMA,EAAGoiB,IAAO,GACvE,GAAIpiB,EAAI,EAEN,IADAuD,EAAEsJ,OAAO7M,GACFA,KAAM,IACP6hB,EAAElV,SAAWmV,EAAEnV,WACjBkV,EAAE/K,KAAKmL,GACPH,EAAE/K,KAAKmL,IAGTL,EAAEhV,OAAO,GACTiV,EAAEjV,OAAO,GAITvJ,EAAEmP,IAAIlP,IAAM,GACdD,EAAEyT,KAAKxT,GACPoe,EAAE5K,KAAK8K,GACPD,EAAE7K,KAAK+K,KAEPve,EAAEwT,KAAKzT,GACPue,EAAE9K,KAAK4K,GACPG,EAAE/K,KAAK6K,IAIX,MAAO,CACLve,EAAGwe,EACHhjB,EAAGijB,EACHO,IAAK9e,EAAE+b,OAAOyC,KAOlBtW,EAAG3R,UAAUwoB,OAAS,SAAiB3S,GACrCvE,EAAsB,IAAfuE,EAAEqC,UACT5G,GAAQuE,EAAEyE,UAEV,IAAI/Q,EAAIjH,KACJyC,EAAI8Q,EAAEpD,QAGRlJ,EADiB,IAAfA,EAAE2O,SACA3O,EAAE+d,KAAKzR,GAEPtM,EAAEkJ,QAQR,IALA,IAuCI3K,EAvCA2gB,EAAK,IAAI9W,EAAG,GACZ+W,EAAK,IAAI/W,EAAG,GAEZgX,EAAQ5jB,EAAE0N,QAEPlJ,EAAE+J,KAAK,GAAK,GAAKvO,EAAEuO,KAAK,GAAK,GAAG,CACrC,IAAK,IAAIxP,EAAI,EAAGukB,EAAK,EAAyB,IAArB9e,EAAE4O,MAAM,GAAKkQ,IAAavkB,EAAI,KAAMA,EAAGukB,IAAO,GACvE,GAAIvkB,EAAI,EAEN,IADAyF,EAAEwJ,OAAOjP,GACFA,KAAM,GACP2kB,EAAG5V,SACL4V,EAAGzL,KAAK2L,GAGVF,EAAG1V,OAAO,GAId,IAAK,IAAI7M,EAAI,EAAGoiB,EAAK,EAAyB,IAArBvjB,EAAEoT,MAAM,GAAKmQ,IAAapiB,EAAI,KAAMA,EAAGoiB,IAAO,GACvE,GAAIpiB,EAAI,EAEN,IADAnB,EAAEgO,OAAO7M,GACFA,KAAM,GACPwiB,EAAG7V,SACL6V,EAAG1L,KAAK2L,GAGVD,EAAG3V,OAAO,GAIVxJ,EAAEoP,IAAI5T,IAAM,GACdwE,EAAE0T,KAAKlY,GACP0jB,EAAGxL,KAAKyL,KAER3jB,EAAEkY,KAAK1T,GACPmf,EAAGzL,KAAKwL,IAeZ,OATE3gB,EADgB,IAAdyB,EAAE+J,KAAK,GACHmV,EAEAC,GAGApV,KAAK,GAAK,GAChBxL,EAAIkV,KAAKnH,GAGJ/N,GAGT6J,EAAG3R,UAAUuoB,IAAM,SAAcrW,GAC/B,GAAI5P,KAAKgY,SAAU,OAAOpI,EAAIoJ,MAC9B,GAAIpJ,EAAIoI,SAAU,OAAOhY,KAAKgZ,MAE9B,IAAI/R,EAAIjH,KAAKmQ,QACT1N,EAAImN,EAAIO,QACZlJ,EAAE2O,SAAW,EACbnT,EAAEmT,SAAW,EAGb,IAAK,IAAI0O,EAAQ,EAAGrd,EAAE2e,UAAYnjB,EAAEmjB,SAAUtB,IAC5Crd,EAAEwJ,OAAO,GACThO,EAAEgO,OAAO,GAGX,OAAG,CACD,KAAOxJ,EAAE2e,UACP3e,EAAEwJ,OAAO,GAEX,KAAOhO,EAAEmjB,UACPnjB,EAAEgO,OAAO,GAGX,IAAItB,EAAIlI,EAAEoP,IAAI5T,GACd,GAAI0M,EAAI,EAAG,CAET,IAAIwJ,EAAI1R,EACRA,EAAIxE,EACJA,EAAIkW,OACC,GAAU,IAANxJ,GAAyB,IAAd1M,EAAEuO,KAAK,GAC3B,MAGF/J,EAAE0T,KAAKlY,GAGT,OAAOA,EAAEygB,OAAOoB,IAIlBjV,EAAG3R,UAAU4oB,KAAO,SAAe1W,GACjC,OAAO5P,KAAKslB,KAAK1V,GAAK3I,EAAE+d,KAAKpV,IAG/BP,EAAG3R,UAAUkoB,OAAS,WACpB,OAA+B,IAAP,EAAhB5lB,KAAK6V,MAAM,KAGrBxG,EAAG3R,UAAU6S,MAAQ,WACnB,OAA+B,IAAP,EAAhBvQ,KAAK6V,MAAM,KAIrBxG,EAAG3R,UAAU4S,MAAQ,SAAgBV,GACnC,OAAO5P,KAAK6V,MAAM,GAAKjG,GAIzBP,EAAG3R,UAAU6oB,MAAQ,SAAgB/L,GACnCxL,EAAsB,iBAARwL,GACd,IAAIrL,EAAIqL,EAAM,GACVyG,GAAKzG,EAAMrL,GAAK,GAChBqJ,EAAI,GAAKrJ,EAGb,GAAInP,KAAKtB,QAAUuiB,EAGjB,OAFAjhB,KAAKmX,QAAQ8J,EAAI,GACjBjhB,KAAK6V,MAAMoL,IAAMzI,EACVxY,KAKT,IADA,IAAI+U,EAAQyD,EACHhX,EAAIyf,EAAa,IAAVlM,GAAevT,EAAIxB,KAAKtB,OAAQ8C,IAAK,CACnD,IAAIqO,EAAoB,EAAhB7P,KAAK6V,MAAMrU,GAEnBuT,GADAlF,GAAKkF,KACS,GACdlF,GAAK,SACL7P,KAAK6V,MAAMrU,GAAKqO,EAMlB,OAJc,IAAVkF,IACF/U,KAAK6V,MAAMrU,GAAKuT,EAChB/U,KAAKtB,UAEAsB,MAGTqP,EAAG3R,UAAUsa,OAAS,WACpB,OAAuB,IAAhBhY,KAAKtB,QAAkC,IAAlBsB,KAAK6V,MAAM,IAGzCxG,EAAG3R,UAAUsT,KAAO,SAAepB,GACjC,IAOIpK,EAPAoQ,EAAWhG,EAAM,EAErB,GAAsB,IAAlB5P,KAAK4V,WAAmBA,EAAU,OAAQ,EAC9C,GAAsB,IAAlB5V,KAAK4V,UAAkBA,EAAU,OAAO,EAK5C,GAHA5V,KAAK0W,QAGD1W,KAAKtB,OAAS,EAChB8G,EAAM,MACD,CACDoQ,IACFhG,GAAOA,GAGTZ,EAAOY,GAAO,SAAW,qBAEzB,IAAIC,EAAoB,EAAhB7P,KAAK6V,MAAM,GACnBrQ,EAAMqK,IAAMD,EAAM,EAAIC,EAAID,GAAO,EAAI,EAEvC,OAAsB,IAAlB5P,KAAK4V,SAA8B,GAANpQ,EAC1BA,GAOT6J,EAAG3R,UAAU2Y,IAAM,SAAczG,GAC/B,GAAsB,IAAlB5P,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAAgB,OAAQ,EACvD,GAAsB,IAAlB5V,KAAK4V,UAAmC,IAAjBhG,EAAIgG,SAAgB,OAAO,EAEtD,IAAIpQ,EAAMxF,KAAKwmB,KAAK5W,GACpB,OAAsB,IAAlB5P,KAAK4V,SAA8B,GAANpQ,EAC1BA,GAIT6J,EAAG3R,UAAU8oB,KAAO,SAAe5W,GAEjC,GAAI5P,KAAKtB,OAASkR,EAAIlR,OAAQ,OAAO,EACrC,GAAIsB,KAAKtB,OAASkR,EAAIlR,OAAQ,OAAQ,EAGtC,IADA,IAAI8G,EAAM,EACDhE,EAAIxB,KAAKtB,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACzC,IAAIyF,EAAoB,EAAhBjH,KAAK6V,MAAMrU,GACfiB,EAAmB,EAAfmN,EAAIiG,MAAMrU,GAElB,GAAIyF,IAAMxE,EAAV,CACIwE,EAAIxE,EACN+C,GAAO,EACEyB,EAAIxE,IACb+C,EAAM,GAER,OAEF,OAAOA,GAGT6J,EAAG3R,UAAU+oB,IAAM,SAAc7W,GAC/B,OAA0B,IAAnB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUgpB,GAAK,SAAa9W,GAC7B,OAAyB,IAAlB5P,KAAKqW,IAAIzG,IAGlBP,EAAG3R,UAAUipB,KAAO,SAAe/W,GACjC,OAAO5P,KAAKgR,KAAKpB,IAAQ,GAG3BP,EAAG3R,UAAUkpB,IAAM,SAAchX,GAC/B,OAAO5P,KAAKqW,IAAIzG,IAAQ,GAG1BP,EAAG3R,UAAUmpB,IAAM,SAAcjX,GAC/B,OAA2B,IAApB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUopB,GAAK,SAAalX,GAC7B,OAA0B,IAAnB5P,KAAKqW,IAAIzG,IAGlBP,EAAG3R,UAAUqpB,KAAO,SAAenX,GACjC,OAAO5P,KAAKgR,KAAKpB,IAAQ,GAG3BP,EAAG3R,UAAUspB,IAAM,SAAcpX,GAC/B,OAAO5P,KAAKqW,IAAIzG,IAAQ,GAG1BP,EAAG3R,UAAUupB,IAAM,SAAcrX,GAC/B,OAA0B,IAAnB5P,KAAKgR,KAAKpB,IAGnBP,EAAG3R,UAAUwpB,GAAK,SAAatX,GAC7B,OAAyB,IAAlB5P,KAAKqW,IAAIzG,IAOlBP,EAAGyG,IAAM,SAAclG,GACrB,OAAO,IAAIuX,EAAIvX,IAGjBP,EAAG3R,UAAU0pB,MAAQ,SAAgBC,GAGnC,OAFArY,GAAQhP,KAAK8V,IAAK,yCAClB9G,EAAyB,IAAlBhP,KAAK4V,SAAgB,iCACrByR,EAAIC,UAAUtnB,MAAMunB,UAAUF,IAGvChY,EAAG3R,UAAU8pB,QAAU,WAErB,OADAxY,EAAOhP,KAAK8V,IAAK,wDACV9V,KAAK8V,IAAI2R,YAAYznB,OAG9BqP,EAAG3R,UAAU6pB,UAAY,SAAoBF,GAE3C,OADArnB,KAAK8V,IAAMuR,EACJrnB,MAGTqP,EAAG3R,UAAUgqB,SAAW,SAAmBL,GAEzC,OADArY,GAAQhP,KAAK8V,IAAK,yCACX9V,KAAKunB,UAAUF,IAGxBhY,EAAG3R,UAAUiqB,OAAS,SAAiB/X,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAI8E,IAAI5a,KAAM4P,IAG5BP,EAAG3R,UAAUkqB,QAAU,SAAkBhY,GAEvC,OADAZ,EAAOhP,KAAK8V,IAAK,uCACV9V,KAAK8V,IAAI4E,KAAK1a,KAAM4P,IAG7BP,EAAG3R,UAAUmqB,OAAS,SAAiBjY,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAIvK,IAAIvL,KAAM4P,IAG5BP,EAAG3R,UAAUoqB,QAAU,SAAkBlY,GAEvC,OADAZ,EAAOhP,KAAK8V,IAAK,uCACV9V,KAAK8V,IAAI6E,KAAK3a,KAAM4P,IAG7BP,EAAG3R,UAAUqqB,OAAS,SAAiBnY,GAErC,OADAZ,EAAOhP,KAAK8V,IAAK,sCACV9V,KAAK8V,IAAIkS,IAAIhoB,KAAM4P,IAG5BP,EAAG3R,UAAUuqB,OAAS,SAAiBrY,GAGrC,OAFAZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIoS,SAASloB,KAAM4P,GACjB5P,KAAK8V,IAAInM,IAAI3J,KAAM4P,IAG5BP,EAAG3R,UAAUyqB,QAAU,SAAkBvY,GAGvC,OAFAZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIoS,SAASloB,KAAM4P,GACjB5P,KAAK8V,IAAI+I,KAAK7e,KAAM4P,IAG7BP,EAAG3R,UAAU0qB,OAAS,WAGpB,OAFApZ,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIiN,IAAI/iB,OAGtBqP,EAAG3R,UAAU4qB,QAAU,WAGrB,OAFAtZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIkN,KAAKhjB,OAIvBqP,EAAG3R,UAAU6qB,QAAU,WAGrB,OAFAvZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI0S,KAAKxoB,OAGvBqP,EAAG3R,UAAU+qB,QAAU,WAGrB,OAFAzZ,EAAOhP,KAAK8V,IAAK,uCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAIwQ,KAAKtmB,OAIvBqP,EAAG3R,UAAUgrB,OAAS,WAGpB,OAFA1Z,EAAOhP,KAAK8V,IAAK,sCACjB9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI0D,IAAIxZ,OAGtBqP,EAAG3R,UAAUirB,OAAS,SAAiB/Y,GAGrC,OAFAZ,EAAOhP,KAAK8V,MAAQlG,EAAIkG,IAAK,qBAC7B9V,KAAK8V,IAAIuS,SAASroB,MACXA,KAAK8V,IAAI5L,IAAIlK,KAAM4P,IAI5B,IAAIgZ,EAAS,CACXC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,OAAQ,MAIV,SAASC,EAAQ1X,EAAMgC,GAErBvT,KAAKuR,KAAOA,EACZvR,KAAKuT,EAAI,IAAIlE,EAAGkE,EAAG,IACnBvT,KAAK0C,EAAI1C,KAAKuT,EAAEvD,YAChBhQ,KAAKkQ,EAAI,IAAIb,EAAG,GAAG6T,OAAOljB,KAAK0C,GAAGiY,KAAK3a,KAAKuT,GAE5CvT,KAAKkpB,IAAMlpB,KAAKmpB,OAiDlB,SAASC,IACPH,EAAOhmB,KACLjD,KACA,OACA,2EA+DJ,SAASqpB,IACPJ,EAAOhmB,KACLjD,KACA,OACA,kEAIJ,SAASspB,IACPL,EAAOhmB,KACLjD,KACA,OACA,yDAIJ,SAASupB,IAEPN,EAAOhmB,KACLjD,KACA,QACA,uEA8CJ,SAASmnB,EAAKxkB,GACZ,GAAiB,iBAANA,EAAgB,CACzB,IAAI6mB,EAAQna,EAAGoa,OAAO9mB,GACtB3C,KAAK2C,EAAI6mB,EAAMjW,EACfvT,KAAKwpB,MAAQA,OAEbxa,EAAOrM,EAAE8jB,IAAI,GAAI,kCACjBzmB,KAAK2C,EAAIA,EACT3C,KAAKwpB,MAAQ,KAkOjB,SAASE,EAAM/mB,GACbwkB,EAAIlkB,KAAKjD,KAAM2C,GAEf3C,KAAKskB,MAAQtkB,KAAK2C,EAAEqN,YAChBhQ,KAAKskB,MAAQ,IAAO,IACtBtkB,KAAKskB,OAAS,GAAMtkB,KAAKskB,MAAQ,IAGnCtkB,KAAKmP,EAAI,IAAIE,EAAG,GAAG6T,OAAOljB,KAAKskB,OAC/BtkB,KAAKolB,GAAKplB,KAAK2pB,KAAK3pB,KAAKmP,EAAE4T,OAC3B/iB,KAAK4pB,KAAO5pB,KAAKmP,EAAE+W,OAAOlmB,KAAK2C,GAE/B3C,KAAK6pB,KAAO7pB,KAAK4pB,KAAKjgB,IAAI3J,KAAKmP,GAAGqB,MAAM,GAAGoU,IAAI5kB,KAAK2C,GACpD3C,KAAK6pB,KAAO7pB,KAAK6pB,KAAK7E,KAAKhlB,KAAKmP,GAChCnP,KAAK6pB,KAAO7pB,KAAKmP,EAAE5D,IAAIvL,KAAK6pB,MA5a9BZ,EAAOvrB,UAAUyrB,KAAO,WACtB,IAAID,EAAM,IAAI7Z,EAAG,MAEjB,OADA6Z,EAAIrT,MAAQ,IAAIrN,MAAMlD,KAAKqR,KAAK3W,KAAK0C,EAAI,KAClCwmB,GAGTD,EAAOvrB,UAAUosB,QAAU,SAAkBla,GAG3C,IACIma,EADA5a,EAAIS,EAGR,GACE5P,KAAKgqB,MAAM7a,EAAGnP,KAAKkpB,KAGnBa,GADA5a,GADAA,EAAInP,KAAKiqB,MAAM9a,IACTuL,KAAK1a,KAAKkpB,MACPlZ,kBACF+Z,EAAO/pB,KAAK0C,GAErB,IAAI2T,EAAM0T,EAAO/pB,KAAK0C,GAAK,EAAIyM,EAAEqX,KAAKxmB,KAAKuT,GAgB3C,OAfY,IAAR8C,GACFlH,EAAE0G,MAAM,GAAK,EACb1G,EAAEzQ,OAAS,GACF2X,EAAM,EACflH,EAAEwL,KAAK3a,KAAKuT,QAEInU,IAAZ+P,EAAEuH,MAEJvH,EAAEuH,QAGFvH,EAAE+a,SAIC/a,GAGT8Z,EAAOvrB,UAAUssB,MAAQ,SAAgBG,EAAOxhB,GAC9CwhB,EAAM1Z,OAAOzQ,KAAK0C,EAAG,EAAGiG,IAG1BsgB,EAAOvrB,UAAUusB,MAAQ,SAAgBra,GACvC,OAAOA,EAAIiP,KAAK7e,KAAKkQ,IASvB+C,EAASmW,EAAMH,GAEfG,EAAK1rB,UAAUssB,MAAQ,SAAgBG,EAAOC,GAK5C,IAHA,IAEIC,EAAS/kB,KAAKC,IAAI4kB,EAAMzrB,OAAQ,GAC3B8C,EAAI,EAAGA,EAAI6oB,EAAQ7oB,IAC1B4oB,EAAOvU,MAAMrU,GAAK2oB,EAAMtU,MAAMrU,GAIhC,GAFA4oB,EAAO1rB,OAAS2rB,EAEZF,EAAMzrB,QAAU,EAGlB,OAFAyrB,EAAMtU,MAAM,GAAK,OACjBsU,EAAMzrB,OAAS,GAKjB,IAAI4rB,EAAOH,EAAMtU,MAAM,GAGvB,IAFAuU,EAAOvU,MAAMuU,EAAO1rB,UAhBT,QAgBqB4rB,EAE3B9oB,EAAI,GAAIA,EAAI2oB,EAAMzrB,OAAQ8C,IAAK,CAClC,IAAI+oB,EAAwB,EAAjBJ,EAAMtU,MAAMrU,GACvB2oB,EAAMtU,MAAMrU,EAAI,KApBP,QAoBe+oB,IAAgB,EAAMD,IAAS,GACvDA,EAAOC,EAETD,KAAU,GACVH,EAAMtU,MAAMrU,EAAI,IAAM8oB,EACT,IAATA,GAAcH,EAAMzrB,OAAS,GAC/ByrB,EAAMzrB,QAAU,GAEhByrB,EAAMzrB,QAAU,GAIpB0qB,EAAK1rB,UAAUusB,MAAQ,SAAgBra,GAErCA,EAAIiG,MAAMjG,EAAIlR,QAAU,EACxBkR,EAAIiG,MAAMjG,EAAIlR,OAAS,GAAK,EAC5BkR,EAAIlR,QAAU,EAId,IADA,IAAIyG,EAAK,EACA3D,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CACnC,IAAIqO,EAAmB,EAAfD,EAAIiG,MAAMrU,GAClB2D,GAAU,IAAJ0K,EACND,EAAIiG,MAAMrU,GAAU,SAAL2D,EACfA,EAAS,GAAJ0K,GAAa1K,EAAK,SAAa,GAUtC,OANkC,IAA9ByK,EAAIiG,MAAMjG,EAAIlR,OAAS,KACzBkR,EAAIlR,SAC8B,IAA9BkR,EAAIiG,MAAMjG,EAAIlR,OAAS,IACzBkR,EAAIlR,UAGDkR,GASTqD,EAASoW,EAAMJ,GAQfhW,EAASqW,EAAML,GASfhW,EAASsW,EAAQN,GAEjBM,EAAO7rB,UAAUusB,MAAQ,SAAgBra,GAGvC,IADA,IAAImF,EAAQ,EACHvT,EAAI,EAAGA,EAAIoO,EAAIlR,OAAQ8C,IAAK,CACnC,IAAI0D,EAA0B,IAAL,EAAf0K,EAAIiG,MAAMrU,IAAiBuT,EACjC5P,EAAU,SAALD,EACTA,KAAQ,GAER0K,EAAIiG,MAAMrU,GAAK2D,EACf4P,EAAQ7P,EAKV,OAHc,IAAV6P,IACFnF,EAAIiG,MAAMjG,EAAIlR,UAAYqW,GAErBnF,GAITP,EAAGoa,OAAS,SAAgBlY,GAE1B,GAAIqX,EAAOrX,GAAO,OAAOqX,EAAOrX,GAEhC,IAAIiY,EACJ,GAAa,SAATjY,EACFiY,EAAQ,IAAIJ,OACP,GAAa,SAAT7X,EACTiY,EAAQ,IAAIH,OACP,GAAa,SAAT9X,EACTiY,EAAQ,IAAIF,MACP,IAAa,WAAT/X,EAGT,MAAM,IAAItR,MAAM,iBAAmBsR,GAFnCiY,EAAQ,IAAID,EAMd,OAFAX,EAAOrX,GAAQiY,EAERA,GAkBTrC,EAAIzpB,UAAU2qB,SAAW,SAAmBphB,GAC1C+H,EAAsB,IAAf/H,EAAE2O,SAAgB,iCACzB5G,EAAO/H,EAAE6O,IAAK,oCAGhBqR,EAAIzpB,UAAUwqB,SAAW,SAAmBjhB,EAAGxE,GAC7CuM,EAAqC,IAA7B/H,EAAE2O,SAAWnT,EAAEmT,UAAiB,iCACxC5G,EAAO/H,EAAE6O,KAAO7O,EAAE6O,MAAQrT,EAAEqT,IAC1B,oCAGJqR,EAAIzpB,UAAUisB,KAAO,SAAe1iB,GAClC,OAAIjH,KAAKwpB,MAAcxpB,KAAKwpB,MAAMM,QAAQ7iB,GAAGsgB,UAAUvnB,MAChDiH,EAAE+d,KAAKhlB,KAAK2C,GAAG4kB,UAAUvnB,OAGlCmnB,EAAIzpB,UAAU8b,IAAM,SAAcvS,GAChC,OAAIA,EAAE+Q,SACG/Q,EAAEkJ,QAGJnQ,KAAK2C,EAAE4I,IAAItE,GAAGsgB,UAAUvnB,OAGjCmnB,EAAIzpB,UAAUkd,IAAM,SAAc3T,EAAGxE,GACnCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAE2T,IAAInY,GAIhB,OAHI+C,EAAI6Q,IAAIrW,KAAK2C,IAAM,GACrB6C,EAAImV,KAAK3a,KAAK2C,GAET6C,EAAI+hB,UAAUvnB,OAGvBmnB,EAAIzpB,UAAUgd,KAAO,SAAezT,EAAGxE,GACrCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEyT,KAAKjY,GAIjB,OAHI+C,EAAI6Q,IAAIrW,KAAK2C,IAAM,GACrB6C,EAAImV,KAAK3a,KAAK2C,GAET6C,GAGT2hB,EAAIzpB,UAAU6N,IAAM,SAActE,EAAGxE,GACnCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAEsE,IAAI9I,GAIhB,OAHI+C,EAAIwL,KAAK,GAAK,GAChBxL,EAAIkV,KAAK1a,KAAK2C,GAET6C,EAAI+hB,UAAUvnB,OAGvBmnB,EAAIzpB,UAAUid,KAAO,SAAe1T,EAAGxE,GACrCzC,KAAKkoB,SAASjhB,EAAGxE,GAEjB,IAAI+C,EAAMyB,EAAE0T,KAAKlY,GAIjB,OAHI+C,EAAIwL,KAAK,GAAK,GAChBxL,EAAIkV,KAAK1a,KAAK2C,GAET6C,GAGT2hB,EAAIzpB,UAAUsqB,IAAM,SAAc/gB,EAAG2I,GAEnC,OADA5P,KAAKqoB,SAASphB,GACPjH,KAAK2pB,KAAK1iB,EAAE4c,MAAMjU,KAG3BuX,EAAIzpB,UAAUmhB,KAAO,SAAe5X,EAAGxE,GAErC,OADAzC,KAAKkoB,SAASjhB,EAAGxE,GACVzC,KAAK2pB,KAAK1iB,EAAE4X,KAAKpc,KAG1B0kB,EAAIzpB,UAAUiM,IAAM,SAAc1C,EAAGxE,GAEnC,OADAzC,KAAKkoB,SAASjhB,EAAGxE,GACVzC,KAAK2pB,KAAK1iB,EAAE0C,IAAIlH,KAGzB0kB,EAAIzpB,UAAUslB,KAAO,SAAe/b,GAClC,OAAOjH,KAAK6e,KAAK5X,EAAGA,EAAEkJ,UAGxBgX,EAAIzpB,UAAUqlB,IAAM,SAAc9b,GAChC,OAAOjH,KAAK2J,IAAI1C,EAAGA,IAGrBkgB,EAAIzpB,UAAU8qB,KAAO,SAAevhB,GAClC,GAAIA,EAAE+Q,SAAU,OAAO/Q,EAAEkJ,QAEzB,IAAIqa,EAAOxqB,KAAK2C,EAAE2N,MAAM,GAIxB,GAHAtB,EAAOwb,EAAO,GAAM,GAGP,IAATA,EAAY,CACd,IAAItgB,EAAMlK,KAAK2C,EAAEiY,IAAI,IAAIvL,EAAG,IAAIoB,OAAO,GACvC,OAAOzQ,KAAKkK,IAAIjD,EAAGiD,GAQrB,IAFA,IAAIsO,EAAIxY,KAAK2C,EAAEwhB,KAAK,GAChBlD,EAAI,GACAzI,EAAER,UAA2B,IAAfQ,EAAElI,MAAM,IAC5B2Q,IACAzI,EAAE/H,OAAO,GAEXzB,GAAQwJ,EAAER,UAEV,IAAIyS,EAAM,IAAIpb,EAAG,GAAG+X,MAAMpnB,MACtB0qB,EAAOD,EAAI/B,SAIXiC,EAAO3qB,KAAK2C,EAAEwhB,KAAK,GAAG1T,OAAO,GAC7BL,EAAIpQ,KAAK2C,EAAEqN,YAGf,IAFAI,EAAI,IAAIf,EAAG,EAAIe,EAAIA,GAAGgX,MAAMpnB,MAEW,IAAhCA,KAAKkK,IAAIkG,EAAGua,GAAMtU,IAAIqU,IAC3Bta,EAAEwX,QAAQ8C,GAOZ,IAJA,IAAIzlB,EAAIjF,KAAKkK,IAAIkG,EAAGoI,GAChBrJ,EAAInP,KAAKkK,IAAIjD,EAAGuR,EAAE0L,KAAK,GAAGzT,OAAO,IACjCkI,EAAI3Y,KAAKkK,IAAIjD,EAAGuR,GAChB7V,EAAIse,EACc,IAAftI,EAAEtC,IAAIoU,IAAY,CAEvB,IADA,IAAIvB,EAAMvQ,EACDnX,EAAI,EAAoB,IAAjB0nB,EAAI7S,IAAIoU,GAAYjpB,IAClC0nB,EAAMA,EAAId,SAEZpZ,EAAOxN,EAAImB,GACX,IAAIF,EAAIzC,KAAKkK,IAAIjF,EAAG,IAAIoK,EAAG,GAAG6T,OAAOvgB,EAAInB,EAAI,IAE7C2N,EAAIA,EAAE8Y,OAAOxlB,GACbwC,EAAIxC,EAAE2lB,SACNzP,EAAIA,EAAEsP,OAAOhjB,GACbtC,EAAInB,EAGN,OAAO2N,GAGTgY,EAAIzpB,UAAU4oB,KAAO,SAAerf,GAClC,IAAI2jB,EAAM3jB,EAAEif,OAAOlmB,KAAK2C,GACxB,OAAqB,IAAjBioB,EAAIhV,UACNgV,EAAIhV,SAAW,EACR5V,KAAK2pB,KAAKiB,GAAKlC,UAEf1oB,KAAK2pB,KAAKiB,IAIrBzD,EAAIzpB,UAAUwM,IAAM,SAAcjD,EAAG2I,GACnC,GAAIA,EAAIoI,SAAU,OAAO,IAAI3I,EAAG,GAAG+X,MAAMpnB,MACzC,GAAoB,IAAhB4P,EAAIoB,KAAK,GAAU,OAAO/J,EAAEkJ,QAEhC,IACI0a,EAAM,IAAIriB,MAAM,IACpBqiB,EAAI,GAAK,IAAIxb,EAAG,GAAG+X,MAAMpnB,MACzB6qB,EAAI,GAAK5jB,EACT,IAAK,IAAIzF,EAAI,EAAGA,EAAIqpB,EAAInsB,OAAQ8C,IAC9BqpB,EAAIrpB,GAAKxB,KAAK2J,IAAIkhB,EAAIrpB,EAAI,GAAIyF,GAGhC,IAAIzB,EAAMqlB,EAAI,GACVC,EAAU,EACVC,EAAa,EACb/oB,EAAQ4N,EAAII,YAAc,GAK9B,IAJc,IAAVhO,IACFA,EAAQ,IAGLR,EAAIoO,EAAIlR,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CAEpC,IADA,IAAI4R,EAAOxD,EAAIiG,MAAMrU,GACZoC,EAAI5B,EAAQ,EAAG4B,GAAK,EAAGA,IAAK,CACnC,IAAI4W,EAAOpH,GAAQxP,EAAK,EACpB4B,IAAQqlB,EAAI,KACdrlB,EAAMxF,KAAK+iB,IAAIvd,IAGL,IAARgV,GAAyB,IAAZsQ,GAKjBA,IAAY,EACZA,GAAWtQ,GA9BE,MA+BbuQ,GACwC,IAANvpB,GAAiB,IAANoC,KAE7C4B,EAAMxF,KAAK2J,IAAInE,EAAKqlB,EAAIC,IACxBC,EAAa,EACbD,EAAU,IAXRC,EAAa,EAajB/oB,EAAQ,GAGV,OAAOwD,GAGT2hB,EAAIzpB,UAAU4pB,UAAY,SAAoB1X,GAC5C,IAAIT,EAAIS,EAAIoV,KAAKhlB,KAAK2C,GAEtB,OAAOwM,IAAMS,EAAMT,EAAEgB,QAAUhB,GAGjCgY,EAAIzpB,UAAU+pB,YAAc,SAAsB7X,GAChD,IAAIpK,EAAMoK,EAAIO,QAEd,OADA3K,EAAIsQ,IAAM,KACHtQ,GAOT6J,EAAG2b,KAAO,SAAepb,GACvB,OAAO,IAAI8Z,EAAK9Z,IAmBlBqD,EAASyW,EAAMvC,GAEfuC,EAAKhsB,UAAU4pB,UAAY,SAAoB1X,GAC7C,OAAO5P,KAAK2pB,KAAK/Z,EAAIiU,MAAM7jB,KAAKskB,SAGlCoF,EAAKhsB,UAAU+pB,YAAc,SAAsB7X,GACjD,IAAIT,EAAInP,KAAK2pB,KAAK/Z,EAAIjG,IAAI3J,KAAK4pB,OAE/B,OADAza,EAAE2G,IAAM,KACD3G,GAGTua,EAAKhsB,UAAUmhB,KAAO,SAAe5X,EAAGxE,GACtC,GAAIwE,EAAE+Q,UAAYvV,EAAEuV,SAGlB,OAFA/Q,EAAE4O,MAAM,GAAK,EACb5O,EAAEvI,OAAS,EACJuI,EAGT,IAAI0R,EAAI1R,EAAE4X,KAAKpc,GACXwC,EAAI0T,EAAEsL,MAAMjkB,KAAKskB,OAAO3a,IAAI3J,KAAK6pB,MAAM7F,OAAOhkB,KAAKskB,OAAO3a,IAAI3J,KAAK2C,GACnEsoB,EAAItS,EAAEgC,KAAK1V,GAAGwL,OAAOzQ,KAAKskB,OAC1B9e,EAAMylB,EAQV,OANIA,EAAE5U,IAAIrW,KAAK2C,IAAM,EACnB6C,EAAMylB,EAAEtQ,KAAK3a,KAAK2C,GACTsoB,EAAEja,KAAK,GAAK,IACrBxL,EAAMylB,EAAEvQ,KAAK1a,KAAK2C,IAGb6C,EAAI+hB,UAAUvnB,OAGvB0pB,EAAKhsB,UAAUiM,IAAM,SAAc1C,EAAGxE,GACpC,GAAIwE,EAAE+Q,UAAYvV,EAAEuV,SAAU,OAAO,IAAI3I,EAAG,GAAGkY,UAAUvnB,MAEzD,IAAI2Y,EAAI1R,EAAE0C,IAAIlH,GACVwC,EAAI0T,EAAEsL,MAAMjkB,KAAKskB,OAAO3a,IAAI3J,KAAK6pB,MAAM7F,OAAOhkB,KAAKskB,OAAO3a,IAAI3J,KAAK2C,GACnEsoB,EAAItS,EAAEgC,KAAK1V,GAAGwL,OAAOzQ,KAAKskB,OAC1B9e,EAAMylB,EAOV,OANIA,EAAE5U,IAAIrW,KAAK2C,IAAM,EACnB6C,EAAMylB,EAAEtQ,KAAK3a,KAAK2C,GACTsoB,EAAEja,KAAK,GAAK,IACrBxL,EAAMylB,EAAEvQ,KAAK1a,KAAK2C,IAGb6C,EAAI+hB,UAAUvnB,OAGvB0pB,EAAKhsB,UAAU4oB,KAAO,SAAerf,GAGnC,OADUjH,KAAK2pB,KAAK1iB,EAAEif,OAAOlmB,KAAK2C,GAAGgH,IAAI3J,KAAKolB,KACnCmC,UAAUvnB,OAt2GzB,CAw2GoC3C,EAAQ2C,Q,oDCt2G5C,MAAM48D,EAAWt/D,EAEjBs/D,EAASC,IAAM,EAAQ,KACvBD,EAASE,IAAM,EAAQ,M,6BCHvB,MAAM7pD,EAAW,EAAQ,KACnB/U,EAAS,EAAQ,KAAgBA,OACjCk4C,EAAO,EAAQ,KAGfymB,EAAM,EAAQ,KAEpB,SAASE,EAAW/jB,GAClBh5C,KAAKsT,IAAM,MACXtT,KAAKuR,KAAOynC,EAAOznC,KACnBvR,KAAKg5C,OAASA,EAGdh5C,KAAKg9D,KAAO,IAAIC,EAChBj9D,KAAKg9D,KAAKjnD,MAAMijC,EAAO7B,MAUzB,SAAS8lB,EAAQz0B,GACf4N,EAAKnzC,KAAKjD,KAAM,MAAOwoC,GAmHzB,SAAS9I,EAAI9vB,GACX,OAAIA,EAAM,GACD,IAAMA,EAENA,EAhIXvS,EAAOC,QAAUy/D,EAEjBA,EAAWr/D,UAAUgS,OAAS,SAAgBrO,EAAMu4B,GAClD,OAAO55B,KAAKg9D,KAAK36B,QAAQhhC,EAAMu4B,GAAU7xB,QAQ3CkL,EAASgqD,EAAS7mB,GAElB6mB,EAAQv/D,UAAUi8C,iBAAmB,SAAyBlW,EAC5D8V,EACAG,EACA3qC,GACA,MAAMmuD,EA2OR,SAAmBz5B,EAAK8V,EAAWG,EAAK9f,GACtC,IAAIp0B,EAEQ,UAARi+B,EACFA,EAAM,MACS,UAARA,IACPA,EAAM,OAER,GAAIo5B,EAAIthB,UAAUjuC,eAAem2B,GAC/Bj+B,EAAMq3D,EAAIthB,UAAU9X,OACjB,IAAmB,iBAARA,IAA2B,EAANA,KAAaA,EAGhD,OAAO7J,EAASrI,MAAM,gBAAkBkS,GAFxCj+B,EAAMi+B,EAIR,GAAIj+B,GAAO,GACT,OAAOo0B,EAASrI,MAAM,wCAEnBgoB,IACH/zC,GAAO,IAIT,OAFAA,GAAQq3D,EAAIvhB,eAAe5B,GAAO,cAAgB,EAE3Cl0C,EAlQY23D,CAAU15B,EAAK8V,EAAWG,EAAK15C,KAAK45B,UAGvD,GAAI7qB,EAAQrQ,OAAS,IAAM,CACzB,MAAM0+D,EAASl/D,EAAOU,MAAM,GAG5B,OAFAw+D,EAAO,GAAKF,EACZE,EAAO,GAAKruD,EAAQrQ,OACbsB,KAAKo5C,qBAAqB,CAAEgkB,EAAQruD,IAK7C,IAAIsuD,EAAY,EAChB,IAAK,IAAI77D,EAAIuN,EAAQrQ,OAAQ8C,GAAK,IAAOA,IAAM,EAC7C67D,IAEF,MAAMD,EAASl/D,EAAOU,MAAM,EAAQy+D,GACpCD,EAAO,GAAKF,EACZE,EAAO,GAAK,IAAOC,EAEnB,IAAK,IAAI77D,EAAI,EAAI67D,EAAWz5D,EAAImL,EAAQrQ,OAAQkF,EAAI,EAAGpC,IAAKoC,IAAM,EAChEw5D,EAAO57D,GAAS,IAAJoC,EAEd,OAAO5D,KAAKo5C,qBAAqB,CAAEgkB,EAAQruD,KAG7CkuD,EAAQv/D,UAAUo8C,WAAa,SAAmBt1C,EAAKi/B,GACrD,GAAY,WAARA,EACF,OAAOzjC,KAAKo5C,qBAAqB,CAAe,EAAb50C,EAAI84D,OAAY94D,EAAInD,OAClD,GAAY,WAARoiC,EAAkB,CAC3B,MAAMtkC,EAAMjB,EAAOU,MAAmB,EAAb4F,EAAI9F,QAC7B,IAAK,IAAI8C,EAAI,EAAGA,EAAIgD,EAAI9F,OAAQ8C,IAC9BrC,EAAI+L,cAAc1G,EAAIG,WAAWnD,GAAQ,EAAJA,GAEvC,OAAOxB,KAAKo5C,qBAAqBj6C,GAC5B,MAAY,WAARskC,EACJzjC,KAAKo6C,UAAU51C,GAIbxE,KAAKo5C,qBAAqB50C,GAHxBxE,KAAK45B,SAASrI,MAAM,kEAIZ,aAARkS,EACJzjC,KAAKq6C,YAAY71C,GAQfxE,KAAKo5C,qBAAqB50C,GAPxBxE,KAAK45B,SAASrI,MAAM,qNAQpB,OAAOknB,KAAKhV,IAEJ,YAARA,EADFzjC,KAAKo5C,qBAAqB50C,GAI1BxE,KAAK45B,SAASrI,MAAM,4BAA8BkS,EAC9B,iBAI/Bw5B,EAAQv/D,UAAUq8C,aAAe,SAAqBwjB,EAAIC,EAAQjgB,GAChE,GAAkB,iBAAPggB,EAAiB,CAC1B,IAAKC,EACH,OAAOx9D,KAAK45B,SAASrI,MAAM,+CAC7B,IAAKisC,EAAOlwD,eAAeiwD,GACzB,OAAOv9D,KAAK45B,SAASrI,MAAM,iCAC7BgsC,EAAKC,EAAOD,GAAIvzC,MAAM,WACtB,IAAK,IAAIxoB,EAAI,EAAGA,EAAI+7D,EAAG7+D,OAAQ8C,IAC7B+7D,EAAG/7D,IAAM,OACN,GAAIgH,MAAMhJ,QAAQ+9D,GAAK,CAC5BA,EAAKA,EAAG38D,QACR,IAAK,IAAIY,EAAI,EAAGA,EAAI+7D,EAAG7+D,OAAQ8C,IAC7B+7D,EAAG/7D,IAAM,EAGb,IAAKgH,MAAMhJ,QAAQ+9D,GACjB,OAAOv9D,KAAK45B,SAASrI,MAAM,kDACUqoB,KAAKC,UAAU0jB,IAGtD,IAAKhgB,EAAU,CACb,GAAIggB,EAAG,IAAM,GACX,OAAOv9D,KAAK45B,SAASrI,MAAM,+BAC7BgsC,EAAGzf,OAAO,EAAG,EAAW,GAARyf,EAAG,GAAUA,EAAG,IAIlC,IAAIv+D,EAAO,EACX,IAAK,IAAIwC,EAAI,EAAGA,EAAI+7D,EAAG7+D,OAAQ8C,IAAK,CAClC,IAAIi8D,EAAQF,EAAG/7D,GACf,IAAKxC,IAAQy+D,GAAS,IAAMA,IAAU,EACpCz+D,IAGJ,MAAM0+D,EAAQx/D,EAAOU,MAAMI,GAC3B,IAAI8E,EAAS45D,EAAMh/D,OAAS,EAC5B,IAAK,IAAI8C,EAAI+7D,EAAG7+D,OAAS,EAAG8C,GAAK,EAAGA,IAAK,CACvC,IAAIi8D,EAAQF,EAAG/7D,GAEf,IADAk8D,EAAM55D,KAAoB,IAAR25D,GACVA,IAAU,GAAK,GACrBC,EAAM55D,KAAY,IAAgB,IAAR25D,EAG9B,OAAOz9D,KAAKo5C,qBAAqBskB,IAUnCT,EAAQv/D,UAAUs8C,YAAc,SAAoB2jB,EAAMl6B,GACxD,IAAIj/B,EACJ,MAAMo5D,EAAO,IAAIC,KAAKF,GA0BtB,MAxBY,YAARl6B,EACFj/B,EAAM,CACJk7B,EAAIk+B,EAAKE,kBACTp+B,EAAIk+B,EAAKG,cAAgB,GACzBr+B,EAAIk+B,EAAKI,cACTt+B,EAAIk+B,EAAKK,eACTv+B,EAAIk+B,EAAKM,iBACTx+B,EAAIk+B,EAAKO,iBACT,KACAp2D,KAAK,IACU,YAAR07B,EACTj/B,EAAM,CACJk7B,EAAIk+B,EAAKE,iBAAmB,KAC5Bp+B,EAAIk+B,EAAKG,cAAgB,GACzBr+B,EAAIk+B,EAAKI,cACTt+B,EAAIk+B,EAAKK,eACTv+B,EAAIk+B,EAAKM,iBACTx+B,EAAIk+B,EAAKO,iBACT,KACAp2D,KAAK,IAEP/H,KAAK45B,SAASrI,MAAM,YAAckS,EAAM,8BAGnCzjC,KAAK85C,WAAWt1C,EAAK,WAG9By4D,EAAQv/D,UAAUu8C,YAAc,WAC9B,OAAOj6C,KAAKo5C,qBAAqB,KAGnC6jB,EAAQv/D,UAAUw8C,WAAa,SAAmBtqC,EAAK4tD,GACrD,GAAmB,iBAAR5tD,EAAkB,CAC3B,IAAK4tD,EACH,OAAOx9D,KAAK45B,SAASrI,MAAM,+CAC7B,IAAKisC,EAAOlwD,eAAesC,GACzB,OAAO5P,KAAK45B,SAASrI,MAAM,+BACAqoB,KAAKC,UAAUjqC,IAE5CA,EAAM4tD,EAAO5tD,GAIf,GAAmB,iBAARA,IAAqB1R,EAAO6C,SAAS6O,GAAM,CACpD,MAAMwuD,EAAWxuD,EAAIJ,WAChBI,EAAIyuD,MAAsB,IAAdD,EAAS,IACxBA,EAASjuC,QAAQ,GAEnBvgB,EAAM1R,EAAOS,KAAKy/D,GAGpB,GAAIlgE,EAAO6C,SAAS6O,GAAM,CACxB,IAAI5Q,EAAO4Q,EAAIlR,OACI,IAAfkR,EAAIlR,QACNM,IAEF,MAAM2J,EAAMzK,EAAOU,MAAMI,GAIzB,OAHA4Q,EAAI1O,KAAKyH,GACU,IAAfiH,EAAIlR,SACNiK,EAAI,GAAK,GACJ3I,KAAKo5C,qBAAqBzwC,GAGnC,GAAIiH,EAAM,IACR,OAAO5P,KAAKo5C,qBAAqBxpC,GAEnC,GAAIA,EAAM,IACR,OAAO5P,KAAKo5C,qBAAqB,CAAC,EAAGxpC,IAEvC,IAAI5Q,EAAO,EACX,IAAK,IAAIwC,EAAIoO,EAAKpO,GAAK,IAAOA,IAAM,EAClCxC,IAEF,MAAM2J,EAAM,IAAIH,MAAMxJ,GACtB,IAAK,IAAIwC,EAAImH,EAAIjK,OAAS,EAAG8C,GAAK,EAAGA,IACnCmH,EAAInH,GAAW,IAANoO,EACTA,IAAQ,EAMV,OAJY,IAATjH,EAAI,IACLA,EAAIwnB,QAAQ,GAGPnwB,KAAKo5C,qBAAqBl7C,EAAOS,KAAKgK,KAG/Cs0D,EAAQv/D,UAAUy8C,YAAc,SAAoBv8C,GAClD,OAAOoC,KAAKo5C,qBAAqBx7C,EAAQ,IAAO,IAGlDq/D,EAAQv/D,UAAUu7C,KAAO,SAAaD,EAAQl4C,GAG5C,MAFsB,mBAAXk4C,IACTA,EAASA,EAAOl4C,IACXk4C,EAAOslB,YAAY,OAAOtB,MAGnCC,EAAQv/D,UAAU47C,aAAe,SAAqBilB,EAAY3kC,EAAU4O,GAC1E,MAAM5X,EAAQ5wB,KAAKq2C,WACnB,IAAI70C,EACJ,GAAyB,OAArBovB,EAAe,QACjB,OAAO,EAET,MAAMvvB,EAAOk9D,EAAWx2D,OAIxB,QAH4B3I,IAAxBwxB,EAAM4tC,gBACR5tC,EAAM4tC,cAAgBx+D,KAAKq5C,aAAazoB,EAAe,QAAGgJ,EAAU4O,GAAQzgC,QAE1E1G,EAAK3C,SAAWkyB,EAAM4tC,cAAc9/D,OACtC,OAAO,EAET,IAAK8C,EAAE,EAAGA,EAAIH,EAAK3C,OAAQ8C,IACzB,GAAIH,EAAKG,KAAOovB,EAAM4tC,cAAch9D,GAClC,OAAO,EAEX,OAAO,I,6BCvQT,MAAMm7D,EAAWr/D,EAEjBq/D,EAASE,IAAM,EAAQ,KACvBF,EAASG,IAAM,EAAQ,M,6BCHvB,MAAM7pD,EAAW,EAAQ,KAEnBwpD,EAAS,EAAQ,KACjB/iC,EAAgB,EAAQ,KAAkBA,cAC1C0c,EAAO,EAAQ,KAGfymB,EAAM,EAAQ,KAEpB,SAAS4B,EAAWzlB,GAClBh5C,KAAKsT,IAAM,MACXtT,KAAKuR,KAAOynC,EAAOznC,KACnBvR,KAAKg5C,OAASA,EAGdh5C,KAAKg9D,KAAO,IAAIC,EAChBj9D,KAAKg9D,KAAKjnD,MAAMijC,EAAO7B,MAczB,SAAS8lB,EAAQz0B,GACf4N,EAAKnzC,KAAKjD,KAAM,MAAOwoC,GA8OzB,SAASk2B,EAAav/D,EAAKk7B,GACzB,IAAIoJ,EAAMtkC,EAAI0K,UAAUwwB,GACxB,GAAIl7B,EAAI05B,QAAQ4K,GACd,OAAOA,EAET,MAAMiW,EAAMmjB,EAAI5hB,SAASxX,GAAO,GAC1B8V,EAA6B,IAAV,GAAN9V,GAGnB,GAAqB,KAAV,GAANA,GAAsB,CACzB,IAAIk7B,EAAMl7B,EAEV,IADAA,EAAM,EACkB,MAAV,IAANk7B,IAAsB,CAE5B,GADAA,EAAMx/D,EAAI0K,UAAUwwB,GAChBl7B,EAAI05B,QAAQ8lC,GACd,OAAOA,EAETl7B,IAAQ,EACRA,GAAa,IAANk7B,QAGTl7B,GAAO,GAIT,MAAO,CACLiW,IAAKA,EACLH,UAAWA,EACX9V,IAAKA,EACLm7B,OANa/B,EAAIp5B,IAAIA,IAUzB,SAASo7B,EAAa1/D,EAAKo6C,EAAWlf,GACpC,IAAIr5B,EAAM7B,EAAI0K,UAAUwwB,GACxB,GAAIl7B,EAAI05B,QAAQ73B,GACd,OAAOA,EAGT,IAAKu4C,GAAqB,MAARv4C,EAChB,OAAO,KAGT,GAAqB,IAAV,IAANA,GAEH,OAAOA,EAIT,MAAM4O,EAAY,IAAN5O,EACZ,GAAI4O,EAAM,EACR,OAAOzQ,EAAIoyB,MAAM,6BAEnBvwB,EAAM,EACN,IAAK,IAAIQ,EAAI,EAAGA,EAAIoO,EAAKpO,IAAK,CAC5BR,IAAQ,EACR,MAAM4C,EAAIzE,EAAI0K,UAAUwwB,GACxB,GAAIl7B,EAAI05B,QAAQj1B,GACd,OAAOA,EACT5C,GAAO4C,EAGT,OAAO5C,EAzTT3D,EAAOC,QAAUmhE,EAEjBA,EAAW/gE,UAAU68B,OAAS,SAAgBl5B,EAAMwqB,GAKlD,OAJK6N,EAAcK,gBAAgB14B,KACjCA,EAAO,IAAIq4B,EAAcr4B,EAAMwqB,IAG1B7rB,KAAKg9D,KAAKzlB,QAAQl2C,EAAMwqB,IAQjC5Y,EAASgqD,EAAS7mB,GAElB6mB,EAAQv/D,UAAUm6C,SAAW,SAAiB55C,EAAQwlC,EAAKgT,GACzD,GAAIx4C,EAAOi8B,UACT,OAAO,EAET,MAAMtJ,EAAQ3yB,EAAO+7B,OACf8kC,EAAaJ,EAAazgE,EAAQ,wBAA0BwlC,EAAM,KACxE,OAAIxlC,EAAO46B,QAAQimC,GACVA,GAET7gE,EAAOg8B,QAAQrJ,GAERkuC,EAAWr7B,MAAQA,GAAOq7B,EAAWF,SAAWn7B,GACpDq7B,EAAWF,OAAS,OAAUn7B,GAAOgT,IAG1CwmB,EAAQv/D,UAAUu6C,WAAa,SAAmBh6C,EAAQwlC,EAAKgT,GAC7D,MAAMqoB,EAAaJ,EAAazgE,EAC9B,4BAA8BwlC,EAAM,KACtC,GAAIxlC,EAAO46B,QAAQimC,GACjB,OAAOA,EAET,IAAI99D,EAAM69D,EAAa5gE,EACrB6gE,EAAWvlB,UACX,4BAA8B9V,EAAM,KAGtC,GAAIxlC,EAAO46B,QAAQ73B,GACjB,OAAOA,EAET,IAAKy1C,GACDqoB,EAAWr7B,MAAQA,GACnBq7B,EAAWF,SAAWn7B,GACtBq7B,EAAWF,OAAS,OAASn7B,EAC/B,OAAOxlC,EAAOszB,MAAM,yBAA2BkS,EAAM,KAGvD,GAAIq7B,EAAWvlB,WAAqB,OAARv4C,EAC1B,OAAO/C,EAAOk8B,KAAKn5B,EAAK,6BAA+ByiC,EAAM,KAG/D,MAAM7S,EAAQ3yB,EAAO+7B,OACfx0B,EAAMxF,KAAK++D,cACf9gE,EACA,2CAA6C+B,KAAKyjC,IAAM,KAC1D,OAAIxlC,EAAO46B,QAAQrzB,GACVA,GAETxE,EAAM/C,EAAO6F,OAAS8sB,EAAM9sB,OAC5B7F,EAAOg8B,QAAQrJ,GACR3yB,EAAOk8B,KAAKn5B,EAAK,6BAA+ByiC,EAAM,OAG/Dw5B,EAAQv/D,UAAUqhE,cAAgB,SAAsB9gE,EAAQo8B,GAC9D,OAAS,CACP,MAAMoJ,EAAMi7B,EAAazgE,EAAQo8B,GACjC,GAAIp8B,EAAO46B,QAAQ4K,GACjB,OAAOA,EACT,MAAMziC,EAAM69D,EAAa5gE,EAAQwlC,EAAI8V,UAAWlf,GAChD,GAAIp8B,EAAO46B,QAAQ73B,GACjB,OAAOA,EAET,IAAIwE,EAOJ,GALEA,EADEi+B,EAAI8V,WAAqB,OAARv4C,EACb/C,EAAOk8B,KAAKn5B,GAEZhB,KAAK++D,cAAc9gE,EAAQo8B,GAG/Bp8B,EAAO46B,QAAQrzB,GACjB,OAAOA,EAET,GAAmB,QAAfi+B,EAAIm7B,OACN,QAIN3B,EAAQv/D,UAAU86C,YAAc,SAAoBv6C,EAAQwlC,EAAKulB,EAC/Dn9B,GACA,MAAMnd,EAAS,GACf,MAAQzQ,EAAOi8B,WAAW,CACxB,MAAM8kC,EAAch/D,KAAK63C,SAAS55C,EAAQ,OAC1C,GAAIA,EAAO46B,QAAQmmC,GACjB,OAAOA,EAET,MAAMx5D,EAAMwjD,EAAQzuB,OAAOt8B,EAAQ,MAAO4tB,GAC1C,GAAI5tB,EAAO46B,QAAQrzB,IAAQw5D,EACzB,MACFtwD,EAAOhK,KAAKc,GAEd,OAAOkJ,GAGTuuD,EAAQv/D,UAAUg7C,WAAa,SAAmBz6C,EAAQwlC,GACxD,GAAY,WAARA,EAAkB,CACpB,MAAM65B,EAASr/D,EAAO4L,YACtB,OAAI5L,EAAO46B,QAAQykC,GACVA,EACF,CAAEA,OAAQA,EAAQj8D,KAAMpD,EAAOm8B,OACjC,GAAY,WAARqJ,EAAkB,CAC3B,MAAMrJ,EAAMn8B,EAAOm8B,MACnB,GAAIA,EAAI17B,OAAS,GAAM,EACrB,OAAOT,EAAOszB,MAAM,mDAEtB,IAAI/sB,EAAM,GACV,IAAK,IAAIhD,EAAI,EAAGA,EAAI44B,EAAI17B,OAAS,EAAG8C,IAClCgD,GAAOjB,OAAO0C,aAAam0B,EAAI32B,aAAiB,EAAJjC,IAE9C,OAAOgD,EACF,GAAY,WAARi/B,EAAkB,CAC3B,MAAMw7B,EAAShhE,EAAOm8B,MAAM34B,SAAS,SACrC,OAAKzB,KAAKo6C,UAAU6kB,GAIbA,EAHEhhE,EAAOszB,MAAM,0DAIjB,GAAY,WAARkS,EACT,OAAOxlC,EAAOm8B,MACT,GAAY,YAARqJ,EACT,OAAOxlC,EAAOm8B,MACT,GAAY,aAARqJ,EAAoB,CAC7B,MAAMy7B,EAAWjhE,EAAOm8B,MAAM34B,SAAS,SACvC,OAAKzB,KAAKq6C,YAAY6kB,GAIfA,EAHEjhE,EAAOszB,MAAM,4DAIjB,MAAI,OAAOknB,KAAKhV,GACdxlC,EAAOm8B,MAAM34B,WAEbxD,EAAOszB,MAAM,4BAA8BkS,EAAM,iBAI5Dw5B,EAAQv/D,UAAUi7C,aAAe,SAAqB16C,EAAQu/D,EAAQjgB,GACpE,IAAI7uC,EACJ,MAAMywD,EAAc,GACpB,IAAI1B,EAAQ,EACR2B,EAAW,EACf,MAAQnhE,EAAOi8B,WACbklC,EAAWnhE,EAAO4L,YAClB4zD,IAAU,EACVA,GAAoB,IAAX2B,EACiB,IAAV,IAAXA,KACHD,EAAYz6D,KAAK+4D,GACjBA,EAAQ,GAGG,IAAX2B,GACFD,EAAYz6D,KAAK+4D,GAEnB,MAAM/rB,EAASytB,EAAY,GAAK,GAAM,EAChCE,EAASF,EAAY,GAAK,GAOhC,GAJEzwD,EADE6uC,EACO4hB,EAEA,CAACztB,EAAO2tB,GAAQj4D,OAAO+3D,EAAYv+D,MAAM,IAEhD48D,EAAQ,CACV,IAAIt0C,EAAMs0C,EAAO9uD,EAAO3G,KAAK,WACjB3I,IAAR8pB,IACFA,EAAMs0C,EAAO9uD,EAAO3G,KAAK,YACf3I,IAAR8pB,IACFxa,EAASwa,GAGb,OAAOxa,GAGTuuD,EAAQv/D,UAAUk7C,YAAc,SAAoB36C,EAAQwlC,GAC1D,MAAMj/B,EAAMvG,EAAOm8B,MAAM34B,WAEzB,IAAI69D,EACAC,EACAC,EACAC,EACAl6D,EACAm6D,EACJ,GAAY,YAARj8B,EACF67B,EAAyB,EAAlB96D,EAAI5D,MAAM,EAAG,GACpB2+D,EAAwB,EAAlB/6D,EAAI5D,MAAM,EAAG,GACnB4+D,EAAwB,EAAlBh7D,EAAI5D,MAAM,EAAG,GACnB6+D,EAA0B,EAAnBj7D,EAAI5D,MAAM,EAAG,IACpB2E,EAA0B,EAApBf,EAAI5D,MAAM,GAAI,IACpB8+D,EAA0B,EAApBl7D,EAAI5D,MAAM,GAAI,QACf,IAAY,YAAR6iC,EAYT,OAAOxlC,EAAOszB,MAAM,YAAckS,EAAM,8BAXxC67B,EAAyB,EAAlB96D,EAAI5D,MAAM,EAAG,GACpB2+D,EAAwB,EAAlB/6D,EAAI5D,MAAM,EAAG,GACnB4+D,EAAwB,EAAlBh7D,EAAI5D,MAAM,EAAG,GACnB6+D,EAAyB,EAAlBj7D,EAAI5D,MAAM,EAAG,GACpB2E,EAAyB,EAAnBf,EAAI5D,MAAM,EAAG,IACnB8+D,EAA0B,EAApBl7D,EAAI5D,MAAM,GAAI,IAElB0+D,EADEA,EAAO,GACF,IAAOA,EAEP,KAAOA,EAKlB,OAAOzB,KAAK8B,IAAIL,EAAMC,EAAM,EAAGC,EAAKC,EAAMl6D,EAAKm6D,EAAK,IAGtDzC,EAAQv/D,UAAUm7C,YAAc,WAC9B,OAAO,MAGTokB,EAAQv/D,UAAUo7C,YAAc,SAAoB76C,GAClD,MAAMuH,EAAMvH,EAAO4L,YACnB,OAAI5L,EAAO46B,QAAQrzB,GACVA,EAEQ,IAARA,GAGXy3D,EAAQv/D,UAAUq7C,WAAa,SAAmB96C,EAAQu/D,GAExD,MAAMpjC,EAAMn8B,EAAOm8B,MACnB,IAAI50B,EAAM,IAAIi3D,EAAOriC,GAKrB,OAHIojC,IACFh4D,EAAMg4D,EAAOh4D,EAAI/D,SAAS,MAAQ+D,GAE7BA,GAGTy3D,EAAQv/D,UAAUu7C,KAAO,SAAaD,EAAQl4C,GAG5C,MAFsB,mBAAXk4C,IACTA,EAASA,EAAOl4C,IACXk4C,EAAO4mB,YAAY,OAAO5C,O,+MC1QnC,IAAI6C,EAAa,EAAQ,KACrB3hE,EAAS,EAAQ,KAAeA,OAapC,SAAS4hE,EAAO76D,GACd,IAAI0D,EAAMzK,EAAOW,YAAY,GAE7B,OADA8J,EAAIyC,cAAcnG,EAAG,GACd0D,EAdTtL,EAAOC,QAAU,SAAUyiE,EAAM/+D,GAI/B,IAHA,IAEIiE,EAFA0T,EAAIza,EAAOU,MAAM,GACjB4C,EAAI,EAEDmX,EAAEja,OAASsC,GAChBiE,EAAI66D,EAAMt+D,KACVmX,EAAIza,EAAOkJ,OAAO,CAACuR,EAAGknD,EAAW,QAAQ3yC,OAAO6yC,GAAM7yC,OAAOjoB,GAAG4yB,WAElE,OAAOlf,EAAE/X,MAAM,EAAGI,K,cCXpB3D,EAAOC,QAAU,SAAc2J,EAAGxE,GAGhC,IAFA,IAAIzB,EAAMiG,EAAEvI,OACR8C,GAAK,IACAA,EAAIR,GACXiG,EAAEzF,IAAMiB,EAAEjB,GAEZ,OAAOyF,I,iBCNT,IAAIoI,EAAK,EAAQ,KACbnR,EAAS,EAAQ,KAAeA,OAUpCb,EAAOC,QARP,SAAqB0iE,EAAW1hE,GAC9B,OAAOJ,EAAOS,KAAKqhE,EAChB54C,MAAM/X,EAAG2b,KAAK1sB,EAAIw1C,UAClBnrB,OAAO,IAAItZ,EAAG/Q,EAAIy1C,iBAClBvsB,UACAhY,a,8BCRL,YAsBA,IAAIwkB,EAAO,EAAQ,KACfrmB,EAAW,SAAUzG,GACvB,MAAoB,iBAANA,GAQhB,SAAS+4D,EAAetf,EAAOuf,GAE7B,IADA,IAAI16D,EAAM,GACDhE,EAAI,EAAGA,EAAIm/C,EAAMjiD,OAAQ8C,IAAK,CACrC,IAAI+R,EAAIotC,EAAMn/C,GAGT+R,GAAW,MAANA,IAGA,OAANA,EACE/N,EAAI9G,QAAkC,OAAxB8G,EAAIA,EAAI9G,OAAS,GACjC8G,EAAI2sB,MACK+tC,GACT16D,EAAId,KAAK,MAGXc,EAAId,KAAK6O,IAIb,OAAO/N,EAKT,IAAI26D,EACA,gEACAC,EAAQ,GAGZ,SAASC,EAAe9tD,GACtB,OAAO4tD,EAAYj0C,KAAK3Z,GAAU3R,MAAM,GAM1Cw/D,EAAMpxC,QAAU,WAId,IAHA,IAAIsxC,EAAe,GACfC,GAAmB,EAEd/+D,EAAIkG,UAAUhJ,OAAS,EAAG8C,IAAM,IAAM++D,EAAkB/+D,IAAK,CACpE,IAAI22C,EAAQ32C,GAAK,EAAKkG,UAAUlG,GAAKo0B,EAAQ4qC,MAG7C,IAAK7yD,EAASwqC,GACZ,MAAM,IAAIp5C,UAAU,6CACVo5C,IAIZmoB,EAAenoB,EAAO,IAAMmoB,EAC5BC,EAAsC,MAAnBpoB,EAAKlR,OAAO,IAUjC,OAASs5B,EAAmB,IAAM,KAHlCD,EAAeL,EAAeK,EAAat2C,MAAM,MAClBu2C,GAAkBx4D,KAAK,OAEG,KAK3Dq4D,EAAMK,UAAY,SAAStoB,GACzB,IAAIuoB,EAAaN,EAAMM,WAAWvoB,GAC9BwoB,EAAoC,MAApBxoB,EAAK/zC,QAAQ,GAYjC,OATA+zC,EAAO8nB,EAAe9nB,EAAKnuB,MAAM,MAAO02C,GAAY34D,KAAK,OAE3C24D,IACZvoB,EAAO,KAELA,GAAQwoB,IACVxoB,GAAQ,MAGFuoB,EAAa,IAAM,IAAMvoB,GAInCioB,EAAMM,WAAa,SAASvoB,GAC1B,MAA0B,MAAnBA,EAAKlR,OAAO,IAIrBm5B,EAAMr4D,KAAO,WAEX,IADA,IAAIowC,EAAO,GACF32C,EAAI,EAAGA,EAAIkG,UAAUhJ,OAAQ8C,IAAK,CACzC,IAAIo/D,EAAUl5D,UAAUlG,GACxB,IAAKmM,EAASizD,GACZ,MAAM,IAAI7hE,UAAU,0CAElB6hE,IAIAzoB,GAHGA,EAGK,IAAMyoB,EAFNA,GAMd,OAAOR,EAAMK,UAAUtoB,IAMzBioB,EAAM7iB,SAAW,SAAS5+C,EAAMkiE,GAI9B,SAASp0D,EAAKtJ,GAEZ,IADA,IAAInB,EAAQ,EACLA,EAAQmB,EAAIzE,QACE,KAAfyE,EAAInB,GADiBA,KAK3B,IADA,IAAIC,EAAMkB,EAAIzE,OAAS,EAChBuD,GAAO,GACK,KAAbkB,EAAIlB,GADOA,KAIjB,OAAID,EAAQC,EAAY,GACjBkB,EAAIvC,MAAMoB,EAAOC,EAAM,GAfhCtD,EAAOyhE,EAAMpxC,QAAQrwB,GAAMyF,OAAO,GAClCy8D,EAAKT,EAAMpxC,QAAQ6xC,GAAIz8D,OAAO,GAsB9B,IALA,IAAI08D,EAAYr0D,EAAK9N,EAAKqrB,MAAM,MAC5B+2C,EAAUt0D,EAAKo0D,EAAG72C,MAAM,MAExBtrB,EAAS4G,KAAKC,IAAIu7D,EAAUpiE,OAAQqiE,EAAQriE,QAC5CsiE,EAAkBtiE,EACb8C,EAAI,EAAGA,EAAI9C,EAAQ8C,IAC1B,GAAIs/D,EAAUt/D,KAAOu/D,EAAQv/D,GAAI,CAC/Bw/D,EAAkBx/D,EAClB,MAIJ,IAAIy/D,EAAc,GAClB,IAASz/D,EAAIw/D,EAAiBx/D,EAAIs/D,EAAUpiE,OAAQ8C,IAClDy/D,EAAYv8D,KAAK,MAKnB,OAFAu8D,EAAcA,EAAY75D,OAAO25D,EAAQngE,MAAMogE,KAE5Bj5D,KAAK,MAI1Bq4D,EAAMc,UAAY,SAAS/oB,GACzB,OAAOA,GAITioB,EAAMe,QAAU,SAAShpB,GACvB,IAAIzpC,EAAS2xD,EAAeloB,GACxBipB,EAAO1yD,EAAO,GACd7L,EAAM6L,EAAO,GAEjB,OAAK0yD,GAASv+D,GAKVA,IAEFA,EAAMA,EAAIuB,OAAO,EAAGvB,EAAInE,OAAS,IAG5B0iE,EAAOv+D,GARL,KAYXu9D,EAAMtgB,SAAW,SAAS3H,EAAMpvC,GAC9B,IAAIslD,EAAIgS,EAAeloB,GAAM,GAK7B,OAHIpvC,GAAOslD,EAAEjqD,QAAQ,EAAI2E,EAAIrK,UAAYqK,IACvCslD,EAAIA,EAAEjqD,OAAO,EAAGiqD,EAAE3vD,OAASqK,EAAIrK,SAE1B2vD,GAIT+R,EAAMiB,QAAU,SAASlpB,GACvB,OAAOkoB,EAAeloB,GAAM,IAI9BioB,EAAMkB,OAAS,SAASC,GACtB,IAAKvtC,EAAKjnB,SAASw0D,GACjB,MAAM,IAAIxiE,UACN,wDAA0DwiE,GAIhE,IAAIH,EAAOG,EAAWH,MAAQ,GAE9B,IAAKzzD,EAASyzD,GACZ,MAAM,IAAIriE,UACN,+DACOwiE,EAAWH,MAMxB,OAFUG,EAAW1+D,IAAM0+D,EAAW1+D,IAAMu9D,EAAMoB,IAAM,KAC7CD,EAAW7rD,MAAQ,KAKhC0qD,EAAM3iB,MAAQ,SAASgkB,GACrB,IAAK9zD,EAAS8zD,GACZ,MAAM,IAAI1iE,UACN,uDAAyD0iE,GAG/D,IAAIC,EAAWrB,EAAeoB,GAC9B,IAAKC,GAAgC,IAApBA,EAAShjE,OACxB,MAAM,IAAIK,UAAU,iBAAmB0iE,EAAa,KAMtD,OAJAC,EAAS,GAAKA,EAAS,IAAM,GAC7BA,EAAS,GAAKA,EAAS,IAAM,GAC7BA,EAAS,GAAKA,EAAS,IAAM,GAEtB,CACLN,KAAMM,EAAS,GACf7+D,IAAK6+D,EAAS,GAAKA,EAAS,GAAG9gE,MAAM,EAAG8gE,EAAS,GAAGhjE,OAAS,GAC7DgX,KAAMgsD,EAAS,GACf34D,IAAK24D,EAAS,GACdnwD,KAAMmwD,EAAS,GAAG9gE,MAAM,EAAG8gE,EAAS,GAAGhjE,OAASgjE,EAAS,GAAGhjE,UAKhE0hE,EAAMoB,IAAM,IACZpB,EAAMuB,UAAY,IAEhBtkE,EAAOC,QAAU8iE,I,+CC7QfxuD,EAAQ,KADVnD,M,MAMEmD,EAAQ,KAFVC,E,EAAAA,mBACAY,E,EAAAA,uB,EAMEb,EAAQ,KAFVktC,E,EAAAA,SACAE,E,EAAAA,qBAGI4iB,EAAWhwD,EAAQ,K,EAOrBA,EAAQ,KAJV2uC,E,EAAAA,WACAG,E,EAAAA,QACAK,E,EAAAA,sBACAS,E,EAAAA,QAqBF,SAASqgB,EAAUnzD,EAAQ6D,GAA8B,IAApBG,EAAoB,wDACnDovD,EAAe,KAEnB,IACEA,EAAepzD,EAAOkwC,YAAY9sC,SAAS,GAC3C,MAAOtL,IAIT,IAAKs7D,EACH,MAAM,IAAI7hE,MAAM,0CAVqC,MAiBnD6hE,EAFM/1C,EAf6C,EAcrDg2C,SACE7qB,KAGE8qB,EAAWJ,EAASnmB,cAAclpC,GACxC,OAAOysC,EAAqBjzB,EAAOi2C,EAAUtvD,GAG/CrV,EAAOC,QAAU,CACf2kE,QAzCF,SAAiB1vD,EAAUsZ,GACzB,IAAMm1B,EAAiB,CACrBpD,IAAK8C,EAAQ70B,EAAQq2C,UAAW3hB,EAAWhuC,IAC3C4hB,OAAQ,WACRxhB,QAAS,CACPwvD,OAAQ,aACRC,MAAO,GAETte,aAAc,QAEZhyC,EAAW,KAEf,OADAivC,EAAsBC,EAAgBn1B,GAC/B21B,EAAQR,GAAgB0D,KAAK7yC,GAAoB6yC,MAAK,SAAAl/C,GAE3D,OADAsM,EAAWtM,EACJA,EAAInE,QACVqjD,KAAK5F,GAAU4F,MAAK,SAAA3F,GAAG,OAAI8iB,EAAU9iB,EAAKxsC,EAAUsZ,EAAQw2C,YAAU3d,MAAK,SAAAh2C,GAAM,OAAI+D,EAAuBX,EAAUpD,EAAQmd,EAAQw2C,aA2BzIR,c,kQCjEF,IAAMS,EAAmB1wD,EAAQ,K,EAO7BA,EAAQ,KAJV2uC,E,EAAAA,WACAG,E,EAAAA,QACAK,E,EAAAA,sBACAS,E,EAAAA,QAGI+gB,EAAO,aAoEbllE,EAAOC,QAAU,CACfklE,iBAnEF,SAA0BR,EAAUn2C,GAClC,IAGM42C,EAAY,IAAIC,EAHP9wD,EAAQ,KAEUqpB,aAOjC,OAgCF,SAAuB+mC,EAAUn2C,GAC/B,IAAI82C,EACEhwD,EAAU,GAEa,WAAzB,EAAOkZ,EAAQ+2C,QAAqD,iBAAxB/2C,EAAQ+2C,MAAM5gE,QAC5D2gE,EAAc,SAAW92C,EAAQ+2C,MAAM5gE,MAAQ,IAEd,iBAAtB6pB,EAAQ+2C,MAAM3gE,MACvB0gE,GAAe92C,EAAQ+2C,MAAM3gE,KAG/B0Q,EAAQkwD,MAAQF,GAGlB,IAAM3hB,EAAiB,CACrBpD,IAAK8C,EAAQ70B,EAAQq2C,UAAW3hB,EAAWyhB,IAC3C7tC,OAAQ,MACRxhB,UACAmxC,aAAc,UAGhB,OADA/C,EAAsBC,EAAgBn1B,GAC/B21B,EAAQR,GAAgB0D,KAAK4d,EAAiBzwD,oBAAoB6yC,MAAK,SAAAl/C,GAAG,OAAIA,EAAInE,QA1DzFyhE,CAAcd,EAAUn2C,GAAS64B,MAAK,SAAA1a,GACpCA,EAAO/7B,KAAKw0D,MACXM,OAAM,SAAAhxD,GACP0wD,EAAUvyC,KAAK,QAASne,MAEnB0wD,GA0DPO,kBAvDF,SAA2BhB,EAAUn2C,GAA0B,IAAjBqe,EAAiB,uDAANq4B,EACjDxnC,EAASnpB,EAAQ,KAEjB8wD,EAAoB3nC,EAAOE,YAC3BgoC,EAAc,IAAIP,EAClB/vD,EAAU,IAEU,IAAtBkZ,EAAQq3C,YACVvwD,EAAQ,iBAAmB,KAG7B,IAAMquC,EAAiB,CACrBpD,IAAK8C,EAAQ70B,EAAQq2C,UAAW3hB,EAAWyhB,IAC3C7tC,OAAQ,MACRxhB,UACAtR,KAAM4hE,EACNE,aAAc,GAUhB,OARApiB,EAAsBC,EAAgBn1B,GACtC21B,EAAQR,GAAgB0D,MAAK,SAAA5yC,GAG3B,OADAsxD,WAAWl5B,EAAU,GACdp4B,KACN4yC,KAAK4d,EAAiBzwD,oBAAoBkxD,OAAM,SAAAhxD,GACjDkxD,EAAY/yC,KAAK,QAASne,MAErBkxD,K,4DClDT,IAAI7zD,EAAQ,EAAQ,KAChBvC,EAAO,EAAQ,KACfw2D,EAAQ,EAAQ,KAChBC,EAAc,EAAQ,KAS1B,SAASC,EAAeC,GACtB,IAAI9xC,EAAU,IAAI2xC,EAAMG,GACpBC,EAAW52D,EAAKw2D,EAAM3lE,UAAU8jD,QAAS9vB,GAQ7C,OALAtiB,EAAMR,OAAO60D,EAAUJ,EAAM3lE,UAAWg0B,GAGxCtiB,EAAMR,OAAO60D,EAAU/xC,GAEhB+xC,EAIT,IAAIvjB,EAAQqjB,EAtBG,EAAQ,MAyBvBrjB,EAAMmjB,MAAQA,EAGdnjB,EAAM9iD,OAAS,SAAgBsmE,GAC7B,OAAOH,EAAeD,EAAYpjB,EAAMgC,SAAUwhB,KAIpDxjB,EAAMsF,OAAS,EAAQ,KACvBtF,EAAMyjB,YAAc,EAAQ,KAC5BzjB,EAAM0jB,SAAW,EAAQ,KAGzB1jB,EAAM2jB,IAAM,SAAaC,GACvB,OAAO/0C,QAAQ80C,IAAIC,IAErB5jB,EAAM6jB,OAAS,EAAQ,KAEvB1mE,EAAOC,QAAU4iD,EAGjB7iD,EAAOC,QAAQ0mE,QAAU9jB,G,6BClDzB,IAAI9wC,EAAQ,EAAQ,KAChBwzC,EAAW,EAAQ,KACnBqhB,EAAqB,EAAQ,KAC7BC,EAAkB,EAAQ,KAC1BZ,EAAc,EAAQ,KAO1B,SAASD,EAAMK,GACb1jE,KAAKkiD,SAAWwhB,EAChB1jE,KAAKmkE,aAAe,CAClB3iB,QAAS,IAAIyiB,EACbnyD,SAAU,IAAImyD,GASlBZ,EAAM3lE,UAAU8jD,QAAU,SAAiB9X,GAGnB,iBAAXA,GACTA,EAAShiC,UAAU,IAAM,IAClBk2C,IAAMl2C,UAAU,GAEvBgiC,EAASA,GAAU,IAGrBA,EAAS45B,EAAYtjE,KAAKkiD,SAAUxY,IAGzBvV,OACTuV,EAAOvV,OAASuV,EAAOvV,OAAOryB,cACrB9B,KAAKkiD,SAAS/tB,OACvBuV,EAAOvV,OAASn0B,KAAKkiD,SAAS/tB,OAAOryB,cAErC4nC,EAAOvV,OAAS,MAIlB,IAAIiwC,EAAQ,CAACF,OAAiB9kE,GAC1BqlD,EAAU11B,QAAQC,QAAQ0a,GAU9B,IARA1pC,KAAKmkE,aAAa3iB,QAAQr0C,SAAQ,SAAoCk3D,GACpED,EAAMj0C,QAAQk0C,EAAYC,UAAWD,EAAYE,aAGnDvkE,KAAKmkE,aAAaryD,SAAS3E,SAAQ,SAAkCk3D,GACnED,EAAM1/D,KAAK2/D,EAAYC,UAAWD,EAAYE,aAGzCH,EAAM1lE,QACX+lD,EAAUA,EAAQC,KAAK0f,EAAM9/C,QAAS8/C,EAAM9/C,SAG9C,OAAOmgC,GAGT4e,EAAM3lE,UAAU8mE,OAAS,SAAgB96B,GAEvC,OADAA,EAAS45B,EAAYtjE,KAAKkiD,SAAUxY,GAC7BkZ,EAASlZ,EAAOkU,IAAKlU,EAAOxF,OAAQwF,EAAO+X,kBAAkB/0C,QAAQ,MAAO,KAIrF0C,EAAMjC,QAAQ,CAAC,SAAU,MAAO,OAAQ,YAAY,SAA6BgnB,GAE/EkvC,EAAM3lE,UAAUy2B,GAAU,SAASypB,EAAKlU,GACtC,OAAO1pC,KAAKwhD,QAAQ8hB,EAAY55B,GAAU,GAAI,CAC5CvV,OAAQA,EACRypB,IAAKA,SAKXxuC,EAAMjC,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BgnB,GAErEkvC,EAAM3lE,UAAUy2B,GAAU,SAASypB,EAAKv8C,EAAMqoC,GAC5C,OAAO1pC,KAAKwhD,QAAQ8hB,EAAY55B,GAAU,GAAI,CAC5CvV,OAAQA,EACRypB,IAAKA,EACLv8C,KAAMA,SAKZhE,EAAOC,QAAU+lE,G,6BC3FjB,IAAIj0D,EAAQ,EAAQ,KAEpB,SAAS60D,IACPjkE,KAAKykE,SAAW,GAWlBR,EAAmBvmE,UAAUg5C,IAAM,SAAa4tB,EAAWC,GAKzD,OAJAvkE,KAAKykE,SAAS//D,KAAK,CACjB4/D,UAAWA,EACXC,SAAUA,IAELvkE,KAAKykE,SAAS/lE,OAAS,GAQhCulE,EAAmBvmE,UAAUgnE,MAAQ,SAAenH,GAC9Cv9D,KAAKykE,SAASlH,KAChBv9D,KAAKykE,SAASlH,GAAM,OAYxB0G,EAAmBvmE,UAAUyP,QAAU,SAAiBC,GACtDgC,EAAMjC,QAAQnN,KAAKykE,UAAU,SAAwBjhD,GACzC,OAANA,GACFpW,EAAGoW,OAKTnmB,EAAOC,QAAU2mE,G,6BCjDjB,IAAI70D,EAAQ,EAAQ,KAChBu1D,EAAgB,EAAQ,KACxBf,EAAW,EAAQ,KACnB1hB,EAAW,EAAQ,KAKvB,SAAS0iB,EAA6Bl7B,GAChCA,EAAO8a,aACT9a,EAAO8a,YAAYqgB,mBAUvBxnE,EAAOC,QAAU,SAAyBosC,GA6BxC,OA5BAk7B,EAA6Bl7B,GAG7BA,EAAO/2B,QAAU+2B,EAAO/2B,SAAW,GAGnC+2B,EAAOroC,KAAOsjE,EACZj7B,EAAOroC,KACPqoC,EAAO/2B,QACP+2B,EAAO0Y,kBAIT1Y,EAAO/2B,QAAUvD,EAAMX,MACrBi7B,EAAO/2B,QAAQ6iC,QAAU,GACzB9L,EAAO/2B,QAAQ+2B,EAAOvV,SAAW,GACjCuV,EAAO/2B,SAGTvD,EAAMjC,QACJ,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,WAClD,SAA2BgnB,UAClBuV,EAAO/2B,QAAQwhB,OAIZuV,EAAOuY,SAAWC,EAASD,SAE1BvY,GAAQgb,MAAK,SAA6B5yC,GAUvD,OATA8yD,EAA6Bl7B,GAG7B53B,EAASzQ,KAAOsjE,EACd7yD,EAASzQ,KACTyQ,EAASa,QACT+2B,EAAO2Y,mBAGFvwC,KACN,SAA4BgzD,GAc7B,OAbKlB,EAASkB,KACZF,EAA6Bl7B,GAGzBo7B,GAAUA,EAAOhzD,WACnBgzD,EAAOhzD,SAASzQ,KAAOsjE,EACrBG,EAAOhzD,SAASzQ,KAChByjE,EAAOhzD,SAASa,QAChB+2B,EAAO2Y,qBAKNtzB,QAAQE,OAAO61C,Q,6BC1E1B,IAAI11D,EAAQ,EAAQ,KAUpB/R,EAAOC,QAAU,SAAuB+D,EAAMsR,EAASoyD,GAMrD,OAJA31D,EAAMjC,QAAQ43D,GAAK,SAAmB33D,GACpC/L,EAAO+L,EAAG/L,EAAMsR,MAGXtR,I,6BChBT,IAAI+N,EAAQ,EAAQ,KAEpB/R,EAAOC,QAAU,SAA6BqV,EAASqyD,GACrD51D,EAAMjC,QAAQwF,GAAS,SAAuB/U,EAAO2T,GAC/CA,IAASyzD,GAAkBzzD,EAAKiyC,gBAAkBwhB,EAAexhB,gBACnE7wC,EAAQqyD,GAAkBpnE,SACnB+U,EAAQpB,S,6BCNrB,IAAIyxC,EAAc,EAAQ,KAS1B3lD,EAAOC,QAAU,SAAgB0xB,EAASC,EAAQnd,GAChD,IAAIyvC,EAAiBzvC,EAAS43B,OAAO6X,eAChCzvC,EAASE,QAAWuvC,IAAkBA,EAAezvC,EAASE,QAGjEid,EAAO+zB,EACL,mCAAqClxC,EAASE,OAC9CF,EAAS43B,OACT,KACA53B,EAAS0vC,QACT1vC,IAPFkd,EAAQld,K,6BCFZzU,EAAOC,QAAU,SAAsBi0B,EAAOmY,EAAQt9B,EAAMo1C,EAAS1vC,GA4BnE,OA3BAyf,EAAMmY,OAASA,EACXt9B,IACFmlB,EAAMnlB,KAAOA,GAGfmlB,EAAMiwB,QAAUA,EAChBjwB,EAAMzf,SAAWA,EACjByf,EAAM0zC,cAAe,EAErB1zC,EAAMhpB,OAAS,WACb,MAAO,CAELkpB,QAASzxB,KAAKyxB,QACdlgB,KAAMvR,KAAKuR,KAEX2zD,YAAallE,KAAKklE,YAClBzvD,OAAQzV,KAAKyV,OAEb0vD,SAAUnlE,KAAKmlE,SACfC,WAAYplE,KAAKolE,WACjBC,aAAcrlE,KAAKqlE,aACnBxqB,MAAO76C,KAAK66C,MAEZnR,OAAQ1pC,KAAK0pC,OACbt9B,KAAMpM,KAAKoM,OAGRmlB,I,6BCtCT,IAAIniB,EAAQ,EAAQ,KAEpB/R,EAAOC,QACL8R,EAAMhB,uBAIK,CACLzN,MAAO,SAAe4Q,EAAM3T,EAAO0nE,EAASntB,EAAMotB,EAAQC,GACxD,IAAIC,EAAS,GACbA,EAAO/gE,KAAK6M,EAAO,IAAMkvC,mBAAmB7iD,IAExCwR,EAAMxB,SAAS03D,IACjBG,EAAO/gE,KAAK,WAAa,IAAIm5D,KAAKyH,GAASI,eAGzCt2D,EAAMzB,SAASwqC,IACjBstB,EAAO/gE,KAAK,QAAUyzC,GAGpB/oC,EAAMzB,SAAS43D,IACjBE,EAAO/gE,KAAK,UAAY6gE,IAGX,IAAXC,GACFC,EAAO/gE,KAAK,UAGd8J,SAASi3D,OAASA,EAAO19D,KAAK,OAGhCvE,KAAM,SAAc+N,GAClB,IAAIzJ,EAAQ0G,SAASi3D,OAAO39D,MAAM,IAAIujB,OAAO,aAAe9Z,EAAO,cACnE,OAAQzJ,EAAQ8zC,mBAAmB9zC,EAAM,IAAM,MAGjD69D,OAAQ,SAAgBp0D,GACtBvR,KAAKW,MAAM4Q,EAAM,GAAIssD,KAAKnjB,MAAQ,SAO/B,CACL/5C,MAAO,aACP6C,KAAM,WAAkB,OAAO,MAC/BmiE,OAAQ,e,6BC/ChB,IAAIC,EAAgB,EAAQ,KACxBC,EAAc,EAAQ,KAW1BxoE,EAAOC,QAAU,SAAuBgmD,EAASwiB,GAC/C,OAAIxiB,IAAYsiB,EAAcE,GACrBD,EAAYviB,EAASwiB,GAEvBA,I,6BCVTzoE,EAAOC,QAAU,SAAuBsgD,GAItC,MAAO,gCAAgCnF,KAAKmF,K,6BCH9CvgD,EAAOC,QAAU,SAAqBgmD,EAASyiB,GAC7C,OAAOA,EACHziB,EAAQ52C,QAAQ,OAAQ,IAAM,IAAMq5D,EAAYr5D,QAAQ,OAAQ,IAChE42C,I,6BCVN,IAAIl0C,EAAQ,EAAQ,KAIhB42D,EAAoB,CACtB,MAAO,gBAAiB,iBAAkB,eAAgB,OAC1D,UAAW,OAAQ,OAAQ,oBAAqB,sBAChD,gBAAiB,WAAY,eAAgB,sBAC7C,UAAW,cAAe,cAgB5B3oE,EAAOC,QAAU,SAAsBqV,GACrC,IACIrU,EACA6C,EACAK,EAHA0C,EAAS,GAKb,OAAKyO,GAELvD,EAAMjC,QAAQwF,EAAQqX,MAAM,OAAO,SAAgBi8C,GAKjD,GAJAzkE,EAAIykE,EAAKjjE,QAAQ,KACjB1E,EAAM8Q,EAAM3C,KAAKw5D,EAAK7hE,OAAO,EAAG5C,IAAIM,cACpCX,EAAMiO,EAAM3C,KAAKw5D,EAAK7hE,OAAO5C,EAAI,IAE7BlD,EAAK,CACP,GAAI4F,EAAO5F,IAAQ0nE,EAAkBhjE,QAAQ1E,IAAQ,EACnD,OAGA4F,EAAO5F,GADG,eAARA,GACa4F,EAAO5F,GAAO4F,EAAO5F,GAAO,IAAI8I,OAAO,CAACjG,IAEzC+C,EAAO5F,GAAO4F,EAAO5F,GAAO,KAAO6C,EAAMA,MAKtD+C,GAnBgBA,I,6BC9BzB,IAAIkL,EAAQ,EAAQ,KAEpB/R,EAAOC,QACL8R,EAAMhB,uBAIJ,WACE,IAEI83D,EAFAC,EAAO,kBAAkB1tB,KAAKpqC,UAAU+3D,WACxCC,EAAiB73D,SAASmsB,cAAc,KAS5C,SAAS2rC,EAAW1oB,GAClB,IAAI1B,EAAO0B,EAWX,OATIuoB,IAEFE,EAAeE,aAAa,OAAQrqB,GACpCA,EAAOmqB,EAAenqB,MAGxBmqB,EAAeE,aAAa,OAAQrqB,GAG7B,CACLA,KAAMmqB,EAAenqB,KACrBe,SAAUopB,EAAeppB,SAAWopB,EAAeppB,SAASvwC,QAAQ,KAAM,IAAM,GAChFsxC,KAAMqoB,EAAeroB,KACrBnnB,OAAQwvC,EAAexvC,OAASwvC,EAAexvC,OAAOnqB,QAAQ,MAAO,IAAM,GAC3EurB,KAAMouC,EAAepuC,KAAOouC,EAAepuC,KAAKvrB,QAAQ,KAAM,IAAM,GACpEuxC,SAAUooB,EAAepoB,SACzBF,KAAMsoB,EAAetoB,KACrB/B,SAAiD,MAAtCqqB,EAAerqB,SAAS/U,OAAO,GACxCo/B,EAAerqB,SACf,IAAMqqB,EAAerqB,UAY3B,OARAkqB,EAAYI,EAAW/3D,OAAOwuC,SAASb,MAQhC,SAAyBsqB,GAC9B,IAAItiE,EAAUkL,EAAMzB,SAAS64D,GAAeF,EAAWE,GAAcA,EACrE,OAAQtiE,EAAO+4C,WAAaipB,EAAUjpB,UAClC/4C,EAAO85C,OAASkoB,EAAUloB,MAhDlC,GAsDS,WACL,OAAO,I,6BC9Df,IAAIwH,EAAS,EAAQ,KAQrB,SAASme,EAAY8C,GACnB,GAAwB,mBAAbA,EACT,MAAM,IAAI1nE,UAAU,gCAGtB,IAAI2nE,EACJ1mE,KAAKykD,QAAU,IAAI11B,SAAQ,SAAyBC,GAClD03C,EAAiB13C,KAGnB,IAAI23C,EAAQ3mE,KACZymE,GAAS,SAAgBh1C,GACnBk1C,EAAM7B,SAKV6B,EAAM7B,OAAS,IAAItf,EAAO/zB,GAC1Bi1C,EAAeC,EAAM7B,YAOzBnB,EAAYjmE,UAAUmnE,iBAAmB,WACvC,GAAI7kE,KAAK8kE,OACP,MAAM9kE,KAAK8kE,QAQfnB,EAAYzoC,OAAS,WACnB,IAAIypB,EAIJ,MAAO,CACLgiB,MAJU,IAAIhD,GAAY,SAAkB1+D,GAC5C0/C,EAAS1/C,KAIT0/C,OAAQA,IAIZtnD,EAAOC,QAAUqmE,G,6BClCjBtmE,EAAOC,QAAU,SAAgB4sC,GAC/B,OAAO,SAAc/mC,GACnB,OAAO+mC,EAAShkC,MAAM,KAAM/C,M,gBCxBhC,YAIoB,WAElB,SAASs9D,EAAWmG,GAClB,IAAIC,EAAc,GAClB,GAAwB,IAApBD,EAASloE,OAAgB,MAAO,GAEpC,GAA2B,iBAAhBkoE,EAAS,GAClB,MAAM,IAAI7nE,UAAU,kCAAoC6nE,EAAS,IAInE,GAAIA,EAAS,GAAG9+D,MAAM,iBAAmB8+D,EAASloE,OAAS,EAAG,CAC5D,IAAIgzC,EAAQk1B,EAAStiD,QACrBsiD,EAAS,GAAKl1B,EAAQk1B,EAAS,GAI7BA,EAAS,GAAG9+D,MAAM,gBACpB8+D,EAAS,GAAKA,EAAS,GAAGl6D,QAAQ,gBAAiB,UAEnDk6D,EAAS,GAAKA,EAAS,GAAGl6D,QAAQ,gBAAiB,SAGrD,IAAK,IAAIlL,EAAI,EAAGA,EAAIolE,EAASloE,OAAQ8C,IAAK,CACxC,IAAIslE,EAAYF,EAASplE,GAEzB,GAAyB,iBAAdslE,EACT,MAAM,IAAI/nE,UAAU,kCAAoC+nE,GAGxC,KAAdA,IAEAtlE,EAAI,IAENslE,EAAYA,EAAUp6D,QAAQ,SAAU,KAIxCo6D,EAFEtlE,EAAIolE,EAASloE,OAAS,EAEZooE,EAAUp6D,QAAQ,SAAU,IAG5Bo6D,EAAUp6D,QAAQ,SAAU,KAG1Cm6D,EAAYniE,KAAKoiE,IAInB,IAAItiE,EAAMqiE,EAAY9+D,KAAK,KAOvB44C,GAHJn8C,EAAMA,EAAIkI,QAAQ,kBAAmB,OAGrBsd,MAAM,KAGtB,OAFAxlB,EAAMm8C,EAAMr8B,SAAWq8B,EAAMjiD,OAAS,EAAI,IAAK,IAAMiiD,EAAM54C,KAAK,KAKlE,OAAO,WASL,OAAO04D,EANqB,iBAAjB/4D,UAAU,GACXA,UAAU,GAEV,GAAG9G,MAAMqC,KAAKyE,cAtEWrK,EAAOC,QAASD,EAAOC,QAAUypE,SACA,0BAAjB,KAAiB,mC,6BCAxE,IAAM7mB,EAAQtuC,EAAQ,KAGpBnD,EACEmD,EAAQ,KADVnD,MAIA2xC,EACExuC,EAAQ,KADVwuC,WAIA+F,EACEv0C,EAAQ,KADVu0C,yBAeF,SAAS6gB,EAAUl1D,EAAU0nB,GAC3B,IAAMwtB,EAAal1C,EAASa,QAAQ,qBAAuB,GAE3D,GAAgD,WAA5Cq0C,EAAWh9B,MAAM,MAAM,GAAGloB,cAC5B,OAAO,EAKT,IAFA,IAAM2f,EAAK,gDAEF,CACP,IAAI3Z,EAAQ2Z,EAAGyK,KAAK86B,GAEpB,IAAKl/C,EACH,MAGF0xB,EAAQ1xB,EAAM,IAAMA,EAAM,IAAMA,EAAM,GAKxC,OAFA0xB,EAAQ+sB,KACR/sB,EAAQitB,OAhCV,WAKE,IAJA,IAEIwgB,EAAM,GAEDzlE,EAAI,EAAGA,EAJG,KAIeA,EAChCylE,GAJe,mBAIC3hE,KAAK0F,MAAM1F,KAAK4hE,SAJjB,mBAIqCxoE,SAGtD,OAAOuoE,EAuBUE,IACV,EAGT,SAAS3lB,EAAQR,GACf,OAAOZ,IAAagnB,YAAY,WAAW,SAAAv7C,GAAO,OAAIq0B,EAAMr0B,KAAUm1B,GAkDxE3jD,EAAOC,QA/CP,SAAe0jD,GAEb,IAAKA,EAAexnB,QAClB,OAAOgoB,EAAQR,GAIjB,IAAMxnB,EAAUwnB,EAAexnB,QAY/B,cAXOwnB,EAAexnB,QAElBA,EAAQ6tC,gBACVrmB,EAAiBvyC,EAAMuyC,EAAgB,CACrCruC,QAAS,CACPwwC,cAAegD,EAAyBnF,EAAgBxnB,OAMvDgoB,EAAQR,GAAgB0D,MAAK,SAAU5yC,GAC5C,GAAuB,KAAnBA,EAASE,QAGX,GAFAwnB,EAAQ6tC,cAAgBL,EAAUl1D,EAAU0nB,GAExCA,EAAQ6tC,cAMV,OAAO7lB,EALPR,EAAiBvyC,EAAMuyC,EAAgB,CACrCruC,QAAS,CACPwwC,cAAegD,EAAyBnF,EAAgBxnB,OAG7BkrB,MAAK,SAAU4iB,GAO5C,OANwB,KAApBA,EAAUt1D,OACZwnB,EAAQ6tC,eAAgB,EAExB7tC,EAAQ+sB,KAGH+gB,UAIX9tC,EAAQ+sB,KAGV,OAAOz0C,O,o6BCnGHy1D,EAAa31D,EAAQ,KAArB21D,SAGFhF,EAAO,aAEb,SAASiF,EAAcrzC,GACnB,MAAO,CACHszC,SAAUtzC,EACVgiB,QAAS,CAAChiB,GACVtH,OAAO,G,IAOT44B,E,WACF,c,4FAAc,SACVzlD,KAAK0nE,eAAiB,CAClBC,SAAU,GACVC,eAAgB,QAEpB5nE,KAAK6nE,SApBY,e,uDAyDb7/D,GAAsC,WAA9B8/D,EAA8B,wDAC1C,IAAK9/D,GA1DY,iBA0DFA,EAAO6/D,SAClB,MAAM,IAAI5nE,MACN,+EAmBR,OAhBA9C,OAAOsuB,KAAKzjB,EAAO+/D,cAAcJ,UAAUx6D,SAAQ,SAAA66D,GAC3C,EAAKD,cAAcJ,SAASr6D,eAAe06D,GACvCF,IACA,EAAKC,cAAcJ,SAASK,GAAc7qE,OAAO83B,OAC7C,GACAjtB,EAAO+/D,cAAcJ,SAASK,KAItC,EAAKD,cAAcJ,SAASK,GAAc7qE,OAAO83B,OAC7C,GACAjtB,EAAO+/D,cAAcJ,SAASK,OAI1ChgE,EAAO0/D,eAAiB1nE,KAAK+nE,cACtB/nE,O,8BAWH1B,GAAc,IAClB,IAAM61B,EAASn0B,KAAKgT,IAAI1U,IAAQikE,EADd,mBAANl0C,EAAM,iCAANA,EAAM,kBAElB,OAAO8F,EAAM,WAAN,EAAU9F,K,0BAajB/vB,GACA,IAAMu7B,EAAO75B,KAAK+nE,cAAcJ,SAASrpE,GACzC,IAAKu7B,EACD,OAAQ75B,KAAK4nE,gBACT,IAAK,OACD,OAAO,KACX,IAAK,QACD,MAAM,IAAI3nE,MAAJ,2EACkE3B,IAE5E,QACI,MAAM,IAAI2B,MAAJ,qGAEED,KAAK4nE,iBAKzB,OAAOL,EAAQ,WAAR,IAAY1tC,EAAKsc,Y,gCASlB73C,GACN,QAAS0B,KAAK+nE,cAAcJ,SAASrpE,K,4BAmBnCA,EAAK61B,GAAgC,6DAAJ,GAAI,IAAtBiwC,aAAsB,SACvC,GAAIpkE,KAAK+nE,cAAcJ,SAASrpE,IAAQ0B,KAAK+nE,cAAcJ,SAASrpE,GAAKuuB,MACrE,MAAM,IAAI5sB,MAAJ,2BAA8B3B,EAA9B,oCAEV,GAAsB,mBAAX61B,EACP,MAAM,IAAIl0B,MAAJ,2BAA8B3B,EAA9B,yCAEV,GAAI8lE,EAEKpkE,KAAK+nE,cAAcJ,SAASrpE,GAK7B0B,KAAK+nE,cAAcJ,SAASrpE,GAAK63C,QAAQzxC,KAAKyvB,GAH9Cn0B,KAAK+nE,cAAcJ,SAASrpE,GAAOkpE,EAAcrzC,QAOrD,GAAIn0B,KAAKioE,UAAU3pE,GAAM,KACbmpE,EAAaznE,KAAK+nE,cAAcJ,SAASrpE,GAAzCmpE,SACRznE,KAAK+nE,cAAcJ,SAASrpE,GAAOnB,OAAO83B,OAAOuyC,EAAcrzC,GAAS,CACpEszC,kBAGJznE,KAAK+nE,cAAcJ,SAASrpE,GAAOkpE,EAAcrzC,GAGzD,OAAOn0B,O,kCAqBC1B,EAAK61B,GACRn0B,KAAKioE,UAAU3pE,IAChB0B,KAAKkoE,MAAM5pE,EAAK61B,GAFU,2BAAN9F,EAAM,iCAANA,EAAM,kBAI9B,OAAOruB,KAAKmoE,QAAL,MAAAnoE,KAAA,CAAa1B,GAAb,OAAqB+vB,M,6BAYzB/vB,GAAiB,kCAAT63C,EAAS,iCAATA,EAAS,kBAIpB,OAHAA,EAAQhpC,SAAQ,SAAAgnB,GACZ,EAAK+zC,MAAM5pE,EAAK61B,EAAQ,CAAEiwC,OAAO,OAE9BpkE,O,8BAQH1B,GACJ,IAAK0B,KAAKioE,UAAU3pE,GAChB,MAAM,IAAI2B,MAAJ,8DAAiE3B,IACpE,GAAyD,mBAA9C0B,KAAK+nE,cAAcJ,SAASrpE,GAAKmpE,SAC/C,MAAM,IAAIxnE,MAAJ,yFACgF3B,IAG1F0B,KAAK+nE,cAAcJ,SAASrpE,GAAK63C,QAAU,CAACn2C,KAAK+nE,cAAcJ,SAASrpE,GAAKmpE,Y,+BAWxEnpE,GACL,IAAK0B,KAAK+nE,cAAcJ,SAASr6D,eAAehP,GAC5C,MAAM,IAAI2B,MAAJ,0BAA6B3B,EAA7B,wCAGV,OADA0B,KAAK+nE,cAAcJ,SAASrpE,GAAKuuB,OAAQ,EAClC7sB,O,oCA9NP,OAAOA,KAAK0nE,iB,qCAUZ,OAAO1nE,KAAK+nE,cAAcH,gB,aAGXQ,GACfpoE,KAAK+nE,cAAcH,eAAiBQ,O,gCAoN5C/qE,EAAOC,QAAUmoD,G,cCnPjBpoD,EAAOC,QAAU,CACbiqE,SAhBJ,WAA8B,2BAATpxB,EAAS,yBAATA,EAAS,gBAC1B,GAAuB,IAAnBA,EAAQz3C,OACR,MAAM,IAAIuB,MAAM,mDAEpB,OAAO,WAAoC,2BAANouB,EAAM,yBAANA,EAAM,gBAGvC,IAFA,IAAI3f,EAAS2f,EACPme,EAAQxsC,KACPm2C,EAAQz3C,OAAS,GAAG,CACvB,IAAMy1B,EAASgiB,EAAQ7xB,QACvB5V,EAAS,CAACylB,EAAOjuB,MAAMsmC,EAAO99B,IAElC,OAAOA,EAAO,O,iBCXtB,kFACE,SAAS0yD,GAGV,IAAIiH,EAA4C/qE,EAQ5CgrE,GAL0CjrE,GAC7CA,EAAOC,QAI0B,iBAAV+I,GAAsBA,GAC1CiiE,EAAWjiE,SAAWiiE,GAAcA,EAAW/5D,OAMnD,IAAIg6D,EAAwB,SAAS92C,GACpCzxB,KAAKyxB,QAAUA,IAEhB82C,EAAsB7qE,UAAY,IAAIuC,OACNsR,KAAO,wBAEvC,IAAIggB,EAAQ,SAASE,GAGpB,MAAM,IAAI82C,EAAsB92C,IAG7B+2C,EAAQ,mEAERC,EAAyB,eAuGzBnpE,EAAS,CACZ,OA5DY,SAAS6qB,GACrBA,EAAQ5mB,OAAO4mB,GACX,aAAasuB,KAAKtuB,IAGrBoH,EACC,6EAeF,IAXA,IAGItqB,EACAxE,EACAwC,EAEAhH,EAPA4Z,EAAUsS,EAAMzrB,OAAS,EACzB0rB,EAAS,GACT6H,GAAY,EAOZvzB,EAASyrB,EAAMzrB,OAASmZ,IAEnBoa,EAAWvzB,GAEnBuI,EAAIkjB,EAAMxlB,WAAWstB,IAAa,GAClCxvB,EAAI0nB,EAAMxlB,aAAastB,IAAa,EACpChtB,EAAIklB,EAAMxlB,aAAastB,GAIvB7H,GACCo+C,EAAMvhC,QAJPhpC,EAASgJ,EAAIxE,EAAIwC,IAIO,GAAK,IAC5BujE,EAAMvhC,OAAOhpC,GAAU,GAAK,IAC5BuqE,EAAMvhC,OAAOhpC,GAAU,EAAI,IAC3BuqE,EAAMvhC,OAAgB,GAAThpC,GAuBf,OAnBe,GAAX4Z,GACH5Q,EAAIkjB,EAAMxlB,WAAWstB,IAAa,EAClCxvB,EAAI0nB,EAAMxlB,aAAastB,GAEvB7H,GACCo+C,EAAMvhC,QAFPhpC,EAASgJ,EAAIxE,IAEW,IACvB+lE,EAAMvhC,OAAQhpC,GAAU,EAAK,IAC7BuqE,EAAMvhC,OAAQhpC,GAAU,EAAK,IAC7B,KAEoB,GAAX4Z,IACV5Z,EAASksB,EAAMxlB,WAAWstB,GAC1B7H,GACCo+C,EAAMvhC,OAAOhpC,GAAU,GACvBuqE,EAAMvhC,OAAQhpC,GAAU,EAAK,IAC7B,MAIKmsB,GAKP,OAnGY,SAASD,GAGrB,IAAIzrB,GAFJyrB,EAAQ5mB,OAAO4mB,GACbzd,QAAQ+7D,EAAwB,KACf/pE,OACfA,EAAS,GAAK,IAEjBA,GADAyrB,EAAQA,EAAMzd,QAAQ,OAAQ,KACfhO,SAGfA,EAAS,GAAK,GAEd,iBAAiB+5C,KAAKtuB,KAEtBoH,EACC,yEAQF,IALA,IACIm3C,EACAzqE,EAFA0qE,EAAa,EAGbv+C,EAAS,GACT6H,GAAY,IACPA,EAAWvzB,GACnBT,EAASuqE,EAAMxlE,QAAQmnB,EAAM8c,OAAOhV,IACpCy2C,EAAaC,EAAa,EAAiB,GAAbD,EAAkBzqE,EAASA,EAErD0qE,IAAe,IAElBv+C,GAAU7mB,OAAO0C,aAChB,IAAOyiE,KAAgB,EAAIC,EAAa,KAI3C,OAAOv+C,GAmEP,QAAW,cAYV,KAFD,aACC,OAAO9qB,GACP,8BAtJF,K,6CCDD,+EACE,SAAS8hE,GAGV,IAAIiH,EAA4C/qE,EAQ5CgrE,GAL0CjrE,GAC7CA,EAAOC,QAI0B,iBAAV+I,GAAsBA,GAC1CiiE,EAAWjiE,SAAWiiE,GAAcA,EAAW/5D,OAOnD,IAAIq6D,EAAqB,kCAIrBC,EAAsB,eAItBC,EAAoB,+DAEpBC,EAAsB,klGACtBC,EAAY,CAAC,IAAO,MAAM,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,KAAK,IAAS,KAAK,IAAS,KAAK,IAAS,MAAM,IAAS,iBAAiB,IAAS,UAAU,IAAS,YAAY,IAAS,OAAO,IAAS,SAAS,KAAK,MAAM,KAAK,UAAU,IAAS,SAAS,IAAS,cAAc,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,SAAS,IAAS,OAAO,IAAS,QAAQ,IAAO,OAAO,KAAe,aAAa,IAAS,QAAQ,EAAI,SAAS,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAI,QAAQ,IAAI,OAAO,IAAS,QAAQ,IAAI,QAAQ,IAAS,SAAS,IAAI,OAAO,IAAO,QAAQ,IAAI,QAAQ,IAAO,SAAS,IAAI,SAAS,IAAS,OAAO,IAAS,OAAO,IAAO,SAASC,IAAK,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAI,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAO,QAAQ,IAAO,QAAQ,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAO,OAAO,IAAO,OAAO,IAAI,SAAS,IAAI,MAAM,IAAI,MAAM,UAAY,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAI,QAAQ,IAAO,QAAQ,IAAS,QAAQ,IAAI,MAAM,IAAO,OAAO,IAAS,QAAQ,IAAS,MAAM,IAAO,MAAM,IAAS,OAAO,IAAS,QAAQ,IAAO,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAO,MAAM,IAAO,OAAO,IAAO,MAAM,IAAS,SAAS,IAAS,KAAK,IAAS,KAAK,IAAS,MAAM,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,KAAe,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,aAAa,IAAS,WAAW,IAAS,MAAM,IAAS,aAAa,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,MAAM,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,UAAU,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,KAAe,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,MAAM,IAAS,KAAK,IAAS,QAAQ,IAAS,KAAK,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,SAAS,IAAS,MAAM,IAAI,OAAO,IAAO,KAAK,IAAO,MAAM,IAAO,QAAQ,IAAI,KAAK,IAAS,MAAM,KAAU,OAAO,IAAI,SAAS,IAAS,KAAK,KAAU,MAAM,IAAS,QAAQ,IAAI,KAAK,IAAS,MAAM,KAAU,OAAO,IAAO,MAAM,IAAI,OAAO,IAAO,SAAS,IAAS,QAAQ,IAAS,KAAK,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,KAAe,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,IAAS,OAAO,IAAS,MAAM,IAAS,OAAO,IAAS,MAAM,IAAS,KAAK,IAAS,MAAM,KAAe,OAAO,IAAS,MAAM,KAAe,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,UAAU,IAAS,QAAQ,IAAS,WAAW,IAAS,WAAW,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,MAAM,IAAS,OAAO,KAAe,QAAQ,IAAS,OAAO,KAAe,OAAO,IAAS,KAAK,KAAe,MAAM,IAAS,MAAM,IAAS,KAAK,IAAS,OAAO,KAAe,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,KAAK,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,KAAe,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,YAAY,KAAe,OAAO,IAAS,OAAO,KAAe,QAAQ,IAAS,QAAQ,KAAe,SAAS,IAAS,QAAQ,KAAe,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,KAAe,UAAU,IAAS,KAAK,IAAS,MAAM,KAAe,OAAO,IAAS,KAAK,IAAS,MAAM,KAAe,OAAO,IAAS,KAAK,KAAe,MAAM,IAAS,KAAK,KAAe,MAAM,KAAe,OAAO,IAAS,MAAM,IAAS,MAAM,KAAe,OAAO,IAAS,KAAK,KAAe,OAAO,KAAe,MAAM,IAAS,KAAK,KAAe,OAAO,KAAe,MAAM,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,KAAK,IAAS,OAAO,IAAS,KAAK,IAAS,OAAO,IAAS,KAAK,IAAS,MAAM,IAAS,KAAK,IAAS,MAAM,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,KAAe,mBAAmB,IAAS,MAAM,IAAS,OAAO,KAAe,QAAQ,IAAS,MAAM,IAAS,OAAO,KAAe,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,KAAe,SAAS,IAAS,QAAQ,KAAe,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,KAAe,kBAAkB,IAAS,QAAQ,KAAe,oBAAoB,IAAS,SAAS,IAAS,UAAU,IAAS,SAAS,IAAS,UAAU,IAAS,QAAQ,KAAe,SAAS,IAAS,QAAQ,KAAe,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,KAAe,UAAU,IAAS,QAAQ,IAAS,SAAS,KAAe,UAAU,IAAS,SAAS,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,KAAK,KAAe,MAAM,IAAS,KAAK,KAAe,MAAM,KAAe,OAAO,IAAS,MAAM,IAAS,MAAM,KAAe,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,UAAU,KAAe,WAAW,IAAS,UAAU,IAAS,UAAU,IAAS,QAAQ,KAAe,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,WAAW,IAAS,WAAW,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,WAAW,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,WAAW,IAAS,kBAAkB,IAAS,mBAAmB,IAAS,YAAY,IAAS,aAAa,IAAS,WAAW,IAAS,WAAW,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,OAAO,IAAS,uBAAuB,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,mBAAmB,IAAS,oBAAoB,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,oBAAoB,IAAS,WAAW,IAAS,UAAU,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,WAAW,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,WAAW,IAAS,aAAa,IAAS,eAAe,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,KAAe,SAAS,IAAS,UAAU,IAAS,OAAO,IAAS,OAAO,IAAS,UAAU,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,UAAU,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,kBAAkB,IAAS,oBAAoB,IAAS,sBAAsB,IAAS,mBAAmB,IAAS,gBAAgB,IAAS,iBAAiB,IAAS,mBAAmB,IAAS,qBAAqB,IAAS,oBAAoB,IAAS,qBAAqB,IAAS,kBAAkB,IAAS,oBAAoB,IAAS,gBAAgB,IAAS,iBAAiB,IAAS,mBAAmB,IAAS,qBAAqB,IAAS,oBAAoB,IAAS,qBAAqB,IAAS,kBAAkB,IAAS,oBAAoB,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,eAAe,IAAS,QAAQ,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,SAAS,IAAS,WAAW,IAAS,OAAO,IAAS,QAAQ,IAAS,UAAU,IAAS,UAAU,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,WAAW,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,WAAW,IAAS,WAAW,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,UAAU,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,UAAU,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,WAAW,IAAS,kBAAkB,KAAe,qBAAqB,IAAS,mBAAmB,KAAe,sBAAsB,IAAS,SAAS,IAAS,WAAW,IAAS,UAAU,IAAS,SAAS,IAAS,WAAW,IAAS,WAAW,IAAS,OAAO,IAAS,cAAc,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,WAAW,IAAS,WAAW,IAAS,QAAQ,IAAS,WAAW,IAAS,WAAW,IAAS,UAAU,IAAS,WAAW,IAAS,UAAU,IAAS,WAAW,IAAS,UAAU,IAAS,WAAW,IAAS,UAAU,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,SAAS,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,WAAW,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,WAAW,IAAS,SAAS,IAAS,OAAO,IAAS,UAAU,IAAS,WAAW,IAAS,UAAU,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,WAAW,IAAS,WAAW,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,UAAU,IAAS,MAAM,IAAS,KAAK,IAAS,SAAS,IAAS,OAAO,IAAS,UAAU,IAAS,WAAW,IAAS,OAAO,IAAS,MAAM,IAAS,OAAO,IAAS,MAAM,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,UAAU,KAAe,WAAW,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,KAAe,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,UAAU,IAAS,QAAQ,IAAS,QAAQ,IAAS,UAAU,IAAS,UAAU,IAAS,MAAM,KAAe,OAAO,IAAS,MAAM,KAAe,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,WAAW,IAAS,WAAW,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,IAAS,MAAM,IAAS,SAAS,IAAS,SAAS,IAAS,KAAK,IAAS,KAAK,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,WAAW,KAAe,oBAAoB,IAAS,iBAAiB,KAAe,0BAA0B,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,KAAe,QAAQ,IAAS,OAAO,KAAe,QAAQ,IAAS,QAAQ,IAAS,MAAM,KAAe,OAAO,IAAS,MAAM,KAAe,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,KAAK,IAAS,KAAK,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,UAAU,IAAS,OAAO,KAAe,QAAQ,IAAS,OAAO,KAAe,QAAQ,IAAS,SAAS,IAAS,SAAS,KAAe,SAAS,IAAS,QAAQ,KAAe,SAAS,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,UAAU,IAAS,UAAU,IAAS,QAAQ,IAAS,UAAU,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,OAAO,IAAS,MAAM,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,KAAe,SAAS,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAO,SAAS,IAAO,OAAO,EAAI,SAAS,IAAO,QAAQ,IAAO,MAAM,IAAS,OAAO,IAAO,OAAO,IAAO,OAAO,IAAS,SAAS,IAAO,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,OAAO,IAAS,SAAS,IAAS,SAAS,IAAO,OAAO,IAAO,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAO,OAAO,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,QAAQ,IAAO,QAAQ,IAAO,QAAQ,IAAO,QAAQ,IAAO,OAAO,IAAO,OAAO,IAAO,SAAS,IAAO,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAO,QAAQ,IAAO,QAAQ,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,OAAO,KAAe,MAAM,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,IAAS,MAAM,KAAe,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAO,SAAS,IAAO,SAAS,IAAS,SAAS,KAAe,MAAM,IAAS,KAAK,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,KAAK,KAAe,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,MAAM,IAAO,MAAM,IAAS,KAAK,IAAS,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,OAAO,KAAe,MAAM,KAAe,OAAO,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,QAAQ,IAAO,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAO,OAAO,IAAO,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,GAAK,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,KAAe,MAAM,IAAS,UAAU,KAAe,OAAO,KAAe,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,SAAS,IAAS,SAAS,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,KAAK,KAAe,OAAO,IAAS,OAAO,IAAS,KAAK,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,QAAQ,IAAO,QAAQ,IAAO,OAAO,IAAO,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,SAAS,IAAS,SAAS,KAAe,MAAM,KAAe,OAAO,IAAS,MAAM,KAAe,OAAO,IAAS,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,IAAS,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,SAAS,IAAO,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,IAAS,MAAM,KAAe,OAAO,KAAe,MAAM,IAAS,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAO,OAAO,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,QAAQ,IAAO,QAAQ,IAAO,OAAO,IAAO,OAAO,IAAS,SAAS,IAAS,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,IAAS,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,OAAO,IAAS,SAAS,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,IAAS,OAAO,IAAS,KAAK,IAAS,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,KAAK,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAO,SAAS,IAAS,SAAS,IAAS,SAAS,IAAO,QAAQ,IAAO,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAO,OAAO,IAAO,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,IAAS,QAAQ,IAAS,QAAQ,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,KAAe,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAO,SAAS,IAAO,SAAS,IAAS,QAAQ,IAAS,QAAQ,IAAO,OAAO,IAAS,OAAO,KAAe,OAAO,KAAe,MAAM,KAAe,OAAO,IAAS,MAAM,IAAS,OAAO,KAAe,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAO,QAAQ,IAAO,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,QAAQ,IAAS,UAAU,IAAS,SAAS,IAAS,SAAS,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,SAAS,IAAS,QAAQ,IAAS,SAAS,IAAS,SAAS,IAAS,KAAK,IAAO,QAAQ,IAAS,KAAK,IAAS,KAAK,IAAS,KAAK,IAAS,KAAK,IAAS,KAAK,IAAS,UAAU,IAAS,UAAU,IAAS,KAAK,IAAS,MAAM,IAAS,KAAK,IAAS,MAAM,IAAS,OAAO,IAAS,MAAM,IAAS,QAAQ,IAAS,QAAQ,IAAS,SAAS,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,UAAU,IAAS,OAAO,IAAS,MAAM,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,QAAQ,IAAS,QAAQ,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,MAAM,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,QAAQ,IAAS,QAAQ,IAAS,MAAM,IAAS,MAAM,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,OAAO,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,IAAS,MAAM,IAAS,SAAS,IAAS,SAAS,IAAS,MAAM,IAAS,MAAM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QAAU,CACfqjC,QAAS,CACPG,KAAM,EACNK,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINpxB,IAAK,CACH8a,IAAK,EACLsW,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,wE,6BCrwBR,IAAI9xB,EAAK,EAAQ,KACbsxE,EAAW,EAAQ,KACnBvxE,EAAQ,EAAQ,KAChBylC,EAAS,EAAQ,KACjB3B,EAAO,EAAQ,KACflkC,EAASI,EAAMJ,OAEf4xE,EAAU,EAAQ,KAClBC,EAAY,EAAQ,KAExB,SAASnJ,EAAG7rD,GACV,KAAM7rB,gBAAgB03E,GACpB,OAAO,IAAIA,EAAG7rD,GAGO,iBAAZA,IACT7c,EAAO6lC,EAAOvn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","file":"photos-2.js?v=b31074219b40e28c3382","sourcesContent":["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","/* 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","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\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 '<Buffer ' + str + '>'\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","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\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;\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, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\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\n naf[i] = z;\n k.iushrn(1);\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","\"use strict\";\n\nconst minimatch = require(\"minimatch\");\n\nfunction handleResponseCode(response) {\n const status = parseInt(response.status, 10);\n let err;\n\n if (status >= 400) {\n err = new Error(\"Invalid response: \" + status + \" \" + response.statusText);\n err.status = status;\n throw err;\n }\n\n return response;\n}\n\nfunction processGlobFilter(files, glob) {\n return files.filter(file => minimatch(file.filename, glob, {\n matchBase: true\n }));\n}\n\nfunction processResponsePayload(response, data, isDetailed = false) {\n return isDetailed ? {\n data,\n headers: response.headers || {}\n } : data;\n}\n\nmodule.exports = {\n handleResponseCode,\n processGlobFilter,\n processResponsePayload\n};","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\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","(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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","'use strict';\n\nconst nameStartChar = ':A-Za-z_\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst nameChar = nameStartChar + '\\\\-.\\\\d\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nconst nameRegexp = '[' + nameStartChar + '][' + nameChar + ']*'\nconst regexName = new RegExp('^' + nameRegexp + '$');\n\nconst getAllMatches = function(string, regex) {\n const matches = [];\n let match = regex.exec(string);\n while (match) {\n const allmatches = [];\n const len = match.length;\n for (let index = 0; index < len; index++) {\n allmatches.push(match[index]);\n }\n matches.push(allmatches);\n match = regex.exec(string);\n }\n return matches;\n};\n\nconst isName = function(string) {\n const match = regexName.exec(string);\n return !(match === null || typeof match === 'undefined');\n};\n\nexports.isExist = function(v) {\n return typeof v !== 'undefined';\n};\n\nexports.isEmptyObject = function(obj) {\n return Object.keys(obj).length === 0;\n};\n\n/**\n * Copy all the properties of a into b.\n * @param {*} target\n * @param {*} a\n */\nexports.merge = function(target, a, arrayMode) {\n if (a) {\n const keys = Object.keys(a); // will return an array of own properties\n const len = keys.length; //don't make it inline\n for (let i = 0; i < len; i++) {\n if(arrayMode === 'strict'){\n target[keys[i]] = [ a[keys[i]] ];\n }else{\n target[keys[i]] = a[keys[i]];\n }\n }\n }\n};\n/* exports.merge =function (b,a){\n return Object.assign(b,a);\n} */\n\nexports.getValue = function(v) {\n if (exports.isExist(v)) {\n return v;\n } else {\n return '';\n }\n};\n\n// const fakeCall = function(a) {return a;};\n// const fakeCallNoReturn = function() {};\n\nexports.buildOptions = function(options, defaultOptions, props) {\n var newOptions = {};\n if (!options) {\n return defaultOptions; //if there are not options\n }\n\n for (let i = 0; i < props.length; i++) {\n if (options[props[i]] !== undefined) {\n newOptions[props[i]] = options[props[i]];\n } else {\n newOptions[props[i]] = defaultOptions[props[i]];\n }\n }\n return newOptions;\n};\n\nexports.isName = isName;\nexports.getAllMatches = getAllMatches;\nexports.nameRegexp = nameRegexp;\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","// 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;\nmodule.exports.once = once;\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\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\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 checkListener(listener);\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 if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\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 checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\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 checkListener(listener);\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\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n var errorListener;\n\n // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\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\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\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/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\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};","\"use strict\";\n\nfunction clone(obj) {\n return isPlainObject(obj) ? Object.assign({}, obj) : Object.setPrototypeOf(Object.assign({}, obj), Object.getPrototypeOf(obj));\n}\n\nfunction isPlainObject(obj) {\n if (typeof obj !== \"object\" || obj === null || Object.prototype.toString.call(obj) != \"[object Object]\") {\n // Not an object\n return false;\n }\n\n if (Object.getPrototypeOf(obj) === null) {\n return true;\n }\n\n let proto = obj; // Find the prototype\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(obj) === proto;\n}\n\nfunction merge(...args) {\n let output = null,\n items = [...args];\n\n while (items.length > 0) {\n const nextItem = items.shift();\n\n if (!output) {\n output = clone(nextItem);\n } else {\n output = mergeObjects(output, nextItem);\n }\n }\n\n return output;\n}\n\nfunction mergeObjects(obj1, obj2) {\n const output = clone(obj1);\n Object.keys(obj2).forEach(key => {\n if (!output.hasOwnProperty(key)) {\n output[key] = obj2[key];\n return;\n }\n\n if (Array.isArray(obj2[key])) {\n output[key] = Array.isArray(output[key]) ? [...output[key], ...obj2[key]] : [...obj2[key]];\n } else if (typeof obj2[key] === \"object\" && !!obj2[key]) {\n output[key] = typeof output[key] === \"object\" && !!output[key] ? mergeObjects(output[key], obj2[key]) : clone(obj2[key]);\n } else {\n output[key] = obj2[key];\n }\n });\n return output;\n}\n\nmodule.exports = {\n merge\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 _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\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// 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'use strict';\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\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 Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\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 get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\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 get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\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 get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\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 get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(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 } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\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// 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'use strict';\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\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 Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\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 get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\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 get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\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 get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\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 get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(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 } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\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","// 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","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","'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\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-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.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\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 const 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 const 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 (!EncoderBuffer.isEncoderBuffer(item))\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.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(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","\"use strict\";\n\nconst {\n decode,\n encode\n} = require(\"base-64\");\n\nfunction decodeHTMLEntities(str) {\n if (typeof WEB === \"undefined\") {\n // Node\n const he = require(\"he\");\n\n return he.decode(str);\n } else {\n // Nasty browser way\n const txt = document.createElement(\"textarea\");\n txt.innerHTML = str;\n return txt.value;\n }\n}\n\nfunction fromBase64(str) {\n return decode(str);\n}\n\nfunction toBase64(str) {\n return encode(str);\n}\n\nmodule.exports = {\n decodeHTMLEntities,\n fromBase64,\n toBase64\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\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\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","// 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 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","'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 this._bitLength = this.n ? this.n.bitLength() : 0;\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, this._bitLength);\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, this._bitLength);\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], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\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","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","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst xmlNode = require('./xmlNode');\nconst regx =\n '<((!\\\\[CDATA\\\\[([\\\\s\\\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\\\/)(NAME)\\\\s*>))([^<]*)'\n .replace(/NAME/g, util.nameRegexp);\n\n//const tagsRegx = new RegExp(\"<(\\\\/?[\\\\w:\\\\-\\._]+)([^>]*)>(\\\\s*\"+cdataRegx+\")*([^<]+)?\",\"g\");\n//const tagsRegx = new RegExp(\"<(\\\\/?)((\\\\w*:)?([\\\\w:\\\\-\\._]+))([^>]*)>([^<]*)(\"+cdataRegx+\"([^<]*))*([^<]+)?\",\"g\");\n\n//polyfill\nif (!Number.parseInt && window.parseInt) {\n Number.parseInt = window.parseInt;\n}\nif (!Number.parseFloat && window.parseFloat) {\n Number.parseFloat = window.parseFloat;\n}\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attrNodeName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n ignoreNameSpace: false,\n allowBooleanAttributes: false, //a tag can have attributes without any value\n //ignoreRootElement : false,\n parseNodeValue: true,\n parseAttributeValue: false,\n arrayMode: false,\n trimValues: true, //Trim string values of tag and attributes\n cdataTagName: false,\n cdataPositionChar: '\\\\c',\n tagValueProcessor: function(a, tagName) {\n return a;\n },\n attrValueProcessor: function(a, attrName) {\n return a;\n },\n stopNodes: []\n //decodeStrict: false,\n};\n\nexports.defaultOptions = defaultOptions;\n\nconst props = [\n 'attributeNamePrefix',\n 'attrNodeName',\n 'textNodeName',\n 'ignoreAttributes',\n 'ignoreNameSpace',\n 'allowBooleanAttributes',\n 'parseNodeValue',\n 'parseAttributeValue',\n 'arrayMode',\n 'trimValues',\n 'cdataTagName',\n 'cdataPositionChar',\n 'tagValueProcessor',\n 'attrValueProcessor',\n 'parseTrueNumberOnly',\n 'stopNodes'\n];\nexports.props = props;\n\n/**\n * Trim -> valueProcessor -> parse value\n * @param {string} tagName\n * @param {string} val\n * @param {object} options\n */\nfunction processTagValue(tagName, val, options) {\n if (val) {\n if (options.trimValues) {\n val = val.trim();\n }\n val = options.tagValueProcessor(val, tagName);\n val = parseValue(val, options.parseNodeValue, options.parseTrueNumberOnly);\n }\n\n return val;\n}\n\nfunction resolveNameSpace(tagname, options) {\n if (options.ignoreNameSpace) {\n const tags = tagname.split(':');\n const prefix = tagname.charAt(0) === '/' ? '/' : '';\n if (tags[0] === 'xmlns') {\n return '';\n }\n if (tags.length === 2) {\n tagname = prefix + tags[1];\n }\n }\n return tagname;\n}\n\nfunction parseValue(val, shouldParse, parseTrueNumberOnly) {\n if (shouldParse && typeof val === 'string') {\n let parsed;\n if (val.trim() === '' || isNaN(val)) {\n parsed = val === 'true' ? true : val === 'false' ? false : val;\n } else {\n if (val.indexOf('0x') !== -1) {\n //support hexa decimal\n parsed = Number.parseInt(val, 16);\n } else if (val.indexOf('.') !== -1) {\n parsed = Number.parseFloat(val);\n val = val.replace(/\\.?0+$/, \"\");\n } else {\n parsed = Number.parseInt(val, 10);\n }\n if (parseTrueNumberOnly) {\n parsed = String(parsed) === val ? parsed : val;\n }\n }\n return parsed;\n } else {\n if (util.isExist(val)) {\n return val;\n } else {\n return '';\n }\n }\n}\n\n//TODO: change regex to capture NS\n//const attrsRegx = new RegExp(\"([\\\\w\\\\-\\\\.\\\\:]+)\\\\s*=\\\\s*(['\\\"])((.|\\n)*?)\\\\2\",\"gm\");\nconst attrsRegx = new RegExp('([^\\\\s=]+)\\\\s*(=\\\\s*([\\'\"])(.*?)\\\\3)?', 'g');\n\nfunction buildAttributesMap(attrStr, options) {\n if (!options.ignoreAttributes && typeof attrStr === 'string') {\n attrStr = attrStr.replace(/\\r?\\n/g, ' ');\n //attrStr = attrStr || attrStr.trim();\n\n const matches = util.getAllMatches(attrStr, attrsRegx);\n const len = matches.length; //don't make it inline\n const attrs = {};\n for (let i = 0; i < len; i++) {\n const attrName = resolveNameSpace(matches[i][1], options);\n if (attrName.length) {\n if (matches[i][4] !== undefined) {\n if (options.trimValues) {\n matches[i][4] = matches[i][4].trim();\n }\n matches[i][4] = options.attrValueProcessor(matches[i][4], attrName);\n attrs[options.attributeNamePrefix + attrName] = parseValue(\n matches[i][4],\n options.parseAttributeValue,\n options.parseTrueNumberOnly\n );\n } else if (options.allowBooleanAttributes) {\n attrs[options.attributeNamePrefix + attrName] = true;\n }\n }\n }\n if (!Object.keys(attrs).length) {\n return;\n }\n if (options.attrNodeName) {\n const attrCollection = {};\n attrCollection[options.attrNodeName] = attrs;\n return attrCollection;\n }\n return attrs;\n }\n}\n\nconst getTraversalObj = function(xmlData, options) {\n xmlData = xmlData.replace(/(\\r\\n)|\\n/, \" \");\n options = buildOptions(options, defaultOptions, props);\n const xmlObj = new xmlNode('!xml');\n let currentNode = xmlObj;\n let textData = \"\";\n\n//function match(xmlData){\n for(let i=0; i< xmlData.length; i++){\n const ch = xmlData[i];\n if(ch === '<'){\n if( xmlData[i+1] === '/') {//Closing Tag\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"Closing Tag is not closed.\")\n let tagName = xmlData.substring(i+2,closeIndex).trim();\n\n if(options.ignoreNameSpace){\n const colonIndex = tagName.indexOf(\":\");\n if(colonIndex !== -1){\n tagName = tagName.substr(colonIndex+1);\n }\n }\n\n /* if (currentNode.parent) {\n currentNode.parent.val = util.getValue(currentNode.parent.val) + '' + processTagValue2(tagName, textData , options);\n } */\n if(currentNode){\n if(currentNode.val){\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(tagName, textData , options);\n }else{\n currentNode.val = processTagValue(tagName, textData , options);\n }\n }\n\n if (options.stopNodes.length && options.stopNodes.includes(currentNode.tagname)) {\n currentNode.child = []\n if (currentNode.attrsMap == undefined) { currentNode.attrsMap = {}}\n currentNode.val = xmlData.substr(currentNode.startIndex + 1, i - currentNode.startIndex - 1)\n }\n currentNode = currentNode.parent;\n textData = \"\";\n i = closeIndex;\n } else if( xmlData[i+1] === '?') {\n i = findClosingIndex(xmlData, \"?>\", i, \"Pi Tag is not closed.\")\n } else if(xmlData.substr(i + 1, 3) === '!--') {\n i = findClosingIndex(xmlData, \"-->\", i, \"Comment is not closed.\")\n } else if( xmlData.substr(i + 1, 2) === '!D') {\n const closeIndex = findClosingIndex(xmlData, \">\", i, \"DOCTYPE is not closed.\")\n const tagExp = xmlData.substring(i, closeIndex);\n if(tagExp.indexOf(\"[\") >= 0){\n i = xmlData.indexOf(\"]>\", i) + 1;\n }else{\n i = closeIndex;\n }\n }else if(xmlData.substr(i + 1, 2) === '![') {\n const closeIndex = findClosingIndex(xmlData, \"]]>\", i, \"CDATA is not closed.\") - 2\n const tagExp = xmlData.substring(i + 9,closeIndex);\n\n //considerations\n //1. CDATA will always have parent node\n //2. A tag with CDATA is not a leaf node so it's value would be string type.\n if(textData){\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue(currentNode.tagname, textData , options);\n textData = \"\";\n }\n\n if (options.cdataTagName) {\n //add cdata node\n const childNode = new xmlNode(options.cdataTagName, currentNode, tagExp);\n currentNode.addChild(childNode);\n //for backtracking\n currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;\n //add rest value to parent node\n if (tagExp) {\n childNode.val = tagExp;\n }\n } else {\n currentNode.val = (currentNode.val || '') + (tagExp || '');\n }\n\n i = closeIndex + 2;\n }else {//Opening tag\n const result = closingIndexForOpeningTag(xmlData, i+1)\n let tagExp = result.data;\n const closeIndex = result.index;\n const separatorIndex = tagExp.indexOf(\" \");\n let tagName = tagExp;\n if(separatorIndex !== -1){\n tagName = tagExp.substr(0, separatorIndex).trimRight();\n tagExp = tagExp.substr(separatorIndex + 1);\n }\n\n if(options.ignoreNameSpace){\n const colonIndex = tagName.indexOf(\":\");\n if(colonIndex !== -1){\n tagName = tagName.substr(colonIndex+1);\n }\n }\n\n //save text to parent node\n if (currentNode && textData) {\n if(currentNode.tagname !== '!xml'){\n currentNode.val = util.getValue(currentNode.val) + '' + processTagValue( currentNode.tagname, textData, options);\n }\n }\n\n if(tagExp.length > 0 && tagExp.lastIndexOf(\"/\") === tagExp.length - 1){//selfClosing tag\n\n if(tagName[tagName.length - 1] === \"/\"){ //remove trailing '/'\n tagName = tagName.substr(0, tagName.length - 1);\n tagExp = tagName;\n }else{\n tagExp = tagExp.substr(0, tagExp.length - 1);\n }\n\n const childNode = new xmlNode(tagName, currentNode, '');\n if(tagName !== tagExp){\n childNode.attrsMap = buildAttributesMap(tagExp, options);\n }\n currentNode.addChild(childNode);\n }else{//opening tag\n\n const childNode = new xmlNode( tagName, currentNode );\n if (options.stopNodes.length && options.stopNodes.includes(childNode.tagname)) {\n childNode.startIndex=closeIndex;\n }\n if(tagName !== tagExp){\n childNode.attrsMap = buildAttributesMap(tagExp, options);\n }\n currentNode.addChild(childNode);\n currentNode = childNode;\n }\n textData = \"\";\n i = closeIndex;\n }\n }else{\n textData += xmlData[i];\n }\n }\n return xmlObj;\n}\n\nfunction closingIndexForOpeningTag(data, i){\n let attrBoundary;\n let tagExp = \"\";\n for (let index = i; index < data.length; index++) {\n let ch = data[index];\n if (attrBoundary) {\n if (ch === attrBoundary) attrBoundary = \"\";//reset\n } else if (ch === '\"' || ch === \"'\") {\n attrBoundary = ch;\n } else if (ch === '>') {\n return {\n data: tagExp,\n index: index\n }\n } else if (ch === '\\t') {\n ch = \" \"\n }\n tagExp += ch;\n }\n}\n\nfunction findClosingIndex(xmlData, str, i, errMsg){\n const closingIndex = xmlData.indexOf(str, i);\n if(closingIndex === -1){\n throw new Error(errMsg)\n }else{\n return closingIndex + str.length - 1;\n }\n}\n\nexports.getTraversalObj = getTraversalObj;\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","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","'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","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\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","// 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/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\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/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\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/*</replacement>*/\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 /*<replacement>*/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\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\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","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 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 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","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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\nSafeBuffer.prototype = Object.create(Buffer.prototype)\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","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","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","'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 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","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","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst 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\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst 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, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\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\nconst 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 const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const 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 const 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 const state = this._baseState;\n\n // Filter children and args\n const 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 const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const 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 const 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 const state = this._baseState;\n const 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 const 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 const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const 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 const 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 const 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 const state = this._baseState;\n const 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 const 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 const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const 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 const 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 const 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 let result = state['default'];\n let present = true;\n\n let 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 let 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 const 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 let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const 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 // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\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 const 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 const 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 const 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 const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const 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 const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const 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 const 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 let 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 let content = null;\n let 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 const 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 const 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 const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const 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 if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const 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 const state = this._baseState;\n\n const 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 const 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","'use strict';\n\nconst 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 const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const 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 const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const 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 const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const 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 const 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","'use strict';\n\n// Helper\nfunction reverse(map) {\n const 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 const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = 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 = reverse(exports.tag);\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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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","\"use strict\";\n\nconst URL = require(\"url-parse\");\n\nfunction extractURLPath(fullURL) {\n const url = new URL(fullURL);\n let urlPath = url.pathname;\n\n if (urlPath.length <= 0) {\n urlPath = \"/\";\n }\n\n return normalisePath(urlPath);\n}\n\nfunction normaliseHREF(href) {\n const normalisedHref = href.replace(/^https?:\\/\\/[^\\/]+/, \"\");\n return normalisedHref;\n}\n\nfunction normalisePath(pathStr) {\n let normalisedPath = pathStr;\n\n if (normalisedPath[0] !== \"/\") {\n normalisedPath = \"/\" + normalisedPath;\n }\n\n if (/^.+\\/$/.test(normalisedPath)) {\n normalisedPath = normalisedPath.substr(0, normalisedPath.length - 1);\n }\n\n return decodeURIComponent(normalisedPath);\n}\n\nmodule.exports = {\n extractURLPath,\n normaliseHREF,\n normalisePath\n};","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\S\\s]*)/i\n , whitespace = '[\\\\x09\\\\x0A\\\\x0B\\\\x0C\\\\x0D\\\\x20\\\\xA0\\\\u1680\\\\u180E\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200A\\\\u202F\\\\u205F\\\\u3000\\\\u2028\\\\u2029\\\\uFEFF]'\n , left = new RegExp('^'+ whitespace +'+');\n\n/**\n * Trim a given string.\n *\n * @param {String} str String to trim.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(left, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address) { // Sanitize what is left of the address\n return address.replace('\\\\', '/');\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d+)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address) {\n address = trimLeft(address);\n var match = protocolre.exec(address);\n\n return {\n protocol: match[1] ? match[1].toLowerCase() : '',\n slashes: !!match[2],\n rest: match[3]\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '');\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (!extracted.slashes) instructions[3] = [/(.*)/, 'pathname'];\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n if (~(index = address.indexOf(parse))) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n if (url.auth) {\n instruction = url.auth.split(':');\n url.username = instruction[0] || '';\n url.password = instruction[1] || '';\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (/:\\d+$/.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n default:\n url[part] = value;\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result = protocol + (url.slashes ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n }\n\n result += url.host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","\"use strict\";\n\nconst xmlParser = require(\"fast-xml-parser\");\n\nconst nestedProp = require(\"nested-property\");\n\nconst {\n decodeHTMLEntities\n} = require(\"../encode.js\");\n\nfunction getPropertyOfType(obj, prop, type) {\n const val = nestedProp.get(obj, prop);\n\n if (type === \"array\" && Array.isArray(val) === false) {\n return [val];\n } else if (type === \"object\" && Array.isArray(val)) {\n return val[0];\n }\n\n return val;\n}\n\nfunction normaliseResponse(response) {\n const output = Object.assign({}, response);\n nestedProp.set(output, \"propstat\", getPropertyOfType(output, \"propstat\", \"object\"));\n nestedProp.set(output, \"propstat.prop\", getPropertyOfType(output, \"propstat.prop\", \"object\"));\n return output;\n}\n\nfunction normaliseResult(result) {\n const {\n multistatus\n } = result;\n\n if (!multistatus) {\n throw new Error(\"Invalid response: No root multistatus found\");\n }\n\n const output = {};\n output.multistatus = Array.isArray(multistatus) ? multistatus[0] : multistatus;\n nestedProp.set(output, \"multistatus.response\", getPropertyOfType(output, \"multistatus.response\", \"array\"));\n nestedProp.set(output, \"multistatus.response\", nestedProp.get(output, \"multistatus.response\").map(response => normaliseResponse(response)));\n return output;\n}\n\nfunction parseXML(xml) {\n return new Promise(resolve => {\n const result = xmlParser.parse(xml, {\n arrayMode: false,\n ignoreNameSpace: true // // We don't use the processors here as decoding is done manually\n // // later on - decoding early would break some path checks.\n // attrValueProcessor: val => decodeHTMLEntities(decodeURIComponent(val)),\n // tagValueProcessor: val => decodeHTMLEntities(decodeURIComponent(val))\n\n });\n resolve(normaliseResult(result));\n });\n}\n\nfunction prepareFileFromProps(props, rawFilename, isDetailed = false) {\n const path = require(\"path-posix\"); // Last modified time, raw size, item type and mime\n\n\n const {\n getlastmodified: lastMod = null,\n getcontentlength: rawSize = \"0\",\n resourcetype: resourceType = null,\n getcontenttype: mimeType = null,\n getetag: etag = null\n } = props;\n const type = resourceType && typeof resourceType === \"object\" && typeof resourceType.collection !== \"undefined\" ? \"directory\" : \"file\";\n const filename = decodeHTMLEntities(rawFilename);\n const stat = {\n filename: filename,\n basename: path.basename(filename),\n lastmod: lastMod,\n size: parseInt(rawSize, 10),\n type: type,\n etag: typeof etag === \"string\" ? etag.replace(/\"/g, \"\") : null\n };\n\n if (type === \"file\") {\n stat.mime = mimeType && typeof mimeType === \"string\" ? mimeType.split(\";\")[0] : \"\";\n }\n\n if (isDetailed) {\n stat.props = props;\n }\n\n return stat;\n}\n\nfunction translateDiskSpace(value) {\n switch (value.toString()) {\n case \"-3\":\n return \"unlimited\";\n\n case \"-2\":\n /* falls-through */\n\n case \"-1\":\n // -1 is non-computed\n return \"unknown\";\n\n default:\n return parseInt(value, 10);\n }\n}\n\nmodule.exports = {\n parseXML,\n prepareFileFromProps,\n translateDiskSpace\n};","\"use strict\";\n\nconst {\n axios\n} = require(\"./request.js\");\n\nconst {\n createClient\n} = require(\"./factory.js\");\n\nconst {\n getPatcher\n} = require(\"./patcher.js\");\n/**\n * @module WebDAV\n */\n\n\nmodule.exports = {\n /**\n * Axios request library\n * @type {Function}\n * @memberof module:WebDAV\n */\n axios,\n createClient,\n getPatcher\n};","\"use strict\";\n\nconst axios = require(\"axios\");\n\nconst joinURLParts = require(\"url-join\");\n\nconst fetch = require(\"./fetch.js\");\n\nconst {\n merge\n} = require(\"./merge.js\");\n\nconst SEP_PATH_POSIX = \"__PATH_SEPARATOR_POSIX__\";\nconst SEP_PATH_WINDOWS = \"__PATH_SEPARATOR_WINDOWS__\";\n/**\n * Encode a path for use with WebDAV servers\n * @param {String} path The path to encode\n * @returns {String} The encoded path (separators protected)\n */\n\nfunction encodePath(path) {\n const replaced = path.replace(/\\//g, SEP_PATH_POSIX).replace(/\\\\\\\\/g, SEP_PATH_WINDOWS);\n const formatted = encodeURIComponent(replaced);\n return formatted.split(SEP_PATH_WINDOWS).join(\"\\\\\\\\\").split(SEP_PATH_POSIX).join(\"/\");\n}\n/**\n * Join URL segments\n * @param {...String} parts URL segments to join\n * @returns {String} A joined URL string\n */\n\n\nfunction joinURL(...parts) {\n return joinURLParts(parts.reduce((output, nextPart, partIndex) => {\n if (partIndex === 0 || nextPart !== \"/\" || nextPart === \"/\" && output[output.length - 1] !== \"/\") {\n output.push(nextPart);\n }\n\n return output;\n }, []));\n}\n/**\n * @typedef {Object} UserOptions\n * @property {Object=} httpAgent - HTTP agent instance\n * @property {Object=} httpsAgent - HTTPS agent instance\n * @property {Object=} headers - Set additional request headers\n * @property {Boolean=} withCredentials - Set whether or not credentials should\n * @property {Object|String|*=} data - Set additional body\n * be included with the request. Defaults to value used by axios.\n */\n\n/**\n * Process request options before being passed to Axios\n * @param {RequestOptions} requestOptions The request options object\n * @param {UserOptions} methodOptions Provided options (external)\n */\n\n\nfunction prepareRequestOptions(requestOptions, methodOptions) {\n if (methodOptions.httpAgent) {\n requestOptions.httpAgent = methodOptions.httpAgent;\n }\n\n if (methodOptions.httpsAgent) {\n requestOptions.httpsAgent = methodOptions.httpsAgent;\n }\n\n if (methodOptions.data) {\n requestOptions.data = methodOptions.data;\n }\n\n if (methodOptions.headers && typeof methodOptions.headers === \"object\") {\n requestOptions.headers = merge(requestOptions.headers || {}, methodOptions.headers);\n }\n\n if (typeof methodOptions.withCredentials === \"boolean\") {\n requestOptions.withCredentials = methodOptions.withCredentials;\n }\n\n if (methodOptions.maxContentLength) {\n requestOptions.maxContentLength = methodOptions.maxContentLength;\n }\n\n if (methodOptions.onUploadProgress && typeof methodOptions.onUploadProgress === \"function\") {\n requestOptions.onUploadProgress = methodOptions.onUploadProgress;\n }\n\n if (methodOptions._digest) {\n requestOptions._digest = methodOptions._digest;\n\n requestOptions.validateStatus = status => status >= 200 && status < 300 || status == 401;\n }\n}\n/**\n * @typedef {Object} RequestOptions\n * @property {String} url - The URL to request\n * @property {String} method - The method to use (eg. \"POST\")\n * @property {Object=} headers - Headers to set on the request\n * @property {Object=} httpAgent - A HTTP agent instance\n * @property {Object=} httpsAgent - A HTTPS agent interface\n * @property {Object|String|*=} data - Body data for the request\n */\n\n/**\n * Make a request\n * This method can be patched by patching or plugging-in to the \"request\"\n * item using {@link https://github.com/perry-mitchell/hot-patcher HotPatcher}.\n * It uses {@link https://github.com/axios/axios Axios} by default.\n * @param {RequestOptions} requestOptions Options for the request\n * @returns {Promise.<Object>} A promise that resolves with a response object\n */\n\n\nfunction request(requestOptions) {\n return fetch(requestOptions);\n}\n\nmodule.exports = {\n axios,\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n};","module.exports = require('./lib/axios');","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n if (\n (utils.isBlob(requestData) || utils.isFile(requestData)) &&\n requestData.type\n ) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = unescape(encodeURIComponent(config.auth.password)) || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","\"use strict\";\n\nconst HotPatcher = require(\"hot-patcher\");\n\nlet __patcher = null;\n/**\n * Get the HotPatcher instance for patching internal methods\n * @returns {HotPatcher} The internal HotPatcher instance\n */\n\nfunction getPatcher() {\n if (!__patcher) {\n __patcher = new HotPatcher();\n }\n\n return __patcher;\n}\n\nmodule.exports = {\n getPatcher\n};","\"use strict\";\n\nconst {\n toBase64\n} = require(\"./encode.js\");\n\nconst {\n md5,\n ha1Compute\n} = require(\"./crypto.js\");\n\nfunction generateBasicAuthHeader(username, password) {\n const encoded = toBase64(`${username}:${password}`);\n return `Basic ${encoded}`;\n}\n\nfunction generateDigestAuthHeader(options, digest) {\n const url = options.url.replace(\"//\", \"\");\n const uri = url.indexOf(\"/\") == -1 ? \"/\" : url.slice(url.indexOf(\"/\"));\n const method = options.method ? options.method.toUpperCase() : \"GET\";\n const qop = /(^|,)\\s*auth\\s*($|,)/.test(digest.qop) ? \"auth\" : false;\n const ncString = `00000000${digest.nc}`.slice(-8);\n const cnonce = digest.cnonce;\n const ha1 = ha1Compute(digest.algorithm, digest.username, digest.realm, digest.password, digest.nonce, digest.cnonce);\n const ha2 = md5(`${method}:${uri}`);\n const digestResponse = qop ? md5(`${ha1}:${digest.nonce}:${ncString}:${digest.cnonce}:${qop}:${ha2}`) : md5(`${ha1}:${digest.nonce}:${ha2}`);\n const authValues = {\n username: digest.username,\n realm: digest.realm,\n nonce: digest.nonce,\n uri,\n qop,\n response: digestResponse,\n nc: ncString,\n cnonce: digest.cnonce,\n algorithm: digest.algorithm,\n opaque: digest.opaque\n };\n const authHeader = [];\n\n for (var k in authValues) {\n if (authValues[k]) {\n if (k === \"qop\" || k === \"nc\" || k === \"algorithm\") {\n authHeader.push(`${k}=${authValues[k]}`);\n } else {\n authHeader.push(`${k}=\"${authValues[k]}\"`);\n }\n }\n }\n\n return `Digest ${authHeader.join(\", \")}`;\n}\n\nfunction generateTokenAuthHeader(tokenInfo) {\n return `${tokenInfo.token_type} ${tokenInfo.access_token}`;\n}\n\nmodule.exports = {\n generateBasicAuthHeader,\n generateTokenAuthHeader,\n generateDigestAuthHeader\n};","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-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","// 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'use strict';\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\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); // 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\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // 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\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // 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\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // 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\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; // 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\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // 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\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\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 if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\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 get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\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.\n\n\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\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\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\n if (er) {\n errorOrDestroy(stream, 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) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\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 maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\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 if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\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\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\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 } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // 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\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || 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); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\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 // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\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; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // 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\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 = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\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; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\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.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\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.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\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.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\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\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\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 } // 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\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\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 cleanedUp = true; // 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\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\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', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\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 = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\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 if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\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, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\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\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\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.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\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 stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\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\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\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 get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\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 get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\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 get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\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 get() {\n return this._readableState.length;\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.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\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.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\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\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\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) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\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\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\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.finalCalled = false;\n this._writableState.prefinished = 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\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\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// 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'use strict';\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // 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 // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // 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\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // 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\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // 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\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // 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\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // 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\n this.sync = true; // 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\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\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 value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // 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 // 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 // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\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.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\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 if (typeof cb !== 'function') cb = nop;\n if (state.ending) 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 return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !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 ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\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 get() {\n return this._writableState && this._writableState.getBuffer();\n }\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\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 get() {\n return this._writableState.highWaterMark;\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.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\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\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\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 (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else 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 process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, 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 errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\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 if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\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) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\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} // 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.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\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 var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\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 doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // 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\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 ERR_METHOD_NOT_IMPLEMENTED('_write()'));\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); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\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 get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.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\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\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\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\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 get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n 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// 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'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\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 Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // 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\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\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}; // 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.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\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\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}; // 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.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\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 Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar 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\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar 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\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\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/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\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/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/*</replacement>*/\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}","module.exports = require('events').EventEmitter;\n","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\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};","// 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/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\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}","'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","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\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 defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n defaultEncoding = 'utf-8'\n} else if (process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\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(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\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","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\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","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./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","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","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 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 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 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","(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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 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","// 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'use strict';\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\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); // 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\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // 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\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // 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\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // 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\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; // 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\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // 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\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\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 if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\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 get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\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.\n\n\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\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\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\n if (er) {\n errorOrDestroy(stream, 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) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\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 maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\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 if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\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\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\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 } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // 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\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || 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); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\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 // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\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; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // 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\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 = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\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; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\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.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\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.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\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.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\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\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\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 } // 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\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\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 cleanedUp = true; // 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\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\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', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\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 = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\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 if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\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, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\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\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\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.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\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 stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\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\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\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 get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\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 get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\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 get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\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 get() {\n return this._readableState.length;\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.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\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.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\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\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\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) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\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\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\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.finalCalled = false;\n this._writableState.prefinished = 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\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\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// 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'use strict';\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // 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 // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // 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\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // 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\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // 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\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // 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\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // 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\n this.sync = true; // 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\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\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 value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // 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 // 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 // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\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.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\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 if (typeof cb !== 'function') cb = nop;\n if (state.ending) 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 return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !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 ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\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 get() {\n return this._writableState && this._writableState.getBuffer();\n }\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\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 get() {\n return this._writableState.highWaterMark;\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.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\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\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\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 (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else 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 process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, 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 errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\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 if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\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) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\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} // 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.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\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 var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\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 doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // 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\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 ERR_METHOD_NOT_IMPLEMENTED('_write()'));\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); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\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 get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.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\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\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\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\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 get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n 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// 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'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\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 Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // 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\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\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}; // 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.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\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\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}; // 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.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\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 Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\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","'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 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 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');\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","(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 var z = 0;\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n var b;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n b = c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n\n r |= b;\n z |= b;\n }\n\n assert(!(z & 0xf0), 'Invalid character in ' + str);\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 b = 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 b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\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 function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\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 // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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.modrn(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, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\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 var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\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] >>> wbit) & 0x01;\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 // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(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 var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\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 isNegNum ? this.ineg() : 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.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(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.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\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 isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\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 this._strip();\n return isNegNum ? this.ineg() : this;\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 if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\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\n move(a, a.umod(this.m)._forceRed(this));\n return a;\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","'use strict';\n\nconst 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","(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../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 Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(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 let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let 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 const buf = Buffer.alloc(str.length * 2);\n for (let 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 (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let 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 let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let 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 let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\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.getUTCFullYear() % 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 const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(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 let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let 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(Buffer.from(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 const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const 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 let 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","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../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 (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const 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 const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let 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 const state = buffer.save();\n const 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 for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let 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 const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const 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 const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let 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 const 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 const 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 let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n 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 const first = (identifiers[0] / 40) | 0;\n const 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 let 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 const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n 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() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const 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 const raw = buffer.raw();\n let 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 let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let 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 const 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 let 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 const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\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","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","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","// 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';\nvar util = require('util');\nvar isString = function (x) {\n return typeof x === 'string';\n};\n\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes 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 var res = [];\n for (var i = 0; i < parts.length; i++) {\n var p = parts[i];\n\n // ignore empty parts\n if (!p || p === '.')\n continue;\n\n if (p === '..') {\n if (res.length && res[res.length - 1] !== '..') {\n res.pop();\n } else if (allowAboveRoot) {\n res.push('..');\n }\n } else {\n res.push(p);\n }\n }\n\n return res;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar posix = {};\n\n\nfunction posixSplitPath(filename) {\n return splitPathRe.exec(filename).slice(1);\n}\n\n\n// path.resolve([from ...], to)\n// posix version\nposix.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 (!isString(path)) {\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(resolvedPath.split('/'),\n !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nposix.normalize = function(path) {\n var isAbsolute = posix.isAbsolute(path),\n trailingSlash = path.substr(-1) === '/';\n\n // Normalize the path\n path = normalizeArray(path.split('/'), !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\nposix.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nposix.join = function() {\n var path = '';\n for (var i = 0; i < arguments.length; i++) {\n var segment = arguments[i];\n if (!isString(segment)) {\n throw new TypeError('Arguments to path.join must be strings');\n }\n if (segment) {\n if (!path) {\n path += segment;\n } else {\n path += '/' + segment;\n }\n }\n }\n return posix.normalize(path);\n};\n\n\n// path.relative(from, to)\n// posix version\nposix.relative = function(from, to) {\n from = posix.resolve(from).substr(1);\n to = posix.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 + 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\n\nposix._makeLong = function(path) {\n return path;\n};\n\n\nposix.dirname = function(path) {\n var result = posixSplitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nposix.basename = function(path, ext) {\n var f = posixSplitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nposix.extname = function(path) {\n return posixSplitPath(path)[3];\n};\n\n\nposix.format = function(pathObject) {\n if (!util.isObject(pathObject)) {\n throw new TypeError(\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\n );\n }\n\n var root = pathObject.root || '';\n\n if (!isString(root)) {\n throw new TypeError(\n \"'pathObject.root' must be a string or undefined, not \" +\n typeof pathObject.root\n );\n }\n\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\n var base = pathObject.base || '';\n return dir + base;\n};\n\n\nposix.parse = function(pathString) {\n if (!isString(pathString)) {\n throw new TypeError(\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\n );\n }\n var allParts = posixSplitPath(pathString);\n if (!allParts || allParts.length !== 4) {\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\n }\n allParts[1] = allParts[1] || '';\n allParts[2] = allParts[2] || '';\n allParts[3] = allParts[3] || '';\n\n return {\n root: allParts[0],\n dir: allParts[0] + allParts[1].slice(0, allParts[1].length - 1),\n base: allParts[2],\n ext: allParts[3],\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\n };\n};\n\n\nposix.sep = '/';\nposix.delimiter = ':';\n\n module.exports = posix;\n","\"use strict\";\n\nconst {\n merge\n} = require(\"../merge.js\");\n\nconst {\n handleResponseCode,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n parseXML,\n prepareFileFromProps\n} = require(\"./dav.js\");\n\nconst urlTools = require(\"../url.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction getStat(filename, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"PROPFIND\",\n headers: {\n Accept: \"text/plain\",\n Depth: 0\n },\n responseType: \"text\"\n };\n let response = null;\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => {\n response = res;\n return res.data;\n }).then(parseXML).then(xml => parseStat(xml, filename, options.details)).then(result => processResponsePayload(response, result, options.details));\n}\n\nfunction parseStat(result, filename, isDetailed = false) {\n let responseItem = null;\n\n try {\n responseItem = result.multistatus.response[0];\n } catch (e) {\n /* ignore */\n }\n\n if (!responseItem) {\n throw new Error(\"Failed getting item stat: bad response\");\n }\n\n const {\n propstat: {\n prop: props\n }\n } = responseItem;\n const filePath = urlTools.normalisePath(filename);\n return prepareFileFromProps(props, filePath, isDetailed);\n}\n\nmodule.exports = {\n getStat,\n parseStat\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst NOOP = () => {};\n\nfunction createReadStream(filePath, options) {\n const Stream = require(\"stream\");\n\n const PassThroughStream = Stream.PassThrough;\n const outStream = new PassThroughStream();\n getFileStream(filePath, options).then(stream => {\n stream.pipe(outStream);\n }).catch(err => {\n outStream.emit(\"error\", err);\n });\n return outStream;\n}\n\nfunction createWriteStream(filePath, options, callback = NOOP) {\n const Stream = require(\"stream\");\n\n const PassThroughStream = Stream.PassThrough;\n const writeStream = new PassThroughStream();\n const headers = {};\n\n if (options.overwrite === false) {\n headers[\"If-None-Match\"] = \"*\";\n }\n\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"PUT\",\n headers,\n data: writeStream,\n maxRedirects: 0\n };\n prepareRequestOptions(requestOptions, options);\n request(requestOptions).then(response => {\n // Fire callback asynchronously to avoid errors\n setTimeout(callback, 0);\n return response;\n }).then(responseHandlers.handleResponseCode).catch(err => {\n writeStream.emit(\"error\", err);\n });\n return writeStream;\n}\n\nfunction getFileStream(filePath, options) {\n let rangeHeader;\n const headers = {};\n\n if (typeof options.range === \"object\" && typeof options.range.start === \"number\") {\n rangeHeader = \"bytes=\" + options.range.start + \"-\";\n\n if (typeof options.range.end === \"number\") {\n rangeHeader += options.range.end;\n }\n\n headers.Range = rangeHeader;\n }\n\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"GET\",\n headers,\n responseType: \"stream\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode).then(res => res.data);\n}\n\nmodule.exports = {\n createReadStream,\n createWriteStream\n};","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","(function (name, context, definition) {\n if (typeof module !== 'undefined' && module.exports) module.exports = definition();\n else if (typeof define === 'function' && define.amd) define(definition);\n else context[name] = definition();\n})('urljoin', this, function () {\n\n function normalize (strArray) {\n var resultArray = [];\n if (strArray.length === 0) { return ''; }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n var first = strArray.shift();\n strArray[0] = first + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (var i = 0; i < strArray.length; i++) {\n var component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') { continue; }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n\n }\n\n var str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n var parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n return str;\n }\n\n return function () {\n var input;\n\n if (typeof arguments[0] === 'object') {\n input = arguments[0];\n } else {\n input = [].slice.call(arguments);\n }\n\n return normalize(input);\n };\n\n});\n","\"use strict\";\n\nconst axios = require(\"axios\");\n\nconst {\n merge\n} = require(\"./merge.js\");\n\nconst {\n getPatcher\n} = require(\"./patcher.js\");\n\nconst {\n generateDigestAuthHeader\n} = require(\"./auth.js\");\n\nfunction makeNonce() {\n const cnonceSize = 32;\n const nonceRaw = \"abcdef0123456789\";\n let uid = \"\";\n\n for (let i = 0; i < cnonceSize; ++i) {\n uid += nonceRaw[Math.floor(Math.random() * nonceRaw.length)];\n }\n\n return uid;\n}\n\nfunction parseAuth(response, _digest) {\n const authHeader = response.headers[\"www-authenticate\"] || \"\";\n\n if (authHeader.split(/\\s/)[0].toLowerCase() !== \"digest\") {\n return false;\n }\n\n const re = /([a-z0-9_-]+)=(?:\"([^\"]+)\"|([a-z0-9_-]+))/gi;\n\n for (;;) {\n var match = re.exec(authHeader);\n\n if (!match) {\n break;\n }\n\n _digest[match[1]] = match[2] || match[3];\n }\n\n _digest.nc++;\n _digest.cnonce = makeNonce();\n return true;\n}\n\nfunction request(requestOptions) {\n return getPatcher().patchInline(\"request\", options => axios(options), requestOptions);\n}\n\nfunction fetch(requestOptions) {\n // Client not configured for digest authentication\n if (!requestOptions._digest) {\n return request(requestOptions);\n } // Remove client's digest authentication object from request options\n\n\n const _digest = requestOptions._digest;\n delete requestOptions._digest; // If client is already using digest authentication, include the digest authorization header\n\n if (_digest.hasDigestAuth) {\n requestOptions = merge(requestOptions, {\n headers: {\n Authorization: generateDigestAuthHeader(requestOptions, _digest)\n }\n });\n } // Perform the request and handle digest authentication\n\n\n return request(requestOptions).then(function (response) {\n if (response.status == 401) {\n _digest.hasDigestAuth = parseAuth(response, _digest);\n\n if (_digest.hasDigestAuth) {\n requestOptions = merge(requestOptions, {\n headers: {\n Authorization: generateDigestAuthHeader(requestOptions, _digest)\n }\n });\n return request(requestOptions).then(function (response2) {\n if (response2.status == 401) {\n _digest.hasDigestAuth = false;\n } else {\n _digest.nc++;\n }\n\n return response2;\n });\n }\n } else {\n _digest.nc++;\n }\n\n return response;\n });\n}\n\nmodule.exports = fetch;","const { sequence } = require(\"./functions.js\");\n\nconst HOT_PATCHER_TYPE = \"@@HOTPATCHER\";\nconst NOOP = () => {};\n\nfunction createNewItem(method) {\n return {\n original: method,\n methods: [method],\n final: false\n };\n}\n\n/**\n * Hot patching manager class\n */\nclass HotPatcher {\n constructor() {\n this._configuration = {\n registry: {},\n getEmptyAction: \"null\"\n };\n this.__type__ = HOT_PATCHER_TYPE;\n }\n\n /**\n * Configuration object reference\n * @type {Object}\n * @memberof HotPatcher\n * @readonly\n */\n get configuration() {\n return this._configuration;\n }\n\n /**\n * The action to take when a non-set method is requested\n * Possible values: null/throw\n * @type {String}\n * @memberof HotPatcher\n */\n get getEmptyAction() {\n return this.configuration.getEmptyAction;\n }\n\n set getEmptyAction(newAction) {\n this.configuration.getEmptyAction = newAction;\n }\n\n /**\n * Control another hot-patcher instance\n * Force the remote instance to use patched methods from calling instance\n * @param {HotPatcher} target The target instance to control\n * @param {Boolean=} allowTargetOverrides Allow the target to override patched methods on\n * the controller (default is false)\n * @memberof HotPatcher\n * @returns {HotPatcher} Returns self\n * @throws {Error} Throws if the target is invalid\n */\n control(target, allowTargetOverrides = false) {\n if (!target || target.__type__ !== HOT_PATCHER_TYPE) {\n throw new Error(\n \"Failed taking control of target HotPatcher instance: Invalid type or object\"\n );\n }\n Object.keys(target.configuration.registry).forEach(foreignKey => {\n if (this.configuration.registry.hasOwnProperty(foreignKey)) {\n if (allowTargetOverrides) {\n this.configuration.registry[foreignKey] = Object.assign(\n {},\n target.configuration.registry[foreignKey]\n );\n }\n } else {\n this.configuration.registry[foreignKey] = Object.assign(\n {},\n target.configuration.registry[foreignKey]\n );\n }\n });\n target._configuration = this.configuration;\n return this;\n }\n\n /**\n * Execute a patched method\n * @param {String} key The method key\n * @param {...*} args Arguments to pass to the method (optional)\n * @memberof HotPatcher\n * @see HotPatcher#get\n * @returns {*} The output of the called method\n */\n execute(key, ...args) {\n const method = this.get(key) || NOOP;\n return method(...args);\n }\n\n /**\n * Get a method for a key\n * @param {String} key The method key\n * @returns {Function|null} Returns the requested function or null if the function\n * does not exist and the host is configured to return null (and not throw)\n * @memberof HotPatcher\n * @throws {Error} Throws if the configuration specifies to throw and the method\n * does not exist\n * @throws {Error} Throws if the `getEmptyAction` value is invalid\n */\n get(key) {\n const item = this.configuration.registry[key];\n if (!item) {\n switch (this.getEmptyAction) {\n case \"null\":\n return null;\n case \"throw\":\n throw new Error(\n `Failed handling method request: No method provided for override: ${key}`\n );\n default:\n throw new Error(\n `Failed handling request which resulted in an empty method: Invalid empty-action specified: ${\n this.getEmptyAction\n }`\n );\n }\n }\n return sequence(...item.methods);\n }\n\n /**\n * Check if a method has been patched\n * @param {String} key The function key\n * @returns {Boolean} True if already patched\n * @memberof HotPatcher\n */\n isPatched(key) {\n return !!this.configuration.registry[key];\n }\n\n /**\n * @typedef {Object} PatchOptions\n * @property {Boolean=} chain - Whether or not to allow chaining execution. Chained\n * execution allows for attaching multiple callbacks to a key, where the callbacks\n * will be executed in order of when they were patched (oldest to newest), the\n * values being passed from one method to another.\n */\n\n /**\n * Patch a method name\n * @param {String} key The method key to patch\n * @param {Function} method The function to set\n * @param {PatchOptions=} options Patch options\n * @memberof HotPatcher\n * @returns {HotPatcher} Returns self\n */\n patch(key, method, { chain = false } = {}) {\n if (this.configuration.registry[key] && this.configuration.registry[key].final) {\n throw new Error(`Failed patching '${key}': Method marked as being final`);\n }\n if (typeof method !== \"function\") {\n throw new Error(`Failed patching '${key}': Provided method is not a function`);\n }\n if (chain) {\n // Add new method to the chain\n if (!this.configuration.registry[key]) {\n // New key, create item\n this.configuration.registry[key] = createNewItem(method);\n } else {\n // Existing, push the method\n this.configuration.registry[key].methods.push(method);\n }\n } else {\n // Replace the original\n if (this.isPatched(key)) {\n const { original } = this.configuration.registry[key];\n this.configuration.registry[key] = Object.assign(createNewItem(method), {\n original\n });\n } else {\n this.configuration.registry[key] = createNewItem(method);\n }\n }\n return this;\n }\n\n /**\n * Patch a method inline, execute it and return the value\n * Used for patching contents of functions. This method will not apply a patched\n * function if it has already been patched, allowing for external overrides to\n * function. It also means that the function is cached so that it is not\n * instantiated every time the outer function is invoked.\n * @param {String} key The function key to use\n * @param {Function} method The function to patch (once, only if not patched)\n * @param {...*} args Arguments to pass to the function\n * @returns {*} The output of the patched function\n * @memberof HotPatcher\n * @example\n * function mySpecialFunction(a, b) {\n * return hotPatcher.patchInline(\"func\", (a, b) => {\n * return a + b;\n * }, a, b);\n * }\n */\n patchInline(key, method, ...args) {\n if (!this.isPatched(key)) {\n this.patch(key, method);\n }\n return this.execute(key, ...args);\n }\n\n /**\n * Patch a method (or methods) in sequential-mode\n * See `patch()` with the option `chain: true`\n * @see patch\n * @param {String} key The key to patch\n * @param {...Function} methods The methods to patch\n * @returns {HotPatcher} Returns self\n * @memberof HotPatcher\n */\n plugin(key, ...methods) {\n methods.forEach(method => {\n this.patch(key, method, { chain: true });\n });\n return this;\n }\n\n /**\n * Restore a patched method if it has been overridden\n * @param {String} key The method key\n * @memberof HotPatcher\n */\n restore(key) {\n if (!this.isPatched(key)) {\n throw new Error(`Failed restoring method: No method present for key: ${key}`);\n } else if (typeof this.configuration.registry[key].original !== \"function\") {\n throw new Error(\n `Failed restoring method: Original method not found or of invalid type for key: ${key}`\n );\n }\n this.configuration.registry[key].methods = [this.configuration.registry[key].original];\n }\n\n /**\n * Set a method as being final\n * This sets a method as having been finally overridden. Attempts at overriding\n * again will fail with an error.\n * @param {String} key The key to make final\n * @memberof HotPatcher\n * @returns {HotPatcher} Returns self\n */\n setFinal(key) {\n if (!this.configuration.registry.hasOwnProperty(key)) {\n throw new Error(`Failed marking '${key}' as final: No method found for key`);\n }\n this.configuration.registry[key].final = true;\n return this;\n }\n}\n\nmodule.exports = HotPatcher;\n","function sequence(...methods) {\n if (methods.length === 0) {\n throw new Error(\"Failed creating sequence: No functions provided\");\n }\n return function __executeSequence(...args) {\n let result = args;\n const _this = this;\n while (methods.length > 0) {\n const method = methods.shift();\n result = [method.apply(_this, result)];\n }\n return result[0];\n };\n}\n\nmodule.exports = {\n sequence\n};\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/*! https://mths.be/he v1.2.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t// All astral symbols.\n\tvar regexAstralSymbols = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n\t// All ASCII symbols (not just printable ASCII) except those listed in the\n\t// first column of the overrides table.\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides\n\tvar regexAsciiWhitelist = /[\\x01-\\x7F]/g;\n\t// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or\n\t// code points listed in the first column of the overrides table on\n\t// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.\n\tvar regexBmpWhitelist = /[\\x01-\\t\\x0B\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g;\n\n\tvar regexEncodeNonAscii = /<\\u20D2|=\\u20E5|>\\u20D2|\\u205F\\u200A|\\u219D\\u0338|\\u2202\\u0338|\\u2220\\u20D2|\\u2229\\uFE00|\\u222A\\uFE00|\\u223C\\u20D2|\\u223D\\u0331|\\u223E\\u0333|\\u2242\\u0338|\\u224B\\u0338|\\u224D\\u20D2|\\u224E\\u0338|\\u224F\\u0338|\\u2250\\u0338|\\u2261\\u20E5|\\u2264\\u20D2|\\u2265\\u20D2|\\u2266\\u0338|\\u2267\\u0338|\\u2268\\uFE00|\\u2269\\uFE00|\\u226A\\u0338|\\u226A\\u20D2|\\u226B\\u0338|\\u226B\\u20D2|\\u227F\\u0338|\\u2282\\u20D2|\\u2283\\u20D2|\\u228A\\uFE00|\\u228B\\uFE00|\\u228F\\u0338|\\u2290\\u0338|\\u2293\\uFE00|\\u2294\\uFE00|\\u22B4\\u20D2|\\u22B5\\u20D2|\\u22D8\\u0338|\\u22D9\\u0338|\\u22DA\\uFE00|\\u22DB\\uFE00|\\u22F5\\u0338|\\u22F9\\u0338|\\u2933\\u0338|\\u29CF\\u0338|\\u29D0\\u0338|\\u2A6D\\u0338|\\u2A70\\u0338|\\u2A7D\\u0338|\\u2A7E\\u0338|\\u2AA1\\u0338|\\u2AA2\\u0338|\\u2AAC\\uFE00|\\u2AAD\\uFE00|\\u2AAF\\u0338|\\u2AB0\\u0338|\\u2AC5\\u0338|\\u2AC6\\u0338|\\u2ACB\\uFE00|\\u2ACC\\uFE00|\\u2AFD\\u20E5|[\\xA0-\\u0113\\u0116-\\u0122\\u0124-\\u012B\\u012E-\\u014D\\u0150-\\u017E\\u0192\\u01B5\\u01F5\\u0237\\u02C6\\u02C7\\u02D8-\\u02DD\\u0311\\u0391-\\u03A1\\u03A3-\\u03A9\\u03B1-\\u03C9\\u03D1\\u03D2\\u03D5\\u03D6\\u03DC\\u03DD\\u03F0\\u03F1\\u03F5\\u03F6\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E\\u045F\\u2002-\\u2005\\u2007-\\u2010\\u2013-\\u2016\\u2018-\\u201A\\u201C-\\u201E\\u2020-\\u2022\\u2025\\u2026\\u2030-\\u2035\\u2039\\u203A\\u203E\\u2041\\u2043\\u2044\\u204F\\u2057\\u205F-\\u2063\\u20AC\\u20DB\\u20DC\\u2102\\u2105\\u210A-\\u2113\\u2115-\\u211E\\u2122\\u2124\\u2127-\\u2129\\u212C\\u212D\\u212F-\\u2131\\u2133-\\u2138\\u2145-\\u2148\\u2153-\\u215E\\u2190-\\u219B\\u219D-\\u21A7\\u21A9-\\u21AE\\u21B0-\\u21B3\\u21B5-\\u21B7\\u21BA-\\u21DB\\u21DD\\u21E4\\u21E5\\u21F5\\u21FD-\\u2205\\u2207-\\u2209\\u220B\\u220C\\u220F-\\u2214\\u2216-\\u2218\\u221A\\u221D-\\u2238\\u223A-\\u2257\\u2259\\u225A\\u225C\\u225F-\\u2262\\u2264-\\u228B\\u228D-\\u229B\\u229D-\\u22A5\\u22A7-\\u22B0\\u22B2-\\u22BB\\u22BD-\\u22DB\\u22DE-\\u22E3\\u22E6-\\u22F7\\u22F9-\\u22FE\\u2305\\u2306\\u2308-\\u2310\\u2312\\u2313\\u2315\\u2316\\u231C-\\u231F\\u2322\\u2323\\u232D\\u232E\\u2336\\u233D\\u233F\\u237C\\u23B0\\u23B1\\u23B4-\\u23B6\\u23DC-\\u23DF\\u23E2\\u23E7\\u2423\\u24C8\\u2500\\u2502\\u250C\\u2510\\u2514\\u2518\\u251C\\u2524\\u252C\\u2534\\u253C\\u2550-\\u256C\\u2580\\u2584\\u2588\\u2591-\\u2593\\u25A1\\u25AA\\u25AB\\u25AD\\u25AE\\u25B1\\u25B3-\\u25B5\\u25B8\\u25B9\\u25BD-\\u25BF\\u25C2\\u25C3\\u25CA\\u25CB\\u25EC\\u25EF\\u25F8-\\u25FC\\u2605\\u2606\\u260E\\u2640\\u2642\\u2660\\u2663\\u2665\\u2666\\u266A\\u266D-\\u266F\\u2713\\u2717\\u2720\\u2736\\u2758\\u2772\\u2773\\u27C8\\u27C9\\u27E6-\\u27ED\\u27F5-\\u27FA\\u27FC\\u27FF\\u2902-\\u2905\\u290C-\\u2913\\u2916\\u2919-\\u2920\\u2923-\\u292A\\u2933\\u2935-\\u2939\\u293C\\u293D\\u2945\\u2948-\\u294B\\u294E-\\u2976\\u2978\\u2979\\u297B-\\u297F\\u2985\\u2986\\u298B-\\u2996\\u299A\\u299C\\u299D\\u29A4-\\u29B7\\u29B9\\u29BB\\u29BC\\u29BE-\\u29C5\\u29C9\\u29CD-\\u29D0\\u29DC-\\u29DE\\u29E3-\\u29E5\\u29EB\\u29F4\\u29F6\\u2A00-\\u2A02\\u2A04\\u2A06\\u2A0C\\u2A0D\\u2A10-\\u2A17\\u2A22-\\u2A27\\u2A29\\u2A2A\\u2A2D-\\u2A31\\u2A33-\\u2A3C\\u2A3F\\u2A40\\u2A42-\\u2A4D\\u2A50\\u2A53-\\u2A58\\u2A5A-\\u2A5D\\u2A5F\\u2A66\\u2A6A\\u2A6D-\\u2A75\\u2A77-\\u2A9A\\u2A9D-\\u2AA2\\u2AA4-\\u2AB0\\u2AB3-\\u2AC8\\u2ACB\\u2ACC\\u2ACF-\\u2ADB\\u2AE4\\u2AE6-\\u2AE9\\u2AEB-\\u2AF3\\u2AFD\\uFB00-\\uFB04]|\\uD835[\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDD6B]/g;\n\tvar encodeMap = {'\\xAD':'shy','\\u200C':'zwnj','\\u200D':'zwj','\\u200E':'lrm','\\u2063':'ic','\\u2062':'it','\\u2061':'af','\\u200F':'rlm','\\u200B':'ZeroWidthSpace','\\u2060':'NoBreak','\\u0311':'DownBreve','\\u20DB':'tdot','\\u20DC':'DotDot','\\t':'Tab','\\n':'NewLine','\\u2008':'puncsp','\\u205F':'MediumSpace','\\u2009':'thinsp','\\u200A':'hairsp','\\u2004':'emsp13','\\u2002':'ensp','\\u2005':'emsp14','\\u2003':'emsp','\\u2007':'numsp','\\xA0':'nbsp','\\u205F\\u200A':'ThickSpace','\\u203E':'oline','_':'lowbar','\\u2010':'dash','\\u2013':'ndash','\\u2014':'mdash','\\u2015':'horbar',',':'comma',';':'semi','\\u204F':'bsemi',':':'colon','\\u2A74':'Colone','!':'excl','\\xA1':'iexcl','?':'quest','\\xBF':'iquest','.':'period','\\u2025':'nldr','\\u2026':'mldr','\\xB7':'middot','\\'':'apos','\\u2018':'lsquo','\\u2019':'rsquo','\\u201A':'sbquo','\\u2039':'lsaquo','\\u203A':'rsaquo','\"':'quot','\\u201C':'ldquo','\\u201D':'rdquo','\\u201E':'bdquo','\\xAB':'laquo','\\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\\u2308':'lceil','\\u2309':'rceil','\\u230A':'lfloor','\\u230B':'rfloor','\\u2985':'lopar','\\u2986':'ropar','\\u298B':'lbrke','\\u298C':'rbrke','\\u298D':'lbrkslu','\\u298E':'rbrksld','\\u298F':'lbrksld','\\u2990':'rbrkslu','\\u2991':'langd','\\u2992':'rangd','\\u2993':'lparlt','\\u2994':'rpargt','\\u2995':'gtlPar','\\u2996':'ltrPar','\\u27E6':'lobrk','\\u27E7':'robrk','\\u27E8':'lang','\\u27E9':'rang','\\u27EA':'Lang','\\u27EB':'Rang','\\u27EC':'loang','\\u27ED':'roang','\\u2772':'lbbrk','\\u2773':'rbbrk','\\u2016':'Vert','\\xA7':'sect','\\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\\u2030':'permil','\\u2031':'pertenk','\\u2020':'dagger','\\u2021':'Dagger','\\u2022':'bull','\\u2043':'hybull','\\u2032':'prime','\\u2033':'Prime','\\u2034':'tprime','\\u2057':'qprime','\\u2035':'bprime','\\u2041':'caret','`':'grave','\\xB4':'acute','\\u02DC':'tilde','^':'Hat','\\xAF':'macr','\\u02D8':'breve','\\u02D9':'dot','\\xA8':'die','\\u02DA':'ring','\\u02DD':'dblac','\\xB8':'cedil','\\u02DB':'ogon','\\u02C6':'circ','\\u02C7':'caron','\\xB0':'deg','\\xA9':'copy','\\xAE':'reg','\\u2117':'copysr','\\u2118':'wp','\\u211E':'rx','\\u2127':'mho','\\u2129':'iiota','\\u2190':'larr','\\u219A':'nlarr','\\u2192':'rarr','\\u219B':'nrarr','\\u2191':'uarr','\\u2193':'darr','\\u2194':'harr','\\u21AE':'nharr','\\u2195':'varr','\\u2196':'nwarr','\\u2197':'nearr','\\u2198':'searr','\\u2199':'swarr','\\u219D':'rarrw','\\u219D\\u0338':'nrarrw','\\u219E':'Larr','\\u219F':'Uarr','\\u21A0':'Rarr','\\u21A1':'Darr','\\u21A2':'larrtl','\\u21A3':'rarrtl','\\u21A4':'mapstoleft','\\u21A5':'mapstoup','\\u21A6':'map','\\u21A7':'mapstodown','\\u21A9':'larrhk','\\u21AA':'rarrhk','\\u21AB':'larrlp','\\u21AC':'rarrlp','\\u21AD':'harrw','\\u21B0':'lsh','\\u21B1':'rsh','\\u21B2':'ldsh','\\u21B3':'rdsh','\\u21B5':'crarr','\\u21B6':'cularr','\\u21B7':'curarr','\\u21BA':'olarr','\\u21BB':'orarr','\\u21BC':'lharu','\\u21BD':'lhard','\\u21BE':'uharr','\\u21BF':'uharl','\\u21C0':'rharu','\\u21C1':'rhard','\\u21C2':'dharr','\\u21C3':'dharl','\\u21C4':'rlarr','\\u21C5':'udarr','\\u21C6':'lrarr','\\u21C7':'llarr','\\u21C8':'uuarr','\\u21C9':'rrarr','\\u21CA':'ddarr','\\u21CB':'lrhar','\\u21CC':'rlhar','\\u21D0':'lArr','\\u21CD':'nlArr','\\u21D1':'uArr','\\u21D2':'rArr','\\u21CF':'nrArr','\\u21D3':'dArr','\\u21D4':'iff','\\u21CE':'nhArr','\\u21D5':'vArr','\\u21D6':'nwArr','\\u21D7':'neArr','\\u21D8':'seArr','\\u21D9':'swArr','\\u21DA':'lAarr','\\u21DB':'rAarr','\\u21DD':'zigrarr','\\u21E4':'larrb','\\u21E5':'rarrb','\\u21F5':'duarr','\\u21FD':'loarr','\\u21FE':'roarr','\\u21FF':'hoarr','\\u2200':'forall','\\u2201':'comp','\\u2202':'part','\\u2202\\u0338':'npart','\\u2203':'exist','\\u2204':'nexist','\\u2205':'empty','\\u2207':'Del','\\u2208':'in','\\u2209':'notin','\\u220B':'ni','\\u220C':'notni','\\u03F6':'bepsi','\\u220F':'prod','\\u2210':'coprod','\\u2211':'sum','+':'plus','\\xB1':'pm','\\xF7':'div','\\xD7':'times','<':'lt','\\u226E':'nlt','<\\u20D2':'nvlt','=':'equals','\\u2260':'ne','=\\u20E5':'bne','\\u2A75':'Equal','>':'gt','\\u226F':'ngt','>\\u20D2':'nvgt','\\xAC':'not','|':'vert','\\xA6':'brvbar','\\u2212':'minus','\\u2213':'mp','\\u2214':'plusdo','\\u2044':'frasl','\\u2216':'setmn','\\u2217':'lowast','\\u2218':'compfn','\\u221A':'Sqrt','\\u221D':'prop','\\u221E':'infin','\\u221F':'angrt','\\u2220':'ang','\\u2220\\u20D2':'nang','\\u2221':'angmsd','\\u2222':'angsph','\\u2223':'mid','\\u2224':'nmid','\\u2225':'par','\\u2226':'npar','\\u2227':'and','\\u2228':'or','\\u2229':'cap','\\u2229\\uFE00':'caps','\\u222A':'cup','\\u222A\\uFE00':'cups','\\u222B':'int','\\u222C':'Int','\\u222D':'tint','\\u2A0C':'qint','\\u222E':'oint','\\u222F':'Conint','\\u2230':'Cconint','\\u2231':'cwint','\\u2232':'cwconint','\\u2233':'awconint','\\u2234':'there4','\\u2235':'becaus','\\u2236':'ratio','\\u2237':'Colon','\\u2238':'minusd','\\u223A':'mDDot','\\u223B':'homtht','\\u223C':'sim','\\u2241':'nsim','\\u223C\\u20D2':'nvsim','\\u223D':'bsim','\\u223D\\u0331':'race','\\u223E':'ac','\\u223E\\u0333':'acE','\\u223F':'acd','\\u2240':'wr','\\u2242':'esim','\\u2242\\u0338':'nesim','\\u2243':'sime','\\u2244':'nsime','\\u2245':'cong','\\u2247':'ncong','\\u2246':'simne','\\u2248':'ap','\\u2249':'nap','\\u224A':'ape','\\u224B':'apid','\\u224B\\u0338':'napid','\\u224C':'bcong','\\u224D':'CupCap','\\u226D':'NotCupCap','\\u224D\\u20D2':'nvap','\\u224E':'bump','\\u224E\\u0338':'nbump','\\u224F':'bumpe','\\u224F\\u0338':'nbumpe','\\u2250':'doteq','\\u2250\\u0338':'nedot','\\u2251':'eDot','\\u2252':'efDot','\\u2253':'erDot','\\u2254':'colone','\\u2255':'ecolon','\\u2256':'ecir','\\u2257':'cire','\\u2259':'wedgeq','\\u225A':'veeeq','\\u225C':'trie','\\u225F':'equest','\\u2261':'equiv','\\u2262':'nequiv','\\u2261\\u20E5':'bnequiv','\\u2264':'le','\\u2270':'nle','\\u2264\\u20D2':'nvle','\\u2265':'ge','\\u2271':'nge','\\u2265\\u20D2':'nvge','\\u2266':'lE','\\u2266\\u0338':'nlE','\\u2267':'gE','\\u2267\\u0338':'ngE','\\u2268\\uFE00':'lvnE','\\u2268':'lnE','\\u2269':'gnE','\\u2269\\uFE00':'gvnE','\\u226A':'ll','\\u226A\\u0338':'nLtv','\\u226A\\u20D2':'nLt','\\u226B':'gg','\\u226B\\u0338':'nGtv','\\u226B\\u20D2':'nGt','\\u226C':'twixt','\\u2272':'lsim','\\u2274':'nlsim','\\u2273':'gsim','\\u2275':'ngsim','\\u2276':'lg','\\u2278':'ntlg','\\u2277':'gl','\\u2279':'ntgl','\\u227A':'pr','\\u2280':'npr','\\u227B':'sc','\\u2281':'nsc','\\u227C':'prcue','\\u22E0':'nprcue','\\u227D':'sccue','\\u22E1':'nsccue','\\u227E':'prsim','\\u227F':'scsim','\\u227F\\u0338':'NotSucceedsTilde','\\u2282':'sub','\\u2284':'nsub','\\u2282\\u20D2':'vnsub','\\u2283':'sup','\\u2285':'nsup','\\u2283\\u20D2':'vnsup','\\u2286':'sube','\\u2288':'nsube','\\u2287':'supe','\\u2289':'nsupe','\\u228A\\uFE00':'vsubne','\\u228A':'subne','\\u228B\\uFE00':'vsupne','\\u228B':'supne','\\u228D':'cupdot','\\u228E':'uplus','\\u228F':'sqsub','\\u228F\\u0338':'NotSquareSubset','\\u2290':'sqsup','\\u2290\\u0338':'NotSquareSuperset','\\u2291':'sqsube','\\u22E2':'nsqsube','\\u2292':'sqsupe','\\u22E3':'nsqsupe','\\u2293':'sqcap','\\u2293\\uFE00':'sqcaps','\\u2294':'sqcup','\\u2294\\uFE00':'sqcups','\\u2295':'oplus','\\u2296':'ominus','\\u2297':'otimes','\\u2298':'osol','\\u2299':'odot','\\u229A':'ocir','\\u229B':'oast','\\u229D':'odash','\\u229E':'plusb','\\u229F':'minusb','\\u22A0':'timesb','\\u22A1':'sdotb','\\u22A2':'vdash','\\u22AC':'nvdash','\\u22A3':'dashv','\\u22A4':'top','\\u22A5':'bot','\\u22A7':'models','\\u22A8':'vDash','\\u22AD':'nvDash','\\u22A9':'Vdash','\\u22AE':'nVdash','\\u22AA':'Vvdash','\\u22AB':'VDash','\\u22AF':'nVDash','\\u22B0':'prurel','\\u22B2':'vltri','\\u22EA':'nltri','\\u22B3':'vrtri','\\u22EB':'nrtri','\\u22B4':'ltrie','\\u22EC':'nltrie','\\u22B4\\u20D2':'nvltrie','\\u22B5':'rtrie','\\u22ED':'nrtrie','\\u22B5\\u20D2':'nvrtrie','\\u22B6':'origof','\\u22B7':'imof','\\u22B8':'mumap','\\u22B9':'hercon','\\u22BA':'intcal','\\u22BB':'veebar','\\u22BD':'barvee','\\u22BE':'angrtvb','\\u22BF':'lrtri','\\u22C0':'Wedge','\\u22C1':'Vee','\\u22C2':'xcap','\\u22C3':'xcup','\\u22C4':'diam','\\u22C5':'sdot','\\u22C6':'Star','\\u22C7':'divonx','\\u22C8':'bowtie','\\u22C9':'ltimes','\\u22CA':'rtimes','\\u22CB':'lthree','\\u22CC':'rthree','\\u22CD':'bsime','\\u22CE':'cuvee','\\u22CF':'cuwed','\\u22D0':'Sub','\\u22D1':'Sup','\\u22D2':'Cap','\\u22D3':'Cup','\\u22D4':'fork','\\u22D5':'epar','\\u22D6':'ltdot','\\u22D7':'gtdot','\\u22D8':'Ll','\\u22D8\\u0338':'nLl','\\u22D9':'Gg','\\u22D9\\u0338':'nGg','\\u22DA\\uFE00':'lesg','\\u22DA':'leg','\\u22DB':'gel','\\u22DB\\uFE00':'gesl','\\u22DE':'cuepr','\\u22DF':'cuesc','\\u22E6':'lnsim','\\u22E7':'gnsim','\\u22E8':'prnsim','\\u22E9':'scnsim','\\u22EE':'vellip','\\u22EF':'ctdot','\\u22F0':'utdot','\\u22F1':'dtdot','\\u22F2':'disin','\\u22F3':'isinsv','\\u22F4':'isins','\\u22F5':'isindot','\\u22F5\\u0338':'notindot','\\u22F6':'notinvc','\\u22F7':'notinvb','\\u22F9':'isinE','\\u22F9\\u0338':'notinE','\\u22FA':'nisd','\\u22FB':'xnis','\\u22FC':'nis','\\u22FD':'notnivc','\\u22FE':'notnivb','\\u2305':'barwed','\\u2306':'Barwed','\\u230C':'drcrop','\\u230D':'dlcrop','\\u230E':'urcrop','\\u230F':'ulcrop','\\u2310':'bnot','\\u2312':'profline','\\u2313':'profsurf','\\u2315':'telrec','\\u2316':'target','\\u231C':'ulcorn','\\u231D':'urcorn','\\u231E':'dlcorn','\\u231F':'drcorn','\\u2322':'frown','\\u2323':'smile','\\u232D':'cylcty','\\u232E':'profalar','\\u2336':'topbot','\\u233D':'ovbar','\\u233F':'solbar','\\u237C':'angzarr','\\u23B0':'lmoust','\\u23B1':'rmoust','\\u23B4':'tbrk','\\u23B5':'bbrk','\\u23B6':'bbrktbrk','\\u23DC':'OverParenthesis','\\u23DD':'UnderParenthesis','\\u23DE':'OverBrace','\\u23DF':'UnderBrace','\\u23E2':'trpezium','\\u23E7':'elinters','\\u2423':'blank','\\u2500':'boxh','\\u2502':'boxv','\\u250C':'boxdr','\\u2510':'boxdl','\\u2514':'boxur','\\u2518':'boxul','\\u251C':'boxvr','\\u2524':'boxvl','\\u252C':'boxhd','\\u2534':'boxhu','\\u253C':'boxvh','\\u2550':'boxH','\\u2551':'boxV','\\u2552':'boxdR','\\u2553':'boxDr','\\u2554':'boxDR','\\u2555':'boxdL','\\u2556':'boxDl','\\u2557':'boxDL','\\u2558':'boxuR','\\u2559':'boxUr','\\u255A':'boxUR','\\u255B':'boxuL','\\u255C':'boxUl','\\u255D':'boxUL','\\u255E':'boxvR','\\u255F':'boxVr','\\u2560':'boxVR','\\u2561':'boxvL','\\u2562':'boxVl','\\u2563':'boxVL','\\u2564':'boxHd','\\u2565':'boxhD','\\u2566':'boxHD','\\u2567':'boxHu','\\u2568':'boxhU','\\u2569':'boxHU','\\u256A':'boxvH','\\u256B':'boxVh','\\u256C':'boxVH','\\u2580':'uhblk','\\u2584':'lhblk','\\u2588':'block','\\u2591':'blk14','\\u2592':'blk12','\\u2593':'blk34','\\u25A1':'squ','\\u25AA':'squf','\\u25AB':'EmptyVerySmallSquare','\\u25AD':'rect','\\u25AE':'marker','\\u25B1':'fltns','\\u25B3':'xutri','\\u25B4':'utrif','\\u25B5':'utri','\\u25B8':'rtrif','\\u25B9':'rtri','\\u25BD':'xdtri','\\u25BE':'dtrif','\\u25BF':'dtri','\\u25C2':'ltrif','\\u25C3':'ltri','\\u25CA':'loz','\\u25CB':'cir','\\u25EC':'tridot','\\u25EF':'xcirc','\\u25F8':'ultri','\\u25F9':'urtri','\\u25FA':'lltri','\\u25FB':'EmptySmallSquare','\\u25FC':'FilledSmallSquare','\\u2605':'starf','\\u2606':'star','\\u260E':'phone','\\u2640':'female','\\u2642':'male','\\u2660':'spades','\\u2663':'clubs','\\u2665':'hearts','\\u2666':'diams','\\u266A':'sung','\\u2713':'check','\\u2717':'cross','\\u2720':'malt','\\u2736':'sext','\\u2758':'VerticalSeparator','\\u27C8':'bsolhsub','\\u27C9':'suphsol','\\u27F5':'xlarr','\\u27F6':'xrarr','\\u27F7':'xharr','\\u27F8':'xlArr','\\u27F9':'xrArr','\\u27FA':'xhArr','\\u27FC':'xmap','\\u27FF':'dzigrarr','\\u2902':'nvlArr','\\u2903':'nvrArr','\\u2904':'nvHarr','\\u2905':'Map','\\u290C':'lbarr','\\u290D':'rbarr','\\u290E':'lBarr','\\u290F':'rBarr','\\u2910':'RBarr','\\u2911':'DDotrahd','\\u2912':'UpArrowBar','\\u2913':'DownArrowBar','\\u2916':'Rarrtl','\\u2919':'latail','\\u291A':'ratail','\\u291B':'lAtail','\\u291C':'rAtail','\\u291D':'larrfs','\\u291E':'rarrfs','\\u291F':'larrbfs','\\u2920':'rarrbfs','\\u2923':'nwarhk','\\u2924':'nearhk','\\u2925':'searhk','\\u2926':'swarhk','\\u2927':'nwnear','\\u2928':'toea','\\u2929':'tosa','\\u292A':'swnwar','\\u2933':'rarrc','\\u2933\\u0338':'nrarrc','\\u2935':'cudarrr','\\u2936':'ldca','\\u2937':'rdca','\\u2938':'cudarrl','\\u2939':'larrpl','\\u293C':'curarrm','\\u293D':'cularrp','\\u2945':'rarrpl','\\u2948':'harrcir','\\u2949':'Uarrocir','\\u294A':'lurdshar','\\u294B':'ldrushar','\\u294E':'LeftRightVector','\\u294F':'RightUpDownVector','\\u2950':'DownLeftRightVector','\\u2951':'LeftUpDownVector','\\u2952':'LeftVectorBar','\\u2953':'RightVectorBar','\\u2954':'RightUpVectorBar','\\u2955':'RightDownVectorBar','\\u2956':'DownLeftVectorBar','\\u2957':'DownRightVectorBar','\\u2958':'LeftUpVectorBar','\\u2959':'LeftDownVectorBar','\\u295A':'LeftTeeVector','\\u295B':'RightTeeVector','\\u295C':'RightUpTeeVector','\\u295D':'RightDownTeeVector','\\u295E':'DownLeftTeeVector','\\u295F':'DownRightTeeVector','\\u2960':'LeftUpTeeVector','\\u2961':'LeftDownTeeVector','\\u2962':'lHar','\\u2963':'uHar','\\u2964':'rHar','\\u2965':'dHar','\\u2966':'luruhar','\\u2967':'ldrdhar','\\u2968':'ruluhar','\\u2969':'rdldhar','\\u296A':'lharul','\\u296B':'llhard','\\u296C':'rharul','\\u296D':'lrhard','\\u296E':'udhar','\\u296F':'duhar','\\u2970':'RoundImplies','\\u2971':'erarr','\\u2972':'simrarr','\\u2973':'larrsim','\\u2974':'rarrsim','\\u2975':'rarrap','\\u2976':'ltlarr','\\u2978':'gtrarr','\\u2979':'subrarr','\\u297B':'suplarr','\\u297C':'lfisht','\\u297D':'rfisht','\\u297E':'ufisht','\\u297F':'dfisht','\\u299A':'vzigzag','\\u299C':'vangrt','\\u299D':'angrtvbd','\\u29A4':'ange','\\u29A5':'range','\\u29A6':'dwangle','\\u29A7':'uwangle','\\u29A8':'angmsdaa','\\u29A9':'angmsdab','\\u29AA':'angmsdac','\\u29AB':'angmsdad','\\u29AC':'angmsdae','\\u29AD':'angmsdaf','\\u29AE':'angmsdag','\\u29AF':'angmsdah','\\u29B0':'bemptyv','\\u29B1':'demptyv','\\u29B2':'cemptyv','\\u29B3':'raemptyv','\\u29B4':'laemptyv','\\u29B5':'ohbar','\\u29B6':'omid','\\u29B7':'opar','\\u29B9':'operp','\\u29BB':'olcross','\\u29BC':'odsold','\\u29BE':'olcir','\\u29BF':'ofcir','\\u29C0':'olt','\\u29C1':'ogt','\\u29C2':'cirscir','\\u29C3':'cirE','\\u29C4':'solb','\\u29C5':'bsolb','\\u29C9':'boxbox','\\u29CD':'trisb','\\u29CE':'rtriltri','\\u29CF':'LeftTriangleBar','\\u29CF\\u0338':'NotLeftTriangleBar','\\u29D0':'RightTriangleBar','\\u29D0\\u0338':'NotRightTriangleBar','\\u29DC':'iinfin','\\u29DD':'infintie','\\u29DE':'nvinfin','\\u29E3':'eparsl','\\u29E4':'smeparsl','\\u29E5':'eqvparsl','\\u29EB':'lozf','\\u29F4':'RuleDelayed','\\u29F6':'dsol','\\u2A00':'xodot','\\u2A01':'xoplus','\\u2A02':'xotime','\\u2A04':'xuplus','\\u2A06':'xsqcup','\\u2A0D':'fpartint','\\u2A10':'cirfnint','\\u2A11':'awint','\\u2A12':'rppolint','\\u2A13':'scpolint','\\u2A14':'npolint','\\u2A15':'pointint','\\u2A16':'quatint','\\u2A17':'intlarhk','\\u2A22':'pluscir','\\u2A23':'plusacir','\\u2A24':'simplus','\\u2A25':'plusdu','\\u2A26':'plussim','\\u2A27':'plustwo','\\u2A29':'mcomma','\\u2A2A':'minusdu','\\u2A2D':'loplus','\\u2A2E':'roplus','\\u2A2F':'Cross','\\u2A30':'timesd','\\u2A31':'timesbar','\\u2A33':'smashp','\\u2A34':'lotimes','\\u2A35':'rotimes','\\u2A36':'otimesas','\\u2A37':'Otimes','\\u2A38':'odiv','\\u2A39':'triplus','\\u2A3A':'triminus','\\u2A3B':'tritime','\\u2A3C':'iprod','\\u2A3F':'amalg','\\u2A40':'capdot','\\u2A42':'ncup','\\u2A43':'ncap','\\u2A44':'capand','\\u2A45':'cupor','\\u2A46':'cupcap','\\u2A47':'capcup','\\u2A48':'cupbrcap','\\u2A49':'capbrcup','\\u2A4A':'cupcup','\\u2A4B':'capcap','\\u2A4C':'ccups','\\u2A4D':'ccaps','\\u2A50':'ccupssm','\\u2A53':'And','\\u2A54':'Or','\\u2A55':'andand','\\u2A56':'oror','\\u2A57':'orslope','\\u2A58':'andslope','\\u2A5A':'andv','\\u2A5B':'orv','\\u2A5C':'andd','\\u2A5D':'ord','\\u2A5F':'wedbar','\\u2A66':'sdote','\\u2A6A':'simdot','\\u2A6D':'congdot','\\u2A6D\\u0338':'ncongdot','\\u2A6E':'easter','\\u2A6F':'apacir','\\u2A70':'apE','\\u2A70\\u0338':'napE','\\u2A71':'eplus','\\u2A72':'pluse','\\u2A73':'Esim','\\u2A77':'eDDot','\\u2A78':'equivDD','\\u2A79':'ltcir','\\u2A7A':'gtcir','\\u2A7B':'ltquest','\\u2A7C':'gtquest','\\u2A7D':'les','\\u2A7D\\u0338':'nles','\\u2A7E':'ges','\\u2A7E\\u0338':'nges','\\u2A7F':'lesdot','\\u2A80':'gesdot','\\u2A81':'lesdoto','\\u2A82':'gesdoto','\\u2A83':'lesdotor','\\u2A84':'gesdotol','\\u2A85':'lap','\\u2A86':'gap','\\u2A87':'lne','\\u2A88':'gne','\\u2A89':'lnap','\\u2A8A':'gnap','\\u2A8B':'lEg','\\u2A8C':'gEl','\\u2A8D':'lsime','\\u2A8E':'gsime','\\u2A8F':'lsimg','\\u2A90':'gsiml','\\u2A91':'lgE','\\u2A92':'glE','\\u2A93':'lesges','\\u2A94':'gesles','\\u2A95':'els','\\u2A96':'egs','\\u2A97':'elsdot','\\u2A98':'egsdot','\\u2A99':'el','\\u2A9A':'eg','\\u2A9D':'siml','\\u2A9E':'simg','\\u2A9F':'simlE','\\u2AA0':'simgE','\\u2AA1':'LessLess','\\u2AA1\\u0338':'NotNestedLessLess','\\u2AA2':'GreaterGreater','\\u2AA2\\u0338':'NotNestedGreaterGreater','\\u2AA4':'glj','\\u2AA5':'gla','\\u2AA6':'ltcc','\\u2AA7':'gtcc','\\u2AA8':'lescc','\\u2AA9':'gescc','\\u2AAA':'smt','\\u2AAB':'lat','\\u2AAC':'smte','\\u2AAC\\uFE00':'smtes','\\u2AAD':'late','\\u2AAD\\uFE00':'lates','\\u2AAE':'bumpE','\\u2AAF':'pre','\\u2AAF\\u0338':'npre','\\u2AB0':'sce','\\u2AB0\\u0338':'nsce','\\u2AB3':'prE','\\u2AB4':'scE','\\u2AB5':'prnE','\\u2AB6':'scnE','\\u2AB7':'prap','\\u2AB8':'scap','\\u2AB9':'prnap','\\u2ABA':'scnap','\\u2ABB':'Pr','\\u2ABC':'Sc','\\u2ABD':'subdot','\\u2ABE':'supdot','\\u2ABF':'subplus','\\u2AC0':'supplus','\\u2AC1':'submult','\\u2AC2':'supmult','\\u2AC3':'subedot','\\u2AC4':'supedot','\\u2AC5':'subE','\\u2AC5\\u0338':'nsubE','\\u2AC6':'supE','\\u2AC6\\u0338':'nsupE','\\u2AC7':'subsim','\\u2AC8':'supsim','\\u2ACB\\uFE00':'vsubnE','\\u2ACB':'subnE','\\u2ACC\\uFE00':'vsupnE','\\u2ACC':'supnE','\\u2ACF':'csub','\\u2AD0':'csup','\\u2AD1':'csube','\\u2AD2':'csupe','\\u2AD3':'subsup','\\u2AD4':'supsub','\\u2AD5':'subsub','\\u2AD6':'supsup','\\u2AD7':'suphsub','\\u2AD8':'supdsub','\\u2AD9':'forkv','\\u2ADA':'topfork','\\u2ADB':'mlcp','\\u2AE4':'Dashv','\\u2AE6':'Vdashl','\\u2AE7':'Barv','\\u2AE8':'vBar','\\u2AE9':'vBarv','\\u2AEB':'Vbar','\\u2AEC':'Not','\\u2AED':'bNot','\\u2AEE':'rnmid','\\u2AEF':'cirmid','\\u2AF0':'midcir','\\u2AF1':'topcir','\\u2AF2':'nhpar','\\u2AF3':'parsim','\\u2AFD':'parsl','\\u2AFD\\u20E5':'nparsl','\\u266D':'flat','\\u266E':'natur','\\u266F':'sharp','\\xA4':'curren','\\xA2':'cent','$':'dollar','\\xA3':'pound','\\xA5':'yen','\\u20AC':'euro','\\xB9':'sup1','\\xBD':'half','\\u2153':'frac13','\\xBC':'frac14','\\u2155':'frac15','\\u2159':'frac16','\\u215B':'frac18','\\xB2':'sup2','\\u2154':'frac23','\\u2156':'frac25','\\xB3':'sup3','\\xBE':'frac34','\\u2157':'frac35','\\u215C':'frac38','\\u2158':'frac45','\\u215A':'frac56','\\u215D':'frac58','\\u215E':'frac78','\\uD835\\uDCB6':'ascr','\\uD835\\uDD52':'aopf','\\uD835\\uDD1E':'afr','\\uD835\\uDD38':'Aopf','\\uD835\\uDD04':'Afr','\\uD835\\uDC9C':'Ascr','\\xAA':'ordf','\\xE1':'aacute','\\xC1':'Aacute','\\xE0':'agrave','\\xC0':'Agrave','\\u0103':'abreve','\\u0102':'Abreve','\\xE2':'acirc','\\xC2':'Acirc','\\xE5':'aring','\\xC5':'angst','\\xE4':'auml','\\xC4':'Auml','\\xE3':'atilde','\\xC3':'Atilde','\\u0105':'aogon','\\u0104':'Aogon','\\u0101':'amacr','\\u0100':'Amacr','\\xE6':'aelig','\\xC6':'AElig','\\uD835\\uDCB7':'bscr','\\uD835\\uDD53':'bopf','\\uD835\\uDD1F':'bfr','\\uD835\\uDD39':'Bopf','\\u212C':'Bscr','\\uD835\\uDD05':'Bfr','\\uD835\\uDD20':'cfr','\\uD835\\uDCB8':'cscr','\\uD835\\uDD54':'copf','\\u212D':'Cfr','\\uD835\\uDC9E':'Cscr','\\u2102':'Copf','\\u0107':'cacute','\\u0106':'Cacute','\\u0109':'ccirc','\\u0108':'Ccirc','\\u010D':'ccaron','\\u010C':'Ccaron','\\u010B':'cdot','\\u010A':'Cdot','\\xE7':'ccedil','\\xC7':'Ccedil','\\u2105':'incare','\\uD835\\uDD21':'dfr','\\u2146':'dd','\\uD835\\uDD55':'dopf','\\uD835\\uDCB9':'dscr','\\uD835\\uDC9F':'Dscr','\\uD835\\uDD07':'Dfr','\\u2145':'DD','\\uD835\\uDD3B':'Dopf','\\u010F':'dcaron','\\u010E':'Dcaron','\\u0111':'dstrok','\\u0110':'Dstrok','\\xF0':'eth','\\xD0':'ETH','\\u2147':'ee','\\u212F':'escr','\\uD835\\uDD22':'efr','\\uD835\\uDD56':'eopf','\\u2130':'Escr','\\uD835\\uDD08':'Efr','\\uD835\\uDD3C':'Eopf','\\xE9':'eacute','\\xC9':'Eacute','\\xE8':'egrave','\\xC8':'Egrave','\\xEA':'ecirc','\\xCA':'Ecirc','\\u011B':'ecaron','\\u011A':'Ecaron','\\xEB':'euml','\\xCB':'Euml','\\u0117':'edot','\\u0116':'Edot','\\u0119':'eogon','\\u0118':'Eogon','\\u0113':'emacr','\\u0112':'Emacr','\\uD835\\uDD23':'ffr','\\uD835\\uDD57':'fopf','\\uD835\\uDCBB':'fscr','\\uD835\\uDD09':'Ffr','\\uD835\\uDD3D':'Fopf','\\u2131':'Fscr','\\uFB00':'fflig','\\uFB03':'ffilig','\\uFB04':'ffllig','\\uFB01':'filig','fj':'fjlig','\\uFB02':'fllig','\\u0192':'fnof','\\u210A':'gscr','\\uD835\\uDD58':'gopf','\\uD835\\uDD24':'gfr','\\uD835\\uDCA2':'Gscr','\\uD835\\uDD3E':'Gopf','\\uD835\\uDD0A':'Gfr','\\u01F5':'gacute','\\u011F':'gbreve','\\u011E':'Gbreve','\\u011D':'gcirc','\\u011C':'Gcirc','\\u0121':'gdot','\\u0120':'Gdot','\\u0122':'Gcedil','\\uD835\\uDD25':'hfr','\\u210E':'planckh','\\uD835\\uDCBD':'hscr','\\uD835\\uDD59':'hopf','\\u210B':'Hscr','\\u210C':'Hfr','\\u210D':'Hopf','\\u0125':'hcirc','\\u0124':'Hcirc','\\u210F':'hbar','\\u0127':'hstrok','\\u0126':'Hstrok','\\uD835\\uDD5A':'iopf','\\uD835\\uDD26':'ifr','\\uD835\\uDCBE':'iscr','\\u2148':'ii','\\uD835\\uDD40':'Iopf','\\u2110':'Iscr','\\u2111':'Im','\\xED':'iacute','\\xCD':'Iacute','\\xEC':'igrave','\\xCC':'Igrave','\\xEE':'icirc','\\xCE':'Icirc','\\xEF':'iuml','\\xCF':'Iuml','\\u0129':'itilde','\\u0128':'Itilde','\\u0130':'Idot','\\u012F':'iogon','\\u012E':'Iogon','\\u012B':'imacr','\\u012A':'Imacr','\\u0133':'ijlig','\\u0132':'IJlig','\\u0131':'imath','\\uD835\\uDCBF':'jscr','\\uD835\\uDD5B':'jopf','\\uD835\\uDD27':'jfr','\\uD835\\uDCA5':'Jscr','\\uD835\\uDD0D':'Jfr','\\uD835\\uDD41':'Jopf','\\u0135':'jcirc','\\u0134':'Jcirc','\\u0237':'jmath','\\uD835\\uDD5C':'kopf','\\uD835\\uDCC0':'kscr','\\uD835\\uDD28':'kfr','\\uD835\\uDCA6':'Kscr','\\uD835\\uDD42':'Kopf','\\uD835\\uDD0E':'Kfr','\\u0137':'kcedil','\\u0136':'Kcedil','\\uD835\\uDD29':'lfr','\\uD835\\uDCC1':'lscr','\\u2113':'ell','\\uD835\\uDD5D':'lopf','\\u2112':'Lscr','\\uD835\\uDD0F':'Lfr','\\uD835\\uDD43':'Lopf','\\u013A':'lacute','\\u0139':'Lacute','\\u013E':'lcaron','\\u013D':'Lcaron','\\u013C':'lcedil','\\u013B':'Lcedil','\\u0142':'lstrok','\\u0141':'Lstrok','\\u0140':'lmidot','\\u013F':'Lmidot','\\uD835\\uDD2A':'mfr','\\uD835\\uDD5E':'mopf','\\uD835\\uDCC2':'mscr','\\uD835\\uDD10':'Mfr','\\uD835\\uDD44':'Mopf','\\u2133':'Mscr','\\uD835\\uDD2B':'nfr','\\uD835\\uDD5F':'nopf','\\uD835\\uDCC3':'nscr','\\u2115':'Nopf','\\uD835\\uDCA9':'Nscr','\\uD835\\uDD11':'Nfr','\\u0144':'nacute','\\u0143':'Nacute','\\u0148':'ncaron','\\u0147':'Ncaron','\\xF1':'ntilde','\\xD1':'Ntilde','\\u0146':'ncedil','\\u0145':'Ncedil','\\u2116':'numero','\\u014B':'eng','\\u014A':'ENG','\\uD835\\uDD60':'oopf','\\uD835\\uDD2C':'ofr','\\u2134':'oscr','\\uD835\\uDCAA':'Oscr','\\uD835\\uDD12':'Ofr','\\uD835\\uDD46':'Oopf','\\xBA':'ordm','\\xF3':'oacute','\\xD3':'Oacute','\\xF2':'ograve','\\xD2':'Ograve','\\xF4':'ocirc','\\xD4':'Ocirc','\\xF6':'ouml','\\xD6':'Ouml','\\u0151':'odblac','\\u0150':'Odblac','\\xF5':'otilde','\\xD5':'Otilde','\\xF8':'oslash','\\xD8':'Oslash','\\u014D':'omacr','\\u014C':'Omacr','\\u0153':'oelig','\\u0152':'OElig','\\uD835\\uDD2D':'pfr','\\uD835\\uDCC5':'pscr','\\uD835\\uDD61':'popf','\\u2119':'Popf','\\uD835\\uDD13':'Pfr','\\uD835\\uDCAB':'Pscr','\\uD835\\uDD62':'qopf','\\uD835\\uDD2E':'qfr','\\uD835\\uDCC6':'qscr','\\uD835\\uDCAC':'Qscr','\\uD835\\uDD14':'Qfr','\\u211A':'Qopf','\\u0138':'kgreen','\\uD835\\uDD2F':'rfr','\\uD835\\uDD63':'ropf','\\uD835\\uDCC7':'rscr','\\u211B':'Rscr','\\u211C':'Re','\\u211D':'Ropf','\\u0155':'racute','\\u0154':'Racute','\\u0159':'rcaron','\\u0158':'Rcaron','\\u0157':'rcedil','\\u0156':'Rcedil','\\uD835\\uDD64':'sopf','\\uD835\\uDCC8':'sscr','\\uD835\\uDD30':'sfr','\\uD835\\uDD4A':'Sopf','\\uD835\\uDD16':'Sfr','\\uD835\\uDCAE':'Sscr','\\u24C8':'oS','\\u015B':'sacute','\\u015A':'Sacute','\\u015D':'scirc','\\u015C':'Scirc','\\u0161':'scaron','\\u0160':'Scaron','\\u015F':'scedil','\\u015E':'Scedil','\\xDF':'szlig','\\uD835\\uDD31':'tfr','\\uD835\\uDCC9':'tscr','\\uD835\\uDD65':'topf','\\uD835\\uDCAF':'Tscr','\\uD835\\uDD17':'Tfr','\\uD835\\uDD4B':'Topf','\\u0165':'tcaron','\\u0164':'Tcaron','\\u0163':'tcedil','\\u0162':'Tcedil','\\u2122':'trade','\\u0167':'tstrok','\\u0166':'Tstrok','\\uD835\\uDCCA':'uscr','\\uD835\\uDD66':'uopf','\\uD835\\uDD32':'ufr','\\uD835\\uDD4C':'Uopf','\\uD835\\uDD18':'Ufr','\\uD835\\uDCB0':'Uscr','\\xFA':'uacute','\\xDA':'Uacute','\\xF9':'ugrave','\\xD9':'Ugrave','\\u016D':'ubreve','\\u016C':'Ubreve','\\xFB':'ucirc','\\xDB':'Ucirc','\\u016F':'uring','\\u016E':'Uring','\\xFC':'uuml','\\xDC':'Uuml','\\u0171':'udblac','\\u0170':'Udblac','\\u0169':'utilde','\\u0168':'Utilde','\\u0173':'uogon','\\u0172':'Uogon','\\u016B':'umacr','\\u016A':'Umacr','\\uD835\\uDD33':'vfr','\\uD835\\uDD67':'vopf','\\uD835\\uDCCB':'vscr','\\uD835\\uDD19':'Vfr','\\uD835\\uDD4D':'Vopf','\\uD835\\uDCB1':'Vscr','\\uD835\\uDD68':'wopf','\\uD835\\uDCCC':'wscr','\\uD835\\uDD34':'wfr','\\uD835\\uDCB2':'Wscr','\\uD835\\uDD4E':'Wopf','\\uD835\\uDD1A':'Wfr','\\u0175':'wcirc','\\u0174':'Wcirc','\\uD835\\uDD35':'xfr','\\uD835\\uDCCD':'xscr','\\uD835\\uDD69':'xopf','\\uD835\\uDD4F':'Xopf','\\uD835\\uDD1B':'Xfr','\\uD835\\uDCB3':'Xscr','\\uD835\\uDD36':'yfr','\\uD835\\uDCCE':'yscr','\\uD835\\uDD6A':'yopf','\\uD835\\uDCB4':'Yscr','\\uD835\\uDD1C':'Yfr','\\uD835\\uDD50':'Yopf','\\xFD':'yacute','\\xDD':'Yacute','\\u0177':'ycirc','\\u0176':'Ycirc','\\xFF':'yuml','\\u0178':'Yuml','\\uD835\\uDCCF':'zscr','\\uD835\\uDD37':'zfr','\\uD835\\uDD6B':'zopf','\\u2128':'Zfr','\\u2124':'Zopf','\\uD835\\uDCB5':'Zscr','\\u017A':'zacute','\\u0179':'Zacute','\\u017E':'zcaron','\\u017D':'Zcaron','\\u017C':'zdot','\\u017B':'Zdot','\\u01B5':'imped','\\xFE':'thorn','\\xDE':'THORN','\\u0149':'napos','\\u03B1':'alpha','\\u0391':'Alpha','\\u03B2':'beta','\\u0392':'Beta','\\u03B3':'gamma','\\u0393':'Gamma','\\u03B4':'delta','\\u0394':'Delta','\\u03B5':'epsi','\\u03F5':'epsiv','\\u0395':'Epsilon','\\u03DD':'gammad','\\u03DC':'Gammad','\\u03B6':'zeta','\\u0396':'Zeta','\\u03B7':'eta','\\u0397':'Eta','\\u03B8':'theta','\\u03D1':'thetav','\\u0398':'Theta','\\u03B9':'iota','\\u0399':'Iota','\\u03BA':'kappa','\\u03F0':'kappav','\\u039A':'Kappa','\\u03BB':'lambda','\\u039B':'Lambda','\\u03BC':'mu','\\xB5':'micro','\\u039C':'Mu','\\u03BD':'nu','\\u039D':'Nu','\\u03BE':'xi','\\u039E':'Xi','\\u03BF':'omicron','\\u039F':'Omicron','\\u03C0':'pi','\\u03D6':'piv','\\u03A0':'Pi','\\u03C1':'rho','\\u03F1':'rhov','\\u03A1':'Rho','\\u03C3':'sigma','\\u03A3':'Sigma','\\u03C2':'sigmaf','\\u03C4':'tau','\\u03A4':'Tau','\\u03C5':'upsi','\\u03A5':'Upsilon','\\u03D2':'Upsi','\\u03C6':'phi','\\u03D5':'phiv','\\u03A6':'Phi','\\u03C7':'chi','\\u03A7':'Chi','\\u03C8':'psi','\\u03A8':'Psi','\\u03C9':'omega','\\u03A9':'ohm','\\u0430':'acy','\\u0410':'Acy','\\u0431':'bcy','\\u0411':'Bcy','\\u0432':'vcy','\\u0412':'Vcy','\\u0433':'gcy','\\u0413':'Gcy','\\u0453':'gjcy','\\u0403':'GJcy','\\u0434':'dcy','\\u0414':'Dcy','\\u0452':'djcy','\\u0402':'DJcy','\\u0435':'iecy','\\u0415':'IEcy','\\u0451':'iocy','\\u0401':'IOcy','\\u0454':'jukcy','\\u0404':'Jukcy','\\u0436':'zhcy','\\u0416':'ZHcy','\\u0437':'zcy','\\u0417':'Zcy','\\u0455':'dscy','\\u0405':'DScy','\\u0438':'icy','\\u0418':'Icy','\\u0456':'iukcy','\\u0406':'Iukcy','\\u0457':'yicy','\\u0407':'YIcy','\\u0439':'jcy','\\u0419':'Jcy','\\u0458':'jsercy','\\u0408':'Jsercy','\\u043A':'kcy','\\u041A':'Kcy','\\u045C':'kjcy','\\u040C':'KJcy','\\u043B':'lcy','\\u041B':'Lcy','\\u0459':'ljcy','\\u0409':'LJcy','\\u043C':'mcy','\\u041C':'Mcy','\\u043D':'ncy','\\u041D':'Ncy','\\u045A':'njcy','\\u040A':'NJcy','\\u043E':'ocy','\\u041E':'Ocy','\\u043F':'pcy','\\u041F':'Pcy','\\u0440':'rcy','\\u0420':'Rcy','\\u0441':'scy','\\u0421':'Scy','\\u0442':'tcy','\\u0422':'Tcy','\\u045B':'tshcy','\\u040B':'TSHcy','\\u0443':'ucy','\\u0423':'Ucy','\\u045E':'ubrcy','\\u040E':'Ubrcy','\\u0444':'fcy','\\u0424':'Fcy','\\u0445':'khcy','\\u0425':'KHcy','\\u0446':'tscy','\\u0426':'TScy','\\u0447':'chcy','\\u0427':'CHcy','\\u045F':'dzcy','\\u040F':'DZcy','\\u0448':'shcy','\\u0428':'SHcy','\\u0449':'shchcy','\\u0429':'SHCHcy','\\u044A':'hardcy','\\u042A':'HARDcy','\\u044B':'ycy','\\u042B':'Ycy','\\u044C':'softcy','\\u042C':'SOFTcy','\\u044D':'ecy','\\u042D':'Ecy','\\u044E':'yucy','\\u042E':'YUcy','\\u044F':'yacy','\\u042F':'YAcy','\\u2135':'aleph','\\u2136':'beth','\\u2137':'gimel','\\u2138':'daleth'};\n\n\tvar regexEscape = /[\"&'<>`]/g;\n\tvar escapeMap = {\n\t\t'\"': '&quot;',\n\t\t'&': '&amp;',\n\t\t'\\'': '&#x27;',\n\t\t'<': '&lt;',\n\t\t// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the\n\t\t// following is not strictly necessary unless it’s part of a tag or an\n\t\t// unquoted attribute value. We’re only escaping it to support those\n\t\t// situations, and for XML support.\n\t\t'>': '&gt;',\n\t\t// In Internet Explorer ≤ 8, the backtick character can be used\n\t\t// to break out of (un)quoted attribute values or HTML comments.\n\t\t// See http://html5sec.org/#102, http://html5sec.org/#108, and\n\t\t// http://html5sec.org/#133.\n\t\t'`': '&#x60;'\n\t};\n\n\tvar regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;\n\tvar regexInvalidRawCodePoint = /[\\0-\\x08\\x0B\\x0E-\\x1F\\x7F-\\x9F\\uFDD0-\\uFDEF\\uFFFE\\uFFFF]|[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\n\tvar regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;\n\tvar decodeMap = {'aacute':'\\xE1','Aacute':'\\xC1','abreve':'\\u0103','Abreve':'\\u0102','ac':'\\u223E','acd':'\\u223F','acE':'\\u223E\\u0333','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','acy':'\\u0430','Acy':'\\u0410','aelig':'\\xE6','AElig':'\\xC6','af':'\\u2061','afr':'\\uD835\\uDD1E','Afr':'\\uD835\\uDD04','agrave':'\\xE0','Agrave':'\\xC0','alefsym':'\\u2135','aleph':'\\u2135','alpha':'\\u03B1','Alpha':'\\u0391','amacr':'\\u0101','Amacr':'\\u0100','amalg':'\\u2A3F','amp':'&','AMP':'&','and':'\\u2227','And':'\\u2A53','andand':'\\u2A55','andd':'\\u2A5C','andslope':'\\u2A58','andv':'\\u2A5A','ang':'\\u2220','ange':'\\u29A4','angle':'\\u2220','angmsd':'\\u2221','angmsdaa':'\\u29A8','angmsdab':'\\u29A9','angmsdac':'\\u29AA','angmsdad':'\\u29AB','angmsdae':'\\u29AC','angmsdaf':'\\u29AD','angmsdag':'\\u29AE','angmsdah':'\\u29AF','angrt':'\\u221F','angrtvb':'\\u22BE','angrtvbd':'\\u299D','angsph':'\\u2222','angst':'\\xC5','angzarr':'\\u237C','aogon':'\\u0105','Aogon':'\\u0104','aopf':'\\uD835\\uDD52','Aopf':'\\uD835\\uDD38','ap':'\\u2248','apacir':'\\u2A6F','ape':'\\u224A','apE':'\\u2A70','apid':'\\u224B','apos':'\\'','ApplyFunction':'\\u2061','approx':'\\u2248','approxeq':'\\u224A','aring':'\\xE5','Aring':'\\xC5','ascr':'\\uD835\\uDCB6','Ascr':'\\uD835\\uDC9C','Assign':'\\u2254','ast':'*','asymp':'\\u2248','asympeq':'\\u224D','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','awconint':'\\u2233','awint':'\\u2A11','backcong':'\\u224C','backepsilon':'\\u03F6','backprime':'\\u2035','backsim':'\\u223D','backsimeq':'\\u22CD','Backslash':'\\u2216','Barv':'\\u2AE7','barvee':'\\u22BD','barwed':'\\u2305','Barwed':'\\u2306','barwedge':'\\u2305','bbrk':'\\u23B5','bbrktbrk':'\\u23B6','bcong':'\\u224C','bcy':'\\u0431','Bcy':'\\u0411','bdquo':'\\u201E','becaus':'\\u2235','because':'\\u2235','Because':'\\u2235','bemptyv':'\\u29B0','bepsi':'\\u03F6','bernou':'\\u212C','Bernoullis':'\\u212C','beta':'\\u03B2','Beta':'\\u0392','beth':'\\u2136','between':'\\u226C','bfr':'\\uD835\\uDD1F','Bfr':'\\uD835\\uDD05','bigcap':'\\u22C2','bigcirc':'\\u25EF','bigcup':'\\u22C3','bigodot':'\\u2A00','bigoplus':'\\u2A01','bigotimes':'\\u2A02','bigsqcup':'\\u2A06','bigstar':'\\u2605','bigtriangledown':'\\u25BD','bigtriangleup':'\\u25B3','biguplus':'\\u2A04','bigvee':'\\u22C1','bigwedge':'\\u22C0','bkarow':'\\u290D','blacklozenge':'\\u29EB','blacksquare':'\\u25AA','blacktriangle':'\\u25B4','blacktriangledown':'\\u25BE','blacktriangleleft':'\\u25C2','blacktriangleright':'\\u25B8','blank':'\\u2423','blk12':'\\u2592','blk14':'\\u2591','blk34':'\\u2593','block':'\\u2588','bne':'=\\u20E5','bnequiv':'\\u2261\\u20E5','bnot':'\\u2310','bNot':'\\u2AED','bopf':'\\uD835\\uDD53','Bopf':'\\uD835\\uDD39','bot':'\\u22A5','bottom':'\\u22A5','bowtie':'\\u22C8','boxbox':'\\u29C9','boxdl':'\\u2510','boxdL':'\\u2555','boxDl':'\\u2556','boxDL':'\\u2557','boxdr':'\\u250C','boxdR':'\\u2552','boxDr':'\\u2553','boxDR':'\\u2554','boxh':'\\u2500','boxH':'\\u2550','boxhd':'\\u252C','boxhD':'\\u2565','boxHd':'\\u2564','boxHD':'\\u2566','boxhu':'\\u2534','boxhU':'\\u2568','boxHu':'\\u2567','boxHU':'\\u2569','boxminus':'\\u229F','boxplus':'\\u229E','boxtimes':'\\u22A0','boxul':'\\u2518','boxuL':'\\u255B','boxUl':'\\u255C','boxUL':'\\u255D','boxur':'\\u2514','boxuR':'\\u2558','boxUr':'\\u2559','boxUR':'\\u255A','boxv':'\\u2502','boxV':'\\u2551','boxvh':'\\u253C','boxvH':'\\u256A','boxVh':'\\u256B','boxVH':'\\u256C','boxvl':'\\u2524','boxvL':'\\u2561','boxVl':'\\u2562','boxVL':'\\u2563','boxvr':'\\u251C','boxvR':'\\u255E','boxVr':'\\u255F','boxVR':'\\u2560','bprime':'\\u2035','breve':'\\u02D8','Breve':'\\u02D8','brvbar':'\\xA6','bscr':'\\uD835\\uDCB7','Bscr':'\\u212C','bsemi':'\\u204F','bsim':'\\u223D','bsime':'\\u22CD','bsol':'\\\\','bsolb':'\\u29C5','bsolhsub':'\\u27C8','bull':'\\u2022','bullet':'\\u2022','bump':'\\u224E','bumpe':'\\u224F','bumpE':'\\u2AAE','bumpeq':'\\u224F','Bumpeq':'\\u224E','cacute':'\\u0107','Cacute':'\\u0106','cap':'\\u2229','Cap':'\\u22D2','capand':'\\u2A44','capbrcup':'\\u2A49','capcap':'\\u2A4B','capcup':'\\u2A47','capdot':'\\u2A40','CapitalDifferentialD':'\\u2145','caps':'\\u2229\\uFE00','caret':'\\u2041','caron':'\\u02C7','Cayleys':'\\u212D','ccaps':'\\u2A4D','ccaron':'\\u010D','Ccaron':'\\u010C','ccedil':'\\xE7','Ccedil':'\\xC7','ccirc':'\\u0109','Ccirc':'\\u0108','Cconint':'\\u2230','ccups':'\\u2A4C','ccupssm':'\\u2A50','cdot':'\\u010B','Cdot':'\\u010A','cedil':'\\xB8','Cedilla':'\\xB8','cemptyv':'\\u29B2','cent':'\\xA2','centerdot':'\\xB7','CenterDot':'\\xB7','cfr':'\\uD835\\uDD20','Cfr':'\\u212D','chcy':'\\u0447','CHcy':'\\u0427','check':'\\u2713','checkmark':'\\u2713','chi':'\\u03C7','Chi':'\\u03A7','cir':'\\u25CB','circ':'\\u02C6','circeq':'\\u2257','circlearrowleft':'\\u21BA','circlearrowright':'\\u21BB','circledast':'\\u229B','circledcirc':'\\u229A','circleddash':'\\u229D','CircleDot':'\\u2299','circledR':'\\xAE','circledS':'\\u24C8','CircleMinus':'\\u2296','CirclePlus':'\\u2295','CircleTimes':'\\u2297','cire':'\\u2257','cirE':'\\u29C3','cirfnint':'\\u2A10','cirmid':'\\u2AEF','cirscir':'\\u29C2','ClockwiseContourIntegral':'\\u2232','CloseCurlyDoubleQuote':'\\u201D','CloseCurlyQuote':'\\u2019','clubs':'\\u2663','clubsuit':'\\u2663','colon':':','Colon':'\\u2237','colone':'\\u2254','Colone':'\\u2A74','coloneq':'\\u2254','comma':',','commat':'@','comp':'\\u2201','compfn':'\\u2218','complement':'\\u2201','complexes':'\\u2102','cong':'\\u2245','congdot':'\\u2A6D','Congruent':'\\u2261','conint':'\\u222E','Conint':'\\u222F','ContourIntegral':'\\u222E','copf':'\\uD835\\uDD54','Copf':'\\u2102','coprod':'\\u2210','Coproduct':'\\u2210','copy':'\\xA9','COPY':'\\xA9','copysr':'\\u2117','CounterClockwiseContourIntegral':'\\u2233','crarr':'\\u21B5','cross':'\\u2717','Cross':'\\u2A2F','cscr':'\\uD835\\uDCB8','Cscr':'\\uD835\\uDC9E','csub':'\\u2ACF','csube':'\\u2AD1','csup':'\\u2AD0','csupe':'\\u2AD2','ctdot':'\\u22EF','cudarrl':'\\u2938','cudarrr':'\\u2935','cuepr':'\\u22DE','cuesc':'\\u22DF','cularr':'\\u21B6','cularrp':'\\u293D','cup':'\\u222A','Cup':'\\u22D3','cupbrcap':'\\u2A48','cupcap':'\\u2A46','CupCap':'\\u224D','cupcup':'\\u2A4A','cupdot':'\\u228D','cupor':'\\u2A45','cups':'\\u222A\\uFE00','curarr':'\\u21B7','curarrm':'\\u293C','curlyeqprec':'\\u22DE','curlyeqsucc':'\\u22DF','curlyvee':'\\u22CE','curlywedge':'\\u22CF','curren':'\\xA4','curvearrowleft':'\\u21B6','curvearrowright':'\\u21B7','cuvee':'\\u22CE','cuwed':'\\u22CF','cwconint':'\\u2232','cwint':'\\u2231','cylcty':'\\u232D','dagger':'\\u2020','Dagger':'\\u2021','daleth':'\\u2138','darr':'\\u2193','dArr':'\\u21D3','Darr':'\\u21A1','dash':'\\u2010','dashv':'\\u22A3','Dashv':'\\u2AE4','dbkarow':'\\u290F','dblac':'\\u02DD','dcaron':'\\u010F','Dcaron':'\\u010E','dcy':'\\u0434','Dcy':'\\u0414','dd':'\\u2146','DD':'\\u2145','ddagger':'\\u2021','ddarr':'\\u21CA','DDotrahd':'\\u2911','ddotseq':'\\u2A77','deg':'\\xB0','Del':'\\u2207','delta':'\\u03B4','Delta':'\\u0394','demptyv':'\\u29B1','dfisht':'\\u297F','dfr':'\\uD835\\uDD21','Dfr':'\\uD835\\uDD07','dHar':'\\u2965','dharl':'\\u21C3','dharr':'\\u21C2','DiacriticalAcute':'\\xB4','DiacriticalDot':'\\u02D9','DiacriticalDoubleAcute':'\\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\\u02DC','diam':'\\u22C4','diamond':'\\u22C4','Diamond':'\\u22C4','diamondsuit':'\\u2666','diams':'\\u2666','die':'\\xA8','DifferentialD':'\\u2146','digamma':'\\u03DD','disin':'\\u22F2','div':'\\xF7','divide':'\\xF7','divideontimes':'\\u22C7','divonx':'\\u22C7','djcy':'\\u0452','DJcy':'\\u0402','dlcorn':'\\u231E','dlcrop':'\\u230D','dollar':'$','dopf':'\\uD835\\uDD55','Dopf':'\\uD835\\uDD3B','dot':'\\u02D9','Dot':'\\xA8','DotDot':'\\u20DC','doteq':'\\u2250','doteqdot':'\\u2251','DotEqual':'\\u2250','dotminus':'\\u2238','dotplus':'\\u2214','dotsquare':'\\u22A1','doublebarwedge':'\\u2306','DoubleContourIntegral':'\\u222F','DoubleDot':'\\xA8','DoubleDownArrow':'\\u21D3','DoubleLeftArrow':'\\u21D0','DoubleLeftRightArrow':'\\u21D4','DoubleLeftTee':'\\u2AE4','DoubleLongLeftArrow':'\\u27F8','DoubleLongLeftRightArrow':'\\u27FA','DoubleLongRightArrow':'\\u27F9','DoubleRightArrow':'\\u21D2','DoubleRightTee':'\\u22A8','DoubleUpArrow':'\\u21D1','DoubleUpDownArrow':'\\u21D5','DoubleVerticalBar':'\\u2225','downarrow':'\\u2193','Downarrow':'\\u21D3','DownArrow':'\\u2193','DownArrowBar':'\\u2913','DownArrowUpArrow':'\\u21F5','DownBreve':'\\u0311','downdownarrows':'\\u21CA','downharpoonleft':'\\u21C3','downharpoonright':'\\u21C2','DownLeftRightVector':'\\u2950','DownLeftTeeVector':'\\u295E','DownLeftVector':'\\u21BD','DownLeftVectorBar':'\\u2956','DownRightTeeVector':'\\u295F','DownRightVector':'\\u21C1','DownRightVectorBar':'\\u2957','DownTee':'\\u22A4','DownTeeArrow':'\\u21A7','drbkarow':'\\u2910','drcorn':'\\u231F','drcrop':'\\u230C','dscr':'\\uD835\\uDCB9','Dscr':'\\uD835\\uDC9F','dscy':'\\u0455','DScy':'\\u0405','dsol':'\\u29F6','dstrok':'\\u0111','Dstrok':'\\u0110','dtdot':'\\u22F1','dtri':'\\u25BF','dtrif':'\\u25BE','duarr':'\\u21F5','duhar':'\\u296F','dwangle':'\\u29A6','dzcy':'\\u045F','DZcy':'\\u040F','dzigrarr':'\\u27FF','eacute':'\\xE9','Eacute':'\\xC9','easter':'\\u2A6E','ecaron':'\\u011B','Ecaron':'\\u011A','ecir':'\\u2256','ecirc':'\\xEA','Ecirc':'\\xCA','ecolon':'\\u2255','ecy':'\\u044D','Ecy':'\\u042D','eDDot':'\\u2A77','edot':'\\u0117','eDot':'\\u2251','Edot':'\\u0116','ee':'\\u2147','efDot':'\\u2252','efr':'\\uD835\\uDD22','Efr':'\\uD835\\uDD08','eg':'\\u2A9A','egrave':'\\xE8','Egrave':'\\xC8','egs':'\\u2A96','egsdot':'\\u2A98','el':'\\u2A99','Element':'\\u2208','elinters':'\\u23E7','ell':'\\u2113','els':'\\u2A95','elsdot':'\\u2A97','emacr':'\\u0113','Emacr':'\\u0112','empty':'\\u2205','emptyset':'\\u2205','EmptySmallSquare':'\\u25FB','emptyv':'\\u2205','EmptyVerySmallSquare':'\\u25AB','emsp':'\\u2003','emsp13':'\\u2004','emsp14':'\\u2005','eng':'\\u014B','ENG':'\\u014A','ensp':'\\u2002','eogon':'\\u0119','Eogon':'\\u0118','eopf':'\\uD835\\uDD56','Eopf':'\\uD835\\uDD3C','epar':'\\u22D5','eparsl':'\\u29E3','eplus':'\\u2A71','epsi':'\\u03B5','epsilon':'\\u03B5','Epsilon':'\\u0395','epsiv':'\\u03F5','eqcirc':'\\u2256','eqcolon':'\\u2255','eqsim':'\\u2242','eqslantgtr':'\\u2A96','eqslantless':'\\u2A95','Equal':'\\u2A75','equals':'=','EqualTilde':'\\u2242','equest':'\\u225F','Equilibrium':'\\u21CC','equiv':'\\u2261','equivDD':'\\u2A78','eqvparsl':'\\u29E5','erarr':'\\u2971','erDot':'\\u2253','escr':'\\u212F','Escr':'\\u2130','esdot':'\\u2250','esim':'\\u2242','Esim':'\\u2A73','eta':'\\u03B7','Eta':'\\u0397','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','euro':'\\u20AC','excl':'!','exist':'\\u2203','Exists':'\\u2203','expectation':'\\u2130','exponentiale':'\\u2147','ExponentialE':'\\u2147','fallingdotseq':'\\u2252','fcy':'\\u0444','Fcy':'\\u0424','female':'\\u2640','ffilig':'\\uFB03','fflig':'\\uFB00','ffllig':'\\uFB04','ffr':'\\uD835\\uDD23','Ffr':'\\uD835\\uDD09','filig':'\\uFB01','FilledSmallSquare':'\\u25FC','FilledVerySmallSquare':'\\u25AA','fjlig':'fj','flat':'\\u266D','fllig':'\\uFB02','fltns':'\\u25B1','fnof':'\\u0192','fopf':'\\uD835\\uDD57','Fopf':'\\uD835\\uDD3D','forall':'\\u2200','ForAll':'\\u2200','fork':'\\u22D4','forkv':'\\u2AD9','Fouriertrf':'\\u2131','fpartint':'\\u2A0D','frac12':'\\xBD','frac13':'\\u2153','frac14':'\\xBC','frac15':'\\u2155','frac16':'\\u2159','frac18':'\\u215B','frac23':'\\u2154','frac25':'\\u2156','frac34':'\\xBE','frac35':'\\u2157','frac38':'\\u215C','frac45':'\\u2158','frac56':'\\u215A','frac58':'\\u215D','frac78':'\\u215E','frasl':'\\u2044','frown':'\\u2322','fscr':'\\uD835\\uDCBB','Fscr':'\\u2131','gacute':'\\u01F5','gamma':'\\u03B3','Gamma':'\\u0393','gammad':'\\u03DD','Gammad':'\\u03DC','gap':'\\u2A86','gbreve':'\\u011F','Gbreve':'\\u011E','Gcedil':'\\u0122','gcirc':'\\u011D','Gcirc':'\\u011C','gcy':'\\u0433','Gcy':'\\u0413','gdot':'\\u0121','Gdot':'\\u0120','ge':'\\u2265','gE':'\\u2267','gel':'\\u22DB','gEl':'\\u2A8C','geq':'\\u2265','geqq':'\\u2267','geqslant':'\\u2A7E','ges':'\\u2A7E','gescc':'\\u2AA9','gesdot':'\\u2A80','gesdoto':'\\u2A82','gesdotol':'\\u2A84','gesl':'\\u22DB\\uFE00','gesles':'\\u2A94','gfr':'\\uD835\\uDD24','Gfr':'\\uD835\\uDD0A','gg':'\\u226B','Gg':'\\u22D9','ggg':'\\u22D9','gimel':'\\u2137','gjcy':'\\u0453','GJcy':'\\u0403','gl':'\\u2277','gla':'\\u2AA5','glE':'\\u2A92','glj':'\\u2AA4','gnap':'\\u2A8A','gnapprox':'\\u2A8A','gne':'\\u2A88','gnE':'\\u2269','gneq':'\\u2A88','gneqq':'\\u2269','gnsim':'\\u22E7','gopf':'\\uD835\\uDD58','Gopf':'\\uD835\\uDD3E','grave':'`','GreaterEqual':'\\u2265','GreaterEqualLess':'\\u22DB','GreaterFullEqual':'\\u2267','GreaterGreater':'\\u2AA2','GreaterLess':'\\u2277','GreaterSlantEqual':'\\u2A7E','GreaterTilde':'\\u2273','gscr':'\\u210A','Gscr':'\\uD835\\uDCA2','gsim':'\\u2273','gsime':'\\u2A8E','gsiml':'\\u2A90','gt':'>','Gt':'\\u226B','GT':'>','gtcc':'\\u2AA7','gtcir':'\\u2A7A','gtdot':'\\u22D7','gtlPar':'\\u2995','gtquest':'\\u2A7C','gtrapprox':'\\u2A86','gtrarr':'\\u2978','gtrdot':'\\u22D7','gtreqless':'\\u22DB','gtreqqless':'\\u2A8C','gtrless':'\\u2277','gtrsim':'\\u2273','gvertneqq':'\\u2269\\uFE00','gvnE':'\\u2269\\uFE00','Hacek':'\\u02C7','hairsp':'\\u200A','half':'\\xBD','hamilt':'\\u210B','hardcy':'\\u044A','HARDcy':'\\u042A','harr':'\\u2194','hArr':'\\u21D4','harrcir':'\\u2948','harrw':'\\u21AD','Hat':'^','hbar':'\\u210F','hcirc':'\\u0125','Hcirc':'\\u0124','hearts':'\\u2665','heartsuit':'\\u2665','hellip':'\\u2026','hercon':'\\u22B9','hfr':'\\uD835\\uDD25','Hfr':'\\u210C','HilbertSpace':'\\u210B','hksearow':'\\u2925','hkswarow':'\\u2926','hoarr':'\\u21FF','homtht':'\\u223B','hookleftarrow':'\\u21A9','hookrightarrow':'\\u21AA','hopf':'\\uD835\\uDD59','Hopf':'\\u210D','horbar':'\\u2015','HorizontalLine':'\\u2500','hscr':'\\uD835\\uDCBD','Hscr':'\\u210B','hslash':'\\u210F','hstrok':'\\u0127','Hstrok':'\\u0126','HumpDownHump':'\\u224E','HumpEqual':'\\u224F','hybull':'\\u2043','hyphen':'\\u2010','iacute':'\\xED','Iacute':'\\xCD','ic':'\\u2063','icirc':'\\xEE','Icirc':'\\xCE','icy':'\\u0438','Icy':'\\u0418','Idot':'\\u0130','iecy':'\\u0435','IEcy':'\\u0415','iexcl':'\\xA1','iff':'\\u21D4','ifr':'\\uD835\\uDD26','Ifr':'\\u2111','igrave':'\\xEC','Igrave':'\\xCC','ii':'\\u2148','iiiint':'\\u2A0C','iiint':'\\u222D','iinfin':'\\u29DC','iiota':'\\u2129','ijlig':'\\u0133','IJlig':'\\u0132','Im':'\\u2111','imacr':'\\u012B','Imacr':'\\u012A','image':'\\u2111','ImaginaryI':'\\u2148','imagline':'\\u2110','imagpart':'\\u2111','imath':'\\u0131','imof':'\\u22B7','imped':'\\u01B5','Implies':'\\u21D2','in':'\\u2208','incare':'\\u2105','infin':'\\u221E','infintie':'\\u29DD','inodot':'\\u0131','int':'\\u222B','Int':'\\u222C','intcal':'\\u22BA','integers':'\\u2124','Integral':'\\u222B','intercal':'\\u22BA','Intersection':'\\u22C2','intlarhk':'\\u2A17','intprod':'\\u2A3C','InvisibleComma':'\\u2063','InvisibleTimes':'\\u2062','iocy':'\\u0451','IOcy':'\\u0401','iogon':'\\u012F','Iogon':'\\u012E','iopf':'\\uD835\\uDD5A','Iopf':'\\uD835\\uDD40','iota':'\\u03B9','Iota':'\\u0399','iprod':'\\u2A3C','iquest':'\\xBF','iscr':'\\uD835\\uDCBE','Iscr':'\\u2110','isin':'\\u2208','isindot':'\\u22F5','isinE':'\\u22F9','isins':'\\u22F4','isinsv':'\\u22F3','isinv':'\\u2208','it':'\\u2062','itilde':'\\u0129','Itilde':'\\u0128','iukcy':'\\u0456','Iukcy':'\\u0406','iuml':'\\xEF','Iuml':'\\xCF','jcirc':'\\u0135','Jcirc':'\\u0134','jcy':'\\u0439','Jcy':'\\u0419','jfr':'\\uD835\\uDD27','Jfr':'\\uD835\\uDD0D','jmath':'\\u0237','jopf':'\\uD835\\uDD5B','Jopf':'\\uD835\\uDD41','jscr':'\\uD835\\uDCBF','Jscr':'\\uD835\\uDCA5','jsercy':'\\u0458','Jsercy':'\\u0408','jukcy':'\\u0454','Jukcy':'\\u0404','kappa':'\\u03BA','Kappa':'\\u039A','kappav':'\\u03F0','kcedil':'\\u0137','Kcedil':'\\u0136','kcy':'\\u043A','Kcy':'\\u041A','kfr':'\\uD835\\uDD28','Kfr':'\\uD835\\uDD0E','kgreen':'\\u0138','khcy':'\\u0445','KHcy':'\\u0425','kjcy':'\\u045C','KJcy':'\\u040C','kopf':'\\uD835\\uDD5C','Kopf':'\\uD835\\uDD42','kscr':'\\uD835\\uDCC0','Kscr':'\\uD835\\uDCA6','lAarr':'\\u21DA','lacute':'\\u013A','Lacute':'\\u0139','laemptyv':'\\u29B4','lagran':'\\u2112','lambda':'\\u03BB','Lambda':'\\u039B','lang':'\\u27E8','Lang':'\\u27EA','langd':'\\u2991','langle':'\\u27E8','lap':'\\u2A85','Laplacetrf':'\\u2112','laquo':'\\xAB','larr':'\\u2190','lArr':'\\u21D0','Larr':'\\u219E','larrb':'\\u21E4','larrbfs':'\\u291F','larrfs':'\\u291D','larrhk':'\\u21A9','larrlp':'\\u21AB','larrpl':'\\u2939','larrsim':'\\u2973','larrtl':'\\u21A2','lat':'\\u2AAB','latail':'\\u2919','lAtail':'\\u291B','late':'\\u2AAD','lates':'\\u2AAD\\uFE00','lbarr':'\\u290C','lBarr':'\\u290E','lbbrk':'\\u2772','lbrace':'{','lbrack':'[','lbrke':'\\u298B','lbrksld':'\\u298F','lbrkslu':'\\u298D','lcaron':'\\u013E','Lcaron':'\\u013D','lcedil':'\\u013C','Lcedil':'\\u013B','lceil':'\\u2308','lcub':'{','lcy':'\\u043B','Lcy':'\\u041B','ldca':'\\u2936','ldquo':'\\u201C','ldquor':'\\u201E','ldrdhar':'\\u2967','ldrushar':'\\u294B','ldsh':'\\u21B2','le':'\\u2264','lE':'\\u2266','LeftAngleBracket':'\\u27E8','leftarrow':'\\u2190','Leftarrow':'\\u21D0','LeftArrow':'\\u2190','LeftArrowBar':'\\u21E4','LeftArrowRightArrow':'\\u21C6','leftarrowtail':'\\u21A2','LeftCeiling':'\\u2308','LeftDoubleBracket':'\\u27E6','LeftDownTeeVector':'\\u2961','LeftDownVector':'\\u21C3','LeftDownVectorBar':'\\u2959','LeftFloor':'\\u230A','leftharpoondown':'\\u21BD','leftharpoonup':'\\u21BC','leftleftarrows':'\\u21C7','leftrightarrow':'\\u2194','Leftrightarrow':'\\u21D4','LeftRightArrow':'\\u2194','leftrightarrows':'\\u21C6','leftrightharpoons':'\\u21CB','leftrightsquigarrow':'\\u21AD','LeftRightVector':'\\u294E','LeftTee':'\\u22A3','LeftTeeArrow':'\\u21A4','LeftTeeVector':'\\u295A','leftthreetimes':'\\u22CB','LeftTriangle':'\\u22B2','LeftTriangleBar':'\\u29CF','LeftTriangleEqual':'\\u22B4','LeftUpDownVector':'\\u2951','LeftUpTeeVector':'\\u2960','LeftUpVector':'\\u21BF','LeftUpVectorBar':'\\u2958','LeftVector':'\\u21BC','LeftVectorBar':'\\u2952','leg':'\\u22DA','lEg':'\\u2A8B','leq':'\\u2264','leqq':'\\u2266','leqslant':'\\u2A7D','les':'\\u2A7D','lescc':'\\u2AA8','lesdot':'\\u2A7F','lesdoto':'\\u2A81','lesdotor':'\\u2A83','lesg':'\\u22DA\\uFE00','lesges':'\\u2A93','lessapprox':'\\u2A85','lessdot':'\\u22D6','lesseqgtr':'\\u22DA','lesseqqgtr':'\\u2A8B','LessEqualGreater':'\\u22DA','LessFullEqual':'\\u2266','LessGreater':'\\u2276','lessgtr':'\\u2276','LessLess':'\\u2AA1','lesssim':'\\u2272','LessSlantEqual':'\\u2A7D','LessTilde':'\\u2272','lfisht':'\\u297C','lfloor':'\\u230A','lfr':'\\uD835\\uDD29','Lfr':'\\uD835\\uDD0F','lg':'\\u2276','lgE':'\\u2A91','lHar':'\\u2962','lhard':'\\u21BD','lharu':'\\u21BC','lharul':'\\u296A','lhblk':'\\u2584','ljcy':'\\u0459','LJcy':'\\u0409','ll':'\\u226A','Ll':'\\u22D8','llarr':'\\u21C7','llcorner':'\\u231E','Lleftarrow':'\\u21DA','llhard':'\\u296B','lltri':'\\u25FA','lmidot':'\\u0140','Lmidot':'\\u013F','lmoust':'\\u23B0','lmoustache':'\\u23B0','lnap':'\\u2A89','lnapprox':'\\u2A89','lne':'\\u2A87','lnE':'\\u2268','lneq':'\\u2A87','lneqq':'\\u2268','lnsim':'\\u22E6','loang':'\\u27EC','loarr':'\\u21FD','lobrk':'\\u27E6','longleftarrow':'\\u27F5','Longleftarrow':'\\u27F8','LongLeftArrow':'\\u27F5','longleftrightarrow':'\\u27F7','Longleftrightarrow':'\\u27FA','LongLeftRightArrow':'\\u27F7','longmapsto':'\\u27FC','longrightarrow':'\\u27F6','Longrightarrow':'\\u27F9','LongRightArrow':'\\u27F6','looparrowleft':'\\u21AB','looparrowright':'\\u21AC','lopar':'\\u2985','lopf':'\\uD835\\uDD5D','Lopf':'\\uD835\\uDD43','loplus':'\\u2A2D','lotimes':'\\u2A34','lowast':'\\u2217','lowbar':'_','LowerLeftArrow':'\\u2199','LowerRightArrow':'\\u2198','loz':'\\u25CA','lozenge':'\\u25CA','lozf':'\\u29EB','lpar':'(','lparlt':'\\u2993','lrarr':'\\u21C6','lrcorner':'\\u231F','lrhar':'\\u21CB','lrhard':'\\u296D','lrm':'\\u200E','lrtri':'\\u22BF','lsaquo':'\\u2039','lscr':'\\uD835\\uDCC1','Lscr':'\\u2112','lsh':'\\u21B0','Lsh':'\\u21B0','lsim':'\\u2272','lsime':'\\u2A8D','lsimg':'\\u2A8F','lsqb':'[','lsquo':'\\u2018','lsquor':'\\u201A','lstrok':'\\u0142','Lstrok':'\\u0141','lt':'<','Lt':'\\u226A','LT':'<','ltcc':'\\u2AA6','ltcir':'\\u2A79','ltdot':'\\u22D6','lthree':'\\u22CB','ltimes':'\\u22C9','ltlarr':'\\u2976','ltquest':'\\u2A7B','ltri':'\\u25C3','ltrie':'\\u22B4','ltrif':'\\u25C2','ltrPar':'\\u2996','lurdshar':'\\u294A','luruhar':'\\u2966','lvertneqq':'\\u2268\\uFE00','lvnE':'\\u2268\\uFE00','macr':'\\xAF','male':'\\u2642','malt':'\\u2720','maltese':'\\u2720','map':'\\u21A6','Map':'\\u2905','mapsto':'\\u21A6','mapstodown':'\\u21A7','mapstoleft':'\\u21A4','mapstoup':'\\u21A5','marker':'\\u25AE','mcomma':'\\u2A29','mcy':'\\u043C','Mcy':'\\u041C','mdash':'\\u2014','mDDot':'\\u223A','measuredangle':'\\u2221','MediumSpace':'\\u205F','Mellintrf':'\\u2133','mfr':'\\uD835\\uDD2A','Mfr':'\\uD835\\uDD10','mho':'\\u2127','micro':'\\xB5','mid':'\\u2223','midast':'*','midcir':'\\u2AF0','middot':'\\xB7','minus':'\\u2212','minusb':'\\u229F','minusd':'\\u2238','minusdu':'\\u2A2A','MinusPlus':'\\u2213','mlcp':'\\u2ADB','mldr':'\\u2026','mnplus':'\\u2213','models':'\\u22A7','mopf':'\\uD835\\uDD5E','Mopf':'\\uD835\\uDD44','mp':'\\u2213','mscr':'\\uD835\\uDCC2','Mscr':'\\u2133','mstpos':'\\u223E','mu':'\\u03BC','Mu':'\\u039C','multimap':'\\u22B8','mumap':'\\u22B8','nabla':'\\u2207','nacute':'\\u0144','Nacute':'\\u0143','nang':'\\u2220\\u20D2','nap':'\\u2249','napE':'\\u2A70\\u0338','napid':'\\u224B\\u0338','napos':'\\u0149','napprox':'\\u2249','natur':'\\u266E','natural':'\\u266E','naturals':'\\u2115','nbsp':'\\xA0','nbump':'\\u224E\\u0338','nbumpe':'\\u224F\\u0338','ncap':'\\u2A43','ncaron':'\\u0148','Ncaron':'\\u0147','ncedil':'\\u0146','Ncedil':'\\u0145','ncong':'\\u2247','ncongdot':'\\u2A6D\\u0338','ncup':'\\u2A42','ncy':'\\u043D','Ncy':'\\u041D','ndash':'\\u2013','ne':'\\u2260','nearhk':'\\u2924','nearr':'\\u2197','neArr':'\\u21D7','nearrow':'\\u2197','nedot':'\\u2250\\u0338','NegativeMediumSpace':'\\u200B','NegativeThickSpace':'\\u200B','NegativeThinSpace':'\\u200B','NegativeVeryThinSpace':'\\u200B','nequiv':'\\u2262','nesear':'\\u2928','nesim':'\\u2242\\u0338','NestedGreaterGreater':'\\u226B','NestedLessLess':'\\u226A','NewLine':'\\n','nexist':'\\u2204','nexists':'\\u2204','nfr':'\\uD835\\uDD2B','Nfr':'\\uD835\\uDD11','nge':'\\u2271','ngE':'\\u2267\\u0338','ngeq':'\\u2271','ngeqq':'\\u2267\\u0338','ngeqslant':'\\u2A7E\\u0338','nges':'\\u2A7E\\u0338','nGg':'\\u22D9\\u0338','ngsim':'\\u2275','ngt':'\\u226F','nGt':'\\u226B\\u20D2','ngtr':'\\u226F','nGtv':'\\u226B\\u0338','nharr':'\\u21AE','nhArr':'\\u21CE','nhpar':'\\u2AF2','ni':'\\u220B','nis':'\\u22FC','nisd':'\\u22FA','niv':'\\u220B','njcy':'\\u045A','NJcy':'\\u040A','nlarr':'\\u219A','nlArr':'\\u21CD','nldr':'\\u2025','nle':'\\u2270','nlE':'\\u2266\\u0338','nleftarrow':'\\u219A','nLeftarrow':'\\u21CD','nleftrightarrow':'\\u21AE','nLeftrightarrow':'\\u21CE','nleq':'\\u2270','nleqq':'\\u2266\\u0338','nleqslant':'\\u2A7D\\u0338','nles':'\\u2A7D\\u0338','nless':'\\u226E','nLl':'\\u22D8\\u0338','nlsim':'\\u2274','nlt':'\\u226E','nLt':'\\u226A\\u20D2','nltri':'\\u22EA','nltrie':'\\u22EC','nLtv':'\\u226A\\u0338','nmid':'\\u2224','NoBreak':'\\u2060','NonBreakingSpace':'\\xA0','nopf':'\\uD835\\uDD5F','Nopf':'\\u2115','not':'\\xAC','Not':'\\u2AEC','NotCongruent':'\\u2262','NotCupCap':'\\u226D','NotDoubleVerticalBar':'\\u2226','NotElement':'\\u2209','NotEqual':'\\u2260','NotEqualTilde':'\\u2242\\u0338','NotExists':'\\u2204','NotGreater':'\\u226F','NotGreaterEqual':'\\u2271','NotGreaterFullEqual':'\\u2267\\u0338','NotGreaterGreater':'\\u226B\\u0338','NotGreaterLess':'\\u2279','NotGreaterSlantEqual':'\\u2A7E\\u0338','NotGreaterTilde':'\\u2275','NotHumpDownHump':'\\u224E\\u0338','NotHumpEqual':'\\u224F\\u0338','notin':'\\u2209','notindot':'\\u22F5\\u0338','notinE':'\\u22F9\\u0338','notinva':'\\u2209','notinvb':'\\u22F7','notinvc':'\\u22F6','NotLeftTriangle':'\\u22EA','NotLeftTriangleBar':'\\u29CF\\u0338','NotLeftTriangleEqual':'\\u22EC','NotLess':'\\u226E','NotLessEqual':'\\u2270','NotLessGreater':'\\u2278','NotLessLess':'\\u226A\\u0338','NotLessSlantEqual':'\\u2A7D\\u0338','NotLessTilde':'\\u2274','NotNestedGreaterGreater':'\\u2AA2\\u0338','NotNestedLessLess':'\\u2AA1\\u0338','notni':'\\u220C','notniva':'\\u220C','notnivb':'\\u22FE','notnivc':'\\u22FD','NotPrecedes':'\\u2280','NotPrecedesEqual':'\\u2AAF\\u0338','NotPrecedesSlantEqual':'\\u22E0','NotReverseElement':'\\u220C','NotRightTriangle':'\\u22EB','NotRightTriangleBar':'\\u29D0\\u0338','NotRightTriangleEqual':'\\u22ED','NotSquareSubset':'\\u228F\\u0338','NotSquareSubsetEqual':'\\u22E2','NotSquareSuperset':'\\u2290\\u0338','NotSquareSupersetEqual':'\\u22E3','NotSubset':'\\u2282\\u20D2','NotSubsetEqual':'\\u2288','NotSucceeds':'\\u2281','NotSucceedsEqual':'\\u2AB0\\u0338','NotSucceedsSlantEqual':'\\u22E1','NotSucceedsTilde':'\\u227F\\u0338','NotSuperset':'\\u2283\\u20D2','NotSupersetEqual':'\\u2289','NotTilde':'\\u2241','NotTildeEqual':'\\u2244','NotTildeFullEqual':'\\u2247','NotTildeTilde':'\\u2249','NotVerticalBar':'\\u2224','npar':'\\u2226','nparallel':'\\u2226','nparsl':'\\u2AFD\\u20E5','npart':'\\u2202\\u0338','npolint':'\\u2A14','npr':'\\u2280','nprcue':'\\u22E0','npre':'\\u2AAF\\u0338','nprec':'\\u2280','npreceq':'\\u2AAF\\u0338','nrarr':'\\u219B','nrArr':'\\u21CF','nrarrc':'\\u2933\\u0338','nrarrw':'\\u219D\\u0338','nrightarrow':'\\u219B','nRightarrow':'\\u21CF','nrtri':'\\u22EB','nrtrie':'\\u22ED','nsc':'\\u2281','nsccue':'\\u22E1','nsce':'\\u2AB0\\u0338','nscr':'\\uD835\\uDCC3','Nscr':'\\uD835\\uDCA9','nshortmid':'\\u2224','nshortparallel':'\\u2226','nsim':'\\u2241','nsime':'\\u2244','nsimeq':'\\u2244','nsmid':'\\u2224','nspar':'\\u2226','nsqsube':'\\u22E2','nsqsupe':'\\u22E3','nsub':'\\u2284','nsube':'\\u2288','nsubE':'\\u2AC5\\u0338','nsubset':'\\u2282\\u20D2','nsubseteq':'\\u2288','nsubseteqq':'\\u2AC5\\u0338','nsucc':'\\u2281','nsucceq':'\\u2AB0\\u0338','nsup':'\\u2285','nsupe':'\\u2289','nsupE':'\\u2AC6\\u0338','nsupset':'\\u2283\\u20D2','nsupseteq':'\\u2289','nsupseteqq':'\\u2AC6\\u0338','ntgl':'\\u2279','ntilde':'\\xF1','Ntilde':'\\xD1','ntlg':'\\u2278','ntriangleleft':'\\u22EA','ntrianglelefteq':'\\u22EC','ntriangleright':'\\u22EB','ntrianglerighteq':'\\u22ED','nu':'\\u03BD','Nu':'\\u039D','num':'#','numero':'\\u2116','numsp':'\\u2007','nvap':'\\u224D\\u20D2','nvdash':'\\u22AC','nvDash':'\\u22AD','nVdash':'\\u22AE','nVDash':'\\u22AF','nvge':'\\u2265\\u20D2','nvgt':'>\\u20D2','nvHarr':'\\u2904','nvinfin':'\\u29DE','nvlArr':'\\u2902','nvle':'\\u2264\\u20D2','nvlt':'<\\u20D2','nvltrie':'\\u22B4\\u20D2','nvrArr':'\\u2903','nvrtrie':'\\u22B5\\u20D2','nvsim':'\\u223C\\u20D2','nwarhk':'\\u2923','nwarr':'\\u2196','nwArr':'\\u21D6','nwarrow':'\\u2196','nwnear':'\\u2927','oacute':'\\xF3','Oacute':'\\xD3','oast':'\\u229B','ocir':'\\u229A','ocirc':'\\xF4','Ocirc':'\\xD4','ocy':'\\u043E','Ocy':'\\u041E','odash':'\\u229D','odblac':'\\u0151','Odblac':'\\u0150','odiv':'\\u2A38','odot':'\\u2299','odsold':'\\u29BC','oelig':'\\u0153','OElig':'\\u0152','ofcir':'\\u29BF','ofr':'\\uD835\\uDD2C','Ofr':'\\uD835\\uDD12','ogon':'\\u02DB','ograve':'\\xF2','Ograve':'\\xD2','ogt':'\\u29C1','ohbar':'\\u29B5','ohm':'\\u03A9','oint':'\\u222E','olarr':'\\u21BA','olcir':'\\u29BE','olcross':'\\u29BB','oline':'\\u203E','olt':'\\u29C0','omacr':'\\u014D','Omacr':'\\u014C','omega':'\\u03C9','Omega':'\\u03A9','omicron':'\\u03BF','Omicron':'\\u039F','omid':'\\u29B6','ominus':'\\u2296','oopf':'\\uD835\\uDD60','Oopf':'\\uD835\\uDD46','opar':'\\u29B7','OpenCurlyDoubleQuote':'\\u201C','OpenCurlyQuote':'\\u2018','operp':'\\u29B9','oplus':'\\u2295','or':'\\u2228','Or':'\\u2A54','orarr':'\\u21BB','ord':'\\u2A5D','order':'\\u2134','orderof':'\\u2134','ordf':'\\xAA','ordm':'\\xBA','origof':'\\u22B6','oror':'\\u2A56','orslope':'\\u2A57','orv':'\\u2A5B','oS':'\\u24C8','oscr':'\\u2134','Oscr':'\\uD835\\uDCAA','oslash':'\\xF8','Oslash':'\\xD8','osol':'\\u2298','otilde':'\\xF5','Otilde':'\\xD5','otimes':'\\u2297','Otimes':'\\u2A37','otimesas':'\\u2A36','ouml':'\\xF6','Ouml':'\\xD6','ovbar':'\\u233D','OverBar':'\\u203E','OverBrace':'\\u23DE','OverBracket':'\\u23B4','OverParenthesis':'\\u23DC','par':'\\u2225','para':'\\xB6','parallel':'\\u2225','parsim':'\\u2AF3','parsl':'\\u2AFD','part':'\\u2202','PartialD':'\\u2202','pcy':'\\u043F','Pcy':'\\u041F','percnt':'%','period':'.','permil':'\\u2030','perp':'\\u22A5','pertenk':'\\u2031','pfr':'\\uD835\\uDD2D','Pfr':'\\uD835\\uDD13','phi':'\\u03C6','Phi':'\\u03A6','phiv':'\\u03D5','phmmat':'\\u2133','phone':'\\u260E','pi':'\\u03C0','Pi':'\\u03A0','pitchfork':'\\u22D4','piv':'\\u03D6','planck':'\\u210F','planckh':'\\u210E','plankv':'\\u210F','plus':'+','plusacir':'\\u2A23','plusb':'\\u229E','pluscir':'\\u2A22','plusdo':'\\u2214','plusdu':'\\u2A25','pluse':'\\u2A72','PlusMinus':'\\xB1','plusmn':'\\xB1','plussim':'\\u2A26','plustwo':'\\u2A27','pm':'\\xB1','Poincareplane':'\\u210C','pointint':'\\u2A15','popf':'\\uD835\\uDD61','Popf':'\\u2119','pound':'\\xA3','pr':'\\u227A','Pr':'\\u2ABB','prap':'\\u2AB7','prcue':'\\u227C','pre':'\\u2AAF','prE':'\\u2AB3','prec':'\\u227A','precapprox':'\\u2AB7','preccurlyeq':'\\u227C','Precedes':'\\u227A','PrecedesEqual':'\\u2AAF','PrecedesSlantEqual':'\\u227C','PrecedesTilde':'\\u227E','preceq':'\\u2AAF','precnapprox':'\\u2AB9','precneqq':'\\u2AB5','precnsim':'\\u22E8','precsim':'\\u227E','prime':'\\u2032','Prime':'\\u2033','primes':'\\u2119','prnap':'\\u2AB9','prnE':'\\u2AB5','prnsim':'\\u22E8','prod':'\\u220F','Product':'\\u220F','profalar':'\\u232E','profline':'\\u2312','profsurf':'\\u2313','prop':'\\u221D','Proportion':'\\u2237','Proportional':'\\u221D','propto':'\\u221D','prsim':'\\u227E','prurel':'\\u22B0','pscr':'\\uD835\\uDCC5','Pscr':'\\uD835\\uDCAB','psi':'\\u03C8','Psi':'\\u03A8','puncsp':'\\u2008','qfr':'\\uD835\\uDD2E','Qfr':'\\uD835\\uDD14','qint':'\\u2A0C','qopf':'\\uD835\\uDD62','Qopf':'\\u211A','qprime':'\\u2057','qscr':'\\uD835\\uDCC6','Qscr':'\\uD835\\uDCAC','quaternions':'\\u210D','quatint':'\\u2A16','quest':'?','questeq':'\\u225F','quot':'\"','QUOT':'\"','rAarr':'\\u21DB','race':'\\u223D\\u0331','racute':'\\u0155','Racute':'\\u0154','radic':'\\u221A','raemptyv':'\\u29B3','rang':'\\u27E9','Rang':'\\u27EB','rangd':'\\u2992','range':'\\u29A5','rangle':'\\u27E9','raquo':'\\xBB','rarr':'\\u2192','rArr':'\\u21D2','Rarr':'\\u21A0','rarrap':'\\u2975','rarrb':'\\u21E5','rarrbfs':'\\u2920','rarrc':'\\u2933','rarrfs':'\\u291E','rarrhk':'\\u21AA','rarrlp':'\\u21AC','rarrpl':'\\u2945','rarrsim':'\\u2974','rarrtl':'\\u21A3','Rarrtl':'\\u2916','rarrw':'\\u219D','ratail':'\\u291A','rAtail':'\\u291C','ratio':'\\u2236','rationals':'\\u211A','rbarr':'\\u290D','rBarr':'\\u290F','RBarr':'\\u2910','rbbrk':'\\u2773','rbrace':'}','rbrack':']','rbrke':'\\u298C','rbrksld':'\\u298E','rbrkslu':'\\u2990','rcaron':'\\u0159','Rcaron':'\\u0158','rcedil':'\\u0157','Rcedil':'\\u0156','rceil':'\\u2309','rcub':'}','rcy':'\\u0440','Rcy':'\\u0420','rdca':'\\u2937','rdldhar':'\\u2969','rdquo':'\\u201D','rdquor':'\\u201D','rdsh':'\\u21B3','Re':'\\u211C','real':'\\u211C','realine':'\\u211B','realpart':'\\u211C','reals':'\\u211D','rect':'\\u25AD','reg':'\\xAE','REG':'\\xAE','ReverseElement':'\\u220B','ReverseEquilibrium':'\\u21CB','ReverseUpEquilibrium':'\\u296F','rfisht':'\\u297D','rfloor':'\\u230B','rfr':'\\uD835\\uDD2F','Rfr':'\\u211C','rHar':'\\u2964','rhard':'\\u21C1','rharu':'\\u21C0','rharul':'\\u296C','rho':'\\u03C1','Rho':'\\u03A1','rhov':'\\u03F1','RightAngleBracket':'\\u27E9','rightarrow':'\\u2192','Rightarrow':'\\u21D2','RightArrow':'\\u2192','RightArrowBar':'\\u21E5','RightArrowLeftArrow':'\\u21C4','rightarrowtail':'\\u21A3','RightCeiling':'\\u2309','RightDoubleBracket':'\\u27E7','RightDownTeeVector':'\\u295D','RightDownVector':'\\u21C2','RightDownVectorBar':'\\u2955','RightFloor':'\\u230B','rightharpoondown':'\\u21C1','rightharpoonup':'\\u21C0','rightleftarrows':'\\u21C4','rightleftharpoons':'\\u21CC','rightrightarrows':'\\u21C9','rightsquigarrow':'\\u219D','RightTee':'\\u22A2','RightTeeArrow':'\\u21A6','RightTeeVector':'\\u295B','rightthreetimes':'\\u22CC','RightTriangle':'\\u22B3','RightTriangleBar':'\\u29D0','RightTriangleEqual':'\\u22B5','RightUpDownVector':'\\u294F','RightUpTeeVector':'\\u295C','RightUpVector':'\\u21BE','RightUpVectorBar':'\\u2954','RightVector':'\\u21C0','RightVectorBar':'\\u2953','ring':'\\u02DA','risingdotseq':'\\u2253','rlarr':'\\u21C4','rlhar':'\\u21CC','rlm':'\\u200F','rmoust':'\\u23B1','rmoustache':'\\u23B1','rnmid':'\\u2AEE','roang':'\\u27ED','roarr':'\\u21FE','robrk':'\\u27E7','ropar':'\\u2986','ropf':'\\uD835\\uDD63','Ropf':'\\u211D','roplus':'\\u2A2E','rotimes':'\\u2A35','RoundImplies':'\\u2970','rpar':')','rpargt':'\\u2994','rppolint':'\\u2A12','rrarr':'\\u21C9','Rrightarrow':'\\u21DB','rsaquo':'\\u203A','rscr':'\\uD835\\uDCC7','Rscr':'\\u211B','rsh':'\\u21B1','Rsh':'\\u21B1','rsqb':']','rsquo':'\\u2019','rsquor':'\\u2019','rthree':'\\u22CC','rtimes':'\\u22CA','rtri':'\\u25B9','rtrie':'\\u22B5','rtrif':'\\u25B8','rtriltri':'\\u29CE','RuleDelayed':'\\u29F4','ruluhar':'\\u2968','rx':'\\u211E','sacute':'\\u015B','Sacute':'\\u015A','sbquo':'\\u201A','sc':'\\u227B','Sc':'\\u2ABC','scap':'\\u2AB8','scaron':'\\u0161','Scaron':'\\u0160','sccue':'\\u227D','sce':'\\u2AB0','scE':'\\u2AB4','scedil':'\\u015F','Scedil':'\\u015E','scirc':'\\u015D','Scirc':'\\u015C','scnap':'\\u2ABA','scnE':'\\u2AB6','scnsim':'\\u22E9','scpolint':'\\u2A13','scsim':'\\u227F','scy':'\\u0441','Scy':'\\u0421','sdot':'\\u22C5','sdotb':'\\u22A1','sdote':'\\u2A66','searhk':'\\u2925','searr':'\\u2198','seArr':'\\u21D8','searrow':'\\u2198','sect':'\\xA7','semi':';','seswar':'\\u2929','setminus':'\\u2216','setmn':'\\u2216','sext':'\\u2736','sfr':'\\uD835\\uDD30','Sfr':'\\uD835\\uDD16','sfrown':'\\u2322','sharp':'\\u266F','shchcy':'\\u0449','SHCHcy':'\\u0429','shcy':'\\u0448','SHcy':'\\u0428','ShortDownArrow':'\\u2193','ShortLeftArrow':'\\u2190','shortmid':'\\u2223','shortparallel':'\\u2225','ShortRightArrow':'\\u2192','ShortUpArrow':'\\u2191','shy':'\\xAD','sigma':'\\u03C3','Sigma':'\\u03A3','sigmaf':'\\u03C2','sigmav':'\\u03C2','sim':'\\u223C','simdot':'\\u2A6A','sime':'\\u2243','simeq':'\\u2243','simg':'\\u2A9E','simgE':'\\u2AA0','siml':'\\u2A9D','simlE':'\\u2A9F','simne':'\\u2246','simplus':'\\u2A24','simrarr':'\\u2972','slarr':'\\u2190','SmallCircle':'\\u2218','smallsetminus':'\\u2216','smashp':'\\u2A33','smeparsl':'\\u29E4','smid':'\\u2223','smile':'\\u2323','smt':'\\u2AAA','smte':'\\u2AAC','smtes':'\\u2AAC\\uFE00','softcy':'\\u044C','SOFTcy':'\\u042C','sol':'/','solb':'\\u29C4','solbar':'\\u233F','sopf':'\\uD835\\uDD64','Sopf':'\\uD835\\uDD4A','spades':'\\u2660','spadesuit':'\\u2660','spar':'\\u2225','sqcap':'\\u2293','sqcaps':'\\u2293\\uFE00','sqcup':'\\u2294','sqcups':'\\u2294\\uFE00','Sqrt':'\\u221A','sqsub':'\\u228F','sqsube':'\\u2291','sqsubset':'\\u228F','sqsubseteq':'\\u2291','sqsup':'\\u2290','sqsupe':'\\u2292','sqsupset':'\\u2290','sqsupseteq':'\\u2292','squ':'\\u25A1','square':'\\u25A1','Square':'\\u25A1','SquareIntersection':'\\u2293','SquareSubset':'\\u228F','SquareSubsetEqual':'\\u2291','SquareSuperset':'\\u2290','SquareSupersetEqual':'\\u2292','SquareUnion':'\\u2294','squarf':'\\u25AA','squf':'\\u25AA','srarr':'\\u2192','sscr':'\\uD835\\uDCC8','Sscr':'\\uD835\\uDCAE','ssetmn':'\\u2216','ssmile':'\\u2323','sstarf':'\\u22C6','star':'\\u2606','Star':'\\u22C6','starf':'\\u2605','straightepsilon':'\\u03F5','straightphi':'\\u03D5','strns':'\\xAF','sub':'\\u2282','Sub':'\\u22D0','subdot':'\\u2ABD','sube':'\\u2286','subE':'\\u2AC5','subedot':'\\u2AC3','submult':'\\u2AC1','subne':'\\u228A','subnE':'\\u2ACB','subplus':'\\u2ABF','subrarr':'\\u2979','subset':'\\u2282','Subset':'\\u22D0','subseteq':'\\u2286','subseteqq':'\\u2AC5','SubsetEqual':'\\u2286','subsetneq':'\\u228A','subsetneqq':'\\u2ACB','subsim':'\\u2AC7','subsub':'\\u2AD5','subsup':'\\u2AD3','succ':'\\u227B','succapprox':'\\u2AB8','succcurlyeq':'\\u227D','Succeeds':'\\u227B','SucceedsEqual':'\\u2AB0','SucceedsSlantEqual':'\\u227D','SucceedsTilde':'\\u227F','succeq':'\\u2AB0','succnapprox':'\\u2ABA','succneqq':'\\u2AB6','succnsim':'\\u22E9','succsim':'\\u227F','SuchThat':'\\u220B','sum':'\\u2211','Sum':'\\u2211','sung':'\\u266A','sup':'\\u2283','Sup':'\\u22D1','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','supdot':'\\u2ABE','supdsub':'\\u2AD8','supe':'\\u2287','supE':'\\u2AC6','supedot':'\\u2AC4','Superset':'\\u2283','SupersetEqual':'\\u2287','suphsol':'\\u27C9','suphsub':'\\u2AD7','suplarr':'\\u297B','supmult':'\\u2AC2','supne':'\\u228B','supnE':'\\u2ACC','supplus':'\\u2AC0','supset':'\\u2283','Supset':'\\u22D1','supseteq':'\\u2287','supseteqq':'\\u2AC6','supsetneq':'\\u228B','supsetneqq':'\\u2ACC','supsim':'\\u2AC8','supsub':'\\u2AD4','supsup':'\\u2AD6','swarhk':'\\u2926','swarr':'\\u2199','swArr':'\\u21D9','swarrow':'\\u2199','swnwar':'\\u292A','szlig':'\\xDF','Tab':'\\t','target':'\\u2316','tau':'\\u03C4','Tau':'\\u03A4','tbrk':'\\u23B4','tcaron':'\\u0165','Tcaron':'\\u0164','tcedil':'\\u0163','Tcedil':'\\u0162','tcy':'\\u0442','Tcy':'\\u0422','tdot':'\\u20DB','telrec':'\\u2315','tfr':'\\uD835\\uDD31','Tfr':'\\uD835\\uDD17','there4':'\\u2234','therefore':'\\u2234','Therefore':'\\u2234','theta':'\\u03B8','Theta':'\\u0398','thetasym':'\\u03D1','thetav':'\\u03D1','thickapprox':'\\u2248','thicksim':'\\u223C','ThickSpace':'\\u205F\\u200A','thinsp':'\\u2009','ThinSpace':'\\u2009','thkap':'\\u2248','thksim':'\\u223C','thorn':'\\xFE','THORN':'\\xDE','tilde':'\\u02DC','Tilde':'\\u223C','TildeEqual':'\\u2243','TildeFullEqual':'\\u2245','TildeTilde':'\\u2248','times':'\\xD7','timesb':'\\u22A0','timesbar':'\\u2A31','timesd':'\\u2A30','tint':'\\u222D','toea':'\\u2928','top':'\\u22A4','topbot':'\\u2336','topcir':'\\u2AF1','topf':'\\uD835\\uDD65','Topf':'\\uD835\\uDD4B','topfork':'\\u2ADA','tosa':'\\u2929','tprime':'\\u2034','trade':'\\u2122','TRADE':'\\u2122','triangle':'\\u25B5','triangledown':'\\u25BF','triangleleft':'\\u25C3','trianglelefteq':'\\u22B4','triangleq':'\\u225C','triangleright':'\\u25B9','trianglerighteq':'\\u22B5','tridot':'\\u25EC','trie':'\\u225C','triminus':'\\u2A3A','TripleDot':'\\u20DB','triplus':'\\u2A39','trisb':'\\u29CD','tritime':'\\u2A3B','trpezium':'\\u23E2','tscr':'\\uD835\\uDCC9','Tscr':'\\uD835\\uDCAF','tscy':'\\u0446','TScy':'\\u0426','tshcy':'\\u045B','TSHcy':'\\u040B','tstrok':'\\u0167','Tstrok':'\\u0166','twixt':'\\u226C','twoheadleftarrow':'\\u219E','twoheadrightarrow':'\\u21A0','uacute':'\\xFA','Uacute':'\\xDA','uarr':'\\u2191','uArr':'\\u21D1','Uarr':'\\u219F','Uarrocir':'\\u2949','ubrcy':'\\u045E','Ubrcy':'\\u040E','ubreve':'\\u016D','Ubreve':'\\u016C','ucirc':'\\xFB','Ucirc':'\\xDB','ucy':'\\u0443','Ucy':'\\u0423','udarr':'\\u21C5','udblac':'\\u0171','Udblac':'\\u0170','udhar':'\\u296E','ufisht':'\\u297E','ufr':'\\uD835\\uDD32','Ufr':'\\uD835\\uDD18','ugrave':'\\xF9','Ugrave':'\\xD9','uHar':'\\u2963','uharl':'\\u21BF','uharr':'\\u21BE','uhblk':'\\u2580','ulcorn':'\\u231C','ulcorner':'\\u231C','ulcrop':'\\u230F','ultri':'\\u25F8','umacr':'\\u016B','Umacr':'\\u016A','uml':'\\xA8','UnderBar':'_','UnderBrace':'\\u23DF','UnderBracket':'\\u23B5','UnderParenthesis':'\\u23DD','Union':'\\u22C3','UnionPlus':'\\u228E','uogon':'\\u0173','Uogon':'\\u0172','uopf':'\\uD835\\uDD66','Uopf':'\\uD835\\uDD4C','uparrow':'\\u2191','Uparrow':'\\u21D1','UpArrow':'\\u2191','UpArrowBar':'\\u2912','UpArrowDownArrow':'\\u21C5','updownarrow':'\\u2195','Updownarrow':'\\u21D5','UpDownArrow':'\\u2195','UpEquilibrium':'\\u296E','upharpoonleft':'\\u21BF','upharpoonright':'\\u21BE','uplus':'\\u228E','UpperLeftArrow':'\\u2196','UpperRightArrow':'\\u2197','upsi':'\\u03C5','Upsi':'\\u03D2','upsih':'\\u03D2','upsilon':'\\u03C5','Upsilon':'\\u03A5','UpTee':'\\u22A5','UpTeeArrow':'\\u21A5','upuparrows':'\\u21C8','urcorn':'\\u231D','urcorner':'\\u231D','urcrop':'\\u230E','uring':'\\u016F','Uring':'\\u016E','urtri':'\\u25F9','uscr':'\\uD835\\uDCCA','Uscr':'\\uD835\\uDCB0','utdot':'\\u22F0','utilde':'\\u0169','Utilde':'\\u0168','utri':'\\u25B5','utrif':'\\u25B4','uuarr':'\\u21C8','uuml':'\\xFC','Uuml':'\\xDC','uwangle':'\\u29A7','vangrt':'\\u299C','varepsilon':'\\u03F5','varkappa':'\\u03F0','varnothing':'\\u2205','varphi':'\\u03D5','varpi':'\\u03D6','varpropto':'\\u221D','varr':'\\u2195','vArr':'\\u21D5','varrho':'\\u03F1','varsigma':'\\u03C2','varsubsetneq':'\\u228A\\uFE00','varsubsetneqq':'\\u2ACB\\uFE00','varsupsetneq':'\\u228B\\uFE00','varsupsetneqq':'\\u2ACC\\uFE00','vartheta':'\\u03D1','vartriangleleft':'\\u22B2','vartriangleright':'\\u22B3','vBar':'\\u2AE8','Vbar':'\\u2AEB','vBarv':'\\u2AE9','vcy':'\\u0432','Vcy':'\\u0412','vdash':'\\u22A2','vDash':'\\u22A8','Vdash':'\\u22A9','VDash':'\\u22AB','Vdashl':'\\u2AE6','vee':'\\u2228','Vee':'\\u22C1','veebar':'\\u22BB','veeeq':'\\u225A','vellip':'\\u22EE','verbar':'|','Verbar':'\\u2016','vert':'|','Vert':'\\u2016','VerticalBar':'\\u2223','VerticalLine':'|','VerticalSeparator':'\\u2758','VerticalTilde':'\\u2240','VeryThinSpace':'\\u200A','vfr':'\\uD835\\uDD33','Vfr':'\\uD835\\uDD19','vltri':'\\u22B2','vnsub':'\\u2282\\u20D2','vnsup':'\\u2283\\u20D2','vopf':'\\uD835\\uDD67','Vopf':'\\uD835\\uDD4D','vprop':'\\u221D','vrtri':'\\u22B3','vscr':'\\uD835\\uDCCB','Vscr':'\\uD835\\uDCB1','vsubne':'\\u228A\\uFE00','vsubnE':'\\u2ACB\\uFE00','vsupne':'\\u228B\\uFE00','vsupnE':'\\u2ACC\\uFE00','Vvdash':'\\u22AA','vzigzag':'\\u299A','wcirc':'\\u0175','Wcirc':'\\u0174','wedbar':'\\u2A5F','wedge':'\\u2227','Wedge':'\\u22C0','wedgeq':'\\u2259','weierp':'\\u2118','wfr':'\\uD835\\uDD34','Wfr':'\\uD835\\uDD1A','wopf':'\\uD835\\uDD68','Wopf':'\\uD835\\uDD4E','wp':'\\u2118','wr':'\\u2240','wreath':'\\u2240','wscr':'\\uD835\\uDCCC','Wscr':'\\uD835\\uDCB2','xcap':'\\u22C2','xcirc':'\\u25EF','xcup':'\\u22C3','xdtri':'\\u25BD','xfr':'\\uD835\\uDD35','Xfr':'\\uD835\\uDD1B','xharr':'\\u27F7','xhArr':'\\u27FA','xi':'\\u03BE','Xi':'\\u039E','xlarr':'\\u27F5','xlArr':'\\u27F8','xmap':'\\u27FC','xnis':'\\u22FB','xodot':'\\u2A00','xopf':'\\uD835\\uDD69','Xopf':'\\uD835\\uDD4F','xoplus':'\\u2A01','xotime':'\\u2A02','xrarr':'\\u27F6','xrArr':'\\u27F9','xscr':'\\uD835\\uDCCD','Xscr':'\\uD835\\uDCB3','xsqcup':'\\u2A06','xuplus':'\\u2A04','xutri':'\\u25B3','xvee':'\\u22C1','xwedge':'\\u22C0','yacute':'\\xFD','Yacute':'\\xDD','yacy':'\\u044F','YAcy':'\\u042F','ycirc':'\\u0177','Ycirc':'\\u0176','ycy':'\\u044B','Ycy':'\\u042B','yen':'\\xA5','yfr':'\\uD835\\uDD36','Yfr':'\\uD835\\uDD1C','yicy':'\\u0457','YIcy':'\\u0407','yopf':'\\uD835\\uDD6A','Yopf':'\\uD835\\uDD50','yscr':'\\uD835\\uDCCE','Yscr':'\\uD835\\uDCB4','yucy':'\\u044E','YUcy':'\\u042E','yuml':'\\xFF','Yuml':'\\u0178','zacute':'\\u017A','Zacute':'\\u0179','zcaron':'\\u017E','Zcaron':'\\u017D','zcy':'\\u0437','Zcy':'\\u0417','zdot':'\\u017C','Zdot':'\\u017B','zeetrf':'\\u2128','ZeroWidthSpace':'\\u200B','zeta':'\\u03B6','Zeta':'\\u0396','zfr':'\\uD835\\uDD37','Zfr':'\\u2128','zhcy':'\\u0436','ZHcy':'\\u0416','zigrarr':'\\u21DD','zopf':'\\uD835\\uDD6B','Zopf':'\\u2124','zscr':'\\uD835\\uDCCF','Zscr':'\\uD835\\uDCB5','zwj':'\\u200D','zwnj':'\\u200C'};\n\tvar decodeMapLegacy = {'aacute':'\\xE1','Aacute':'\\xC1','acirc':'\\xE2','Acirc':'\\xC2','acute':'\\xB4','aelig':'\\xE6','AElig':'\\xC6','agrave':'\\xE0','Agrave':'\\xC0','amp':'&','AMP':'&','aring':'\\xE5','Aring':'\\xC5','atilde':'\\xE3','Atilde':'\\xC3','auml':'\\xE4','Auml':'\\xC4','brvbar':'\\xA6','ccedil':'\\xE7','Ccedil':'\\xC7','cedil':'\\xB8','cent':'\\xA2','copy':'\\xA9','COPY':'\\xA9','curren':'\\xA4','deg':'\\xB0','divide':'\\xF7','eacute':'\\xE9','Eacute':'\\xC9','ecirc':'\\xEA','Ecirc':'\\xCA','egrave':'\\xE8','Egrave':'\\xC8','eth':'\\xF0','ETH':'\\xD0','euml':'\\xEB','Euml':'\\xCB','frac12':'\\xBD','frac14':'\\xBC','frac34':'\\xBE','gt':'>','GT':'>','iacute':'\\xED','Iacute':'\\xCD','icirc':'\\xEE','Icirc':'\\xCE','iexcl':'\\xA1','igrave':'\\xEC','Igrave':'\\xCC','iquest':'\\xBF','iuml':'\\xEF','Iuml':'\\xCF','laquo':'\\xAB','lt':'<','LT':'<','macr':'\\xAF','micro':'\\xB5','middot':'\\xB7','nbsp':'\\xA0','not':'\\xAC','ntilde':'\\xF1','Ntilde':'\\xD1','oacute':'\\xF3','Oacute':'\\xD3','ocirc':'\\xF4','Ocirc':'\\xD4','ograve':'\\xF2','Ograve':'\\xD2','ordf':'\\xAA','ordm':'\\xBA','oslash':'\\xF8','Oslash':'\\xD8','otilde':'\\xF5','Otilde':'\\xD5','ouml':'\\xF6','Ouml':'\\xD6','para':'\\xB6','plusmn':'\\xB1','pound':'\\xA3','quot':'\"','QUOT':'\"','raquo':'\\xBB','reg':'\\xAE','REG':'\\xAE','sect':'\\xA7','shy':'\\xAD','sup1':'\\xB9','sup2':'\\xB2','sup3':'\\xB3','szlig':'\\xDF','thorn':'\\xFE','THORN':'\\xDE','times':'\\xD7','uacute':'\\xFA','Uacute':'\\xDA','ucirc':'\\xFB','Ucirc':'\\xDB','ugrave':'\\xF9','Ugrave':'\\xD9','uml':'\\xA8','uuml':'\\xFC','Uuml':'\\xDC','yacute':'\\xFD','Yacute':'\\xDD','yen':'\\xA5','yuml':'\\xFF'};\n\tvar decodeMapNumeric = {'0':'\\uFFFD','128':'\\u20AC','130':'\\u201A','131':'\\u0192','132':'\\u201E','133':'\\u2026','134':'\\u2020','135':'\\u2021','136':'\\u02C6','137':'\\u2030','138':'\\u0160','139':'\\u2039','140':'\\u0152','142':'\\u017D','145':'\\u2018','146':'\\u2019','147':'\\u201C','148':'\\u201D','149':'\\u2022','150':'\\u2013','151':'\\u2014','152':'\\u02DC','153':'\\u2122','154':'\\u0161','155':'\\u203A','156':'\\u0153','158':'\\u017E','159':'\\u0178'};\n\tvar invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\tvar object = {};\n\tvar hasOwnProperty = object.hasOwnProperty;\n\tvar has = function(object, propertyName) {\n\t\treturn hasOwnProperty.call(object, propertyName);\n\t};\n\n\tvar contains = function(array, value) {\n\t\tvar index = -1;\n\t\tvar length = array.length;\n\t\twhile (++index < length) {\n\t\t\tif (array[index] == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n\n\tvar merge = function(options, defaults) {\n\t\tif (!options) {\n\t\t\treturn defaults;\n\t\t}\n\t\tvar result = {};\n\t\tvar key;\n\t\tfor (key in defaults) {\n\t\t\t// A `hasOwnProperty` check is not needed here, since only recognized\n\t\t\t// option names are used anyway. Any others are ignored.\n\t\t\tresult[key] = has(options, key) ? options[key] : defaults[key];\n\t\t}\n\t\treturn result;\n\t};\n\n\t// Modified version of `ucs2encode`; see https://mths.be/punycode.\n\tvar codePointToSymbol = function(codePoint, strict) {\n\t\tvar output = '';\n\t\tif ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {\n\t\t\t// See issue #4:\n\t\t\t// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is\n\t\t\t// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD\n\t\t\t// REPLACEMENT CHARACTER.”\n\t\t\tif (strict) {\n\t\t\t\tparseError('character reference outside the permissible Unicode range');\n\t\t\t}\n\t\t\treturn '\\uFFFD';\n\t\t}\n\t\tif (has(decodeMapNumeric, codePoint)) {\n\t\t\tif (strict) {\n\t\t\t\tparseError('disallowed character reference');\n\t\t\t}\n\t\t\treturn decodeMapNumeric[codePoint];\n\t\t}\n\t\tif (strict && contains(invalidReferenceCodePoints, codePoint)) {\n\t\t\tparseError('disallowed character reference');\n\t\t}\n\t\tif (codePoint > 0xFFFF) {\n\t\t\tcodePoint -= 0x10000;\n\t\t\toutput += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);\n\t\t\tcodePoint = 0xDC00 | codePoint & 0x3FF;\n\t\t}\n\t\toutput += stringFromCharCode(codePoint);\n\t\treturn output;\n\t};\n\n\tvar hexEscape = function(codePoint) {\n\t\treturn '&#x' + codePoint.toString(16).toUpperCase() + ';';\n\t};\n\n\tvar decEscape = function(codePoint) {\n\t\treturn '&#' + codePoint + ';';\n\t};\n\n\tvar parseError = function(message) {\n\t\tthrow Error('Parse error: ' + message);\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar encode = function(string, options) {\n\t\toptions = merge(options, encode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidRawCodePoint.test(string)) {\n\t\t\tparseError('forbidden code point');\n\t\t}\n\t\tvar encodeEverything = options.encodeEverything;\n\t\tvar useNamedReferences = options.useNamedReferences;\n\t\tvar allowUnsafeSymbols = options.allowUnsafeSymbols;\n\t\tvar escapeCodePoint = options.decimal ? decEscape : hexEscape;\n\n\t\tvar escapeBmpSymbol = function(symbol) {\n\t\t\treturn escapeCodePoint(symbol.charCodeAt(0));\n\t\t};\n\n\t\tif (encodeEverything) {\n\t\t\t// Encode ASCII symbols.\n\t\t\tstring = string.replace(regexAsciiWhitelist, function(symbol) {\n\t\t\t\t// Use named references if requested & possible.\n\t\t\t\tif (useNamedReferences && has(encodeMap, symbol)) {\n\t\t\t\t\treturn '&' + encodeMap[symbol] + ';';\n\t\t\t\t}\n\t\t\t\treturn escapeBmpSymbol(symbol);\n\t\t\t});\n\t\t\t// Shorten a few escapes that represent two symbols, of which at least one\n\t\t\t// is within the ASCII range.\n\t\t\tif (useNamedReferences) {\n\t\t\t\tstring = string\n\t\t\t\t\t.replace(/&gt;\\u20D2/g, '&nvgt;')\n\t\t\t\t\t.replace(/&lt;\\u20D2/g, '&nvlt;')\n\t\t\t\t\t.replace(/&#x66;&#x6A;/g, '&fjlig;');\n\t\t\t}\n\t\t\t// Encode non-ASCII symbols.\n\t\t\tif (useNamedReferences) {\n\t\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Note: any remaining non-ASCII symbols are handled outside of the `if`.\n\t\t} else if (useNamedReferences) {\n\t\t\t// Apply named character references.\n\t\t\t// Encode `<>\"'&` using named character references.\n\t\t\tif (!allowUnsafeSymbols) {\n\t\t\t\tstring = string.replace(regexEscape, function(string) {\n\t\t\t\t\treturn '&' + encodeMap[string] + ';'; // no need to check `has()` here\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Shorten escapes that represent two symbols, of which at least one is\n\t\t\t// `<>\"'&`.\n\t\t\tstring = string\n\t\t\t\t.replace(/&gt;\\u20D2/g, '&nvgt;')\n\t\t\t\t.replace(/&lt;\\u20D2/g, '&nvlt;');\n\t\t\t// Encode non-ASCII symbols that can be replaced with a named reference.\n\t\t\tstring = string.replace(regexEncodeNonAscii, function(string) {\n\t\t\t\t// Note: there is no need to check `has(encodeMap, string)` here.\n\t\t\t\treturn '&' + encodeMap[string] + ';';\n\t\t\t});\n\t\t} else if (!allowUnsafeSymbols) {\n\t\t\t// Encode `<>\"'&` using hexadecimal escapes, now that they’re not handled\n\t\t\t// using named character references.\n\t\t\tstring = string.replace(regexEscape, escapeBmpSymbol);\n\t\t}\n\t\treturn string\n\t\t\t// Encode astral symbols.\n\t\t\t.replace(regexAstralSymbols, function($0) {\n\t\t\t\t// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n\t\t\t\tvar high = $0.charCodeAt(0);\n\t\t\t\tvar low = $0.charCodeAt(1);\n\t\t\t\tvar codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;\n\t\t\t\treturn escapeCodePoint(codePoint);\n\t\t\t})\n\t\t\t// Encode any remaining BMP symbols that are not printable ASCII symbols\n\t\t\t// using a hexadecimal escape.\n\t\t\t.replace(regexBmpWhitelist, escapeBmpSymbol);\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tencode.options = {\n\t\t'allowUnsafeSymbols': false,\n\t\t'encodeEverything': false,\n\t\t'strict': false,\n\t\t'useNamedReferences': false,\n\t\t'decimal' : false\n\t};\n\n\tvar decode = function(html, options) {\n\t\toptions = merge(options, decode.options);\n\t\tvar strict = options.strict;\n\t\tif (strict && regexInvalidEntity.test(html)) {\n\t\t\tparseError('malformed character reference');\n\t\t}\n\t\treturn html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {\n\t\t\tvar codePoint;\n\t\t\tvar semicolon;\n\t\t\tvar decDigits;\n\t\t\tvar hexDigits;\n\t\t\tvar reference;\n\t\t\tvar next;\n\n\t\t\tif ($1) {\n\t\t\t\treference = $1;\n\t\t\t\t// Note: there is no need to check `has(decodeMap, reference)`.\n\t\t\t\treturn decodeMap[reference];\n\t\t\t}\n\n\t\t\tif ($2) {\n\t\t\t\t// Decode named character references without trailing `;`, e.g. `&amp`.\n\t\t\t\t// This is only a parse error if it gets converted to `&`, or if it is\n\t\t\t\t// followed by `=` in an attribute context.\n\t\t\t\treference = $2;\n\t\t\t\tnext = $3;\n\t\t\t\tif (next && options.isAttributeValue) {\n\t\t\t\t\tif (strict && next == '=') {\n\t\t\t\t\t\tparseError('`&` did not start a character reference');\n\t\t\t\t\t}\n\t\t\t\t\treturn $0;\n\t\t\t\t} else {\n\t\t\t\t\tif (strict) {\n\t\t\t\t\t\tparseError(\n\t\t\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Note: there is no need to check `has(decodeMapLegacy, reference)`.\n\t\t\t\t\treturn decodeMapLegacy[reference] + (next || '');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($4) {\n\t\t\t\t// Decode decimal escapes, e.g. `&#119558;`.\n\t\t\t\tdecDigits = $4;\n\t\t\t\tsemicolon = $5;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(decDigits, 10);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\tif ($6) {\n\t\t\t\t// Decode hexadecimal escapes, e.g. `&#x1D306;`.\n\t\t\t\thexDigits = $6;\n\t\t\t\tsemicolon = $7;\n\t\t\t\tif (strict && !semicolon) {\n\t\t\t\t\tparseError('character reference was not terminated by a semicolon');\n\t\t\t\t}\n\t\t\t\tcodePoint = parseInt(hexDigits, 16);\n\t\t\t\treturn codePointToSymbol(codePoint, strict);\n\t\t\t}\n\n\t\t\t// If we’re still here, `if ($7)` is implied; it’s an ambiguous\n\t\t\t// ampersand for sure. https://mths.be/notes/ambiguous-ampersands\n\t\t\tif (strict) {\n\t\t\t\tparseError(\n\t\t\t\t\t'named character reference was not terminated by a semicolon'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn $0;\n\t\t});\n\t};\n\t// Expose default options (so they can be overridden globally).\n\tdecode.options = {\n\t\t'isAttributeValue': false,\n\t\t'strict': false\n\t};\n\n\tvar escape = function(string) {\n\t\treturn string.replace(regexEscape, function($0) {\n\t\t\t// Note: there is no need to check `has(escapeMap, $0)` here.\n\t\t\treturn escapeMap[$0];\n\t\t});\n\t};\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar he = {\n\t\t'version': '1.2.0',\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'escape': escape,\n\t\t'unescape': decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn he;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = he;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in he) {\n\t\t\t\thas(he, key) && (freeExports[key] = he[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.he = he;\n\t}\n\n}(this));\n","\"use strict\";\n\nconst {\n createHash\n} = require(\"crypto\");\n\nfunction md5(data) {\n return createHash(\"md5\").update(data).digest(\"hex\");\n}\n\nfunction ha1Compute(algorithm, user, realm, pass, nonce, cnonce) {\n const ha1 = md5(`${user}:${realm}:${pass}`);\n\n if (algorithm && algorithm.toLowerCase() === \"md5-sess\") {\n return md5(`${ha1}:${nonce}:${cnonce}`);\n } else {\n return ha1;\n }\n}\n\nmodule.exports = {\n md5,\n ha1Compute\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.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","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","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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\nSafeBuffer.prototype = Object.create(Buffer.prototype)\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","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');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: 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 key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\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\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\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\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\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}","// 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/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\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};","module.exports = require('./lib/_stream_writable.js');\n","module.exports = require('./lib/_stream_duplex.js');\n","module.exports = require('./readable').Transform\n","module.exports = require('./readable').PassThrough\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","module.exports = require('./browser/algorithms.json')\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-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(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\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 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","'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');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./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","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","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 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 = 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 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 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 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","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","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 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","(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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 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 Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-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 = Buffer.from(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 = Buffer.from(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 = Buffer.from(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 = Buffer.from(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","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');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: 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 key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\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\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\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\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\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 Buffer.from(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 Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = Buffer.from(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length)\n x = Buffer.concat([zeros, x])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = Buffer.alloc(hlen)\n v.fill(1)\n var k = Buffer.alloc(hlen)\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(Buffer.from([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 = Buffer.from(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length)\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 = Buffer.alloc(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(Buffer.from([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","(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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","'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 '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\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 '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\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 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 '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\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 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 '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\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\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');\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');\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\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","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 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 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","'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 '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\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\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\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 === false) {\n return false;\n }\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 if (rlen === false) {\n return false;\n }\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 (slen === false) {\n return false;\n }\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) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\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<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [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<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [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","// 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","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst 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 const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(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(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(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","'use strict';\n\nconst inherits = require('inherits');\n\nconst 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 const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let 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\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst 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 const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const 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 const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const 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 const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\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 = Buffer.from(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","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\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 = Buffer.from(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 = Buffer.from(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","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","(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 ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\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 if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\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","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 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 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","'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","\"use strict\";\n\nconst authTools = require(\"./auth.js\");\n\nconst urlTools = require(\"./url.js\");\n\nconst {\n merge\n} = require(\"./merge.js\");\n\nconst directoryContents = require(\"./interface/directoryContents.js\");\n\nconst createDir = require(\"./interface/createDirectory.js\");\n\nconst custom = require(\"./interface/custom.js\");\n\nconst deletion = require(\"./interface/delete.js\");\n\nconst pathsExist = require(\"./interface/exists.js\");\n\nconst getFile = require(\"./interface/getFile.js\");\n\nconst quota = require(\"./interface/quota.js\");\n\nconst move = require(\"./interface/moveFile.js\");\n\nconst copy = require(\"./interface/copyFile.js\");\n\nconst putFile = require(\"./interface/putFile.js\");\n\nconst stats = require(\"./interface/stat.js\");\n\nconst NOOP = () => {};\n/**\n * Client adapter\n * @typedef {Object} ClientInterface\n */\n\n/**\n * Options for creating a resource\n * @typedef {UserOptions} PutOptions\n * @property {Boolean=} overwrite - Whether or not to overwrite existing files (default: true)\n * @property {Number=} maxContentLength - The maximum amount of bytes to upload (default: 10 MiB)\n */\n\n/**\n * Options with headers and format\n * @typedef {UserOptions} OptionsWithFormat\n * @property {String} format - The format to use (text/binary)\n * @property {Boolean=} details - Provided detailed response information, such as response\n * headers (defaults to false). Only available on requests that return result data.\n */\n\n/**\n * Options for methods that resturn responses\n * @typedef {UserOptions} OptionsForAdvancedResponses\n * @property {Boolean=} details - Provided detailed response information, such as response\n * headers (defaults to false). Only available on requests that return result data.\n */\n\n/**\n * @typedef {OptionsForAdvancedResponses} GetDirectoryContentsOptions\n * @property {Boolean=} deep - Return deep (infinite) items (default: false)\n * @property {String=} glob - Glob pattern for matching certain files\n */\n\n/**\n * @typedef {Object} AuthToken\n * @property {String} token_type - The type of token (eg \"Bearer\")\n * @property {String} access_token - The token access code\n */\n\n/**\n * @typedef {Object} CreateClientOptions\n * @property {String=} username - The username for authentication\n * @property {String=} password - The password for authentication\n * @property {http.Agent=} httpAgent - Override the HTTP Agent instance for requests\n * @property {https.Agent=} httpsAgent - Override the HTTPS Agent instance for requests\n * @property {AuthToken=} token - Optional OAuth token\n */\n\n/**\n * A stat result\n * @typedef {Object} Stat\n * @property {String} filename The full path and filename of the remote item\n * @property {String} basename The base filename of the remote item, without the path\n * @property {String|null} lastmod The last modification date (eg. \"Sun, 13 Mar 2016 04:23:32 GMT\")\n * @property {Number} size The size of the remote item\n * @property {String} type The type of the item (file/directory)\n * @property {String=} mime The file mimetype (not present on directories)\n * @property {String|null} etag The ETag of the remote item (as supported by the server)\n * @property {Object=} props Additionally returned properties from the server, unprocessed, if\n * `details: true` is specified in the options\n */\n\n/**\n * Create a client adapter\n * @param {String} remoteURL The remote address of the webdav server\n * @param {CreateClientOptions=} opts Client options\n * @returns {ClientInterface} A new client interface instance\n * @memberof module:WebDAV\n * @example\n * const createClient = require(\"webdav\");\n * const client = createClient(url, { username, password });\n * client\n * .getDirectoryContents(\"/\")\n * .then(contents => {\n * console.log(contents);\n * });\n * @example\n * const createClient = require(\"webdav\");\n * const client = createClient(url, {\n * token: { token_type: \"Bearer\", access_token: \"tokenvalue\" }\n * });\n * client\n * .getDirectoryContents(\"/\")\n * .then(contents => {\n * console.log(contents);\n * });\n */\n\n\nfunction createClient(remoteURL, opts = {}) {\n if (!opts || typeof opts !== \"object\") {\n throw new Error(\"Options must be an object, if specified\");\n }\n\n const {\n username,\n password,\n httpAgent,\n httpsAgent,\n token = null,\n digest = false\n } = opts;\n const runtimeOptions = {\n headers: {},\n remotePath: urlTools.extractURLPath(remoteURL),\n remoteURL,\n httpAgent,\n httpsAgent\n }; // Configure auth\n\n if (digest) {\n runtimeOptions._digest = {\n username,\n password,\n nc: 0,\n algorithm: \"md5\",\n hasDigestAuth: false\n };\n } else if (username) {\n runtimeOptions.headers.Authorization = authTools.generateBasicAuthHeader(username, password);\n } else if (token && typeof token === \"object\") {\n runtimeOptions.headers.Authorization = authTools.generateTokenAuthHeader(token);\n }\n\n return {\n /**\n * Copy a remote item to another path\n * @param {String} remotePath The remote item path\n * @param {String} targetRemotePath The path file will be copied to\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves once the request has completed\n * @example\n * await client.copyFile(\"/photos/pic1.jpg\", \"/backup/pic1.jpg\");\n */\n copyFile: function copyFile(remotePath, targetRemotePath, options) {\n const copyOptions = merge(runtimeOptions, options || {});\n return copy.copyFile(remotePath, targetRemotePath, copyOptions);\n },\n\n /**\n * Create a directory\n * @param {String} dirPath The path to create\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves when the remote path has been created\n * @example\n * await client.createDirectory(\"/my/directory\");\n */\n createDirectory: function createDirectory(dirPath, options) {\n const createOptions = merge(runtimeOptions, options || {});\n return createDir.createDirectory(dirPath, createOptions);\n },\n\n /**\n * Create a readable stream of a remote file\n * @param {String} remoteFilename The file to stream\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Readable} A readable stream\n * @example\n * const remote = client.createReadStream(\"/data.zip\");\n * remote.pipe(someWriteStream);\n */\n createReadStream: function createReadStream(remoteFilename, options) {\n if (typeof WEB !== \"undefined\" && WEB === true) {\n throw new Error(\"createReadStream not implemented in web environment\");\n } else {\n const createStream = require(\"./interface/createStream.js\");\n\n const createOptions = merge(runtimeOptions, options || {});\n return createStream.createReadStream(remoteFilename, createOptions);\n }\n },\n\n /**\n * Create a writeable stream to a remote file\n * @param {String} remoteFilename The file to write to\n * @param {PutOptions=} options Options for the request\n * @param {Function=} callback Optional callback to fire\n * once the request has finished\n * @memberof ClientInterface\n * @returns {Writeable} A writeable stream\n * @example\n * const remote = client.createWriteStream(\"/data.zip\");\n * fs.createReadStream(\"~/myData.zip\").pipe(remote);\n */\n createWriteStream: function createWriteStream(remoteFilename, options, callback = NOOP) {\n if (typeof WEB !== \"undefined\" && WEB === true) {\n throw new Error(\"createWriteStream not implemented in web environment\");\n } else {\n const createStream = require(\"./interface/createStream.js\");\n\n const createOptions = merge(runtimeOptions, options || {});\n return createStream.createWriteStream(remoteFilename, createOptions, callback);\n }\n },\n\n /**\n * Send a custom request\n * @param {String} remotePath The remote path\n * @param {RequestOptions=} requestOptions the request options\n * @param {Options=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise<Any>} A promise that resolves with response of the request\n * @example\n * const contents = await client.customRequest(\"/alrighty.jpg\", {\n * method: \"PROPFIND\",\n * headers: {\n * Accept: \"text/plain\",\n * Depth: 0\n * },\n * responseType: \"text\"\n * });\n */\n customRequest: function customRequest(remotePath, requestOptions, options) {\n const customOptions = merge(runtimeOptions, options || {});\n return custom.customRequest(remotePath, requestOptions, customOptions);\n },\n\n /**\n * Delete a remote file\n * @param {String} remotePath The remote path to delete\n * @param {UserOptions=} options The options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves when the remote file as been deleted\n * @example\n * await client.deleteFile(\"/some/file.txt\");\n */\n deleteFile: function deleteFile(remotePath, options) {\n const deleteOptions = merge(runtimeOptions, options || {});\n return deletion.deleteFile(remotePath, deleteOptions);\n },\n\n /**\n * Check if a remote file or directory exists\n * @param {String} remotePath The remote path to check\n * @param {UserOptions=} options The options for the request\n * @memberof ClientInterface\n * @returns {Promise.<Boolean>} A promise that resolves with true if the path exists\n * or false if it does not\n * @example\n * if (await client.exists(\"/some-path/file.txt\")) {\n * // Do something\n * }\n */\n exists: function exists(remotePath, options) {\n const existsOptions = merge(runtimeOptions, options || {});\n return pathsExist.pathExists(remotePath, existsOptions);\n },\n\n /**\n * Get the contents of a remote directory\n * @param {String} remotePath The path to fetch the contents of\n * @param {GetDirectoryContentsOptions=} options Options for the remote the request\n * @returns {Promise.<Array.<Stat>>} A promise that resolves with an array of remote item stats\n * @memberof ClientInterface\n * @example\n * const contents = await client.getDirectoryContents(\"/\");\n */\n getDirectoryContents: function getDirectoryContents(remotePath, options) {\n const getOptions = merge(runtimeOptions, options || {});\n return directoryContents.getDirectoryContents(remotePath, getOptions);\n },\n\n /**\n * Get the contents of a remote file\n * @param {String} remoteFilename The file to fetch\n * @param {OptionsWithFormat=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise.<Buffer|String>} A promise that resolves with the contents of the remote file\n * @example\n * // Fetching data:\n * const buff = await client.getFileContents(\"/image.png\");\n * // Fetching text:\n * const txt = await client.getFileContents(\"/list.txt\", { format: \"text\" });\n */\n getFileContents: function getFileContents(remoteFilename, options) {\n const getOptions = merge(runtimeOptions, options || {});\n getOptions.format = getOptions.format || \"binary\";\n\n if ([\"binary\", \"text\"].indexOf(getOptions.format) < 0) {\n throw new Error(\"Unknown format: \" + getOptions.format);\n }\n\n return getOptions.format === \"text\" ? getFile.getFileContentsString(remoteFilename, getOptions) : getFile.getFileContentsBuffer(remoteFilename, getOptions);\n },\n\n /**\n * Get the download link of a remote file\n * Only supported for Basic authentication or unauthenticated connections.\n * @param {String} remoteFilename The file url to fetch\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {String} A download URL\n */\n getFileDownloadLink: function getFileDownloadLink(remoteFilename, options) {\n const getOptions = merge(runtimeOptions, options || {});\n return getFile.getFileLink(remoteFilename, getOptions);\n },\n\n /**\n * Get a file upload link\n * Only supported for Basic authentication or unauthenticated connections.\n * @param {String} remoteFilename The path of the remote file location\n * @param {PutOptions=} options The options for the request\n * @memberof ClientInterface\n * @returns {String} A upload URL\n */\n getFileUploadLink: function getFileUploadLink(remoteFilename, options) {\n var putOptions = merge(runtimeOptions, options || {});\n return putFile.getFileUploadLink(remoteFilename, putOptions);\n },\n\n /**\n * Get quota information\n * @param {OptionsForAdvancedResponses=} options Options for the request\n * @returns {Promise.<null|Object>} Returns null if failed, or an object with `used` and `available`\n * @memberof ClientInterface\n */\n getQuota: function getQuota(options) {\n const getOptions = merge(runtimeOptions, options || {});\n return quota.getQuota(getOptions);\n },\n\n /**\n * Move a remote item to another path\n * @param {String} remotePath The remote item path\n * @param {String} targetRemotePath The new path after moving\n * @param {UserOptions=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise} A promise that resolves once the request has completed\n * @example\n * await client.moveFile(\"/sub/file.dat\", \"/another/dir/file.dat\");\n */\n moveFile: function moveFile(remotePath, targetRemotePath, options) {\n const moveOptions = merge(runtimeOptions, options || {});\n return move.moveFile(remotePath, targetRemotePath, moveOptions);\n },\n\n /**\n * Write contents to a remote file path\n * @param {String} remoteFilename The path of the remote file\n * @param {String|Buffer} data The data to write\n * @param {PutOptions=} options The options for the request\n * @returns {Promise} A promise that resolves once the contents have been written\n * @memberof ClientInterface\n * @example\n * await client.putFileContents(\"/dir/image.png\", myImageBuffer);\n * // Put contents without overwriting:\n * await client.putFileContents(\"/dir/image.png\", myImageBuffer, { overwrite: false });\n */\n putFileContents: function putFileContents(remoteFilename, data, options) {\n const putOptions = merge(runtimeOptions, options || {});\n return putFile.putFileContents(remoteFilename, data, putOptions);\n },\n\n /**\n * Stat a remote object\n * @param {String} remotePath The path of the item\n * @param {OptionsForAdvancedResponses=} options Options for the request\n * @memberof ClientInterface\n * @returns {Promise.<Stat>} A promise that resolves with the stat data\n */\n stat: function stat(remotePath, options) {\n const getOptions = merge(runtimeOptions, options || {});\n return stats.getStat(remotePath, getOptions);\n }\n };\n}\n\nmodule.exports = {\n createClient\n};","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encodeURIComponent(key);\n value = encodeURIComponent(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","\"use strict\";\n\nconst pathPosix = require(\"path-posix\");\n\nconst {\n merge\n} = require(\"../merge.js\");\n\nconst {\n handleResponseCode,\n processGlobFilter,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n normaliseHREF,\n normalisePath\n} = require(\"../url.js\");\n\nconst {\n parseXML,\n prepareFileFromProps\n} = require(\"./dav.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction getDirectoryContents(remotePath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(remotePath), \"/\"),\n method: \"PROPFIND\",\n headers: {\n Accept: \"text/plain\",\n Depth: options.deep ? \"infinity\" : 1\n },\n responseType: \"text\"\n };\n let response = null;\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => {\n response = res;\n return res.data;\n }).then(parseXML).then(result => getDirectoryFiles(result, options.remotePath, remotePath, options.details)).then(files => processResponsePayload(response, files, options.details)).then(files => options.glob ? processGlobFilter(files, options.glob) : files);\n}\n\nfunction getDirectoryFiles(result, serverBasePath, requestPath, isDetailed = false) {\n const serverBase = pathPosix.join(serverBasePath, \"/\"); // Extract the response items (directory contents)\n\n const {\n multistatus: {\n response: responseItems\n }\n } = result;\n return responseItems // Map all items to a consistent output structure (results)\n .map(item => {\n // HREF is the file path (in full)\n const href = normaliseHREF(item.href); // Each item should contain a stat object\n\n const {\n propstat: {\n prop: props\n }\n } = item; // Process the true full filename (minus the base server path)\n\n const filename = serverBase === \"/\" ? normalisePath(href) : normalisePath(pathPosix.relative(serverBase, href));\n return prepareFileFromProps(props, filename, isDetailed);\n }) // Filter out the item pointing to the current directory (not needed)\n .filter(item => item.basename && (item.type === \"file\" || item.filename !== requestPath.replace(/\\/$/, \"\")));\n}\n\nmodule.exports = {\n getDirectoryContents\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\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\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()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\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 isObject(re) && 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 isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (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 = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, 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} else {\n // old school shim for old browsers\n module.exports = 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","module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = { sep: '/' }\ntry {\n path = require('path')\n} catch (er) {}\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n a = a || {}\n b = b || {}\n var t = {}\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return minimatch\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig.minimatch(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return Minimatch\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n // \"\" only matches \"\"\n if (pattern.trim() === '') return p === ''\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n // don't do it more than once.\n if (this._made) return\n\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = console.error\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n if (typeof pattern === 'undefined') {\n throw new TypeError('undefined pattern')\n }\n\n if (options.nobrace ||\n !pattern.match(/\\{.*\\}/)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n if (pattern.length > 1024 * 64) {\n throw new TypeError('pattern is too long')\n }\n\n var options = this.options\n\n // shortcuts\n if (!options.noglobstar && pattern === '**') return GLOBSTAR\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n case '/':\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n if (inClass) {\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '.':\n case '[':\n case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = match\nfunction match (f, partial) {\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n if (options.nocase) {\n hit = f.toLowerCase() === p.toLowerCase()\n } else {\n hit = f === p\n }\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')\n return emptyFileEnd\n }\n\n // should be unreachable.\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\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","var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = concatMap(n, function(el) { return expand(el, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n","module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","'use strict';\n\nconst nodeToJson = require('./node2json');\nconst xmlToNodeobj = require('./xmlstr2xmlnode');\nconst x2xmlnode = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\nconst validator = require('./validator');\n\nexports.parse = function(xmlData, options, validationOption) {\n if( validationOption){\n if(validationOption === true) validationOption = {}\n \n const result = validator.validate(xmlData, validationOption);\n if (result !== true) {\n throw Error( result.err.msg)\n }\n }\n options = buildOptions(options, x2xmlnode.defaultOptions, x2xmlnode.props);\n const traversableObj = xmlToNodeobj.getTraversalObj(xmlData, options)\n //print(traversableObj, \" \");\n return nodeToJson.convertToJson(traversableObj, options);\n};\nexports.convertTonimn = require('../src/nimndata').convert2nimn;\nexports.getTraversalObj = xmlToNodeobj.getTraversalObj;\nexports.convertToJson = nodeToJson.convertToJson;\nexports.convertToJsonString = require('./node2json_str').convertToJsonString;\nexports.validate = validator.validate;\nexports.j2xParser = require('./json2xml');\nexports.parseToNimn = function(xmlData, schema, options) {\n return exports.convertTonimn(exports.getTraversalObj(xmlData, options), schema, options);\n};\n\n\nfunction print(xmlNode, indentation){\n if(xmlNode){\n console.log(indentation + \"{\")\n console.log(indentation + \" \\\"tagName\\\": \\\"\" + xmlNode.tagname + \"\\\", \");\n if(xmlNode.parent){\n console.log(indentation + \" \\\"parent\\\": \\\"\" + xmlNode.parent.tagname + \"\\\", \");\n }\n console.log(indentation + \" \\\"val\\\": \\\"\" + xmlNode.val + \"\\\", \");\n console.log(indentation + \" \\\"attrs\\\": \" + JSON.stringify(xmlNode.attrsMap,null,4) + \", \");\n\n if(xmlNode.child){\n console.log(indentation + \"\\\"child\\\": {\")\n const indentation2 = indentation + indentation;\n Object.keys(xmlNode.child).forEach( function(key) {\n const node = xmlNode.child[key];\n\n if(Array.isArray(node)){\n console.log(indentation + \"\\\"\"+key+\"\\\" :[\")\n node.forEach( function(item,index) {\n //console.log(indentation + \" \\\"\"+index+\"\\\" : [\")\n print(item, indentation2);\n })\n console.log(indentation + \"],\") \n }else{\n console.log(indentation + \" \\\"\"+key+\"\\\" : {\")\n print(node, indentation2);\n console.log(indentation + \"},\") \n }\n });\n console.log(indentation + \"},\")\n }\n console.log(indentation + \"},\")\n }\n}","'use strict';\n\nconst util = require('./util');\n\nconst convertToJson = function(node, options) {\n const jObj = {};\n\n //when no child node or attr is present\n if ((!node.child || util.isEmptyObject(node.child)) && (!node.attrsMap || util.isEmptyObject(node.attrsMap))) {\n return util.isExist(node.val) ? node.val : '';\n } else {\n //otherwise create a textnode if node has some text\n if (util.isExist(node.val)) {\n if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n if(options.arrayMode === \"strict\"){\n jObj[options.textNodeName] = [ node.val ];\n }else{\n jObj[options.textNodeName] = node.val;\n }\n }\n }\n }\n\n util.merge(jObj, node.attrsMap, options.arrayMode);\n\n const keys = Object.keys(node.child);\n for (let index = 0; index < keys.length; index++) {\n var tagname = keys[index];\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj[tagname] = [];\n for (var tag in node.child[tagname]) {\n jObj[tagname].push(convertToJson(node.child[tagname][tag], options));\n }\n } else {\n if(options.arrayMode === true){\n const result = convertToJson(node.child[tagname][0], options)\n if(typeof result === 'object')\n jObj[tagname] = [ result ];\n else\n jObj[tagname] = result;\n }else if(options.arrayMode === \"strict\"){\n jObj[tagname] = [convertToJson(node.child[tagname][0], options) ];\n }else{\n jObj[tagname] = convertToJson(node.child[tagname][0], options);\n }\n }\n }\n\n //add value\n return jObj;\n};\n\nexports.convertToJson = convertToJson;\n","'use strict';\n\nmodule.exports = function(tagname, parent, val) {\n this.tagname = tagname;\n this.parent = parent;\n this.child = {}; //child tags\n this.attrsMap = {}; //attributes map\n this.val = val; //text only\n this.addChild = function(child) {\n if (Array.isArray(this.child[child.tagname])) {\n //already presents\n this.child[child.tagname].push(child);\n } else {\n this.child[child.tagname] = [child];\n }\n };\n};\n","'use strict';\n\nconst util = require('./util');\n\nconst defaultOptions = {\n allowBooleanAttributes: false, //A tag can have attributes without any value\n};\n\nconst props = ['allowBooleanAttributes'];\n\n//const tagsPattern = new RegExp(\"<\\\\/?([\\\\w:\\\\-_\\.]+)\\\\s*\\/?>\",\"g\");\nexports.validate = function (xmlData, options) {\n options = util.buildOptions(options, defaultOptions, props);\n\n //xmlData = xmlData.replace(/(\\r\\n|\\n|\\r)/gm,\"\");//make it single line\n //xmlData = xmlData.replace(/(^\\s*<\\?xml.*?\\?>)/g,\"\");//Remove XML starting tag\n //xmlData = xmlData.replace(/(<!DOCTYPE[\\s\\w\\\"\\.\\/\\-\\:]+(\\[.*\\])*\\s*>)/g,\"\");//Remove DOCTYPE\n const tags = [];\n let tagFound = false;\n\n //indicates that the root tag has been closed (aka. depth 0 has been reached)\n let reachedRoot = false;\n\n if (xmlData[0] === '\\ufeff') {\n // check for byte order mark (BOM)\n xmlData = xmlData.substr(1);\n }\n\n for (let i = 0; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n //starting of tag\n //read until you reach to '>' avoiding any '>' in attribute value\n\n i++;\n if (xmlData[i] === '?') {\n i = readPI(xmlData, ++i);\n if (i.err) {\n return i;\n }\n } else if (xmlData[i] === '!') {\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n let closingTag = false;\n if (xmlData[i] === '/') {\n //closing tag\n closingTag = true;\n i++;\n }\n //read tagname\n let tagName = '';\n for (; i < xmlData.length &&\n xmlData[i] !== '>' &&\n xmlData[i] !== ' ' &&\n xmlData[i] !== '\\t' &&\n xmlData[i] !== '\\n' &&\n xmlData[i] !== '\\r'; i++\n ) {\n tagName += xmlData[i];\n }\n tagName = tagName.trim();\n //console.log(tagName);\n\n if (tagName[tagName.length - 1] === '/') {\n //self closing tag without attributes\n tagName = tagName.substring(0, tagName.length - 1);\n //continue;\n i--;\n }\n if (!validateTagName(tagName)) {\n let msg;\n if (tagName.trim().length === 0) {\n msg = \"There is an unnecessary space between tag name and backward slash '</ ..'.\";\n } else {\n msg = \"Tag '\"+tagName+\"' is an invalid name.\";\n }\n return getErrorObject('InvalidTag', msg, getLineNumberForPosition(xmlData, i));\n }\n\n const result = readAttributeStr(xmlData, i);\n if (result === false) {\n return getErrorObject('InvalidAttr', \"Attributes for '\"+tagName+\"' have open quote.\", getLineNumberForPosition(xmlData, i));\n }\n let attrStr = result.value;\n i = result.index;\n\n if (attrStr[attrStr.length - 1] === '/') {\n //self closing tag\n attrStr = attrStr.substring(0, attrStr.length - 1);\n const isValid = validateAttributeString(attrStr, options);\n if (isValid === true) {\n tagFound = true;\n //continue; //text may presents after self closing tag\n } else {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n } else if (closingTag) {\n if (!result.tagClosed) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' doesn't have proper closing.\", getLineNumberForPosition(xmlData, i));\n } else if (attrStr.trim().length > 0) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+tagName+\"' can't have attributes or invalid starting.\", getLineNumberForPosition(xmlData, i));\n } else {\n const otg = tags.pop();\n if (tagName !== otg) {\n return getErrorObject('InvalidTag', \"Closing tag '\"+otg+\"' is expected inplace of '\"+tagName+\"'.\", getLineNumberForPosition(xmlData, i));\n }\n\n //when there are no more tags, we reached the root level.\n if (tags.length == 0) {\n reachedRoot = true;\n }\n }\n } else {\n const isValid = validateAttributeString(attrStr, options);\n if (isValid !== true) {\n //the result from the nested function returns the position of the error within the attribute\n //in order to get the 'true' error line, we need to calculate the position where the attribute begins (i - attrStr.length) and then add the position within the attribute\n //this gives us the absolute index in the entire xml, which we can use to find the line at last\n return getErrorObject(isValid.err.code, isValid.err.msg, getLineNumberForPosition(xmlData, i - attrStr.length + isValid.err.line));\n }\n\n //if the root level has been reached before ...\n if (reachedRoot === true) {\n return getErrorObject('InvalidXml', 'Multiple possible root nodes found.', getLineNumberForPosition(xmlData, i));\n } else {\n tags.push(tagName);\n }\n tagFound = true;\n }\n\n //skip tag text value\n //It may include comments and CDATA value\n for (i++; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n if (xmlData[i + 1] === '!') {\n //comment or CADATA\n i++;\n i = readCommentAndCDATA(xmlData, i);\n continue;\n } else {\n break;\n }\n } else if (xmlData[i] === '&') {\n const afterAmp = validateAmpersand(xmlData, i);\n if (afterAmp == -1)\n return getErrorObject('InvalidChar', \"char '&' is not expected.\", getLineNumberForPosition(xmlData, i));\n i = afterAmp;\n }\n } //end of reading tag text value\n if (xmlData[i] === '<') {\n i--;\n }\n }\n } else {\n if (xmlData[i] === ' ' || xmlData[i] === '\\t' || xmlData[i] === '\\n' || xmlData[i] === '\\r') {\n continue;\n }\n return getErrorObject('InvalidChar', \"char '\"+xmlData[i]+\"' is not expected.\", getLineNumberForPosition(xmlData, i));\n }\n }\n\n if (!tagFound) {\n return getErrorObject('InvalidXml', 'Start tag expected.', 1);\n } else if (tags.length > 0) {\n return getErrorObject('InvalidXml', \"Invalid '\"+JSON.stringify(tags, null, 4).replace(/\\r?\\n/g, '')+\"' found.\", 1);\n }\n\n return true;\n};\n\n/**\n * Read Processing insstructions and skip\n * @param {*} xmlData\n * @param {*} i\n */\nfunction readPI(xmlData, i) {\n var start = i;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] == '?' || xmlData[i] == ' ') {\n //tagname\n var tagname = xmlData.substr(start, i - start);\n if (i > 5 && tagname === 'xml') {\n return getErrorObject('InvalidXml', 'XML declaration allowed only at the start of the document.', getLineNumberForPosition(xmlData, i));\n } else if (xmlData[i] == '?' && xmlData[i + 1] == '>') {\n //check if valid attribut string\n i++;\n break;\n } else {\n continue;\n }\n }\n }\n return i;\n}\n\nfunction readCommentAndCDATA(xmlData, i) {\n if (xmlData.length > i + 5 && xmlData[i + 1] === '-' && xmlData[i + 2] === '-') {\n //comment\n for (i += 3; i < xmlData.length; i++) {\n if (xmlData[i] === '-' && xmlData[i + 1] === '-' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n } else if (\n xmlData.length > i + 8 &&\n xmlData[i + 1] === 'D' &&\n xmlData[i + 2] === 'O' &&\n xmlData[i + 3] === 'C' &&\n xmlData[i + 4] === 'T' &&\n xmlData[i + 5] === 'Y' &&\n xmlData[i + 6] === 'P' &&\n xmlData[i + 7] === 'E'\n ) {\n let angleBracketsCount = 1;\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === '<') {\n angleBracketsCount++;\n } else if (xmlData[i] === '>') {\n angleBracketsCount--;\n if (angleBracketsCount === 0) {\n break;\n }\n }\n }\n } else if (\n xmlData.length > i + 9 &&\n xmlData[i + 1] === '[' &&\n xmlData[i + 2] === 'C' &&\n xmlData[i + 3] === 'D' &&\n xmlData[i + 4] === 'A' &&\n xmlData[i + 5] === 'T' &&\n xmlData[i + 6] === 'A' &&\n xmlData[i + 7] === '['\n ) {\n for (i += 8; i < xmlData.length; i++) {\n if (xmlData[i] === ']' && xmlData[i + 1] === ']' && xmlData[i + 2] === '>') {\n i += 2;\n break;\n }\n }\n }\n\n return i;\n}\n\nvar doubleQuote = '\"';\nvar singleQuote = \"'\";\n\n/**\n * Keep reading xmlData until '<' is found outside the attribute value.\n * @param {string} xmlData\n * @param {number} i\n */\nfunction readAttributeStr(xmlData, i) {\n let attrStr = '';\n let startChar = '';\n let tagClosed = false;\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === doubleQuote || xmlData[i] === singleQuote) {\n if (startChar === '') {\n startChar = xmlData[i];\n } else if (startChar !== xmlData[i]) {\n //if vaue is enclosed with double quote then single quotes are allowed inside the value and vice versa\n continue;\n } else {\n startChar = '';\n }\n } else if (xmlData[i] === '>') {\n if (startChar === '') {\n tagClosed = true;\n break;\n }\n }\n attrStr += xmlData[i];\n }\n if (startChar !== '') {\n return false;\n }\n\n return {\n value: attrStr,\n index: i,\n tagClosed: tagClosed\n };\n}\n\n/**\n * Select all the attributes whether valid or invalid.\n */\nconst validAttrStrRegxp = new RegExp('(\\\\s*)([^\\\\s=]+)(\\\\s*=)?(\\\\s*([\\'\"])(([\\\\s\\\\S])*?)\\\\5)?', 'g');\n\n//attr, =\"sd\", a=\"amit's\", a=\"sd\"b=\"saf\", ab cd=\"\"\n\nfunction validateAttributeString(attrStr, options) {\n //console.log(\"start:\"+attrStr+\":end\");\n\n //if(attrStr.trim().length === 0) return true; //empty string\n\n const matches = util.getAllMatches(attrStr, validAttrStrRegxp);\n const attrNames = {};\n\n for (let i = 0; i < matches.length; i++) {\n if (matches[i][1].length === 0) {\n //nospace before attribute name: a=\"sd\"b=\"saf\"\n return getErrorObject('InvalidAttr', \"Attribute '\"+matches[i][2]+\"' has no space in starting.\", getPositionFromMatch(attrStr, matches[i][0]))\n } else if (matches[i][3] === undefined && !options.allowBooleanAttributes) {\n //independent attribute: ab\n return getErrorObject('InvalidAttr', \"boolean attribute '\"+matches[i][2]+\"' is not allowed.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n /* else if(matches[i][6] === undefined){//attribute without value: ab=\n return { err: { code:\"InvalidAttr\",msg:\"attribute \" + matches[i][2] + \" has no value assigned.\"}};\n } */\n const attrName = matches[i][2];\n if (!validateAttrName(attrName)) {\n return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is an invalid name.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n if (!attrNames.hasOwnProperty(attrName)) {\n //check for duplicate attribute.\n attrNames[attrName] = 1;\n } else {\n return getErrorObject('InvalidAttr', \"Attribute '\"+attrName+\"' is repeated.\", getPositionFromMatch(attrStr, matches[i][0]));\n }\n }\n\n return true;\n}\n\nfunction validateNumberAmpersand(xmlData, i) {\n let re = /\\d/;\n if (xmlData[i] === 'x') {\n i++;\n re = /[\\da-fA-F]/;\n }\n for (; i < xmlData.length; i++) {\n if (xmlData[i] === ';')\n return i;\n if (!xmlData[i].match(re))\n break;\n }\n return -1;\n}\n\nfunction validateAmpersand(xmlData, i) {\n // https://www.w3.org/TR/xml/#dt-charref\n i++;\n if (xmlData[i] === ';')\n return -1;\n if (xmlData[i] === '#') {\n i++;\n return validateNumberAmpersand(xmlData, i);\n }\n let count = 0;\n for (; i < xmlData.length; i++, count++) {\n if (xmlData[i].match(/\\w/) && count < 20)\n continue;\n if (xmlData[i] === ';')\n break;\n return -1;\n }\n return i;\n}\n\nfunction getErrorObject(code, message, lineNumber) {\n return {\n err: {\n code: code,\n msg: message,\n line: lineNumber,\n },\n };\n}\n\nfunction validateAttrName(attrName) {\n return util.isName(attrName);\n}\n\n// const startsWithXML = /^xml/i;\n\nfunction validateTagName(tagname) {\n return util.isName(tagname) /* && !tagname.match(startsWithXML) */;\n}\n\n//this function returns the line number for the character at the given index\nfunction getLineNumberForPosition(xmlData, index) {\n var lines = xmlData.substring(0, index).split(/\\r?\\n/);\n return lines.length;\n}\n\n//this function returns the position of the last character of match within attrStr\nfunction getPositionFromMatch(attrStr, match) {\n return attrStr.indexOf(match) + match.length;\n}\n","'use strict';\nconst char = function(a) {\n return String.fromCharCode(a);\n};\n\nconst chars = {\n nilChar: char(176),\n missingChar: char(201),\n nilPremitive: char(175),\n missingPremitive: char(200),\n\n emptyChar: char(178),\n emptyValue: char(177), //empty Premitive\n\n boundryChar: char(179),\n\n objStart: char(198),\n arrStart: char(204),\n arrayEnd: char(185),\n};\n\nconst charsArr = [\n chars.nilChar,\n chars.nilPremitive,\n chars.missingChar,\n chars.missingPremitive,\n chars.boundryChar,\n chars.emptyChar,\n chars.emptyValue,\n chars.arrayEnd,\n chars.objStart,\n chars.arrStart,\n];\n\nconst _e = function(node, e_schema, options) {\n if (typeof e_schema === 'string') {\n //premitive\n if (node && node[0] && node[0].val !== undefined) {\n return getValue(node[0].val, e_schema);\n } else {\n return getValue(node, e_schema);\n }\n } else {\n const hasValidData = hasData(node);\n if (hasValidData === true) {\n let str = '';\n if (Array.isArray(e_schema)) {\n //attributes can't be repeated. hence check in children tags only\n str += chars.arrStart;\n const itemSchema = e_schema[0];\n //var itemSchemaType = itemSchema;\n const arr_len = node.length;\n\n if (typeof itemSchema === 'string') {\n for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n const r = getValue(node[arr_i].val, itemSchema);\n str = processValue(str, r);\n }\n } else {\n for (let arr_i = 0; arr_i < arr_len; arr_i++) {\n const r = _e(node[arr_i], itemSchema, options);\n str = processValue(str, r);\n }\n }\n str += chars.arrayEnd; //indicates that next item is not array item\n } else {\n //object\n str += chars.objStart;\n const keys = Object.keys(e_schema);\n if (Array.isArray(node)) {\n node = node[0];\n }\n for (let i in keys) {\n const key = keys[i];\n //a property defined in schema can be present either in attrsMap or children tags\n //options.textNodeName will not present in both maps, take it's value from val\n //options.attrNodeName will be present in attrsMap\n let r;\n if (!options.ignoreAttributes && node.attrsMap && node.attrsMap[key]) {\n r = _e(node.attrsMap[key], e_schema[key], options);\n } else if (key === options.textNodeName) {\n r = _e(node.val, e_schema[key], options);\n } else {\n r = _e(node.child[key], e_schema[key], options);\n }\n str = processValue(str, r);\n }\n }\n return str;\n } else {\n return hasValidData;\n }\n }\n};\n\nconst getValue = function(a /*, type*/) {\n switch (a) {\n case undefined:\n return chars.missingPremitive;\n case null:\n return chars.nilPremitive;\n case '':\n return chars.emptyValue;\n default:\n return a;\n }\n};\n\nconst processValue = function(str, r) {\n if (!isAppChar(r[0]) && !isAppChar(str[str.length - 1])) {\n str += chars.boundryChar;\n }\n return str + r;\n};\n\nconst isAppChar = function(ch) {\n return charsArr.indexOf(ch) !== -1;\n};\n\nfunction hasData(jObj) {\n if (jObj === undefined) {\n return chars.missingChar;\n } else if (jObj === null) {\n return chars.nilChar;\n } else if (\n jObj.child &&\n Object.keys(jObj.child).length === 0 &&\n (!jObj.attrsMap || Object.keys(jObj.attrsMap).length === 0)\n ) {\n return chars.emptyChar;\n } else {\n return true;\n }\n}\n\nconst x2j = require('./xmlstr2xmlnode');\nconst buildOptions = require('./util').buildOptions;\n\nconst convert2nimn = function(node, e_schema, options) {\n options = buildOptions(options, x2j.defaultOptions, x2j.props);\n return _e(node, e_schema, options);\n};\n\nexports.convert2nimn = convert2nimn;\n","'use strict';\n\nconst util = require('./util');\nconst buildOptions = require('./util').buildOptions;\nconst x2j = require('./xmlstr2xmlnode');\n\n//TODO: do it later\nconst convertToJsonString = function(node, options) {\n options = buildOptions(options, x2j.defaultOptions, x2j.props);\n\n options.indentBy = options.indentBy || '';\n return _cToJsonStr(node, options, 0);\n};\n\nconst _cToJsonStr = function(node, options, level) {\n let jObj = '{';\n\n //traver through all the children\n const keys = Object.keys(node.child);\n\n for (let index = 0; index < keys.length; index++) {\n var tagname = keys[index];\n if (node.child[tagname] && node.child[tagname].length > 1) {\n jObj += '\"' + tagname + '\" : [ ';\n for (var tag in node.child[tagname]) {\n jObj += _cToJsonStr(node.child[tagname][tag], options) + ' , ';\n }\n jObj = jObj.substr(0, jObj.length - 1) + ' ] '; //remove extra comma in last\n } else {\n jObj += '\"' + tagname + '\" : ' + _cToJsonStr(node.child[tagname][0], options) + ' ,';\n }\n }\n util.merge(jObj, node.attrsMap);\n //add attrsMap as new children\n if (util.isEmptyObject(jObj)) {\n return util.isExist(node.val) ? node.val : '';\n } else {\n if (util.isExist(node.val)) {\n if (!(typeof node.val === 'string' && (node.val === '' || node.val === options.cdataPositionChar))) {\n jObj += '\"' + options.textNodeName + '\" : ' + stringval(node.val);\n }\n }\n }\n //add value\n if (jObj[jObj.length - 1] === ',') {\n jObj = jObj.substr(0, jObj.length - 2);\n }\n return jObj + '}';\n};\n\nfunction stringval(v) {\n if (v === true || v === false || !isNaN(v)) {\n return v;\n } else {\n return '\"' + v + '\"';\n }\n}\n\nfunction indentate(options, level) {\n return options.indentBy.repeat(level);\n}\n\nexports.convertToJsonString = convertToJsonString;\n","'use strict';\n//parse Empty Node as self closing node\nconst buildOptions = require('./util').buildOptions;\n\nconst defaultOptions = {\n attributeNamePrefix: '@_',\n attrNodeName: false,\n textNodeName: '#text',\n ignoreAttributes: true,\n cdataTagName: false,\n cdataPositionChar: '\\\\c',\n format: false,\n indentBy: ' ',\n supressEmptyNode: false,\n tagValueProcessor: function(a) {\n return a;\n },\n attrValueProcessor: function(a) {\n return a;\n },\n};\n\nconst props = [\n 'attributeNamePrefix',\n 'attrNodeName',\n 'textNodeName',\n 'ignoreAttributes',\n 'cdataTagName',\n 'cdataPositionChar',\n 'format',\n 'indentBy',\n 'supressEmptyNode',\n 'tagValueProcessor',\n 'attrValueProcessor',\n];\n\nfunction Parser(options) {\n this.options = buildOptions(options, defaultOptions, props);\n if (this.options.ignoreAttributes || this.options.attrNodeName) {\n this.isAttribute = function(/*a*/) {\n return false;\n };\n } else {\n this.attrPrefixLen = this.options.attributeNamePrefix.length;\n this.isAttribute = isAttribute;\n }\n if (this.options.cdataTagName) {\n this.isCDATA = isCDATA;\n } else {\n this.isCDATA = function(/*a*/) {\n return false;\n };\n }\n this.replaceCDATAstr = replaceCDATAstr;\n this.replaceCDATAarr = replaceCDATAarr;\n\n if (this.options.format) {\n this.indentate = indentate;\n this.tagEndChar = '>\\n';\n this.newLine = '\\n';\n } else {\n this.indentate = function() {\n return '';\n };\n this.tagEndChar = '>';\n this.newLine = '';\n }\n\n if (this.options.supressEmptyNode) {\n this.buildTextNode = buildEmptyTextNode;\n this.buildObjNode = buildEmptyObjNode;\n } else {\n this.buildTextNode = buildTextValNode;\n this.buildObjNode = buildObjectNode;\n }\n\n this.buildTextValNode = buildTextValNode;\n this.buildObjectNode = buildObjectNode;\n}\n\nParser.prototype.parse = function(jObj) {\n return this.j2x(jObj, 0).val;\n};\n\nParser.prototype.j2x = function(jObj, level) {\n let attrStr = '';\n let val = '';\n const keys = Object.keys(jObj);\n const len = keys.length;\n for (let i = 0; i < len; i++) {\n const key = keys[i];\n if (typeof jObj[key] === 'undefined') {\n // supress undefined node\n } else if (jObj[key] === null) {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (jObj[key] instanceof Date) {\n val += this.buildTextNode(jObj[key], key, '', level);\n } else if (typeof jObj[key] !== 'object') {\n //premitive type\n const attr = this.isAttribute(key);\n if (attr) {\n attrStr += ' ' + attr + '=\"' + this.options.attrValueProcessor('' + jObj[key]) + '\"';\n } else if (this.isCDATA(key)) {\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAstr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAstr('', jObj[key]);\n }\n } else {\n //tag value\n if (key === this.options.textNodeName) {\n if (jObj[this.options.cdataTagName]) {\n //value will added while processing cdata\n } else {\n val += this.options.tagValueProcessor('' + jObj[key]);\n }\n } else {\n val += this.buildTextNode(jObj[key], key, '', level);\n }\n }\n } else if (Array.isArray(jObj[key])) {\n //repeated nodes\n if (this.isCDATA(key)) {\n val += this.indentate(level);\n if (jObj[this.options.textNodeName]) {\n val += this.replaceCDATAarr(jObj[this.options.textNodeName], jObj[key]);\n } else {\n val += this.replaceCDATAarr('', jObj[key]);\n }\n } else {\n //nested nodes\n const arrLen = jObj[key].length;\n for (let j = 0; j < arrLen; j++) {\n const item = jObj[key][j];\n if (typeof item === 'undefined') {\n // supress undefined node\n } else if (item === null) {\n val += this.indentate(level) + '<' + key + '/' + this.tagEndChar;\n } else if (typeof item === 'object') {\n const result = this.j2x(item, level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n } else {\n val += this.buildTextNode(item, key, '', level);\n }\n }\n }\n } else {\n //nested node\n if (this.options.attrNodeName && key === this.options.attrNodeName) {\n const Ks = Object.keys(jObj[key]);\n const L = Ks.length;\n for (let j = 0; j < L; j++) {\n attrStr += ' ' + Ks[j] + '=\"' + this.options.attrValueProcessor('' + jObj[key][Ks[j]]) + '\"';\n }\n } else {\n const result = this.j2x(jObj[key], level + 1);\n val += this.buildObjNode(result.val, key, result.attrStr, level);\n }\n }\n }\n return {attrStr: attrStr, val: val};\n};\n\nfunction replaceCDATAstr(str, cdata) {\n str = this.options.tagValueProcessor('' + str);\n if (this.options.cdataPositionChar === '' || str === '') {\n return str + '<![CDATA[' + cdata + ']]' + this.tagEndChar;\n } else {\n return str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata + ']]' + this.tagEndChar);\n }\n}\n\nfunction replaceCDATAarr(str, cdata) {\n str = this.options.tagValueProcessor('' + str);\n if (this.options.cdataPositionChar === '' || str === '') {\n return str + '<![CDATA[' + cdata.join(']]><![CDATA[') + ']]' + this.tagEndChar;\n } else {\n for (let v in cdata) {\n str = str.replace(this.options.cdataPositionChar, '<![CDATA[' + cdata[v] + ']]>');\n }\n return str + this.newLine;\n }\n}\n\nfunction buildObjectNode(val, key, attrStr, level) {\n if (attrStr && !val.includes('<')) {\n return (\n this.indentate(level) +\n '<' +\n key +\n attrStr +\n '>' +\n val +\n //+ this.newLine\n // + this.indentate(level)\n '</' +\n key +\n this.tagEndChar\n );\n } else {\n return (\n this.indentate(level) +\n '<' +\n key +\n attrStr +\n this.tagEndChar +\n val +\n //+ this.newLine\n this.indentate(level) +\n '</' +\n key +\n this.tagEndChar\n );\n }\n}\n\nfunction buildEmptyObjNode(val, key, attrStr, level) {\n if (val !== '') {\n return this.buildObjectNode(val, key, attrStr, level);\n } else {\n return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n //+ this.newLine\n }\n}\n\nfunction buildTextValNode(val, key, attrStr, level) {\n return (\n this.indentate(level) +\n '<' +\n key +\n attrStr +\n '>' +\n this.options.tagValueProcessor(val) +\n '</' +\n key +\n this.tagEndChar\n );\n}\n\nfunction buildEmptyTextNode(val, key, attrStr, level) {\n if (val !== '') {\n return this.buildTextValNode(val, key, attrStr, level);\n } else {\n return this.indentate(level) + '<' + key + attrStr + '/' + this.tagEndChar;\n }\n}\n\nfunction indentate(level) {\n return this.options.indentBy.repeat(level);\n}\n\nfunction isAttribute(name /*, options*/) {\n if (name.startsWith(this.options.attributeNamePrefix)) {\n return name.substr(this.attrPrefixLen);\n } else {\n return false;\n }\n}\n\nfunction isCDATA(name) {\n return name === this.options.cdataTagName;\n}\n\n//formatting\n//indentation\n//\\n after each closing or self closing tag\n\nmodule.exports = Parser;\n","/**\n* @license nested-property https://github.com/cosmosio/nested-property\n*\n* The MIT License (MIT)\n*\n* Copyright (c) 2014-2020 Olivier Scherrer <pode.fr@gmail.com>\n*/\n\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nvar ARRAY_WILDCARD = \"+\";\nvar PATH_DELIMITER = \".\";\n\nvar ObjectPrototypeMutationError = /*#__PURE__*/function (_Error) {\n _inherits(ObjectPrototypeMutationError, _Error);\n\n function ObjectPrototypeMutationError(params) {\n var _this;\n\n _classCallCheck(this, ObjectPrototypeMutationError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(ObjectPrototypeMutationError).call(this, params));\n _this.name = \"ObjectPrototypeMutationError\";\n return _this;\n }\n\n return ObjectPrototypeMutationError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = {\n set: setNestedProperty,\n get: getNestedProperty,\n has: hasNestedProperty,\n hasOwn: function hasOwn(object, property, options) {\n return this.has(object, property, options || {\n own: true\n });\n },\n isIn: isInNestedProperty,\n ObjectPrototypeMutationError: ObjectPrototypeMutationError\n};\n/**\n * Get the property of an object nested in one or more objects or array\n * Given an object such as a.b.c.d = 5, getNestedProperty(a, \"b.c.d\") will return 5.\n * It also works through arrays. Given a nested array such as a[0].b = 5, getNestedProperty(a, \"0.b\") will return 5.\n * For accessing nested properties through all items in an array, you may use the array wildcard \"+\".\n * For instance, getNestedProperty([{a:1}, {a:2}, {a:3}], \"+.a\") will return [1, 2, 3]\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @returns the object or the the property value if found\n */\n\nfunction getNestedProperty(object, property) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n return object[property];\n }\n\n try {\n return traverse(object, property, function _getNestedProperty(currentObject, currentProperty) {\n return currentObject[currentProperty];\n });\n } catch (err) {\n return object;\n }\n}\n/**\n * Tell if a nested object has a given property (or array a given index)\n * given an object such as a.b.c.d = 5, hasNestedProperty(a, \"b.c.d\") will return true.\n * It also returns true if the property is in the prototype chain.\n * @param {Object} object the object to get the property from\n * @param {String} property the path to the property as a string\n * @param {Object} options:\n * - own: set to reject properties from the prototype\n * @returns true if has (property in object), false otherwise\n */\n\n\nfunction hasNestedProperty(object, property) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n if (typeof property == \"number\") {\n return property in object;\n }\n\n try {\n var has = false;\n traverse(object, property, function _hasNestedProperty(currentObject, currentProperty, segments, index) {\n if (isLastSegment(segments, index)) {\n if (options.own) {\n has = currentObject.hasOwnProperty(currentProperty);\n } else {\n has = currentProperty in currentObject;\n }\n } else {\n return currentObject && currentObject[currentProperty];\n }\n });\n return has;\n } catch (err) {\n return false;\n }\n}\n/**\n * Set the property of an object nested in one or more objects\n * If the property doesn't exist, it gets created.\n * @param {Object} object\n * @param {String} property\n * @param value the value to set\n * @returns object if no assignment was made or the value if the assignment was made\n */\n\n\nfunction setNestedProperty(object, property, value) {\n if (_typeof(object) != \"object\" || object === null) {\n return object;\n }\n\n if (typeof property == \"undefined\") {\n return object;\n }\n\n if (typeof property == \"number\") {\n object[property] = value;\n return object[property];\n }\n\n try {\n return traverse(object, property, function _setNestedProperty(currentObject, currentProperty, segments, index) {\n if (currentObject === Reflect.getPrototypeOf({})) {\n throw new ObjectPrototypeMutationError(\"Attempting to mutate Object.prototype\");\n }\n\n if (!currentObject[currentProperty]) {\n var nextPropIsNumber = Number.isInteger(Number(segments[index + 1]));\n var nextPropIsArrayWildcard = segments[index + 1] === ARRAY_WILDCARD;\n\n if (nextPropIsNumber || nextPropIsArrayWildcard) {\n currentObject[currentProperty] = [];\n } else {\n currentObject[currentProperty] = {};\n }\n }\n\n if (isLastSegment(segments, index)) {\n currentObject[currentProperty] = value;\n }\n\n return currentObject[currentProperty];\n });\n } catch (err) {\n if (err instanceof ObjectPrototypeMutationError) {\n // rethrow\n throw err;\n } else {\n return object;\n }\n }\n}\n/**\n * Tell if an object is on the path to a nested property\n * If the object is on the path, and the path exists, it returns true, and false otherwise.\n * @param {Object} object to get the nested property from\n * @param {String} property name of the nested property\n * @param {Object} objectInPath the object to check\n * @param {Object} options:\n * - validPath: return false if the path is invalid, even if the object is in the path\n * @returns {boolean} true if the object is on the path\n */\n\n\nfunction isInNestedProperty(object, property, objectInPath) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n if (_typeof(object) != \"object\" || object === null) {\n return false;\n }\n\n if (typeof property == \"undefined\") {\n return false;\n }\n\n try {\n var isIn = false,\n pathExists = false;\n traverse(object, property, function _isInNestedProperty(currentObject, currentProperty, segments, index) {\n isIn = isIn || currentObject === objectInPath || !!currentObject && currentObject[currentProperty] === objectInPath;\n pathExists = isLastSegment(segments, index) && _typeof(currentObject) === \"object\" && currentProperty in currentObject;\n return currentObject && currentObject[currentProperty];\n });\n\n if (options.validPath) {\n return isIn && pathExists;\n } else {\n return isIn;\n }\n } catch (err) {\n return false;\n }\n}\n\nfunction traverse(object, path) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n var segments = path.split(PATH_DELIMITER);\n var length = segments.length;\n\n var _loop = function _loop(idx) {\n var currentSegment = segments[idx];\n\n if (!object) {\n return {\n v: void 0\n };\n }\n\n if (currentSegment === ARRAY_WILDCARD) {\n if (Array.isArray(object)) {\n return {\n v: object.map(function (value, index) {\n var remainingSegments = segments.slice(idx + 1);\n\n if (remainingSegments.length > 0) {\n return traverse(value, remainingSegments.join(PATH_DELIMITER), callback);\n } else {\n return callback(object, index, segments, idx);\n }\n })\n };\n } else {\n var pathToHere = segments.slice(0, idx).join(PATH_DELIMITER);\n throw new Error(\"Object at wildcard (\".concat(pathToHere, \") is not an array\"));\n }\n } else {\n object = callback(object, currentSegment, segments, idx);\n }\n };\n\n for (var idx = 0; idx < length; idx++) {\n var _ret = _loop(idx);\n\n if (_typeof(_ret) === \"object\") return _ret.v;\n }\n\n return object;\n}\n\nfunction isLastSegment(segments, index) {\n return segments.length === index + 1;\n}\n","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction createDirectory(dirPath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(dirPath)),\n method: \"MKCOL\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n createDirectory: createDirectory\n};","\"use strict\";\n\nconst {\n handleResponseCode\n} = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction customRequest(remotePath, requestOptions, options) {\n if (!requestOptions.url) {\n requestOptions.url = joinURL(options.remoteURL, encodePath(remotePath), \"/\");\n }\n\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode);\n}\n\nmodule.exports = {\n customRequest\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction deleteFile(filename, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"DELETE\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n deleteFile\n};","\"use strict\";\n\nconst {\n getStat\n} = require(\"./stat.js\");\n\nfunction pathExists(remotePath, options) {\n return getStat(remotePath, options).then(() => true).catch(err => {\n if (err.response && err.response.status === 404) {\n return false;\n }\n\n throw err;\n });\n}\n\nmodule.exports = {\n pathExists\n};","\"use strict\";\n\nconst {\n handleResponseCode,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst {\n fromBase64\n} = require(\"../encode.js\");\n\nfunction getFileContentsBuffer(filePath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"GET\",\n responseType: \"arraybuffer\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => processResponsePayload(res, res.data, options.details));\n}\n\nfunction getFileContentsString(filePath, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"GET\",\n responseType: \"text\"\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => processResponsePayload(res, res.data, options.details));\n}\n\nfunction getFileLink(filePath, options) {\n let url = joinURL(options.remoteURL, encodePath(filePath));\n const protocol = /^https:/i.test(url) ? \"https\" : \"http\";\n\n if (options.headers && options.headers.Authorization) {\n if (/^Basic /i.test(options.headers.Authorization) === false) {\n throw new Error(\"Failed retrieving download link: Invalid authorisation method\");\n }\n\n const authPart = options.headers.Authorization.replace(/^Basic /i, \"\").trim();\n const authContents = fromBase64(authPart);\n url = url.replace(/^https?:\\/\\//, `${protocol}://${authContents}@`);\n }\n\n return url;\n}\n\nmodule.exports = {\n getFileContentsBuffer,\n getFileContentsString,\n getFileLink\n};","\"use strict\";\n\nconst {\n handleResponseCode,\n processResponsePayload\n} = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst {\n parseXML,\n translateDiskSpace\n} = require(\"./dav.js\");\n\nfunction getQuota(options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, \"/\"),\n method: \"PROPFIND\",\n headers: {\n Accept: \"text/plain\",\n Depth: 0\n },\n responseType: \"text\"\n };\n let response = null;\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(handleResponseCode).then(res => {\n response = res;\n return res.data;\n }).then(parseXML).then(parseQuota).then(result => processResponsePayload(response, result, options.details));\n}\n\nfunction parseQuota(result) {\n try {\n const [responseItem] = result.multistatus.response;\n const {\n propstat: {\n prop: {\n \"quota-used-bytes\": quotaUsed,\n \"quota-available-bytes\": quotaAvail\n }\n }\n } = responseItem;\n return typeof quotaUsed !== \"undefined\" && typeof quotaAvail !== \"undefined\" ? {\n used: parseInt(quotaUsed, 10),\n available: translateDiskSpace(quotaAvail)\n } : null;\n } catch (err) {\n /* ignore */\n }\n\n return null;\n}\n\nmodule.exports = {\n getQuota\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction moveFile(filename, destination, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"MOVE\",\n headers: {\n Destination: joinURL(options.remoteURL, encodePath(destination))\n }\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n moveFile\n};","\"use strict\";\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nfunction copyFile(filename, destination, options) {\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filename)),\n method: \"COPY\",\n headers: {\n Destination: joinURL(options.remoteURL, encodePath(destination))\n }\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nmodule.exports = {\n copyFile\n};","\"use strict\";\n\nconst {\n merge\n} = require(\"../merge.js\");\n\nconst responseHandlers = require(\"../response.js\");\n\nconst {\n encodePath,\n joinURL,\n prepareRequestOptions,\n request\n} = require(\"../request.js\");\n\nconst {\n fromBase64\n} = require(\"../encode.js\");\n\nfunction getPutContentsDefaults() {\n return {\n headers: {\n \"Content-Type\": \"application/octet-stream\"\n },\n overwrite: true\n };\n}\n\nfunction putFileContents(filePath, data, options) {\n const headers = {\n \"Content-Length\": data.length\n };\n\n if (typeof WEB === \"undefined\") {\n // We're running under NodeJS, so it's safe to check if the\n // input is a stream\n const stream = require(\"stream\");\n\n if (data instanceof stream.Readable) {\n // Input was a stream, remove the content length as this\n // is not known yet\n delete headers[\"Content-Length\"];\n }\n }\n\n const putOptions = merge(getPutContentsDefaults(), {\n headers\n }, options || {});\n\n if (putOptions.overwrite === false) {\n putOptions.headers[\"If-None-Match\"] = \"*\";\n }\n\n const requestOptions = {\n url: joinURL(options.remoteURL, encodePath(filePath)),\n method: \"PUT\",\n headers: putOptions.headers,\n data\n };\n prepareRequestOptions(requestOptions, options);\n return request(requestOptions).then(responseHandlers.handleResponseCode);\n}\n\nfunction getFileUploadLink(filePath, options) {\n let url = joinURL(options.remoteURL, encodePath(filePath));\n url += \"?Content-Type=application/octet-stream\";\n const protocol = /^https:/i.test(url) ? \"https\" : \"http\";\n\n if (options.headers && options.headers.Authorization) {\n if (/^Basic /i.test(options.headers.Authorization) === false) {\n throw new Error(\"Failed retrieving download link: Invalid authorisation method\");\n }\n\n const authPart = options.headers.Authorization.replace(/^Basic /i, \"\").trim();\n const authContents = fromBase64(authPart);\n url = url.replace(/^https?:\\/\\//, `${protocol}://${authContents}@`);\n }\n\n return url;\n}\n\nmodule.exports = {\n getFileUploadLink,\n putFileContents\n};"],"sourceRoot":""} \ No newline at end of file