{"version":3,"sources":["node_modules/browser-pack/_prelude.js","lib/csv/csv.js","lib/doc/anchor.js","lib/doc/cell.js","lib/doc/column.js","lib/doc/data-validations.js","lib/doc/defined-names.js","lib/doc/enums.js","lib/doc/image.js","lib/doc/note.js","lib/doc/range.js","lib/doc/row.js","lib/doc/table.js","lib/doc/workbook.js","lib/doc/worksheet.js","lib/exceljs.bare.js","lib/utils/browser-buffer-decode.js","lib/utils/browser-buffer-encode.js","lib/utils/cell-matrix.js","lib/utils/col-cache.js","lib/utils/encryptor.js","lib/utils/parse-sax.js","lib/utils/shared-formula.js","lib/utils/stream-buf.js","lib/utils/string-buf.js","lib/utils/under-dash.js","lib/utils/utils.js","lib/utils/xml-stream.js","lib/utils/zip-stream.js","lib/xlsx/defaultnumformats.js","lib/xlsx/rel-type.js","lib/xlsx/xform/base-xform.js","lib/xlsx/xform/book/defined-name-xform.js","lib/xlsx/xform/book/sheet-xform.js","lib/xlsx/xform/book/workbook-calc-properties-xform.js","lib/xlsx/xform/book/workbook-properties-xform.js","lib/xlsx/xform/book/workbook-view-xform.js","lib/xlsx/xform/book/workbook-xform.js","lib/xlsx/xform/comment/comment-xform.js","lib/xlsx/xform/comment/comments-xform.js","lib/xlsx/xform/comment/style/vml-position-xform.js","lib/xlsx/xform/comment/style/vml-protection-xform.js","lib/xlsx/xform/comment/vml-anchor-xform.js","lib/xlsx/xform/comment/vml-client-data-xform.js","lib/xlsx/xform/comment/vml-notes-xform.js","lib/xlsx/xform/comment/vml-shape-xform.js","lib/xlsx/xform/comment/vml-textbox-xform.js","lib/xlsx/xform/composite-xform.js","lib/xlsx/xform/core/app-heading-pairs-xform.js","lib/xlsx/xform/core/app-titles-of-parts-xform.js","lib/xlsx/xform/core/app-xform.js","lib/xlsx/xform/core/content-types-xform.js","lib/xlsx/xform/core/core-xform.js","lib/xlsx/xform/core/relationship-xform.js","lib/xlsx/xform/core/relationships-xform.js","lib/xlsx/xform/drawing/base-cell-anchor-xform.js","lib/xlsx/xform/drawing/blip-fill-xform.js","lib/xlsx/xform/drawing/blip-xform.js","lib/xlsx/xform/drawing/c-nv-pic-pr-xform.js","lib/xlsx/xform/drawing/c-nv-pr-xform.js","lib/xlsx/xform/drawing/cell-position-xform.js","lib/xlsx/xform/drawing/drawing-xform.js","lib/xlsx/xform/drawing/ext-lst-xform.js","lib/xlsx/xform/drawing/ext-xform.js","lib/xlsx/xform/drawing/hlink-click-xform.js","lib/xlsx/xform/drawing/nv-pic-pr-xform.js","lib/xlsx/xform/drawing/one-cell-anchor-xform.js","lib/xlsx/xform/drawing/pic-xform.js","lib/xlsx/xform/drawing/sp-pr.js","lib/xlsx/xform/drawing/two-cell-anchor-xform.js","lib/xlsx/xform/list-xform.js","lib/xlsx/xform/sheet/auto-filter-xform.js","lib/xlsx/xform/sheet/cell-xform.js","lib/xlsx/xform/sheet/cf-ext/cf-icon-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/cf-rule-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/cfvo-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/conditional-formatting-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/conditional-formattings-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/databar-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/f-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/icon-set-ext-xform.js","lib/xlsx/xform/sheet/cf-ext/sqref-ext-xform.js","lib/xlsx/xform/sheet/cf/cf-rule-xform.js","lib/xlsx/xform/sheet/cf/cfvo-xform.js","lib/xlsx/xform/sheet/cf/color-scale-xform.js","lib/xlsx/xform/sheet/cf/conditional-formatting-xform.js","lib/xlsx/xform/sheet/cf/conditional-formattings-xform.js","lib/xlsx/xform/sheet/cf/databar-xform.js","lib/xlsx/xform/sheet/cf/ext-lst-ref-xform.js","lib/xlsx/xform/sheet/cf/formula-xform.js","lib/xlsx/xform/sheet/cf/icon-set-xform.js","lib/xlsx/xform/sheet/col-xform.js","lib/xlsx/xform/sheet/data-validations-xform.js","lib/xlsx/xform/sheet/dimension-xform.js","lib/xlsx/xform/sheet/drawing-xform.js","lib/xlsx/xform/sheet/ext-lst-xform.js","lib/xlsx/xform/sheet/header-footer-xform.js","lib/xlsx/xform/sheet/hyperlink-xform.js","lib/xlsx/xform/sheet/merge-cell-xform.js","lib/xlsx/xform/sheet/merges.js","lib/xlsx/xform/sheet/outline-properties-xform.js","lib/xlsx/xform/sheet/page-breaks-xform.js","lib/xlsx/xform/sheet/page-margins-xform.js","lib/xlsx/xform/sheet/page-setup-properties-xform.js","lib/xlsx/xform/sheet/page-setup-xform.js","lib/xlsx/xform/sheet/picture-xform.js","lib/xlsx/xform/sheet/print-options-xform.js","lib/xlsx/xform/sheet/row-breaks-xform.js","lib/xlsx/xform/sheet/row-xform.js","lib/xlsx/xform/sheet/sheet-format-properties-xform.js","lib/xlsx/xform/sheet/sheet-properties-xform.js","lib/xlsx/xform/sheet/sheet-protection-xform.js","lib/xlsx/xform/sheet/sheet-view-xform.js","lib/xlsx/xform/sheet/table-part-xform.js","lib/xlsx/xform/sheet/worksheet-xform.js","lib/xlsx/xform/simple/boolean-xform.js","lib/xlsx/xform/simple/date-xform.js","lib/xlsx/xform/simple/integer-xform.js","lib/xlsx/xform/simple/string-xform.js","lib/xlsx/xform/static-xform.js","lib/xlsx/xform/strings/phonetic-text-xform.js","lib/xlsx/xform/strings/rich-text-xform.js","lib/xlsx/xform/strings/shared-string-xform.js","lib/xlsx/xform/strings/shared-strings-xform.js","lib/xlsx/xform/strings/text-xform.js","lib/xlsx/xform/style/alignment-xform.js","lib/xlsx/xform/style/border-xform.js","lib/xlsx/xform/style/color-xform.js","lib/xlsx/xform/style/dxf-xform.js","lib/xlsx/xform/style/fill-xform.js","lib/xlsx/xform/style/font-xform.js","lib/xlsx/xform/style/numfmt-xform.js","lib/xlsx/xform/style/protection-xform.js","lib/xlsx/xform/style/style-xform.js","lib/xlsx/xform/style/styles-xform.js","lib/xlsx/xform/style/underline-xform.js","lib/xlsx/xform/table/auto-filter-xform.js","lib/xlsx/xform/table/filter-column-xform.js","lib/xlsx/xform/table/table-column-xform.js","lib/xlsx/xform/table/table-style-info-xform.js","lib/xlsx/xform/table/table-xform.js","lib/xlsx/xlsx.js","lib/xlsx/xml/theme1.js","node_modules/@fast-csv/format/build/src/CsvFormatterStream.js","node_modules/@fast-csv/format/build/src/FormatterOptions.js","node_modules/@fast-csv/format/build/src/formatter/FieldFormatter.js","node_modules/@fast-csv/format/build/src/formatter/RowFormatter.js","node_modules/@fast-csv/format/build/src/formatter/index.js","node_modules/@fast-csv/format/build/src/index.js","node_modules/@fast-csv/format/build/src/types.js","node_modules/@fast-csv/parse/build/src/CsvParserStream.js","node_modules/@fast-csv/parse/build/src/ParserOptions.js","node_modules/@fast-csv/parse/build/src/index.js","node_modules/@fast-csv/parse/build/src/parser/Parser.js","node_modules/@fast-csv/parse/build/src/parser/RowParser.js","node_modules/@fast-csv/parse/build/src/parser/Scanner.js","node_modules/@fast-csv/parse/build/src/parser/Token.js","node_modules/@fast-csv/parse/build/src/parser/column/ColumnFormatter.js","node_modules/@fast-csv/parse/build/src/parser/column/ColumnParser.js","node_modules/@fast-csv/parse/build/src/parser/column/NonQuotedColumnParser.js","node_modules/@fast-csv/parse/build/src/parser/column/QuotedColumnParser.js","node_modules/@fast-csv/parse/build/src/parser/column/index.js","node_modules/@fast-csv/parse/build/src/parser/index.js","node_modules/@fast-csv/parse/build/src/transforms/HeaderTransformer.js","node_modules/@fast-csv/parse/build/src/transforms/RowTransformerValidator.js","node_modules/@fast-csv/parse/build/src/transforms/index.js","node_modules/@fast-csv/parse/build/src/types.js","node_modules/asn1.js/lib/asn1.js","node_modules/asn1.js/lib/asn1/api.js","node_modules/asn1.js/lib/asn1/base/buffer.js","node_modules/asn1.js/lib/asn1/base/index.js","node_modules/asn1.js/lib/asn1/base/node.js","node_modules/asn1.js/lib/asn1/base/reporter.js","node_modules/asn1.js/lib/asn1/constants/der.js","node_modules/asn1.js/lib/asn1/constants/index.js","node_modules/asn1.js/lib/asn1/decoders/der.js","node_modules/asn1.js/lib/asn1/decoders/index.js","node_modules/asn1.js/lib/asn1/decoders/pem.js","node_modules/asn1.js/lib/asn1/encoders/der.js","node_modules/asn1.js/lib/asn1/encoders/index.js","node_modules/asn1.js/lib/asn1/encoders/pem.js","node_modules/asn1.js/node_modules/bn.js/lib/bn.js","node_modules/base64-js/index.js","node_modules/bn.js/lib/bn.js","node_modules/brorand/index.js","node_modules/browserify-aes/aes.js","node_modules/browserify-aes/authCipher.js","node_modules/browserify-aes/browser.js","node_modules/browserify-aes/decrypter.js","node_modules/browserify-aes/encrypter.js","node_modules/browserify-aes/ghash.js","node_modules/browserify-aes/incr32.js","node_modules/browserify-aes/modes/cbc.js","node_modules/browserify-aes/modes/cfb.js","node_modules/browserify-aes/modes/cfb1.js","node_modules/browserify-aes/modes/cfb8.js","node_modules/browserify-aes/modes/ctr.js","node_modules/browserify-aes/modes/ecb.js","node_modules/browserify-aes/modes/index.js","node_modules/browserify-aes/modes/list.json","node_modules/browserify-aes/modes/ofb.js","node_modules/browserify-aes/streamCipher.js","node_modules/browserify-cipher/browser.js","node_modules/browserify-des/index.js","node_modules/browserify-des/modes.js","node_modules/browserify-rsa/index.js","node_modules/browserify-sign/algos.js","node_modules/browserify-sign/browser/algorithms.json","node_modules/browserify-sign/browser/curves.json","node_modules/browserify-sign/browser/index.js","node_modules/browserify-sign/browser/sign.js","node_modules/browserify-sign/browser/verify.js","node_modules/browserify-sign/node_modules/safe-buffer/index.js","node_modules/browserify/node_modules/buffer/index.js","node_modules/buffer-xor/index.js","node_modules/cipher-base/index.js","node_modules/core-util-is/lib/util.js","node_modules/create-ecdh/browser.js","node_modules/create-hash/browser.js","node_modules/create-hash/md5.js","node_modules/create-hmac/browser.js","node_modules/create-hmac/legacy.js","node_modules/crypto-browserify/index.js","node_modules/dayjs/dayjs.min.js","node_modules/dayjs/plugin/customParseFormat.js","node_modules/dayjs/plugin/utc.js","node_modules/des.js/lib/des.js","node_modules/des.js/lib/des/cbc.js","node_modules/des.js/lib/des/cipher.js","node_modules/des.js/lib/des/des.js","node_modules/des.js/lib/des/ede.js","node_modules/des.js/lib/des/utils.js","node_modules/diffie-hellman/browser.js","node_modules/diffie-hellman/lib/dh.js","node_modules/diffie-hellman/lib/generatePrime.js","node_modules/diffie-hellman/lib/primes.json","node_modules/elliptic/lib/elliptic.js","node_modules/elliptic/lib/elliptic/curve/base.js","node_modules/elliptic/lib/elliptic/curve/edwards.js","node_modules/elliptic/lib/elliptic/curve/index.js","node_modules/elliptic/lib/elliptic/curve/mont.js","node_modules/elliptic/lib/elliptic/curve/short.js","node_modules/elliptic/lib/elliptic/curves.js","node_modules/elliptic/lib/elliptic/ec/index.js","node_modules/elliptic/lib/elliptic/ec/key.js","node_modules/elliptic/lib/elliptic/ec/signature.js","node_modules/elliptic/lib/elliptic/eddsa/index.js","node_modules/elliptic/lib/elliptic/eddsa/key.js","node_modules/elliptic/lib/elliptic/eddsa/signature.js","node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","node_modules/elliptic/lib/elliptic/utils.js","node_modules/elliptic/package.json","node_modules/events/events.js","node_modules/evp_bytestokey/index.js","node_modules/fast-csv/build/src/index.js","node_modules/hash-base/index.js","node_modules/hash.js/lib/hash.js","node_modules/hash.js/lib/hash/common.js","node_modules/hash.js/lib/hash/hmac.js","node_modules/hash.js/lib/hash/ripemd.js","node_modules/hash.js/lib/hash/sha.js","node_modules/hash.js/lib/hash/sha/1.js","node_modules/hash.js/lib/hash/sha/224.js","node_modules/hash.js/lib/hash/sha/256.js","node_modules/hash.js/lib/hash/sha/384.js","node_modules/hash.js/lib/hash/sha/512.js","node_modules/hash.js/lib/hash/sha/common.js","node_modules/hash.js/lib/hash/utils.js","node_modules/hmac-drbg/lib/hmac-drbg.js","node_modules/ieee754/index.js","node_modules/immediate/lib/browser.js","node_modules/inherits/inherits_browser.js","node_modules/is-buffer/index.js","node_modules/isarray/index.js","node_modules/jszip/lib/base64.js","node_modules/jszip/lib/compressedObject.js","node_modules/jszip/lib/compressions.js","node_modules/jszip/lib/crc32.js","node_modules/jszip/lib/defaults.js","node_modules/jszip/lib/external.js","node_modules/jszip/lib/flate.js","node_modules/jszip/lib/generate/ZipFileWorker.js","node_modules/jszip/lib/generate/index.js","node_modules/jszip/lib/index.js","node_modules/jszip/lib/load.js","node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js","node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js","node_modules/jszip/lib/nodejsUtils.js","node_modules/jszip/lib/object.js","node_modules/jszip/lib/readable-stream-browser.js","node_modules/jszip/lib/reader/ArrayReader.js","node_modules/jszip/lib/reader/DataReader.js","node_modules/jszip/lib/reader/NodeBufferReader.js","node_modules/jszip/lib/reader/StringReader.js","node_modules/jszip/lib/reader/Uint8ArrayReader.js","node_modules/jszip/lib/reader/readerFor.js","node_modules/jszip/lib/signature.js","node_modules/jszip/lib/stream/ConvertWorker.js","node_modules/jszip/lib/stream/Crc32Probe.js","node_modules/jszip/lib/stream/DataLengthProbe.js","node_modules/jszip/lib/stream/DataWorker.js","node_modules/jszip/lib/stream/GenericWorker.js","node_modules/jszip/lib/stream/StreamHelper.js","node_modules/jszip/lib/support.js","node_modules/jszip/lib/utf8.js","node_modules/jszip/lib/utils.js","node_modules/jszip/lib/zipEntries.js","node_modules/jszip/lib/zipEntry.js","node_modules/jszip/lib/zipObject.js","node_modules/lie/lib/browser.js","node_modules/lodash.escaperegexp/index.js","node_modules/lodash.groupby/index.js","node_modules/lodash.isboolean/index.js","node_modules/lodash.isequal/index.js","node_modules/lodash.isfunction/index.js","node_modules/lodash.isnil/index.js","node_modules/lodash.isundefined/index.js","node_modules/lodash.uniq/index.js","node_modules/md5.js/index.js","node_modules/miller-rabin/lib/mr.js","node_modules/minimalistic-assert/index.js","node_modules/minimalistic-crypto-utils/lib/utils.js","node_modules/pako/index.js","node_modules/pako/lib/deflate.js","node_modules/pako/lib/inflate.js","node_modules/pako/lib/utils/common.js","node_modules/pako/lib/utils/strings.js","node_modules/pako/lib/zlib/adler32.js","node_modules/pako/lib/zlib/constants.js","node_modules/pako/lib/zlib/crc32.js","node_modules/pako/lib/zlib/deflate.js","node_modules/pako/lib/zlib/gzheader.js","node_modules/pako/lib/zlib/inffast.js","node_modules/pako/lib/zlib/inflate.js","node_modules/pako/lib/zlib/inftrees.js","node_modules/pako/lib/zlib/messages.js","node_modules/pako/lib/zlib/trees.js","node_modules/pako/lib/zlib/zstream.js","node_modules/parse-asn1/aesid.json","node_modules/parse-asn1/asn1.js","node_modules/parse-asn1/certificate.js","node_modules/parse-asn1/fixProc.js","node_modules/parse-asn1/index.js","node_modules/pbkdf2/browser.js","node_modules/pbkdf2/lib/async.js","node_modules/pbkdf2/lib/default-encoding.js","node_modules/pbkdf2/lib/precondition.js","node_modules/pbkdf2/lib/sync-browser.js","node_modules/pbkdf2/lib/to-buffer.js","node_modules/process-nextick-args/index.js","node_modules/process/browser.js","node_modules/public-encrypt/browser.js","node_modules/public-encrypt/mgf.js","node_modules/public-encrypt/privateDecrypt.js","node_modules/public-encrypt/publicEncrypt.js","node_modules/public-encrypt/withPublic.js","node_modules/public-encrypt/xor.js","node_modules/randombytes/browser.js","node_modules/randomfill/browser.js","node_modules/readable-stream/errors-browser.js","node_modules/readable-stream/lib/_stream_duplex.js","node_modules/readable-stream/lib/_stream_passthrough.js","node_modules/readable-stream/lib/_stream_readable.js","node_modules/readable-stream/lib/_stream_transform.js","node_modules/readable-stream/lib/_stream_writable.js","node_modules/readable-stream/lib/internal/streams/async_iterator.js","node_modules/readable-stream/lib/internal/streams/buffer_list.js","node_modules/readable-stream/lib/internal/streams/destroy.js","node_modules/readable-stream/lib/internal/streams/end-of-stream.js","node_modules/readable-stream/lib/internal/streams/from-browser.js","node_modules/readable-stream/lib/internal/streams/pipeline.js","node_modules/readable-stream/lib/internal/streams/state.js","node_modules/readable-stream/lib/internal/streams/stream-browser.js","node_modules/readable-stream/readable-browser.js","node_modules/ripemd160/index.js","node_modules/safe-buffer/index.js","node_modules/safer-buffer/safer.js","node_modules/saxes/saxes.js","node_modules/set-immediate-shim/index.js","node_modules/sha.js/hash.js","node_modules/sha.js/index.js","node_modules/sha.js/sha.js","node_modules/sha.js/sha1.js","node_modules/sha.js/sha224.js","node_modules/sha.js/sha256.js","node_modules/sha.js/sha384.js","node_modules/sha.js/sha512.js","node_modules/stream-browserify/index.js","node_modules/stream-browserify/node_modules/readable-stream/duplex-browser.js","node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js","node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js","node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js","node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js","node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js","node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/BufferList.js","node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js","node_modules/stream-browserify/node_modules/readable-stream/passthrough.js","node_modules/stream-browserify/node_modules/readable-stream/readable-browser.js","node_modules/stream-browserify/node_modules/readable-stream/transform.js","node_modules/stream-browserify/node_modules/readable-stream/writable-browser.js","node_modules/string_decoder/lib/string_decoder.js","node_modules/timers-browserify/main.js","node_modules/util-deprecate/browser.js","node_modules/util/node_modules/inherits/inherits_browser.js","node_modules/util/support/isBufferBrowser.js","node_modules/util/util.js","node_modules/uuid/dist/index.js","node_modules/uuid/dist/md5-browser.js","node_modules/uuid/dist/nil.js","node_modules/uuid/dist/parse.js","node_modules/uuid/dist/regex.js","node_modules/uuid/dist/rng-browser.js","node_modules/uuid/dist/sha1-browser.js","node_modules/uuid/dist/stringify.js","node_modules/uuid/dist/v1.js","node_modules/uuid/dist/v3.js","node_modules/uuid/dist/v35.js","node_modules/uuid/dist/v4.js","node_modules/uuid/dist/v5.js","node_modules/uuid/dist/validate.js","node_modules/uuid/dist/version.js","node_modules/xmlchars/xml/1.0/ed5.js","node_modules/xmlchars/xml/1.1/ed2.js","node_modules/xmlchars/xmlns/1.0/ed3.js"],"names":["f","exports","module","define","amd","window","global","self","this","ExcelJS","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","fs","fastCsv","customParseFormat","utc","dayjs","extend","StreamBuf","exists","SpecialValues","true","false","#N/A","error","#REF!","#NAME?","#DIV/0!","#NULL!","#VALUE!","#NUM!","CSV","workbook","_classCallCheck","worksheet","filename","options","concat","stream","createReadStream","read","close","_this","Promise","resolve","reject","addWorksheet","sheetName","dateFormats","map","datum","datumNumber","Number","isNaN","Infinity","dt","reduce","matchingDate","currentDateFormat","dayjsObj","isValid","Date","valueOf","special","undefined","csvStream","parse","parserOptions","on","data","addRow","emit","pipe","_this2","getWorksheet","sheetId","format","formatterOptions","_options","dateFormat","dateUTC","value","text","hyperlink","formula","result","_typeof","JSON","stringify","includeEmptyRows","lastRow","eachRow","row","rowNumber","write","values","shift","end","streamOptions","encoding","createWriteStream","colCache","Anchor","address","offset","arguments","decoded","decodeAddress","nativeCol","col","nativeColOff","nativeRow","nativeRowOff","model","Math","min","colWidth","v","floor","rowHeight","getColumn","isCustomWidth","width","getRow","height","_","Enums","slideFormula","Note","Cell","column","_row","_column","validateAddress","_address","_value","Value","create","Types","Null","style","_mergeStyle","_mergeCount","rowStyle","colStyle","numFmt","font","alignment","border","fill","protection","toCsvString","master","ignoreStyle","release","Merge","type","isMergedTo","String","Hyperlink","name","definedNames","addEx","fullAddress","removeEx","removeAllNames","number","letter","effectiveType","getType","_comment","note","toString","escapeHtml","formulaType","names","getNamesEx","forEach","dataValidations","_dataValidations","find","add","comment","fromModel","ValueType","NullValue","cell","NumberValue","StringValue","replace","RichTextValue","richText","join","RichText","DateValue","toISOString","HyperlinkValue","tooltip","MergeValue","_master","addMergeRef","releaseMergeRef","FormulaValue","Formula","shareType","ref","sharedFormula","copy","cp","_translatedFormula","findCell","_copyModel","ranges","match","cells","_getTranslatedFormula","FormulaType","Master","Shared","None","SharedStringValue","SharedString","BooleanValue","Boolean","ErrorValue","JSONValue","rawValue","sharedString","types","T","Column","defn","_worksheet","_number","columns","cols","index","isDefault","equivalentTo","max","hidden","outlineLevel","collapsed","push","count","key","headers","other","isEqual","iteratee","colNumber","getCell","eachCell","n2l","header","_header","_hidden","_key","Array","getColumnKey","deleteColumnKey","setColumnKey","_outlineLevel","properties","outlineLevelCol","s","hasOwnProperty","_applyStyle","DataValidations","validation","CellMatrix","Range","rangeRegexp","DefinedNames","matrixMap","locStr","location","decodeEx","matrix","getMatrix","top","left","right","bottom","addCellEx","removeCellEx","each","callback","addressStr","findCellEx","filter","mark","x","y","range","vGrow","yy","edge","findCellAt","hGrow","xx","_explore","$shortRange","forEachInSheet","start","numDelete","numInsert","spliceRows","normaliseMatrix","_this3","spliceColumns","_this4","getRanges","definedName","rangeStr","test","split","pop","addCell","RelationshipType","OfficeDocument","Worksheet","CalcChain","SharedStrings","Styles","Theme","DocumentType","Xlsx","ReadingOrder","LeftToRight","RightToLeft","NotApplicable","Ref","Name","DivZero","Num","Image","imageId","hyperlinks","tl","br","ext","editAs","_ref","decode","texts","deepMerge","DEFAULT_CONFIGS","Object","keys","margins","insetmode","inset","locked","lockText","l","b","setTLBR","argv","tlbr","dimensions","expand","containsEx","cb","encodeAddress","_serialisedSheetName","$t$l","$b$r","$range","Row","_cells","_commitRow","l2n","getCellEx","nKeep","_len","inserts","cSrc","cDst","nExpand","nEnd","includeEmpty","lft","rght","ws","pb","id","man","rowBreaks","item","eachColumnKey","some","outlineLevelRow","cellModel","previousAddress","$col$row","table","cacheState","_set","filterButton","totalsRowLabel","totalsRowFunction","totalsRowResult","totalsRowFormula","Table","validate","store","assign","dflt","assert","message","rows","_table$tl","filterHeight","tableHeight","autoFilterRef","encode","tableRef","getFormula","assignStyle","_table$tl2","headerRow","j","totalsRow","_r","_table$tl3","_r2","_cache","_i","_j","_i2","_row2","_j2","splice","rowIndex","colIndex","target","prop","_assign","displyName","displayName","showFirstColumn","showLastColumn","showRowStripes","showColumnStripes","XLSX","Workbook","created","modified","calcProperties","_worksheets","views","media","_definedNames","nextId","console","warn","substring","toLowerCase","trace","tabColor","argb","theme","indexed","lastOrderNo","acc","orderNo","worksheetOptions","destroy","worksheets","sheet","_themes","image","_xlsx","_csv","slice","sort","creator","lastModifiedBy","lastPrinted","sheets","company","manager","title","subject","keywords","category","description","language","revision","contentStatus","themes","worksheetModel","state","findIndex","Encryptor","_rows","_columns","_keys","_merges","_workbook","defaultRowHeight","dyDescent","pageSetup","footer","orientation","horizontalDpi","verticalDpi","fitToPage","fitToWidth","fitToHeight","scale","pageOrder","blackAndWhite","draft","cellComments","errors","paperSize","showRowColHeaders","showGridLines","firstPageNumber","horizontalCentered","verticalCentered","colBreaks","headerFooter","differentFirst","differentOddEven","oddHeader","oddFooter","evenHeader","evenFooter","firstHeader","firstFooter","autoFilter","_media","sheetProtection","tables","conditionalFormattings","removeWorksheetEx","nRows","_loop","rowArguments","insert","apply","_i3","rowNo","_nextRow","_setStyleOption","pos","_toConsumableArray","findRow","_copyStyle","getRows","src","dest","styleEmpty","rSrc","rDst","freeze","_objectSpread","rowNum","_loop2","_len2","_key2","nInserts","constructor","cellToBeMerged","prevMaster","newMaster","merge","hasValues","getAddress","_len3","_key3","_mergeCellsInternal","_len4","_key4","intersects","unmerge","_len5","_key5","_unMergeMaster","results","getResult","masterAddress","isShared","isArray","first","m","password","_this5","spinCount","isFinite","round","algorithmName","saltValue","randomBytes","hashValue","convertPasswordToHash","cf","Function","_this6","rowModel","_this7","mergeCells","mergeCellsWithoutStyle","rowDims","_this8","_headerRowCount","pv","cv","headerCount","columnCount","maxCount","cellCount","counts","_lastRowNumber","medium","toModel","merges","_this9","_parseRows","_parseMergeCells","textDecoder","TextDecoder","bufferToString","chunk","textEncoder","TextEncoder","Buffer","stringToBuffer","str","from","buffer","template","getCellAt","findSheet","findSheetRow","findRowCell","addressRegex","_dictionary","_l2nFill","_l2n","_n2l","_level","_fill","level","l1","l2","l3","_hash","addr","char","hasCol","hasRow","charCodeAt","parts","groups","reference","startsWith","inRange","_range","_slicedToArray","crypto","hash","algorithm","createHash","buffers","update","digest","hashAlgorithm","getHashes","indexOf","passwordBuffer","iterator","alloc","writeUInt32LE","size","SaxesParser","PassThrough","regeneratorRuntime","_callee","iterable","saxesParser","events","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","wrap","_context","prev","next","Symbol","asyncIterator","err","eventType","_asyncIterator","_awaitAsyncGenerator","sent","done","t0","return","finish","stop","_x","replacementCandidateRx","CRrx","fromCell","toCell","to","refMatch","sheetMaybe","addrPart","trailingParen","exec","colDollar","colStr","toUpperCase","rowDollar","rowStr","parseInt","Stream","utils","StringBuf","StringChunk","_data","_encoding","targetOffset","toBuffer","_buffer","StringBufChunk","_buf","BufferChunk","ReadWriteBuf","iRead","iWrite","buf","bufSize","batch","corked","inPos","outPos","pipes","paused","inherits","Duplex","rwBuf","_getWritableBuffer","last","full","_pipe","_asyncToGenerator","all","_writeToBuffers","inLen","_callee2","_context2","nop","ArrayBuffer","process","nextTick","abrupt","cork","_flush","uncork","writeComplete","eod","setEncoding","pause","resume","isPaused","destination","unpipe","unshift","_inPos","position","_grow","inBuf","capacity","prototype","escapeHtmlRegex","obj","every","keyBy","aType","bType","aArray","bArray","aValue","bValue","html","regexResult","escape","lastIndex","charAt","strcmp","isUndefined","val","isObject","clone","copyIsArray","assignValue","xmlDecodeRegex","promiseImmediate","setImmediate","setTimeout","cls","superCtor","statics","super_","defineProperty","getOwnPropertyDescriptor","enumerable","writable","configurable","dateToExcel","d","date1904","getTime","excelToDate","millisecondSinceEpoch","parsePath","filepath","lastIndexOf","path","getRelsPath","xmlEncode","charCode","xmlDecode","validInt","isDateFmt","fmt","access","constants","F_OK","toIsoDateString","toIsoString","subsstr","pushAttribute","xml","pushAttributes","attributes","XmlStream","_xml","_stack","_rollbacks","docAttributes","parent","tos","open","leaf","attrs","node","openNode","writeText","closeNode","stack","cursor","closeAll","StdDocAttributes","version","standalone","JSZip","ZipWriter","_super","compression","zip","base64","file","browser","generateAsync","content","EventEmitter","0","2","3","4","9","10","11","12","13","14","15","16","17","18","19","20","21","22","27","zh-tw","zh-cn","ja-jp","ko-kr","28","29","30","31","32","33","34","35","36","37","38","39","40","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","th-th","60","61","62","67","68","69","70","81","CoreProperties","ExtenderProperties","Comments","VmlDrawing","parseSax","BaseXform","xform","reset","saxParser","parseOpen","parseText","parseClose","xmlStream","render","toXml","always","toAttribute","attr","parseFloat","DefinedNamesXform","localSheetId","_parsedName","_parsedLocalSheetId","_parsedText","extractRanges","isValidRange","parsedText","quotesOpened","quotes","quotesEven","WorksheetXform","leafNode","r:id","rId","WorkbookCalcPropertiesXform","calcId","fullCalcOnLoad","WorksheetPropertiesXform","defaultThemeVersion","filterPrivacy","WorkbookViewXform","xWindow","yWindow","windowWidth","windowHeight","firstSheet","activeTab","visibility","addN","StaticXform","ListXform","DefinedNameXform","SheetXform","WorkbookPropertiesXform","WorkbookXform","fileVersion","STATIC_XFORMS","workbookPr","bookViews","tag","childXform","calcPr","printAreas","printArea","printAreaComponents","printTitlesRow","printTitlesColumn","titlesColumns","titlesRows","openXml","WORKBOOK_ATTRIBUTES","parser","rels","workbookRels","rel","Id","worksheetHash","Target","rangeString","dollarRegex","rowRangeMatches","columnRangeMatches","_range2","xmlns","xmlns:r","xmlns:mc","mc:Ignorable","xmlns:x15","$","appName","lastEdited","lowestEdited","rupBuild","RichTextXform","CommentXform","richTextXform","_richTextXform","authorId","CommentsXform","COMMENTS_ATTRIBUTES","comments","VmlPositionXform","_model","VmlProtectionXform","VmlAnchorXform","anchor","lf","tf","rf","rect","getAnchorRect","getDefaultRect","refAddress","POSITION_TYPE","VmlClientDataXform","x:Anchor","x:Locked","x:LockText","x:SizeWithCells","x:MoveWithCells","_model$note","ObjectType","normalizeModel","len","VmlShapeXform","VmlNotesXform","v:shape","DRAWING_ATTRIBUTES","v:ext","coordsize","o:spt","joinstyle","gradientshapeok","o:connecttype","anchors","reconcile","xmlns:v","xmlns:o","xmlns:x","VmlTextboxXform","v:textbox","x:ClientData","V_SHAPE_ATTRIBUTES","color2","color","obscured","fillcolor","strokecolor","o:insetmode","multiple","unit","toFixed","margin","conversionUnit","reverseConversionUnit","CompositeXform","createNewModel","onParserClose","AppHeadingPairsXform","baseType","AppTitlesOfPartsXform","StringXform","AppTitleOfPartsXform","AppXform","Company","Manager","HeadingPairs","TitleOfParts","PROPERTY_ATTRIBUTES","DateFormat","DateAttrs","xsi:type","xmlns:vt","ContentTypesXform","mediaHash","imageType","extension","Extension","ContentType","PartName","sharedStrings","drawings","drawing","commentRefs","commentName","DateXform","IntegerXform","CoreXform","dc:creator","dc:title","dc:subject","dc:description","dc:identifier","dc:language","cp:keywords","cp:category","cp:lastModifiedBy","cp:lastPrinted","cp:revision","cp:version","cp:contentStatus","cp:contentType","dcterms:created","dcterms:modified","CORE_PROPERTY_ATTRIBUTES","identifier","contentType","xmlns:cp","xmlns:dc","xmlns:dcterms","xmlns:dcmitype","xmlns:xsi","RelationshipXform","RelationshipsXform","Relationship","_values","RELATIONSHIPS_ATTRIBUTES","relationship","BaseCellAnchorXform","mediaId","mediaIndex","BlipXform","BlipFillXform","a:blip","r:embed","cstate","CNvPicPrXform","noChangeAspect","HlickClickXform","ExtLstXform","CNvPrXform","a:hlinkClick","a:extLst","CellPositionXform","xdr:col","zero","xdr:colOff","xdr:row","xdr:rowOff","TwoCellAnchorXform","OneCellAnchorXform","DrawingXform","xdr:twoCellAnchor","xdr:oneCellAnchor","anchorType","getAnchorType","prepare","xmlns:xdr","xmlns:a","uri","xmlns:a16","ExtXform","addAttribute","cx","cy","HLinkClickXform","NvPicPrXform","xdr:cNvPr","xdr:cNvPicPr","PicXform","xdr:from","xdr:ext","xdr:pic","xdr:clientData","picture","reconcilePicture","spPrJSON","xdr:nvPicPr","xdr:blipFill","xdr:spPr","mergeModel","prst","xdr:to","empty","$count","maxItems","childModel","AutoFilterXform","firstAddress","secondAddress","getValueType","CellXform","richTextXForm","styleId","styles","addStyleModel","getEffectiveCellType","ssId","si","siFormulae","formulae","expandToAddress","renderFormula","currentNode","getStyleModel","getString","hyperlinkMap","commentsMap","CfIconExtXform","iconSet","iconId","toIntValue","uuidv4","v4","DatabarExtXform","IconSetExtXform","extIcons","3Triangles","3Stars","5Boxes","CfRuleExtXform","x14:dataBar","databarXform","x14:iconSet","iconSetXform","rule","isExt","custom","x14Id","renderDataBar","renderIconSet","priority","FExtXform","CfvoExtXform","xm:f","fExtXform","SqRefExtXform","ConditionalFormattingExtXform","xm:sqref","sqRef","x14:cfRule","cfRule","rules","xmlns:xm","ConditionalFormattingsExtXform","x14:conditionalFormatting","cfXform","hasExtContent","hasContent","ColorXform","x14:cfvo","cfvoXform","x14:borderColor","borderColorXform","x14:negativeBorderColor","negativeBorderColorXform","x14:negativeFillColor","negativeFillColorXform","x14:axisColor","axisColorXform","gradient","minLength","toIntAttribute","maxLength","toBoolAttribute","negativeBarColorSameAsPositive","negativeBarBorderColorSameAsPositive","axisPosition","direction","cfvo","borderColor","negativeBorderColor","negativeFillColor","axisColor","toBoolValue","toStringValue","x14:cfIcon","cfIconXform","toStringAttribute","reverse","showValue","icons","icon","SqrefExtXform","DatabarXform","ExtLstRefXform","FormulaXform","ColorScaleXform","IconSetXform","CfRuleXform","dataBar","extLst","extLstRefXform","formulaXform","colorScale","colorScaleXform","renderExpression","renderCellIs","renderTop10","renderAboveAverage","renderColorScale","renderText","renderTimePeriod","dxfId","operator","percent","rank","aboveAverage","isPrimitive","getTextFormula","timePeriod","getTimePeriodFormula","opType","CfvoXform","toFloatValue","colorXform","ConditionalFormattingXform","sqref","ConditionalFormattingsXform","nextPriority","addDxfStyle","getDxfStyle","X14IdXform","_super2","x14:id","idXform","xmlns:x14","_super3","ColXform","bestFit","defaultValue","assignBool","parseBool","DataValidationsXform","optimizedModel","dvList","dataValidation","marked","dvMap","matchCol","otherAddress","dv","optimiseDataValidations","allowBlank","showInputMessage","promptTitle","prompt","showErrorMessage","errorStyle","errorTitle","_dataValidation","_formula","includes","forEachAddress","DimensionXform","ConditionalFormattingsExt","x14:conditionalFormattings","HeaderFooterXform","addRollback","createTag","commit","rollback","HyperlinkXform","MergeCellXform","Merges","isDefined","OutlinePropertiesXform","summaryBelow","summaryRight","PageBreaksXform","PageMarginsXform","PageSetupPropertiesXform","booleanToXml","pageOrderToXml","cellCommentsToXml","errorsToXml","PageSetupXform","useFirstPageNumber","usePrinterDefaults","copies","PictureXform","PrintOptionsXform","headings","gridLines","RowBreaksXform","RowXform","cellXform","numRowsSeen","spans","span","ht","SheetFormatPropertiesXform","x14ac:dyDescent","defaultColWidth","customHeight","SheetPropertiesXform","pageSetUpPr","outlinePr","inner","outlineProperties","xmlToBoolean","equals","SheetProtectionXform","selectLockedCells","selectUnlockedCells","formatCells","formatColumns","formatRows","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","pivotTables","objects","scenarios","VIEW_STATES","frozen","frozenSplit","SheetViewXform","workbookViewId","topLeftCell","xSplit","ySplit","activePane","included","rightToLeft","tabSelected","showRuler","zoomScale","zoomScaleNormal","pane","activeCell","sheetView","view","selections","selection","topLeft","TablePartXform","RelType","ExtListXform","mergeConditionalFormattings","extModel","cfMap","ruleMap","extCf","extRule","extValue","mergeRule","WorkSheetXform","maxRows","maxCols","sheetPr","dimension","sheetViews","sheetFormatPr","sheetData","pageMargins","printOptions","tableParts","conditionalFormatting","nextRid","Type","TargetMode","vmlDrawing","bookImage","drawingRelsHash","background","drawingsCount","rIdImage","preImageId","rIdHyperLink","WORKSHEET_ATTRIBUTES","sheetFormatPropertiesModel","sheetPropertiesModel","pageMarginsModel","printOptionsModel","sheetProtectionModel","sheetProperties","relationships","h","vmlComment","vmlDrawings","drawingName","backgroundRel","tablePart","xmlns:x14ac","BooleanXform","_format","_parse","addAttributes","build","child","writeXml","TextXform","PhoneticTextXform","sb","eb","rt","FontXform","fontXform","textXform","_textXform","_fontXform","FONT_OPTIONS","tagName","fontNameTag","SharedStringXform","rPh","SharedStringsXform","rich","addRichText","addText","sharedStringXform","uniqueCount","sx","_sharedStringXform","_text","$0","$1","fromCharCode","horizontalValues","horizontal","verticalValues","vertical","wrapText","shrinkToFit","textRotation","indent","readingOrder","textRotationXform","tr","AlignmentXform","valid","truthy","EdgeXform","defaultColor","validStyleValues","BorderXform","diagonal","edgeModel","edgeXform","up","down","diagonalUp","diagonalDown","extensions","tint","rgb","FillXform","NumFmtXform","ProtectionXform","DxfXform","StopXform","PatternFillXform","fgColor","bgColor","pattern","patternType","GradientFillXform","degree","center","stopXform","stops","stopModel","_super4","patternFill","gradientFill","validPatternValues","UnderlineXform","OPTIONS","charset","condense","family","outline","vertAlign","scheme","shadow","strike","sz","defaultNumFormats","defaultFmtHash","dnf","formatCode","numFmtId","getDefaultFmtId","getDefaultFmtCode","isSignificant","StyleXform","xfId","fontId","fillId","borderId","StylesXform","initialise","numFmts","fonts","x14ac:knownFonts","fills","borders","cellStyleXfs","cellXfs","dxfs","cellStyles","tableStyles","init","numFmtNextId","initIndex","_addBorder","_addStyle","_addFill","weakMap","WeakMap","STYLESHEET_ATTRIBUTES","numFmtXml","_addFont","fontXml","fillXml","borderXml","styleXml","propName","numFmtIndex","cellType","has","get","_addNumFmtStr","set","addStyle","group","part","xmlns:x16r2","builtinId","defaultTableStyle","defaultPivotStyle","defaultSlicerStyle","defaultTimelineStyle","StylesXformMock","autodrain","dateStyleId","_dateStyleId","dateStyle","Mock","Attributes","single","double","singleAccounting","doubleAccounting","FilterColumnXform","filterColumn","colId","hiddenButton","TableColumnXform","TableStyleInfoXform","TableXform","tableColumns","tableStyleInfo","TABLE_ATTRIBUTES","totalsRowCount","totalsRowShown","headerRowCount","xmlns:xr","xmlns:xr3","ZipStream","theme1Xml","fsReadFileAsync","readFile","parseStream","workbookXform","worksheetXform","drawingXform","tableXform","drawingOptions","drawingRel","drawingRels","tableOptions","sheetOptions","worksheetRels","sheetNo","globalRels","sheetDefs","entry","lastDot","substr","streamBuf","chunks","load","loadAsync","files","dir","entryName","async","writableObjectMode","readableObjectMode","parseRels","parseWorkbook","appXform","appProperties","coreXform","coreProperties","_processWorksheetEntry","_processWorksheetRelsEntry","_processThemeEntry","_processMediaEntry","_processDrawingEntry","_processCommentEntry","_processTableEntry","_processDrawingRelsEntry","_processVmlDrawingEntry","_callee13","dataimg64","_context13","append","_x38","relsXform","tableXml","theme1","relationshipsXform","commentsXform","vmlNotesXform","finalize","useSharedStrings","useStyles","tableCount","prepareModel","addContentTypes","addOfficeRels","addWorkbookRels","addWorksheets","addSharedStrings","addDrawings","addTables","addThemes","addStyles","addMedia","addApp","addCore","addWorkbook","_finalize","then","_defineProperties","props","descriptor","_setPrototypeOf","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_possibleConstructorReturn","ReferenceError","_assertThisInitialized","getPrototypeOf","CsvFormatterStream","stream_1","formatter_1","_stream_1$Transform","subClass","superClass","TypeError","_inherits","Constructor","protoProps","staticProps","instance","objectMode","hasWrittenBOM","rowFormatter","RowFormatter","writeBOM","transformFunction","rowTransform","cbCalled","BOM","Transform","FormatterOptions","_a","opts","delimiter","rowDelimiter","quote","quoteColumns","quoteHeaders","includeEndRowDelimiter","alwaysWriteHeaders","shouldWriteHeaders","writeHeaders","escapedQuote","__importDefault","mod","__esModule","default","FieldFormatter","lodash_isboolean_1","lodash_isnil_1","lodash_escaperegexp_1","_headers","REPLACE_REGEXP","RegExp","escapePattern","ESCAPE_REGEXP","fieldIndex","isHeader","quoteConfig","field","preparedField","quoteField","search","shouldQuote","lodash_isfunction_1","lodash_isequal_1","FieldFormatter_1","types_1","rowCount","fieldFormatter","hasWrittenHeaders","transform","isHashArray","it","isSyncTransform","transformedRow","callTransformer","_this$checkHeaders","checkHeaders","shouldFormatColumns","gatherColumns","gatherHeaders","_rowTransform","isHeadersRow","formattedCols","createTransform","RowFormatter_1","__createBinding","k","k2","__setModuleDefault","__importStar","__exportStar","writeToPath","writeToString","writeToBuffer","writeToStream","util_1","FormatterOptions_1","CsvFormatterStream_1","CsvFormatterStream_2","FormatterOptions_2","promiseWrite","promisify","catch","Writable","enc","writeCb","res","rej","_get","property","receiver","base","object","_superPropBase","desc","CsvParserStream","string_decoder_1","transforms_1","parser_1","lines","parsedRowCount","parsedLineCount","endEmitted","headersEmitted","Parser","headerTransformer","HeaderTransformer","decoder","StringDecoder","rowTransformerValidator","RowTransformerValidator","validateFunction","rowValidator","event","_get2","rest","hasHitRowLimit","newLine","processRows","hasMoreData","_this$parser$parse","line","rowsLength","iterate","callNext","checkAndEmitHeaders","shouldSkipLine","nextRowCount","transformRow","transformResult","pushRow","reason","parsedRow","withHeaders","shouldEmitRows","transformAndValidate","skipRow","limitRows","skipRows","skipLines","ParserOptions","ignoreEmpty","escapeChar","supportsComments","ltrim","rtrim","trim","renameHeaders","strictColumnHandling","discardUnmappedColumns","carriageReturn","escapedDelimiter","NEXT_TOKEN_REGEXP","parseString","parseFile","ParserOptions_1","CsvParserStream_1","CsvParserStream_2","ParserOptions_2","args","string","rs","Readable","Scanner_1","RowParser_1","Token_1","EMPTY_ROW_REGEXP","rowParser","RowParser","scanner","Scanner","removeBOM","parseWithComments","parseWithoutComments","shouldContinue","parseRow","nextToken","nextCharacterToken","Token","isTokenComment","advancePastLine","lineFromCursor","hasMoreCharacters","truncateToCursor","nextNonSpaceToken","column_1","_Token_1$Token","isTokenRowDelimiter","isTokenCarriageReturn","isTokenDelimiter","columnParser","ColumnParser","currentScanner","currentToken","getStartToken","advancePastToken","shouldSkipColumnParse","ROW_DELIMITER","lineLength","token","startCursor","endCursor","regex","tokenArgs","ColumnFormatter","trimLeft","trimRight","NonQuotedColumnParser_1","QuotedColumnParser_1","quotedColumnParser","QuotedColumnParser","nonQuotedColumnParser","NonQuotedColumnParser","isTokenQuote","advanceToToken","ColumnFormatter_1","columnFormatter","characters","isTokenEscapeCharacter","originalCursor","_this$gatherDataBetwe","gatherDataBetweenQuotes","foundClosingQuote","advanceTo","checkForMalformedColumn","foundStartingQuote","isQuote","tokenFollowingEscape","isNextTokenADelimiter","isNextTokenARowDelimiter","linePreview","ColumnParser_1","Parser_1","lodash_isundefined_1","lodash_uniq_1","lodash_groupby_1","receivedHeaders","shouldUseFirstRow","processedFirstRow","headersLength","setHeaders","headersTransform","shouldMapRow","processRow","mapHeaders","rowMap","filteredHeaders","grouped","duplicates","dup","_rowValidator","transformed","isSyncValidate","transformErr","callValidator","validateErr","validationResult","createValidator","RowTransformerValidator_1","HeaderTransformer_1","asn1","bignum","decoders","encoders","Entity","body","_createNamed","Base","Generated","entity","_initNamed","_getDecoder","_getEncoder","reporter","Reporter","DecoderBuffer","isBuffer","EncoderBuffer","isEncoderBuffer","byteLength","isDecoderBuffer","save","restore","isEmpty","readUInt8","skip","raw","fail","bytes","_reporterState","out","Node","tags","methods","_baseState","children","reverseArgs","choice","optional","any","use","useDecoder","explicit","implicit","contains","_wrap","stateProps","method","_init","equal","_useArgs","arg","def","num","newKey","_decode","input","wrapResult","prevObj","present","prevKey","enterKey","_peekTag","isError","_decodeGeneric","_decodeChoice","enterObject","_decodeTag","_save","track","_getUse","leaveObject","exitKey","leaveKey","_decodeList","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","_use","_createEncoderBuffer","_encode","_encodeValue","_skipDefault","primitive","_encodeChoice","_encodePrimitive","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","_isPrintstr","ReporterError","msg","rethrow","pathLen","now","inherited","elem","partial","captureStackTrace","tagClass","tagClassByName","5","6","7","8","23","24","25","26","tagByName","_reverse","der","DERDecoder","tree","DERNode","derDecodeTag","oct","tagStr","derDecodeLen","decodedTag","_skipUntilEnd","possibleEnd","unused","readUInt16BE","numstr","printstr","relative","identifiers","ident","subident","second","tmp","year","mon","day","hour","sec","UTC","pem","PEMDecoder","label","re","DEREncoder","two","encodedTag","encodeTag","lenOctets","writeUInt16BE","objid","_i4","_ident","time","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","toArray","sign","_size","_out","_i5","dataBuffer","defaultBuffer","PEMEncoder","ctor","TempCtor","BN","endian","isBN","negative","words","red","wordSize","parseHex","parseBase","mul","cmp","_initNumber","_initArray","_parseHex","_parseBase","strip","ceil","w","off","limbLen","limbPow","total","word","imuln","_iaddn","pow","_expand","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","lo","carry","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","ret","toJSON","toArrayLike","ArrayType","reqLength","littleEndian","q","andln","iushrn","clz32","_countBits","_zeroBits","bitLength","hi","zeroBits","toTwos","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","sub","comb10MulTo","mid","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","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","ie","ro","io","rx","guessLen13b","odd","conjugate","normalize13b","convert13b","stub","ph","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","hint","extended","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","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","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","_strip","output","outLen","mod3","one","nOne","lpow","z","inv","wnd","current","currentLen","mont","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","arr","Arr","_byteLength","curByte","revLookup","fromByteArray","uint8","extraBytes","len2","encodeChunk","lookup","Uint8Array","move","_move","for","modrn","allocUnsafe","allocate","_toArrayLikeLE","_toArrayLikeBE","isNegNum","Rand","rand","generate","_rand","getBytes","getByte","getRandomValues","msCrypto","asUInt32Array","readUInt32BE","scrubVec","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","xi","x4","x8","AES","_reset","blockSize","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","writeUInt32BE","decryptBlock","m1","scrub","aes","GHASH","incr32","StreamCipher","iv","decrypt","_cipher","ck","_ghash","_finID","ghash","toPad","ivBits","tail","writeUIntBE","calcIv","_prev","_secCache","_decrypt","_alen","_mode","_authTag","_called","_update","rump","encrypt","_final","final","xorTest","getAuthTag","setAuthTag","setAAD","ciphers","deciphers","modes","createCipher","Cipher","createCipheriv","Cipheriv","createDecipher","Decipher","createDecipheriv","Decipheriv","listCiphers","getCiphers","AuthCipher","MODES","ebtk","Splitter","_last","_autopadding","cache","suite","config","thing","flush","padded","unpad","setAutoPadding","setTo","autoPadding","PADDING","padBuff","writeUInt8","ZEROES","fromArray","block","_multiply","lsbVi","Vi","Zi","abl","bl","pad","encryptStart","encryptByte","byteParam","shiftIn","getBlock","chunkNum","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","aes-128-ecb","cipher","aes-192-ecb","aes-256-ecb","aes-128-cbc","aes-192-cbc","aes-256-cbc","aes128","aes192","aes256","aes-128-cfb","aes-192-cfb","aes-256-cfb","aes-128-cfb8","aes-192-cfb8","aes-256-cfb8","aes-128-cfb1","aes-192-cfb1","aes-256-cfb1","aes-128-ofb","aes-192-ofb","aes-256-ofb","aes-128-ctr","aes-192-ctr","aes-256-ctr","aes-128-gcm","aes-192-gcm","aes-256-gcm","DES","aesModes","desModes","keyLen","ivLen","CipherBase","des","des-ede3-cbc","instantiate","EDE","des-ede3","des-ede-cbc","des-ede","des-cbc","des-ecb","modeName","_des","des3","bn","crt","priv","blinds","getr","blinder","modulus","publicExponent","unblinder","blind","blinded","c1","prime1","c2","prime2","qinv","coefficient","exponent1","m2","exponent2","sha224WithRSAEncryption","RSA-SHA224","sha256WithRSAEncryption","RSA-SHA256","sha384WithRSAEncryption","RSA-SHA384","sha512WithRSAEncryption","RSA-SHA512","RSA-SHA1","ecdsa-with-SHA1","sha256","sha224","sha384","sha512","DSA-SHA","DSA-SHA1","DSA","DSA-WITH-SHA224","DSA-SHA224","DSA-WITH-SHA256","DSA-SHA256","DSA-WITH-SHA384","DSA-SHA384","DSA-WITH-SHA512","DSA-SHA512","DSA-RIPEMD160","ripemd160WithRSA","RSA-RIPEMD160","md5WithRSAEncryption","RSA-MD5","1.3.132.0.10","1.3.132.0.33","1.2.840.10045.3.1.1","1.2.840.10045.3.1.7","1.3.132.0.34","1.3.132.0.35","verify","algorithms","Sign","_hashType","_tag","_signType","Verify","createSign","createVerify","_write","sig","createHmac","EC","ec","parseKeys","curves","getKey","algo","hlen","hbits","bits2int","bits2octets","obits","makeKey","kv","makeR","hashType","signType","curve","curveId","keyFromPrivate","privateKey","toDER","ecSign","params","priv_key","H","dsaSign","checkValue","pub","pubkey","subjectPrivateKey","ecVerify","pub_key","unpacked","signature","montp","dsaVerify","padNum","copyProps","dst","SafeBuffer","encodingOrOffset","allocUnsafeSlow","SlowBuffer","ieee754","INSPECT_MAX_BYTES","createBuffer","RangeError","isEncoding","actual","fromString","isView","fromArrayLike","isInstance","array","byteOffset","fromArrayBuffer","checked","numberIsNaN","fromObject","toPrimitive","assertSize","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","foundIndex","found","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","utf16leToBytes","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","foo","typedArraySupport","species","poolSize","_isBuffer","compare","list","swap16","swap32","swap64","toLocaleString","thisStart","thisEnd","thisCopy","targetCopy","_arr","toHex","checkOffset","checkInt","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","subarray","readUIntLE","readUIntBE","readUInt16LE","readUInt32LE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUInt16LE","writeIntLE","limit","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","INVALID_BASE64_RE","leadSurrogate","base64clean","hashMode","_finalOrDigest","__final","_decoder","inputEnc","outputEnc","outData","_toString","_transform","fin","objectToString","isBoolean","isNull","isNullOrUndefined","isNumber","isString","isSymbol","isRegExp","isDate","isFunction","elliptic","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","formatReturnValue","p256","secp256r1","secp192r1","p384","p521","generateKeys","genKeyPair","getPublicKey","computeSecret","inenc","keyFromPublic","getPublic","getPrivate","getX","getPrivateKey","setPublicKey","_importPublic","setPrivateKey","_priv","_importPrivate","MD5","RIPEMD160","sha","Hash","alg","Legacy","md5","ZEROS","Hmac","blocksize","_alg","ipad","_ipad","opad","_opad","rng","pseudoRandomBytes","prng","algos","algoKeys","hashes","pbkdf2","pbkdf2Sync","dh","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","randomFill","randomFillSync","createCredentials","DH_CHECK_P_NOT_SAFE_PRIME","DH_CHECK_P_NOT_PRIME","DH_UNABLE_TO_CHECK_GENERATOR","DH_NOT_SUITABLE_GENERATOR","NPN_ENABLED","ALPN_ENABLED","RSA_PKCS1_PADDING","RSA_SSLV23_PADDING","RSA_NO_PADDING","RSA_PKCS1_OAEP_PADDING","RSA_X931_PADDING","RSA_PKCS1_PSS_PADDING","POINT_CONVERSION_COMPRESSED","POINT_CONVERSION_UNCOMPRESSED","POINT_CONVERSION_HYBRID","utcOffset","month","ms","Q","weekdays","months","S","locale","$L","$u","$offset","$d","NaN","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isSame","startOf","endOf","isAfter","isBefore","$g","unix","toDate","$locale","weekStart","$set","daysInMonth","subtract","meridiem","YY","YYYY","MM","MMM","monthsShort","MMMM","DD","dd","weekdaysMin","ddd","weekdaysShort","dddd","HH","hh","mm","ss","SSS","Z","getTimezoneOffset","toUTCString","isDayjs","en","Ls","dayjs_plugin_customParseFormat","zone","afternoon","milliseconds","SS","Do","ordinal","Y","ZZ","hours","minutes","seconds","local","getUTCDay","getUTCMilliseconds","isUTC","dayjs_plugin_utc","proto","CBCState","_cbcInit","_cbcState","inp","inOff","outOff","superProto","bufferOff","_updateDecrypt","_updateEncrypt","_flushBuffer","inputOff","outputOff","_finalEncrypt","_finalDecrypt","_pad","_unpad","DESState","_desState","deriveKeys","shiftTable","kL","kR","pc1","r28shl","pc2","ip","_encrypt","lStart","rStart","keyL","keyR","substitute","rip","EDEState","k1","k3","_edeState","inL","inR","outL","outR","pc2table","sTable","permuteTable","padSplit","generatePrime","DH","ENCODINGS","binary","hex","gen","generator","genc","millerRabin","TWENTYFOUR","ELEVEN","TEN","THREE","SEVEN","_pub","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","rem","simpleSieve","fermatTest","checkPrime","__gen","_gen","secret","getPrime","front","getGenerator","findPrime","ONE","TWO","FIVE","FOUR","_getPrimes","n2","modp1","modp2","modp5","modp14","modp15","modp16","modp17","modp18","eddsa","getNAF","getJSF","BaseCurve","conf","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","point","_fixedNafMul","doubles","_getDoubles","naf","I","step","repr","nafW","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","jsf","ja","jb","decodePoint","pointFromX","encodeCompressed","compact","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","EdwardsCurve","twisted","mOneA","oneC","Point","zOne","_mulA","_mulC","rhs","lhs","y2","pointFromY","isInfinity","normalize","fromJSON","_extDbl","nx","ny","nt","nz","_projDbl","_extAdd","_projAdd","mulAdd","jmulAdd","zi","eqXToP","xc","short","edwards","MontCurve","i4","a24","aa","bb","diffAdd","da","jumlAdd","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","isRed","inf","JPoint","lambda","betas","_getEndoRoots","lambdas","basis","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","len1","_endoSplit","v1","v2","p1","p2","q1","q2","ax","_endoWnafMulAdd","npoints","ncoeffs","pre","endoMul","obj2point","ys1","dyinv","_precompute","negate","zinv","zinv2","ay","pz2","z2","u1","u2","h2","h3","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","ee","yyu4","kbase","z3","pz3","zs","PresetCurve","defineCurve","HmacDRBG","KeyPair","Signature","nh","keyPair","fromPrivate","fromPublic","drbg","pers","persEnc","entropy","hmacStrength","entropyEnc","nonce","ns2","_truncateToN","truncOnly","bkey","ns1","iter","kp","kpX","recoveryParam","canonical","sinv","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Qprime","privEnc","pubEnc","derive","_importDER","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","log","LN2","slen","backHalf","parseBytes","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","messagePrefix","R","Rencoded","encodePoint","s_","pubBytes","makeSignature","SG","intFromLE","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","cachedProperty","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","minAssert","minUtils","zero2","d1","d2","m8","m14","m24","computer","_from","_id","_inBundle","_integrity","_location","_phantomChildren","_requested","registry","escapedName","rawSpec","saveSpec","fetchSpec","_requiredBy","_resolved","_shasum","_spec","_where","author","email","bugs","url","bundleDependencies","dependencies","bn.js","brorand","hash.js","hmac-drbg","minimalistic-assert","minimalistic-crypto-utils","deprecated","devDependencies","brfs","coveralls","grunt","grunt-browserify","grunt-cli","grunt-contrib-connect","grunt-contrib-copy","grunt-contrib-uglify","grunt-mocha-istanbul","grunt-saucelabs","istanbul","jscs","jshint","mocha","homepage","license","main","repository","scripts","lint","objectCreate","F","objectKeys","bind","context","fn","_events","_eventsCount","_maxListeners","hasDefineProperty","defaultMaxListeners","$getMaxListeners","that","emitNone","handler","isFn","listeners","arrayClone","emitOne","arg1","emitTwo","arg2","emitThree","arg3","emitMany","_addListener","listener","prepend","existing","newListener","warned","emitter","onceWrapper","fired","removeListener","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","listenerCount","setMaxListeners","getMaxListeners","er","doError","addListener","prependListener","once","prependOnceListener","originalListener","spliceOne","removeAllListeners","rawListeners","eventNames","ownKeys","salt","keyBits","used","keyStart","ivStart","format_1","parse_1","HashBase","_block","_blockSize","_blockOffset","_length","_finalized","prefix","throwIfNotStringOrBuffer","_digest","common","ripemd","hmac","sha1","ripemd160","BlockHash","pending","pendingTotal","outSize","padLength","_delta8","_delta32","join32","outer","rotl32","sum32","sum32_3","sum32_4","K","Kh","E","Ah","Bh","Ch","Dh","Eh","rh","sh","toHex32","split32","shaCommon","sum32_5","ft_1","sha1_K","SHA1","W","SHA256","SHA224","ch32","maj32","s0_256","s1_256","g0_256","g1_256","sha256_K","T1","T2","SHA512","SHA384","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","sha512_K","ch64_hi","xh","xl","yh","yl","zh","ch64_lo","zl","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","ah","al","bh","ch","cl","dl","eh","el","fh","fl","gh","gl","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","rotr32","p32","isSurrogatePair","htonl","zero8","predResist","minEntropy","_reseed","reseedInterval","V","nonceEnc","seed","_hmac","kmac","reseed","addEnc","temp","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","called","observer","element","document","createTextNode","observe","characterData","MessageChannel","createElement","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","appendChild","channel","port1","onmessage","port2","postMessage","queue","oldQueue","task","isSlowBuffer","support","_keyStr","chr1","chr2","chr3","enc1","enc2","enc3","enc4","remainingBytes","getTypeOf","resultIndex","totalLength","uint8array","external","DataWorker","DataLengthProbe","Crc32Probe","CompressedObject","compressedSize","uncompressedSize","crc32","compressedContent","getContentWorker","worker","uncompressWorker","streamInfo","getCompressedWorker","withStreamInfo","createWorkerFrom","uncompressedWorker","compressionOptions","compressWorker","GenericWorker","STORE","magic","DEFLATE","crcTable","makeTable","crc","crc32str","createFolders","unixPermissions","dosPermissions","ES6Promise","USE_TYPEDARRAY","Uint16Array","Uint32Array","pako","ARRAY_TYPE","FlateWorker","action","_pako","_pakoAction","_pakoOptions","meta","processChunk","_createPako","transformTo","cleanUp","onData","utf8","decToHex","dec","generateZipParts","streamedContent","streamingEnded","platform","encodeFileName","dosTime","dosDate","useCustomEncoding","utf8encode","encodedFileName","utfEncodedFileName","encodedComment","utfEncodedComment","useUTF8ForFileName","useUTF8ForComment","extraFields","unicodePathExtraField","unicodeCommentExtraField","dataInfo","bitflag","isDir","extFileAttr","versionMadeBy","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","generateDataDescriptors","DATA_DESCRIPTOR","ZipFileWorker","streamFiles","bytesWritten","zipComment","zipPlatform","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","currentFilePercent","remainingFiles","openedSource","record","closedSource","localDirLength","centralDirLength","dirEnd","CENTRAL_DIRECTORY_END","generateCentralDirectoryEnd","prepareNextSource","previous","registerPrevious","generatedError","sources","lock","compressions","generateWorker","zipFileWorker","relativePath","fileCompression","zipCompression","compressionName","getCompression","_compressWorker","root","newObj","defaults","ZipEntries","nodejsUtils","checkEntryCRC32","zipEntry","decompressed","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","prepareContent","zipEntries","promises","fileNameStr","fileCommentStr","NodejsStreamInputAdapter","_upstreamEnded","_bindStream","_stream","NodejsStreamOutputAdapter","helper","updateCb","_helper","_read","newBufferFrom","allocBuffer","StreamHelper","ZipObject","fileAdd","originalOptions","dataType","forceTrailingSlash","parentFolder","folderAdd","isUnicodeString","zipObjectContent","lastSlash","regexp","folder","newFolder","remove","kids","generateInternalStream","mimeType","checkSupport","onUpdate","generateNodeStream","toNodejsStream","DataReader","ArrayReader","byteAt","lastIndexOfSignature","sig0","sig1","sig2","sig3","readAndCheckSignature","readData","checkIndex","newIndex","setIndex","readInt","readString","readDate","dostime","Uint8ArrayReader","NodeBufferReader","StringReader","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","ConvertWorker","destType","dataP","dataIsReady","_tickScheduled","_tickAndRepeat","delay","isFinished","_tick","nextIndex","extraStreamInfo","isLocked","mergeStreamInfo","withError","me","nodestream","_accumulate","updateCallback","dataArray","chunkType","_internalType","resultType","_outputType","_mimeType","newBlob","transformZipOutput","outputType","internalType","_worker","evt","arraybuffer","nodebuffer","blob","Blob","builder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","_utf8len","Utf8DecodeWorker","leftOver","Utf8EncodeWorker","m_pos","str_len","buf_len","string2buf","c_len","utf16buf","applyFromCharCode","buf2string","previousData","nextBoundary","utf8border","usableData","identity","stringToArrayLike","arrayToStringHelper","stringifyByChunk","stringifyByChar","resultStr","applyCanBeUsed","arrayLikeToString","canUseApply","arrayLikeToArrayLike","arrayFrom","arrayTo","inputType","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","Obj","inputData","isBinary","isOptimizedBinaryString","isBase64","FileReader","reader","onload","onerror","readAsArrayBuffer","readerFor","ZipEntry","loadOptions","checkSignature","expectedSignature","isSignature","askedIndex","currentIndex","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","decodeParamType","decodeContent","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","extraFieldId","extraFieldLength","extraFieldValue","extraDataSize","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","endOfCentralDirOffset","expectedEndOfCentralDirOffset","prepareReader","crc32fn","isEncrypted","bitFlag","useUTF8","localExtraFieldsLength","fileNameLength","fileName","compressionMethod","findCompression","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","madeBy","extraReader","upath","findExtraFieldUnicodePath","fileNameByteArray","ucomment","findExtraFieldUnicodeComment","commentByteArray","upathField","ucommentField","_dataBinary","internalStream","askUnicodeString","_decompressWorker","nodeStream","removedMethods","removedFn","immediate","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","resolver","outcome","safelyResolveThenable","QueueItem","promise","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","func","returnValue","getThen","thenable","onError","onSuccess","tryCatch","status","resolved","allResolver","outValue","race","response","reRegExpChar","reHasRegExpChar","source","freeGlobal","freeSelf","_Symbol","symbolProto","symbolToString","baseToString","isObjectLike","argsTag","mapTag","objectTag","setTag","reIsDeepProp","reIsPlainProp","reLeadingDot","rePropName","reEscapeChar","reIsHostCtor","reIsUint","typedArrayTags","freeExports","nodeType","freeModule","freeProcess","nodeUtil","binding","nodeIsTypedArray","isTypedArray","arrayAggregator","setter","accumulator","arraySome","predicate","isHostObject","mapToArray","setToArray","uid","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","IE_PROTO","funcToString","reIsNative","propertyIsEnumerable","nativeKeys","DataView","getNative","Map","Set","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolValueOf","entries","clear","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","isArguments","baseTimes","skipIndexes","isIndex","assocIndexOf","baseAggregator","collection","baseEach","getMapData","pairs","LARGE_ARRAY_SIZE","eachFunc","fromRight","baseFor","isArrayLike","keysFunc","createBaseFor","baseGet","isKey","castPath","toKey","baseHasIn","baseIsEqual","customizer","bitmask","equalFunc","objIsArr","othIsArr","objTag","othTag","getTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","stacked","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","othLength","skipCtor","objValue","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsNative","isMasked","baseIteratee","srcValue","isStrictComparable","matchesStrictComparable","hasFunc","isLength","hasPath","hasIn","UNORDERED_COMPARE_FLAG","baseMatchesProperty","matchData","getMatchData","noCustomizer","baseIsMatch","baseMatches","basePropertyDeep","baseKeys","Ctor","stringToPath","seen","arrValue","othIndex","getValue","ctorString","memoize","initializer","groupBy","memoized","Cache","isArrayLikeObject","baseUnary","moduleExports","nativeObjectToString","symToStringTag","toStringTag","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isArr","isArg","isBuff","isType","baseGetTag","isOwn","unmasked","getRawTag","baseIsArguments","getAllKeys","symbolsFunc","arrayPush","baseGetAllKeys","getSymbols","resIndex","arrayFilter","symbol","arrayIncludes","fromIndex","baseFindIndex","baseIsNaN","baseIndexOf","arrayIncludesWith","comparator","cacheHas","createSet","isCommon","computed","seenIndex","baseUniq","ARRAY16","_b","_c","_d","rotl","fnF","fnG","fnH","fnI","MillerRabin","_randbelow","min_bytes","_randrange","rone","n1","rn1","getDivisor","zlib_deflate","strings","ZStream","Deflate","chunkSize","windowBits","memLevel","strategy","opt","gzip","ended","strm","avail_out","deflateInit2","deflateSetHeader","dictionary","dict","deflateSetDictionary","_dict_set","deflate","deflator","next_in","avail_in","Buf8","next_out","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","deflateRaw","zlib_inflate","GZheader","Inflate","inflateInit2","Z_OK","inflateGetHeader","inflateSetDictionary","inflate","inflator","next_out_utf8","utf8str","allowBufError","Z_FINISH","Z_NO_FLUSH","binstring2buf","Z_NEED_DICT","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","arraySet","inflateEnd","inflateRaw","ungzip","TYPED_OK","Int32Array","_has","fnTyped","src_offs","dest_offs","fnUntyped","setTyped","Buf16","Buf32","STR_APPLY_OK","STR_APPLY_UIA_OK","__","adler","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","configuration_table","trees","adler32","errorCode","flush_pending","pending_buf","pending_out","total_out","flush_block_only","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","w_size","MAX_MATCH","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","more","_w_size","window_size","hash_size","head","total_in","ins_h","hash_shift","hash_mask","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","MIN_MATCH","last_lit","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","DeflateState","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","HEAP_SIZE","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","MAX_BITS","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","deflateResetKeep","data_type","_tr_init","deflateReset","max_block_size","max_start","deflateInit","old_flush","beg","hcrc","extra","os","bstate","deflate_huff","deflate_rle","_tr_align","_tr_stored_block","avail","tmpDict","dictLength","deflateInfo","xflags","extra_len","_in","dmax","wsize","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","op","dist","from_source","lencode","distcode","lenbits","distbits","dolen","dodist","sane","inflate_fast","inflate_table","zswap32","InflateState","havedict","flags","check","wbits","ncode","nlen","ndist","have","work","lendyn","distdyn","back","was","inflateResetKeep","inflateReset","inflateReset2","lenfix","distfix","virgin","fixedtables","sym","updatewindow","inflateInit","put","here_bits","here_op","here_val","last_bits","last_op","last_val","hbuf","order","inf_leave","inflateInfo","lbase","lext","dbase","dext","lens_index","codes","table_index","incr","low","curr","drop","huff","base_index","MAXBITS","offs","extra_index","-1","-2","-3","-4","-5","-6","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","D_CODES","_dist_code","_length_code","base_length","static_l_desc","static_d_desc","static_bl_desc","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","send_bits","send_code","bi_reverse","gen_codes","next_code","init_block","LITERALS","END_BLOCK","bi_windup","smaller","_n2","_m2","pqdownheap","compress_block","ltree","dtree","lc","lx","build_tree","stree","xbits","overflow","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","stored_len","copy_block","LENGTH_CODES","L_CODES","tr_static_init","opt_lenb","static_lenb","max_blindex","black_mask","detect_data_type","BL_CODES","build_bl_tree","lcodes","dcodes","blcodes","send_all_trees","STATIC_TREES","bi_flush","2.16.840.1.101.3.4.1.1","2.16.840.1.101.3.4.1.2","2.16.840.1.101.3.4.1.3","2.16.840.1.101.3.4.1.4","2.16.840.1.101.3.4.1.21","2.16.840.1.101.3.4.1.22","2.16.840.1.101.3.4.1.23","2.16.840.1.101.3.4.1.24","2.16.840.1.101.3.4.1.41","2.16.840.1.101.3.4.1.42","2.16.840.1.101.3.4.1.43","2.16.840.1.101.3.4.1.44","certificate","RSAPrivateKey","seq","int","RSAPublicKey","PublicKey","AlgorithmIdentifier","bitstr","null_","PrivateKeyInfo","octstr","PrivateKey","EncryptedPrivateKeyInfo","EncryptedPrivateKey","DSAPrivateKey","DSAparam","ECPrivateKey","ECParameters","namedCurve","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","rdnSequence","Validity","bool","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherText","cipherKey","match2","aesid","fixProc","compat","passphrase","subtype","ndata","stripped","tbsCertificate","subjectPublicKeyInfo","subjectPublicKey","kde","kdeparams","iters","keylen","parameters","ZERO_BUF","checkParameters","defaultEncoding","sync","subtle","toBrowser","sha-1","sha-256","sha-384","sha-512","checks","browserPbkdf2","iterations","importKey","deriveBits","resolvePromise","prom","checkNative","resp","MAX_ALLOC","sizes","rmd160","saltLen","shaFunc","getDigest","ipad1","ipad2","run","DK","block1","destPos","hLen","U","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","queueIndex","cleanUpNextTick","drainQueue","timeout","marker","runClearTimeout","Item","noop","env","versions","cwd","chdir","umask","i2ops","mgf","withPublic","zBuffer","iHash","maskedSeed","maskedDb","db","dif","oaep","ps","pkcs1","publicKey","paddedMsg","hLen2","dblen","cur","nonZero","generated","oldBrowser","safeBuffer","randombytes","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","createErrorType","NodeError","_Base","getMessage","oneOf","expected","determiner","this_len","endsWith","allowHalfOpen","readable","onend","_writableState","onEndNT","highWaterMark","getBuffer","_readableState","destroyed","ReadableState","EElistenerCount","OurUint8Array","debug","debugUtil","debuglog","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","pipesCount","flowing","reading","needReadable","emittedReadable","readableListening","resumeScheduled","emitClose","autoDestroy","awaitDrain","readingMore","_destroy","readableAddChunk","addToFront","skipChunkCheck","emitReadable","emitReadable_","onEofChunk","chunkInvalid","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","finished","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","onunpipe","unpipeInfo","hasUnpiped","onclose","onfinish","ondrain","ondata","cleanedUp","needDrain","pipeOnDrain","dests","ev","_fromList","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","needTransform","writeencoding","prefinish","err2","CorkedRequest","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","WritableState","internalUtil","deprecate","realHasInstance","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","finalCalled","ending","noDecode","decodeStrings","writing","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","rState","hasInstance","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","setDefaultEncoding","endWritable","_Object$setPrototypeO","_defineProperty","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","lastPromise","wrapForNext","_Object$create","enumerableOnly","symbols","hasStrings","_getString","_getBuffer","nb","getOwnPropertyDescriptors","defineProperties","customInspect","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","eos","onlegacyfinish","writableEnded","readableEnded","onrequest","req","setHeader","abort","isRequest","ERR_MISSING_ARGS","destroyer","closed","popCallback","streams","destroys","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","pipeline","zr","sl","sr","hr","_e","fn1","fn2","fn3","fn4","fn5","ar","cr","dr","safer","Safer","kStringMaxLength","MAX_LENGTH","MAX_STRING_LENGTH","_createForOfIteratorHelper","allowArrayLike","_unsupportedIterableToArray","normalCompletion","didErr","_e2","_arrayLikeToArray","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","minLen","arr2","ed5","ed2","NSed3","isS","isChar10","isChar","isNameStartChar","isNameChar","S_LIST","NAME_RE","isChar11","isNCNameStartChar","isNCNameChar","NC_NAME_RE","XML_NAMESPACE","XMLNS_NAMESPACE","rootNS","XML_ENTITIES","amp","quot","apos","EQUAL","QUESTION","QUOTES","DOCTYPE_TERMINATOR","DTD_TERMINATOR","XML_DECL_NAME_TERMINATOR","ATTRIB_VALUE_UNQUOTED_TERMINATOR","nsPairCheck","isNCName","isName","EVENTS","EVENT_NAME_TO_HANDLER_NAME","xmldecl","processinginstruction","doctype","opentagstart","attribute","opentag","closetag","cdata","ready","fragmentOpt","fragment","xmlnsOpt","trackPosition","nameStartCheck","nameCheck","processAttribs","processAttribsNS","pushAttrib","pushAttribNS","ns","additional","additionalNamespaces","mapping","_Object$keys","nsMappingCheck","processAttribsPlain","pushAttribPlain","stateTable","sBegin","sBeginWhitespace","sDoctype","sDoctypeQuote","sDTD","sDTDQuoted","sDTDOpenWaka","sDTDOpenWakaBang","sDTDComment","sDTDCommentEnding","sDTDCommentEnded","sDTDPI","sDTDPIEnding","sText","sEntity","sOpenWaka","sOpenWakaBang","sComment","sCommentEnding","sCommentEnded","sCData","sCDataEnding","sCDataEnding2","sPIFirstChar","sPIRest","sPIBody","sPIEnding","sXMLDeclNameStart","sXMLDeclName","sXMLDeclEq","sXMLDeclValueStart","sXMLDeclValue","sXMLDeclSeparator","sXMLDeclEnding","sOpenTag","sOpenTagSlash","sAttrib","sAttribName","sAttribNameSawWhite","sAttribValue","sAttribValueQuoted","sAttribValueClosed","sAttribValueUnquoted","sCloseTag","sCloseTagSawWhite","openWakaBang","piTarget","topNS","chunkPosition","prevI","carriedFromPrevious","forbiddenState","attribList","reportedTextBeforeRoot","reportedTextAfterRoot","closedRoot","sawRoot","xmlDeclPossible","xmlDeclExpects","entityReturnState","defaultXMLVersion","forceXMLVersion","setXMLVersion","positionAtNewLine","_closed","xmlDecl","ENTITIES","readyHandler","makeError","errorHandler","lastCode","getCode","chars","isNLLike","getCodeNorm","currentXMLVersion","getCode10","getCode11","iBefore","skipSpaces","unget","captureTo","doctypeHandler","fromCodePoint","captureToChar","owb","handleTextInRoot","handleTextOutsideRoot","loop","parseEntity","textHandler","commentHandler","cdataHandler","isQuestion","piHandler","xmldeclHandler","captureNameChars","openTagStartHandler","openTag","openSelfClosingTag","closeTag","scanLoop","nonSpace","outRootLoop","_this$qname","qname","attributeHandler","trimmed","_trimmed","endHandler","resolvePrefix","colon","_this$qname2","_prefix","_local","_uri","eqname","_step2","_iterator2","_step2$value","isSelfClosing","openTagHandler","closeTagHandler","defined","finalSize","_finalSize","accum","assigned","remainder","lowBits","highBits","_exports","Algorithm","Sha","_w","rotl30","ft","Sha1","rotl5","Sha256","Sha224","_f","_g","_h","maj","sigma0","sigma1","gamma0","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","Sha512","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","EE","_isStdio","didOnEnd","cleanup","pna","util","readableHwm","readableHighWaterMark","defaultHwm","needMoreData","copyFromBufferString","copyFromBuffer","fromListPartial","increasedAwaitDrain","asyncWrite","writableHwm","writableHighWaterMark","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8CheckIncomplete","immediateIds","nextImmediateId","Timeout","clearFn","_clearFn","setInterval","clearInterval","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","clearImmediate","localStorage","formatRegExp","noDeprecation","throwDeprecation","traceDeprecation","debugEnviron","debugs","stylize","stylizeNoColor","colors","showHidden","_extend","stylizeWithColor","formatValue","styleType","recurseTimes","simple","formatPrimitive","visibleKeys","idx","arrayToHash","getOwnPropertyNames","formatError","braces","formatProperty","formatArray","numLinesEst","reduceToSingleString","NODE_DEBUG","pid","bold","italic","underline","inverse","white","grey","black","blue","cyan","green","magenta","yellow","boolean","null","timestamp","origin","_v","_v2","_v3","_v4","_nil","_version","_validate","_stringify","_interopRequireDefault","getOutputLength","inputLength8","safeAdd","lsw","md5cmn","cnt","md5ff","md5gg","md5hh","md5ii","_default","unescape","encodeURIComponent","length32","md5ToHexEncodedArray","olda","oldb","oldc","oldd","wordsToMd5","length8","bytesToWords","uuid","rnds8","ROTL","_t","_t2","byteToHex","_nodeId","_clockseq","_rng","_lastMSecs","_lastNSecs","clockseq","seedBytes","random","nsecs","tmh","_md","hashfunc","generateUUID","namespace","stringToBytes","DNS","URL","rnds","_sha","_regex","CHAR","NAME_START_CHAR","NAME_CHAR","CHAR_RE","S_RE","NAME_START_CHAR_RE","NAME_CHAR_RE","NMTOKEN_RE","RESTRICTED_CHAR","RESTRICTED_CHAR_RE","isRestrictedChar","isCharAndNotRestricted","NC_NAME_START_CHAR","NC_NAME_CHAR","NC_NAME_START_CHAR_RE","NC_NAME_CHAR_RE"],"mappings":"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EACA,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,sEAINP,IAAK,CACHnvB,IAAK,EACL0vB,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,iGCvwBR,aAEA,IAAIpjF,EAAQjuB,EACR0sE,EAAK1rE,EAAQ,SACby+G,EAAYz+G,EAAQ,uBACpB0+G,EAAW1+G,EAAQ,6BAEvBitB,EAAM3T,OAASmlG,EACfxxF,EAAM+9C,QAAU0zC,EAAS1zC,QACzB/9C,EAAM0xF,MAAQD,EAASC,MACvB1xF,EAAMotE,MAAQqkB,EAASrkB,MACvBptE,EAAMpT,OAAS6kG,EAAS7kG,OA6BxBoT,EAAMyhF,OA1BN,SAAgB7qC,EAAK8I,EAAGyM,GACtB,IAAI02B,EAAM,IAAI//F,MAAMhJ,KAAK6H,IAAIi1D,EAAIsL,YAAaiK,GAAQ,GACtD02B,EAAI5mG,KAAK,GAKT,IAHA,IAAI2O,EAAK,GAAM80D,EAAI,EACfrY,EAAIuP,EAAI/xC,QAEHhyB,EAAI,EAAGA,EAAIgwG,EAAIvvG,OAAQT,IAAK,CACnC,IAAI2gF,EACA/uB,EAAM4C,EAAEwa,MAAMj3D,EAAK,GACnBy8C,EAAE0nB,SAEFyE,EADE/uB,GAAO75C,GAAM,GAAK,GACfA,GAAM,GAAK65C,EAEZA,EACN4C,EAAE6lB,MAAMsG,IAERA,EAAI,EAGNqvB,EAAIhwG,GAAK2gF,EACTnsB,EAAEya,OAAO,GAGX,OAAO+gC,GA2DT7iF,EAAM0hF,OAtDN,SAAgB3D,EAAIz2C,GAClB,IAAI28C,EAAM,CACR,GACA,IAGFlG,EAAKA,EAAGl5E,QACRyiC,EAAKA,EAAGziC,QAGR,IAFA,IAAI8sF,EAAK,EACLC,EAAK,EACF7T,EAAGzuB,MAAMqiC,GAAM,GAAKrqD,EAAGgoB,MAAMsiC,GAAM,GAAG,CAG3C,IAMIzH,EAYAC,EAIEyH,EAtBFC,EAAO/T,EAAGl8B,MAAM,GAAK8vC,EAAM,EAC3BI,EAAOzqD,EAAGua,MAAM,GAAK+vC,EAAM,EAM/B,GALY,IAARE,IACFA,GAAO,GACG,IAARC,IACFA,GAAO,GAES,IAAP,EAAND,GACH3H,EAAK,OAMHA,EAHU,KADR0H,EAAM9T,EAAGl8B,MAAM,GAAK8vC,EAAM,IACN,IAAPE,GAAqB,IAARE,EAGvBD,GAFCA,EAOV,GAHA7N,EAAI,GAAGliG,KAAKooG,GAGM,IAAP,EAAN4H,GACH3H,EAAK,OAMHA,EAHU,KADRyH,EAAMvqD,EAAGua,MAAM,GAAK+vC,EAAM,IACN,IAAPC,GAAqB,IAARC,EAGvBC,GAFCA,EAIV9N,EAAI,GAAGliG,KAAKqoG,GAGR,EAAIuH,IAAOxH,EAAK,IAClBwH,EAAK,EAAIA,GACP,EAAIC,IAAOxH,EAAK,IAClBwH,EAAK,EAAIA,GACX7T,EAAGj8B,OAAO,GACVxa,EAAGwa,OAAO,GAGZ,OAAOmiC,GAWTjkF,EAAM6wF,eAPN,SAAwBltF,EAAK/mB,EAAMo1G,GACjC,IAAI/vG,EAAM,IAAMrF,EAChB+mB,EAAIF,UAAU7mB,GAAQ,WACpB,YAAqBhG,IAAdtE,KAAK2P,GAAqB3P,KAAK2P,GAC/B3P,KAAK2P,GAAO+vG,EAAS3+G,KAAKf,QASrC0tB,EAAMuvF,WAJN,SAAoBp6C,GAClB,MAAwB,iBAAVA,EAAqBn1C,EAAM+9C,QAAQ5I,EAAO,OACrBA,GAOrCn1C,EAAMqwF,UAHN,SAAmBl7C,GACjB,OAAO,IAAIsJ,EAAGtJ,EAAO,MAAO,0LCnH9BnjE,EAAAD,QAAA,CACAkgH,MAAA,kBACAC,IAAA,iBACAC,WAAA,EACAC,WAAA,kGACAC,UAAA,YACAC,iBAAA,GACAC,WAAA,CACA/1G,KAAA,QACAg2G,UAAA,EACAv9C,IAAA,kBACAr4D,KAAA,WACA61G,YAAA,WACAC,QAAA,SACAC,SAAA,KACAC,UAAA,UAEAC,YAAA,CACA,mBACA,gBAEAC,UAAA,2DACAC,QAAA,2CACAC,MAAA,kBACAC,OAAA,sDACAC,OAAA,CACAt2G,KAAA,gBACAu2G,MAAA,qBAEAC,KAAA,CACAC,IAAA,8CAEAC,oBAAA,EACAC,aAAA,CACAC,QAAA,SACAC,QAAA,SACAC,UAAA,SACAC,YAAA,SACAryF,SAAA,SACAsyF,sBAAA,SACAC,4BAAA,UAEAC,YAAA,EACA3iG,YAAA,kBACA4iG,gBAAA,CACAC,KAAA,SACAC,UAAA,SACAC,MAAA,SACAC,mBAAA,SACAC,YAAA,SACAC,wBAAA,SACAC,qBAAA,SACAC,uBAAA,SACAC,uBAAA,SACAC,kBAAA,SACAC,SAAA,SACAC,KAAA,SACAC,OAAA,UACAC,MAAA,UAEAj3D,MAAA,CACA,OAEAk3D,SAAA,sCACA7jG,SAAA,CACA,KACA,WACA,QACA,gBAEA8jG,QAAA,MACAC,KAAA,kBACAp4G,KAAA,WACAq4G,WAAA,CACAz4G,KAAA,MACA62G,IAAA,iDAEA6B,QAAA,CACAP,KAAA,yEACAC,OAAA,yEACAO,KAAA,iCACA5uG,KAAA,+BACAkwB,KAAA,qDACA/N,QAAA,+BAEAA,QAAA,qRChEA,IAAI0sF,EAAe5sG,OAAOnN,QAoe1B,SAA8BsgG,GAC5B,IAAI0Z,EAAI,aAER,OADAA,EAAE5xF,UAAYk4E,EACP,IAAI0Z,GAteTC,EAAa9sG,OAAOC,MAwexB,SAA4Bkb,GAC1B,IAAIlb,EAAO,GACX,IAAK,IAAI4+C,KAAK1jC,EAASnb,OAAOib,UAAUngB,eAAejQ,KAAKswB,EAAK0jC,IAC/D5+C,EAAK1G,KAAKslD,GAEZ,OAAOA,GA5eLkuD,EAAOn9F,SAASqL,UAAU8xF,MA8e9B,SAA8BC,GAC5B,IAAIC,EAAKnjH,KACT,OAAO,WACL,OAAOmjH,EAAG9gG,MAAM6gG,EAASn8G,aA/e7B,SAASiwB,IACFh3B,KAAKojH,SAAYltG,OAAOib,UAAUngB,eAAejQ,KAAKf,KAAM,aAC/DA,KAAKojH,QAAUN,EAAa,MAC5B9iH,KAAKqjH,aAAe,GAGtBrjH,KAAKsjH,cAAgBtjH,KAAKsjH,oBAAiBh/G,EAE7C5E,EAAOD,QAAUu3B,EAGjBA,EAAaA,aAAeA,EAE5BA,EAAa7F,UAAUiyF,aAAU9+G,EACjC0yB,EAAa7F,UAAUmyF,mBAAgBh/G,EAIvC,IAEIi/G,EAFAC,EAAsB,GAG1B,IACE,IAAIljH,EAAI,GACJ4V,OAAOgd,gBAAgBhd,OAAOgd,eAAe5yB,EAAG,IAAK,CAAEiF,MAAO,IAClEg+G,EAA4B,IAARjjH,EAAEoS,EACtB,MAAOoZ,GAAOy3F,GAAoB,EA4BpC,SAASE,EAAiBC,GACxB,YAA2Bp/G,IAAvBo/G,EAAKJ,cACAtsF,EAAawsF,oBACfE,EAAKJ,cAYd,SAASK,EAASC,EAASC,EAAM9jH,GAC/B,GAAI8jH,EACFD,EAAQ7iH,KAAKhB,QAIb,IAFA,IAAIyiC,EAAMohF,EAAQ5iH,OACd8iH,EAAYC,EAAWH,EAASphF,GAC3BjiC,EAAI,EAAGA,EAAIiiC,IAAOjiC,EACzBujH,EAAUvjH,GAAGQ,KAAKhB,GAGxB,SAASikH,EAAQJ,EAASC,EAAM9jH,EAAMkkH,GACpC,GAAIJ,EACFD,EAAQ7iH,KAAKhB,EAAMkkH,QAInB,IAFA,IAAIzhF,EAAMohF,EAAQ5iH,OACd8iH,EAAYC,EAAWH,EAASphF,GAC3BjiC,EAAI,EAAGA,EAAIiiC,IAAOjiC,EACzBujH,EAAUvjH,GAAGQ,KAAKhB,EAAMkkH,GAG9B,SAASC,EAAQN,EAASC,EAAM9jH,EAAMkkH,EAAME,GAC1C,GAAIN,EACFD,EAAQ7iH,KAAKhB,EAAMkkH,EAAME,QAIzB,IAFA,IAAI3hF,EAAMohF,EAAQ5iH,OACd8iH,EAAYC,EAAWH,EAASphF,GAC3BjiC,EAAI,EAAGA,EAAIiiC,IAAOjiC,EACzBujH,EAAUvjH,GAAGQ,KAAKhB,EAAMkkH,EAAME,GAGpC,SAASC,EAAUR,EAASC,EAAM9jH,EAAMkkH,EAAME,EAAME,GAClD,GAAIR,EACFD,EAAQ7iH,KAAKhB,EAAMkkH,EAAME,EAAME,QAI/B,IAFA,IAAI7hF,EAAMohF,EAAQ5iH,OACd8iH,EAAYC,EAAWH,EAASphF,GAC3BjiC,EAAI,EAAGA,EAAIiiC,IAAOjiC,EACzBujH,EAAUvjH,GAAGQ,KAAKhB,EAAMkkH,EAAME,EAAME,GAI1C,SAASC,EAASV,EAASC,EAAM9jH,EAAM66D,GACrC,GAAIipD,EACFD,EAAQvhG,MAAMtiB,EAAM66D,QAIpB,IAFA,IAAIp4B,EAAMohF,EAAQ5iH,OACd8iH,EAAYC,EAAWH,EAASphF,GAC3BjiC,EAAI,EAAGA,EAAIiiC,IAAOjiC,EACzBujH,EAAUvjH,GAAG8hB,MAAMtiB,EAAM66D,GA6D/B,SAAS2pD,EAAa7oG,EAAQxR,EAAMs6G,EAAUC,GAC5C,IAAIv/F,EACAgG,EACAw5F,EAEJ,GAAwB,mBAAbF,EACT,MAAM,IAAIn0D,UAAU,0CAoBtB,IAlBAnlC,EAASxP,EAAO0nG,UAOVl4F,EAAOy5F,cACTjpG,EAAO7W,KAAK,cAAeqF,EACvBs6G,EAASA,SAAWA,EAASA,SAAWA,GAI5Ct5F,EAASxP,EAAO0nG,SAElBsB,EAAWx5F,EAAOhhB,KAblBghB,EAASxP,EAAO0nG,QAAUN,EAAa,MACvCpnG,EAAO2nG,aAAe,GAenBqB,GAmBH,GAdwB,mBAAbA,EAETA,EAAWx5F,EAAOhhB,GACdu6G,EAAU,CAACD,EAAUE,GAAY,CAACA,EAAUF,GAG5CC,EACFC,EAAS7zF,QAAQ2zF,GAEjBE,EAASj1G,KAAK+0G,IAKbE,EAASE,SACZ1/F,EAAIu+F,EAAiB/nG,KACZwJ,EAAI,GAAKw/F,EAAS1jH,OAASkkB,EAAG,CACrCw/F,EAASE,QAAS,EAClB,IAAIx3C,EAAI,IAAIxsE,MAAM,+CACd8jH,EAAS1jH,OAAS,KAAOoJ,OAAOF,GAAQ,uEAG5CkjE,EAAE9iE,KAAO,8BACT8iE,EAAEy3C,QAAUnpG,EACZ0xD,EAAEljE,KAAOA,EACTkjE,EAAE19D,MAAQg1G,EAAS1jH,OACI,YAAnB,oBAAO6b,QAAP,YAAAjX,EAAOiX,WAAwBA,QAAQC,MACzCD,QAAQC,KAAK,SAAUswD,EAAE9iE,KAAM8iE,EAAEpzD,eA9BvC0qG,EAAWx5F,EAAOhhB,GAAQs6G,IACxB9oG,EAAO2nG,aAmCX,OAAO3nG,EAcT,SAASopG,IACP,IAAK9kH,KAAK+kH,MAGR,OAFA/kH,KAAK0b,OAAOspG,eAAehlH,KAAKkK,KAAMlK,KAAKilH,QAC3CjlH,KAAK+kH,OAAQ,EACLh+G,UAAU/F,QAChB,KAAK,EACH,OAAOhB,KAAKwkH,SAASzjH,KAAKf,KAAK0b,QACjC,KAAK,EACH,OAAO1b,KAAKwkH,SAASzjH,KAAKf,KAAK0b,OAAQ3U,UAAU,IACnD,KAAK,EACH,OAAO/G,KAAKwkH,SAASzjH,KAAKf,KAAK0b,OAAQ3U,UAAU,GAAIA,UAAU,IACjE,KAAK,EACH,OAAO/G,KAAKwkH,SAASzjH,KAAKf,KAAK0b,OAAQ3U,UAAU,GAAIA,UAAU,GAC3DA,UAAU,IAChB,QAEE,IADA,IAAI6zD,EAAO,IAAIpqD,MAAMzJ,UAAU/F,QACtBT,EAAI,EAAGA,EAAIq6D,EAAK55D,SAAUT,EACjCq6D,EAAKr6D,GAAKwG,UAAUxG,GACtBP,KAAKwkH,SAASniG,MAAMriB,KAAK0b,OAAQk/C,IAKzC,SAASsqD,EAAUxpG,EAAQxR,EAAMs6G,GAC/B,IAAIrlG,EAAQ,CAAE4lG,OAAO,EAAOE,YAAQ3gH,EAAWoX,OAAQA,EAAQxR,KAAMA,EAAMs6G,SAAUA,GACjFW,EAAUlC,EAAKliH,KAAK+jH,EAAa3lG,GAGrC,OAFAgmG,EAAQX,SAAWA,EACnBrlG,EAAM8lG,OAASE,EACRA,EA0HT,SAASC,EAAW1pG,EAAQxR,EAAMm7G,GAChC,IAAIn6F,EAASxP,EAAO0nG,QAEpB,IAAKl4F,EACH,MAAO,GAET,IAAIo6F,EAAap6F,EAAOhhB,GACxB,OAAKo7G,EAGqB,mBAAfA,EACFD,EAAS,CAACC,EAAWd,UAAYc,GAAc,CAACA,GAElDD,EAsDT,SAAyBvjC,GAEvB,IADA,IAAI9S,EAAM,IAAIx+D,MAAMsxE,EAAI9gF,QACfT,EAAI,EAAGA,EAAIyuE,EAAIhuE,SAAUT,EAChCyuE,EAAIzuE,GAAKuhF,EAAIvhF,GAAGikH,UAAY1iC,EAAIvhF,GAElC,OAAOyuE,EA3DSu2C,CAAgBD,GAAcvB,EAAWuB,EAAYA,EAAWtkH,QALvE,GAyBX,SAASwkH,EAAct7G,GACrB,IAAIghB,EAASlrB,KAAKojH,QAElB,GAAIl4F,EAAQ,CACV,IAAIo6F,EAAap6F,EAAOhhB,GAExB,GAA0B,mBAAfo7G,EACT,OAAO,EACF,GAAIA,EACT,OAAOA,EAAWtkH,OAItB,OAAO,EAcT,SAAS+iH,EAAWjiC,EAAK1hF,GAEvB,IADA,IAAIiN,EAAO,IAAImD,MAAMpQ,GACZG,EAAI,EAAGA,EAAIH,IAAKG,EACvB8M,EAAK9M,GAAKuhF,EAAIvhF,GAChB,OAAO8M,EA3bLk2G,EACFrtG,OAAOgd,eAAe8D,EAAc,sBAAuB,CACzD5D,YAAY,EACZm0B,IAAK,WACH,OAAOi8D,GAET/7D,IAAK,SAAS2c,GAGZ,GAAmB,iBAARA,GAAoBA,EAAM,GAAKA,GAAQA,EAChD,MAAM,IAAI/T,UAAU,mDACtBmzD,EAAsBp/C,KAI1BptC,EAAawsF,oBAAsBA,EAKrCxsF,EAAa7F,UAAUs0F,gBAAkB,SAAyBrlH,GAChE,GAAiB,iBAANA,GAAkBA,EAAI,GAAKuD,MAAMvD,GAC1C,MAAM,IAAIiwD,UAAU,0CAEtB,OADArwD,KAAKsjH,cAAgBljH,EACdJ,MASTg3B,EAAa7F,UAAUu0F,gBAAkB,WACvC,OAAOjC,EAAiBzjH,OA4D1Bg3B,EAAa7F,UAAUtsB,KAAO,SAAcqF,GAC1C,IAAIy7G,EAAI/B,EAASphF,EAAKo4B,EAAMr6D,EAAG2qB,EAC3B06F,EAAoB,UAAT17G,EAGf,GADAghB,EAASlrB,KAAKojH,QAEZwC,EAAWA,GAA2B,MAAhB16F,EAAOppB,WAC1B,IAAK8jH,EACR,OAAO,EAGT,GAAIA,EAAS,CAGX,GAFI7+G,UAAU/F,OAAS,IACrB2kH,EAAK5+G,UAAU,IACb4+G,aAAc/kH,MAChB,MAAM+kH,EAGN,IAAI75F,EAAM,IAAIlrB,MAAM,6BAA+B+kH,EAAK,KAExD,MADA75F,EAAIo3F,QAAUyC,EACR75F,EAOV,KAFA83F,EAAU14F,EAAOhhB,IAGf,OAAO,EAET,IAAI25G,EAA0B,mBAAZD,EAElB,OADAphF,EAAMz7B,UAAU/F,QAGd,KAAK,EACH2iH,EAASC,EAASC,EAAM7jH,MACxB,MACF,KAAK,EACHgkH,EAAQJ,EAASC,EAAM7jH,KAAM+G,UAAU,IACvC,MACF,KAAK,EACHm9G,EAAQN,EAASC,EAAM7jH,KAAM+G,UAAU,GAAIA,UAAU,IACrD,MACF,KAAK,EACHq9G,EAAUR,EAASC,EAAM7jH,KAAM+G,UAAU,GAAIA,UAAU,GAAIA,UAAU,IACrE,MAEF,QAEE,IADA6zD,EAAO,IAAIpqD,MAAMgyB,EAAM,GAClBjiC,EAAI,EAAGA,EAAIiiC,EAAKjiC,IACnBq6D,EAAKr6D,EAAI,GAAKwG,UAAUxG,GAC1B+jH,EAASV,EAASC,EAAM7jH,KAAM46D,GAGlC,OAAO,GAsET5jC,EAAa7F,UAAU00F,YAAc,SAAqB37G,EAAMs6G,GAC9D,OAAOD,EAAavkH,KAAMkK,EAAMs6G,GAAU,IAG5CxtF,EAAa7F,UAAUzsB,GAAKsyB,EAAa7F,UAAU00F,YAEnD7uF,EAAa7F,UAAU20F,gBACnB,SAAyB57G,EAAMs6G,GAC7B,OAAOD,EAAavkH,KAAMkK,EAAMs6G,GAAU,IAkChDxtF,EAAa7F,UAAU40F,KAAO,SAAc77G,EAAMs6G,GAChD,GAAwB,mBAAbA,EACT,MAAM,IAAIn0D,UAAU,0CAEtB,OADArwD,KAAK0E,GAAGwF,EAAMg7G,EAAUllH,KAAMkK,EAAMs6G,IAC7BxkH,MAGTg3B,EAAa7F,UAAU60F,oBACnB,SAA6B97G,EAAMs6G,GACjC,GAAwB,mBAAbA,EACT,MAAM,IAAIn0D,UAAU,0CAEtB,OADArwD,KAAK8lH,gBAAgB57G,EAAMg7G,EAAUllH,KAAMkK,EAAMs6G,IAC1CxkH,MAIbg3B,EAAa7F,UAAU6zF,eACnB,SAAwB96G,EAAMs6G,GAC5B,IAAIpqB,EAAMlvE,EAAQ6F,EAAUxwB,EAAG0lH,EAE/B,GAAwB,mBAAbzB,EACT,MAAM,IAAIn0D,UAAU,0CAGtB,KADAnlC,EAASlrB,KAAKojH,SAEZ,OAAOpjH,KAGT,KADAo6F,EAAOlvE,EAAOhhB,IAEZ,OAAOlK,KAET,GAAIo6F,IAASoqB,GAAYpqB,EAAKoqB,WAAaA,EACb,KAAtBxkH,KAAKqjH,aACTrjH,KAAKojH,QAAUN,EAAa,cAErB53F,EAAOhhB,GACVghB,EAAO85F,gBACThlH,KAAK6E,KAAK,iBAAkBqF,EAAMkwF,EAAKoqB,UAAYA,SAElD,GAAoB,mBAATpqB,EAAqB,CAGrC,IAFArpE,GAAY,EAEPxwB,EAAI65F,EAAKp5F,OAAS,EAAGT,GAAK,EAAGA,IAChC,GAAI65F,EAAK75F,KAAOikH,GAAYpqB,EAAK75F,GAAGikH,WAAaA,EAAU,CACzDyB,EAAmB7rB,EAAK75F,GAAGikH,SAC3BzzF,EAAWxwB,EACX,MAIJ,GAAIwwB,EAAW,EACb,OAAO/wB,KAEQ,IAAb+wB,EACFqpE,EAAK9zF,QAuHf,SAAmB8zF,EAAMlrF,GACvB,IAAK,IAAI3O,EAAI2O,EAAO6lD,EAAIx0D,EAAI,EAAGH,EAAIg6F,EAAKp5F,OAAQ+zD,EAAI30D,EAAGG,GAAK,EAAGw0D,GAAK,EAClEqlC,EAAK75F,GAAK65F,EAAKrlC,GACjBqlC,EAAKjmF,MAxHG+xG,CAAU9rB,EAAMrpE,GAEE,IAAhBqpE,EAAKp5F,SACPkqB,EAAOhhB,GAAQkwF,EAAK,IAElBlvE,EAAO85F,gBACThlH,KAAK6E,KAAK,iBAAkBqF,EAAM+7G,GAAoBzB,GAG1D,OAAOxkH,MAGbg3B,EAAa7F,UAAUg1F,mBACnB,SAA4Bj8G,GAC1B,IAAI45G,EAAW54F,EAAQ3qB,EAGvB,KADA2qB,EAASlrB,KAAKojH,SAEZ,OAAOpjH,KAGT,IAAKkrB,EAAO85F,eAUV,OATyB,IAArBj+G,UAAU/F,QACZhB,KAAKojH,QAAUN,EAAa,MAC5B9iH,KAAKqjH,aAAe,GACXn4F,EAAOhhB,KACY,KAAtBlK,KAAKqjH,aACTrjH,KAAKojH,QAAUN,EAAa,aAErB53F,EAAOhhB,IAEXlK,KAIT,GAAyB,IAArB+G,UAAU/F,OAAc,CAC1B,IACI2O,EADAwG,EAAO6sG,EAAW93F,GAEtB,IAAK3qB,EAAI,EAAGA,EAAI4V,EAAKnV,SAAUT,EAEjB,oBADZoP,EAAMwG,EAAK5V,KAEXP,KAAKmmH,mBAAmBx2G,GAK1B,OAHA3P,KAAKmmH,mBAAmB,kBACxBnmH,KAAKojH,QAAUN,EAAa,MAC5B9iH,KAAKqjH,aAAe,EACbrjH,KAKT,GAAyB,mBAFzB8jH,EAAY54F,EAAOhhB,IAGjBlK,KAAKglH,eAAe96G,EAAM45G,QACrB,GAAIA,EAET,IAAKvjH,EAAIujH,EAAU9iH,OAAS,EAAGT,GAAK,EAAGA,IACrCP,KAAKglH,eAAe96G,EAAM45G,EAAUvjH,IAIxC,OAAOP,MAmBbg3B,EAAa7F,UAAU2yF,UAAY,SAAmB55G,GACpD,OAAOk7G,EAAWplH,KAAMkK,GAAM,IAGhC8sB,EAAa7F,UAAUi1F,aAAe,SAAsBl8G,GAC1D,OAAOk7G,EAAWplH,KAAMkK,GAAM,IAGhC8sB,EAAawuF,cAAgB,SAASX,EAAS36G,GAC7C,MAAqC,mBAA1B26G,EAAQW,cACVX,EAAQW,cAAct7G,GAEtBs7G,EAAczkH,KAAK8jH,EAAS36G,IAIvC8sB,EAAa7F,UAAUq0F,cAAgBA,EAiBvCxuF,EAAa7F,UAAUk1F,WAAa,WAClC,OAAOrmH,KAAKqjH,aAAe,EAAIl0D,QAAQm3D,QAAQtmH,KAAKojH,SAAW,2CChejE,IAAIz7F,EAASlnB,EAAQ,eAAeknB,OAChCk5E,EAAMpgG,EAAQ,UA2ClBf,EAAOD,QAxCP,SAAyB0lB,EAAUohG,EAAMC,EAASr4B,GAEhD,GADKxmE,EAAOs6C,SAAS98C,KAAWA,EAAWwC,EAAOG,KAAK3C,EAAU,WAC7DohG,IACG5+F,EAAOs6C,SAASskD,KAAOA,EAAO5+F,EAAOG,KAAKy+F,EAAM,WACjC,IAAhBA,EAAKvlH,QAAc,MAAM,IAAIm1F,WAAW,4CAQ9C,IALA,IAAIjI,EAASs4B,EAAU,EACnB72G,EAAMgY,EAAO8C,MAAMyjE,GACnBpH,EAAKn/D,EAAO8C,MAAM0jE,GAAS,GAC3BvkB,EAAMjiD,EAAO8C,MAAM,GAEhByjE,EAAS,GAAKC,EAAQ,GAAG,CAC9B,IAAIrkE,EAAO,IAAI+2E,EACf/2E,EAAKI,OAAO0/C,GACZ9/C,EAAKI,OAAO/E,GACRohG,GAAMz8F,EAAKI,OAAOq8F,GACtB38C,EAAM9/C,EAAKK,SAEX,IAAIs8F,EAAO,EAEX,GAAIv4B,EAAS,EAAG,CACd,IAAIw4B,EAAW/2G,EAAI3O,OAASktF,EAC5Bu4B,EAAOj/G,KAAKC,IAAIymF,EAAQtkB,EAAI5oE,QAC5B4oE,EAAIv8D,KAAKsC,EAAK+2G,EAAU,EAAGD,GAC3Bv4B,GAAUu4B,EAGZ,GAAIA,EAAO78C,EAAI5oE,QAAUmtF,EAAQ,EAAG,CAClC,IAAIw4B,EAAU7/B,EAAG9lF,OAASmtF,EACtBntF,EAASwG,KAAKC,IAAI0mF,EAAOvkB,EAAI5oE,OAASylH,GAC1C78C,EAAIv8D,KAAKy5E,EAAI6/B,EAASF,EAAMA,EAAOzlH,GACnCmtF,GAASntF,GAKb,OADA4oE,EAAIjgE,KAAK,GACF,CAAEgG,IAAKA,EAAKm3E,GAAIA,4DCzCzB,aAEA5wE,OAAAgd,eAAAzzB,EAAA,aAAA,CACA8F,OAAA,IAGA,IAAAqhH,EAAAnmH,EAAA,oBAEAyV,OAAAgd,eAAAzzB,EAAA,SAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAq/D,EAAA1hH,UAGAgR,OAAAgd,eAAAzzB,EAAA,QAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAq/D,EAAAxgH,SAGA8P,OAAAgd,eAAAzzB,EAAA,gBAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAq/D,EAAArxD,iBAGAr/C,OAAAgd,eAAAzzB,EAAA,gBAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAq/D,EAAAtxD,iBAGAp/C,OAAAgd,eAAAzzB,EAAA,gBAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAq/D,EAAAvxD,iBAGAn/C,OAAAgd,eAAAzzB,EAAA,cAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAq/D,EAAAxxD,eAGAl/C,OAAAgd,eAAAzzB,EAAA,qBAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAq/D,EAAA72D,sBAGA75C,OAAAgd,eAAAzzB,EAAA,mBAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAq/D,EAAAv1D,oBAIA,IAAAw1D,EAAApmH,EAAA,mBAEAyV,OAAAgd,eAAAzzB,EAAA,QAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAs/D,EAAAriH,SAGA0R,OAAAgd,eAAAzzB,EAAA,cAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAs/D,EAAAvsD,eAGApkD,OAAAgd,eAAAzzB,EAAA,cAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAs/D,EAAA58D,eAGA/zC,OAAAgd,eAAAzzB,EAAA,YAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAs/D,EAAAtsD,aAGArkD,OAAAgd,eAAAzzB,EAAA,gBAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAs/D,EAAAptD,iBAGAvjD,OAAAgd,eAAAzzB,EAAA,kBAAA,CACA2zB,YAAA,EACAm0B,IAAA,WACA,OAAAs/D,EAAAjwD,yFC5FA,aACA,IAAIjvC,EAASlnB,EAAQ,eAAeknB,OAChCypC,EAAY3wD,EAAQ,mBAAmB2wD,UAS3C,SAAS01D,EAAUrhC,GACjBr0B,EAAUrwD,KAAKf,MAEfA,KAAK+mH,OAASp/F,EAAOm7D,YAAY2C,GACjCzlF,KAAKgnH,WAAavhC,EAClBzlF,KAAKinH,aAAe,EACpBjnH,KAAKknH,QAAU,CAAC,EAAG,EAAG,EAAG,GAEzBlnH,KAAKmnH,YAAa,EAhBL1mH,EAAQ,WAmBvBuuB,CAAS83F,EAAU11D,GAEnB01D,EAAS31F,UAAU8sE,WAAa,SAAUz2E,EAAO/gB,EAAU4L,GACzD,IAAIvQ,EAAQ,KACZ,IACE9B,KAAKkqB,OAAO1C,EAAO/gB,GACnB,MAAOqlB,GACPhqB,EAAQgqB,EAGVzZ,EAASvQ,IAGXglH,EAAS31F,UAAUhB,OAAS,SAAU9d,GACpC,IAAIvQ,EAAQ,KACZ,IACE9B,KAAKyP,KAAKzP,KAAKmqB,UACf,MAAO2B,GACPhqB,EAAQgqB,EAGVzZ,EAASvQ,IAGXglH,EAAS31F,UAAUjH,OAAS,SAAUvlB,EAAM8B,GAE1C,GA3CF,SAAmC4rB,EAAK+0F,GACtC,IAAKz/F,EAAOs6C,SAAS5vC,IAAuB,iBAARA,EAClC,MAAM,IAAIg+B,UAAU+2D,EAAS,iCAwC/BC,CAAyB1iH,EAAM,QAC3B3E,KAAKmnH,WAAY,MAAM,IAAIvmH,MAAM,yBAChC+mB,EAAOs6C,SAASt9D,KAAOA,EAAOgjB,EAAOG,KAAKnjB,EAAM8B,IAKrD,IAFA,IAAImkF,EAAQ5qF,KAAK+mH,OACbjgH,EAAS,EACN9G,KAAKinH,aAAetiH,EAAK3D,OAAS8F,GAAU9G,KAAKgnH,YAAY,CAClE,IAAK,IAAIzmH,EAAIP,KAAKinH,aAAc1mH,EAAIP,KAAKgnH,YAAap8B,EAAMrqF,KAAOoE,EAAKmC,KACxE9G,KAAKioF,UACLjoF,KAAKinH,aAAe,EAEtB,KAAOngH,EAASnC,EAAK3D,QAAQ4pF,EAAM5qF,KAAKinH,gBAAkBtiH,EAAKmC,KAG/D,IAAK,IAAI8T,EAAI,EAAGyzD,EAAsB,EAAd1pE,EAAK3D,OAAYqtE,EAAQ,IAAKzzD,EACpD5a,KAAKknH,QAAQtsG,IAAMyzD,GACnBA,EAASruE,KAAKknH,QAAQtsG,GAAK,WAAgB,GAC/B,IAAG5a,KAAKknH,QAAQtsG,IAAM,WAAeyzD,GAGnD,OAAOruE,MAGT8mH,EAAS31F,UAAU82D,QAAU,WAC3B,MAAM,IAAIrnF,MAAM,+BAGlBkmH,EAAS31F,UAAUhH,OAAS,SAAU1jB,GACpC,GAAIzG,KAAKmnH,WAAY,MAAM,IAAIvmH,MAAM,yBACrCZ,KAAKmnH,YAAa,EAElB,IAAIh9F,EAASnqB,KAAKsnH,eACDhjH,IAAbmC,IAAwB0jB,EAASA,EAAOjf,SAASzE,IAGrDzG,KAAK+mH,OAAOp9G,KAAK,GACjB3J,KAAKinH,aAAe,EACpB,IAAK,IAAI1mH,EAAI,EAAGA,EAAI,IAAKA,EAAGP,KAAKknH,QAAQ3mH,GAAK,EAE9C,OAAO4pB,GAGT28F,EAAS31F,UAAUm2F,QAAU,WAC3B,MAAM,IAAI1mH,MAAM,+BAGlBlB,EAAOD,QAAUqnH,iLC9FjB,IAAIh9F,EAAOrqB,EAEXqqB,EAAK4D,MAAQjtB,EAAQ,gBACrBqpB,EAAKy9F,OAAS9mH,EAAQ,iBACtBqpB,EAAKi3E,IAAMtgG,EAAQ,cACnBqpB,EAAK09F,OAAS/mH,EAAQ,iBACtBqpB,EAAK29F,KAAOhnH,EAAQ,eAGpBqpB,EAAK49F,KAAO59F,EAAKi3E,IAAI2mB,KACrB59F,EAAKinE,OAASjnE,EAAKi3E,IAAIhQ,OACvBjnE,EAAKknE,OAASlnE,EAAKi3E,IAAI/P,OACvBlnE,EAAKmnE,OAASnnE,EAAKi3E,IAAI9P,OACvBnnE,EAAKonE,OAASpnE,EAAKi3E,IAAI7P,OACvBpnE,EAAK69F,UAAY79F,EAAK09F,OAAOG,iICd7B,aAEA,IAAIj6F,EAAQjtB,EAAQ,WAChBsZ,EAAStZ,EAAQ,uBAErB,SAASmnH,IACP5nH,KAAK6nH,QAAU,KACf7nH,KAAK8nH,aAAe,EACpB9nH,KAAKylF,UAAYzlF,KAAK2jB,YAAY8hE,UAClCzlF,KAAK+nH,QAAU/nH,KAAK2jB,YAAYokG,QAChC/nH,KAAK66G,aAAe76G,KAAK2jB,YAAYk3F,aACrC76G,KAAKgoH,UAAYhoH,KAAK2jB,YAAYqkG,UAAY,EAC9ChoH,KAAKosE,OAAS,MAEdpsE,KAAKioH,QAAUjoH,KAAKylF,UAAY,EAChCzlF,KAAKkoH,SAAWloH,KAAKylF,UAAY,GAEnChmF,EAAQmoH,UAAYA,EAEpBA,EAAUz2F,UAAUjH,OAAS,SAAgBk9C,EAAKnR,GAUhD,GARAmR,EAAM15C,EAAM+9C,QAAQrE,EAAKnR,GACpBj2D,KAAK6nH,QAGR7nH,KAAK6nH,QAAU7nH,KAAK6nH,QAAQllH,OAAOykE,GAFnCpnE,KAAK6nH,QAAUzgD,EAGjBpnE,KAAK8nH,cAAgB1gD,EAAIpmE,OAGrBhB,KAAK6nH,QAAQ7mH,QAAUhB,KAAKioH,QAAS,CAIvC,IAAI/nH,GAHJknE,EAAMpnE,KAAK6nH,SAGC7mH,OAAShB,KAAKioH,QAC1BjoH,KAAK6nH,QAAUzgD,EAAInpD,MAAMmpD,EAAIpmE,OAASd,EAAGknE,EAAIpmE,QACjB,IAAxBhB,KAAK6nH,QAAQ7mH,SACfhB,KAAK6nH,QAAU,MAEjBzgD,EAAM15C,EAAMy6F,OAAO/gD,EAAK,EAAGA,EAAIpmE,OAASd,EAAGF,KAAKosE,QAChD,IAAK,IAAI7rE,EAAI,EAAGA,EAAI6mE,EAAIpmE,OAAQT,GAAKP,KAAKkoH,SACxCloH,KAAKioF,QAAQ7gB,EAAK7mE,EAAGA,EAAIP,KAAKkoH,UAGlC,OAAOloH,MAGT4nH,EAAUz2F,UAAUhH,OAAS,SAAgB8rC,GAI3C,OAHAj2D,KAAKkqB,OAAOlqB,KAAKqqG,QACjBtwF,EAAwB,OAAjB/Z,KAAK6nH,SAEL7nH,KAAKsnH,QAAQrxD,IAGtB2xD,EAAUz2F,UAAUk5E,KAAO,WACzB,IAAI7nE,EAAMxiC,KAAK8nH,aACXjlD,EAAQ7iE,KAAKioH,QACblzD,EAAI8N,GAAUrgC,EAAMxiC,KAAKgoH,WAAanlD,EACtC1M,EAAM,IAAI3lD,MAAMukD,EAAI/0D,KAAKgoH,WAC7B7xD,EAAI,GAAK,IACT,IAAK,IAAI51D,EAAI,EAAGA,EAAIw0D,EAAGx0D,IACrB41D,EAAI51D,GAAK,EAIX,GADAiiC,IAAQ,EACY,QAAhBxiC,KAAKosE,OAAkB,CACzB,IAAK,IAAI/rE,EAAI,EAAGA,EAAIL,KAAKgoH,UAAW3nH,IAClC81D,EAAI51D,KAAO,EAEb41D,EAAI51D,KAAO,EACX41D,EAAI51D,KAAO,EACX41D,EAAI51D,KAAO,EACX41D,EAAI51D,KAAO,EACX41D,EAAI51D,KAAQiiC,IAAQ,GAAM,IAC1B2zB,EAAI51D,KAAQiiC,IAAQ,GAAM,IAC1B2zB,EAAI51D,KAAQiiC,IAAQ,EAAK,IACzB2zB,EAAI51D,KAAa,IAANiiC,OAWX,IATA2zB,EAAI51D,KAAa,IAANiiC,EACX2zB,EAAI51D,KAAQiiC,IAAQ,EAAK,IACzB2zB,EAAI51D,KAAQiiC,IAAQ,GAAM,IAC1B2zB,EAAI51D,KAAQiiC,IAAQ,GAAM,IAC1B2zB,EAAI51D,KAAO,EACX41D,EAAI51D,KAAO,EACX41D,EAAI51D,KAAO,EACX41D,EAAI51D,KAAO,EAENF,EAAI,EAAGA,EAAIL,KAAKgoH,UAAW3nH,IAC9B81D,EAAI51D,KAAO,EAGf,OAAO41D,oEC1FT,aAEA,IAAIzoC,EAAQjtB,EAAQ,WAChBsZ,EAAStZ,EAAQ,uBAErB,SAAS4gG,EAAKv3E,EAAMna,EAAKsmD,GACvB,KAAMj2D,gBAAgBqhG,GACpB,OAAO,IAAIA,EAAKv3E,EAAMna,EAAKsmD,GAC7Bj2D,KAAKghG,KAAOl3E,EACZ9pB,KAAKylF,UAAY37D,EAAK27D,UAAY,EAClCzlF,KAAK+nH,QAAUj+F,EAAKi+F,QAAU,EAC9B/nH,KAAKq5C,MAAQ,KACbr5C,KAAKooH,MAAQ,KAEbpoH,KAAKikE,MAAMv2C,EAAM+9C,QAAQ97D,EAAKsmD,IAEhCv2D,EAAOD,QAAU4hG,EAEjBA,EAAKlwE,UAAU8yC,MAAQ,SAAct0D,GAE/BA,EAAI3O,OAAShB,KAAKylF,YACpB91E,GAAM,IAAI3P,KAAKghG,MAAO92E,OAAOva,GAAKwa,UACpCpQ,EAAOpK,EAAI3O,QAAUhB,KAAKylF,WAG1B,IAAK,IAAIllF,EAAIoP,EAAI3O,OAAQT,EAAIP,KAAKylF,UAAWllF,IAC3CoP,EAAIF,KAAK,GAEX,IAAKlP,EAAI,EAAGA,EAAIoP,EAAI3O,OAAQT,IAC1BoP,EAAIpP,IAAM,GAIZ,IAHAP,KAAKq5C,OAAQ,IAAIr5C,KAAKghG,MAAO92E,OAAOva,GAG/BpP,EAAI,EAAGA,EAAIoP,EAAI3O,OAAQT,IAC1BoP,EAAIpP,IAAM,IACZP,KAAKooH,OAAQ,IAAIpoH,KAAKghG,MAAO92E,OAAOva,IAGtC0xF,EAAKlwE,UAAUjH,OAAS,SAAgBk9C,EAAKnR,GAE3C,OADAj2D,KAAKq5C,MAAMnvB,OAAOk9C,EAAKnR,GAChBj2D,MAGTqhG,EAAKlwE,UAAUhH,OAAS,SAAgB8rC,GAEtC,OADAj2D,KAAKooH,MAAMl+F,OAAOlqB,KAAKq5C,MAAMlvB,UACtBnqB,KAAKooH,MAAMj+F,OAAO8rC,qEC7C3B,aAEA,IAAIvoC,EAAQjtB,EAAQ,WAChB8mH,EAAS9mH,EAAQ,YAEjB4nH,EAAS36F,EAAM26F,OACfC,EAAQ56F,EAAM46F,MACdC,EAAU76F,EAAM66F,QAChBC,EAAU96F,EAAM86F,QAChBZ,EAAYL,EAAOK,UAEvB,SAAS9mB,IACP,KAAM9gG,gBAAgB8gG,GACpB,OAAO,IAAIA,EAEb8mB,EAAU7mH,KAAKf,MAEfA,KAAKu+C,EAAI,CAAE,WAAY,WAAY,WAAY,UAAY,YAC3Dv+C,KAAKosE,OAAS,SA0DhB,SAAS5sE,EAAEob,EAAGlI,EAAGC,EAAGuuE,GAClB,OAAItmE,GAAK,GACAlI,EAAIC,EAAIuuE,EACRtmE,GAAK,GACJlI,EAAIC,GAAQD,EAAKwuE,EAClBtmE,GAAK,IACJlI,GAAMC,GAAMuuE,EACbtmE,GAAK,GACJlI,EAAIwuE,EAAMvuE,GAAMuuE,EAEjBxuE,GAAKC,GAAMuuE,GAGtB,SAASunC,EAAE7tG,GACT,OAAIA,GAAK,GACA,EACAA,GAAK,GACL,WACAA,GAAK,GACL,WACAA,GAAK,GACL,WAEA,WAGX,SAAS8tG,EAAG9tG,GACV,OAAIA,GAAK,GACA,WACAA,GAAK,GACL,WACAA,GAAK,GACL,WACAA,GAAK,GACL,WAEA,EA5FX8S,EAAMsB,SAAS8xE,EAAW8mB,GAC1BnoH,EAAQkoH,UAAY7mB,EAEpBA,EAAUrb,UAAY,IACtBqb,EAAUinB,QAAU,IACpBjnB,EAAU+Z,aAAe,IACzB/Z,EAAUknB,UAAY,GAEtBlnB,EAAU3vE,UAAU82D,QAAU,SAAgB7gB,EAAK9zD,GAWjD,IAVA,IAAI0oE,EAAIh8E,KAAKu+C,EAAE,GACX09B,EAAIj8E,KAAKu+C,EAAE,GACX29B,EAAIl8E,KAAKu+C,EAAE,GACX49B,EAAIn8E,KAAKu+C,EAAE,GACXoqE,EAAI3oH,KAAKu+C,EAAE,GACXqqE,EAAK5sC,EACL6sC,EAAK5sC,EACL6sC,EAAK5sC,EACL6sC,EAAK5sC,EACL6sC,EAAKL,EACA/tG,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,IAAIjM,EAAI25G,EACND,EACEG,EAAQxsC,EAAGx8E,EAAEob,EAAGqhE,EAAGC,EAAGC,GAAI/U,EAAIlnE,EAAE0a,GAAKtH,GAAQm1G,EAAE7tG,IAC/C7J,EAAE6J,IACJ+tG,GACF3sC,EAAI2sC,EACJA,EAAIxsC,EACJA,EAAIksC,EAAOnsC,EAAG,IACdA,EAAID,EACJA,EAAIttE,EACJA,EAAI25G,EACFD,EACEG,EAAQI,EAAIppH,EAAE,GAAKob,EAAGiuG,EAAIC,EAAIC,GAAK3hD,EAAI6hD,EAAGruG,GAAKtH,GAAQo1G,EAAG9tG,IAC1DsuG,EAAGtuG,IACLouG,GACFJ,EAAKI,EACLA,EAAKD,EACLA,EAAKV,EAAOS,EAAI,IAChBA,EAAKD,EACLA,EAAKl6G,EAEPA,EAAI45G,EAAQvoH,KAAKu+C,EAAE,GAAI29B,EAAG6sC,GAC1B/oH,KAAKu+C,EAAE,GAAKgqE,EAAQvoH,KAAKu+C,EAAE,GAAI49B,EAAG6sC,GAClChpH,KAAKu+C,EAAE,GAAKgqE,EAAQvoH,KAAKu+C,EAAE,GAAIoqE,EAAGC,GAClC5oH,KAAKu+C,EAAE,GAAKgqE,EAAQvoH,KAAKu+C,EAAE,GAAIy9B,EAAG6sC,GAClC7oH,KAAKu+C,EAAE,GAAKgqE,EAAQvoH,KAAKu+C,EAAE,GAAI09B,EAAG6sC,GAClC9oH,KAAKu+C,EAAE,GAAK5vC,GAGdmyF,EAAU3vE,UAAUm2F,QAAU,SAAgBrxD,GAC5C,MAAY,QAARA,EACKvoC,EAAMy7F,QAAQnpH,KAAKu+C,EAAG,UAEtB7wB,EAAM07F,QAAQppH,KAAKu+C,EAAG,WA0CjC,IAAIr+C,EAAI,CACN,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,IAGhD+oH,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,IAGhDl4G,EAAI,CACN,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,GAGnDm4G,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,0DChJtD,aAEAzpH,EAAQioH,KAAOjnH,EAAQ,WACvBhB,EAAQuxF,OAASvwF,EAAQ,aACzBhB,EAAQsxF,OAAStwF,EAAQ,aACzBhB,EAAQwxF,OAASxwF,EAAQ,aACzBhB,EAAQyxF,OAASzwF,EAAQ,oHCNzB,aAEA,IAAIitB,EAAQjtB,EAAQ,YAChB8mH,EAAS9mH,EAAQ,aACjB4oH,EAAY5oH,EAAQ,YAEpB4nH,EAAS36F,EAAM26F,OACfC,EAAQ56F,EAAM46F,MACdgB,EAAU57F,EAAM47F,QAChBC,EAAOF,EAAUE,KACjB3B,EAAYL,EAAOK,UAEnB4B,EAAS,CACX,WAAY,WACZ,WAAY,YAGd,SAASC,IACP,KAAMzpH,gBAAgBypH,GACpB,OAAO,IAAIA,EAEb7B,EAAU7mH,KAAKf,MACfA,KAAKu+C,EAAI,CACP,WAAY,WAAY,WACxB,UAAY,YACdv+C,KAAK0pH,EAAI,IAAIl5G,MAAM,IAGrBkd,EAAMsB,SAASy6F,EAAM7B,GACrBloH,EAAOD,QAAUgqH,EAEjBA,EAAKhkC,UAAY,IACjBgkC,EAAK1B,QAAU,IACf0B,EAAK5O,aAAe,GACpB4O,EAAKzB,UAAY,GAEjByB,EAAKt4F,UAAU82D,QAAU,SAAiB7gB,EAAK9zD,GAG7C,IAFA,IAAIo2G,EAAI1pH,KAAK0pH,EAEJnpH,EAAI,EAAGA,EAAI,GAAIA,IACtBmpH,EAAEnpH,GAAK6mE,EAAI9zD,EAAQ/S,GAErB,KAAMA,EAAImpH,EAAE1oH,OAAQT,IAClBmpH,EAAEnpH,GAAK8nH,EAAOqB,EAAEnpH,EAAI,GAAKmpH,EAAEnpH,EAAI,GAAKmpH,EAAEnpH,EAAI,IAAMmpH,EAAEnpH,EAAI,IAAK,GAE7D,IAAII,EAAIX,KAAKu+C,EAAE,GACX7nC,EAAI1W,KAAKu+C,EAAE,GACX/9C,EAAIR,KAAKu+C,EAAE,GACX/qB,EAAIxzB,KAAKu+C,EAAE,GACXp+C,EAAIH,KAAKu+C,EAAE,GAEf,IAAKh+C,EAAI,EAAGA,EAAImpH,EAAE1oH,OAAQT,IAAK,CAC7B,IAAIwQ,KAAOxQ,EAAI,IACXF,EAAIipH,EAAQjB,EAAO1nH,EAAG,GAAI4oH,EAAKx4G,EAAG2F,EAAGlW,EAAGgzB,GAAIrzB,EAAGupH,EAAEnpH,GAAIipH,EAAOz4G,IAChE5Q,EAAIqzB,EACJA,EAAIhzB,EACJA,EAAI6nH,EAAO3xG,EAAG,IACdA,EAAI/V,EACJA,EAAIN,EAGNL,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAI59C,GAC7BX,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAI7nC,GAC7B1W,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAI/9C,GAC7BR,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAI/qB,GAC7BxzB,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAIp+C,IAG/BspH,EAAKt4F,UAAUm2F,QAAU,SAAgBrxD,GACvC,MAAY,QAARA,EACKvoC,EAAMy7F,QAAQnpH,KAAKu+C,EAAG,OAEtB7wB,EAAM07F,QAAQppH,KAAKu+C,EAAG,+ECxEjC,aAEA,IAAI7wB,EAAQjtB,EAAQ,YAChBkpH,EAASlpH,EAAQ,SAErB,SAASmpH,IACP,KAAM5pH,gBAAgB4pH,GACpB,OAAO,IAAIA,EAEbD,EAAO5oH,KAAKf,MACZA,KAAKu+C,EAAI,CACP,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,YAExC7wB,EAAMsB,SAAS46F,EAAQD,GACvBjqH,EAAOD,QAAUmqH,EAEjBA,EAAOnkC,UAAY,IACnBmkC,EAAO7B,QAAU,IACjB6B,EAAO/O,aAAe,IACtB+O,EAAO5B,UAAY,GAEnB4B,EAAOz4F,UAAUm2F,QAAU,SAAgBrxD,GAEzC,MAAY,QAARA,EACKvoC,EAAMy7F,QAAQnpH,KAAKu+C,EAAEtgC,MAAM,EAAG,GAAI,OAElCyP,EAAM07F,QAAQppH,KAAKu+C,EAAEtgC,MAAM,EAAG,GAAI,4DC3B7C,aAEA,IAAIyP,EAAQjtB,EAAQ,YAChB8mH,EAAS9mH,EAAQ,aACjB4oH,EAAY5oH,EAAQ,YACpBsZ,EAAStZ,EAAQ,uBAEjB6nH,EAAQ56F,EAAM46F,MACdE,EAAU96F,EAAM86F,QAChBc,EAAU57F,EAAM47F,QAChBO,EAAOR,EAAUQ,KACjBC,EAAQT,EAAUS,MAClBC,EAASV,EAAUU,OACnBC,EAASX,EAAUW,OACnBC,EAASZ,EAAUY,OACnBC,EAASb,EAAUa,OAEnBtC,EAAYL,EAAOK,UAEnBuC,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,SAASR,IACP,KAAM3pH,gBAAgB2pH,GACpB,OAAO,IAAIA,EAEb/B,EAAU7mH,KAAKf,MACfA,KAAKu+C,EAAI,CACP,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,YAEtCv+C,KAAK+0D,EAAIo1D,EACTnqH,KAAK0pH,EAAI,IAAIl5G,MAAM,IAErBkd,EAAMsB,SAAS26F,EAAQ/B,GACvBloH,EAAOD,QAAUkqH,EAEjBA,EAAOlkC,UAAY,IACnBkkC,EAAO5B,QAAU,IACjB4B,EAAO9O,aAAe,IACtB8O,EAAO3B,UAAY,GAEnB2B,EAAOx4F,UAAU82D,QAAU,SAAiB7gB,EAAK9zD,GAG/C,IAFA,IAAIo2G,EAAI1pH,KAAK0pH,EAEJnpH,EAAI,EAAGA,EAAI,GAAIA,IACtBmpH,EAAEnpH,GAAK6mE,EAAI9zD,EAAQ/S,GACrB,KAAOA,EAAImpH,EAAE1oH,OAAQT,IACnBmpH,EAAEnpH,GAAKioH,EAAQ0B,EAAOR,EAAEnpH,EAAI,IAAKmpH,EAAEnpH,EAAI,GAAI0pH,EAAOP,EAAEnpH,EAAI,KAAMmpH,EAAEnpH,EAAI,KAEtE,IAAII,EAAIX,KAAKu+C,EAAE,GACX7nC,EAAI1W,KAAKu+C,EAAE,GACX/9C,EAAIR,KAAKu+C,EAAE,GACX/qB,EAAIxzB,KAAKu+C,EAAE,GACXp+C,EAAIH,KAAKu+C,EAAE,GACX/+C,EAAIQ,KAAKu+C,EAAE,GACX69B,EAAIp8E,KAAKu+C,EAAE,GACXA,EAAIv+C,KAAKu+C,EAAE,GAGf,IADAxkC,EAAO/Z,KAAK+0D,EAAE/zD,SAAW0oH,EAAE1oH,QACtBT,EAAI,EAAGA,EAAImpH,EAAE1oH,OAAQT,IAAK,CAC7B,IAAI6pH,EAAKd,EAAQ/qE,EAAGyrE,EAAO7pH,GAAI0pH,EAAK1pH,EAAGX,EAAG48E,GAAIp8E,KAAK+0D,EAAEx0D,GAAImpH,EAAEnpH,IACvD8pH,EAAK/B,EAAMyB,EAAOppH,GAAImpH,EAAMnpH,EAAG+V,EAAGlW,IACtC+9C,EAAI69B,EACJA,EAAI58E,EACJA,EAAIW,EACJA,EAAImoH,EAAM90F,EAAG42F,GACb52F,EAAIhzB,EACJA,EAAIkW,EACJA,EAAI/V,EACJA,EAAI2nH,EAAM8B,EAAIC,GAGhBrqH,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAI59C,GAC7BX,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAI7nC,GAC7B1W,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAI/9C,GAC7BR,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAI/qB,GAC7BxzB,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAIp+C,GAC7BH,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAI/+C,GAC7BQ,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAI69B,GAC7Bp8E,KAAKu+C,EAAE,GAAK+pE,EAAMtoH,KAAKu+C,EAAE,GAAIA,IAG/BorE,EAAOx4F,UAAUm2F,QAAU,SAAgBrxD,GACzC,MAAY,QAARA,EACKvoC,EAAMy7F,QAAQnpH,KAAKu+C,EAAG,OAEtB7wB,EAAM07F,QAAQppH,KAAKu+C,EAAG,yGCvGjC,aAEA,IAAI7wB,EAAQjtB,EAAQ,YAEhB6pH,EAAS7pH,EAAQ,SAErB,SAAS8pH,IACP,KAAMvqH,gBAAgBuqH,GACpB,OAAO,IAAIA,EAEbD,EAAOvpH,KAAKf,MACZA,KAAKu+C,EAAI,CACP,WAAY,WACZ,WAAY,UACZ,WAAY,UACZ,UAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,YAEhB7wB,EAAMsB,SAASu7F,EAAQD,GACvB5qH,EAAOD,QAAU8qH,EAEjBA,EAAO9kC,UAAY,KACnB8kC,EAAOxC,QAAU,IACjBwC,EAAO1P,aAAe,IACtB0P,EAAOvC,UAAY,IAEnBuC,EAAOp5F,UAAUm2F,QAAU,SAAgBrxD,GACzC,MAAY,QAARA,EACKvoC,EAAMy7F,QAAQnpH,KAAKu+C,EAAEtgC,MAAM,EAAG,IAAK,OAEnCyP,EAAM07F,QAAQppH,KAAKu+C,EAAEtgC,MAAM,EAAG,IAAK,4DCjC9C,aAEA,IAAIyP,EAAQjtB,EAAQ,YAChB8mH,EAAS9mH,EAAQ,aACjBsZ,EAAStZ,EAAQ,uBAEjB+pH,EAAY98F,EAAM88F,UAClBC,EAAY/8F,EAAM+8F,UAClBC,EAAWh9F,EAAMg9F,SACjBC,EAAWj9F,EAAMi9F,SACjBC,EAAQl9F,EAAMk9F,MACdC,EAAWn9F,EAAMm9F,SACjBC,EAAWp9F,EAAMo9F,SACjBC,EAAar9F,EAAMq9F,WACnBC,EAAat9F,EAAMs9F,WACnBC,EAAav9F,EAAMu9F,WACnBC,EAAax9F,EAAMw9F,WAEnBtD,EAAYL,EAAOK,UAEnBuD,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,SAASb,IACP,KAAMtqH,gBAAgBsqH,GACpB,OAAO,IAAIA,EAEb1C,EAAU7mH,KAAKf,MACfA,KAAKu+C,EAAI,CACP,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,WACZ,WAAY,UACZ,UAAY,WACZ,WAAY,WACdv+C,KAAK+0D,EAAIo2D,EACTnrH,KAAK0pH,EAAI,IAAIl5G,MAAM,KAyIrB,SAAS46G,EAAQC,EAAIC,EAAIC,EAAIC,EAAIC,GAC/B,IAAIvrH,EAAKmrH,EAAKE,GAASF,EAAMI,EAG7B,OAFIvrH,EAAI,IACNA,GAAK,YACAA,EAGT,SAASwrH,EAAQL,EAAIC,EAAIC,EAAIC,EAAIC,EAAIE,GACnC,IAAIzrH,EAAKorH,EAAKE,GAASF,EAAMK,EAG7B,OAFIzrH,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS0rH,EAASP,EAAIC,EAAIC,EAAIC,EAAIC,GAChC,IAAIvrH,EAAKmrH,EAAKE,EAAOF,EAAKI,EAAOF,EAAKE,EAGtC,OAFIvrH,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS2rH,EAASR,EAAIC,EAAIC,EAAIC,EAAIC,EAAIE,GACpC,IAAIzrH,EAAKorH,EAAKE,EAAOF,EAAKK,EAAOH,EAAKG,EAGtC,OAFIzrH,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS4rH,EAAUT,EAAIC,GACrB,IAIIprH,EAJQsqH,EAAUa,EAAIC,EAAI,IAClBd,EAAUc,EAAID,EAAI,GAClBb,EAAUc,EAAID,EAAI,GAK9B,OAFInrH,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS6rH,EAAUV,EAAIC,GACrB,IAIIprH,EAJQuqH,EAAUY,EAAIC,EAAI,IAClBb,EAAUa,EAAID,EAAI,GAClBZ,EAAUa,EAAID,EAAI,GAK9B,OAFInrH,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS8rH,EAAUX,EAAIC,GACrB,IAIIprH,EAJQsqH,EAAUa,EAAIC,EAAI,IAClBd,EAAUa,EAAIC,EAAI,IAClBd,EAAUc,EAAID,EAAI,GAK9B,OAFInrH,EAAI,IACNA,GAAK,YACAA,EAGT,SAAS+rH,EAAUZ,EAAIC,GACrB,IAIIprH,EAJQuqH,EAAUY,EAAIC,EAAI,IAClBb,EAAUY,EAAIC,EAAI,IAClBb,EAAUa,EAAID,EAAI,GAK9B,OAFInrH,EAAI,IACNA,GAAK,YACAA,EAGT,SAASgsH,EAAUb,EAAIC,GACrB,IAIIprH,EAJQsqH,EAAUa,EAAIC,EAAI,GAClBd,EAAUa,EAAIC,EAAI,GAClBZ,EAASW,EAAIC,EAAI,GAK7B,OAFIprH,EAAI,IACNA,GAAK,YACAA,EAGT,SAASisH,EAAUd,EAAIC,GACrB,IAIIprH,EAJQuqH,EAAUY,EAAIC,EAAI,GAClBb,EAAUY,EAAIC,EAAI,GAClBX,EAASU,EAAIC,EAAI,GAK7B,OAFIprH,EAAI,IACNA,GAAK,YACAA,EAGT,SAASksH,EAAUf,EAAIC,GACrB,IAIIprH,EAJQsqH,EAAUa,EAAIC,EAAI,IAClBd,EAAUc,EAAID,EAAI,IAClBX,EAASW,EAAIC,EAAI,GAK7B,OAFIprH,EAAI,IACNA,GAAK,YACAA,EAGT,SAASmsH,EAAUhB,EAAIC,GACrB,IAIIprH,EAJQuqH,EAAUY,EAAIC,EAAI,IAClBb,EAAUa,EAAID,EAAI,IAClBV,EAASU,EAAIC,EAAI,GAK7B,OAFIprH,EAAI,IACNA,GAAK,YACAA,EAxPTwtB,EAAMsB,SAASs7F,EAAQ1C,GACvBloH,EAAOD,QAAU6qH,EAEjBA,EAAO7kC,UAAY,KACnB6kC,EAAOvC,QAAU,IACjBuC,EAAOzP,aAAe,IACtByP,EAAOtC,UAAY,IAEnBsC,EAAOn5F,UAAUm7F,cAAgB,SAAuBllD,EAAK9zD,GAI3D,IAHA,IAAIo2G,EAAI1pH,KAAK0pH,EAGJnpH,EAAI,EAAGA,EAAI,GAAIA,IACtBmpH,EAAEnpH,GAAK6mE,EAAI9zD,EAAQ/S,GACrB,KAAOA,EAAImpH,EAAE1oH,OAAQT,GAAK,EAAG,CAC3B,IAAIgsH,EAAQH,EAAU1C,EAAEnpH,EAAI,GAAImpH,EAAEnpH,EAAI,IAClCisH,EAAQH,EAAU3C,EAAEnpH,EAAI,GAAImpH,EAAEnpH,EAAI,IAClCksH,EAAQ/C,EAAEnpH,EAAI,IACdmsH,EAAQhD,EAAEnpH,EAAI,IACdosH,EAAQT,EAAUxC,EAAEnpH,EAAI,IAAKmpH,EAAEnpH,EAAI,KACnCqsH,EAAQT,EAAUzC,EAAEnpH,EAAI,IAAKmpH,EAAEnpH,EAAI,KACnCssH,EAAQnD,EAAEnpH,EAAI,IACdusH,EAAQpD,EAAEnpH,EAAI,IAElBmpH,EAAEnpH,GAAKwqH,EACLwB,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,GACTpD,EAAEnpH,EAAI,GAAKyqH,EACTuB,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,KAIbxC,EAAOn5F,UAAU82D,QAAU,SAAiB7gB,EAAK9zD,GAC/CtT,KAAKssH,cAAcllD,EAAK9zD,GAExB,IAAIo2G,EAAI1pH,KAAK0pH,EAETqD,EAAK/sH,KAAKu+C,EAAE,GACZyuE,EAAKhtH,KAAKu+C,EAAE,GACZ0uE,EAAKjtH,KAAKu+C,EAAE,GACZ2sC,EAAKlrF,KAAKu+C,EAAE,GACZ2uE,EAAKltH,KAAKu+C,EAAE,GACZ4uE,EAAKntH,KAAKu+C,EAAE,GACZ6jD,EAAKpiG,KAAKu+C,EAAE,GACZ6uE,EAAKptH,KAAKu+C,EAAE,GACZ8uE,EAAKrtH,KAAKu+C,EAAE,GACZ+uE,EAAKttH,KAAKu+C,EAAE,GACZgvE,EAAKvtH,KAAKu+C,EAAE,IACZivE,EAAKxtH,KAAKu+C,EAAE,IACZkvE,EAAKztH,KAAKu+C,EAAE,IACZmvE,EAAK1tH,KAAKu+C,EAAE,IACZmpD,EAAK1nG,KAAKu+C,EAAE,IACZovE,EAAK3tH,KAAKu+C,EAAE,IAEhBxkC,EAAO/Z,KAAK+0D,EAAE/zD,SAAW0oH,EAAE1oH,QAC3B,IAAK,IAAIT,EAAI,EAAGA,EAAImpH,EAAE1oH,OAAQT,GAAK,EAAG,CACpC,IAAIgsH,EAAQ7kB,EACR8kB,EAAQmB,EACRlB,EAAQT,EAAUqB,EAAIC,GACtBZ,EAAQT,EAAUoB,EAAIC,GACtBX,EAAQvB,EAAQiC,EAAIC,EAAIC,EAAIC,EAAIC,GAChCb,EAAQlB,EAAQ2B,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GACpCb,EAAQ7sH,KAAK+0D,EAAEx0D,GACfusH,EAAQ9sH,KAAK+0D,EAAEx0D,EAAI,GACnBqtH,EAAQlE,EAAEnpH,GACVstH,EAAQnE,EAAEnpH,EAAI,GAEdutH,EAAQ7C,EACVsB,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPc,EAAOC,GACLE,EAAQ7C,EACVqB,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPC,EAAOC,EACPc,EAAOC,GAETtB,EAAQT,EAAUiB,EAAIC,GACtBR,EAAQT,EAAUgB,EAAIC,GACtBP,EAAQb,EAASmB,EAAIC,EAAIC,EAAI/hC,EAAIgiC,GACjCR,EAAQb,EAASkB,EAAIC,EAAIC,EAAI/hC,EAAIgiC,EAAIC,GAErC,IAAIa,EAAQnD,EAAS0B,EAAOC,EAAOC,EAAOC,GACtCuB,EAAQnD,EAASyB,EAAOC,EAAOC,EAAOC,GAE1ChlB,EAAK+lB,EACLE,EAAKD,EAELD,EAAKF,EACLG,EAAKF,EAELD,EAAKF,EACLG,EAAKF,EAELD,EAAKxC,EAASzoB,EAAIgrB,EAAIU,EAAOC,GAC7BT,EAAKxC,EAASsC,EAAIA,EAAIU,EAAOC,GAE7B3rB,EAAK8qB,EACLE,EAAKD,EAELD,EAAKD,EACLE,EAAKjiC,EAEL+hC,EAAKF,EACL7hC,EAAK8hC,EAELD,EAAKlC,EAASiD,EAAOC,EAAOC,EAAOC,GACnCjB,EAAKlC,EAASgD,EAAOC,EAAOC,EAAOC,GAGrCrD,EAAM5qH,KAAKu+C,EAAG,EAAGwuE,EAAIC,GACrBpC,EAAM5qH,KAAKu+C,EAAG,EAAG0uE,EAAI/hC,GACrB0/B,EAAM5qH,KAAKu+C,EAAG,EAAG2uE,EAAIC,GACrBvC,EAAM5qH,KAAKu+C,EAAG,EAAG6jD,EAAIgrB,GACrBxC,EAAM5qH,KAAKu+C,EAAG,EAAG8uE,EAAIC,GACrB1C,EAAM5qH,KAAKu+C,EAAG,GAAIgvE,EAAIC,GACtB5C,EAAM5qH,KAAKu+C,EAAG,GAAIkvE,EAAIC,GACtB9C,EAAM5qH,KAAKu+C,EAAG,GAAImpD,EAAIimB,IAGxBrD,EAAOn5F,UAAUm2F,QAAU,SAAgBrxD,GACzC,MAAY,QAARA,EACKvoC,EAAMy7F,QAAQnpH,KAAKu+C,EAAG,OAEtB7wB,EAAM07F,QAAQppH,KAAKu+C,EAAG,0FCpNjC,aAEA,IACI2vE,EADQztH,EAAQ,YACDytH,OAYnB,SAASrE,EAAKn3G,EAAGC,EAAGuuE,GAClB,OAAQxuE,EAAIC,GAAQD,EAAKwuE,EAI3B,SAAS4oC,EAAMp3G,EAAGC,EAAGuuE,GACnB,OAAQxuE,EAAIC,EAAMD,EAAIwuE,EAAMvuE,EAAIuuE,EAIlC,SAASitC,EAAIz7G,EAAGC,EAAGuuE,GACjB,OAAOxuE,EAAIC,EAAIuuE,EAbjBzhF,EAAQ8pH,KARR,SAAcx4G,EAAG2B,EAAGC,EAAGuuE,GACrB,OAAU,IAANnwE,EACK84G,EAAKn3G,EAAGC,EAAGuuE,GACV,IAANnwE,GAAiB,IAANA,EACNo9G,EAAIz7G,EAAGC,EAAGuuE,GACT,IAANnwE,EACK+4G,EAAMp3G,EAAGC,EAAGuuE,QADrB,GAQFzhF,EAAQoqH,KAAOA,EAKfpqH,EAAQqqH,MAAQA,EAKhBrqH,EAAQ0uH,IAAMA,EAKd1uH,EAAQsqH,OAHR,SAAgBr3G,GACd,OAAOw7G,EAAOx7G,EAAG,GAAKw7G,EAAOx7G,EAAG,IAAMw7G,EAAOx7G,EAAG,KAOlDjT,EAAQuqH,OAHR,SAAgBt3G,GACd,OAAOw7G,EAAOx7G,EAAG,GAAKw7G,EAAOx7G,EAAG,IAAMw7G,EAAOx7G,EAAG,KAOlDjT,EAAQwqH,OAHR,SAAgBv3G,GACd,OAAOw7G,EAAOx7G,EAAG,GAAKw7G,EAAOx7G,EAAG,IAAOA,IAAM,GAO/CjT,EAAQyqH,OAHR,SAAgBx3G,GACd,OAAOw7G,EAAOx7G,EAAG,IAAMw7G,EAAOx7G,EAAG,IAAOA,IAAM,4CC9ChD,aAEA,IAAIqH,EAAStZ,EAAQ,uBACjBuuB,EAAWvuB,EAAQ,YAIvB,SAAS2tH,EAAgBhnD,EAAK7mE,GAC5B,OAAqC,QAAZ,MAApB6mE,EAAI/9C,WAAW9oB,QAGhBA,EAAI,GAAKA,EAAI,GAAK6mE,EAAIpmE,SAGkB,QAAZ,MAAxBomE,EAAI/9C,WAAW9oB,EAAI,KA0D7B,SAAS8tH,EAAMjhD,GAKb,OAJWA,IAAM,GACLA,IAAM,EAAK,MACXA,GAAK,EAAK,UACN,IAAJA,IAAa,MACV,EAgBjB,SAASgyC,EAAM3xC,GACb,OAAoB,IAAhBA,EAAKzsE,OACA,IAAMysE,EAENA,EAIX,SAAS6gD,EAAM7gD,GACb,OAAoB,IAAhBA,EAAKzsE,OACA,IAAMysE,EACU,IAAhBA,EAAKzsE,OACL,KAAOysE,EACS,IAAhBA,EAAKzsE,OACL,MAAQysE,EACQ,IAAhBA,EAAKzsE,OACL,OAASysE,EACO,IAAhBA,EAAKzsE,OACL,QAAUysE,EACM,IAAhBA,EAAKzsE,OACL,SAAWysE,EACK,IAAhBA,EAAKzsE,OACL,UAAYysE,EAEZA,EAhHXhuE,EAAQuvB,SAAWA,EAyDnBvvB,EAAQgsE,QA7CR,SAAiBrE,EAAKnR,GACpB,GAAIzlD,MAAMwU,QAAQoiD,GAChB,OAAOA,EAAInpD,QACb,IAAKmpD,EACH,MAAO,GACT,IAAIjR,EAAM,GACV,GAAmB,iBAARiR,EACT,GAAKnR,GAyBE,GAAY,QAARA,EAIT,KAHAmR,EAAMA,EAAIj7D,QAAQ,eAAgB,KAC1BnL,OAAS,GAAM,IACrBomE,EAAM,IAAMA,GACT7mE,EAAI,EAAGA,EAAI6mE,EAAIpmE,OAAQT,GAAK,EAC/B41D,EAAI1mD,KAAK+d,SAAS45C,EAAI7mE,GAAK6mE,EAAI7mE,EAAI,GAAI,UAxBzC,IADA,IAAIO,EAAI,EACCP,EAAI,EAAGA,EAAI6mE,EAAIpmE,OAAQT,IAAK,CACnC,IAAIC,EAAI4mE,EAAI/9C,WAAW9oB,GACnBC,EAAI,IACN21D,EAAIr1D,KAAON,EACFA,EAAI,MACb21D,EAAIr1D,KAAQN,GAAK,EAAK,IACtB21D,EAAIr1D,KAAY,GAAJN,EAAU,KACb4tH,EAAgBhnD,EAAK7mE,IAC9BC,EAAI,QAAgB,KAAJA,IAAe,KAA6B,KAAtB4mE,EAAI/9C,aAAa9oB,IACvD41D,EAAIr1D,KAAQN,GAAK,GAAM,IACvB21D,EAAIr1D,KAASN,GAAK,GAAM,GAAM,IAC9B21D,EAAIr1D,KAASN,GAAK,EAAK,GAAM,IAC7B21D,EAAIr1D,KAAY,GAAJN,EAAU,MAEtB21D,EAAIr1D,KAAQN,GAAK,GAAM,IACvB21D,EAAIr1D,KAASN,GAAK,EAAK,GAAM,IAC7B21D,EAAIr1D,KAAY,GAAJN,EAAU,UAW5B,IAAKD,EAAI,EAAGA,EAAI6mE,EAAIpmE,OAAQT,IAC1B41D,EAAI51D,GAAc,EAAT6mE,EAAI7mE,GAEjB,OAAO41D,GAUT12D,EAAQq7F,MANR,SAAe1zB,GAEb,IADA,IAAIjR,EAAM,GACD51D,EAAI,EAAGA,EAAI6mE,EAAIpmE,OAAQT,IAC9B41D,GAAOipD,EAAMh4C,EAAI7mE,GAAG2K,SAAS,KAC/B,OAAOirD,GAWT12D,EAAQ4uH,MAAQA,EAYhB5uH,EAAQ0pH,QAVR,SAAiB/hD,EAAKgF,GAEpB,IADA,IAAIjW,EAAM,GACD51D,EAAI,EAAGA,EAAI6mE,EAAIpmE,OAAQT,IAAK,CACnC,IAAI6sE,EAAIhG,EAAI7mE,GACG,WAAX6rE,IACFgB,EAAIihD,EAAMjhD,IACZjX,GAAOm4D,EAAMlhD,EAAEliE,SAAS,KAE1B,OAAOirD,GAUT12D,EAAQ2/G,MAAQA,EAoBhB3/G,EAAQ6uH,MAAQA,EAgBhB7uH,EAAQ0oH,OAdR,SAAgB/gD,EAAK9zD,EAAO/M,EAAK6lE,GAC/B,IAAI5pC,EAAMj8B,EAAM+M,EAChByG,EAAOyoB,EAAM,GAAM,GAEnB,IADA,IAAI2zB,EAAM,IAAI3lD,MAAMgyB,EAAM,GACjBjiC,EAAI,EAAGw0D,EAAIzhD,EAAO/S,EAAI41D,EAAIn1D,OAAQT,IAAKw0D,GAAK,EAAG,CACtD,IAAIqY,EAEFA,EADa,QAAXhB,EACGhF,EAAIrS,IAAM,GAAOqS,EAAIrS,EAAI,IAAM,GAAOqS,EAAIrS,EAAI,IAAM,EAAKqS,EAAIrS,EAAI,GAEjEqS,EAAIrS,EAAI,IAAM,GAAOqS,EAAIrS,EAAI,IAAM,GAAOqS,EAAIrS,EAAI,IAAM,EAAKqS,EAAIrS,GACxEoB,EAAI51D,GAAK6sE,IAAM,EAEjB,OAAOjX,GAsBT12D,EAAQ2pH,QAlBR,SAAiBhiD,EAAKgF,GAEpB,IADA,IAAIjW,EAAM,IAAI3lD,MAAmB,EAAb42D,EAAIpmE,QACfT,EAAI,EAAGw0D,EAAI,EAAGx0D,EAAI6mE,EAAIpmE,OAAQT,IAAKw0D,GAAK,EAAG,CAClD,IAAI7vC,EAAIkiD,EAAI7mE,GACG,QAAX6rE,GACFjW,EAAIpB,GAAK7vC,IAAM,GACfixC,EAAIpB,EAAI,GAAM7vC,IAAM,GAAM,IAC1BixC,EAAIpB,EAAI,GAAM7vC,IAAM,EAAK,IACzBixC,EAAIpB,EAAI,GAAS,IAAJ7vC,IAEbixC,EAAIpB,EAAI,GAAK7vC,IAAM,GACnBixC,EAAIpB,EAAI,GAAM7vC,IAAM,GAAM,IAC1BixC,EAAIpB,EAAI,GAAM7vC,IAAM,EAAK,IACzBixC,EAAIpB,GAAS,IAAJ7vC,GAGb,OAAOixC,GAOT12D,EAAQyuH,OAHR,SAAgB9gD,EAAG12D,GACjB,OAAQ02D,IAAM12D,EAAM02D,GAAM,GAAK12D,GAOjCjX,EAAQ4oH,OAHR,SAAgBj7C,EAAG12D,GACjB,OAAQ02D,GAAK12D,EAAM02D,IAAO,GAAK12D,GAOjCjX,EAAQ6oH,MAHR,SAAe3nH,EAAG+V,GAChB,OAAQ/V,EAAI+V,IAAO,GAOrBjX,EAAQ8oH,QAHR,SAAiB5nH,EAAG+V,EAAGlW,GACrB,OAAQG,EAAI+V,EAAIlW,IAAO,GAOzBf,EAAQ+oH,QAHR,SAAiB7nH,EAAG+V,EAAGlW,EAAGgzB,GACxB,OAAQ7yB,EAAI+V,EAAIlW,EAAIgzB,IAAO,GAO7B/zB,EAAQ6pH,QAHR,SAAiB3oH,EAAG+V,EAAGlW,EAAGgzB,EAAGrzB,GAC3B,OAAQQ,EAAI+V,EAAIlW,EAAIgzB,EAAIrzB,IAAO,GAajCV,EAAQmrH,MATR,SAAep8F,EAAK9L,EAAKqqG,EAAIC,GAC3B,IAAIC,EAAKz+F,EAAI9L,GAGT0rD,EAAM4+C,EAFDx+F,EAAI9L,EAAM,KAEI,EACnBmtD,GAAMzB,EAAK4+C,EAAK,EAAI,GAAKD,EAAKE,EAClCz+F,EAAI9L,GAAOmtD,IAAO,EAClBrhD,EAAI9L,EAAM,GAAK0rD,GASjB3uE,EAAQorH,SALR,SAAkBkC,EAAIC,EAAIC,EAAI/hC,GAG5B,OAFU8hC,EAAK9hC,IAAQ,EACR8hC,EAAK,EAAI,GAAKD,EAAKE,IACpB,GAQhBxtH,EAAQqrH,SAJR,SAAkBiC,EAAIC,EAAIC,EAAI/hC,GAE5B,OADS8hC,EAAK9hC,IACA,GAiBhBzrF,EAAQsrH,WAbR,SAAoBgC,EAAIC,EAAIC,EAAI/hC,EAAIgiC,EAAIC,EAAI/qB,EAAIgrB,GAC9C,IAAI/+C,EAAQ,EACRD,EAAK4+C,EAST,OAPA3+C,IADAD,EAAMA,EAAK8c,IAAQ,GACL8hC,EAAK,EAAI,EAEvB3+C,IADAD,EAAMA,EAAK++C,IAAQ,GACLA,EAAK,EAAI,EAIdJ,EAAKE,EAAKC,EAAK9qB,GAFxB/zB,IADAD,EAAMA,EAAKg/C,IAAQ,GACLA,EAAK,EAAI,KAGT,GAQhB3tH,EAAQurH,WAJR,SAAoB+B,EAAIC,EAAIC,EAAI/hC,EAAIgiC,EAAIC,EAAI/qB,EAAIgrB,GAE9C,OADSJ,EAAK9hC,EAAKiiC,EAAKC,IACV,GAmBhB3tH,EAAQwrH,WAfR,SAAoB8B,EAAIC,EAAIC,EAAI/hC,EAAIgiC,EAAIC,EAAI/qB,EAAIgrB,EAAIC,EAAIC,GACtD,IAAIj/C,EAAQ,EACRD,EAAK4+C,EAWT,OATA3+C,IADAD,EAAMA,EAAK8c,IAAQ,GACL8hC,EAAK,EAAI,EAEvB3+C,IADAD,EAAMA,EAAK++C,IAAQ,GACLA,EAAK,EAAI,EAEvB9+C,IADAD,EAAMA,EAAKg/C,IAAQ,GACLA,EAAK,EAAI,EAIdL,EAAKE,EAAKC,EAAK9qB,EAAKirB,GAF7Bh/C,IADAD,EAAMA,EAAKk/C,IAAQ,GACLA,EAAK,EAAI,KAGT,GAShB7tH,EAAQyrH,WALR,SAAoB6B,EAAIC,EAAIC,EAAI/hC,EAAIgiC,EAAIC,EAAI/qB,EAAIgrB,EAAIC,EAAIC,GAGtD,OAFSN,EAAK9hC,EAAKiiC,EAAKC,EAAKE,IAEf,GAQhB7tH,EAAQ+qH,UAJR,SAAmBuC,EAAIC,EAAI1oD,GAEzB,OADS0oD,GAAO,GAAK1oD,EAASyoD,IAAOzoD,KACxB,GAQf7kE,EAAQgrH,UAJR,SAAmBsC,EAAIC,EAAI1oD,GAEzB,OADSyoD,GAAO,GAAKzoD,EAAS0oD,IAAO1oD,KACxB,GAOf7kE,EAAQirH,SAHR,SAAkBqC,EAAIC,EAAI1oD,GACxB,OAAOyoD,IAAOzoD,GAQhB7kE,EAAQkrH,SAJR,SAAkBoC,EAAIC,EAAI1oD,GAExB,OADSyoD,GAAO,GAAKzoD,EAAS0oD,IAAO1oD,KACxB,mECnRf,aAEA,IAAIx6C,EAAOrpB,EAAQ,WACfitB,EAAQjtB,EAAQ,6BAChBsZ,EAAStZ,EAAQ,uBAErB,SAASy5G,EAASx3G,GAChB,KAAM1C,gBAAgBk6G,GACpB,OAAO,IAAIA,EAASx3G,GACtB1C,KAAK8pB,KAAOpnB,EAAQonB,KACpB9pB,KAAKuuH,aAAe7rH,EAAQ6rH,WAE5BvuH,KAAK6gF,OAAS7gF,KAAK8pB,KAAKi+F,QACxB/nH,KAAKwuH,WAAa9rH,EAAQ8rH,YAAcxuH,KAAK8pB,KAAK+wF,aAElD76G,KAAKyuH,QAAU,KACfzuH,KAAK0uH,eAAiB,KACtB1uH,KAAKyoH,EAAI,KACTzoH,KAAK2uH,EAAI,KAET,IAAI/T,EAAUltF,EAAM+9C,QAAQ/oE,EAAQk4G,QAASl4G,EAAQo4G,YAAc,OAC/DC,EAAQrtF,EAAM+9C,QAAQ/oE,EAAQq4G,MAAOr4G,EAAQksH,UAAY,OACzDlU,EAAOhtF,EAAM+9C,QAAQ/oE,EAAQg4G,KAAMh4G,EAAQi4G,SAAW,OAC1D5gG,EAAO6gG,EAAQ55G,QAAWhB,KAAKwuH,WAAa,EACrC,mCAAqCxuH,KAAKwuH,WAAa,SAC9DxuH,KAAKikE,MAAM22C,EAASG,EAAOL,GAE7Bh7G,EAAOD,QAAUy6G,EAEjBA,EAAS/oF,UAAU8yC,MAAQ,SAAc22C,EAASG,EAAOL,GACvD,IAAImU,EAAOjU,EAAQj4G,OAAOo4G,GAAOp4G,OAAO+3G,GAExC16G,KAAKyoH,EAAI,IAAIj4G,MAAMxQ,KAAK6gF,OAAS,GACjC7gF,KAAK2uH,EAAI,IAAIn+G,MAAMxQ,KAAK6gF,OAAS,GACjC,IAAK,IAAItgF,EAAI,EAAGA,EAAIP,KAAK2uH,EAAE3tH,OAAQT,IACjCP,KAAKyoH,EAAEloH,GAAK,EACZP,KAAK2uH,EAAEpuH,GAAK,EAGdP,KAAKioF,QAAQ4mC,GACb7uH,KAAKyuH,QAAU,EACfzuH,KAAK0uH,eAAiB,iBAGxBxU,EAAS/oF,UAAU29F,MAAQ,WACzB,OAAO,IAAIhlG,EAAK29F,KAAKznH,KAAK8pB,KAAM9pB,KAAKyoH,IAGvCvO,EAAS/oF,UAAU82D,QAAU,SAAgB4mC,GAC3C,IAAIE,EAAO/uH,KAAK8uH,QACA5kG,OAAOlqB,KAAK2uH,GACZzkG,OAAO,CAAE,IACrB2kG,IACFE,EAAOA,EAAK7kG,OAAO2kG,IACrB7uH,KAAKyoH,EAAIsG,EAAK5kG,SACdnqB,KAAK2uH,EAAI3uH,KAAK8uH,QAAQ5kG,OAAOlqB,KAAK2uH,GAAGxkG,SAChC0kG,IAGL7uH,KAAKyoH,EAAIzoH,KAAK8uH,QACA5kG,OAAOlqB,KAAK2uH,GACZzkG,OAAO,CAAE,IACTA,OAAO2kG,GACP1kG,SACdnqB,KAAK2uH,EAAI3uH,KAAK8uH,QAAQ5kG,OAAOlqB,KAAK2uH,GAAGxkG,WAGvC+vF,EAAS/oF,UAAU69F,OAAS,SAAgBpU,EAASE,EAAYnvG,EAAKsjH,GAE1C,iBAAfnU,IACTmU,EAAStjH,EACTA,EAAMmvG,EACNA,EAAa,MAGfF,EAAUltF,EAAM+9C,QAAQmvC,EAASE,GACjCnvG,EAAM+hB,EAAM+9C,QAAQ9/D,EAAKsjH,GAEzBl1G,EAAO6gG,EAAQ55G,QAAWhB,KAAKwuH,WAAa,EACrC,mCAAqCxuH,KAAKwuH,WAAa,SAE9DxuH,KAAKioF,QAAQ2yB,EAAQj4G,OAAOgJ,GAAO,KACnC3L,KAAKyuH,QAAU,GAGjBvU,EAAS/oF,UAAUkyD,SAAW,SAAkB7gD,EAAKyzB,EAAKtqD,EAAKsjH,GAC7D,GAAIjvH,KAAKyuH,QAAUzuH,KAAK0uH,eACtB,MAAM,IAAI9tH,MAAM,sBAGC,iBAARq1D,IACTg5D,EAAStjH,EACTA,EAAMsqD,EACNA,EAAM,MAIJtqD,IACFA,EAAM+hB,EAAM+9C,QAAQ9/D,EAAKsjH,GAAU,OACnCjvH,KAAKioF,QAAQt8E,IAIf,IADA,IAAIujH,EAAO,GACJA,EAAKluH,OAASwhC,GACnBxiC,KAAK2uH,EAAI3uH,KAAK8uH,QAAQ5kG,OAAOlqB,KAAK2uH,GAAGxkG,SACrC+kG,EAAOA,EAAKvsH,OAAO3C,KAAK2uH,GAG1B,IAAIx4D,EAAM+4D,EAAKjxG,MAAM,EAAGukB,GAGxB,OAFAxiC,KAAKioF,QAAQt8E,GACb3L,KAAKyuH,UACE/gG,EAAMpT,OAAO67C,EAAKF,kHC/G3Bx2D,EAAQqD,KAAO,SAAUilB,EAAQjhB,EAAQqoH,EAAMC,EAAMC,GACnD,IAAIlvH,EAAG+kB,EACHoqG,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,GAAS,EACTlvH,EAAI4uH,EAAQE,EAAS,EAAK,EAC1B77F,EAAI27F,GAAQ,EAAI,EAChBp+G,EAAIgX,EAAOjhB,EAASvG,GAOxB,IALAA,GAAKizB,EAELrzB,EAAI4Q,GAAM,IAAO0+G,GAAU,EAC3B1+G,KAAQ0+G,EACRA,GAASH,EACFG,EAAQ,EAAGtvH,EAAS,IAAJA,EAAW4nB,EAAOjhB,EAASvG,GAAIA,GAAKizB,EAAGi8F,GAAS,GAKvE,IAHAvqG,EAAI/kB,GAAM,IAAOsvH,GAAU,EAC3BtvH,KAAQsvH,EACRA,GAASL,EACFK,EAAQ,EAAGvqG,EAAS,IAAJA,EAAW6C,EAAOjhB,EAASvG,GAAIA,GAAKizB,EAAGi8F,GAAS,GAEvE,GAAU,IAANtvH,EACFA,EAAI,EAAIqvH,MACH,CAAA,GAAIrvH,IAAMovH,EACf,OAAOrqG,EAAI2/E,IAAsBjhG,EAAAA,GAAdmN,GAAK,EAAI,GAE5BmU,GAAQ1d,KAAKomE,IAAI,EAAGwhD,GACpBjvH,GAAQqvH,EAEV,OAAQz+G,GAAK,EAAI,GAAKmU,EAAI1d,KAAKomE,IAAI,EAAGztE,EAAIivH,IAG5C3vH,EAAQ2G,MAAQ,SAAU2hB,EAAQxiB,EAAOuB,EAAQqoH,EAAMC,EAAMC,GAC3D,IAAIlvH,EAAG+kB,EAAG1kB,EACN8uH,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChB9vE,EAAe,KAAT2vE,EAAc5nH,KAAKomE,IAAI,GAAI,IAAMpmE,KAAKomE,IAAI,GAAI,IAAM,EAC1DrtE,EAAI4uH,EAAO,EAAKE,EAAS,EACzB77F,EAAI27F,EAAO,GAAK,EAChBp+G,EAAIxL,EAAQ,GAAgB,IAAVA,GAAe,EAAIA,EAAQ,EAAK,EAAI,EAmC1D,IAjCAA,EAAQiC,KAAKwoE,IAAIzqE,GAEb5B,MAAM4B,IAAUA,IAAU3B,EAAAA,GAC5BshB,EAAIvhB,MAAM4B,GAAS,EAAI,EACvBpF,EAAIovH,IAEJpvH,EAAIqH,KAAKI,MAAMJ,KAAKq1G,IAAIt3G,GAASiC,KAAKs1G,KAClCv3G,GAAS/E,EAAIgH,KAAKomE,IAAI,GAAIztE,IAAM,IAClCA,IACAK,GAAK,IAGL+E,GADEpF,EAAIqvH,GAAS,EACN/vE,EAAKj/C,EAELi/C,EAAKj4C,KAAKomE,IAAI,EAAG,EAAI4hD,IAEpBhvH,GAAK,IACfL,IACAK,GAAK,GAGHL,EAAIqvH,GAASD,GACfrqG,EAAI,EACJ/kB,EAAIovH,GACKpvH,EAAIqvH,GAAS,GACtBtqG,GAAM3f,EAAQ/E,EAAK,GAAKgH,KAAKomE,IAAI,EAAGwhD,GACpCjvH,GAAQqvH,IAERtqG,EAAI3f,EAAQiC,KAAKomE,IAAI,EAAG4hD,EAAQ,GAAKhoH,KAAKomE,IAAI,EAAGwhD,GACjDjvH,EAAI,IAIDivH,GAAQ,EAAGrnG,EAAOjhB,EAASvG,GAAS,IAAJ2kB,EAAU3kB,GAAKizB,EAAGtO,GAAK,IAAKkqG,GAAQ,GAI3E,IAFAjvH,EAAKA,GAAKivH,EAAQlqG,EAClBoqG,GAAQF,EACDE,EAAO,EAAGvnG,EAAOjhB,EAASvG,GAAS,IAAJJ,EAAUI,GAAKizB,EAAGrzB,GAAK,IAAKmvH,GAAQ,GAE1EvnG,EAAOjhB,EAASvG,EAAIizB,IAAU,IAAJziB,0CClF5B,aACA,IAEI2+G,EAyCAC,EA3CAC,EAAW9vH,EAAO+vH,kBAAoB/vH,EAAOgwH,uBAK/C,GAAIF,EAAU,CACZ,IAAIG,EAAS,EACTC,EAAW,IAAIJ,EAAS5/F,GACxBigG,EAAUnwH,EAAOowH,SAASC,eAAe,IAC7CH,EAASI,QAAQH,EAAS,CACxBI,eAAe,IAEjBX,EAAgB,WACdO,EAAQtrH,KAAQorH,IAAWA,EAAS,QAEjC,GAAKjwH,EAAO8yB,mBAAiD,IAA1B9yB,EAAOwwH,eAO/CZ,EADS,aAAc5vH,GAAU,uBAAwBA,EAAOowH,SAASK,cAAc,UACvE,WAId,IAAIC,EAAW1wH,EAAOowH,SAASK,cAAc,UAC7CC,EAASC,mBAAqB,WAC5BzgG,IAEAwgG,EAASC,mBAAqB,KAC9BD,EAASE,WAAWC,YAAYH,GAChCA,EAAW,MAEb1wH,EAAOowH,SAASU,gBAAgBC,YAAYL,IAG9B,WACd39F,WAAW7C,EAAU,QAvBwD,CAC/E,IAAI8gG,EAAU,IAAIhxH,EAAOwwH,eACzBQ,EAAQC,MAAMC,UAAYhhG,EAC1B0/F,EAAgB,WACdoB,EAAQG,MAAMC,YAAY,IAyBhC,IAAIC,EAAQ,GAEZ,SAASnhG,IAEP,IAAIzvB,EAAG6wH,EADPzB,GAAW,EAGX,IADA,IAAIntF,EAAM2uF,EAAMnwH,OACTwhC,GAAK,CAIV,IAHA4uF,EAAWD,EACXA,EAAQ,GACR5wH,GAAK,IACIA,EAAIiiC,GACX4uF,EAAS7wH,KAEXiiC,EAAM2uF,EAAMnwH,OAEd2uH,GAAW,EAGbjwH,EAAOD,QACP,SAAmB4xH,GACQ,IAArBF,EAAM1hH,KAAK4hH,IAAgB1B,GAC7BD,8JClEyB,mBAAlBx5G,OAAOnN,OAEhBrJ,EAAOD,QAAU,SAAkBwsE,EAAMl5C,GACnCA,IACFk5C,EAAKh5C,OAASF,EACdk5C,EAAK96C,UAAYjb,OAAOnN,OAAOgqB,EAAU5B,UAAW,CAClDxN,YAAa,CACXpe,MAAO0mE,EACP74C,YAAY,EACZC,UAAU,EACVC,cAAc,OAOtB5zB,EAAOD,QAAU,SAAkBwsE,EAAMl5C,GACvC,GAAIA,EAAW,CACbk5C,EAAKh5C,OAASF,EACd,IAAIm5C,EAAW,aACfA,EAAS/6C,UAAY4B,EAAU5B,UAC/B86C,EAAK96C,UAAY,IAAI+6C,EACrBD,EAAK96C,UAAUxN,YAAcsoD;;;;;;GCVnC,SAAShK,EAAU5wC,GACjB,QAASA,EAAI1N,aAAmD,mBAA7B0N,EAAI1N,YAAYs+C,UAA2B5wC,EAAI1N,YAAYs+C,SAAS5wC,GALzG3xB,EAAOD,QAAU,SAAU4xB,GACzB,OAAc,MAAPA,IAAgB4wC,EAAS5wC,IAQlC,SAAuBA,GACrB,MAAkC,mBAApBA,EAAI6qE,aAAmD,mBAAd7qE,EAAIpT,OAAwBgkD,EAAS5wC,EAAIpT,MAAM,EAAG,IATjEqzG,CAAajgG,MAAUA,EAAI6oE,mDCVrE,IAAIhvF,EAAW,GAAGA,SAElBxL,EAAOD,QAAU+Q,MAAMwU,SAAW,SAAU88D,GAC1C,MAA6B,kBAAtB52E,EAASnK,KAAK+gF,8BCHvB,aACA,IAAIp0D,EAAQjtB,EAAQ,WAChB8wH,EAAU9wH,EAAQ,aAElB+wH,EAAU,oEAId/xH,EAAQ6a,OAAS,SAASmqD,GAMtB,IALA,IACIgtD,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EADpCnxC,EAAS,GAETrgF,EAAI,EAAGiiC,EAAMiiC,EAAMzjE,OAAQgxH,EAAiBxvF,EAE5Cxd,EAAqC,WAA3B0I,EAAMukG,UAAUxtD,GACvBlkE,EAAIkkE,EAAMzjE,QACbgxH,EAAiBxvF,EAAMjiC,EAElBykB,GAKDysG,EAAOhtD,EAAMlkE,KACbmxH,EAAOnxH,EAAIiiC,EAAMiiC,EAAMlkE,KAAO,EAC9BoxH,EAAOpxH,EAAIiiC,EAAMiiC,EAAMlkE,KAAO,IAN9BkxH,EAAOhtD,EAAMp7C,WAAW9oB,KACxBmxH,EAAOnxH,EAAIiiC,EAAMiiC,EAAMp7C,WAAW9oB,KAAO,EACzCoxH,EAAOpxH,EAAIiiC,EAAMiiC,EAAMp7C,WAAW9oB,KAAO,GAO7CqxH,EAAOH,GAAQ,EACfI,GAAgB,EAAPJ,IAAa,EAAMC,GAAQ,EACpCI,EAAOE,EAAiB,GAAc,GAAPN,IAAc,EAAMC,GAAQ,EAAM,GACjEI,EAAOC,EAAiB,EAAY,GAAPL,EAAa,GAE1C/wC,EAAOnxE,KAAK+hH,EAAQt/F,OAAO0/F,GAAQJ,EAAQt/F,OAAO2/F,GAAQL,EAAQt/F,OAAO4/F,GAAQN,EAAQt/F,OAAO6/F,IAIpG,OAAOnxC,EAAOt0E,KAAK,KAIvB7M,EAAQqW,OAAS,SAAS2uD,GACtB,IAAIgtD,EAAMC,EAAMC,EACNE,EAAMC,EAAMC,EAClBxxH,EAAI,EAAG2xH,EAAc,EAIzB,GAFoB,UAEhBztD,EAAMxZ,OAAO,EAFG,QAEcjqD,QAO9B,MAAM,IAAIJ,MAAM,mDAKpB,IAgBIggF,EAhBAuxC,EAA6B,GAFjC1tD,EAAQA,EAAMt4D,QAAQ,sBAAuB,KAErBnL,OAAa,EAOrC,GANGyjE,EAAMvyC,OAAOuyC,EAAMzjE,OAAS,KAAOwwH,EAAQt/F,OAAO,KACjDigG,IAED1tD,EAAMvyC,OAAOuyC,EAAMzjE,OAAS,KAAOwwH,EAAQt/F,OAAO,KACjDigG,IAEAA,EAAc,GAAM,EAOpB,MAAM,IAAIvxH,MAAM,6CASpB,IALIggF,EADA2wC,EAAQa,WACC,IAAI3vC,WAAuB,EAAZ0vC,GAEf,IAAI3hH,MAAkB,EAAZ2hH,GAGhB5xH,EAAIkkE,EAAMzjE,QAObywH,EALOD,EAAQlnG,QAAQm6C,EAAMvyC,OAAO3xB,OAKpB,GAJhBsxH,EAAOL,EAAQlnG,QAAQm6C,EAAMvyC,OAAO3xB,QAIN,EAC9BmxH,GAAgB,GAAPG,IAAc,GAJvBC,EAAON,EAAQlnG,QAAQm6C,EAAMvyC,OAAO3xB,QAIC,EACrCoxH,GAAgB,EAAPG,IAAa,GAJtBC,EAAOP,EAAQlnG,QAAQm6C,EAAMvyC,OAAO3xB,OAMpCqgF,EAAOsxC,KAAiBT,EAEX,KAATK,IACAlxC,EAAOsxC,KAAiBR,GAEf,KAATK,IACAnxC,EAAOsxC,KAAiBP,GAKhC,OAAO/wC,0DCxGX,aAEA,IAAIyxC,EAAW5xH,EAAQ,cACnB6xH,EAAa7xH,EAAQ,uBACrB8xH,EAAkB9xH,EAAQ,4BAC1B+xH,EAAa/xH,EAAQ,uBACrB8xH,EAAkB9xH,EAAQ,4BAW9B,SAASgyH,EAAiBC,EAAgBC,EAAkBC,EAAOn8F,EAAa9xB,GAC5E3E,KAAK0yH,eAAiBA,EACtB1yH,KAAK2yH,iBAAmBA,EACxB3yH,KAAK4yH,MAAQA,EACb5yH,KAAKy2B,YAAcA,EACnBz2B,KAAK6yH,kBAAoBluH,EAG7B8tH,EAAiBthG,UAAY,CAKzB2hG,iBAAmB,WACf,IAAIC,EAAS,IAAIT,EAAWD,EAASpvH,QAAQC,QAAQlD,KAAK6yH,oBACzD/tH,KAAK9E,KAAKy2B,YAAYu8F,oBACtBluH,KAAK,IAAIytH,EAAgB,gBAEtB7O,EAAO1jH,KAMX,OALA+yH,EAAOruH,GAAG,OAAO,WACb,GAAG1E,KAAKizH,WAAL,cAAmCvP,EAAKiP,iBACvC,MAAM,IAAI/xH,MAAM,4CAGjBmyH,GAMXG,oBAAsB,WAClB,OAAO,IAAIZ,EAAWD,EAASpvH,QAAQC,QAAQlD,KAAK6yH,oBACnDM,eAAe,iBAAkBnzH,KAAK0yH,gBACtCS,eAAe,mBAAoBnzH,KAAK2yH,kBACxCQ,eAAe,QAASnzH,KAAK4yH,OAC7BO,eAAe,cAAenzH,KAAKy2B,eAa5Cg8F,EAAiBW,iBAAmB,SAAUC,EAAoB58F,EAAa68F,GAC3E,OAAOD,EACNvuH,KAAK,IAAI0tH,GACT1tH,KAAK,IAAIytH,EAAgB,qBACzBztH,KAAK2xB,EAAY88F,eAAeD,IAChCxuH,KAAK,IAAIytH,EAAgB,mBACzBY,eAAe,cAAe18F,IAGnC/2B,EAAOD,QAAUgzH,+HC1EjB,aAEA,IAAIe,EAAgB/yH,EAAQ,0BAE5BhB,EAAQg0H,MAAQ,CACZC,MAAO,OACPH,eAAiB,SAAUD,GACvB,OAAO,IAAIE,EAAc,sBAE7BR,iBAAmB,WACf,OAAO,IAAIQ,EAAc,yBAGjC/zH,EAAQk0H,QAAUlzH,EAAQ,+ECb1B,aAEA,IAAIitB,EAAQjtB,EAAQ,WAuBpB,IAAImzH,EAfJ,WAGI,IAFA,IAAIpzH,EAAG0Y,EAAQ,GAEP9Y,EAAG,EAAGA,EAAI,IAAKA,IAAI,CACvBI,EAAIJ,EACJ,IAAI,IAAI20D,EAAG,EAAGA,EAAI,EAAGA,IACjBv0D,EAAQ,EAAFA,EAAQ,WAAcA,IAAM,EAAOA,IAAM,EAEnD0Y,EAAM9Y,GAAKI,EAGf,OAAO0Y,EAII26G,GAuCfn0H,EAAOD,QAAU,SAAsBglE,EAAOqvD,GAC1C,YAAqB,IAAVrvD,GAA0BA,EAAMzjE,OAIF,WAA3B0sB,EAAMukG,UAAUxtD,GAzClC,SAAeqvD,EAAKtlG,EAAKgU,EAAK9f,GAC1B,IAAIriB,EAAIuzH,EAAUrtH,EAAMmc,EAAM8f,EAE9BsxF,IAAc,EAEd,IAAK,IAAIvzH,EAAImiB,EAAKniB,EAAIgG,EAAKhG,IACvBuzH,EAAOA,IAAQ,EAAKzzH,EAAmB,KAAhByzH,EAAMtlG,EAAIjuB,KAGrC,OAAgB,EAARuzH,EAmCGlB,CAAU,EAAJkB,EAAOrvD,EAAOA,EAAMzjE,OAAQ,GApBjD,SAAkB8yH,EAAKjsG,EAAK2a,EAAK9f,GAC7B,IAAIriB,EAAIuzH,EAAUrtH,EAAMmc,EAAM8f,EAE9BsxF,IAAc,EAEd,IAAK,IAAIvzH,EAAImiB,EAAKniB,EAAIgG,EAAKhG,IACvBuzH,EAAOA,IAAQ,EAAKzzH,EAA8B,KAA3ByzH,EAAMjsG,EAAIwB,WAAW9oB,KAGhD,OAAgB,EAARuzH,EAaGC,CAAa,EAAJD,EAAOrvD,EAAOA,EAAMzjE,OAAQ,GARrC,0CClEf,aACAvB,EAAQk3B,QAAS,EACjBl3B,EAAQ8sG,QAAS,EACjB9sG,EAAQ8rD,KAAM,EACd9rD,EAAQu0H,eAAgB,EACxBv0H,EAAQwrE,KAAO,KACfxrE,EAAQg3B,YAAc,KACtBh3B,EAAQ6zH,mBAAqB,KAC7B7zH,EAAQmM,QAAU,KAClBnM,EAAQw0H,gBAAkB,KAC1Bx0H,EAAQy0H,eAAiB,+BCTzB,aAKA,IAAIC,EAAa,KAEbA,EADmB,oBAAZlxH,QACMA,QAEAxC,EAAQ,OAMzBf,EAAOD,QAAU,CACbwD,QAASkxH,oCCjBb,aACA,IAAIC,EAAwC,oBAAf3xC,YAAuD,oBAAhB4xC,aAAwD,oBAAhBC,YAExGC,EAAO9zH,EAAQ,QACfitB,EAAQjtB,EAAQ,WAChB+yH,EAAgB/yH,EAAQ,0BAExB+zH,EAAaJ,EAAiB,aAAe,QAUjD,SAASK,EAAYC,EAAQhyH,GACzB8wH,EAAczyH,KAAKf,KAAM,eAAiB00H,GAE1C10H,KAAK20H,MAAQ,KACb30H,KAAK40H,YAAcF,EACnB10H,KAAK60H,aAAenyH,EAGpB1C,KAAK80H,KAAO,GAhBhBr1H,EAAQi0H,MAAQ,OAmBhBhmG,EAAMsB,SAASylG,EAAajB,GAK5BiB,EAAYtjG,UAAU4jG,aAAe,SAAUvtG,GAC3CxnB,KAAK80H,KAAOttG,EAAMstG,KACC,OAAf90H,KAAK20H,OACL30H,KAAKg1H,cAETh1H,KAAK20H,MAAMllH,KAAKie,EAAMunG,YAAYT,EAAYhtG,EAAM7iB,OAAO,IAM/D8vH,EAAYtjG,UAAU84D,MAAQ,WAC1BupC,EAAcriG,UAAU84D,MAAMlpF,KAAKf,MAChB,OAAfA,KAAK20H,OACL30H,KAAKg1H,cAETh1H,KAAK20H,MAAMllH,KAAK,IAAI,IAKxBglH,EAAYtjG,UAAU+jG,QAAU,WAC5B1B,EAAcriG,UAAU+jG,QAAQn0H,KAAKf,MACrCA,KAAK20H,MAAQ,MASjBF,EAAYtjG,UAAU6jG,YAAc,WAChCh1H,KAAK20H,MAAQ,IAAIJ,EAAKv0H,KAAK40H,aAAa,CACpCjyD,KAAK,EACL/5C,MAAO5oB,KAAK60H,aAAajsG,QAAU,IAEvC,IAAI7oB,EAAOC,KACXA,KAAK20H,MAAMQ,OAAS,SAASxwH,GACzB5E,EAAK0P,KAAK,CACN9K,KAAOA,EACPmwH,KAAO/0H,EAAK+0H,SAKxBr1H,EAAQ8zH,eAAiB,SAAUD,GAC/B,OAAO,IAAImB,EAAY,UAAWnB,IAEtC7zH,EAAQuzH,iBAAmB,WACvB,OAAO,IAAIyB,EAAY,UAAW,kFCnFtC,aAEA,IAAI/mG,EAAQjtB,EAAQ,YAChB+yH,EAAgB/yH,EAAQ,2BACxB20H,EAAO30H,EAAQ,WACfmyH,EAAQnyH,EAAQ,YAChB60F,EAAY70F,EAAQ,gBASpB40H,EAAW,SAASC,EAAKzyD,GACzB,IAActiE,EAAVisG,EAAM,GACV,IAAKjsG,EAAI,EAAGA,EAAIsiE,EAAOtiE,IACnBisG,GAAOpiG,OAAO22C,aAAmB,IAANu0E,GAC3BA,KAAc,EAElB,OAAO9oB,GA2DP+oB,EAAmB,SAAStC,EAAYuC,EAAiBC,EAAgB3uH,EAAQ4uH,EAAUC,GAC3F,IAUAC,EACAC,EAXIj/F,EAAOq8F,EAAU,KACrBx8F,EAAcw8F,EAAU,YACxB6C,EAAoBH,IAAmBP,EAAKW,WAC5CC,EAAkBtoG,EAAMunG,YAAY,SAAUU,EAAe/+F,EAAKtsB,OAClE2rH,EAAqBvoG,EAAMunG,YAAY,SAAUG,EAAKW,WAAWn/F,EAAKtsB,OACtEsB,EAAUgrB,EAAKhrB,QACfsqH,EAAiBxoG,EAAMunG,YAAY,SAAUU,EAAe/pH,IAC5DuqH,EAAoBzoG,EAAMunG,YAAY,SAAUG,EAAKW,WAAWnqH,IAChEwqH,EAAqBH,EAAmBj1H,SAAW41B,EAAKtsB,KAAKtJ,OAC7Dq1H,EAAoBF,EAAkBn1H,SAAW4K,EAAQ5K,OAGzDs1H,EAAc,GACdC,EAAwB,GACxBC,EAA2B,GAC3BjrE,EAAM30B,EAAK20B,IACX0f,EAAOr0C,EAAKq0C,KAGRwrD,EAAW,CACX7D,MAAQ,EACRF,eAAiB,EACjBC,iBAAmB,GAKlB6C,IAAmBC,IACpBgB,EAAS7D,MAAQK,EAAU,MAC3BwD,EAAS/D,eAAiBO,EAAU,eACpCwD,EAAS9D,iBAAmBM,EAAU,kBAG1C,IAAIyD,EAAU,EACVlB,IAIAkB,GAAW,GAEVZ,IAAsBM,IAAsBC,IAE7CK,GAAW,MAIf,IAxFyCzC,EAAiB0C,EAEtDhxH,EAsFAixH,EAAc,EACdC,EAAgB,EAChBtrE,IAEAqrE,GAAe,IAEH,SAAblB,GACCmB,EAAgB,IAChBD,IAhGqC3C,EAgGOr9F,EAAKq9F,gBAhGK0C,EAgGYprE,EA9FlE5lD,EAASsuH,EACRA,IAIDtuH,EAASgxH,EAAQ,MAAS,QAEb,MAAThxH,IAAoB,MAyFxBkxH,EAAgB,GAChBD,GAvE4B,IAuEehgG,EAAKs9F,gBAvE1B,IA+E1B0B,EAAU3qD,EAAKI,cACfuqD,IAAqB,EACrBA,GAAoB3qD,EAAKK,gBACzBsqD,IAAqB,EACrBA,GAAoB3qD,EAAKM,gBAAkB,EAE3CsqD,EAAU5qD,EAAKC,iBAAmB,KAClC2qD,IAAqB,EACrBA,GAAqB5qD,EAAKE,cAAgB,EAC1C0qD,IAAqB,EACrBA,GAAoB5qD,EAAKG,aAErBgrD,IAUAG,EAEIlB,EAAS,EAAG,GAEZA,EAASzC,EAAMoD,GAAkB,GAEjCC,EAEJK,GAEI,KAEAjB,EAASkB,EAAsBv1H,OAAQ,GAEvCu1H,GAGLF,IAECG,EAEInB,EAAS,EAAG,GAEZA,EAASzC,EAAMsD,GAAiB,GAEhCC,EAEJG,GAEI,KAEAjB,EAASmB,EAAyBx1H,OAAQ,GAE1Cw1H,GAGR,IAAIpmH,EAAS,GAgDb,OA7CAA,GAAU,OAEVA,GAAUilH,EAASqB,EAAS,GAE5BtmH,GAAUqmB,EAAYi9F,MAEtBtjH,GAAUilH,EAASO,EAAS,GAE5BxlH,GAAUilH,EAASQ,EAAS,GAE5BzlH,GAAUilH,EAASoB,EAAS7D,MAAO,GAEnCxiH,GAAUilH,EAASoB,EAAS/D,eAAgB,GAE5CtiH,GAAUilH,EAASoB,EAAS9D,iBAAkB,GAE9CviH,GAAUilH,EAASW,EAAgBh1H,OAAQ,GAE3CoP,GAAUilH,EAASiB,EAAYt1H,OAAQ,GA2BhC,CACH81H,WAzBaxhC,EAAUyhC,kBAAoB3mH,EAAS4lH,EAAkBM,EA0BtEU,UAxBY1hC,EAAU2hC,oBAEtB5B,EAASwB,EAAe,GAExBzmH,EAEAilH,EAASa,EAAel1H,OAAQ,GAEhC,WAIAq0H,EAASuB,EAAa,GAEtBvB,EAASvuH,EAAQ,GAEjBkvH,EAEAM,EAEAJ,IAiDJgB,EAA0B,SAAUjE,GAUpC,OARa39B,EAAU6hC,gBAEnB9B,EAASpC,EAAU,MAAW,GAE9BoC,EAASpC,EAAU,eAAoB,GAEvCoC,EAASpC,EAAU,iBAAsB,IAcjD,SAASmE,EAAcC,EAAazrH,EAAS8pH,EAAUC,GACnDnC,EAAczyH,KAAKf,KAAM,iBAEzBA,KAAKs3H,aAAe,EAEpBt3H,KAAKu3H,WAAa3rH,EAElB5L,KAAKw3H,YAAc9B,EAEnB11H,KAAK21H,eAAiBA,EAEtB31H,KAAKq3H,YAAcA,EAKnBr3H,KAAKy3H,YAAa,EAElBz3H,KAAK03H,cAAgB,GAErB13H,KAAK23H,WAAa,GAElB33H,KAAK43H,oBAAsB,EAE3B53H,KAAK63H,aAAe,EAGpB73H,KAAK83H,YAAc,KAInB93H,KAAK+3H,SAAW,GAEpBrqG,EAAMsB,SAASooG,EAAe5D,GAK9B4D,EAAcjmG,UAAU1hB,KAAO,SAAU+X,GAErC,IAAIwwG,EAAqBxwG,EAAMstG,KAAKthF,SAAW,EAC3CqkF,EAAe73H,KAAK63H,aACpBI,EAAiBj4H,KAAK+3H,SAAS/2H,OAEhChB,KAAKy3H,WACJz3H,KAAK03H,cAAcjoH,KAAK+X,IAExBxnB,KAAKs3H,cAAgB9vG,EAAM7iB,KAAK3D,OAEhCwyH,EAAcriG,UAAU1hB,KAAK1O,KAAKf,KAAM,CACpC2E,KAAO6iB,EAAM7iB,KACbmwH,KAAO,CACHgD,YAAc93H,KAAK83H,YACnBtkF,QAAUqkF,GAAgBG,EAAqB,KAAOH,EAAeI,EAAiB,IAAMJ,EAAe,SAU3HT,EAAcjmG,UAAU+mG,aAAe,SAAUjF,GAC7CjzH,KAAK43H,oBAAsB53H,KAAKs3H,aAChCt3H,KAAK83H,YAAc7E,EAAU,KAAS3oH,KAEtC,IAAIkrH,EAAkBx1H,KAAKq3H,cAAgBpE,EAAU,KAAS1nE,IAG9D,GAAGiqE,EAAiB,CAChB,IAAI2C,EAAS5C,EAAiBtC,EAAYuC,GAAiB,EAAOx1H,KAAK43H,oBAAqB53H,KAAKw3H,YAAax3H,KAAK21H,gBACnH31H,KAAKyP,KAAK,CACN9K,KAAOwzH,EAAOrB,WACdhC,KAAO,CAACthF,QAAQ,UAIpBxzC,KAAKy3H,YAAa,GAQ1BL,EAAcjmG,UAAUinG,aAAe,SAAUnF,GAC7CjzH,KAAKy3H,YAAa,EAClB,IAAIjC,EAAkBx1H,KAAKq3H,cAAgBpE,EAAU,KAAS1nE,IAC1D4sE,EAAS5C,EAAiBtC,EAAYuC,GAAiB,EAAMx1H,KAAK43H,oBAAqB53H,KAAKw3H,YAAax3H,KAAK21H,gBAGlH,GADA31H,KAAK23H,WAAWloH,KAAK0oH,EAAOnB,WACzBxB,EAECx1H,KAAKyP,KAAK,CACN9K,KAAOuyH,EAAwBjE,GAC/B6B,KAAO,CAACthF,QAAQ,YASpB,IAJAxzC,KAAKyP,KAAK,CACN9K,KAAOwzH,EAAOrB,WACdhC,KAAO,CAACthF,QAAQ,KAEdxzC,KAAK03H,cAAc12H,QACrBhB,KAAKyP,KAAKzP,KAAK03H,cAAcpxH,SAGrCtG,KAAK83H,YAAc,MAMvBV,EAAcjmG,UAAU84D,MAAQ,WAG5B,IADA,IAAIouC,EAAiBr4H,KAAKs3H,aAClB/2H,EAAI,EAAGA,EAAIP,KAAK23H,WAAW32H,OAAQT,IACvCP,KAAKyP,KAAK,CACN9K,KAAO3E,KAAK23H,WAAWp3H,GACvBu0H,KAAO,CAACthF,QAAQ,OAGxB,IAAI8kF,EAAmBt4H,KAAKs3H,aAAee,EAEvCE,EApL0B,SAAUV,EAAcS,EAAkBD,EAAgBzsH,EAAS+pH,GACjG,IACIO,EAAiBxoG,EAAMunG,YAAY,SAAUU,EAAe/pH,IAqBhE,OAlBS0pF,EAAUkjC,sBAEf,WAIAnD,EAASwC,EAAc,GAEvBxC,EAASwC,EAAc,GAEvBxC,EAASiD,EAAkB,GAE3BjD,EAASgD,EAAgB,GAEzBhD,EAASa,EAAel1H,OAAQ,GAEhCk1H,EA+JSuC,CAA4Bz4H,KAAK23H,WAAW32H,OAAQs3H,EAAkBD,EAAgBr4H,KAAKu3H,WAAYv3H,KAAK21H,gBAEzH31H,KAAKyP,KAAK,CACN9K,KAAO4zH,EACPzD,KAAO,CAACthF,QAAQ,QAOxB4jF,EAAcjmG,UAAUunG,kBAAoB,WACxC14H,KAAK24H,SAAW34H,KAAK+3H,SAASzxH,QAC9BtG,KAAKk4H,aAAal4H,KAAK24H,SAAS1F,YAC5BjzH,KAAK0wB,SACL1wB,KAAK24H,SAASnoG,QAEdxwB,KAAK24H,SAASloG,UAOtB2mG,EAAcjmG,UAAUynG,iBAAmB,SAAUD,GACjD34H,KAAK+3H,SAAStoH,KAAKkpH,GACnB,IAAI54H,EAAOC,KAgBX,OAdA24H,EAASj0H,GAAG,QAAQ,SAAU8iB,GAC1BznB,EAAKg1H,aAAavtG,MAEtBmxG,EAASj0H,GAAG,OAAO,WACf3E,EAAKq4H,aAAar4H,EAAK44H,SAAS1F,YAC7BlzH,EAAKg4H,SAAS/2H,OACbjB,EAAK24H,oBAEL34H,EAAKwG,SAGboyH,EAASj0H,GAAG,SAAS,SAAUvE,GAC3BJ,EAAK+B,MAAM3B,MAERH,MAMXo3H,EAAcjmG,UAAUV,OAAS,WAC7B,QAAI+iG,EAAcriG,UAAUV,OAAO1vB,KAAKf,SAInCA,KAAK24H,UAAY34H,KAAK+3H,SAAS/2H,QAChChB,KAAK04H,qBACE,GAEN14H,KAAK24H,UAAa34H,KAAK+3H,SAAS/2H,QAAWhB,KAAK64H,oBAArD,GACI74H,KAAKuG,OACE,KAOf6wH,EAAcjmG,UAAUrvB,MAAQ,SAAU3B,GACtC,IAAI24H,EAAU94H,KAAK+3H,SACnB,IAAIvE,EAAcriG,UAAUrvB,MAAMf,KAAKf,KAAMG,GACzC,OAAO,EAEX,IAAI,IAAII,EAAI,EAAGA,EAAIu4H,EAAQ93H,OAAQT,IAC/B,IACIu4H,EAAQv4H,GAAGuB,MAAM3B,GACnB,MAAMA,IAIZ,OAAO,GAMXi3H,EAAcjmG,UAAU4nG,KAAO,WAC3BvF,EAAcriG,UAAU4nG,KAAKh4H,KAAKf,MAElC,IADA,IAAI84H,EAAU94H,KAAK+3H,SACXx3H,EAAI,EAAGA,EAAIu4H,EAAQ93H,OAAQT,IAC/Bu4H,EAAQv4H,GAAGw4H,QAInBr5H,EAAOD,QAAU23H,wHC3hBjB,aAEA,IAAI4B,EAAev4H,EAAQ,mBACvB22H,EAAgB32H,EAAQ,mBAwB5BhB,EAAQw5H,eAAiB,SAAUviG,EAAKh0B,EAASkJ,GAE7C,IAAIstH,EAAgB,IAAI9B,EAAc10H,EAAQ20H,YAAazrH,EAASlJ,EAAQgzH,SAAUhzH,EAAQizH,gBAC1FkC,EAAe,EACnB,IAEInhG,EAAInrB,SAAQ,SAAU4tH,EAAcviG,GAChCihG,IACA,IAAIphG,EAxBK,SAAU2iG,EAAiBC,GAE5C,IAAIC,EAAkBF,GAAmBC,EACrC5iG,EAAcuiG,EAAaM,GAC/B,IAAK7iG,EACD,MAAM,IAAI71B,MAAM04H,EAAkB,wCAEtC,OAAO7iG,EAiBmB8iG,CAAe3iG,EAAKl0B,QAAQ+zB,YAAa/zB,EAAQ+zB,aAC/D68F,EAAqB18F,EAAKl0B,QAAQ4wH,oBAAsB5wH,EAAQ4wH,oBAAsB,GACtF/nE,EAAM30B,EAAK20B,IAAK0f,EAAOr0C,EAAKq0C,KAEhCr0C,EAAK4iG,gBAAgB/iG,EAAa68F,GACjCH,eAAe,OAAQ,CACpB7oH,KAAO6uH,EACP5tE,IAAMA,EACN0f,KAAOA,EACPr/D,QAAUgrB,EAAKhrB,SAAW,GAC1BqoH,gBAAkBr9F,EAAKq9F,gBACvBC,eAAiBt9F,EAAKs9F,iBAEzBpvH,KAAKo0H,MAEVA,EAAcrB,aAAeA,EAC/B,MAAO13H,GACL+4H,EAAcp3H,MAAM3B,GAGxB,OAAO+4H,wECvDX,aAMA,SAAS5iG,IAEL,KAAKt2B,gBAAgBs2B,GACjB,OAAO,IAAIA,EAGf,GAAGvvB,UAAU/F,OACT,MAAM,IAAIJ,MAAM,kGAQpBZ,KAAKsrD,MAAQ,GAEbtrD,KAAK4L,QAAU,KAGf5L,KAAKy5H,KAAO,GACZz5H,KAAKuyB,MAAQ,WACT,IAAImnG,EAAS,IAAIpjG,EACjB,IAAK,IAAI/1B,KAAKP,KACa,mBAAZA,KAAKO,KACZm5H,EAAOn5H,GAAKP,KAAKO,IAGzB,OAAOm5H,GAGfpjG,EAAMnF,UAAY1wB,EAAQ,YAC1B61B,EAAMnF,UAAUk6B,UAAY5qD,EAAQ,UACpC61B,EAAMi7F,QAAU9wH,EAAQ,aACxB61B,EAAMqjG,SAAWl5H,EAAQ,cAIzB61B,EAAMF,QAAU,QAEhBE,EAAM+0B,UAAY,SAAUt0B,EAASr0B,GACjC,OAAO,IAAI4zB,GAAQ+0B,UAAUt0B,EAASr0B,IAG1C4zB,EAAM+7F,SAAW5xH,EAAQ,cACzBf,EAAOD,QAAU62B,yGCnDjB,aACA,IAAI5I,EAAQjtB,EAAQ,WAChB4xH,EAAW5xH,EAAQ,cACnB20H,EAAO30H,EAAQ,UAEfm5H,GADAlsG,EAAQjtB,EAAQ,WACHA,EAAQ,iBACrB+xH,EAAa/xH,EAAQ,uBACrBo5H,EAAcp5H,EAAQ,iBAO1B,SAASq5H,EAAgBC,GACrB,OAAO,IAAI1H,EAASpvH,SAAQ,SAAUC,EAASC,GAC3C,IAAI4vH,EAASgH,EAASC,aAAalH,mBAAmBhuH,KAAK,IAAI0tH,GAC/DO,EAAOruH,GAAG,SAAS,SAAUvE,GACzBgD,EAAOhD,MAEVuE,GAAG,OAAO,WACHquH,EAAOE,WAAWL,QAAUmH,EAASC,aAAapH,MAClDzvH,EAAO,IAAIvC,MAAM,mCAEjBsC,OAGPutB,YAIT/wB,EAAOD,QAAU,SAASkF,EAAMjC,GAC5B,IAAIg0B,EAAM12B,KASV,OARA0C,EAAUgrB,EAAMnsB,OAAOmB,GAAW,GAAI,CAClCi0B,QAAQ,EACRsjG,YAAY,EACZC,uBAAuB,EACvBlG,eAAe,EACfmG,eAAgB/E,EAAKgF,aAGrBP,EAAYQ,QAAUR,EAAYS,SAAS31H,GACpC0tH,EAASpvH,QAAQE,OAAO,IAAIvC,MAAM,yDAGtC8sB,EAAM6sG,eAAe,sBAAuB51H,GAAM,EAAMjC,EAAQw3H,sBAAuBx3H,EAAQi0B,QACrG83B,MAAK,SAAS9pD,GACX,IAAI61H,EAAa,IAAIZ,EAAWl3H,GAEhC,OADA83H,EAAWpvE,KAAKzmD,GACT61H,KACR/rE,MAAK,SAAoB+rE,GACxB,IAAIC,EAAW,CAACpI,EAASpvH,QAAQC,QAAQs3H,IACrClvE,EAAQkvE,EAAWlvE,MACvB,GAAI5oD,EAAQu3H,WACR,IAAK,IAAI15H,EAAI,EAAGA,EAAI+qD,EAAMtqD,OAAQT,IAC9Bk6H,EAAShrH,KAAKqqH,EAAgBxuE,EAAM/qD,KAG5C,OAAO8xH,EAASpvH,QAAQusB,IAAIirG,MAC7BhsE,MAAK,SAAkB7pC,GAGtB,IAFA,IAAI41G,EAAa51G,EAAQte,QACrBglD,EAAQkvE,EAAWlvE,MACd/qD,EAAI,EAAGA,EAAI+qD,EAAMtqD,OAAQT,IAAK,CACnC,IAAIkkE,EAAQnZ,EAAM/qD,GAClBm2B,EAAIE,KAAK6tC,EAAMi2D,YAAaj2D,EAAMu1D,aAAc,CAC5CztB,QAAQ,EACR2tB,uBAAuB,EACvBjvD,KAAMxG,EAAMwG,KACZ1f,IAAKkZ,EAAMlZ,IACX3/C,QAAU64D,EAAMk2D,eAAe35H,OAASyjE,EAAMk2D,eAAiB,KAC/D1G,gBAAkBxvD,EAAMwvD,gBACxBC,eAAiBzvD,EAAMyvD,eACvBF,cAAetxH,EAAQsxH,gBAO/B,OAJIwG,EAAWjD,WAAWv2H,SACtB01B,EAAI9qB,QAAU4uH,EAAWjD,YAGtB7gG,4IC/Ef,aAEA,IAAIhJ,EAAQjtB,EAAQ,YAChB+yH,EAAgB/yH,EAAQ,2BAQ5B,SAASm6H,EAAyBn4H,EAAUG,GACxC4wH,EAAczyH,KAAKf,KAAM,mCAAqCyC,GAC9DzC,KAAK66H,gBAAiB,EACtB76H,KAAK86H,YAAYl4H,GAGrB8qB,EAAMsB,SAAS4rG,EAA0BpH,GAOzCoH,EAAyBzpG,UAAU2pG,YAAc,SAAUl4H,GACvD,IAAI7C,EAAOC,KACXA,KAAK+6H,QAAUn4H,EACfA,EAAO4tB,QACP5tB,EACC8B,GAAG,QAAQ,SAAU8iB,GAClBznB,EAAK0P,KAAK,CACN9K,KAAM6iB,EACNstG,KAAO,CACHthF,QAAU,QAIrB9uC,GAAG,SAAS,SAAUvE,GAChBJ,EAAK2wB,SACJ1wB,KAAK64H,eAAiB14H,EAEtBJ,EAAK+B,MAAM3B,MAGlBuE,GAAG,OAAO,WACJ3E,EAAK2wB,SACJ3wB,EAAK86H,gBAAiB,EAEtB96H,EAAKwG,UAIjBq0H,EAAyBzpG,UAAUX,MAAQ,WACvC,QAAIgjG,EAAcriG,UAAUX,MAAMzvB,KAAKf,QAGvCA,KAAK+6H,QAAQvqG,SACN,IAEXoqG,EAAyBzpG,UAAUV,OAAS,WACxC,QAAI+iG,EAAcriG,UAAUV,OAAO1vB,KAAKf,QAIrCA,KAAK66H,eACJ76H,KAAKuG,MAELvG,KAAK+6H,QAAQtqG,UAGV,IAGX/wB,EAAOD,QAAUm7H,wECzEjB,aAEA,IAAI7/D,EAAWt6D,EAAQ,mBAAmBs6D,SAa1C,SAASigE,EAA0BC,EAAQv4H,EAASw4H,GAChDngE,EAASh6D,KAAKf,KAAM0C,GACpB1C,KAAKm7H,QAAUF,EAEf,IAAIl7H,EAAOC,KACXi7H,EAAOv2H,GAAG,QAAQ,SAAUC,EAAMmwH,GACzB/0H,EAAK0P,KAAK9K,IACX5E,EAAKo7H,QAAQ3qG,QAEd0qG,GACCA,EAASpG,MAGhBpwH,GAAG,SAAS,SAASvE,GAClBJ,EAAK8E,KAAK,QAAS1E,MAEtBuE,GAAG,OAAO,WACP3E,EAAK0P,KAAK,SA5BNhP,EAAQ,YACduuB,SAASgsG,EAA2BjgE,GAgC1CigE,EAA0B7pG,UAAUiqG,MAAQ,WACxCp7H,KAAKm7H,QAAQ1qG,UAGjB/wB,EAAOD,QAAUu7H,6ECzCjB,aAEAt7H,EAAOD,QAAU,CAMb46H,YAA2B,IAAX1yG,EAOhB0zG,cAAe,SAAS12H,EAAM8B,GAC1B,GAAIkhB,EAAOG,MAAQH,EAAOG,OAAS26D,WAAW36D,KAC1C,OAAOH,EAAOG,KAAKnjB,EAAM8B,GAEzB,GAAoB,iBAAT9B,EAGP,MAAM,IAAI/D,MAAM,4CAEpB,OAAO,IAAI+mB,EAAOhjB,EAAM8B,IAQhC60H,YAAa,SAAU3wG,GACnB,GAAIhD,EAAO8C,MACP,OAAO9C,EAAO8C,MAAME,GAEpB,IAAI6D,EAAM,IAAI7G,EAAOgD,GAErB,OADA6D,EAAI7kB,KAAK,GACF6kB,GAQfyzC,SAAW,SAASvrD,GAChB,OAAOiR,EAAOs6C,SAASvrD,IAG3B4jH,SAAW,SAAUjpG,GACjB,OAAOA,GACe,mBAAXA,EAAI3sB,IACU,mBAAd2sB,EAAIb,OACW,mBAAfa,EAAIZ,6ECtDvB,aACA,IAAI2kG,EAAO30H,EAAQ,UACfitB,EAAQjtB,EAAQ,WAChB+yH,EAAgB/yH,EAAQ,0BACxB86H,EAAe96H,EAAQ,yBACvBk5H,EAAWl5H,EAAQ,cACnBgyH,EAAmBhyH,EAAQ,sBAC3B+6H,EAAY/6H,EAAQ,eACpB4iF,EAAW5iF,EAAQ,cACnBo5H,EAAcp5H,EAAQ,iBACtBm6H,EAA2Bn6H,EAAQ,qCAWnCg7H,EAAU,SAASnxH,EAAM3F,EAAM+2H,GAE/B,IACInmG,EADAomG,EAAWjuG,EAAMukG,UAAUttH,GAQ3BrE,EAAIotB,EAAMnsB,OAAOm6H,GAAmB,GAAI/B,GAC5Cr5H,EAAE2qE,KAAO3qE,EAAE2qE,MAAQ,IAAI9mE,KACD,OAAlB7D,EAAEm2B,cACFn2B,EAAEm2B,YAAcn2B,EAAEm2B,YAAYpJ,eAGD,iBAAtB/sB,EAAE2zH,kBACT3zH,EAAE2zH,gBAAkBzmG,SAASltB,EAAE2zH,gBAAiB,IAIhD3zH,EAAE2zH,iBAAwC,MAApB3zH,EAAE2zH,kBACxB3zH,EAAEirD,KAAM,GAGRjrD,EAAE4zH,gBAAsC,GAAnB5zH,EAAE4zH,iBACvB5zH,EAAEirD,KAAM,GAGRjrD,EAAEirD,MACFjhD,EAAOsxH,EAAmBtxH,IAE1BhK,EAAE0zH,gBAAkBz+F,EAASsmG,EAAavxH,KAC1CwxH,EAAU/6H,KAAKf,KAAMu1B,GAAQ,GAGjC,IAAIwmG,EAA+B,WAAbJ,IAAsC,IAAbr7H,EAAEisG,SAAiC,IAAbjsG,EAAEq2B,OAClE+kG,QAAqD,IAA3BA,EAAgBnvB,SAC3CjsG,EAAEisG,QAAUwvB,IAISp3H,aAAgB8tH,GAA+C,IAA1B9tH,EAAKguH,kBAE1CryH,EAAEirD,MAAQ5mD,GAAwB,IAAhBA,EAAK3D,UAC5CV,EAAEq2B,QAAS,EACXr2B,EAAEisG,QAAS,EACX5nG,EAAO,GACPrE,EAAEm2B,YAAc,QAChBklG,EAAW,UAOf,IAAIK,EAAmB,KAEnBA,EADAr3H,aAAgB8tH,GAAoB9tH,aAAgB6uH,EACjC7uH,EACZk1H,EAAYQ,QAAUR,EAAYS,SAAS31H,GAC/B,IAAIi2H,EAAyBtwH,EAAM3F,GAEnC+oB,EAAM6sG,eAAejwH,EAAM3F,EAAMrE,EAAEisG,OAAQjsG,EAAE45H,sBAAuB55H,EAAEq2B,QAG7F,IAAI8/B,EAAS,IAAI+kE,EAAUlxH,EAAM0xH,EAAkB17H,GACnDN,KAAKsrD,MAAMhhD,GAAQmsD,GAqBnBolE,EAAe,SAAU7nG,GACF,MAAnBA,EAAK/V,OAAO,KACZ+V,EAAOA,EAAKjX,UAAU,EAAGiX,EAAKhzB,OAAS,IAE3C,IAAIi7H,EAAYjoG,EAAKD,YAAY,KACjC,OAAQkoG,EAAY,EAAKjoG,EAAKjX,UAAU,EAAGk/G,GAAa,IASxDL,EAAqB,SAAS5nG,GAK9B,MAHuB,MAAnBA,EAAK/V,OAAO,KACZ+V,GAAQ,KAELA,GAWP8nG,EAAY,SAASxxH,EAAM0pH,GAY3B,OAXAA,OAA0C,IAAlBA,EAAiCA,EAAgB2F,EAAS3F,cAElF1pH,EAAOsxH,EAAmBtxH,GAGrBtK,KAAKsrD,MAAMhhD,IACZmxH,EAAQ16H,KAAKf,KAAMsK,EAAM,KAAM,CAC3BihD,KAAK,EACLyoE,cAAeA,IAGhBh0H,KAAKsrD,MAAMhhD,IAStB,SAASo0F,EAASjoC,GACd,MAAkD,oBAA3CvgD,OAAOib,UAAUjmB,SAASnK,KAAK01D,GAI1C,IAAIsM,EAAM,CAIN3X,KAAM,WACF,MAAM,IAAIxqD,MAAM,+EAUpB2K,QAAS,SAAS0L,GACd,IAAIxU,EAAU02H,EAAcviG,EAC5B,IAAKn0B,KAAYzC,KAAKsrD,MACbtrD,KAAKsrD,MAAMt6C,eAAevO,KAG/Bm0B,EAAO52B,KAAKsrD,MAAM7oD,IAClB02H,EAAe12H,EAASwb,MAAMje,KAAKy5H,KAAKz4H,OAAQyB,EAASzB,UACrCyB,EAASwb,MAAM,EAAGje,KAAKy5H,KAAKz4H,UAAYhB,KAAKy5H,MAC7DxiH,EAAGkiH,EAAcviG,KAY7BpkB,OAAQ,SAAS6gD,GACb,IAAI1tD,EAAS,GAOb,OANA3F,KAAKuL,SAAQ,SAAU4tH,EAAcpuE,GAC7BsI,EAAO8lE,EAAcpuE,IACrBplD,EAAO8J,KAAKs7C,MAIbplD,GAYXixB,KAAM,SAAStsB,EAAM3F,EAAMrE,GACvB,GAAyB,IAArByG,UAAU/F,OAAc,CACxB,GAAI09F,EAASp0F,GAAO,CAChB,IAAI4xH,EAAS5xH,EACb,OAAOtK,KAAKwS,QAAO,SAAS2mH,EAAcviG,GACtC,OAAQA,EAAK20B,KAAO2wE,EAAOjoH,KAAKklH,MAIpC,IAAI9nG,EAAMrxB,KAAKsrD,MAAMtrD,KAAKy5H,KAAOnvH,GACjC,OAAI+mB,IAAQA,EAAIk6B,IACLl6B,EAEA,KAQnB,OAHI/mB,EAAOtK,KAAKy5H,KAAOnvH,EACnBmxH,EAAQ16H,KAAKf,KAAMsK,EAAM3F,EAAMrE,GAE5BN,MAQXm8H,OAAQ,SAAS/3D,GACb,IAAKA,EACD,OAAOpkE,KAGX,GAAI0+F,EAASt6B,GACT,OAAOpkE,KAAKwS,QAAO,SAAS2mH,EAAcviG,GACtC,OAAOA,EAAK20B,KAAO6Y,EAAInwD,KAAKklH,MAKpC,IAAI7uH,EAAOtK,KAAKy5H,KAAOr1D,EACnBg4D,EAAYN,EAAU/6H,KAAKf,KAAMsK,GAGjC0kE,EAAMhvE,KAAKuyB,QAEf,OADAy8C,EAAIyqD,KAAO2C,EAAU9xH,KACd0kE,GAQXqtD,OAAQ,SAAS/xH,GACbA,EAAOtK,KAAKy5H,KAAOnvH,EACnB,IAAIssB,EAAO52B,KAAKsrD,MAAMhhD,GAStB,GARKssB,IAEsB,MAAnBtsB,EAAK2T,OAAO,KACZ3T,GAAQ,KAEZssB,EAAO52B,KAAKsrD,MAAMhhD,IAGlBssB,IAASA,EAAK20B,WAEPvrD,KAAKsrD,MAAMhhD,QAMlB,IAHA,IAAIgyH,EAAOt8H,KAAKwS,QAAO,SAAS2mH,EAAcviG,GAC1C,OAAOA,EAAKtsB,KAAK2T,MAAM,EAAG3T,EAAKtJ,UAAYsJ,KAEtC/J,EAAI,EAAGA,EAAI+7H,EAAKt7H,OAAQT,WACtBP,KAAKsrD,MAAMgxE,EAAK/7H,GAAG+J,MAIlC,OAAOtK,MAUXqjF,SAAU,SAAS3gF,GACf,MAAM,IAAI9B,MAAM,+EAUpB27H,uBAAwB,SAAS75H,GAC/B,IAAIqwH,EAAQxhE,EAAO,GACnB,IAoBI,IAnBAA,EAAO7jC,EAAMnsB,OAAOmB,GAAW,GAAI,CAC/B20H,aAAa,EACb5gG,YAAa,QACb68F,mBAAqB,KACrBppH,KAAM,GACNwrH,SAAU,MACV9pH,QAAS,KACT4wH,SAAU,kBACV7G,eAAgBP,EAAKW,cAGpB7rH,KAAOqnD,EAAKrnD,KAAK8S,cACtBu0C,EAAK96B,YAAc86B,EAAK96B,YAAYpJ,cAGnB,iBAAdkkC,EAAKrnD,OACNqnD,EAAKrnD,KAAO,WAGTqnD,EAAKrnD,KACR,MAAM,IAAItJ,MAAM,6BAGlB8sB,EAAM+uG,aAAalrE,EAAKrnD,MAIF,WAAlBqnD,EAAKmkE,UACa,YAAlBnkE,EAAKmkE,UACa,UAAlBnkE,EAAKmkE,UACa,UAAlBnkE,EAAKmkE,WAELnkE,EAAKmkE,SAAW,QAEE,UAAlBnkE,EAAKmkE,WACLnkE,EAAKmkE,SAAW,OAGpB,IAAI9pH,EAAU2lD,EAAK3lD,SAAW5L,KAAK4L,SAAW,GAC9CmnH,EAAS1vC,EAAS41C,eAAej5H,KAAMuxD,EAAM3lD,GAC/C,MAAOzL,IACP4yH,EAAS,IAAIS,EAAc,UACpB1xH,MAAM3B,GAEf,OAAO,IAAIo7H,EAAaxI,EAAQxhE,EAAKrnD,MAAQ,SAAUqnD,EAAKirE,WAM9D1lG,cAAe,SAASp0B,EAASg6H,GAC7B,OAAO18H,KAAKu8H,uBAAuB75H,GAAS+0H,WAAWiF,IAM3DC,mBAAoB,SAASj6H,EAASg6H,GAKlC,OAJAh6H,EAAUA,GAAW,IACRwH,OACTxH,EAAQwH,KAAO,cAEZlK,KAAKu8H,uBAAuB75H,GAASk6H,eAAeF,KAGnEh9H,EAAOD,QAAUsjE,qQC5XjBrjE,EAAOD,QAAUgB,EAAQ,8CCRzB,aACA,IAAIo8H,EAAap8H,EAAQ,gBAGzB,SAASq8H,EAAYn4H,GACjBk4H,EAAW97H,KAAKf,KAAM2E,GACzB,IAAI,IAAIpE,EAAI,EAAGA,EAAIP,KAAK2E,KAAK3D,OAAQT,IACpCoE,EAAKpE,GAAe,IAAVoE,EAAKpE,GALLE,EAAQ,YAQduuB,SAAS8tG,EAAaD,GAI5BC,EAAY3rG,UAAU4rG,OAAS,SAASx8H,GACpC,OAAOP,KAAK2E,KAAK3E,KAAKwpC,KAAOjpC,IAKjCu8H,EAAY3rG,UAAU6rG,qBAAuB,SAAS7pC,GAKlD,IAJA,IAAI8pC,EAAO9pC,EAAI9pE,WAAW,GACtB6zG,EAAO/pC,EAAI9pE,WAAW,GACtB8zG,EAAOhqC,EAAI9pE,WAAW,GACtB+zG,EAAOjqC,EAAI9pE,WAAW,GACjB9oB,EAAIP,KAAKgB,OAAS,EAAGT,GAAK,IAAKA,EACpC,GAAIP,KAAK2E,KAAKpE,KAAO08H,GAAQj9H,KAAK2E,KAAKpE,EAAI,KAAO28H,GAAQl9H,KAAK2E,KAAKpE,EAAI,KAAO48H,GAAQn9H,KAAK2E,KAAKpE,EAAI,KAAO68H,EACxG,OAAO78H,EAAIP,KAAKwpC,KAIxB,OAAQ,GAKZszF,EAAY3rG,UAAUksG,sBAAwB,SAAUlqC,GACpD,IAAI8pC,EAAO9pC,EAAI9pE,WAAW,GACtB6zG,EAAO/pC,EAAI9pE,WAAW,GACtB8zG,EAAOhqC,EAAI9pE,WAAW,GACtB+zG,EAAOjqC,EAAI9pE,WAAW,GACtB1kB,EAAO3E,KAAKs9H,SAAS,GACzB,OAAOL,IAASt4H,EAAK,IAAMu4H,IAASv4H,EAAK,IAAMw4H,IAASx4H,EAAK,IAAMy4H,IAASz4H,EAAK,IAKrFm4H,EAAY3rG,UAAUmsG,SAAW,SAAS3yG,GAEtC,GADA3qB,KAAK+6F,YAAYpwE,GACL,IAATA,EACC,MAAO,GAEX,IAAIhlB,EAAS3F,KAAK2E,KAAKsZ,MAAMje,KAAKwpC,KAAOxpC,KAAKkP,MAAOlP,KAAKwpC,KAAOxpC,KAAKkP,MAAQyb,GAE9E,OADA3qB,KAAKkP,OAASyb,EACPhlB,GAEXjG,EAAOD,QAAUq9H,6DCxDjB,aACA,IAAIpvG,EAAQjtB,EAAQ,YAEpB,SAASo8H,EAAWl4H,GAChB3E,KAAK2E,KAAOA,EACZ3E,KAAKgB,OAAS2D,EAAK3D,OACnBhB,KAAKkP,MAAQ,EACblP,KAAKwpC,KAAO,EAEhBqzF,EAAW1rG,UAAY,CAMnB4pE,YAAa,SAASj0F,GAClB9G,KAAKu9H,WAAWv9H,KAAKkP,MAAQpI,IAOjCy2H,WAAY,SAASC,GACjB,GAAIx9H,KAAKgB,OAAShB,KAAKwpC,KAAOg0F,GAAYA,EAAW,EACjD,MAAM,IAAI58H,MAAM,sCAAwCZ,KAAKgB,OAAS,mBAAsBw8H,EAAY,uBAQhHC,SAAU,SAASD,GACfx9H,KAAKu9H,WAAWC,GAChBx9H,KAAKkP,MAAQsuH,GAOjB96D,KAAM,SAAStiE,GACXJ,KAAKy9H,SAASz9H,KAAKkP,MAAQ9O,IAO/B28H,OAAQ,SAASx8H,KAQjBm9H,QAAS,SAAS/yG,GACd,IACIpqB,EADAoF,EAAS,EAGb,IADA3F,KAAK+6F,YAAYpwE,GACZpqB,EAAIP,KAAKkP,MAAQyb,EAAO,EAAGpqB,GAAKP,KAAKkP,MAAO3O,IAC7CoF,GAAUA,GAAU,GAAK3F,KAAK+8H,OAAOx8H,GAGzC,OADAP,KAAKkP,OAASyb,EACPhlB,GAOXg4H,WAAY,SAAShzG,GACjB,OAAO+C,EAAMunG,YAAY,SAAUj1H,KAAKs9H,SAAS3yG,KAOrD2yG,SAAU,SAAS3yG,KAQnBqyG,qBAAsB,SAAS7pC,KAQ/BkqC,sBAAuB,SAASlqC,KAOhCyqC,SAAU,WACN,IAAIC,EAAU79H,KAAK09H,QAAQ,GAC3B,OAAO,IAAIv5H,KAAKA,KAAK+lE,IACM,MAAzB2zD,GAAW,GAAM,MACjBA,GAAW,GAAM,IAAQ,EAC1BA,GAAW,GAAM,GACjBA,GAAW,GAAM,GACjBA,GAAW,EAAK,IACN,GAAVA,IAAmB,MAG5Bn+H,EAAOD,QAAUo9H,0CCnHjB,aACA,IAAIiB,EAAmBr9H,EAAQ,sBAG/B,SAASs9H,EAAiBp5H,GACtBm5H,EAAiB/8H,KAAKf,KAAM2E,GAHpBlE,EAAQ,YAKduuB,SAAS+uG,EAAkBD,GAKjCC,EAAiB5sG,UAAUmsG,SAAW,SAAS3yG,GAC3C3qB,KAAK+6F,YAAYpwE,GACjB,IAAIhlB,EAAS3F,KAAK2E,KAAKsZ,MAAMje,KAAKwpC,KAAOxpC,KAAKkP,MAAOlP,KAAKwpC,KAAOxpC,KAAKkP,MAAQyb,GAE9E,OADA3qB,KAAKkP,OAASyb,EACPhlB,GAEXjG,EAAOD,QAAUs+H,mEClBjB,aACA,IAAIlB,EAAap8H,EAAQ,gBAGzB,SAASu9H,EAAar5H,GAClBk4H,EAAW97H,KAAKf,KAAM2E,GAHdlE,EAAQ,YAKduuB,SAASgvG,EAAcnB,GAI7BmB,EAAa7sG,UAAU4rG,OAAS,SAASx8H,GACrC,OAAOP,KAAK2E,KAAK0kB,WAAWrpB,KAAKwpC,KAAOjpC,IAK5Cy9H,EAAa7sG,UAAU6rG,qBAAuB,SAAS7pC,GACnD,OAAOnzF,KAAK2E,KAAKovB,YAAYo/D,GAAOnzF,KAAKwpC,MAK7Cw0F,EAAa7sG,UAAUksG,sBAAwB,SAAUlqC,GAErD,OAAOA,IADInzF,KAAKs9H,SAAS,IAM7BU,EAAa7sG,UAAUmsG,SAAW,SAAS3yG,GACvC3qB,KAAK+6F,YAAYpwE,GAEjB,IAAIhlB,EAAS3F,KAAK2E,KAAKsZ,MAAMje,KAAKwpC,KAAOxpC,KAAKkP,MAAOlP,KAAKwpC,KAAOxpC,KAAKkP,MAAQyb,GAE9E,OADA3qB,KAAKkP,OAASyb,EACPhlB,GAEXjG,EAAOD,QAAUu+H,6DCrCjB,aACA,IAAIlB,EAAcr8H,EAAQ,iBAG1B,SAASq9H,EAAiBn5H,GACtBm4H,EAAY/7H,KAAKf,KAAM2E,GAHflE,EAAQ,YAKduuB,SAAS8uG,EAAkBhB,GAIjCgB,EAAiB3sG,UAAUmsG,SAAW,SAAS3yG,GAE3C,GADA3qB,KAAK+6F,YAAYpwE,GACL,IAATA,EAEC,OAAO,IAAI83D,WAAW,GAE1B,IAAI98E,EAAS3F,KAAK2E,KAAK22F,SAASt7F,KAAKwpC,KAAOxpC,KAAKkP,MAAOlP,KAAKwpC,KAAOxpC,KAAKkP,MAAQyb,GAEjF,OADA3qB,KAAKkP,OAASyb,EACPhlB,GAEXjG,EAAOD,QAAUq+H,8DCrBjB,aAEA,IAAIpwG,EAAQjtB,EAAQ,YAChB8wH,EAAU9wH,EAAQ,cAClBq8H,EAAcr8H,EAAQ,iBACtBu9H,EAAev9H,EAAQ,kBACvBs9H,EAAmBt9H,EAAQ,sBAC3Bq9H,EAAmBr9H,EAAQ,sBAO/Bf,EAAOD,QAAU,SAAUkF,GACvB,IAAIuF,EAAOwjB,EAAMukG,UAAUttH,GAE3B,OADA+oB,EAAM+uG,aAAavyH,GACN,WAATA,GAAsBqnH,EAAQa,WAGrB,eAATloH,EACO,IAAI6zH,EAAiBp5H,GAE5B4sH,EAAQa,WACD,IAAI0L,EAAiBpwG,EAAMunG,YAAY,aAActwH,IAEzD,IAAIm4H,EAAYpvG,EAAMunG,YAAY,QAAStwH,IARvC,IAAIq5H,EAAar5H,wJClBhC,aACAlF,EAAQs3H,kBAAoB,aAC5Bt3H,EAAQw3H,oBAAsB,aAC9Bx3H,EAAQ+4H,sBAAwB,aAChC/4H,EAAQw+H,gCAAkC,aAC1Cx+H,EAAQy+H,4BAA8B,aACtCz+H,EAAQ03H,gBAAkB,qCCN1B,aAEA,IAAI3D,EAAgB/yH,EAAQ,mBACxBitB,EAAQjtB,EAAQ,YAOpB,SAAS09H,EAAcC,GACnB5K,EAAczyH,KAAKf,KAAM,oBAAsBo+H,GAC/Cp+H,KAAKo+H,SAAWA,EAEpB1wG,EAAMsB,SAASmvG,EAAe3K,GAK9B2K,EAAchtG,UAAU4jG,aAAe,SAAUvtG,GAC7CxnB,KAAKyP,KAAK,CACN9K,KAAO+oB,EAAMunG,YAAYj1H,KAAKo+H,SAAU52G,EAAM7iB,MAC9CmwH,KAAOttG,EAAMstG,QAGrBp1H,EAAOD,QAAU0+H,gECzBjB,aAEA,IAAI3K,EAAgB/yH,EAAQ,mBACxBmyH,EAAQnyH,EAAQ,YAOpB,SAAS+xH,IACLgB,EAAczyH,KAAKf,KAAM,cACzBA,KAAKmzH,eAAe,QAAS,GARrB1yH,EAAQ,YAUduuB,SAASwjG,EAAYgB,GAK3BhB,EAAWrhG,UAAU4jG,aAAe,SAAUvtG,GAC1CxnB,KAAKizH,WAAWL,MAAQA,EAAMprG,EAAM7iB,KAAM3E,KAAKizH,WAAWL,OAAS,GACnE5yH,KAAKyP,KAAK+X,IAEd9nB,EAAOD,QAAU+yH,+ECvBjB,aAEA,IAAI9kG,EAAQjtB,EAAQ,YAChB+yH,EAAgB/yH,EAAQ,mBAO5B,SAAS8xH,EAAgBprE,GACrBqsE,EAAczyH,KAAKf,KAAM,uBAAyBmnD,GAClDnnD,KAAKmnD,SAAWA,EAChBnnD,KAAKmzH,eAAehsE,EAAU,GAElCz5B,EAAMsB,SAASujG,EAAiBiB,GAKhCjB,EAAgBphG,UAAU4jG,aAAe,SAAUvtG,GAC/C,GAAGA,EAAO,CACN,IAAIxmB,EAAShB,KAAKizH,WAAWjzH,KAAKmnD,WAAa,EAC/CnnD,KAAKizH,WAAWjzH,KAAKmnD,UAAYnmD,EAASwmB,EAAM7iB,KAAK3D,OAEzDwyH,EAAcriG,UAAU4jG,aAAah0H,KAAKf,KAAMwnB,IAEpD9nB,EAAOD,QAAU8yH,gEC3BjB,aAEA,IAAI7kG,EAAQjtB,EAAQ,YAChB+yH,EAAgB/yH,EAAQ,mBAW5B,SAAS6xH,EAAW+L,GAChB7K,EAAczyH,KAAKf,KAAM,cACzB,IAAID,EAAOC,KACXA,KAAKs+H,aAAc,EACnBt+H,KAAKkP,MAAQ,EACblP,KAAKqP,IAAM,EACXrP,KAAK2E,KAAO,KACZ3E,KAAKkK,KAAO,GAEZlK,KAAKu+H,gBAAiB,EAEtBF,EAAM5vE,MAAK,SAAU9pD,GACjB5E,EAAKu+H,aAAc,EACnBv+H,EAAK4E,KAAOA,EACZ5E,EAAKsP,IAAM1K,GAAQA,EAAK3D,QAAU,EAClCjB,EAAKmK,KAAOwjB,EAAMukG,UAAUttH,GACxB5E,EAAK2wB,UACL3wB,EAAKy+H,oBAEV,SAAUr+H,GACTJ,EAAK+B,MAAM3B,MAInButB,EAAMsB,SAASsjG,EAAYkB,GAK3BlB,EAAWnhG,UAAU+jG,QAAU,WAC3B1B,EAAcriG,UAAU+jG,QAAQn0H,KAAKf,MACrCA,KAAK2E,KAAO,MAMhB2tH,EAAWnhG,UAAUV,OAAS,WAC1B,QAAI+iG,EAAcriG,UAAUV,OAAO1vB,KAAKf,SAInCA,KAAKu+H,gBAAkBv+H,KAAKs+H,cAC7Bt+H,KAAKu+H,gBAAiB,EACtB7wG,EAAM+wG,MAAMz+H,KAAKw+H,eAAgB,GAAIx+H,QAElC,IAMXsyH,EAAWnhG,UAAUqtG,eAAiB,WAClCx+H,KAAKu+H,gBAAiB,EACnBv+H,KAAK0wB,UAAY1wB,KAAK0+H,aAGzB1+H,KAAK2+H,QACD3+H,KAAK0+H,aACLhxG,EAAM+wG,MAAMz+H,KAAKw+H,eAAgB,GAAIx+H,MACrCA,KAAKu+H,gBAAiB,KAO9BjM,EAAWnhG,UAAUwtG,MAAQ,WAEzB,GAAG3+H,KAAK0wB,UAAY1wB,KAAK0+H,WACrB,OAAO,EAGX,IACI/5H,EAAO,KAAMi6H,EAAYp3H,KAAKC,IAAIzH,KAAKqP,IAAKrP,KAAKkP,MAjFhC,OAkFrB,GAAIlP,KAAKkP,OAASlP,KAAKqP,IAEnB,OAAOrP,KAAKuG,MAEZ,OAAOvG,KAAKkK,MACR,IAAK,SACDvF,EAAO3E,KAAK2E,KAAKoY,UAAU/c,KAAKkP,MAAO0vH,GAC3C,MACA,IAAK,aACDj6H,EAAO3E,KAAK2E,KAAK22F,SAASt7F,KAAKkP,MAAO0vH,GAC1C,MACA,IAAK,QACL,IAAK,aACDj6H,EAAO3E,KAAK2E,KAAKsZ,MAAMje,KAAKkP,MAAO0vH,GAI3C,OADA5+H,KAAKkP,MAAQ0vH,EACN5+H,KAAKyP,KAAK,CACb9K,KAAOA,EACPmwH,KAAO,CACHthF,QAAUxzC,KAAKqP,IAAMrP,KAAKkP,MAAQlP,KAAKqP,IAAM,IAAM,MAMnE3P,EAAOD,QAAU6yH,gECnHjB,aAgBA,SAASkB,EAAclpH,GAEnBtK,KAAKsK,KAAOA,GAAQ,UAEpBtK,KAAKizH,WAAa,GAElBjzH,KAAK64H,eAAiB,KAEtB74H,KAAK6+H,gBAAkB,GAEvB7+H,KAAK0wB,UAAW,EAEhB1wB,KAAK0+H,YAAa,EAElB1+H,KAAK8+H,UAAW,EAEhB9+H,KAAKolH,WAAa,CACdzgH,KAAO,GACP4B,IAAM,GACNzE,MAAQ,IAGZ9B,KAAK24H,SAAW,KAGpBnF,EAAcriG,UAAY,CAKtB1hB,KAAO,SAAU+X,GACbxnB,KAAK6E,KAAK,OAAQ2iB,IAMtBjhB,IAAM,WACF,GAAIvG,KAAK0+H,WACL,OAAO,EAGX1+H,KAAKiqF,QACL,IACIjqF,KAAK6E,KAAK,OACV7E,KAAKk1H,UACLl1H,KAAK0+H,YAAa,EACpB,MAAOv+H,GACLH,KAAK6E,KAAK,QAAS1E,GAEvB,OAAO,GAOX2B,MAAQ,SAAU3B,GACd,OAAIH,KAAK0+H,aAIN1+H,KAAK0wB,SACJ1wB,KAAK64H,eAAiB14H,GAEtBH,KAAK0+H,YAAa,EAElB1+H,KAAK6E,KAAK,QAAS1E,GAKhBH,KAAK24H,UACJ34H,KAAK24H,SAAS72H,MAAM3B,GAGxBH,KAAKk1H,YAEF,IAQXxwH,GAAK,SAAU4F,EAAMk6G,GAEjB,OADAxkH,KAAKolH,WAAW96G,GAAMmF,KAAK+0G,GACpBxkH,MAKXk1H,QAAU,WACNl1H,KAAKizH,WAAajzH,KAAK64H,eAAiB74H,KAAK6+H,gBAAkB,KAC/D7+H,KAAKolH,WAAa,IAOtBvgH,KAAO,SAAUyF,EAAM85D,GACnB,GAAIpkE,KAAKolH,WAAW96G,GAChB,IAAI,IAAI/J,EAAI,EAAGA,EAAIP,KAAKolH,WAAW96G,GAAMtJ,OAAQT,IAC7CP,KAAKolH,WAAW96G,GAAM/J,GAAGQ,KAAKf,KAAMokE,IAShDt/D,KAAO,SAAU6mB,GACb,OAAOA,EAAKitG,iBAAiB54H,OAUjC44H,iBAAmB,SAAUD,GACzB,GAAI34H,KAAK8+H,SACL,MAAM,IAAIl+H,MAAM,eAAiBZ,KAAO,4BAI5CA,KAAKizH,WAAa0F,EAAS1F,WAE3BjzH,KAAK++H,kBACL/+H,KAAK24H,SAAYA,EACjB,IAAI54H,EAAOC,KAUX,OATA24H,EAASj0H,GAAG,QAAQ,SAAU8iB,GAC1BznB,EAAKg1H,aAAavtG,MAEtBmxG,EAASj0H,GAAG,OAAO,WACf3E,EAAKwG,SAEToyH,EAASj0H,GAAG,SAAS,SAAUvE,GAC3BJ,EAAK+B,MAAM3B,MAERH,MAMXwwB,MAAQ,WACJ,OAAGxwB,KAAK0wB,WAAY1wB,KAAK0+H,aAGzB1+H,KAAK0wB,UAAW,EAEb1wB,KAAK24H,UACJ34H,KAAK24H,SAASnoG,SAEX,IAMXC,OAAS,WACL,IAAIzwB,KAAK0wB,UAAY1wB,KAAK0+H,WACtB,OAAO,EAEX1+H,KAAK0wB,UAAW,EAGhB,IAAIsuG,GAAY,EAShB,OARGh/H,KAAK64H,iBACJ74H,KAAK8B,MAAM9B,KAAK64H,gBAChBmG,GAAY,GAEbh/H,KAAK24H,UACJ34H,KAAK24H,SAASloG,UAGVuuG,GAKZ/0C,MAAQ,aAKR8qC,aAAe,SAASvtG,GACpBxnB,KAAKyP,KAAK+X,IAQd2rG,eAAiB,SAAUxjH,EAAKpK,GAG5B,OAFAvF,KAAK6+H,gBAAgBlvH,GAAOpK,EAC5BvF,KAAK++H,kBACE/+H,MAKX++H,gBAAkB,WACd,IAAI,IAAIpvH,KAAO3P,KAAK6+H,gBACX7+H,KAAK6+H,gBAAgB7tH,eAAerB,KAGzC3P,KAAKizH,WAAWtjH,GAAO3P,KAAK6+H,gBAAgBlvH,KAQpDopH,KAAM,WACF,GAAI/4H,KAAK8+H,SACL,MAAM,IAAIl+H,MAAM,eAAiBZ,KAAO,4BAE5CA,KAAK8+H,UAAW,EACZ9+H,KAAK24H,UACL34H,KAAK24H,SAASI,QAQtB7tH,SAAW,WACP,IAAI+zH,EAAK,UAAYj/H,KAAKsK,KAC1B,OAAItK,KAAK24H,SACE34H,KAAK24H,SAAW,OAASsG,EAEzBA,IAKnBv/H,EAAOD,QAAU+zH,yCCtQjB,aAEA,IAAI9lG,EAAQjtB,EAAQ,YAChB09H,EAAgB19H,EAAQ,mBACxB+yH,EAAgB/yH,EAAQ,mBACxBk2B,EAASl2B,EAAQ,aACjB8wH,EAAU9wH,EAAQ,cAClB4xH,EAAW5xH,EAAQ,eAEnBu6H,EAA4B,KAChC,GAAIzJ,EAAQ2N,WACR,IACIlE,EAA4Bv6H,EAAQ,uCACtC,MAAMN,IA+DZ,SAASg/H,EAAWlE,EAAQmE,GACxB,OAAO,IAAI/M,EAASpvH,SAAQ,SAAUC,EAASC,GAC3C,IAAIk8H,EAAY,GACZC,EAAYrE,EAAOsE,cACnBC,EAAavE,EAAOwE,YACpBjD,EAAWvB,EAAOyE,UACtBzE,EACCv2H,GAAG,QAAQ,SAAUC,EAAMmwH,GACxBuK,EAAU5vH,KAAK9K,GACZy6H,GACCA,EAAetK,MAGtBpwH,GAAG,SAAS,SAASonB,GAClBuzG,EAAY,GACZl8H,EAAO2oB,MAEVpnB,GAAG,OAAO,WACP,IACI,IAAIiB,EAtEpB,SAA4BuE,EAAM6sB,EAASylG,GACvC,OAAOtyH,GACH,IAAK,OACD,OAAOwjB,EAAMiyG,QAAQjyG,EAAMunG,YAAY,cAAel+F,GAAUylG,GACpE,IAAK,SACD,OAAO7lG,EAAOrc,OAAOyc,GACzB,QACI,OAAOrJ,EAAMunG,YAAY/qH,EAAM6sB,IA+Dd6oG,CAAmBJ,EApDhD,SAAiBt1H,EAAMm1H,GACnB,IAAI9+H,EAAG2O,EAAQ,EAAGinD,EAAM,KAAMg8D,EAAc,EAC5C,IAAI5xH,EAAI,EAAGA,EAAI8+H,EAAUr+H,OAAQT,IAC7B4xH,GAAekN,EAAU9+H,GAAGS,OAEhC,OAAOkJ,GACH,IAAK,SACD,OAAOm1H,EAAU/yH,KAAK,IACxB,IAAK,QACH,OAAOkE,MAAM2gB,UAAUxuB,OAAO0f,MAAM,GAAIg9G,GAC5C,IAAK,aAED,IADAlpE,EAAM,IAAIssB,WAAW0vC,GACjB5xH,EAAI,EAAGA,EAAI8+H,EAAUr+H,OAAQT,IAC7B41D,EAAI1O,IAAI43E,EAAU9+H,GAAI2O,GACtBA,GAASmwH,EAAU9+H,GAAGS,OAE1B,OAAOm1D,EACX,IAAK,aACD,OAAOxuC,EAAOhlB,OAAO08H,GACzB,QACI,MAAM,IAAIz+H,MAAM,8BAAiCsJ,EAAO,MAgCRvH,CAAO28H,EAAWD,GAAY7C,GAC1Et5H,EAAQyC,GACV,MAAOxF,GACLgD,EAAOhD,GAEXk/H,EAAY,MAEf5uG,YAWT,SAAS8qG,EAAaxI,EAAQ8M,EAAYrD,GACtC,IAAIsD,EAAeD,EACnB,OAAOA,GACH,IAAK,OACL,IAAK,cACDC,EAAe,aACnB,MACA,IAAK,SACDA,EAAe,SAIvB,IAEI9/H,KAAKu/H,cAAgBO,EAErB9/H,KAAKy/H,YAAcI,EAEnB7/H,KAAK0/H,UAAYlD,EACjB9uG,EAAM+uG,aAAaqD,GACnB9/H,KAAK+/H,QAAUhN,EAAOjuH,KAAK,IAAIq5H,EAAc2B,IAG7C/M,EAAOgG,OACT,MAAM54H,GACJH,KAAK+/H,QAAU,IAAIvM,EAAc,SACjCxzH,KAAK+/H,QAAQj+H,MAAM3B,IAI3Bo7H,EAAapqG,UAAY,CAOrBsmG,WAAa,SAAUyD,GACnB,OAAOiE,EAAWn/H,KAAMk7H,IAQ5Bx2H,GAAK,SAAUs7H,EAAK7c,GAChB,IAAIpjH,EAAOC,KAWX,MATW,SAARggI,EACChgI,KAAK+/H,QAAQr7H,GAAGs7H,GAAK,SAAUx4G,GAC3B27F,EAAGpiH,KAAKhB,EAAMynB,EAAM7iB,KAAM6iB,EAAMstG,SAGpC90H,KAAK+/H,QAAQr7H,GAAGs7H,GAAK,WACjBtyG,EAAM+wG,MAAMtb,EAAIp8G,UAAWhH,MAG5BC,MAMXywB,OAAS,WAEL,OADA/C,EAAM+wG,MAAMz+H,KAAK+/H,QAAQtvG,OAAQ,GAAIzwB,KAAK+/H,SACnC//H,MAMXwwB,MAAQ,WAEJ,OADAxwB,KAAK+/H,QAAQvvG,QACNxwB,MAOX48H,eAAiB,SAAU1B,GAEvB,GADAxtG,EAAM+uG,aAAa,cACM,eAArBz8H,KAAKy/H,YAKL,MAAM,IAAI7+H,MAAMZ,KAAKy/H,YAAc,oCAGvC,OAAO,IAAIzE,EAA0Bh7H,KAAM,CACvC2wD,WAAkC,eAArB3wD,KAAKy/H,aACnBvE,KAKXx7H,EAAOD,QAAU87H,2OCnNjB,aAUA,GARA97H,EAAQk3B,QAAS,EACjBl3B,EAAQi3F,OAAQ,EAChBj3F,EAAQo7D,QAAS,EACjBp7D,EAAQwgI,YAAqC,oBAAhBnwG,aAAqD,oBAAf2yD,WACnEhjF,EAAQygI,gBAA+B,IAAXv4G,EAE5BloB,EAAQ2yH,WAAmC,oBAAf3vC,WAED,oBAAhB3yD,YACPrwB,EAAQ0gI,MAAO,MAEd,CACD,IAAIp4G,EAAS,IAAI+H,YAAY,GAC7B,IACIrwB,EAAQ0gI,KAEI,IAFG,IAAIC,KAAK,CAACr4G,GAAS,CAC9B7d,KAAM,oBACPygB,KAEP,MAAOxqB,GACH,IACI,IACIkgI,EAAU,IADAtgI,KAAKugI,aAAevgI,KAAKwgI,mBAAqBxgI,KAAKygI,gBAAkBzgI,KAAK0gI,eAExFJ,EAAQvzE,OAAO/kC,GACftoB,EAAQ0gI,KAAmD,IAA5CE,EAAQK,QAAQ,mBAAmB/1G,KAEtD,MAAOxqB,GACHV,EAAQ0gI,MAAO,IAK3B,IACI1gI,EAAQy/H,aAAez+H,EAAQ,mBAAmBs6D,SACpD,MAAM56D,GACJV,EAAQy/H,YAAa,6FCpCzB,aAgBA,IAdA,IAAIxxG,EAAQjtB,EAAQ,WAChB8wH,EAAU9wH,EAAQ,aAClBo5H,EAAcp5H,EAAQ,iBACtB+yH,EAAgB/yH,EAAQ,0BAUxBkgI,EAAW,IAAInwH,MAAM,KAChBjQ,EAAE,EAAGA,EAAE,IAAKA,IACnBogI,EAASpgI,GAAMA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAI,EAE5FogI,EAAS,KAAKA,EAAS,KAAK,EAkL5B,SAASC,IACLpN,EAAczyH,KAAKf,KAAM,gBAEzBA,KAAK6gI,SAAW,KA4DpB,SAASC,IACLtN,EAAczyH,KAAKf,KAAM,gBA7F7BP,EAAQs2H,WAAa,SAAoBluG,GACrC,OAAI0pG,EAAQ2O,WACDrG,EAAYwB,cAAcxzG,EAAK,SApJ7B,SAAUA,GACvB,IAAI2G,EAAKhuB,EAAGsvF,EAAIixC,EAAOxgI,EAAGygI,EAAUn5G,EAAI7mB,OAAQigI,EAAU,EAG1D,IAAKF,EAAQ,EAAGA,EAAQC,EAASD,IAER,QAAZ,OADTvgI,EAAIqnB,EAAIwB,WAAW03G,MACaA,EAAM,EAAIC,GAEhB,QAAZ,OADVlxC,EAAKjoE,EAAIwB,WAAW03G,EAAM,OAEtBvgI,EAAI,OAAYA,EAAI,OAAW,KAAOsvF,EAAK,OAC3CixC,KAGRE,GAAWzgI,EAAI,IAAO,EAAIA,EAAI,KAAQ,EAAIA,EAAI,MAAU,EAAI,EAWhE,IANIguB,EADA+iG,EAAQa,WACF,IAAI3vC,WAAWw+C,GAEf,IAAIzwH,MAAMywH,GAIf1gI,EAAE,EAAGwgI,EAAQ,EAAGxgI,EAAI0gI,EAASF,IAET,QAAZ,OADTvgI,EAAIqnB,EAAIwB,WAAW03G,MACaA,EAAM,EAAIC,GAEhB,QAAZ,OADVlxC,EAAKjoE,EAAIwB,WAAW03G,EAAM,OAEtBvgI,EAAI,OAAYA,EAAI,OAAW,KAAOsvF,EAAK,OAC3CixC,KAGJvgI,EAAI,IAEJguB,EAAIjuB,KAAOC,EACJA,EAAI,MAEXguB,EAAIjuB,KAAO,IAAQC,IAAM,EACzBguB,EAAIjuB,KAAO,IAAY,GAAJC,GACZA,EAAI,OAEXguB,EAAIjuB,KAAO,IAAQC,IAAM,GACzBguB,EAAIjuB,KAAO,IAAQC,IAAM,EAAI,GAC7BguB,EAAIjuB,KAAO,IAAY,GAAJC,IAGnBguB,EAAIjuB,KAAO,IAAQC,IAAM,GACzBguB,EAAIjuB,KAAO,IAAQC,IAAM,GAAK,GAC9BguB,EAAIjuB,KAAO,IAAQC,IAAM,EAAI,GAC7BguB,EAAIjuB,KAAO,IAAY,GAAJC,GAI3B,OAAOguB,EAiGA0yG,CAAWr5G,IAUtBpoB,EAAQ26H,WAAa,SAAoB5rG,GACrC,OAAI+iG,EAAQ2O,WACDxyG,EAAMunG,YAAY,aAAczmG,GAAKtjB,SAAS,SA9E5C,SAAUsjB,GACvB,IAASjuB,EAAGwiE,EAAKviE,EAAG2gI,EAChB3+F,EAAMhU,EAAIxtB,OAKVogI,EAAW,IAAI5wH,MAAU,EAAJgyB,GAEzB,IAAKugC,EAAI,EAAGxiE,EAAE,EAAGA,EAAEiiC,GAGf,IAFAhiC,EAAIguB,EAAIjuB,MAEA,IAAQ6gI,EAASr+D,KAASviE,OAIlC,IAFA2gI,EAAQR,EAASngI,IAEL,EAAK4gI,EAASr+D,KAAS,MAAQxiE,GAAK4gI,EAAM,MAAtD,CAKA,IAFA3gI,GAAe,IAAV2gI,EAAc,GAAiB,IAAVA,EAAc,GAAO,EAExCA,EAAQ,GAAK5gI,EAAIiiC,GACpBhiC,EAAKA,GAAK,EAAiB,GAAXguB,EAAIjuB,KACpB4gI,IAIAA,EAAQ,EAAKC,EAASr+D,KAAS,MAE/BviE,EAAI,MACJ4gI,EAASr+D,KAASviE,GAElBA,GAAK,MACL4gI,EAASr+D,KAAS,MAAWviE,GAAK,GAAM,KACxC4gI,EAASr+D,KAAS,MAAc,KAAJviE,GAcpC,OATI4gI,EAASpgI,SAAW+hE,IACjBq+D,EAAS9lC,SACR8lC,EAAWA,EAAS9lC,SAAS,EAAGv4B,GAEhCq+D,EAASpgI,OAAS+hE,GAKnBr1C,EAAM2zG,kBAAkBD,GAmCxBE,CAFP9yG,EAAMd,EAAMunG,YAAY1D,EAAQa,WAAa,aAAe,QAAS5jG,KAczEd,EAAMsB,SAAS4xG,EAAkBpN,GAKjCoN,EAAiBzvG,UAAU4jG,aAAe,SAAUvtG,GAEhD,IAAI7iB,EAAO+oB,EAAMunG,YAAY1D,EAAQa,WAAa,aAAe,QAAS5qG,EAAM7iB,MAGhF,GAAI3E,KAAK6gI,UAAY7gI,KAAK6gI,SAAS7/H,OAAQ,CACvC,GAAGuwH,EAAQa,WAAY,CACnB,IAAImP,EAAe58H,GACnBA,EAAO,IAAI89E,WAAW8+C,EAAavgI,OAAShB,KAAK6gI,SAAS7/H,SACrDymD,IAAIznD,KAAK6gI,SAAU,GACxBl8H,EAAK8iD,IAAI85E,EAAcvhI,KAAK6gI,SAAS7/H,aAErC2D,EAAO3E,KAAK6gI,SAASl+H,OAAOgC,GAEhC3E,KAAK6gI,SAAW,KAGpB,IAAIW,EA3IS,SAAShzG,EAAKnf,GAC3B,IAAIqT,EAOJ,KALArT,EAAMA,GAAOmf,EAAIxtB,QACPwtB,EAAIxtB,SAAUqO,EAAMmf,EAAIxtB,QAGlC0hB,EAAMrT,EAAI,EACHqT,GAAO,GAA2B,MAAV,IAAX8L,EAAI9L,KAAyBA,IAIjD,OAAIA,EAAM,GAIE,IAARA,EAJkBrT,EAMdqT,EAAMi+G,EAASnyG,EAAI9L,IAAQrT,EAAOqT,EAAMrT,EAyH7BoyH,CAAW98H,GAC1B+8H,EAAa/8H,EACb68H,IAAiB78H,EAAK3D,SAClBuwH,EAAQa,YACRsP,EAAa/8H,EAAK22F,SAAS,EAAGkmC,GAC9BxhI,KAAK6gI,SAAWl8H,EAAK22F,SAASkmC,EAAc78H,EAAK3D,UAEjD0gI,EAAa/8H,EAAKsZ,MAAM,EAAGujH,GAC3BxhI,KAAK6gI,SAAWl8H,EAAKsZ,MAAMujH,EAAc78H,EAAK3D,UAItDhB,KAAKyP,KAAK,CACN9K,KAAOlF,EAAQ26H,WAAWsH,GAC1B5M,KAAOttG,EAAMstG,QAOrB8L,EAAiBzvG,UAAU84D,MAAQ,WAC5BjqF,KAAK6gI,UAAY7gI,KAAK6gI,SAAS7/H,SAC9BhB,KAAKyP,KAAK,CACN9K,KAAOlF,EAAQ26H,WAAWp6H,KAAK6gI,UAC/B/L,KAAO,KAEX90H,KAAK6gI,SAAW,OAGxBphI,EAAQmhI,iBAAmBA,EAS3BlzG,EAAMsB,SAAS8xG,EAAkBtN,GAKjCsN,EAAiB3vG,UAAU4jG,aAAe,SAAUvtG,GAChDxnB,KAAKyP,KAAK,CACN9K,KAAOlF,EAAQs2H,WAAWvuG,EAAM7iB,MAChCmwH,KAAOttG,EAAMstG,QAGrBr1H,EAAQqhI,iBAAmBA,0GClR3B,aAEA,IAAIvP,EAAU9wH,EAAQ,aAClBk2B,EAASl2B,EAAQ,YACjBo5H,EAAcp5H,EAAQ,iBACtBmyB,EAAenyB,EAAQ,sBACvB4xH,EAAW5xH,EAAQ,cAiEvB,SAASkhI,EAASl9D,GACd,OAAOA,EASX,SAASm9D,EAAkB/5G,EAAK6uE,GAC5B,IAAK,IAAIn2F,EAAI,EAAGA,EAAIsnB,EAAI7mB,SAAUT,EAC9Bm2F,EAAMn2F,GAAyB,IAApBsnB,EAAIwB,WAAW9oB,GAE9B,OAAOm2F,EA9CXj3F,EAAQkgI,QAAU,SAAS/3E,EAAM19C,GAC7BzK,EAAQg9H,aAAa,QAErB,IAEI,OAAO,IAAI2D,KAAK,CAACx4E,GAAO,CACpB19C,KAAMA,IAGd,MAAO/J,GAEH,IAEI,IACIkgI,EAAU,IADAtgI,KAAKugI,aAAevgI,KAAKwgI,mBAAqBxgI,KAAKygI,gBAAkBzgI,KAAK0gI,eAGxF,OADAJ,EAAQvzE,OAAOlF,GACRy4E,EAAQK,QAAQx2H,GAE3B,MAAO/J,GAGH,MAAM,IAAIS,MAAM,sCAiC5B,IAAIihI,EAAsB,CAUtBC,iBAAkB,SAASprC,EAAOxsF,EAAMsd,GACpC,IAAI7hB,EAAS,GAAIovD,EAAI,EAAGvyB,EAAMk0D,EAAM11F,OAEpC,GAAIwhC,GAAOhb,EACP,OAAOpd,OAAO22C,aAAa1+B,MAAM,KAAMq0E,GAE3C,KAAO3hC,EAAIvyB,GACM,UAATt4B,GAA6B,eAATA,EACpBvE,EAAO8J,KAAKrF,OAAO22C,aAAa1+B,MAAM,KAAMq0E,EAAMz4E,MAAM82C,EAAGvtD,KAAKC,IAAIstD,EAAIvtC,EAAOgb,MAG/E78B,EAAO8J,KAAKrF,OAAO22C,aAAa1+B,MAAM,KAAMq0E,EAAM4E,SAASvmC,EAAGvtD,KAAKC,IAAIstD,EAAIvtC,EAAOgb,MAEtFuyB,GAAKvtC,EAET,OAAO7hB,EAAO2G,KAAK,KASvBy1H,gBAAiB,SAASrrC,GAEtB,IADA,IAAIsrC,EAAY,GACRzhI,EAAI,EAAGA,EAAIm2F,EAAM11F,OAAQT,IAC7ByhI,GAAa53H,OAAO22C,aAAa21C,EAAMn2F,IAE3C,OAAOyhI,GAEXC,eAAiB,CAIb7P,WAAc,WACV,IACI,OAAOb,EAAQa,YAA4E,IAA9DhoH,OAAO22C,aAAa1+B,MAAM,KAAM,IAAIogE,WAAW,IAAIzhF,OAClF,MAAOb,GACL,OAAO,GAJD,GAUd+/H,WAAc,WACV,IACI,OAAO3O,EAAQ2O,YAAqF,IAAvE91H,OAAO22C,aAAa1+B,MAAM,KAAMw3G,EAAYyB,YAAY,IAAIt6H,OAC3F,MAAOb,GACL,OAAO,GAJD,KAetB,SAAS+hI,EAAkBxrC,GAWvB,IAAIlvE,EAAQ,MACRtd,EAAOzK,EAAQwyH,UAAUv7B,GACzByrC,GAAc,EAOlB,GANa,eAATj4H,EACAi4H,EAAcN,EAAoBI,eAAe7P,WACjC,eAATloH,IACPi4H,EAAcN,EAAoBI,eAAe/B,YAGjDiC,EACA,KAAO36G,EAAQ,GACX,IACI,OAAOq6G,EAAoBC,iBAAiBprC,EAAOxsF,EAAMsd,GAC3D,MAAOrnB,GACLqnB,EAAQhgB,KAAKI,MAAM4f,EAAQ,GAOvC,OAAOq6G,EAAoBE,gBAAgBrrC,GAY/C,SAAS0rC,EAAqBC,EAAWC,GACrC,IAAK,IAAI/hI,EAAI,EAAGA,EAAI8hI,EAAUrhI,OAAQT,IAClC+hI,EAAQ/hI,GAAK8hI,EAAU9hI,GAE3B,OAAO+hI,EAbX7iI,EAAQ4hI,kBAAoBa,EAiB5B,IAAIpuE,EAAY,GAGhBA,EAAS,OAAa,CAClB+G,OAAU8mE,EACVjrC,MAAS,SAASjyB,GACd,OAAOm9D,EAAkBn9D,EAAO,IAAIj0D,MAAMi0D,EAAMzjE,UAEpDi/H,YAAe,SAASx7D,GACpB,OAAO3Q,EAAS,OAAT,WAAkC2Q,GAAO18C,QAEpDqqG,WAAc,SAAS3tD,GACnB,OAAOm9D,EAAkBn9D,EAAO,IAAIge,WAAWhe,EAAMzjE,UAEzDk/H,WAAc,SAASz7D,GACnB,OAAOm9D,EAAkBn9D,EAAOo1D,EAAYyB,YAAY72D,EAAMzjE,WAKtE8yD,EAAS,MAAY,CACjB+G,OAAUqnE,EACVxrC,MAASirC,EACT1B,YAAe,SAASx7D,GACpB,OAAQ,IAAIge,WAAWhe,GAAQ18C,QAEnCqqG,WAAc,SAAS3tD,GACnB,OAAO,IAAIge,WAAWhe,IAE1By7D,WAAc,SAASz7D,GACnB,OAAOo1D,EAAYwB,cAAc52D,KAKzC3Q,EAAS,YAAkB,CACvB+G,OAAU,SAAS4J,GACf,OAAOy9D,EAAkB,IAAIz/C,WAAWhe,KAE5CiyB,MAAS,SAASjyB,GACd,OAAO29D,EAAqB,IAAI3/C,WAAWhe,GAAQ,IAAIj0D,MAAMi0D,EAAMrC,cAEvE69D,YAAe0B,EACfvP,WAAc,SAAS3tD,GACnB,OAAO,IAAIge,WAAWhe,IAE1By7D,WAAc,SAASz7D,GACnB,OAAOo1D,EAAYwB,cAAc,IAAI54C,WAAWhe,MAKxD3Q,EAAS,WAAiB,CACtB+G,OAAUqnE,EACVxrC,MAAS,SAASjyB,GACd,OAAO29D,EAAqB39D,EAAO,IAAIj0D,MAAMi0D,EAAMzjE,UAEvDi/H,YAAe,SAASx7D,GACpB,OAAOA,EAAM18C,QAEjBqqG,WAAcuP,EACdzB,WAAc,SAASz7D,GACnB,OAAOo1D,EAAYwB,cAAc52D,KAKzC3Q,EAAS,WAAiB,CACtB+G,OAAUqnE,EACVxrC,MAAS,SAASjyB,GACd,OAAO29D,EAAqB39D,EAAO,IAAIj0D,MAAMi0D,EAAMzjE,UAEvDi/H,YAAe,SAASx7D,GACpB,OAAO3Q,EAAS,WAAT,WAAsC2Q,GAAO18C,QAExDqqG,WAAc,SAAS3tD,GACnB,OAAO29D,EAAqB39D,EAAO,IAAIge,WAAWhe,EAAMzjE,UAE5Dk/H,WAAcyB,GAWlBliI,EAAQw1H,YAAc,SAAS4K,EAAYp7D,GAMvC,GALKA,IAGDA,EAAQ,KAEPo7D,EACD,OAAOp7D,EAEXhlE,EAAQg9H,aAAaoD,GACrB,IAAI0C,EAAY9iI,EAAQwyH,UAAUxtD,GAElC,OADa3Q,EAAUyuE,GAAW1C,GAAYp7D,IAUlDhlE,EAAQwyH,UAAY,SAASxtD,GACzB,MAAqB,iBAAVA,EACA,SAEmC,mBAA1CvuD,OAAOib,UAAUjmB,SAASnK,KAAK0jE,GACxB,QAEP8sD,EAAQ2O,YAAcrG,EAAY53D,SAASwC,GACpC,aAEP8sD,EAAQa,YAAc3tD,aAAiBge,WAChC,aAEP8uC,EAAQ0O,aAAex7D,aAAiB30C,YACjC,mBADX,GAUJrwB,EAAQg9H,aAAe,SAASvyH,GAE5B,IADgBqnH,EAAQrnH,EAAK8S,eAEzB,MAAM,IAAIpc,MAAMsJ,EAAO,uCAI/BzK,EAAQ+iI,iBAAmB,MAC3B/iI,EAAQgjI,kBAAoB,EAO5BhjI,EAAQijI,OAAS,SAAS76G,GACtB,IACIhnB,EAAMN,EADN41D,EAAM,GAEV,IAAK51D,EAAI,EAAGA,GAAKsnB,GAAO,IAAI7mB,OAAQT,IAEhC41D,GAAO,QADPt1D,EAAOgnB,EAAIwB,WAAW9oB,IACC,GAAK,IAAM,IAAMM,EAAKqK,SAAS,IAAImiB,cAE9D,OAAO8oC,GAQX12D,EAAQg/H,MAAQ,SAASpsH,EAAUuoD,EAAM76D,GACrC6yB,GAAa,WACTvgB,EAASgQ,MAAMtiB,GAAQ,KAAM66D,GAAQ,QAU7Cn7D,EAAQuvB,SAAW,SAAUi9C,EAAMl5C,GAC/B,IAAI4vG,EAAM,aACVA,EAAIxxG,UAAY4B,EAAU5B,UAC1B86C,EAAK96C,UAAY,IAAIwxG,GASzBljI,EAAQ8B,OAAS,WACb,IAAiBhB,EAAGu7B,EAAhBn2B,EAAS,GACb,IAAKpF,EAAI,EAAGA,EAAIwG,UAAU/F,OAAQT,IAC9B,IAAKu7B,KAAQ/0B,UAAUxG,GACfwG,UAAUxG,GAAGyQ,eAAe8qB,SAAiC,IAAjBn2B,EAAOm2B,KACnDn2B,EAAOm2B,GAAQ/0B,UAAUxG,GAAGu7B,IAIxC,OAAOn2B,GAYXlG,EAAQ86H,eAAiB,SAASjwH,EAAMs4H,EAAWC,EAAUC,EAAyBC,GAyBlF,OAtBc1Q,EAASpvH,QAAQC,QAAQ0/H,GAAWn0E,MAAK,SAAS9pD,GAK5D,OAFa4sH,EAAQ4O,OAASx7H,aAAgBy7H,OAA8F,IAAtF,CAAC,gBAAiB,iBAAiB91G,QAAQpU,OAAOib,UAAUjmB,SAASnK,KAAK4D,MAE5F,oBAAfq+H,WACV,IAAI3Q,EAASpvH,SAAQ,SAAUC,EAASC,GAC3C,IAAI8/H,EAAS,IAAID,WAEjBC,EAAOC,OAAS,SAAS/iI,GACrB+C,EAAQ/C,EAAEub,OAAO/V,SAErBs9H,EAAOE,QAAU,SAAShjI,GACtBgD,EAAOhD,EAAEub,OAAO5Z,QAEpBmhI,EAAOG,kBAAkBz+H,MAGtBA,KAIA8pD,MAAK,SAAS9pD,GACzB,IAjbekjB,EAibX8zG,EAAWl8H,EAAQwyH,UAAUttH,GAEjC,OAAKg3H,GAOY,gBAAbA,EACAh3H,EAAOlF,EAAQw1H,YAAY,aAActwH,GACrB,WAAbg3H,IACHoH,EACAp+H,EAAOgyB,EAAO7gB,OAAOnR,GAEhBk+H,IAE2B,IAA5BC,IAGAn+H,EA9bTi9H,EAPY/5G,EAqckBljB,EAncjC4sH,EAAQa,WACD,IAAI3vC,WAAW56D,EAAI7mB,QAEnB,IAAIwP,MAAMqX,EAAI7mB,WAocd2D,GArBI0tH,EAASpvH,QAAQE,OACpB,IAAIvC,MAAM,2BAA6B0J,EAAO,yMCrc9D,aACA,IAAI+4H,EAAY5iI,EAAQ,sBACpBitB,EAAQjtB,EAAQ,WAChB0yF,EAAM1yF,EAAQ,eACd6iI,EAAW7iI,EAAQ,cAEnB8wH,GADO9wH,EAAQ,UACLA,EAAQ,cAOtB,SAASm5H,EAAW2J,GAChBvjI,KAAKsrD,MAAQ,GACbtrD,KAAKujI,YAAcA,EAEvB3J,EAAWzoG,UAAY,CAMnBqyG,eAAgB,SAASC,GACrB,IAAKzjI,KAAKijI,OAAO5F,sBAAsBoG,GAAoB,CACvDzjI,KAAKijI,OAAO/zH,OAAS,EACrB,IAAIomF,EAAYt1F,KAAKijI,OAAOtF,WAAW,GACvC,MAAM,IAAI/8H,MAAM,+CAAsD8sB,EAAMg1G,OAAOptC,GAAa,cAAgB5nE,EAAMg1G,OAAOe,GAAqB,OAS1JC,YAAa,SAASC,EAAYF,GAC9B,IAAIG,EAAe5jI,KAAKijI,OAAO/zH,MAC/BlP,KAAKijI,OAAOxF,SAASkG,GACrB,IACIh+H,EADY3F,KAAKijI,OAAOtF,WAAW,KACZ8F,EAE3B,OADAzjI,KAAKijI,OAAOxF,SAASmG,GACdj+H,GAKXk+H,sBAAuB,WACnB7jI,KAAK8jI,WAAa9jI,KAAKijI,OAAOvF,QAAQ,GACtC19H,KAAK+jI,wBAA0B/jI,KAAKijI,OAAOvF,QAAQ,GACnD19H,KAAKgkI,4BAA8BhkI,KAAKijI,OAAOvF,QAAQ,GACvD19H,KAAKikI,kBAAoBjkI,KAAKijI,OAAOvF,QAAQ,GAC7C19H,KAAKkkI,eAAiBlkI,KAAKijI,OAAOvF,QAAQ,GAC1C19H,KAAKmkI,iBAAmBnkI,KAAKijI,OAAOvF,QAAQ,GAE5C19H,KAAKokI,iBAAmBpkI,KAAKijI,OAAOvF,QAAQ,GAI5C,IAAInG,EAAav3H,KAAKijI,OAAO3F,SAASt9H,KAAKokI,kBACvCC,EAAkB9S,EAAQa,WAAa,aAAe,QAGtDkS,EAAgB52G,EAAMunG,YAAYoP,EAAiB9M,GACvDv3H,KAAKu3H,WAAav3H,KAAKujI,YAAYpJ,eAAemK,IAQtDC,2BAA4B,WACxBvkI,KAAKwkI,sBAAwBxkI,KAAKijI,OAAOvF,QAAQ,GACjD19H,KAAKijI,OAAOvgE,KAAK,GAGjB1iE,KAAK8jI,WAAa9jI,KAAKijI,OAAOvF,QAAQ,GACtC19H,KAAK+jI,wBAA0B/jI,KAAKijI,OAAOvF,QAAQ,GACnD19H,KAAKgkI,4BAA8BhkI,KAAKijI,OAAOvF,QAAQ,GACvD19H,KAAKikI,kBAAoBjkI,KAAKijI,OAAOvF,QAAQ,GAC7C19H,KAAKkkI,eAAiBlkI,KAAKijI,OAAOvF,QAAQ,GAC1C19H,KAAKmkI,iBAAmBnkI,KAAKijI,OAAOvF,QAAQ,GAE5C19H,KAAKykI,oBAAsB,GAM3B,IALA,IAEIC,EACAC,EACAC,EAJAC,EAAgB7kI,KAAKwkI,sBAAwB,GACrC,EAIGK,GACXH,EAAe1kI,KAAKijI,OAAOvF,QAAQ,GACnCiH,EAAmB3kI,KAAKijI,OAAOvF,QAAQ,GACvCkH,EAAkB5kI,KAAKijI,OAAO3F,SAASqH,GACvC3kI,KAAKykI,oBAAoBC,GAAgB,CACrClsH,GAAIksH,EACJ1jI,OAAQ2jI,EACRp/H,MAAOq/H,IAOnBE,kCAAmC,WAI/B,GAHA9kI,KAAK+kI,6BAA+B/kI,KAAKijI,OAAOvF,QAAQ,GACxD19H,KAAKglI,mCAAqChlI,KAAKijI,OAAOvF,QAAQ,GAC9D19H,KAAKilI,WAAajlI,KAAKijI,OAAOvF,QAAQ,GAClC19H,KAAKilI,WAAa,EAClB,MAAM,IAAIrkI,MAAM,wCAMxBskI,eAAgB,WACZ,IAAI3kI,EAAGq2B,EACP,IAAKr2B,EAAI,EAAGA,EAAIP,KAAKsrD,MAAMtqD,OAAQT,IAC/Bq2B,EAAO52B,KAAKsrD,MAAM/qD,GAClBP,KAAKijI,OAAOxF,SAAS7mG,EAAKuuG,mBAC1BnlI,KAAKwjI,eAAerwC,EAAI4jC,mBACxBngG,EAAKwuG,cAAcplI,KAAKijI,QACxBrsG,EAAKyuG,aACLzuG,EAAK0uG,qBAMbC,eAAgB,WACZ,IAAI3uG,EAGJ,IADA52B,KAAKijI,OAAOxF,SAASz9H,KAAKmkI,kBACnBnkI,KAAKijI,OAAO5F,sBAAsBlqC,EAAI8jC,uBACzCrgG,EAAO,IAAI0sG,EAAS,CAChBkC,MAAOxlI,KAAKwlI,OACbxlI,KAAKujI,cACHkC,gBAAgBzlI,KAAKijI,QAC1BjjI,KAAKsrD,MAAM77C,KAAKmnB,GAGpB,GAAI52B,KAAKikI,oBAAsBjkI,KAAKsrD,MAAMtqD,QACP,IAA3BhB,KAAKikI,mBAAiD,IAAtBjkI,KAAKsrD,MAAMtqD,OAG3C,MAAM,IAAIJ,MAAM,kCAAoCZ,KAAKikI,kBAAoB,gCAAkCjkI,KAAKsrD,MAAMtqD,SAWtI0kI,iBAAkB,WACd,IAAI5+H,EAAS9G,KAAKijI,OAAOjG,qBAAqB7pC,EAAIqlC,uBAClD,GAAI1xH,EAAS,EAQT,MAFiB9G,KAAK0jI,YAAY,EAAGvwC,EAAI4jC,mBAG/B,IAAIn2H,MAAM,2IAGV,IAAIA,MAAM,sDAIxBZ,KAAKijI,OAAOxF,SAAS32H,GACrB,IAAI6+H,EAAwB7+H,EAe5B,GAdA9G,KAAKwjI,eAAerwC,EAAIqlC,uBACxBx4H,KAAK6jI,wBAaD7jI,KAAK8jI,aAAep2G,EAAM80G,kBAAoBxiI,KAAK+jI,0BAA4Br2G,EAAM80G,kBAAoBxiI,KAAKgkI,8BAAgCt2G,EAAM80G,kBAAoBxiI,KAAKikI,oBAAsBv2G,EAAM80G,kBAAoBxiI,KAAKkkI,iBAAmBx2G,EAAM+0G,kBAAoBziI,KAAKmkI,mBAAqBz2G,EAAM+0G,iBAAkB,CAcjU,GAbAziI,KAAKwlI,OAAQ,GAYb1+H,EAAS9G,KAAKijI,OAAOjG,qBAAqB7pC,EAAI8qC,kCACjC,EACT,MAAM,IAAIr9H,MAAM,wEAOpB,GALAZ,KAAKijI,OAAOxF,SAAS32H,GACrB9G,KAAKwjI,eAAerwC,EAAI8qC,iCACxBj+H,KAAK8kI,qCAGA9kI,KAAK0jI,YAAY1jI,KAAKglI,mCAAoC7xC,EAAI+qC,+BAE/Dl+H,KAAKglI,mCAAqChlI,KAAKijI,OAAOjG,qBAAqB7pC,EAAI+qC,6BAC3El+H,KAAKglI,mCAAqC,GAC1C,MAAM,IAAIpkI,MAAM,gEAGxBZ,KAAKijI,OAAOxF,SAASz9H,KAAKglI,oCAC1BhlI,KAAKwjI,eAAerwC,EAAI+qC,6BACxBl+H,KAAKukI,6BAGT,IAAIqB,EAAgC5lI,KAAKmkI,iBAAmBnkI,KAAKkkI,eAC7DlkI,KAAKwlI,QACLI,GAAiC,GACjCA,GAAiC,GAAmD5lI,KAAKwkI,uBAG7F,IAAIniD,EAAasjD,EAAwBC,EAEzC,GAAIvjD,EAAa,EAETriF,KAAK0jI,YAAYiC,EAAuBxyC,EAAI8jC,uBAM5Cj3H,KAAKijI,OAAOz5F,KAAO64C,QAEpB,GAAIA,EAAa,EACpB,MAAM,IAAIzhF,MAAM,0BAA4B4G,KAAKwoE,IAAIqS,GAAc,YAG3EwjD,cAAe,SAASlhI,GACpB3E,KAAKijI,OAASI,EAAU1+H,IAM5BymD,KAAM,SAASzmD,GACX3E,KAAK6lI,cAAclhI,GACnB3E,KAAK0lI,mBACL1lI,KAAKulI,iBACLvlI,KAAKklI,mBAIbxlI,EAAOD,QAAUm6H,kICrQjB,aACA,IAAIyJ,EAAY5iI,EAAQ,sBACpBitB,EAAQjtB,EAAQ,WAChBgyH,EAAmBhyH,EAAQ,sBAC3BqlI,EAAUrlI,EAAQ,WAClB20H,EAAO30H,EAAQ,UACfu4H,EAAev4H,EAAQ,kBACvB8wH,EAAU9wH,EAAQ,aA6BtB,SAAS6iI,EAAS5gI,EAAS6gI,GACvBvjI,KAAK0C,QAAUA,EACf1C,KAAKujI,YAAcA,EAEvBD,EAASnyG,UAAY,CAKjB40G,YAAa,WAET,OAAmC,IAAZ,EAAf/lI,KAAKgmI,UAMjBC,QAAS,WAEL,OAAmC,OAAZ,KAAfjmI,KAAKgmI,UAMjBZ,cAAe,SAASnC,GACpB,IAAIxsG,EAAayvG,EAyBjB,GAlBAjD,EAAOvgE,KAAK,IAYZ1iE,KAAKmmI,eAAiBlD,EAAOvF,QAAQ,GACrCwI,EAAyBjD,EAAOvF,QAAQ,GAExC19H,KAAKomI,SAAWnD,EAAO3F,SAASt9H,KAAKmmI,gBACrClD,EAAOvgE,KAAKwjE,IAEiB,IAAzBlmI,KAAK0yH,iBAAoD,IAA3B1yH,KAAK2yH,iBACnC,MAAM,IAAI/xH,MAAM,sIAIpB,GAAoB,QADpB61B,EA1Ec,SAAS4vG,GAC3B,IAAK,IAAIriE,KAAUg1D,EACf,GAAKA,EAAahoH,eAAegzD,IAG7Bg1D,EAAah1D,GAAQ0vD,QAAU2S,EAC/B,OAAOrN,EAAah1D,GAG5B,OAAO,KAiEWsiE,CAAgBtmI,KAAKqmI,oBAE/B,MAAM,IAAIzlI,MAAM,+BAAiC8sB,EAAMg1G,OAAO1iI,KAAKqmI,mBAAqB,0BAA4B34G,EAAMunG,YAAY,SAAUj1H,KAAKomI,UAAY,KAErKpmI,KAAKg6H,aAAe,IAAIvH,EAAiBzyH,KAAK0yH,eAAgB1yH,KAAK2yH,iBAAkB3yH,KAAK4yH,MAAOn8F,EAAawsG,EAAO3F,SAASt9H,KAAK0yH,kBAOvI+S,gBAAiB,SAASxC,GACtBjjI,KAAK62H,cAAgBoM,EAAOvF,QAAQ,GACpCuF,EAAOvgE,KAAK,GAEZ1iE,KAAKgmI,QAAU/C,EAAOvF,QAAQ,GAC9B19H,KAAKqmI,kBAAoBpD,EAAOtF,WAAW,GAC3C39H,KAAKirE,KAAOg4D,EAAOrF,WACnB59H,KAAK4yH,MAAQqQ,EAAOvF,QAAQ,GAC5B19H,KAAK0yH,eAAiBuQ,EAAOvF,QAAQ,GACrC19H,KAAK2yH,iBAAmBsQ,EAAOvF,QAAQ,GACvC,IAAIyI,EAAiBlD,EAAOvF,QAAQ,GAQpC,GAPA19H,KAAKumI,kBAAoBtD,EAAOvF,QAAQ,GACxC19H,KAAKwmI,kBAAoBvD,EAAOvF,QAAQ,GACxC19H,KAAKymI,gBAAkBxD,EAAOvF,QAAQ,GACtC19H,KAAK0mI,uBAAyBzD,EAAOvF,QAAQ,GAC7C19H,KAAK2mI,uBAAyB1D,EAAOvF,QAAQ,GAC7C19H,KAAKmlI,kBAAoBlC,EAAOvF,QAAQ,GAEpC19H,KAAK+lI,cACL,MAAM,IAAInlI,MAAM,mCAIpBqiI,EAAOvgE,KAAKyjE,GACZnmI,KAAK4mI,gBAAgB3D,GACrBjjI,KAAK6mI,qBAAqB5D,GAC1BjjI,KAAK8mI,YAAc7D,EAAO3F,SAASt9H,KAAKwmI,oBAM5ClB,kBAAmB,WACftlI,KAAKi0H,gBAAkB,KACvBj0H,KAAKk0H,eAAiB,KACtB,IAAI6S,EAAS/mI,KAAK62H,eAAiB,EAKnC72H,KAAKurD,OAAoC,GAA9BvrD,KAAK2mI,wBArIN,IAuIPI,IAEC/mI,KAAKk0H,eAA+C,GAA9Bl0H,KAAK2mI,wBAxIpB,IA2IRI,IACC/mI,KAAKi0H,gBAAmBj0H,KAAK2mI,wBAA0B,GAAM,OAK5D3mI,KAAKurD,KAAsC,MAA/BvrD,KAAK06H,YAAYz8G,OAAO,KACrCje,KAAKurD,KAAM,IAQnBs7E,qBAAsB,SAAS5D,GAE3B,GAAKjjI,KAAKs2H,YAAY,GAAtB,CAKA,IAAI0Q,EAAc3D,EAAUrjI,KAAKs2H,YAAY,GAAQ/wH,OAIjDvF,KAAK2yH,mBAAqBjlG,EAAM+0G,mBAChCziI,KAAK2yH,iBAAmBqU,EAAYtJ,QAAQ,IAE5C19H,KAAK0yH,iBAAmBhlG,EAAM+0G,mBAC9BziI,KAAK0yH,eAAiBsU,EAAYtJ,QAAQ,IAE1C19H,KAAKmlI,oBAAsBz3G,EAAM+0G,mBACjCziI,KAAKmlI,kBAAoB6B,EAAYtJ,QAAQ,IAE7C19H,KAAKymI,kBAAoB/4G,EAAM+0G,mBAC/BziI,KAAKymI,gBAAkBO,EAAYtJ,QAAQ,MAOnDkJ,gBAAiB,SAAS3D,GACtB,IACIyB,EACAC,EACAC,EAHAr+H,EAAM08H,EAAO/zH,MAAQlP,KAAKumI,kBAS9B,IAJKvmI,KAAKs2H,cACNt2H,KAAKs2H,YAAc,IAGhB2M,EAAO/zH,MAAQ,EAAI3I,GACtBm+H,EAAezB,EAAOvF,QAAQ,GAC9BiH,EAAmB1B,EAAOvF,QAAQ,GAClCkH,EAAkB3B,EAAO3F,SAASqH,GAElC3kI,KAAKs2H,YAAYoO,GAAgB,CAC7BlsH,GAAIksH,EACJ1jI,OAAQ2jI,EACRp/H,MAAOq/H,GAIf3B,EAAOxF,SAASl3H,IAKpB8+H,WAAY,WACR,IAAIhB,EAAkB9S,EAAQa,WAAa,aAAe,QAC1D,GAAIpyH,KAAKimI,UACLjmI,KAAK06H,YAActF,EAAKgF,WAAWp6H,KAAKomI,UACxCpmI,KAAK26H,eAAiBvF,EAAKgF,WAAWp6H,KAAK8mI,iBACxC,CACH,IAAIG,EAAQjnI,KAAKknI,4BACjB,GAAc,OAAVD,EACAjnI,KAAK06H,YAAcuM,MAChB,CAEH,IAAIE,EAAqBz5G,EAAMunG,YAAYoP,EAAiBrkI,KAAKomI,UACjEpmI,KAAK06H,YAAc16H,KAAKujI,YAAYpJ,eAAegN,GAGvD,IAAIC,EAAWpnI,KAAKqnI,+BACpB,GAAiB,OAAbD,EACApnI,KAAK26H,eAAiByM,MACnB,CAEH,IAAIE,EAAoB55G,EAAMunG,YAAYoP,EAAiBrkI,KAAK8mI,aAChE9mI,KAAK26H,eAAiB36H,KAAKujI,YAAYpJ,eAAemN,MASlEJ,0BAA2B,WACvB,IAAIK,EAAavnI,KAAKs2H,YAAY,OAClC,GAAIiR,EAAY,CACZ,IAAIP,EAAc3D,EAAUkE,EAAWhiI,OAGvC,OAA+B,IAA3ByhI,EAAYtJ,QAAQ,IAKpBoI,EAAQ9lI,KAAKomI,YAAcY,EAAYtJ,QAAQ,GAJxC,KAQJtI,EAAKgF,WAAW4M,EAAY1J,SAASiK,EAAWvmI,OAAS,IAEpE,OAAO,MAOXqmI,6BAA8B,WAC1B,IAAIG,EAAgBxnI,KAAKs2H,YAAY,OACrC,GAAIkR,EAAe,CACf,IAAIR,EAAc3D,EAAUmE,EAAcjiI,OAG1C,OAA+B,IAA3ByhI,EAAYtJ,QAAQ,IAKpBoI,EAAQ9lI,KAAK8mI,eAAiBE,EAAYtJ,QAAQ,GAJ3C,KAQJtI,EAAKgF,WAAW4M,EAAY1J,SAASkK,EAAcxmI,OAAS,IAEvE,OAAO,OAGftB,EAAOD,QAAU6jI,2JCrSjB,aAEA,IAAI/H,EAAe96H,EAAQ,yBACvB6xH,EAAa7xH,EAAQ,uBACrB20H,EAAO30H,EAAQ,UACfgyH,EAAmBhyH,EAAQ,sBAC3B+yH,EAAgB/yH,EAAQ,0BASxB+6H,EAAY,SAASlxH,EAAM3F,EAAMjC,GACjC1C,KAAKsK,KAAOA,EACZtK,KAAKurD,IAAM7oD,EAAQ6oD,IACnBvrD,KAAKirE,KAAOvoE,EAAQuoE,KACpBjrE,KAAK4L,QAAUlJ,EAAQkJ,QACvB5L,KAAKi0H,gBAAkBvxH,EAAQuxH,gBAC/Bj0H,KAAKk0H,eAAiBxxH,EAAQwxH,eAE9Bl0H,KAAK6tB,MAAQlpB,EACb3E,KAAKynI,YAAc/kI,EAAQ6pG,OAE3BvsG,KAAK0C,QAAU,CACX+zB,YAAc/zB,EAAQ+zB,YACtB68F,mBAAqB5wH,EAAQ4wH,qBAIrCkI,EAAUrqG,UAAY,CAMlBu2G,eAAgB,SAAUx9H,GACtB,IAAIvE,EAAS,KAAMk6H,EAAa,SAChC,IACI,IAAK31H,EACD,MAAM,IAAItJ,MAAM,6BAGpB,IAAI+mI,EAAkC,YADtC9H,EAAa31H,EAAK8S,gBAC+C,SAAf6iH,EAC/B,iBAAfA,GAAgD,SAAfA,IACjCA,EAAa,UAEjBl6H,EAAS3F,KAAK4nI,oBAEd,IAAI7L,GAAmB/7H,KAAKynI,YAExB1L,IAAoB4L,IACpBhiI,EAASA,EAAOb,KAAK,IAAIswH,EAAK0L,oBAE7B/E,GAAmB4L,IACpBhiI,EAASA,EAAOb,KAAK,IAAIswH,EAAKwL,mBAEpC,MAAOzgI,IACLwF,EAAS,IAAI6tH,EAAc,UACpB1xH,MAAM3B,GAGjB,OAAO,IAAIo7H,EAAa51H,EAAQk6H,EAAY,KAShDp0E,MAAO,SAAUvhD,EAAMwyH,GACnB,OAAO18H,KAAK0nI,eAAex9H,GAAMutH,WAAWiF,IAShDmL,WAAY,SAAU39H,EAAMwyH,GACxB,OAAO18H,KAAK0nI,eAAex9H,GAAQ,cAAc0yH,eAAeF,IAUpElD,gBAAiB,SAAU/iG,EAAa68F,GACpC,GACItzH,KAAK6tB,iBAAiB4kG,GACtBzyH,KAAK6tB,MAAM4I,YAAYi9F,QAAUj9F,EAAYi9F,MAE7C,OAAO1zH,KAAK6tB,MAAMqlG,sBAElB,IAAIvtH,EAAS3F,KAAK4nI,oBAIlB,OAHI5nI,KAAKynI,cACL9hI,EAASA,EAAOb,KAAK,IAAIswH,EAAK0L,mBAE3BrO,EAAiBW,iBAAiBztH,EAAQ8wB,EAAa68F,IAQtEsU,kBAAoB,WAChB,OAAI5nI,KAAK6tB,iBAAiB4kG,EACfzyH,KAAK6tB,MAAMilG,mBACX9yH,KAAK6tB,iBAAiB2lG,EACtBxzH,KAAK6tB,MAEL,IAAIykG,EAAWtyH,KAAK6tB,SAUvC,IALA,IAAIi6G,EAAiB,CAAC,SAAU,WAAY,eAAgB,eAAgB,iBACxEC,EAAY,WACZ,MAAM,IAAInnI,MAAM,+EAGZL,EAAI,EAAGA,EAAIunI,EAAe9mI,OAAQT,IACtCi7H,EAAUrqG,UAAU22G,EAAevnI,IAAMwnI,EAE7CroI,EAAOD,QAAU+7H,oJCpIjB,kPACA,IAAIwM,EAAYvnI,EAAQ,aAGxB,SAASwnI,KAET,IAAIC,EAAW,GAEXC,EAAW,CAAC,YACZC,EAAY,CAAC,aACbC,EAAU,CAAC,WAIf,SAASplI,EAAQqlI,GACf,GAAwB,mBAAbA,EACT,MAAM,IAAIj4E,UAAU,+BAEtBrwD,KAAKmf,MAAQkpH,EACbroI,KAAKmxH,MAAQ,GACbnxH,KAAKuoI,aAAU,EACXD,IAAaL,GACfO,EAAsBxoI,KAAMsoI,GA0ChC,SAASG,EAAUC,EAASC,EAAaC,GACvC5oI,KAAK0oI,QAAUA,EACY,mBAAhBC,IACT3oI,KAAK2oI,YAAcA,EACnB3oI,KAAK6oI,cAAgB7oI,KAAK8oI,oBAEF,mBAAfF,IACT5oI,KAAK4oI,WAAaA,EAClB5oI,KAAK+oI,aAAe/oI,KAAKgpI,mBAgB7B,SAAS3jB,EAAOqjB,EAASO,EAAM1jI,GAC7ByiI,GAAU,WACR,IAAIkB,EACJ,IACEA,EAAcD,EAAK1jI,GACnB,MAAOpF,GACP,OAAO+nI,EAAS/kI,OAAOulI,EAASvoI,GAE9B+oI,IAAgBR,EAClBR,EAAS/kI,OAAOulI,EAAS,IAAIr4E,UAAU,uCAEvC63E,EAAShlI,QAAQwlI,EAASQ,MAoChC,SAASC,EAAQ93G,GAEf,IAAIo9B,EAAOp9B,GAAOA,EAAIo9B,KACtB,GAAIp9B,IAAuB,WAAfzrB,EAAOyrB,IAAmC,mBAARA,IAAuC,mBAATo9B,EAC1E,OAAO,WACLA,EAAKpsC,MAAMgP,EAAKtqB,YAKtB,SAASyhI,EAAsBzoI,EAAMqpI,GAEnC,IAAIrZ,GAAS,EACb,SAASsZ,EAAQ9jI,GACXwqH,IAGJA,GAAS,EACTmY,EAAS/kI,OAAOpD,EAAMwF,IAGxB,SAAS+jI,EAAU/jI,GACbwqH,IAGJA,GAAS,EACTmY,EAAShlI,QAAQnD,EAAMwF,IAOzB,IAAII,EAAS4jI,GAJb,WACEH,EAASE,EAAWD,MAIA,UAAlB1jI,EAAO6jI,QACTH,EAAQ1jI,EAAOJ,OAInB,SAASgkI,EAASN,EAAM1jI,GACtB,IAAIw9D,EAAM,GACV,IACEA,EAAIx9D,MAAQ0jI,EAAK1jI,GACjBw9D,EAAIymE,OAAS,UACb,MAAOrpI,GACP4iE,EAAIymE,OAAS,QACbzmE,EAAIx9D,MAAQpF,EAEd,OAAO4iE,EA3KTrjE,EAAOD,QAAUwD,EAcjBA,EAAQkuB,UAAR,QAA+B,SAAU9e,GACvC,GAAwB,mBAAbA,EACT,OAAOrS,KAET,IAAIc,EAAId,KAAK2jB,YACb,OAAO3jB,KAAKyuD,MAEZ,SAAiBlpD,GAIf,OAAOzE,EAAEoC,QAAQmP,KAAYo8C,MAH7B,WACE,OAAOlpD,QAIX,SAAgByzD,GAId,OAAOl4D,EAAEoC,QAAQmP,KAAYo8C,MAH7B,WACE,MAAMuK,SAKZ/1D,EAAQkuB,UAAR,MAA6B,SAAUy3G,GACrC,OAAO5oI,KAAKyuD,KAAK,KAAMm6E,IAEzB3lI,EAAQkuB,UAAUs9B,KAAO,SAAUk6E,EAAaC,GAC9C,GAA2B,mBAAhBD,GAA8B3oI,KAAKmf,QAAUipH,GAChC,mBAAfQ,GAA6B5oI,KAAKmf,QAAUgpH,EACnD,OAAOnoI,KAET,IAAI0oI,EAAU,IAAI1oI,KAAK2jB,YAAYskH,GAC/BjoI,KAAKmf,QAAUkpH,EAEjBhjB,EAAOqjB,EADQ1oI,KAAKmf,QAAUipH,EAAYO,EAAcC,EAC9B5oI,KAAKuoI,SAE/BvoI,KAAKmxH,MAAM1hH,KAAK,IAAIg5H,EAAUC,EAASC,EAAaC,IAGtD,OAAOF,GAaTD,EAAUt3G,UAAU03G,cAAgB,SAAUtjI,GAC5C2iI,EAAShlI,QAAQlD,KAAK0oI,QAASnjI,IAEjCkjI,EAAUt3G,UAAU23G,mBAAqB,SAAUvjI,GACjD8/G,EAAOrlH,KAAK0oI,QAAS1oI,KAAK2oI,YAAapjI,IAEzCkjI,EAAUt3G,UAAU43G,aAAe,SAAUxjI,GAC3C2iI,EAAS/kI,OAAOnD,KAAK0oI,QAASnjI,IAEhCkjI,EAAUt3G,UAAU63G,kBAAoB,SAAUzjI,GAChD8/G,EAAOrlH,KAAK0oI,QAAS1oI,KAAK4oI,WAAYrjI,IAmBxC2iI,EAAShlI,QAAU,SAAUnD,EAAMwF,GACjC,IAAII,EAAS4jI,EAASJ,EAAS5jI,GAC/B,GAAsB,UAAlBI,EAAO6jI,OACT,OAAOtB,EAAS/kI,OAAOpD,EAAM4F,EAAOJ,OAEtC,IAAI6jI,EAAWzjI,EAAOJ,MAEtB,GAAI6jI,EACFZ,EAAsBzoI,EAAMqpI,OACvB,CACLrpI,EAAKof,MAAQipH,EACbroI,EAAKwoI,QAAUhjI,EAGf,IAFA,IAAIhF,GAAK,EACLiiC,EAAMziC,EAAKoxH,MAAMnwH,SACZT,EAAIiiC,GACXziC,EAAKoxH,MAAM5wH,GAAGsoI,cAActjI,GAGhC,OAAOxF,GAETmoI,EAAS/kI,OAAS,SAAUpD,EAAM+B,GAChC/B,EAAKof,MAAQgpH,EACbpoI,EAAKwoI,QAAUzmI,EAGf,IAFA,IAAIvB,GAAK,EACLiiC,EAAMziC,EAAKoxH,MAAMnwH,SACZT,EAAIiiC,GACXziC,EAAKoxH,MAAM5wH,GAAGwoI,aAAajnI,GAE7B,OAAO/B,GAsDTkD,EAAQC,QACR,SAAiBqC,GACf,GAAIA,aAAiBvF,KACnB,OAAOuF,EAET,OAAO2iI,EAAShlI,QAAQ,IAAIlD,KAAKioI,GAAW1iI,IAG9CtC,EAAQE,OACR,SAAgB61D,GACd,IAAI0vE,EAAU,IAAI1oI,KAAKioI,GACvB,OAAOC,EAAS/kI,OAAOulI,EAAS1vE,IAGlC/1D,EAAQusB,IACR,SAAaxE,GACX,IAAIjrB,EAAOC,KACX,GAAiD,mBAA7CkW,OAAOib,UAAUjmB,SAASnK,KAAKiqB,GACjC,OAAOhrB,KAAKmD,OAAO,IAAIktD,UAAU,qBAGnC,IAAI7tB,EAAMxX,EAAShqB,OACf+uH,GAAS,EACb,IAAKvtF,EACH,OAAOxiC,KAAKkD,QAAQ,IAGtB,IAAImD,EAAS,IAAImK,MAAMgyB,GACnBinG,EAAW,EACXlpI,GAAK,EACLmoI,EAAU,IAAI1oI,KAAKioI,GAEvB,OAAS1nI,EAAIiiC,GACXknG,EAAY1+G,EAASzqB,GAAIA,GAE3B,OAAOmoI,EACP,SAASgB,EAAYnkI,EAAOhF,GAC1BR,EAAKmD,QAAQqC,GAAOkpD,MAMpB,SAAwBk7E,GACtBtjI,EAAO9F,GAAKopI,IACNF,IAAajnG,GAAQutF,IACzBA,GAAS,EACTmY,EAAShlI,QAAQwlI,EAASriI,OAVW,SAAUvE,GAC5CiuH,IACHA,GAAS,EACTmY,EAAS/kI,OAAOulI,EAAS5mI,SAajCmB,EAAQ2mI,KACR,SAAc5+G,GACZ,IAAIjrB,EAAOC,KACX,GAAiD,mBAA7CkW,OAAOib,UAAUjmB,SAASnK,KAAKiqB,GACjC,OAAOhrB,KAAKmD,OAAO,IAAIktD,UAAU,qBAGnC,IAAI7tB,EAAMxX,EAAShqB,OACf+uH,GAAS,EACb,IAAKvtF,EACH,OAAOxiC,KAAKkD,QAAQ,IAGtB,IAAI3C,GAAK,EACLmoI,EAAU,IAAI1oI,KAAKioI,GAEvB,OAAS1nI,EAAIiiC,GAIKj9B,EAHPylB,EAASzqB,GAIlBR,EAAKmD,QAAQqC,GAAOkpD,MAAK,SAAUo7E,GAC5B9Z,IACHA,GAAS,EACTmY,EAAShlI,QAAQwlI,EAASmB,OAE3B,SAAU/nI,GACNiuH,IACHA,GAAS,EACTmY,EAAS/kI,OAAOulI,EAAS5mI,OAT/B,IAAkByD,EADlB,OAAOmjI,ySCxPT,IASIoB,EAAe,sBACfC,EAAkBn3E,OAAOk3E,EAAaE,QAGtCC,EAA8B,gBAAjB,IAAOnqI,EAAP,YAAA8F,EAAO9F,KAAsBA,GAAUA,EAAOoW,SAAWA,QAAUpW,EAGhFoqI,EAA0B,WAAf,oBAAOnqI,KAAP,YAAA6F,EAAO7F,QAAoBA,MAAQA,KAAKmW,SAAWA,QAAUnW,KAGxE05H,EAAOwQ,GAAcC,GAAYpkH,SAAS,cAATA,GAUjCq4E,EAPcjoF,OAAOib,UAOQjmB,SAG7Bi/H,EAAS1Q,EAAK7tG,OAGdw+G,EAAcD,EAASA,EAAOh5G,eAAY7sB,EAC1C+lI,EAAiBD,EAAcA,EAAYl/H,cAAW5G,EAU1D,SAASgmI,EAAa/kI,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAoDF,SAAkBA,GAChB,MAAuB,UAAhBK,EAAOL,IAtBhB,SAAsBA,GACpB,QAASA,GAAyB,UAAhBK,EAAOL,GAsBtBglI,CAAahlI,IAtGF,mBAsGY44F,EAAep9F,KAAKwE,GAtD1Ck5F,CAASl5F,GACX,OAAO8kI,EAAiBA,EAAetpI,KAAKwE,GAAS,GAEvD,IAAII,EAAUJ,EAAQ,GACtB,MAAkB,KAAVI,GAAkB,EAAIJ,IAvDjB,EAAA,EAuDwC,KAAOI,EAoG9DjG,EAAOD,QAPP,SAAsBo7D,GAnBtB,IAAkBt1D,EAqBhB,OADAs1D,EAnBgB,OADAt1D,EAoBEs1D,GAnBK,GAAKyvE,EAAa/kI,KAoBvBwkI,EAAgB91H,KAAK4mD,GACnCA,EAAO1uD,QAAQ29H,EAAc,QAC7BjvE,8YCxJN,IAiBI2vE,EAAU,qBAOVC,EAAS,eAETC,EAAY,kBAGZC,EAAS,eAkBTC,EAAe,mDACfC,EAAgB,QAChBC,EAAe,MACfC,EAAa,mGASbC,EAAe,WAGfC,EAAe,8BAGfC,EAAW,mBAGXC,EAAiB,GACrBA,EAjCiB,yBAiCYA,EAhCZ,yBAiCjBA,EAhCc,sBAgCYA,EA/BX,uBAgCfA,EA/Be,uBA+BYA,EA9BZ,uBA+BfA,EA9BsB,8BA8BYA,EA7BlB,wBA8BhBA,EA7BgB,yBA6BY,EAC5BA,EAAeX,GAAWW,EAxDX,kBAyDfA,EAzCqB,wBAyCYA,EAxDnB,oBAyDdA,EAzCkB,qBAyCYA,EAxDhB,iBAyDdA,EAxDe,kBAwDYA,EAvDb,qBAwDdA,EAAeV,GAAUU,EArDT,mBAsDhBA,EAAeT,GAAaS,EAnDZ,mBAoDhBA,EAAeR,GAAUQ,EAlDT,mBAmDhBA,EAjDiB,qBAiDY,EAG7B,IAAIlB,EAA8B,gBAAjB,IAAOnqI,EAAP,YAAA8F,EAAO9F,KAAsBA,GAAUA,EAAOoW,SAAWA,QAAUpW,EAGhFoqI,EAA0B,WAAf,oBAAOnqI,KAAP,YAAA6F,EAAO7F,QAAoBA,MAAQA,KAAKmW,SAAWA,QAAUnW,KAGxE05H,EAAOwQ,GAAcC,GAAYpkH,SAAS,cAATA,GAGjCslH,EAAgC,gBAAlB,IAAO3rI,EAAP,YAAAmG,EAAOnG,KAAuBA,IAAYA,EAAQ4rI,UAAY5rI,EAG5E6rI,EAAaF,GAAgC,gBAAjB,IAAO1rI,EAAP,YAAAkG,EAAOlG,KAAsBA,IAAWA,EAAO2rI,UAAY3rI,EAMvF6rI,EAHgBD,GAAcA,EAAW7rI,UAAY2rI,GAGtBnB,EAAWl6G,QAG1Cy7G,EAAY,WACd,IACE,OAAOD,GAAeA,EAAYE,QAAQ,QAC1C,MAAOtrI,KAHK,GAOZurI,EAAmBF,GAAYA,EAASG,aAY5C,SAASC,EAAgBl1C,EAAOm1C,EAAQ97H,EAAU+7H,GAIhD,IAHA,IAAI58H,GAAS,EACTlO,EAAS01F,EAAQA,EAAM11F,OAAS,IAE3BkO,EAAQlO,GAAQ,CACvB,IAAIuE,EAAQmxF,EAAMxnF,GAClB28H,EAAOC,EAAavmI,EAAOwK,EAASxK,GAAQmxF,GAE9C,OAAOo1C,EAaT,SAASC,EAAUr1C,EAAOs1C,GAIxB,IAHA,IAAI98H,GAAS,EACTlO,EAAS01F,EAAQA,EAAM11F,OAAS,IAE3BkO,EAAQlO,GACf,GAAIgrI,EAAUt1C,EAAMxnF,GAAQA,EAAOwnF,GACjC,OAAO,EAGX,OAAO,EAmET,SAASu1C,EAAa1mI,GAGpB,IAAII,GAAS,EACb,GAAa,MAATJ,GAA0C,mBAAlBA,EAAM2F,SAChC,IACEvF,KAAYJ,EAAQ,IACpB,MAAOpF,IAEX,OAAOwF,EAUT,SAASumI,EAAW3oI,GAClB,IAAI2L,GAAS,EACTvJ,EAAS6K,MAAMjN,EAAIonB,MAKvB,OAHApnB,EAAIgI,SAAQ,SAAShG,EAAOoK,GAC1BhK,IAASuJ,GAAS,CAACS,EAAKpK,MAEnBI,EAwBT,SAASwmI,EAAW1kF,GAClB,IAAIv4C,GAAS,EACTvJ,EAAS6K,MAAMi3C,EAAI98B,MAKvB,OAHA88B,EAAIl8C,SAAQ,SAAShG,GACnBI,IAASuJ,GAAS3J,KAEbI,EAIT,IASMymI,EAjCWnD,EAAMn1E,EAwBnBu4E,EAAa77H,MAAM2gB,UACnBm7G,EAAYxmH,SAASqL,UACrBo7G,EAAcr2H,OAAOib,UAGrBq7G,EAAa/S,EAAK,sBAGlBgT,GACEL,EAAM,SAASl/G,KAAKs/G,GAAcA,EAAWr2H,MAAQq2H,EAAWr2H,KAAKu2H,UAAY,KACvE,iBAAmBN,EAAO,GAItCO,EAAeL,EAAUphI,SAGzB8F,EAAiBu7H,EAAYv7H,eAO7BmtF,EAAiBouC,EAAYrhI,SAG7B0hI,EAAah6E,OAAO,IACtB+5E,EAAa5rI,KAAKiQ,GAAgB7E,QA9PjB,sBA8PuC,QACvDA,QAAQ,yDAA0D,SAAW,KAI5Eg+H,EAAS1Q,EAAK7tG,OACd62D,EAAag3C,EAAKh3C,WAClBoqD,EAAuBN,EAAYM,qBACnCtxH,EAAS8wH,EAAW9wH,OAGpBuxH,GA/Da7D,EA+DQ/yH,OAAOC,KA/DT29C,EA+De59C,OA9D7B,SAASkuD,GACd,OAAO6kE,EAAKn1E,EAAUsQ,MAgEtB2oE,EAAWC,GAAUvT,EAAM,YAC3BwT,EAAMD,GAAUvT,EAAM,OACtBx2H,EAAU+pI,GAAUvT,EAAM,WAC1ByT,EAAMF,GAAUvT,EAAM,OACtB9yE,EAAUqmF,GAAUvT,EAAM,WAC1B0T,EAAeH,GAAU92H,OAAQ,UAGjCk3H,EAAqBC,GAASN,GAC9BO,EAAgBD,GAASJ,GACzBM,GAAoBF,GAASpqI,GAC7BuqI,GAAgBH,GAASH,GACzBO,GAAoBJ,GAAS1mF,GAG7ByjF,GAAcD,EAASA,EAAOh5G,eAAY7sB,EAC1CopI,GAAgBtD,GAAcA,GAAYhmI,aAAUE,EACpD+lI,GAAiBD,GAAcA,GAAYl/H,cAAW5G,EAS1D,SAAS08F,GAAK2sC,GACZ,IAAIz+H,GAAS,EACTlO,EAAS2sI,EAAUA,EAAQ3sI,OAAS,EAGxC,IADAhB,KAAK4tI,UACI1+H,EAAQlO,GAAQ,CACvB,IAAI+pD,EAAQ4iF,EAAQz+H,GACpBlP,KAAKynD,IAAIsD,EAAM,GAAIA,EAAM,KA2F7B,SAAS8iF,GAAUF,GACjB,IAAIz+H,GAAS,EACTlO,EAAS2sI,EAAUA,EAAQ3sI,OAAS,EAGxC,IADAhB,KAAK4tI,UACI1+H,EAAQlO,GAAQ,CACvB,IAAI+pD,EAAQ4iF,EAAQz+H,GACpBlP,KAAKynD,IAAIsD,EAAM,GAAIA,EAAM,KAyG7B,SAAS+iF,GAASH,GAChB,IAAIz+H,GAAS,EACTlO,EAAS2sI,EAAUA,EAAQ3sI,OAAS,EAGxC,IADAhB,KAAK4tI,UACI1+H,EAAQlO,GAAQ,CACvB,IAAI+pD,EAAQ4iF,EAAQz+H,GACpBlP,KAAKynD,IAAIsD,EAAM,GAAIA,EAAM,KAwF7B,SAASgjF,GAAS1nI,GAChB,IAAI6I,GAAS,EACTlO,EAASqF,EAASA,EAAOrF,OAAS,EAGtC,IADAhB,KAAKguI,SAAW,IAAIF,KACX5+H,EAAQlO,GACfhB,KAAK2L,IAAItF,EAAO6I,IA2CpB,SAAS++H,GAAMN,GACb3tI,KAAKguI,SAAW,IAAIH,GAAUF,GA4FhC,SAASO,GAAc3oI,EAAOiiE,GAG5B,IAAI7hE,EAAUqf,GAAQzf,IAAU4oI,GAAY5oI,GA7mB9C,SAAmBnF,EAAG2P,GAIpB,IAHA,IAAIb,GAAS,EACTvJ,EAAS6K,MAAMpQ,KAEV8O,EAAQ9O,GACfuF,EAAOuJ,GAASa,EAASb,GAE3B,OAAOvJ,EAumBHyoI,CAAU7oI,EAAMvE,OAAQoJ,QACxB,GAEApJ,EAAS2E,EAAO3E,OAChBqtI,IAAgBrtI,EAEpB,IAAK,IAAI2O,KAAOpK,GACTiiE,IAAax2D,EAAejQ,KAAKwE,EAAOoK,IACvC0+H,IAAuB,UAAP1+H,GAAmB2+H,GAAQ3+H,EAAK3O,KACpD2E,EAAO8J,KAAKE,GAGhB,OAAOhK,EAWT,SAAS4oI,GAAa73C,EAAO/mF,GAE3B,IADA,IAAI3O,EAAS01F,EAAM11F,OACZA,KACL,GAAI68E,GAAG6Y,EAAM11F,GAAQ,GAAI2O,GACvB,OAAO3O,EAGX,OAAQ,EAcV,SAASwtI,GAAeC,EAAY5C,EAAQ97H,EAAU+7H,GAIpD,OAHA4C,GAASD,GAAY,SAASlpI,EAAOoK,EAAK8+H,GACxC5C,EAAOC,EAAavmI,EAAOwK,EAASxK,GAAQkpI,MAEvC3C,EA9ZT9qC,GAAK7vE,UAAUy8G,MAnEf,WACE5tI,KAAKguI,SAAWb,EAAeA,EAAa,MAAQ,IAmEtDnsC,GAAK7vE,UAAL,OAtDA,SAAoBxhB,GAClB,OAAO3P,KAAKsnD,IAAI33C,WAAe3P,KAAKguI,SAASr+H,IAsD/CqxF,GAAK7vE,UAAUo2B,IA1Cf,SAAiB53C,GACf,IAAIhL,EAAO3E,KAAKguI,SAChB,GAAIb,EAAc,CAChB,IAAIxnI,EAAShB,EAAKgL,GAClB,MAzYiB,8BAyYVhK,OAA4BrB,EAAYqB,EAEjD,OAAOqL,EAAejQ,KAAK4D,EAAMgL,GAAOhL,EAAKgL,QAAOrL,GAqCtD08F,GAAK7vE,UAAUm2B,IAzBf,SAAiB33C,GACf,IAAIhL,EAAO3E,KAAKguI,SAChB,OAAOb,OAA6B7oI,IAAdK,EAAKgL,GAAqBqB,EAAejQ,KAAK4D,EAAMgL,IAwB5EqxF,GAAK7vE,UAAUs2B,IAXf,SAAiB93C,EAAKpK,GAGpB,OAFWvF,KAAKguI,SACXr+H,GAAQw9H,QAA0B7oI,IAAViB,EAxaV,4BAwakDA,EAC9DvF,MAoHT6tI,GAAU18G,UAAUy8G,MAjFpB,WACE5tI,KAAKguI,SAAW,IAiFlBH,GAAU18G,UAAV,OArEA,SAAyBxhB,GACvB,IAAIhL,EAAO3E,KAAKguI,SACZ9+H,EAAQq/H,GAAa5pI,EAAMgL,GAE/B,QAAIT,EAAQ,KAIRA,GADYvK,EAAK3D,OAAS,EAE5B2D,EAAKwP,MAELoH,EAAOxa,KAAK4D,EAAMuK,EAAO,IAEpB,IAyDT2+H,GAAU18G,UAAUo2B,IA7CpB,SAAsB53C,GACpB,IAAIhL,EAAO3E,KAAKguI,SACZ9+H,EAAQq/H,GAAa5pI,EAAMgL,GAE/B,OAAOT,EAAQ,OAAI5K,EAAYK,EAAKuK,GAAO,IA0C7C2+H,GAAU18G,UAAUm2B,IA9BpB,SAAsB33C,GACpB,OAAO4+H,GAAavuI,KAAKguI,SAAUr+H,IAAQ,GA8B7Ck+H,GAAU18G,UAAUs2B,IAjBpB,SAAsB93C,EAAKpK,GACzB,IAAIZ,EAAO3E,KAAKguI,SACZ9+H,EAAQq/H,GAAa5pI,EAAMgL,GAO/B,OALIT,EAAQ,EACVvK,EAAK8K,KAAK,CAACE,EAAKpK,IAEhBZ,EAAKuK,GAAO,GAAK3J,EAEZvF,MAkGT8tI,GAAS38G,UAAUy8G,MA/DnB,WACE5tI,KAAKguI,SAAW,CACdlkH,KAAQ,IAAIk3E,GACZz9F,IAAO,IAAK0pI,GAAOY,IACnBhzE,OAAU,IAAImmC,KA4DlB8sC,GAAS38G,UAAT,OA/CA,SAAwBxhB,GACtB,OAAOg/H,GAAW3uI,KAAM2P,GAAjB,OAAgCA,IA+CzCm+H,GAAS38G,UAAUo2B,IAnCnB,SAAqB53C,GACnB,OAAOg/H,GAAW3uI,KAAM2P,GAAK43C,IAAI53C,IAmCnCm+H,GAAS38G,UAAUm2B,IAvBnB,SAAqB33C,GACnB,OAAOg/H,GAAW3uI,KAAM2P,GAAK23C,IAAI33C,IAuBnCm+H,GAAS38G,UAAUs2B,IAVnB,SAAqB93C,EAAKpK,GAExB,OADAopI,GAAW3uI,KAAM2P,GAAK83C,IAAI93C,EAAKpK,GACxBvF,MAyDT+tI,GAAS58G,UAAUxlB,IAAMoiI,GAAS58G,UAAU1hB,KAnB5C,SAAqBlK,GAEnB,OADAvF,KAAKguI,SAASvmF,IAAIliD,EA9pBC,6BA+pBZvF,MAkBT+tI,GAAS58G,UAAUm2B,IANnB,SAAqB/hD,GACnB,OAAOvF,KAAKguI,SAAS1mF,IAAI/hD,IA6F3B0oI,GAAM98G,UAAUy8G,MApEhB,WACE5tI,KAAKguI,SAAW,IAAIH,IAoEtBI,GAAM98G,UAAN,OAxDA,SAAqBxhB,GACnB,OAAO3P,KAAKguI,SAAL,OAAwBr+H,IAwDjCs+H,GAAM98G,UAAUo2B,IA5ChB,SAAkB53C,GAChB,OAAO3P,KAAKguI,SAASzmF,IAAI53C,IA4C3Bs+H,GAAM98G,UAAUm2B,IAhChB,SAAkB33C,GAChB,OAAO3P,KAAKguI,SAAS1mF,IAAI33C,IAgC3Bs+H,GAAM98G,UAAUs2B,IAnBhB,SAAkB93C,EAAKpK,GACrB,IAAIskF,EAAQ7pF,KAAKguI,SACjB,GAAInkD,aAAiBgkD,GAAW,CAC9B,IAAIe,EAAQ/kD,EAAMmkD,SAClB,IAAKf,GAAQ2B,EAAM5tI,OAAS6tI,IAE1B,OADAD,EAAMn/H,KAAK,CAACE,EAAKpK,IACVvF,KAET6pF,EAAQ7pF,KAAKguI,SAAW,IAAIF,GAASc,GAGvC,OADA/kD,EAAMpiC,IAAI93C,EAAKpK,GACRvF,MAiFT,IAiYwB8uI,GAAUC,GAjY9BL,IAiYoBI,GA1WxB,SAAoBr4E,EAAQ1mD,GAC1B,OAAO0mD,GAAUu4E,GAAQv4E,EAAQ1mD,EAAUoG,KA0WpC,SAASs4H,EAAY1+H,GAC1B,GAAkB,MAAd0+H,EACF,OAAOA,EAET,IAAKQ,GAAYR,GACf,OAAOK,GAASL,EAAY1+H,GAM9B,IAJA,IAAI/O,EAASytI,EAAWztI,OACpBkO,EAAQ6/H,GAAY/tI,GAAU,EAC9BgqB,EAAW9U,OAAOu4H,IAEdM,GAAY7/H,MAAYA,EAAQlO,KACa,IAA/C+O,EAASib,EAAS9b,GAAQA,EAAO8b,KAIvC,OAAOyjH,IArYPO,GAgZJ,SAAuBD,GACrB,OAAO,SAASt4E,EAAQ1mD,EAAUm/H,GAMhC,IALA,IAAIhgI,GAAS,EACT8b,EAAW9U,OAAOugD,GAClB9H,EAAQugF,EAASz4E,GACjBz1D,EAAS2tD,EAAM3tD,OAEZA,KAAU,CACf,IAAI2O,EAAMg/C,EAAMogF,EAAY/tI,IAAWkO,GACvC,IAA+C,IAA3Ca,EAASib,EAASrb,GAAMA,EAAKqb,GAC/B,MAGJ,OAAOyrC,GA7ZG04E,GAsBd,SAASC,GAAQ34E,EAAQziC,GAMvB,IAHA,IAAI9kB,EAAQ,EACRlO,GAHJgzB,EAAOq7G,GAAMr7G,EAAMyiC,GAAU,CAACziC,GAAQs7G,GAASt7G,IAG7BhzB,OAED,MAAVy1D,GAAkBvnD,EAAQlO,GAC/By1D,EAASA,EAAO84E,GAAMv7G,EAAK9kB,OAE7B,OAAQA,GAASA,GAASlO,EAAUy1D,OAASnyD,EAsB/C,SAASkrI,GAAU/4E,EAAQ9mD,GACzB,OAAiB,MAAV8mD,GAAkB9mD,KAAOuG,OAAOugD,GAkBzC,SAASg5E,GAAYlqI,EAAOsK,EAAO6/H,EAAYC,EAAS35G,GACtD,OAAIzwB,IAAUsK,IAGD,MAATtK,GAA0B,MAATsK,IAAmByiB,GAAS/sB,KAAWglI,GAAa16H,GAChEtK,GAAUA,GAASsK,GAAUA,EAoBxC,SAAyB4mD,EAAQ5mD,EAAO+/H,EAAWF,EAAYC,EAAS35G,GACtE,IAAI65G,EAAW7qH,GAAQyxC,GACnBq5E,EAAW9qH,GAAQnV,GACnBkgI,EA37BS,iBA47BTC,EA57BS,iBA87BRH,IAEHE,GADAA,EAASE,GAAOx5E,KACG+zE,EAAUE,EAAYqF,GAEtCD,IAEHE,GADAA,EAASC,GAAOpgI,KACG26H,EAAUE,EAAYsF,GAE3C,IAAIE,EAAWH,GAAUrF,IAAcuB,EAAax1E,GAChD05E,EAAWH,GAAUtF,IAAcuB,EAAap8H,GAChDugI,EAAYL,GAAUC,EAE1B,GAAII,IAAcF,EAEhB,OADAl6G,IAAUA,EAAQ,IAAIi4G,IACd4B,GAAYlE,GAAal1E,GAC7B45E,GAAY55E,EAAQ5mD,EAAO+/H,EAAWF,EAAYC,EAAS35G,GAwYnE,SAAoBygC,EAAQ5mD,EAAO2uB,EAAKoxG,EAAWF,EAAYC,EAAS35G,GACtE,OAAQwI,GACN,IAt0Cc,oBAu0CZ,GAAKi4B,EAAO2L,YAAcvyD,EAAMuyD,YAC3B3L,EAAOkgC,YAAc9mF,EAAM8mF,WAC9B,OAAO,EAETlgC,EAASA,EAAO1uC,OAChBlY,EAAQA,EAAMkY,OAEhB,IA/0CiB,uBAg1Cf,QAAK0uC,EAAO2L,YAAcvyD,EAAMuyD,aAC3BwtE,EAAU,IAAIntD,EAAWhsB,GAAS,IAAIgsB,EAAW5yE,KAKxD,IAr2CU,mBAs2CV,IAr2CU,gBAs2CV,IAj2CY,kBAo2CV,OAAOguE,IAAIpnB,GAAS5mD,GAEtB,IA12CW,iBA22CT,OAAO4mD,EAAOnsD,MAAQuF,EAAMvF,MAAQmsD,EAAOz8C,SAAWnK,EAAMmK,QAE9D,IAt2CY,kBAu2CZ,IAr2CY,kBAy2CV,OAAOy8C,GAAW5mD,EAAQ,GAE5B,KAAK46H,EACH,IAAI6F,EAAUpE,EAEhB,KAAKvB,EACH,IAAI4F,EAn4CiB,EAm4CLZ,EAGhB,GAFAW,IAAYA,EAAUnE,GAElB11E,EAAO9rC,MAAQ9a,EAAM8a,OAAS4lH,EAChC,OAAO,EAGT,IAAIC,EAAUx6G,EAAMuxB,IAAIkP,GACxB,GAAI+5E,EACF,OAAOA,GAAW3gI,EAEpB8/H,GA/4CuB,EAk5CvB35G,EAAMyxB,IAAIgP,EAAQ5mD,GAClB,IAAIlK,EAAS0qI,GAAYC,EAAQ75E,GAAS65E,EAAQzgI,GAAQ+/H,EAAWF,EAAYC,EAAS35G,GAE1F,OADAA,EAAK,OAAWygC,GACT9wD,EAET,IAj4CY,kBAk4CV,GAAI+nI,GACF,OAAOA,GAAc3sI,KAAK01D,IAAWi3E,GAAc3sI,KAAK8O,GAG9D,OAAO,EArcD4gI,CAAWh6E,EAAQ5mD,EAAOkgI,EAAQH,EAAWF,EAAYC,EAAS35G,GAExE,KAx9ByB,EAw9BnB25G,GAAiC,CACrC,IAAIe,EAAeR,GAAYl/H,EAAejQ,KAAK01D,EAAQ,eACvDk6E,EAAeR,GAAYn/H,EAAejQ,KAAK8O,EAAO,eAE1D,GAAI6gI,GAAgBC,EAAc,CAChC,IAAIC,EAAeF,EAAej6E,EAAOlxD,QAAUkxD,EAC/Co6E,EAAeF,EAAe9gI,EAAMtK,QAAUsK,EAGlD,OADAmmB,IAAUA,EAAQ,IAAIi4G,IACf2B,EAAUgB,EAAcC,EAAcnB,EAAYC,EAAS35G,IAGtE,IAAKo6G,EACH,OAAO,EAGT,OADAp6G,IAAUA,EAAQ,IAAIi4G,IAqcxB,SAAsBx3E,EAAQ5mD,EAAO+/H,EAAWF,EAAYC,EAAS35G,GACnE,IAAIu6G,EA76CqB,EA66CTZ,EACZmB,EAAW36H,GAAKsgD,GAChBs6E,EAAYD,EAAS9vI,OAErBgwI,EADW76H,GAAKtG,GACK7O,OAEzB,GAAI+vI,GAAaC,IAAcT,EAC7B,OAAO,EAET,IAAIrhI,EAAQ6hI,EACZ,KAAO7hI,KAAS,CACd,IAAIS,EAAMmhI,EAAS5hI,GACnB,KAAMqhI,EAAY5gI,KAAOE,EAAQmB,EAAejQ,KAAK8O,EAAOF,IAC1D,OAAO,EAIX,IAAI6gI,EAAUx6G,EAAMuxB,IAAIkP,GACxB,GAAI+5E,GAAWx6G,EAAMuxB,IAAI13C,GACvB,OAAO2gI,GAAW3gI,EAEpB,IAAIlK,GAAS,EACbqwB,EAAMyxB,IAAIgP,EAAQ5mD,GAClBmmB,EAAMyxB,IAAI53C,EAAO4mD,GAEjB,IAAIw6E,EAAWV,EACf,OAASrhI,EAAQ6hI,GAAW,CAC1BphI,EAAMmhI,EAAS5hI,GACf,IAAIgiI,EAAWz6E,EAAO9mD,GAClBwhI,EAAWthI,EAAMF,GAErB,GAAI+/H,EACF,IAAI0B,EAAWb,EACXb,EAAWyB,EAAUD,EAAUvhI,EAAKE,EAAO4mD,EAAQzgC,GACnD05G,EAAWwB,EAAUC,EAAUxhI,EAAK8mD,EAAQ5mD,EAAOmmB,GAGzD,UAAmB1xB,IAAb8sI,EACGF,IAAaC,GAAYvB,EAAUsB,EAAUC,EAAUzB,EAAYC,EAAS35G,GAC7Eo7G,GACD,CACLzrI,GAAS,EACT,MAEFsrI,IAAaA,EAAkB,eAAPthI,GAE1B,GAAIhK,IAAWsrI,EAAU,CACvB,IAAII,EAAU56E,EAAO9yC,YACjB2tH,EAAUzhI,EAAM8T,YAGhB0tH,GAAWC,KACV,gBAAiB76E,MAAU,gBAAiB5mD,IACzB,mBAAXwhI,GAAyBA,aAAmBA,GACjC,mBAAXC,GAAyBA,aAAmBA,IACvD3rI,GAAS,GAKb,OAFAqwB,EAAK,OAAWygC,GAChBzgC,EAAK,OAAWnmB,GACTlK,EAjgBA4rI,CAAa96E,EAAQ5mD,EAAO+/H,EAAWF,EAAYC,EAAS35G,GA1D5Dw7G,CAAgBjsI,EAAOsK,EAAO4/H,GAAaC,EAAYC,EAAS35G,IA2HzE,SAASy7G,GAAalsI,GACpB,SAAK+sB,GAAS/sB,IA4mBhB,SAAkB0jI,GAChB,QAASwD,GAAeA,KAAcxD,EA7mBdyI,CAASnsI,MAGlBq5F,GAAWr5F,IAAU0mI,EAAa1mI,GAAUqnI,EAAa3B,GACzDh3H,KAAKo5H,GAAS9nI,IAsB/B,SAASosI,GAAapsI,GAGpB,MAAoB,mBAATA,EACFA,EAEI,MAATA,EACKo8H,GAEW,UAAhB/7H,EAAOL,GACFyf,GAAQzf,GAoDnB,SAA6ByuB,EAAM49G,GACjC,GAAIvC,GAAMr7G,IAAS69G,GAAmBD,GACpC,OAAOE,GAAwBvC,GAAMv7G,GAAO49G,GAE9C,OAAO,SAASn7E,GACd,IAAIy6E,EAojCR,SAAaz6E,EAAQziC,EAAMihB,GACzB,IAAItvC,EAAmB,MAAV8wD,OAAiBnyD,EAAY8qI,GAAQ34E,EAAQziC,GAC1D,YAAkB1vB,IAAXqB,EAAuBsvC,EAAetvC,EAtjC5B4hD,CAAIkP,EAAQziC,GAC3B,YAAqB1vB,IAAb4sI,GAA0BA,IAAaU,EAklCnD,SAAen7E,EAAQziC,GACrB,OAAiB,MAAVyiC,GAppBT,SAAiBA,EAAQziC,EAAM+9G,GAC7B/9G,EAAOq7G,GAAMr7G,EAAMyiC,GAAU,CAACziC,GAAQs7G,GAASt7G,GAE/C,IAAIruB,EACAuJ,GAAS,EACTlO,EAASgzB,EAAKhzB,OAElB,OAASkO,EAAQlO,GAAQ,CACvB,IAAI2O,EAAM4/H,GAAMv7G,EAAK9kB,IACrB,KAAMvJ,EAAmB,MAAV8wD,GAAkBs7E,EAAQt7E,EAAQ9mD,IAC/C,MAEF8mD,EAASA,EAAO9mD,GAElB,GAAIhK,EACF,OAAOA,EAGT,SADI3E,EAASy1D,EAASA,EAAOz1D,OAAS,IACnBgxI,GAAShxI,IAAWstI,GAAQ3+H,EAAK3O,KACjDgkB,GAAQyxC,IAAW03E,GAAY13E,IAioBTw7E,CAAQx7E,EAAQziC,EAAMw7G,IAllCzC0C,CAAMz7E,EAAQziC,GACdy7G,GAAYmC,EAAUV,OAAU5sI,EAAW6tI,IA3D3CC,CAAoB7sI,EAAM,GAAIA,EAAM,IAiC5C,SAAqBykI,GACnB,IAAIqI,EAiZN,SAAsB57E,GACpB,IAAI9wD,EAASwQ,GAAKsgD,GACdz1D,EAAS2E,EAAO3E,OAEpB,KAAOA,KAAU,CACf,IAAI2O,EAAMhK,EAAO3E,GACbuE,EAAQkxD,EAAO9mD,GAEnBhK,EAAO3E,GAAU,CAAC2O,EAAKpK,EAAOssI,GAAmBtsI,IAEnD,OAAOI,EA3ZS2sI,CAAatI,GAC7B,GAAwB,GAApBqI,EAAUrxI,QAAeqxI,EAAU,GAAG,GACxC,OAAOP,GAAwBO,EAAU,GAAG,GAAIA,EAAU,GAAG,IAE/D,OAAO,SAAS57E,GACd,OAAOA,IAAWuzE,GAjItB,SAAqBvzE,EAAQuzE,EAAQqI,EAAW3C,GAC9C,IAAIxgI,EAAQmjI,EAAUrxI,OAClBA,EAASkO,EACTqjI,GAAgB7C,EAEpB,GAAc,MAAVj5E,EACF,OAAQz1D,EAGV,IADAy1D,EAASvgD,OAAOugD,GACTvnD,KAAS,CACd,IAAIvK,EAAO0tI,EAAUnjI,GACrB,GAAKqjI,GAAgB5tI,EAAK,GAClBA,EAAK,KAAO8xD,EAAO9xD,EAAK,MACtBA,EAAK,KAAM8xD,GAEnB,OAAO,EAGX,OAASvnD,EAAQlO,GAAQ,CAEvB,IAAI2O,GADJhL,EAAO0tI,EAAUnjI,IACF,GACXgiI,EAAWz6E,EAAO9mD,GAClBiiI,EAAWjtI,EAAK,GAEpB,GAAI4tI,GAAgB5tI,EAAK,IACvB,QAAiBL,IAAb4sI,KAA4BvhI,KAAO8mD,GACrC,OAAO,MAEJ,CACL,IAAIzgC,EAAQ,IAAIi4G,GAChB,GAAIyB,EACF,IAAI/pI,EAAS+pI,EAAWwB,EAAUU,EAAUjiI,EAAK8mD,EAAQuzE,EAAQh0G,GAEnE,UAAiB1xB,IAAXqB,EACE8pI,GAAYmC,EAAUV,EAAUxB,EAAYyC,EAA+Cn8G,GAC3FrwB,GAEN,OAAO,GAIb,OAAO,EAwFuB6sI,CAAY/7E,EAAQuzE,EAAQqI,IAtCpDI,CAAYltI,GAytCX8pI,GADSr7G,EAttCAzuB,IAx7BIoK,EA+oEc4/H,GAAMv7G,GA9oEjC,SAASyiC,GACd,OAAiB,MAAVA,OAAiBnyD,EAAYmyD,EAAO9mD,KAy/B/C,SAA0BqkB,GACxB,OAAO,SAASyiC,GACd,OAAO24E,GAAQ34E,EAAQziC,IAkpCwB0+G,CAAiB1+G,GADpE,IAAkBA,EA9oEIrkB,EAk8BtB,SAASgjI,GAASl8E,GAChB,GAqkBIm8E,GADertI,EApkBFkxD,IAqkBGlxD,EAAMoe,YACtB0lF,EAAwB,mBAARupC,GAAsBA,EAAKzhH,WAAco7G,EAEtDhnI,IAAU8jG,EAvkBf,OAAOyjC,EAAWr2E,GAmkBtB,IAAqBlxD,EACfqtI,EACAvpC,EAnkBA1jG,EAAS,GACb,IAAK,IAAIgK,KAAOuG,OAAOugD,GACjBzlD,EAAejQ,KAAK01D,EAAQ9mD,IAAe,eAAPA,GACtChK,EAAO8J,KAAKE,GAGhB,OAAOhK,EAgFT,SAAS2pI,GAAS/pI,GAChB,OAAOyf,GAAQzf,GAASA,EAAQstI,GAAattI,GAuF/C,SAAS8qI,GAAY35C,EAAO7mF,EAAO+/H,EAAWF,EAAYC,EAAS35G,GACjE,IAAIu6G,EA/wCqB,EA+wCTZ,EACZ13C,EAAYvB,EAAM11F,OAClBgwI,EAAYnhI,EAAM7O,OAEtB,GAAIi3F,GAAa+4C,KAAeT,GAAaS,EAAY/4C,GACvD,OAAO,EAGT,IAAIu4C,EAAUx6G,EAAMuxB,IAAImvC,GACxB,GAAI85C,GAAWx6G,EAAMuxB,IAAI13C,GACvB,OAAO2gI,GAAW3gI,EAEpB,IAAIX,GAAS,EACTvJ,GAAS,EACTmtI,EA9xCuB,EA8xCfnD,EAAoC,IAAI5B,QAAWzpI,EAM/D,IAJA0xB,EAAMyxB,IAAIivC,EAAO7mF,GACjBmmB,EAAMyxB,IAAI53C,EAAO6mF,KAGRxnF,EAAQ+oF,GAAW,CAC1B,IAAI86C,EAAWr8C,EAAMxnF,GACjBiiI,EAAWthI,EAAMX,GAErB,GAAIwgI,EACF,IAAI0B,EAAWb,EACXb,EAAWyB,EAAU4B,EAAU7jI,EAAOW,EAAO6mF,EAAO1gE,GACpD05G,EAAWqD,EAAU5B,EAAUjiI,EAAOwnF,EAAO7mF,EAAOmmB,GAE1D,QAAiB1xB,IAAb8sI,EAAwB,CAC1B,GAAIA,EACF,SAEFzrI,GAAS,EACT,MAGF,GAAImtI,GACF,IAAK/G,EAAUl8H,GAAO,SAASshI,EAAU6B,GACnC,IAAKF,EAAKxrF,IAAI0rF,KACTD,IAAa5B,GAAYvB,EAAUmD,EAAU5B,EAAUzB,EAAYC,EAAS35G,IAC/E,OAAO88G,EAAKnnI,IAAIqnI,MAEhB,CACNrtI,GAAS,EACT,YAEG,GACDotI,IAAa5B,IACXvB,EAAUmD,EAAU5B,EAAUzB,EAAYC,EAAS35G,GACpD,CACLrwB,GAAS,EACT,OAKJ,OAFAqwB,EAAK,OAAW0gE,GAChB1gE,EAAK,OAAWnmB,GACTlK,EA4KT,SAASgpI,GAAWprI,EAAKoM,GACvB,IAmJiBpK,EACb2E,EApJAvF,EAAOpB,EAAIyqI,SACf,OAoJgB,WADZ9jI,EAAItE,EADSL,EAlJAoK,KAoJmB,UAARzF,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAV3E,EACU,OAAVA,GArJDZ,EAAmB,iBAAPgL,EAAkB,SAAW,QACzChL,EAAKpB,IA+BX,SAASypI,GAAUv2E,EAAQ9mD,GACzB,IAAIpK,EAh1CN,SAAkBkxD,EAAQ9mD,GACxB,OAAiB,MAAV8mD,OAAiBnyD,EAAYmyD,EAAO9mD,GA+0C/BsjI,CAASx8E,EAAQ9mD,GAC7B,OAAO8hI,GAAalsI,GAASA,OAAQjB,EAUvC,IAAI2rI,GA3pBJ,SAAoB1qI,GAClB,OAAO44F,EAAep9F,KAAKwE,IA4tB7B,SAAS+oI,GAAQ/oI,EAAOvE,GAEtB,SADAA,EAAmB,MAAVA,EAlmDY,iBAkmDwBA,KAE1B,iBAATuE,GAAqB2lI,EAASj3H,KAAK1O,KAC1CA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQvE,EAW7C,SAASquI,GAAM9pI,EAAOkxD,GACpB,GAAIzxC,GAAQzf,GACV,OAAO,EAET,IAAI2E,EAAItE,EAAUL,GAClB,QAAY,UAAR2E,GAA4B,UAARA,GAA4B,WAARA,GAC/B,MAAT3E,IAAiBk5F,GAASl5F,MAGvBslI,EAAc52H,KAAK1O,KAAWqlI,EAAa32H,KAAK1O,IAC1C,MAAVkxD,GAAkBlxD,KAAS2Q,OAAOugD,IAkDvC,SAASo7E,GAAmBtsI,GAC1B,OAAOA,GAAUA,IAAU+sB,GAAS/sB,GAYtC,SAASusI,GAAwBniI,EAAKiiI,GACpC,OAAO,SAASn7E,GACd,OAAc,MAAVA,IAGGA,EAAO9mD,KAASiiI,SACPttI,IAAbstI,GAA2BjiI,KAAOuG,OAAOugD,OA5J3Cs2E,GA9gDa,qBA8gDDkD,GAAO,IAAIlD,EAAS,IAAIj9G,YAAY,MAChDm9G,GAAOgD,GAAO,IAAIhD,IAAQxC,GAC1BxnI,GAxhDY,oBAwhDDgtI,GAAOhtI,EAAQC,YAC1BgqI,GAAO+C,GAAO,IAAI/C,IAAQvC,GAC1BhkF,GArhDY,oBAqhDDspF,GAAO,IAAItpF,MACzBspF,GAAS,SAAS1qI,GAChB,IAAII,EAASw4F,EAAep9F,KAAKwE,GAC7BqtI,EAAOjtI,GAAU+kI,EAAYnlI,EAAMoe,iBAAcrf,EACjD4uI,EAAaN,EAAOvF,GAASuF,QAAQtuI,EAEzC,GAAI4uI,EACF,OAAQA,GACN,KAAK9F,EAAoB,MA1hDf,oBA2hDV,KAAKE,EAAe,OAAO7C,EAC3B,KAAK8C,GAAmB,MApiDf,mBAqiDT,KAAKC,GAAe,OAAO7C,EAC3B,KAAK8C,GAAmB,MAjiDf,mBAoiDb,OAAO9nI,IAoJX,IAAIktI,GAAeM,IAAQ,SAASt4E,GAgdpC,IAAkBt1D,EA/chBs1D,EAgdgB,OADAt1D,EA/cEs1D,GAgdK,GA5/BzB,SAAsBt1D,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIk5F,GAASl5F,GACX,OAAO8kI,GAAiBA,GAAetpI,KAAKwE,GAAS,GAEvD,IAAII,EAAUJ,EAAQ,GACtB,MAAkB,KAAVI,GAAkB,EAAIJ,IAAU,EAAA,EAAa,KAAOI,EAm/BhC2kI,CAAa/kI,GA9czC,IAAII,EAAS,GAOb,OANImlI,EAAa72H,KAAK4mD,IACpBl1D,EAAO8J,KAAK,IAEdorD,EAAO1uD,QAAQ4+H,GAAY,SAASp9H,EAAO/C,EAAQ8mD,EAAOmJ,GACxDl1D,EAAO8J,KAAKiiD,EAAQmJ,EAAO1uD,QAAQ6+H,EAAc,MAASpgI,GAAU+C,MAE/DhI,KAUT,SAAS4pI,GAAMhqI,GACb,GAAoB,iBAATA,GAAqBk5F,GAASl5F,GACvC,OAAOA,EAET,IAAII,EAAUJ,EAAQ,GACtB,MAAkB,KAAVI,GAAkB,EAAIJ,IApuDjB,EAAA,EAouDwC,KAAOI,EAU9D,SAAS0nI,GAASpE,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAO0D,EAAa5rI,KAAKkoI,GACzB,MAAO9oI,IACT,IACE,OAAQ8oI,EAAO,GACf,MAAO9oI,KAEX,MAAO,GA2BT,IAnlB0B0rI,GAAQuH,GAmlB9BC,IAnlBsBxH,GAmlBK,SAASlmI,EAAQJ,EAAOoK,GACjDqB,EAAejQ,KAAK4E,EAAQgK,GAC9BhK,EAAOgK,GAAKF,KAAKlK,GAEjBI,EAAOgK,GAAO,CAACpK,IAtlBV,SAASkpI,EAAY1+H,GAC1B,IAAIk5H,EAAOjkH,GAAQypH,GAAc7C,EAAkB4C,GAC/C1C,EAAcsH,GAAcA,KAAgB,GAEhD,OAAOnK,EAAKwF,EAAY5C,GAAQ8F,GAAa5hI,GAAc+7H,KAkoB/D,SAASqH,GAAQlK,EAAMX,GACrB,GAAmB,mBAARW,GAAuBX,GAA+B,mBAAZA,EACnD,MAAM,IAAIj4E,UAl1DQ,uBAo1DpB,IAAIijF,EAAW,SAAXA,IACF,IAAI14E,EAAO7zD,UACP4I,EAAM24H,EAAWA,EAASjmH,MAAMriB,KAAM46D,GAAQA,EAAK,GACnDivB,EAAQypD,EAASzpD,MAErB,GAAIA,EAAMviC,IAAI33C,GACZ,OAAOk6E,EAAMtiC,IAAI53C,GAEnB,IAAIhK,EAASsjI,EAAK5mH,MAAMriB,KAAM46D,GAE9B,OADA04E,EAASzpD,MAAQA,EAAMpiC,IAAI93C,EAAKhK,GACzBA,GAGT,OADA2tI,EAASzpD,MAAQ,IAAKspD,GAAQI,OAASzF,IAChCwF,EAsCT,SAASz1D,GAAGt4E,EAAOsK,GACjB,OAAOtK,IAAUsK,GAAUtK,GAAUA,GAASsK,GAAUA,EAqB1D,SAASs+H,GAAY5oI,GAEnB,OAmFF,SAA2BA,GACzB,OAAOglI,GAAahlI,IAAU0pI,GAAY1pI,GApFnCiuI,CAAkBjuI,IAAUyL,EAAejQ,KAAKwE,EAAO,aAC1DsnI,EAAqB9rI,KAAKwE,EAAO,WAAa44F,EAAep9F,KAAKwE,IAAUilI,GA3DlF2I,GAAQI,MAAQzF,GAqFhB,IAAI9oH,GAAUxU,MAAMwU,QA2BpB,SAASiqH,GAAY1pI,GACnB,OAAgB,MAATA,GAAiBysI,GAASzsI,EAAMvE,UAAY49F,GAAWr5F,GAiDhE,SAASq5F,GAAWr5F,GAGlB,IAAIi5B,EAAMlM,GAAS/sB,GAAS44F,EAAep9F,KAAKwE,GAAS,GACzD,MAx/DY,qBAw/DLi5B,GAv/DI,8BAu/DcA,EA6B3B,SAASwzG,GAASzsI,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GA/hEb,iBA2jEvB,SAAS+sB,GAAS/sB,GAChB,IAAI2E,EAAItE,EAAUL,GAClB,QAASA,IAAkB,UAAR2E,GAA4B,YAARA,GA2BzC,SAASqgI,GAAahlI,GACpB,QAASA,GAAyB,UAAhBK,EAAOL,GAoB3B,SAASk5F,GAASl5F,GAChB,MAAuB,UAAhBK,EAAOL,IACXglI,GAAahlI,IA9lEF,mBA8lEY44F,EAAep9F,KAAKwE,GAoBhD,IAAIomI,GAAeD,EA78DnB,SAAmBzC,GACjB,OAAO,SAAS1jI,GACd,OAAO0jI,EAAK1jI,IA28DsBkuI,CAAU/H,GA/kChD,SAA0BnmI,GACxB,OAAOglI,GAAahlI,IAClBysI,GAASzsI,EAAMvE,WAAamqI,EAAehtC,EAAep9F,KAAKwE,KAgsCnE,SAAS4Q,GAAKsgD,GACZ,OAAOw4E,GAAYx4E,GAAUy3E,GAAcz3E,GAAUk8E,GAASl8E,GAmBhE,SAASkrE,GAASp8H,GAChB,OAAOA,EA6BT7F,EAAOD,QAAU4zI,iYCtzEjB,IASIl1C,EANcjoF,OAAOib,UAMQjmB,SAkDjCxL,EAAOD,QAhCP,SAAmB8F,GACjB,OAAiB,IAAVA,IAA4B,IAAVA,GA2B3B,SAAsBA,GACpB,QAASA,GAAyB,UAAhBK,EAAOL,GA3BtBglI,CAAahlI,IA7BJ,oBA6Bc44F,EAAep9F,KAAKwE,6RC7BhD,IAaIilI,EAAU,qBAQVC,EAAS,eAGTC,EAAY,kBAIZC,EAAS,eAyBTM,EAAe,8BAGfC,EAAW,mBAGXC,EAAiB,GACrBA,EAxBiB,yBAwBYA,EAvBZ,yBAwBjBA,EAvBc,sBAuBYA,EAtBX,uBAuBfA,EAtBe,uBAsBYA,EArBZ,uBAsBfA,EArBsB,8BAqBYA,EApBlB,wBAqBhBA,EApBgB,yBAoBY,EAC5BA,EAAeX,GAAWW,EAnDX,kBAoDfA,EAhCqB,wBAgCYA,EAlDnB,oBAmDdA,EAhCkB,qBAgCYA,EAlDhB,iBAmDdA,EAlDe,kBAkDYA,EAjDb,qBAkDdA,EAAeV,GAAUU,EA/CT,mBAgDhBA,EAAeT,GAAaS,EA3CZ,mBA4ChBA,EAAeR,GAAUQ,EA1CT,mBA2ChBA,EAxCiB,qBAwCY,EAG7B,IAAIlB,EAA8B,gBAAjB,IAAOnqI,EAAP,YAAA8F,EAAO9F,KAAsBA,GAAUA,EAAOoW,SAAWA,QAAUpW,EAGhFoqI,EAA0B,WAAf,oBAAOnqI,KAAP,YAAA6F,EAAO7F,QAAoBA,MAAQA,KAAKmW,SAAWA,QAAUnW,KAGxE05H,EAAOwQ,GAAcC,GAAYpkH,SAAS,cAATA,GAGjCslH,EAAgC,gBAAlB,IAAO3rI,EAAP,YAAAmG,EAAOnG,KAAuBA,IAAYA,EAAQ4rI,UAAY5rI,EAG5E6rI,EAAaF,GAAgC,gBAAjB,IAAO1rI,EAAP,YAAAkG,EAAOlG,KAAsBA,IAAWA,EAAO2rI,UAAY3rI,EAGvFg0I,EAAgBpI,GAAcA,EAAW7rI,UAAY2rI,EAGrDG,EAAcmI,GAAiBzJ,EAAWl6G,QAG1Cy7G,EAAY,WACd,IACE,OAAOD,GAAeA,EAAYE,SAAWF,EAAYE,QAAQ,QACjE,MAAOtrI,KAHK,GAOZurI,EAAmBF,GAAYA,EAASG,aAuD5C,SAASI,EAAUr1C,EAAOs1C,GAIxB,IAHA,IAAI98H,GAAS,EACTlO,EAAkB,MAAT01F,EAAgB,EAAIA,EAAM11F,SAE9BkO,EAAQlO,GACf,GAAIgrI,EAAUt1C,EAAMxnF,GAAQA,EAAOwnF,GACjC,OAAO,EAGX,OAAO,EAkET,SAASw1C,EAAW3oI,GAClB,IAAI2L,GAAS,EACTvJ,EAAS6K,MAAMjN,EAAIonB,MAKvB,OAHApnB,EAAIgI,SAAQ,SAAShG,EAAOoK,GAC1BhK,IAASuJ,GAAS,CAACS,EAAKpK,MAEnBI,EAwBT,SAASwmI,EAAW1kF,GAClB,IAAIv4C,GAAS,EACTvJ,EAAS6K,MAAMi3C,EAAI98B,MAKvB,OAHA88B,EAAIl8C,SAAQ,SAAShG,GACnBI,IAASuJ,GAAS3J,KAEbI,EAIT,IAeMymI,EAvCWnD,EAAMn1E,EAwBnBu4E,EAAa77H,MAAM2gB,UACnBm7G,EAAYxmH,SAASqL,UACrBo7G,EAAcr2H,OAAOib,UAGrBq7G,EAAa/S,EAAK,sBAGlBkT,EAAeL,EAAUphI,SAGzB8F,EAAiBu7H,EAAYv7H,eAG7By7H,GACEL,EAAM,SAASl/G,KAAKs/G,GAAcA,EAAWr2H,MAAQq2H,EAAWr2H,KAAKu2H,UAAY,KACvE,iBAAmBN,EAAO,GAQtCuH,EAAuBpH,EAAYrhI,SAGnC0hI,EAAah6E,OAAO,IACtB+5E,EAAa5rI,KAAKiQ,GAAgB7E,QA7PjB,sBA6PuC,QACvDA,QAAQ,yDAA0D,SAAW,KAI5Ewb,EAAS+rH,EAAgBja,EAAK9xG,YAASrjB,EACvC6lI,EAAS1Q,EAAK7tG,OACd62D,EAAag3C,EAAKh3C,WAClBoqD,EAAuBN,EAAYM,qBACnCtxH,EAAS8wH,EAAW9wH,OACpBq4H,EAAiBzJ,EAASA,EAAO0J,iBAAcvvI,EAG/CwvI,EAAmB59H,OAAO69H,sBAC1BC,EAAiBrsH,EAASA,EAAOs6C,cAAW39D,EAC5CwoI,GAnEa7D,EAmEQ/yH,OAAOC,KAnET29C,EAmEe59C,OAlE7B,SAASkuD,GACd,OAAO6kE,EAAKn1E,EAAUsQ,MAoEtB2oE,EAAWC,GAAUvT,EAAM,YAC3BwT,EAAMD,GAAUvT,EAAM,OACtBx2H,EAAU+pI,GAAUvT,EAAM,WAC1ByT,EAAMF,GAAUvT,EAAM,OACtB9yE,EAAUqmF,GAAUvT,EAAM,WAC1B0T,EAAeH,GAAU92H,OAAQ,UAGjCk3H,EAAqBC,GAASN,GAC9BO,EAAgBD,GAASJ,GACzBM,EAAoBF,GAASpqI,GAC7BuqI,EAAgBH,GAASH,GACzBO,GAAoBJ,GAAS1mF,GAG7ByjF,GAAcD,EAASA,EAAOh5G,eAAY7sB,EAC1CopI,GAAgBtD,GAAcA,GAAYhmI,aAAUE,EASxD,SAAS08F,GAAK2sC,GACZ,IAAIz+H,GAAS,EACTlO,EAAoB,MAAX2sI,EAAkB,EAAIA,EAAQ3sI,OAG3C,IADAhB,KAAK4tI,UACI1+H,EAAQlO,GAAQ,CACvB,IAAI+pD,EAAQ4iF,EAAQz+H,GACpBlP,KAAKynD,IAAIsD,EAAM,GAAIA,EAAM,KA+F7B,SAAS8iF,GAAUF,GACjB,IAAIz+H,GAAS,EACTlO,EAAoB,MAAX2sI,EAAkB,EAAIA,EAAQ3sI,OAG3C,IADAhB,KAAK4tI,UACI1+H,EAAQlO,GAAQ,CACvB,IAAI+pD,EAAQ4iF,EAAQz+H,GACpBlP,KAAKynD,IAAIsD,EAAM,GAAIA,EAAM,KA4G7B,SAAS+iF,GAASH,GAChB,IAAIz+H,GAAS,EACTlO,EAAoB,MAAX2sI,EAAkB,EAAIA,EAAQ3sI,OAG3C,IADAhB,KAAK4tI,UACI1+H,EAAQlO,GAAQ,CACvB,IAAI+pD,EAAQ4iF,EAAQz+H,GACpBlP,KAAKynD,IAAIsD,EAAM,GAAIA,EAAM,KA+F7B,SAASgjF,GAAS1nI,GAChB,IAAI6I,GAAS,EACTlO,EAAmB,MAAVqF,EAAiB,EAAIA,EAAOrF,OAGzC,IADAhB,KAAKguI,SAAW,IAAIF,KACX5+H,EAAQlO,GACfhB,KAAK2L,IAAItF,EAAO6I,IA2CpB,SAAS++H,GAAMN,GACb,IAAIhpI,EAAO3E,KAAKguI,SAAW,IAAIH,GAAUF,GACzC3tI,KAAK2qB,KAAOhmB,EAAKgmB,KAmGnB,SAASujH,GAAc3oI,EAAOiiE,GAC5B,IAAIysE,EAAQjvH,GAAQzf,GAChB2uI,GAASD,GAAS9F,GAAY5oI,GAC9B4uI,GAAUF,IAAUC,GAASjyE,GAAS18D,GACtC6uI,GAAUH,IAAUC,IAAUC,GAAUxI,GAAapmI,GACrD8oI,EAAc4F,GAASC,GAASC,GAAUC,EAC1CzuI,EAAS0oI,EAloBf,SAAmBjuI,EAAG2P,GAIpB,IAHA,IAAIb,GAAS,EACTvJ,EAAS6K,MAAMpQ,KAEV8O,EAAQ9O,GACfuF,EAAOuJ,GAASa,EAASb,GAE3B,OAAOvJ,EA2nBoByoI,CAAU7oI,EAAMvE,OAAQoJ,QAAU,GACzDpJ,EAAS2E,EAAO3E,OAEpB,IAAK,IAAI2O,KAAOpK,GACTiiE,IAAax2D,EAAejQ,KAAKwE,EAAOoK,IACvC0+H,IAEQ,UAAP1+H,GAECwkI,IAAkB,UAAPxkI,GAA0B,UAAPA,IAE9BykI,IAAkB,UAAPzkI,GAA0B,cAAPA,GAA8B,cAAPA,IAEtD2+H,GAAQ3+H,EAAK3O,KAElB2E,EAAO8J,KAAKE,GAGhB,OAAOhK,EAWT,SAAS4oI,GAAa73C,EAAO/mF,GAE3B,IADA,IAAI3O,EAAS01F,EAAM11F,OACZA,KACL,GAAI68E,GAAG6Y,EAAM11F,GAAQ,GAAI2O,GACvB,OAAO3O,EAGX,OAAQ,EA0BV,SAASqzI,GAAW9uI,GAClB,OAAa,MAATA,OACejB,IAAViB,EAt1BQ,qBARL,gBAg2BJquI,GAAkBA,KAAkB19H,OAAO3Q,GA0arD,SAAmBA,GACjB,IAAI+uI,EAAQtjI,EAAejQ,KAAKwE,EAAOquI,GACnCp1G,EAAMj5B,EAAMquI,GAEhB,IACEruI,EAAMquI,QAAkBtvI,EACxB,IAAIiwI,GAAW,EACf,MAAOp0I,IAET,IAAIwF,EAASguI,EAAqB5yI,KAAKwE,GACnCgvI,IACED,EACF/uI,EAAMquI,GAAkBp1G,SAEjBj5B,EAAMquI,IAGjB,OAAOjuI,EA1bH6uI,CAAUjvI,GA4iBhB,SAAwBA,GACtB,OAAOouI,EAAqB5yI,KAAKwE,GA5iB7B44F,CAAe54F,GAUrB,SAASkvI,GAAgBlvI,GACvB,OAAOglI,GAAahlI,IAAU8uI,GAAW9uI,IAAUilI,EAiBrD,SAASiF,GAAYlqI,EAAOsK,EAAO8/H,EAASD,EAAY15G,GACtD,OAAIzwB,IAAUsK,IAGD,MAATtK,GAA0B,MAATsK,IAAmB06H,GAAahlI,KAAWglI,GAAa16H,GACpEtK,GAAUA,GAASsK,GAAUA,EAmBxC,SAAyB4mD,EAAQ5mD,EAAO8/H,EAASD,EAAYE,EAAW55G,GACtE,IAAI65G,EAAW7qH,GAAQyxC,GACnBq5E,EAAW9qH,GAAQnV,GACnBkgI,EAASF,EAl6BA,iBAk6BsBI,GAAOx5E,GACtCu5E,EAASF,EAn6BA,iBAm6BsBG,GAAOpgI,GAKtCqgI,GAHJH,EAASA,GAAUvF,EAAUE,EAAYqF,IAGhBrF,EACrByF,GAHJH,EAASA,GAAUxF,EAAUE,EAAYsF,IAGhBtF,EACrB0F,EAAYL,GAAUC,EAE1B,GAAII,GAAanuE,GAASxL,GAAS,CACjC,IAAKwL,GAASpyD,GACZ,OAAO,EAETggI,GAAW,EACXK,GAAW,EAEb,GAAIE,IAAcF,EAEhB,OADAl6G,IAAUA,EAAQ,IAAIi4G,IACd4B,GAAYlE,GAAal1E,GAC7B45E,GAAY55E,EAAQ5mD,EAAO8/H,EAASD,EAAYE,EAAW55G,GAiKnE,SAAoBygC,EAAQ5mD,EAAO2uB,EAAKmxG,EAASD,EAAYE,EAAW55G,GACtE,OAAQwI,GACN,IApkCc,oBAqkCZ,GAAKi4B,EAAO2L,YAAcvyD,EAAMuyD,YAC3B3L,EAAOkgC,YAAc9mF,EAAM8mF,WAC9B,OAAO,EAETlgC,EAASA,EAAO1uC,OAChBlY,EAAQA,EAAMkY,OAEhB,IA7kCiB,uBA8kCf,QAAK0uC,EAAO2L,YAAcvyD,EAAMuyD,aAC3BwtE,EAAU,IAAIntD,EAAWhsB,GAAS,IAAIgsB,EAAW5yE,KAKxD,IAtmCU,mBAumCV,IAtmCU,gBAumCV,IAlmCY,kBAqmCV,OAAOguE,IAAIpnB,GAAS5mD,GAEtB,IA3mCW,iBA4mCT,OAAO4mD,EAAOnsD,MAAQuF,EAAMvF,MAAQmsD,EAAOz8C,SAAWnK,EAAMmK,QAE9D,IArmCY,kBAsmCZ,IApmCY,kBAwmCV,OAAOy8C,GAAW5mD,EAAQ,GAE5B,KAAK46H,EACH,IAAI6F,EAAUpE,EAEhB,KAAKvB,EACH,IAAI4F,EAroCiB,EAqoCLZ,EAGhB,GAFAW,IAAYA,EAAUnE,GAElB11E,EAAO9rC,MAAQ9a,EAAM8a,OAAS4lH,EAChC,OAAO,EAGT,IAAIC,EAAUx6G,EAAMuxB,IAAIkP,GACxB,GAAI+5E,EACF,OAAOA,GAAW3gI,EAEpB8/H,GA/oCuB,EAkpCvB35G,EAAMyxB,IAAIgP,EAAQ5mD,GAClB,IAAIlK,EAAS0qI,GAAYC,EAAQ75E,GAAS65E,EAAQzgI,GAAQ8/H,EAASD,EAAYE,EAAW55G,GAE1F,OADAA,EAAK,OAAWygC,GACT9wD,EAET,IAhoCY,kBAioCV,GAAI+nI,GACF,OAAOA,GAAc3sI,KAAK01D,IAAWi3E,GAAc3sI,KAAK8O,GAG9D,OAAO,EA9ND4gI,CAAWh6E,EAAQ5mD,EAAOkgI,EAAQJ,EAASD,EAAYE,EAAW55G,GAExE,KAj8ByB,EAi8BnB25G,GAAiC,CACrC,IAAIe,EAAeR,GAAYl/H,EAAejQ,KAAK01D,EAAQ,eACvDk6E,EAAeR,GAAYn/H,EAAejQ,KAAK8O,EAAO,eAE1D,GAAI6gI,GAAgBC,EAAc,CAChC,IAAIC,EAAeF,EAAej6E,EAAOlxD,QAAUkxD,EAC/Co6E,EAAeF,EAAe9gI,EAAMtK,QAAUsK,EAGlD,OADAmmB,IAAUA,EAAQ,IAAIi4G,IACf2B,EAAUgB,EAAcC,EAAclB,EAASD,EAAY15G,IAGtE,IAAKo6G,EACH,OAAO,EAGT,OADAp6G,IAAUA,EAAQ,IAAIi4G,IA6NxB,SAAsBx3E,EAAQ5mD,EAAO8/H,EAASD,EAAYE,EAAW55G,GACnE,IAAIu6G,EA9qCqB,EA8qCTZ,EACZmB,EAAW4D,GAAWj+E,GACtBs6E,EAAYD,EAAS9vI,OAErBgwI,EADW0D,GAAW7kI,GACD7O,OAEzB,GAAI+vI,GAAaC,IAAcT,EAC7B,OAAO,EAET,IAAIrhI,EAAQ6hI,EACZ,KAAO7hI,KAAS,CACd,IAAIS,EAAMmhI,EAAS5hI,GACnB,KAAMqhI,EAAY5gI,KAAOE,EAAQmB,EAAejQ,KAAK8O,EAAOF,IAC1D,OAAO,EAIX,IAAI6gI,EAAUx6G,EAAMuxB,IAAIkP,GACxB,GAAI+5E,GAAWx6G,EAAMuxB,IAAI13C,GACvB,OAAO2gI,GAAW3gI,EAEpB,IAAIlK,GAAS,EACbqwB,EAAMyxB,IAAIgP,EAAQ5mD,GAClBmmB,EAAMyxB,IAAI53C,EAAO4mD,GAEjB,IAAIw6E,EAAWV,EACf,OAASrhI,EAAQ6hI,GAAW,CAC1BphI,EAAMmhI,EAAS5hI,GACf,IAAIgiI,EAAWz6E,EAAO9mD,GAClBwhI,EAAWthI,EAAMF,GAErB,GAAI+/H,EACF,IAAI0B,EAAWb,EACXb,EAAWyB,EAAUD,EAAUvhI,EAAKE,EAAO4mD,EAAQzgC,GACnD05G,EAAWwB,EAAUC,EAAUxhI,EAAK8mD,EAAQ5mD,EAAOmmB,GAGzD,UAAmB1xB,IAAb8sI,EACGF,IAAaC,GAAYvB,EAAUsB,EAAUC,EAAUxB,EAASD,EAAY15G,GAC7Eo7G,GACD,CACLzrI,GAAS,EACT,MAEFsrI,IAAaA,EAAkB,eAAPthI,GAE1B,GAAIhK,IAAWsrI,EAAU,CACvB,IAAII,EAAU56E,EAAO9yC,YACjB2tH,EAAUzhI,EAAM8T,YAGhB0tH,GAAWC,KACV,gBAAiB76E,MAAU,gBAAiB5mD,IACzB,mBAAXwhI,GAAyBA,aAAmBA,GACjC,mBAAXC,GAAyBA,aAAmBA,IACvD3rI,GAAS,GAKb,OAFAqwB,EAAK,OAAWygC,GAChBzgC,EAAK,OAAWnmB,GACTlK,EAzRA4rI,CAAa96E,EAAQ5mD,EAAO8/H,EAASD,EAAYE,EAAW55G,GA3D5Dw7G,CAAgBjsI,EAAOsK,EAAO8/H,EAASD,EAAYD,GAAaz5G,IAsEzE,SAASy7G,GAAalsI,GACpB,SAAK+sB,GAAS/sB,IAwahB,SAAkB0jI,GAChB,QAASwD,GAAeA,KAAcxD,EAzadyI,CAASnsI,MAGnBq5F,GAAWr5F,GAASqnI,EAAa3B,GAChCh3H,KAAKo5H,GAAS9nI,IAsB/B,SAASotI,GAASl8E,GAChB,GAyZIm8E,GADertI,EAxZFkxD,IAyZGlxD,EAAMoe,YACtB0lF,EAAwB,mBAARupC,GAAsBA,EAAKzhH,WAAco7G,EAEtDhnI,IAAU8jG,EA3Zf,OAAOyjC,EAAWr2E,GAuZtB,IAAqBlxD,EACfqtI,EACAvpC,EAvZA1jG,EAAS,GACb,IAAK,IAAIgK,KAAOuG,OAAOugD,GACjBzlD,EAAejQ,KAAK01D,EAAQ9mD,IAAe,eAAPA,GACtChK,EAAO8J,KAAKE,GAGhB,OAAOhK,EAgBT,SAAS0qI,GAAY35C,EAAO7mF,EAAO8/H,EAASD,EAAYE,EAAW55G,GACjE,IAAIu6G,EAlhCqB,EAkhCTZ,EACZ13C,EAAYvB,EAAM11F,OAClBgwI,EAAYnhI,EAAM7O,OAEtB,GAAIi3F,GAAa+4C,KAAeT,GAAaS,EAAY/4C,GACvD,OAAO,EAGT,IAAIu4C,EAAUx6G,EAAMuxB,IAAImvC,GACxB,GAAI85C,GAAWx6G,EAAMuxB,IAAI13C,GACvB,OAAO2gI,GAAW3gI,EAEpB,IAAIX,GAAS,EACTvJ,GAAS,EACTmtI,EA/hCuB,EA+hCfnD,EAAoC,IAAI5B,QAAWzpI,EAM/D,IAJA0xB,EAAMyxB,IAAIivC,EAAO7mF,GACjBmmB,EAAMyxB,IAAI53C,EAAO6mF,KAGRxnF,EAAQ+oF,GAAW,CAC1B,IAAI86C,EAAWr8C,EAAMxnF,GACjBiiI,EAAWthI,EAAMX,GAErB,GAAIwgI,EACF,IAAI0B,EAAWb,EACXb,EAAWyB,EAAU4B,EAAU7jI,EAAOW,EAAO6mF,EAAO1gE,GACpD05G,EAAWqD,EAAU5B,EAAUjiI,EAAOwnF,EAAO7mF,EAAOmmB,GAE1D,QAAiB1xB,IAAb8sI,EAAwB,CAC1B,GAAIA,EACF,SAEFzrI,GAAS,EACT,MAGF,GAAImtI,GACF,IAAK/G,EAAUl8H,GAAO,SAASshI,EAAU6B,GACnC,GA72BarjI,EA62BOqjI,GAANF,EA52BXxrF,IAAI33C,KA62BFojI,IAAa5B,GAAYvB,EAAUmD,EAAU5B,EAAUxB,EAASD,EAAY15G,IAC/E,OAAO88G,EAAKrjI,KAAKujI,GA/2B/B,IAAyBrjI,KAi3BX,CACNhK,GAAS,EACT,YAEG,GACDotI,IAAa5B,IACXvB,EAAUmD,EAAU5B,EAAUxB,EAASD,EAAY15G,GACpD,CACLrwB,GAAS,EACT,OAKJ,OAFAqwB,EAAK,OAAW0gE,GAChB1gE,EAAK,OAAWnmB,GACTlK,EAyKT,SAAS+uI,GAAWj+E,GAClB,OApZF,SAAwBA,EAAQy4E,EAAUyF,GACxC,IAAIhvI,EAASupI,EAASz4E,GACtB,OAAOzxC,GAAQyxC,GAAU9wD,EAhuB3B,SAAmB+wF,EAAOrwF,GAKxB,IAJA,IAAI6I,GAAS,EACTlO,EAASqF,EAAOrF,OAChB8F,EAAS4vF,EAAM11F,SAEVkO,EAAQlO,GACf01F,EAAM5vF,EAASoI,GAAS7I,EAAO6I,GAEjC,OAAOwnF,EAwtB2Bk+C,CAAUjvI,EAAQgvI,EAAYl+E,IAkZzDo+E,CAAep+E,EAAQtgD,GAAM2+H,IAWtC,SAASnG,GAAWprI,EAAKoM,GACvB,IAsHiBpK,EACb2E,EAvHAvF,EAAOpB,EAAIyqI,SACf,OAuHgB,WADZ9jI,EAAItE,EADSL,EArHAoK,KAuHmB,UAARzF,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAV3E,EACU,OAAVA,GAxHDZ,EAAmB,iBAAPgL,EAAkB,SAAW,QACzChL,EAAKpB,IAWX,SAASypI,GAAUv2E,EAAQ9mD,GACzB,IAAIpK,EAxjCN,SAAkBkxD,EAAQ9mD,GACxB,OAAiB,MAAV8mD,OAAiBnyD,EAAYmyD,EAAO9mD,GAujC/BsjI,CAASx8E,EAAQ9mD,GAC7B,OAAO8hI,GAAalsI,GAASA,OAAQjB,EAp2BvC08F,GAAK7vE,UAAUy8G,MAvEf,WACE5tI,KAAKguI,SAAWb,EAAeA,EAAa,MAAQ,GACpDntI,KAAK2qB,KAAO,GAsEdq2E,GAAK7vE,UAAL,OAzDA,SAAoBxhB,GAClB,IAAIhK,EAAS3F,KAAKsnD,IAAI33C,WAAe3P,KAAKguI,SAASr+H,GAEnD,OADA3P,KAAK2qB,MAAQhlB,EAAS,EAAI,EACnBA,GAuDTq7F,GAAK7vE,UAAUo2B,IA3Cf,SAAiB53C,GACf,IAAIhL,EAAO3E,KAAKguI,SAChB,GAAIb,EAAc,CAChB,IAAIxnI,EAAShB,EAAKgL,GAClB,MA3YiB,8BA2YVhK,OAA4BrB,EAAYqB,EAEjD,OAAOqL,EAAejQ,KAAK4D,EAAMgL,GAAOhL,EAAKgL,QAAOrL,GAsCtD08F,GAAK7vE,UAAUm2B,IA1Bf,SAAiB33C,GACf,IAAIhL,EAAO3E,KAAKguI,SAChB,OAAOb,OAA8B7oI,IAAdK,EAAKgL,GAAsBqB,EAAejQ,KAAK4D,EAAMgL,IAyB9EqxF,GAAK7vE,UAAUs2B,IAZf,SAAiB93C,EAAKpK,GACpB,IAAIZ,EAAO3E,KAAKguI,SAGhB,OAFAhuI,KAAK2qB,MAAQ3qB,KAAKsnD,IAAI33C,GAAO,EAAI,EACjChL,EAAKgL,GAAQw9H,QAA0B7oI,IAAViB,EA3aV,4BA2akDA,EAC9DvF,MAuHT6tI,GAAU18G,UAAUy8G,MApFpB,WACE5tI,KAAKguI,SAAW,GAChBhuI,KAAK2qB,KAAO,GAmFdkjH,GAAU18G,UAAV,OAvEA,SAAyBxhB,GACvB,IAAIhL,EAAO3E,KAAKguI,SACZ9+H,EAAQq/H,GAAa5pI,EAAMgL,GAE/B,QAAIT,EAAQ,KAIRA,GADYvK,EAAK3D,OAAS,EAE5B2D,EAAKwP,MAELoH,EAAOxa,KAAK4D,EAAMuK,EAAO,KAEzBlP,KAAK2qB,MACA,IA0DTkjH,GAAU18G,UAAUo2B,IA9CpB,SAAsB53C,GACpB,IAAIhL,EAAO3E,KAAKguI,SACZ9+H,EAAQq/H,GAAa5pI,EAAMgL,GAE/B,OAAOT,EAAQ,OAAI5K,EAAYK,EAAKuK,GAAO,IA2C7C2+H,GAAU18G,UAAUm2B,IA/BpB,SAAsB33C,GACpB,OAAO4+H,GAAavuI,KAAKguI,SAAUr+H,IAAQ,GA+B7Ck+H,GAAU18G,UAAUs2B,IAlBpB,SAAsB93C,EAAKpK,GACzB,IAAIZ,EAAO3E,KAAKguI,SACZ9+H,EAAQq/H,GAAa5pI,EAAMgL,GAQ/B,OANIT,EAAQ,KACRlP,KAAK2qB,KACPhmB,EAAK8K,KAAK,CAACE,EAAKpK,KAEhBZ,EAAKuK,GAAO,GAAK3J,EAEZvF,MAyGT8tI,GAAS38G,UAAUy8G,MAtEnB,WACE5tI,KAAK2qB,KAAO,EACZ3qB,KAAKguI,SAAW,CACdlkH,KAAQ,IAAIk3E,GACZz9F,IAAO,IAAK0pI,GAAOY,IACnBhzE,OAAU,IAAImmC,KAkElB8sC,GAAS38G,UAAT,OArDA,SAAwBxhB,GACtB,IAAIhK,EAASgpI,GAAW3uI,KAAM2P,GAAjB,OAAgCA,GAE7C,OADA3P,KAAK2qB,MAAQhlB,EAAS,EAAI,EACnBA,GAmDTmoI,GAAS38G,UAAUo2B,IAvCnB,SAAqB53C,GACnB,OAAOg/H,GAAW3uI,KAAM2P,GAAK43C,IAAI53C,IAuCnCm+H,GAAS38G,UAAUm2B,IA3BnB,SAAqB33C,GACnB,OAAOg/H,GAAW3uI,KAAM2P,GAAK23C,IAAI33C,IA2BnCm+H,GAAS38G,UAAUs2B,IAdnB,SAAqB93C,EAAKpK,GACxB,IAAIZ,EAAOgqI,GAAW3uI,KAAM2P,GACxBgb,EAAOhmB,EAAKgmB,KAIhB,OAFAhmB,EAAK8iD,IAAI93C,EAAKpK,GACdvF,KAAK2qB,MAAQhmB,EAAKgmB,MAAQA,EAAO,EAAI,EAC9B3qB,MAyDT+tI,GAAS58G,UAAUxlB,IAAMoiI,GAAS58G,UAAU1hB,KAnB5C,SAAqBlK,GAEnB,OADAvF,KAAKguI,SAASvmF,IAAIliD,EA3qBC,6BA4qBZvF,MAkBT+tI,GAAS58G,UAAUm2B,IANnB,SAAqB/hD,GACnB,OAAOvF,KAAKguI,SAAS1mF,IAAI/hD,IAqG3B0oI,GAAM98G,UAAUy8G,MA3EhB,WACE5tI,KAAKguI,SAAW,IAAIH,GACpB7tI,KAAK2qB,KAAO,GA0EdsjH,GAAM98G,UAAN,OA9DA,SAAqBxhB,GACnB,IAAIhL,EAAO3E,KAAKguI,SACZroI,EAAShB,EAAI,OAAWgL,GAG5B,OADA3P,KAAK2qB,KAAOhmB,EAAKgmB,KACVhlB,GA0DTsoI,GAAM98G,UAAUo2B,IA9ChB,SAAkB53C,GAChB,OAAO3P,KAAKguI,SAASzmF,IAAI53C,IA8C3Bs+H,GAAM98G,UAAUm2B,IAlChB,SAAkB33C,GAChB,OAAO3P,KAAKguI,SAAS1mF,IAAI33C,IAkC3Bs+H,GAAM98G,UAAUs2B,IArBhB,SAAkB93C,EAAKpK,GACrB,IAAIZ,EAAO3E,KAAKguI,SAChB,GAAIrpI,aAAgBkpI,GAAW,CAC7B,IAAIe,EAAQjqI,EAAKqpI,SACjB,IAAKf,GAAQ2B,EAAM5tI,OAAS6tI,IAG1B,OAFAD,EAAMn/H,KAAK,CAACE,EAAKpK,IACjBvF,KAAK2qB,OAAShmB,EAAKgmB,KACZ3qB,KAET2E,EAAO3E,KAAKguI,SAAW,IAAIF,GAASc,GAItC,OAFAjqI,EAAK8iD,IAAI93C,EAAKpK,GACdvF,KAAK2qB,KAAOhmB,EAAKgmB,KACV3qB,MA+hBT,IAAI80I,GAAchB,EAA+B,SAASr9E,GACxD,OAAc,MAAVA,EACK,IAETA,EAASvgD,OAAOugD,GA9sClB,SAAqBigC,EAAOs1C,GAM1B,IALA,IAAI98H,GAAS,EACTlO,EAAkB,MAAT01F,EAAgB,EAAIA,EAAM11F,OACnC+zI,EAAW,EACXpvI,EAAS,KAEJuJ,EAAQlO,GAAQ,CACvB,IAAIuE,EAAQmxF,EAAMxnF,GACd88H,EAAUzmI,EAAO2J,EAAOwnF,KAC1B/wF,EAAOovI,KAAcxvI,GAGzB,OAAOI,EAmsCAqvI,CAAYlB,EAAiBr9E,IAAS,SAASw+E,GACpD,OAAOpI,EAAqB9rI,KAAK01D,EAAQw+E,QAsd7C,WACE,MAAO,IA5cLhF,GAASoE,GAkCb,SAAS/F,GAAQ/oI,EAAOvE,GAEtB,SADAA,EAAmB,MAAVA,EAt2CY,iBAs2CwBA,KAE1B,iBAATuE,GAAqB2lI,EAASj3H,KAAK1O,KAC1CA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQvE,EA4D7C,SAASqsI,GAASpE,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAO0D,EAAa5rI,KAAKkoI,GACzB,MAAO9oI,IACT,IACE,OAAQ8oI,EAAO,GACf,MAAO9oI,KAEX,MAAO,GAmCT,SAAS09E,GAAGt4E,EAAOsK,GACjB,OAAOtK,IAAUsK,GAAUtK,GAAUA,GAASsK,GAAUA,GA5IrDk9H,GA7yCa,qBA6yCDkD,GAAO,IAAIlD,EAAS,IAAIj9G,YAAY,MAChDm9G,GAAOgD,GAAO,IAAIhD,IAAQxC,GAC1BxnI,GAzzCY,oBAyzCDgtI,GAAOhtI,EAAQC,YAC1BgqI,GAAO+C,GAAO,IAAI/C,IAAQvC,GAC1BhkF,GApzCY,oBAozCDspF,GAAO,IAAItpF,MACzBspF,GAAS,SAAS1qI,GAChB,IAAII,EAAS0uI,GAAW9uI,GACpBqtI,EAAOjtI,GAAU+kI,EAAYnlI,EAAMoe,iBAAcrf,EACjD4uI,EAAaN,EAAOvF,GAASuF,GAAQ,GAEzC,GAAIM,EACF,OAAQA,GACN,KAAK9F,EAAoB,MAzzCf,oBA0zCV,KAAKE,EAAe,OAAO7C,EAC3B,KAAK8C,EAAmB,MAr0Cf,mBAs0CT,KAAKC,EAAe,OAAO7C,EAC3B,KAAK8C,GAAmB,MAh0Cf,mBAm0Cb,OAAO9nI,IA8IX,IAAIwoI,GAAcsG,GAAgB,WAAa,OAAO1tI,UAApB,IAAsC0tI,GAAkB,SAASlvI,GACjG,OAAOglI,GAAahlI,IAAUyL,EAAejQ,KAAKwE,EAAO,YACtDsnI,EAAqB9rI,KAAKwE,EAAO,WA0BlCyf,GAAUxU,MAAMwU,QAgDpB,IAAIi9C,GAAW+xE,GA4Of,WACE,OAAO,GA1LT,SAASp1C,GAAWr5F,GAClB,IAAK+sB,GAAS/sB,GACZ,OAAO,EAIT,IAAIi5B,EAAM61G,GAAW9uI,GACrB,MApmDY,qBAomDLi5B,GAnmDI,8BAmmDcA,GAxmDZ,0BAwmD6BA,GA7lD7B,kBA6lDgDA,EA6B/D,SAASwzG,GAASzsI,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GA5oDb,iBAwqDvB,SAAS+sB,GAAS/sB,GAChB,IAAI2E,EAAItE,EAAUL,GAClB,OAAgB,MAATA,IAA0B,UAAR2E,GAA4B,YAARA,GA2B/C,SAASqgI,GAAahlI,GACpB,OAAgB,MAATA,GAAiC,UAAhBK,EAAOL,GAoBjC,IAAIomI,GAAeD,EAhiDnB,SAAmBzC,GACjB,OAAO,SAAS1jI,GACd,OAAO0jI,EAAK1jI,IA8hDsBkuI,CAAU/H,GAnvBhD,SAA0BnmI,GACxB,OAAOglI,GAAahlI,IAClBysI,GAASzsI,EAAMvE,WAAamqI,EAAekJ,GAAW9uI,KA+wB1D,SAAS4Q,GAAKsgD,GACZ,OA1NgB,OADGlxD,EA2NAkxD,IA1NKu7E,GAASzsI,EAAMvE,UAAY49F,GAAWr5F,GA0NjC2oI,GAAcz3E,GAAUk8E,GAASl8E,GA3NhE,IAAqBlxD,EAqQrB7F,EAAOD,QAlNP,SAAiB8F,EAAOsK,GACtB,OAAO4/H,GAAYlqI,EAAOsK,+YC5lD5B,IAQIo6H,EAA8B,gBAAjB,IAAOnqI,EAAP,YAAA8F,EAAO9F,KAAsBA,GAAUA,EAAOoW,SAAWA,QAAUpW,EAGhFoqI,EAA0B,WAAf,oBAAOnqI,KAAP,YAAA6F,EAAO7F,QAAoBA,MAAQA,KAAKmW,SAAWA,QAAUnW,KAGxE05H,EAAOwQ,GAAcC,GAAYpkH,SAAS,cAATA,GAGjCymH,EAAcr2H,OAAOib,UAGrBngB,EAAiBu7H,EAAYv7H,eAO7B2iI,EAAuBpH,EAAYrhI,SAGnCi/H,EAAS1Q,EAAK7tG,OACdgoH,EAAiBzJ,EAASA,EAAO0J,iBAAcvvI,EASnD,SAAS+vI,EAAW9uI,GAClB,OAAa,MAATA,OACejB,IAAViB,EArCQ,qBAFL,gBAyCJquI,GAAkBA,KAAkB19H,OAAO3Q,GAYrD,SAAmBA,GACjB,IAAI+uI,EAAQtjI,EAAejQ,KAAKwE,EAAOquI,GACnCp1G,EAAMj5B,EAAMquI,GAEhB,IACEruI,EAAMquI,QAAkBtvI,EACxB,IAAIiwI,GAAW,EACf,MAAOp0I,IAET,IAAIwF,EAASguI,EAAqB5yI,KAAKwE,GACnCgvI,IACED,EACF/uI,EAAMquI,GAAkBp1G,SAEjBj5B,EAAMquI,IAGjB,OAAOjuI,EA5BH6uI,CAAUjvI,GAsChB,SAAwBA,GACtB,OAAOouI,EAAqB5yI,KAAKwE,GAtC7B44F,CAAe54F,GAkGrB7F,EAAOD,QAxCP,SAAoB8F,GAClB,IAkCF,SAAkBA,GAChB,IAAI2E,EAAItE,EAAUL,GAClB,OAAgB,MAATA,IAA0B,UAAR2E,GAA4B,YAARA,GApCxCooB,CAAS/sB,GACZ,OAAO,EAIT,IAAIi5B,EAAM61G,EAAW9uI,GACrB,MA9GY,qBA8GLi5B,GA7GI,8BA6GcA,GA/GZ,0BA+G6BA,GA3G7B,kBA2GgDA,4JCzF/D9+B,EAAOD,QAJP,SAAe8F,GACb,OAAgB,MAATA,0CCAT7F,EAAOD,QAJP,SAAqB8F,GACnB,YAAiBjB,IAAViB,4RChBT,IAmBI0lI,EAAe,8BAGfhB,EAA8B,gBAAjB,IAAOnqI,EAAP,YAAA8F,EAAO9F,KAAsBA,GAAUA,EAAOoW,SAAWA,QAAUpW,EAGhFoqI,EAA0B,WAAf,oBAAOnqI,KAAP,YAAA6F,EAAO7F,QAAoBA,MAAQA,KAAKmW,SAAWA,QAAUnW,KAGxE05H,EAAOwQ,GAAcC,GAAYpkH,SAAS,cAATA,GAWrC,SAASovH,EAAcx+C,EAAOnxF,GAE5B,SADamxF,EAAQA,EAAM11F,OAAS,IAyDtC,SAAqB01F,EAAOnxF,EAAO4vI,GACjC,GAAI5vI,GAAUA,EACZ,OAvBJ,SAAuBmxF,EAAOs1C,EAAWmJ,EAAWpG,GAClD,IAAI/tI,EAAS01F,EAAM11F,OACfkO,EAAQimI,GAAapG,EAAY,GAAK,GAE1C,KAAQA,EAAY7/H,MAAYA,EAAQlO,GACtC,GAAIgrI,EAAUt1C,EAAMxnF,GAAQA,EAAOwnF,GACjC,OAAOxnF,EAGX,OAAQ,EAcCkmI,CAAc1+C,EAAO2+C,EAAWF,GAEzC,IAAIjmI,EAAQimI,EAAY,EACpBn0I,EAAS01F,EAAM11F,OAEnB,OAASkO,EAAQlO,GACf,GAAI01F,EAAMxnF,KAAW3J,EACnB,OAAO2J,EAGX,OAAQ,EApEWomI,CAAY5+C,EAAOnxF,EAAO,IAAM,EAYrD,SAASgwI,EAAkB7+C,EAAOnxF,EAAOiwI,GAIvC,IAHA,IAAItmI,GAAS,EACTlO,EAAS01F,EAAQA,EAAM11F,OAAS,IAE3BkO,EAAQlO,GACf,GAAIw0I,EAAWjwI,EAAOmxF,EAAMxnF,IAC1B,OAAO,EAGX,OAAO,EAyDT,SAASmmI,EAAU9vI,GACjB,OAAOA,GAAUA,EAWnB,SAASkwI,EAAS5rD,EAAOl6E,GACvB,OAAOk6E,EAAMviC,IAAI33C,GAyCnB,SAASw8H,EAAW1kF,GAClB,IAAIv4C,GAAS,EACTvJ,EAAS6K,MAAMi3C,EAAI98B,MAKvB,OAHA88B,EAAIl8C,SAAQ,SAAShG,GACnBI,IAASuJ,GAAS3J,KAEbI,EAIT,IASMymI,EATFC,EAAa77H,MAAM2gB,UACnBm7G,EAAYxmH,SAASqL,UACrBo7G,EAAcr2H,OAAOib,UAGrBq7G,EAAa/S,EAAK,sBAGlBgT,GACEL,EAAM,SAASl/G,KAAKs/G,GAAcA,EAAWr2H,MAAQq2H,EAAWr2H,KAAKu2H,UAAY,KACvE,iBAAmBN,EAAO,GAItCO,EAAeL,EAAUphI,SAGzB8F,EAAiBu7H,EAAYv7H,eAO7BmtF,EAAiBouC,EAAYrhI,SAG7B0hI,EAAah6E,OAAO,IACtB+5E,EAAa5rI,KAAKiQ,GAAgB7E,QApMjB,sBAoMuC,QACvDA,QAAQ,yDAA0D,SAAW,KAI5EoP,EAAS8wH,EAAW9wH,OAGpB0xH,EAAMD,EAAUvT,EAAM,OACtByT,EAAMF,EAAUvT,EAAM,OACtB0T,EAAeH,EAAU92H,OAAQ,UASrC,SAAS8qF,EAAK2sC,GACZ,IAAIz+H,GAAS,EACTlO,EAAS2sI,EAAUA,EAAQ3sI,OAAS,EAGxC,IADAhB,KAAK4tI,UACI1+H,EAAQlO,GAAQ,CACvB,IAAI+pD,EAAQ4iF,EAAQz+H,GACpBlP,KAAKynD,IAAIsD,EAAM,GAAIA,EAAM,KA2F7B,SAAS8iF,EAAUF,GACjB,IAAIz+H,GAAS,EACTlO,EAAS2sI,EAAUA,EAAQ3sI,OAAS,EAGxC,IADAhB,KAAK4tI,UACI1+H,EAAQlO,GAAQ,CACvB,IAAI+pD,EAAQ4iF,EAAQz+H,GACpBlP,KAAKynD,IAAIsD,EAAM,GAAIA,EAAM,KAyG7B,SAAS+iF,EAASH,GAChB,IAAIz+H,GAAS,EACTlO,EAAS2sI,EAAUA,EAAQ3sI,OAAS,EAGxC,IADAhB,KAAK4tI,UACI1+H,EAAQlO,GAAQ,CACvB,IAAI+pD,EAAQ4iF,EAAQz+H,GACpBlP,KAAKynD,IAAIsD,EAAM,GAAIA,EAAM,KAwF7B,SAASgjF,EAAS1nI,GAChB,IAAI6I,GAAS,EACTlO,EAASqF,EAASA,EAAOrF,OAAS,EAGtC,IADAhB,KAAKguI,SAAW,IAAIF,IACX5+H,EAAQlO,GACfhB,KAAK2L,IAAItF,EAAO6I,IA4CpB,SAASq/H,EAAa73C,EAAO/mF,GAE3B,IADA,IAgOUpK,EAAOsK,EAhOb7O,EAAS01F,EAAM11F,OACZA,KACL,IA8NQuE,EA9NDmxF,EAAM11F,GAAQ,OA8NN6O,EA9NUF,IA+NApK,GAAUA,GAASsK,GAAUA,EA9NpD,OAAO7O,EAGX,OAAQ,EAWV,SAASywI,EAAalsI,GACpB,SAAK+sB,EAAS/sB,KAgIE0jI,EAhIiB1jI,EAiIxBknI,GAAeA,KAAcxD,MAkGxC,SAAoB1jI,GAGlB,IAAIi5B,EAAMlM,EAAS/sB,GAAS44F,EAAep9F,KAAKwE,GAAS,GACzD,MA3zBY,qBA2zBLi5B,GA1zBI,8BA0zBcA,EApOVogE,CAAWr5F,IAtc5B,SAAsBA,GAGpB,IAAII,GAAS,EACb,GAAa,MAATJ,GAA0C,mBAAlBA,EAAM2F,SAChC,IACEvF,KAAYJ,EAAQ,IACpB,MAAOpF,IAEX,OAAOwF,EA6b6BsmI,CAAa1mI,GAAUqnI,EAAa3B,GACzDh3H,KAuIjB,SAAkBg1H,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAO0D,EAAa5rI,KAAKkoI,GACzB,MAAO9oI,IACT,IACE,OAAQ8oI,EAAO,GACf,MAAO9oI,KAEX,MAAO,GAhJaktI,CAAS9nI,IA4H/B,IAAkB0jI,EAjalBjoC,EAAK7vE,UAAUy8G,MAnEf,WACE5tI,KAAKguI,SAAWb,EAAeA,EAAa,MAAQ,IAmEtDnsC,EAAK7vE,UAAL,OAtDA,SAAoBxhB,GAClB,OAAO3P,KAAKsnD,IAAI33C,WAAe3P,KAAKguI,SAASr+H,IAsD/CqxF,EAAK7vE,UAAUo2B,IA1Cf,SAAiB53C,GACf,IAAIhL,EAAO3E,KAAKguI,SAChB,GAAIb,EAAc,CAChB,IAAIxnI,EAAShB,EAAKgL,GAClB,MArRiB,8BAqRVhK,OAA4BrB,EAAYqB,EAEjD,OAAOqL,EAAejQ,KAAK4D,EAAMgL,GAAOhL,EAAKgL,QAAOrL,GAqCtD08F,EAAK7vE,UAAUm2B,IAzBf,SAAiB33C,GACf,IAAIhL,EAAO3E,KAAKguI,SAChB,OAAOb,OAA6B7oI,IAAdK,EAAKgL,GAAqBqB,EAAejQ,KAAK4D,EAAMgL,IAwB5EqxF,EAAK7vE,UAAUs2B,IAXf,SAAiB93C,EAAKpK,GAGpB,OAFWvF,KAAKguI,SACXr+H,GAAQw9H,QAA0B7oI,IAAViB,EApTV,4BAoTkDA,EAC9DvF,MAoHT6tI,EAAU18G,UAAUy8G,MAjFpB,WACE5tI,KAAKguI,SAAW,IAiFlBH,EAAU18G,UAAV,OArEA,SAAyBxhB,GACvB,IAAIhL,EAAO3E,KAAKguI,SACZ9+H,EAAQq/H,EAAa5pI,EAAMgL,GAE/B,QAAIT,EAAQ,KAIRA,GADYvK,EAAK3D,OAAS,EAE5B2D,EAAKwP,MAELoH,EAAOxa,KAAK4D,EAAMuK,EAAO,IAEpB,IAyDT2+H,EAAU18G,UAAUo2B,IA7CpB,SAAsB53C,GACpB,IAAIhL,EAAO3E,KAAKguI,SACZ9+H,EAAQq/H,EAAa5pI,EAAMgL,GAE/B,OAAOT,EAAQ,OAAI5K,EAAYK,EAAKuK,GAAO,IA0C7C2+H,EAAU18G,UAAUm2B,IA9BpB,SAAsB33C,GACpB,OAAO4+H,EAAavuI,KAAKguI,SAAUr+H,IAAQ,GA8B7Ck+H,EAAU18G,UAAUs2B,IAjBpB,SAAsB93C,EAAKpK,GACzB,IAAIZ,EAAO3E,KAAKguI,SACZ9+H,EAAQq/H,EAAa5pI,EAAMgL,GAO/B,OALIT,EAAQ,EACVvK,EAAK8K,KAAK,CAACE,EAAKpK,IAEhBZ,EAAKuK,GAAO,GAAK3J,EAEZvF,MAkGT8tI,EAAS38G,UAAUy8G,MA/DnB,WACE5tI,KAAKguI,SAAW,CACdlkH,KAAQ,IAAIk3E,EACZz9F,IAAO,IAAK0pI,GAAOY,GACnBhzE,OAAU,IAAImmC,IA4DlB8sC,EAAS38G,UAAT,OA/CA,SAAwBxhB,GACtB,OAAOg/H,EAAW3uI,KAAM2P,GAAjB,OAAgCA,IA+CzCm+H,EAAS38G,UAAUo2B,IAnCnB,SAAqB53C,GACnB,OAAOg/H,EAAW3uI,KAAM2P,GAAK43C,IAAI53C,IAmCnCm+H,EAAS38G,UAAUm2B,IAvBnB,SAAqB33C,GACnB,OAAOg/H,EAAW3uI,KAAM2P,GAAK23C,IAAI33C,IAuBnCm+H,EAAS38G,UAAUs2B,IAVnB,SAAqB93C,EAAKpK,GAExB,OADAopI,EAAW3uI,KAAM2P,GAAK83C,IAAI93C,EAAKpK,GACxBvF,MAyDT+tI,EAAS58G,UAAUxlB,IAAMoiI,EAAS58G,UAAU1hB,KAnB5C,SAAqBlK,GAEnB,OADAvF,KAAKguI,SAASvmF,IAAIliD,EA1iBC,6BA2iBZvF,MAkBT+tI,EAAS58G,UAAUm2B,IANnB,SAAqB/hD,GACnB,OAAOvF,KAAKguI,SAAS1mF,IAAI/hD,IA6G3B,IAAImwI,EAAcxI,GAAQ,EAAIf,EAAW,IAAIe,EAAI,CAAA,EAAG,KAAK,IAlqB1C,EAAA,EAkqBoE,SAAS7mI,GAC1F,OAAO,IAAI6mI,EAAI7mI,IAwMjB,aA7LA,SAASsoI,EAAWprI,EAAKoM,GACvB,IA0BiBpK,EACb2E,EA3BAvF,EAAOpB,EAAIyqI,SACf,OA2BgB,WADZ9jI,EAAItE,EADSL,EAzBAoK,KA2BmB,UAARzF,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAV3E,EACU,OAAVA,GA5BDZ,EAAmB,iBAAPgL,EAAkB,SAAW,QACzChL,EAAKpB,IAWX,SAASypI,EAAUv2E,EAAQ9mD,GACzB,IAAIpK,EArjBN,SAAkBkxD,EAAQ9mD,GACxB,OAAiB,MAAV8mD,OAAiBnyD,EAAYmyD,EAAO9mD,GAojB/BsjI,CAASx8E,EAAQ9mD,GAC7B,OAAO8hI,EAAalsI,GAASA,OAAQjB,EA2JvC,SAASguB,EAAS/sB,GAChB,IAAI2E,EAAItE,EAAUL,GAClB,QAASA,IAAkB,UAAR2E,GAA4B,YAARA,GAmBzCxK,EAAOD,QAhHP,SAAci3F,GACZ,OAAQA,GAASA,EAAM11F,OAzJzB,SAAkB01F,EAAO3mF,EAAUylI,GACjC,IAAItmI,GAAS,EACTqnC,EAAW2+F,EACXl0I,EAAS01F,EAAM11F,OACf20I,GAAW,EACXhwI,EAAS,GACTmtI,EAAOntI,EAEX,GAAI6vI,EACFG,GAAW,EACXp/F,EAAWg/F,OAER,GAAIv0I,GAznBY,IAynBgB,CACnC,IAAIymD,EAAM13C,EAAW,KAAO2lI,EAAUh/C,GACtC,GAAIjvC,EACF,OAAO0kF,EAAW1kF,GAEpBkuF,GAAW,EACXp/F,EAAWk/F,EACX3C,EAAO,IAAI/E,OAGX+E,EAAO/iI,EAAW,GAAKpK,EAEzByiH,EACA,OAASl5G,EAAQlO,GAAQ,CACvB,IAAIuE,EAAQmxF,EAAMxnF,GACd0mI,EAAW7lI,EAAWA,EAASxK,GAASA,EAG5C,GADAA,EAASiwI,GAAwB,IAAVjwI,EAAeA,EAAQ,EAC1CowI,GAAYC,GAAaA,EAAU,CAErC,IADA,IAAIC,EAAY/C,EAAK9xI,OACd60I,KACL,GAAI/C,EAAK+C,KAAeD,EACtB,SAASxtB,EAGTr4G,GACF+iI,EAAKrjI,KAAKmmI,GAEZjwI,EAAO8J,KAAKlK,QAEJgxC,EAASu8F,EAAM8C,EAAUJ,KAC7B1C,IAASntI,GACXmtI,EAAKrjI,KAAKmmI,GAEZjwI,EAAO8J,KAAKlK,IAGhB,OAAOI,EAyGHmwI,CAASp/C,GACT,gJClxBN,aACA,IAAI1nE,EAAWvuB,EAAQ,YACnBqmH,EAAWrmH,EAAQ,aACnBknB,EAASlnB,EAAQ,eAAeknB,OAEhCouH,EAAU,IAAIvlI,MAAM,IAExB,SAASqwF,IACPimB,EAAS/lH,KAAKf,KAAM,IAGpBA,KAAKsxD,GAAK,WACVtxD,KAAKg2I,GAAK,WACVh2I,KAAKi2I,GAAK,WACVj2I,KAAKk2I,GAAK,UA+GZ,SAASC,EAAMzjI,EAAGtS,GAChB,OAAQsS,GAAKtS,EAAMsS,IAAO,GAAKtS,EAGjC,SAASg2I,EAAKz1I,EAAG+V,EAAGlW,EAAGgzB,EAAGtO,EAAG6vC,EAAGhkD,GAC9B,OAAQolI,EAAMx1I,GAAM+V,EAAIlW,GAAQkW,EAAK8c,GAAMtO,EAAI6vC,EAAK,EAAGhkD,GAAK2F,EAAK,EAGnE,SAAS2/H,EAAK11I,EAAG+V,EAAGlW,EAAGgzB,EAAGtO,EAAG6vC,EAAGhkD,GAC9B,OAAQolI,EAAMx1I,GAAM+V,EAAI8c,EAAMhzB,GAAMgzB,GAAOtO,EAAI6vC,EAAK,EAAGhkD,GAAK2F,EAAK,EAGnE,SAAS4/H,EAAK31I,EAAG+V,EAAGlW,EAAGgzB,EAAGtO,EAAG6vC,EAAGhkD,GAC9B,OAAQolI,EAAMx1I,GAAK+V,EAAIlW,EAAIgzB,GAAKtO,EAAI6vC,EAAK,EAAGhkD,GAAK2F,EAAK,EAGxD,SAAS6/H,EAAK51I,EAAG+V,EAAGlW,EAAGgzB,EAAGtO,EAAG6vC,EAAGhkD,GAC9B,OAAQolI,EAAMx1I,GAAMH,GAAKkW,GAAM8c,IAAQtO,EAAI6vC,EAAK,EAAGhkD,GAAK2F,EAAK,EA7H/DsY,EAAS6xE,EAAKimB,GAEdjmB,EAAI1vE,UAAU82D,QAAU,WAEtB,IADA,IAAIlE,EAAIgyD,EACCx1I,EAAI,EAAGA,EAAI,KAAMA,EAAGwjF,EAAExjF,GAAKP,KAAK+mH,OAAO/qB,YAAgB,EAAJz7F,GAE5D,IAAII,EAAIX,KAAKsxD,GACT56C,EAAI1W,KAAKg2I,GACTx1I,EAAIR,KAAKi2I,GACTziH,EAAIxzB,KAAKk2I,GAEbv1I,EAAIy1I,EAAIz1I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,GAAI,WAAY,GACtCvwD,EAAI4iH,EAAI5iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,GAAI,WAAY,IACtCvjF,EAAI41I,EAAI51I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,GAAI,UAAY,IACtCrtE,EAAI0/H,EAAI1/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,GAAI,WAAY,IACtCpjF,EAAIy1I,EAAIz1I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,GAAI,WAAY,GACtCvwD,EAAI4iH,EAAI5iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,GAAI,WAAY,IACtCvjF,EAAI41I,EAAI51I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,GAAI,WAAY,IACtCrtE,EAAI0/H,EAAI1/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,GAAI,WAAY,IACtCpjF,EAAIy1I,EAAIz1I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,GAAI,WAAY,GACtCvwD,EAAI4iH,EAAI5iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,GAAI,WAAY,IACtCvjF,EAAI41I,EAAI51I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,IAAK,WAAY,IACvCrtE,EAAI0/H,EAAI1/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,IAAK,WAAY,IACvCpjF,EAAIy1I,EAAIz1I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,IAAK,WAAY,GACvCvwD,EAAI4iH,EAAI5iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,IAAK,WAAY,IACvCvjF,EAAI41I,EAAI51I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,IAAK,WAAY,IAGvCpjF,EAAI01I,EAAI11I,EAFR+V,EAAI0/H,EAAI1/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,IAAK,WAAY,IAEzBvjF,EAAGgzB,EAAGuwD,EAAE,GAAI,WAAY,GACtCvwD,EAAI6iH,EAAI7iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,GAAI,WAAY,GACtCvjF,EAAI61I,EAAI71I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,IAAK,UAAY,IACvCrtE,EAAI2/H,EAAI3/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,GAAI,WAAY,IACtCpjF,EAAI01I,EAAI11I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,GAAI,WAAY,GACtCvwD,EAAI6iH,EAAI7iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,IAAK,SAAY,GACvCvjF,EAAI61I,EAAI71I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,IAAK,WAAY,IACvCrtE,EAAI2/H,EAAI3/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,GAAI,WAAY,IACtCpjF,EAAI01I,EAAI11I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,GAAI,UAAY,GACtCvwD,EAAI6iH,EAAI7iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,IAAK,WAAY,GACvCvjF,EAAI61I,EAAI71I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,GAAI,WAAY,IACtCrtE,EAAI2/H,EAAI3/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,GAAI,WAAY,IACtCpjF,EAAI01I,EAAI11I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,IAAK,WAAY,GACvCvwD,EAAI6iH,EAAI7iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,GAAI,WAAY,GACtCvjF,EAAI61I,EAAI71I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,GAAI,WAAY,IAGtCpjF,EAAI21I,EAAI31I,EAFR+V,EAAI2/H,EAAI3/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,IAAK,WAAY,IAEzBvjF,EAAGgzB,EAAGuwD,EAAE,GAAI,WAAY,GACtCvwD,EAAI8iH,EAAI9iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,GAAI,WAAY,IACtCvjF,EAAI81I,EAAI91I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,IAAK,WAAY,IACvCrtE,EAAI4/H,EAAI5/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,IAAK,WAAY,IACvCpjF,EAAI21I,EAAI31I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,GAAI,WAAY,GACtCvwD,EAAI8iH,EAAI9iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,GAAI,WAAY,IACtCvjF,EAAI81I,EAAI91I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,GAAI,WAAY,IACtCrtE,EAAI4/H,EAAI5/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,IAAK,WAAY,IACvCpjF,EAAI21I,EAAI31I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,IAAK,UAAY,GACvCvwD,EAAI8iH,EAAI9iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,GAAI,WAAY,IACtCvjF,EAAI81I,EAAI91I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,GAAI,WAAY,IACtCrtE,EAAI4/H,EAAI5/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,GAAI,SAAY,IACtCpjF,EAAI21I,EAAI31I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,GAAI,WAAY,GACtCvwD,EAAI8iH,EAAI9iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,IAAK,WAAY,IACvCvjF,EAAI81I,EAAI91I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,IAAK,UAAY,IAGvCpjF,EAAI41I,EAAI51I,EAFR+V,EAAI4/H,EAAI5/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,GAAI,WAAY,IAExBvjF,EAAGgzB,EAAGuwD,EAAE,GAAI,WAAY,GACtCvwD,EAAI+iH,EAAI/iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,GAAI,WAAY,IACtCvjF,EAAI+1I,EAAI/1I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,IAAK,WAAY,IACvCrtE,EAAI6/H,EAAI7/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,GAAI,WAAY,IACtCpjF,EAAI41I,EAAI51I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,IAAK,WAAY,GACvCvwD,EAAI+iH,EAAI/iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,GAAI,WAAY,IACtCvjF,EAAI+1I,EAAI/1I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,IAAK,WAAY,IACvCrtE,EAAI6/H,EAAI7/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,GAAI,WAAY,IACtCpjF,EAAI41I,EAAI51I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,GAAI,WAAY,GACtCvwD,EAAI+iH,EAAI/iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,IAAK,WAAY,IACvCvjF,EAAI+1I,EAAI/1I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,GAAI,WAAY,IACtCrtE,EAAI6/H,EAAI7/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,IAAK,WAAY,IACvCpjF,EAAI41I,EAAI51I,EAAG+V,EAAGlW,EAAGgzB,EAAGuwD,EAAE,GAAI,WAAY,GACtCvwD,EAAI+iH,EAAI/iH,EAAG7yB,EAAG+V,EAAGlW,EAAGujF,EAAE,IAAK,WAAY,IACvCvjF,EAAI+1I,EAAI/1I,EAAGgzB,EAAG7yB,EAAG+V,EAAGqtE,EAAE,GAAI,UAAY,IACtCrtE,EAAI6/H,EAAI7/H,EAAGlW,EAAGgzB,EAAG7yB,EAAGojF,EAAE,GAAI,WAAY,IAEtC/jF,KAAKsxD,GAAMtxD,KAAKsxD,GAAK3wD,EAAK,EAC1BX,KAAKg2I,GAAMh2I,KAAKg2I,GAAKt/H,EAAK,EAC1B1W,KAAKi2I,GAAMj2I,KAAKi2I,GAAKz1I,EAAK,EAC1BR,KAAKk2I,GAAMl2I,KAAKk2I,GAAK1iH,EAAK,GAG5BqtE,EAAI1vE,UAAUm2F,QAAU,WAEtBtnH,KAAK+mH,OAAO/mH,KAAKinH,gBAAkB,IAC/BjnH,KAAKinH,aAAe,KACtBjnH,KAAK+mH,OAAOp9G,KAAK,EAAG3J,KAAKinH,aAAc,IACvCjnH,KAAKioF,UACLjoF,KAAKinH,aAAe,GAGtBjnH,KAAK+mH,OAAOp9G,KAAK,EAAG3J,KAAKinH,aAAc,IACvCjnH,KAAK+mH,OAAOr8F,cAAc1qB,KAAKknH,QAAQ,GAAI,IAC3ClnH,KAAK+mH,OAAOr8F,cAAc1qB,KAAKknH,QAAQ,GAAI,IAC3ClnH,KAAKioF,UAGL,IAAIlgE,EAASJ,EAAOm7D,YAAY,IAKhC,OAJA/6D,EAAO+0E,aAAa98F,KAAKsxD,GAAI,GAC7BvpC,EAAO+0E,aAAa98F,KAAKg2I,GAAI,GAC7BjuH,EAAO+0E,aAAa98F,KAAKi2I,GAAI,GAC7BluH,EAAO+0E,aAAa98F,KAAKk2I,GAAI,IACtBnuH,GAuBTroB,EAAOD,QAAUohG,uFCjJjB,IAAI5R,EAAKxuF,EAAQ,SACb0gH,EAAU1gH,EAAQ,WAEtB,SAAS+1I,EAAYpzD,GACnBpjF,KAAKojF,KAAOA,GAAQ,IAAI+9B,EAAQh+B,KAElCzjF,EAAOD,QAAU+2I,EAEjBA,EAAYztI,OAAS,SAAgBq6E,GACnC,OAAO,IAAIozD,EAAYpzD,IAGzBozD,EAAYrlH,UAAUslH,WAAa,SAAoBr2I,GACrD,IAAIoiC,EAAMpiC,EAAEwvE,YACR8mE,EAAYlvI,KAAK2lE,KAAK3qC,EAAM,GAIhC,GACE,IAAI7hC,EAAI,IAAIsuF,EAAGjvF,KAAKojF,KAAKC,SAASqzD,UAC7B/1I,EAAEksE,IAAIzsE,IAAM,GAEnB,OAAOO,GAGT61I,EAAYrlH,UAAUwlH,WAAa,SAAoBrjI,EAAOiZ,GAE5D,IAAI5B,EAAO4B,EAAKqlD,IAAIt+D,GACpB,OAAOA,EAAM3H,IAAI3L,KAAKy2I,WAAW9rH,KAGnC6rH,EAAYrlH,UAAUld,KAAO,SAAc7T,EAAG20D,EAAG99C,GAC/C,IAAIurB,EAAMpiC,EAAEwvE,YACRpD,EAAMyiB,EAAG1N,KAAKnhF,GACdw2I,EAAO,IAAI3nD,EAAG,GAAGlR,MAAMvR,GAEtBzX,IACHA,EAAIvtD,KAAK6H,IAAI,EAAImzB,EAAM,GAAM,IAI/B,IADA,IAAIq0G,EAAKz2I,EAAE06E,KAAK,GACP/pE,EAAI,GAAI8lI,EAAGzmE,MAAMr/D,GAAIA,KAM9B,IALA,IAAIyiB,EAAIpzB,EAAEo6E,KAAKzpE,GAEX+lI,EAAMD,EAAG94D,MAAMvR,GAGZzX,EAAI,EAAGA,IAAK,CACjB,IAAIp0D,EAAIX,KAAK22I,WAAW,IAAI1nD,EAAG,GAAI4nD,GAC/B5/H,GACFA,EAAGtW,GAEL,IAAI+R,EAAI/R,EAAEo9E,MAAMvR,GAAK8S,OAAO9rD,GAC5B,GAAoB,IAAhB9gB,EAAEm6D,IAAI+pE,IAA8B,IAAflkI,EAAEm6D,IAAIiqE,GAA/B,CAGA,IAAK,IAAIv2I,EAAI,EAAGA,EAAIwQ,EAAGxQ,IAAK,CAG1B,GAAoB,KAFpBmS,EAAIA,EAAEqsE,UAEAlS,IAAI+pE,GACR,OAAO,EACT,GAAmB,IAAflkI,EAAEm6D,IAAIiqE,GACR,MAGJ,GAAIv2I,IAAMwQ,EACR,OAAO,GAGX,OAvBY,GA0BdylI,EAAYrlH,UAAU4lH,WAAa,SAAoB32I,EAAG20D,GACxD,IAAIvyB,EAAMpiC,EAAEwvE,YACRpD,EAAMyiB,EAAG1N,KAAKnhF,GACdw2I,EAAO,IAAI3nD,EAAG,GAAGlR,MAAMvR,GAEtBzX,IACHA,EAAIvtD,KAAK6H,IAAI,EAAImzB,EAAM,GAAM,IAI/B,IADA,IAAIq0G,EAAKz2I,EAAE06E,KAAK,GACP/pE,EAAI,GAAI8lI,EAAGzmE,MAAMr/D,GAAIA,KAK9B,IAJA,IAAIyiB,EAAIpzB,EAAEo6E,KAAKzpE,GAEX+lI,EAAMD,EAAG94D,MAAMvR,GAEZzX,EAAI,EAAGA,IAAK,CACjB,IAAIp0D,EAAIX,KAAK22I,WAAW,IAAI1nD,EAAG,GAAI4nD,GAE/Bz6D,EAAIh8E,EAAEu8E,IAAIh8E,GACd,GAAkB,IAAdy7E,EAAEY,KAAK,GACT,OAAOZ,EAET,IAAI1pE,EAAI/R,EAAEo9E,MAAMvR,GAAK8S,OAAO9rD,GAC5B,GAAoB,IAAhB9gB,EAAEm6D,IAAI+pE,IAA8B,IAAflkI,EAAEm6D,IAAIiqE,GAA/B,CAGA,IAAK,IAAIv2I,EAAI,EAAGA,EAAIwQ,EAAGxQ,IAAK,CAG1B,GAAoB,KAFpBmS,EAAIA,EAAEqsE,UAEAlS,IAAI+pE,GACR,OAAOlkI,EAAEyrE,UAAUrD,KAAK,GAAG6B,IAAIv8E,GACjC,GAAmB,IAAfsS,EAAEm6D,IAAIiqE,GACR,MAGJ,GAAIv2I,IAAMwQ,EAER,OADA2B,EAAIA,EAAEqsE,UACGZ,UAAUrD,KAAK,GAAG6B,IAAIv8E,IAInC,OAAO,qJC/GT,SAAS2Z,EAAOsY,EAAK+0C,GACnB,IAAK/0C,EACH,MAAM,IAAIzxB,MAAMwmE,GAAO,oBAJ3B1nE,EAAOD,QAAUsa,EAOjBA,EAAOmqD,MAAQ,SAAqBztD,EAAGvW,EAAGknE,GACxC,GAAI3wD,GAAKvW,EACP,MAAM,IAAIU,MAAMwmE,GAAQ,qBAAuB3wD,EAAI,OAASvW,8BCThE,aAEA,IAAIwtB,EAAQjuB,EAkCZ,SAAS2/G,EAAM3xC,GACb,OAAoB,IAAhBA,EAAKzsE,OACA,IAAMysE,EAENA,EAIX,SAASqtB,EAAM1zB,GAEb,IADA,IAAIjR,EAAM,GACD51D,EAAI,EAAGA,EAAI6mE,EAAIpmE,OAAQT,IAC9B41D,GAAOipD,EAAMh4C,EAAI7mE,GAAG2K,SAAS,KAC/B,OAAOirD,EAdTzoC,EAAM+9C,QA9BN,SAAiBrE,EAAKnR,GACpB,GAAIzlD,MAAMwU,QAAQoiD,GAChB,OAAOA,EAAInpD,QACb,IAAKmpD,EACH,MAAO,GACT,IAAIjR,EAAM,GACV,GAAmB,iBAARiR,EAAkB,CAC3B,IAAK,IAAI7mE,EAAI,EAAGA,EAAI6mE,EAAIpmE,OAAQT,IAC9B41D,EAAI51D,GAAc,EAAT6mE,EAAI7mE,GACf,OAAO41D,EAET,GAAY,QAARF,EAAe,EACjBmR,EAAMA,EAAIj7D,QAAQ,eAAgB,KAC1BnL,OAAS,GAAM,IACrBomE,EAAM,IAAMA,GACd,IAAS7mE,EAAI,EAAGA,EAAI6mE,EAAIpmE,OAAQT,GAAK,EACnC41D,EAAI1mD,KAAK+d,SAAS45C,EAAI7mE,GAAK6mE,EAAI7mE,EAAI,GAAI,UAEzC,IAASA,EAAI,EAAGA,EAAI6mE,EAAIpmE,OAAQT,IAAK,CACnC,IAAIC,EAAI4mE,EAAI/9C,WAAW9oB,GACnBsvE,EAAKrvE,GAAK,EACV4tE,EAAS,IAAJ5tE,EACLqvE,EACF1Z,EAAI1mD,KAAKogE,EAAIzB,GAEbjY,EAAI1mD,KAAK2+D,GAGf,OAAOjY,GAUTzoC,EAAM0xF,MAAQA,EAQd1xF,EAAMotE,MAAQA,EAEdptE,EAAMpT,OAAS,SAAgBwnE,EAAK7rB,GAClC,MAAY,QAARA,EACK6kC,EAAMhZ,GAENA,6BCvDX,aAEA,IAMIyyC,EAAO,IAEX16G,EARgBpZ,EAAQ,sBAAsBoZ,QAQvC06G,EANS9zH,EAAQ,iBACRA,EAAQ,iBACRA,EAAQ,yBAMxBf,EAAOD,QAAU80H,uHCbjB,aAGA,IAAIyiB,EAAev2I,EAAQ,kBACvBitB,EAAejtB,EAAQ,kBACvBw2I,EAAex2I,EAAQ,mBACvB2mE,EAAe3mE,EAAQ,mBACvBy2I,EAAez2I,EAAQ,kBAEvByK,EAAWgL,OAAOib,UAAUjmB,SA8GhC,SAASisI,EAAQz0I,GACf,KAAM1C,gBAAgBm3I,GAAU,OAAO,IAAIA,EAAQz0I,GAEnD1C,KAAK0C,QAAUgrB,EAAM7T,OAAO,CAC1B+O,OAtGwB,EAuGxBo7C,OAnGc,EAoGdozE,UAAW,MACXC,WAAY,GACZC,SAAU,EACVC,SAzGwB,EA0GxB1qH,GAAI,IACHnqB,GAAW,IAEd,IAAI80I,EAAMx3I,KAAK0C,QAEX80I,EAAI70E,KAAQ60E,EAAIH,WAAa,EAC/BG,EAAIH,YAAcG,EAAIH,WAGfG,EAAIC,MAASD,EAAIH,WAAa,GAAOG,EAAIH,WAAa,KAC7DG,EAAIH,YAAc,IAGpBr3I,KAAK8rB,IAAS,EACd9rB,KAAKonE,IAAS,GACdpnE,KAAK03I,OAAS,EACd13I,KAAKmrD,OAAS,GAEdnrD,KAAK23I,KAAO,IAAIT,EAChBl3I,KAAK23I,KAAKC,UAAY,EAEtB,IAAIpO,EAASwN,EAAaa,aACxB73I,KAAK23I,KACLH,EAAI5uH,MACJ4uH,EAAIxzE,OACJwzE,EAAIH,WACJG,EAAIF,SACJE,EAAID,UAGN,GA9IoB,IA8IhB/N,EACF,MAAM,IAAI5oI,MAAMwmE,EAAIoiE,IAOtB,GAJIgO,EAAIpnI,QACN4mI,EAAac,iBAAiB93I,KAAK23I,KAAMH,EAAIpnI,QAG3ConI,EAAIO,WAAY,CAClB,IAAIC,EAaJ,GATEA,EAF4B,iBAAnBR,EAAIO,WAENd,EAAQ/V,WAAWsW,EAAIO,YACa,yBAAlC7sI,EAASnK,KAAKy2I,EAAIO,YACpB,IAAIt1D,WAAW+0D,EAAIO,YAEnBP,EAAIO,WA/JK,KAkKlBvO,EAASwN,EAAaiB,qBAAqBj4I,KAAK23I,KAAMK,IAGpD,MAAM,IAAIp3I,MAAMwmE,EAAIoiE,IAGtBxpI,KAAKk4I,WAAY,GAyKrB,SAASC,EAAQ1zE,EAAO/hE,GACtB,IAAI01I,EAAW,IAAIjB,EAAQz0I,GAK3B,GAHA01I,EAAS3oI,KAAKg1D,GAAO,GAGjB2zE,EAAStsH,IAAO,MAAMssH,EAAShxE,KAAOA,EAAIgxE,EAAStsH,KAEvD,OAAOssH,EAASzyI,OAhJlBwxI,EAAQhmH,UAAU1hB,KAAO,SAAU9K,EAAMu2E,GACvC,IAEIsuD,EAAQ1hD,EAFR6vD,EAAO33I,KAAK23I,KACZP,EAAYp3I,KAAK0C,QAAQ00I,UAG7B,GAAIp3I,KAAK03I,MAAS,OAAO,EAEzB5vD,EAAS5M,MAAWA,EAAQA,GAAkB,IAATA,EAlNjB,EADA,EAsNA,iBAATv2E,EAETgzI,EAAKlzE,MAAQwyE,EAAQ/V,WAAWv8H,GACC,yBAAxBuG,EAASnK,KAAK4D,GACvBgzI,EAAKlzE,MAAQ,IAAIge,WAAW99E,GAE5BgzI,EAAKlzE,MAAQ9/D,EAGfgzI,EAAKU,QAAU,EACfV,EAAKW,SAAWX,EAAKlzE,MAAMzjE,OAE3B,EAAG,CAQD,GAPuB,IAAnB22I,EAAKC,YACPD,EAAK/2D,OAAS,IAAIlzD,EAAM6qH,KAAKnB,GAC7BO,EAAKa,SAAW,EAChBb,EAAKC,UAAYR,GAlOD,KAoOlB5N,EAASwN,EAAamB,QAAQR,EAAM7vD,KArOlB,IAuOa0hD,EAG7B,OAFAxpI,KAAKy4I,MAAMjP,GACXxpI,KAAK03I,OAAQ,GACN,EAEc,IAAnBC,EAAKC,YAAsC,IAAlBD,EAAKW,UA9OhB,IA8OmCxwD,GA1OnC,IA0OyDA,KACjD,WAApB9nF,KAAK0C,QAAQmqB,GACf7sB,KAAKm1H,OAAO8hB,EAAQyB,cAAchrH,EAAMirH,UAAUhB,EAAK/2D,OAAQ+2D,EAAKa,YAEpEx4I,KAAKm1H,OAAOznG,EAAMirH,UAAUhB,EAAK/2D,OAAQ+2D,EAAKa,mBAG1Cb,EAAKW,SAAW,GAAwB,IAAnBX,EAAKC,YAlPhB,IAkPoCpO,GAGxD,OAxPoB,IAwPhB1hD,GACF0hD,EAASwN,EAAa4B,WAAW54I,KAAK23I,MACtC33I,KAAKy4I,MAAMjP,GACXxpI,KAAK03I,OAAQ,EAzPK,IA0PXlO,GAxPW,IA4PhB1hD,IACF9nF,KAAKy4I,MA/Pa,GAgQlBd,EAAKC,UAAY,GACV,IAgBXT,EAAQhmH,UAAUgkG,OAAS,SAAU3tG,GACnCxnB,KAAKmrD,OAAO17C,KAAK+X,IAcnB2vH,EAAQhmH,UAAUsnH,MAAQ,SAAUjP,GAhSd,IAkShBA,IACsB,WAApBxpI,KAAK0C,QAAQmqB,GACf7sB,KAAK2F,OAAS3F,KAAKmrD,OAAO7+C,KAAK,IAE/BtM,KAAK2F,OAAS+nB,EAAMmrH,cAAc74I,KAAKmrD,SAG3CnrD,KAAKmrD,OAAS,GACdnrD,KAAK8rB,IAAM09G,EACXxpI,KAAKonE,IAAMpnE,KAAK23I,KAAKvwE,KAgFvB3nE,EAAQ03I,QAAUA,EAClB13I,EAAQ04I,QAAUA,EAClB14I,EAAQq5I,WAxBR,SAAoBr0E,EAAO/hE,GAGzB,OAFAA,EAAUA,GAAW,IACbigE,KAAM,EACPw1E,EAAQ1zE,EAAO/hE,IAsBxBjD,EAAQg4I,KAVR,SAAchzE,EAAO/hE,GAGnB,OAFAA,EAAUA,GAAW,IACb+0I,MAAO,EACRU,EAAQ1zE,EAAO/hE,wICxYxB,aAGA,IAAIq2I,EAAet4I,EAAQ,kBACvBitB,EAAejtB,EAAQ,kBACvBw2I,EAAex2I,EAAQ,mBACvBD,EAAeC,EAAQ,oBACvB2mE,EAAe3mE,EAAQ,mBACvBy2I,EAAez2I,EAAQ,kBACvBu4I,EAAev4I,EAAQ,mBAEvByK,EAAWgL,OAAOib,UAAUjmB,SAiFhC,SAAS+tI,EAAQv2I,GACf,KAAM1C,gBAAgBi5I,GAAU,OAAO,IAAIA,EAAQv2I,GAEnD1C,KAAK0C,QAAUgrB,EAAM7T,OAAO,CAC1Bu9H,UAAW,MACXC,WAAY,EACZxqH,GAAI,IACHnqB,GAAW,IAEd,IAAI80I,EAAMx3I,KAAK0C,QAIX80I,EAAI70E,KAAQ60E,EAAIH,YAAc,GAAOG,EAAIH,WAAa,KACxDG,EAAIH,YAAcG,EAAIH,WACC,IAAnBG,EAAIH,aAAoBG,EAAIH,YAAc,OAI3CG,EAAIH,YAAc,GAAOG,EAAIH,WAAa,KACzC30I,GAAWA,EAAQ20I,aACvBG,EAAIH,YAAc,IAKfG,EAAIH,WAAa,IAAQG,EAAIH,WAAa,IAGf,IAAR,GAAjBG,EAAIH,cACPG,EAAIH,YAAc,IAItBr3I,KAAK8rB,IAAS,EACd9rB,KAAKonE,IAAS,GACdpnE,KAAK03I,OAAS,EACd13I,KAAKmrD,OAAS,GAEdnrD,KAAK23I,KAAS,IAAIT,EAClBl3I,KAAK23I,KAAKC,UAAY,EAEtB,IAAIpO,EAAUuP,EAAaG,aACzBl5I,KAAK23I,KACLH,EAAIH,YAGN,GAAI7N,IAAWhpI,EAAE24I,KACf,MAAM,IAAIv4I,MAAMwmE,EAAIoiE,IAQtB,GALAxpI,KAAKoQ,OAAS,IAAI4oI,EAElBD,EAAaK,iBAAiBp5I,KAAK23I,KAAM33I,KAAKoQ,QAG1ConI,EAAIO,aAEwB,iBAAnBP,EAAIO,WACbP,EAAIO,WAAad,EAAQ/V,WAAWsW,EAAIO,YACG,yBAAlC7sI,EAASnK,KAAKy2I,EAAIO,cAC3BP,EAAIO,WAAa,IAAIt1D,WAAW+0D,EAAIO,aAElCP,EAAI70E,MACN6mE,EAASuP,EAAaM,qBAAqBr5I,KAAK23I,KAAMH,EAAIO,eAC3Cv3I,EAAE24I,MACf,MAAM,IAAIv4I,MAAMwmE,EAAIoiE,IAgO5B,SAAS8P,EAAQ70E,EAAO/hE,GACtB,IAAI62I,EAAW,IAAIN,EAAQv2I,GAK3B,GAHA62I,EAAS9pI,KAAKg1D,GAAO,GAGjB80E,EAASztH,IAAO,MAAMytH,EAASnyE,KAAOA,EAAImyE,EAASztH,KAEvD,OAAOytH,EAAS5zI,OAtMlBszI,EAAQ9nH,UAAU1hB,KAAO,SAAU9K,EAAMu2E,GACvC,IAGIsuD,EAAQ1hD,EACR0xD,EAAejyD,EAAMkyD,EAJrB9B,EAAO33I,KAAK23I,KACZP,EAAYp3I,KAAK0C,QAAQ00I,UACzBW,EAAa/3I,KAAK0C,QAAQq1I,WAM1B2B,GAAgB,EAEpB,GAAI15I,KAAK03I,MAAS,OAAO,EACzB5vD,EAAS5M,MAAWA,EAAQA,GAAkB,IAATA,EAAiB16E,EAAEm5I,SAAWn5I,EAAEo5I,WAGjD,iBAATj1I,EAETgzI,EAAKlzE,MAAQwyE,EAAQ4C,cAAcl1I,GACF,yBAAxBuG,EAASnK,KAAK4D,GACvBgzI,EAAKlzE,MAAQ,IAAIge,WAAW99E,GAE5BgzI,EAAKlzE,MAAQ9/D,EAGfgzI,EAAKU,QAAU,EACfV,EAAKW,SAAWX,EAAKlzE,MAAMzjE,OAE3B,EAAG,CAkBD,GAjBuB,IAAnB22I,EAAKC,YACPD,EAAK/2D,OAAS,IAAIlzD,EAAM6qH,KAAKnB,GAC7BO,EAAKa,SAAW,EAChBb,EAAKC,UAAYR,IAGnB5N,EAASuP,EAAaO,QAAQ3B,EAAMn3I,EAAEo5I,eAEvBp5I,EAAEs5I,aAAe/B,IAC9BvO,EAASuP,EAAaM,qBAAqBr5I,KAAK23I,KAAMI,IAGpDvO,IAAWhpI,EAAEu5I,cAAiC,IAAlBL,IAC9BlQ,EAAShpI,EAAE24I,KACXO,GAAgB,GAGdlQ,IAAWhpI,EAAEw5I,cAAgBxQ,IAAWhpI,EAAE24I,KAG5C,OAFAn5I,KAAKy4I,MAAMjP,GACXxpI,KAAK03I,OAAQ,GACN,EAGLC,EAAKa,WACgB,IAAnBb,EAAKC,WAAmBpO,IAAWhpI,EAAEw5I,eAAmC,IAAlBrC,EAAKW,UAAmBxwD,IAAUtnF,EAAEm5I,UAAY7xD,IAAUtnF,EAAEy5I,gBAE5F,WAApBj6I,KAAK0C,QAAQmqB,IAEf2sH,EAAgBvC,EAAQxV,WAAWkW,EAAK/2D,OAAQ+2D,EAAKa,UAErDjxD,EAAOowD,EAAKa,SAAWgB,EACvBC,EAAUxC,EAAQ3V,WAAWqW,EAAK/2D,OAAQ44D,GAG1C7B,EAAKa,SAAWjxD,EAChBowD,EAAKC,UAAYR,EAAY7vD,EACzBA,GAAQ75D,EAAMwsH,SAASvC,EAAK/2D,OAAQ+2D,EAAK/2D,OAAQ44D,EAAejyD,EAAM,GAE1EvnF,KAAKm1H,OAAOskB,IAGZz5I,KAAKm1H,OAAOznG,EAAMirH,UAAUhB,EAAK/2D,OAAQ+2D,EAAKa,aAY9B,IAAlBb,EAAKW,UAAqC,IAAnBX,EAAKC,YAC9B8B,GAAgB,UAGV/B,EAAKW,SAAW,GAAwB,IAAnBX,EAAKC,YAAoBpO,IAAWhpI,EAAEw5I,cAOrE,OALIxQ,IAAWhpI,EAAEw5I,eACflyD,EAAQtnF,EAAEm5I,UAIR7xD,IAAUtnF,EAAEm5I,UACdnQ,EAASuP,EAAaoB,WAAWn6I,KAAK23I,MACtC33I,KAAKy4I,MAAMjP,GACXxpI,KAAK03I,OAAQ,EACNlO,IAAWhpI,EAAE24I,MAIlBrxD,IAAUtnF,EAAEy5I,eACdj6I,KAAKy4I,MAAMj4I,EAAE24I,MACbxB,EAAKC,UAAY,GACV,IAgBXqB,EAAQ9nH,UAAUgkG,OAAS,SAAU3tG,GACnCxnB,KAAKmrD,OAAO17C,KAAK+X,IAcnByxH,EAAQ9nH,UAAUsnH,MAAQ,SAAUjP,GAE9BA,IAAWhpI,EAAE24I,OACS,WAApBn5I,KAAK0C,QAAQmqB,GAGf7sB,KAAK2F,OAAS3F,KAAKmrD,OAAO7+C,KAAK,IAE/BtM,KAAK2F,OAAS+nB,EAAMmrH,cAAc74I,KAAKmrD,SAG3CnrD,KAAKmrD,OAAS,GACdnrD,KAAK8rB,IAAM09G,EACXxpI,KAAKonE,IAAMpnE,KAAK23I,KAAKvwE,KAgFvB3nE,EAAQw5I,QAAUA,EAClBx5I,EAAQ65I,QAAUA,EAClB75I,EAAQ26I,WAnBR,SAAoB31E,EAAO/hE,GAGzB,OAFAA,EAAUA,GAAW,IACbigE,KAAM,EACP22E,EAAQ70E,EAAO/hE,IAiBxBjD,EAAQ46I,OAAUf,mLCtalB,kPAGA,IAAIgB,EAAmC,oBAAf73D,YACgB,oBAAhB4xC,aACe,oBAAfkmB,WAExB,SAASC,EAAKnpH,EAAK1hB,GACjB,OAAOuG,OAAOib,UAAUngB,eAAejQ,KAAKswB,EAAK1hB,GAGnDlQ,EAAQoa,OAAS,SAAUwX,GAEzB,IADA,IAAIynG,EAAUtoH,MAAM2gB,UAAUlT,MAAMld,KAAKgG,UAAW,GAC7C+xH,EAAQ93H,QAAQ,CACrB,IAAIgpI,EAASlR,EAAQxyH,QACrB,GAAK0jI,EAAL,CAEA,GAAsB,WAAlBpkI,EAAOokI,GACT,MAAM,IAAI35E,UAAU25E,EAAS,sBAG/B,IAAK,IAAIlpI,KAAKkpI,EACRwQ,EAAKxQ,EAAQlpI,KACfuwB,EAAIvwB,GAAKkpI,EAAOlpI,KAKtB,OAAOuwB,GAKT5xB,EAAQk5I,UAAY,SAAUnqH,EAAK7D,GACjC,OAAI6D,EAAIxtB,SAAW2pB,EAAe6D,EAC9BA,EAAI8sE,SAAmB9sE,EAAI8sE,SAAS,EAAG3wE,IAC3C6D,EAAIxtB,OAAS2pB,EACN6D,IAIT,IAAIisH,EAAU,CACZP,SAAU,SAAUl3H,EAAMD,EAAK23H,EAAUl4G,EAAKm4G,GAC5C,GAAI53H,EAAIu4E,UAAYt4E,EAAKs4E,SACvBt4E,EAAKykC,IAAI1kC,EAAIu4E,SAASo/C,EAAUA,EAAWl4G,GAAMm4G,QAInD,IAAK,IAAIp6I,EAAI,EAAGA,EAAIiiC,EAAKjiC,IACvByiB,EAAK23H,EAAYp6I,GAAKwiB,EAAI23H,EAAWn6I,IAIzCs4I,cAAe,SAAU1tF,GACvB,IAAI5qD,EAAGkW,EAAG+rB,EAAK9f,EAAK8E,EAAO7hB,EAI3B,IADA68B,EAAM,EACDjiC,EAAI,EAAGkW,EAAI00C,EAAOnqD,OAAQT,EAAIkW,EAAGlW,IACpCiiC,GAAO2oB,EAAO5qD,GAAGS,OAMnB,IAFA2E,EAAS,IAAI88E,WAAWjgD,GACxB9f,EAAM,EACDniB,EAAI,EAAGkW,EAAI00C,EAAOnqD,OAAQT,EAAIkW,EAAGlW,IACpCinB,EAAQ2jC,EAAO5qD,GACfoF,EAAO8hD,IAAIjgC,EAAO9E,GAClBA,GAAO8E,EAAMxmB,OAGf,OAAO2E,IAIPi1I,EAAY,CACdV,SAAU,SAAUl3H,EAAMD,EAAK23H,EAAUl4G,EAAKm4G,GAC5C,IAAK,IAAIp6I,EAAI,EAAGA,EAAIiiC,EAAKjiC,IACvByiB,EAAK23H,EAAYp6I,GAAKwiB,EAAI23H,EAAWn6I,IAIzCs4I,cAAe,SAAU1tF,GACvB,MAAO,GAAGxoD,OAAO0f,MAAM,GAAI8oC,KAO/B1rD,EAAQo7I,SAAW,SAAUn2I,GACvBA,GACFjF,EAAQ84I,KAAQ91D,WAChBhjF,EAAQq7I,MAAQzmB,YAChB50H,EAAQs7I,MAAQR,WAChB96I,EAAQoa,OAAOpa,EAASg7I,KAExBh7I,EAAQ84I,KAAQ/nI,MAChB/Q,EAAQq7I,MAAQtqI,MAChB/Q,EAAQs7I,MAAQvqI,MAChB/Q,EAAQoa,OAAOpa,EAASm7I,KAI5Bn7I,EAAQo7I,SAASP,6BCvGjB,aAGA,IAAI5sH,EAAQjtB,EAAQ,YAQhBu6I,GAAe,EACfC,GAAmB,EAEvB,IAAM7wI,OAAO22C,aAAa1+B,MAAM,KAAM,CAAE,IAAQ,MAAO64H,GAAMF,GAAe,EAC5E,IAAM5wI,OAAO22C,aAAa1+B,MAAM,KAAM,IAAIogE,WAAW,IAAO,MAAOy4D,GAAMD,GAAmB,EAO5F,IADA,IAAIta,EAAW,IAAIjzG,EAAM6qH,KAAK,KACrBjpE,EAAI,EAAGA,EAAI,IAAKA,IACvBqxD,EAASrxD,GAAMA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAI,EA4D5F,SAASopE,EAAclqH,EAAKgU,GAI1B,GAAIA,EAAM,QACHhU,EAAI8sE,UAAY2/C,IAAuBzsH,EAAI8sE,UAAY0/C,GAC1D,OAAO5wI,OAAO22C,aAAa1+B,MAAM,KAAMqL,EAAMirH,UAAUnqH,EAAKgU,IAKhE,IADA,IAAI78B,EAAS,GACJpF,EAAI,EAAGA,EAAIiiC,EAAKjiC,IACvBoF,GAAUyE,OAAO22C,aAAavyB,EAAIjuB,IAEpC,OAAOoF,EAxETg7H,EAAS,KAAOA,EAAS,KAAO,EAIhClhI,EAAQyhI,WAAa,SAAUr5G,GAC7B,IAAI2G,EAAKhuB,EAAGsvF,EAAIixC,EAAOxgI,EAAGygI,EAAUn5G,EAAI7mB,OAAQigI,EAAU,EAG1D,IAAKF,EAAQ,EAAGA,EAAQC,EAASD,IAEV,QAAZ,OADTvgI,EAAIqnB,EAAIwB,WAAW03G,MACaA,EAAQ,EAAIC,GAEpB,QAAZ,OADVlxC,EAAKjoE,EAAIwB,WAAW03G,EAAQ,OAE1BvgI,EAAI,OAAYA,EAAI,OAAW,KAAOsvF,EAAK,OAC3CixC,KAGJE,GAAWzgI,EAAI,IAAO,EAAIA,EAAI,KAAQ,EAAIA,EAAI,MAAU,EAAI,EAO9D,IAHAguB,EAAM,IAAId,EAAM6qH,KAAKtX,GAGhB1gI,EAAI,EAAGwgI,EAAQ,EAAGxgI,EAAI0gI,EAASF,IAEb,QAAZ,OADTvgI,EAAIqnB,EAAIwB,WAAW03G,MACaA,EAAQ,EAAIC,GAEpB,QAAZ,OADVlxC,EAAKjoE,EAAIwB,WAAW03G,EAAQ,OAE1BvgI,EAAI,OAAYA,EAAI,OAAW,KAAOsvF,EAAK,OAC3CixC,KAGAvgI,EAAI,IAENguB,EAAIjuB,KAAOC,EACFA,EAAI,MAEbguB,EAAIjuB,KAAO,IAAQC,IAAM,EACzBguB,EAAIjuB,KAAO,IAAY,GAAJC,GACVA,EAAI,OAEbguB,EAAIjuB,KAAO,IAAQC,IAAM,GACzBguB,EAAIjuB,KAAO,IAAQC,IAAM,EAAI,GAC7BguB,EAAIjuB,KAAO,IAAY,GAAJC,IAGnBguB,EAAIjuB,KAAO,IAAQC,IAAM,GACzBguB,EAAIjuB,KAAO,IAAQC,IAAM,GAAK,GAC9BguB,EAAIjuB,KAAO,IAAQC,IAAM,EAAI,GAC7BguB,EAAIjuB,KAAO,IAAY,GAAJC,GAIvB,OAAOguB,GAuBT/uB,EAAQi5I,cAAgB,SAAUlqH,GAChC,OAAOkqH,EAAclqH,EAAKA,EAAIxtB,SAKhCvB,EAAQo6I,cAAgB,SAAUhyH,GAEhC,IADA,IAAI2G,EAAM,IAAId,EAAM6qH,KAAK1wH,EAAI7mB,QACpBT,EAAI,EAAGiiC,EAAMhU,EAAIxtB,OAAQT,EAAIiiC,EAAKjiC,IACzCiuB,EAAIjuB,GAAKsnB,EAAIwB,WAAW9oB,GAE1B,OAAOiuB,GAKT/uB,EAAQ6hI,WAAa,SAAU9yG,EAAKnf,GAClC,IAAI9O,EAAGwiE,EAAKviE,EAAG2gI,EACX3+F,EAAMnzB,GAAOmf,EAAIxtB,OAKjBogI,EAAW,IAAI5wH,MAAY,EAANgyB,GAEzB,IAAKugC,EAAM,EAAGxiE,EAAI,EAAGA,EAAIiiC,GAGvB,IAFAhiC,EAAIguB,EAAIjuB,MAEA,IAAQ6gI,EAASr+D,KAASviE,OAIlC,IAFA2gI,EAAQR,EAASngI,IAEL,EAAK4gI,EAASr+D,KAAS,MAAQxiE,GAAK4gI,EAAQ,MAAxD,CAKA,IAFA3gI,GAAe,IAAV2gI,EAAc,GAAiB,IAAVA,EAAc,GAAO,EAExCA,EAAQ,GAAK5gI,EAAIiiC,GACtBhiC,EAAKA,GAAK,EAAiB,GAAXguB,EAAIjuB,KACpB4gI,IAIEA,EAAQ,EAAKC,EAASr+D,KAAS,MAE/BviE,EAAI,MACN4gI,EAASr+D,KAASviE,GAElBA,GAAK,MACL4gI,EAASr+D,KAAS,MAAWviE,GAAK,GAAM,KACxC4gI,EAASr+D,KAAS,MAAc,KAAJviE,GAIhC,OAAOk4I,EAActX,EAAUr+D,IAUjCtjE,EAAQgiI,WAAa,SAAUjzG,EAAKnf,GAClC,IAAIqT,EAOJ,KALArT,EAAMA,GAAOmf,EAAIxtB,QACPwtB,EAAIxtB,SAAUqO,EAAMmf,EAAIxtB,QAGlC0hB,EAAMrT,EAAM,EACLqT,GAAO,GAA2B,MAAV,IAAX8L,EAAI9L,KAAyBA,IAIjD,OAAIA,EAAM,GAIE,IAARA,EAJkBrT,EAMdqT,EAAMi+G,EAASnyG,EAAI9L,IAAQrT,EAAOqT,EAAMrT,2CCzLlD,aAkDA3P,EAAOD,QAzBP,SAAiB07I,EAAO3sH,EAAKgU,EAAK9f,GAKhC,IAJA,IAAIkiE,EAAc,MAARu2D,EAAiB,EACvBt2D,EAAOs2D,IAAU,GAAM,MAAS,EAChC/6I,EAAI,EAEO,IAARoiC,GAAW,CAKhBA,GADApiC,EAAIoiC,EAAM,IAAO,IAAOA,EAGxB,GAEEqiD,EAAMA,GADND,EAAMA,EAAKp2D,EAAI9L,KAAS,GACR,UACPtiB,GAEXwkF,GAAM,MACNC,GAAM,MAGR,OAAQD,EAAMC,GAAM,GAAM,6BC9C5B,aAqBAnlF,EAAOD,QAAU,CAGfm6I,WAAoB,EACpBwB,gBAAoB,EACpBnB,aAAoB,EACpBoB,aAAoB,EACpB1B,SAAoB,EACpB2B,QAAoB,EACpBC,QAAoB,EAKpBpC,KAAoB,EACpBa,aAAoB,EACpBF,YAAoB,EACpB0B,SAAoB,EACpBC,gBAAoB,EACpBC,cAAoB,EAEpB3B,aAAoB,EAIpB4B,iBAA0B,EAC1BC,aAA0B,EAC1BC,mBAA0B,EAC1BC,uBAA0B,EAG1BC,WAA0B,EAC1BC,eAA0B,EAC1BC,MAA0B,EAC1BC,QAA0B,EAC1BC,mBAA0B,EAG1BC,SAA0B,EAC1BC,OAA0B,EAE1BC,UAA0B,EAG1BC,WAA0B,6BCjE5B,aAyCA,IAAI3oB,EAfJ,WAGE,IAFA,IAAIpzH,EAAG0Y,EAAQ,GAEN9Y,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAC5BI,EAAIJ,EACJ,IAAK,IAAI20D,EAAI,EAAGA,EAAI,EAAGA,IACrBv0D,EAAU,EAAJA,EAAU,WAAcA,IAAM,EAAOA,IAAM,EAEnD0Y,EAAM9Y,GAAKI,EAGb,OAAO0Y,EAIM26G,GAiBfn0H,EAAOD,QAdP,SAAeq0H,EAAKtlG,EAAKgU,EAAK9f,GAC5B,IAAIriB,EAAIuzH,EACJrtH,EAAMmc,EAAM8f,EAEhBsxF,IAAQ,EAER,IAAK,IAAIvzH,EAAImiB,EAAKniB,EAAIgG,EAAKhG,IACzBuzH,EAAOA,IAAQ,EAAKzzH,EAAmB,KAAhByzH,EAAMtlG,EAAIjuB,KAGnC,OAAgB,EAARuzH,6BCtDV,aAqBA,IAkgCI0oB,EAlgCA9uH,EAAUjtB,EAAQ,mBAClBg8I,EAAUh8I,EAAQ,WAClBi8I,EAAUj8I,EAAQ,aAClBmyH,EAAUnyH,EAAQ,WAClB2mE,EAAU3mE,EAAQ,cAmGtB,SAASqrB,EAAI6rH,EAAMgF,GAEjB,OADAhF,EAAKvwE,IAAMA,EAAIu1E,GACRA,EAGT,SAASlpG,EAAKj0C,GACZ,OAASA,GAAM,IAAOA,EAAK,EAAI,EAAI,GAGrC,SAASgqC,EAAKhb,GAA6B,IAAtB,IAAIgU,EAAMhU,EAAIxtB,SAAiBwhC,GAAO,GAAKhU,EAAIgU,GAAO,EAS3E,SAASo6G,EAAcjF,GACrB,IAAI5mI,EAAI4mI,EAAKx4H,MAGTqjB,EAAMzxB,EAAE82G,QACRrlF,EAAMm1G,EAAKC,YACbp1G,EAAMm1G,EAAKC,WAED,IAARp1G,IAEJ9U,EAAMwsH,SAASvC,EAAK/2D,OAAQ7vE,EAAE8rI,YAAa9rI,EAAE+rI,YAAat6G,EAAKm1G,EAAKa,UACpEb,EAAKa,UAAYh2G,EACjBzxB,EAAE+rI,aAAet6G,EACjBm1G,EAAKoF,WAAav6G,EAClBm1G,EAAKC,WAAap1G,EAClBzxB,EAAE82G,SAAWrlF,EACK,IAAdzxB,EAAE82G,UACJ92G,EAAE+rI,YAAc,IAKpB,SAASE,EAAiBjsI,EAAGqe,GAC3BqtH,EAAMQ,gBAAgBlsI,EAAIA,EAAEmsI,aAAe,EAAInsI,EAAEmsI,aAAe,EAAInsI,EAAEosI,SAAWpsI,EAAEmsI,YAAa9tH,GAChGre,EAAEmsI,YAAcnsI,EAAEosI,SAClBP,EAAc7rI,EAAE4mI,MAIlB,SAASyF,EAASrsI,EAAG2F,GACnB3F,EAAE8rI,YAAY9rI,EAAE82G,WAAanxG,EAS/B,SAAS2mI,EAAYtsI,EAAG2F,GAGtB3F,EAAE8rI,YAAY9rI,EAAE82G,WAAcnxG,IAAM,EAAK,IACzC3F,EAAE8rI,YAAY9rI,EAAE82G,WAAiB,IAAJnxG,EA6C/B,SAAS4mI,EAAcvsI,EAAGwsI,GACxB,IAEI5vI,EACA60B,EAHAg7G,EAAezsI,EAAE0sI,iBACjBC,EAAO3sI,EAAEosI,SAGTQ,EAAW5sI,EAAE6sI,YACbC,EAAa9sI,EAAE8sI,WACfphD,EAAS1rF,EAAEosI,SAAYpsI,EAAE+sI,OApIVC,IAqIfhtI,EAAEosI,UAAYpsI,EAAE+sI,OArIDC,KAqI2B,EAE1CC,EAAOjtI,EAAElR,OAETo+I,EAAQltI,EAAEmtI,OACVxyH,EAAQ3a,EAAE2a,KAMVyyH,EAASptI,EAAEosI,SAjJD,IAkJViB,EAAaJ,EAAKN,EAAOC,EAAW,GACpCU,EAAaL,EAAKN,EAAOC,GAQzB5sI,EAAE6sI,aAAe7sI,EAAEutI,aACrBd,IAAiB,GAKfK,EAAa9sI,EAAEwtI,YAAaV,EAAa9sI,EAAEwtI,WAI/C,GAaE,GAAIP,GAXJrwI,EAAQ4vI,GAWSI,KAAkBU,GAC/BL,EAAKrwI,EAAQgwI,EAAW,KAAOS,GAC/BJ,EAAKrwI,KAA0BqwI,EAAKN,IACpCM,IAAOrwI,KAAwBqwI,EAAKN,EAAO,GAH/C,CAaAA,GAAQ,EACR/vI,IAMA,UAESqwI,IAAON,KAAUM,IAAOrwI,IAAUqwI,IAAON,KAAUM,IAAOrwI,IAC1DqwI,IAAON,KAAUM,IAAOrwI,IAAUqwI,IAAON,KAAUM,IAAOrwI,IAC1DqwI,IAAON,KAAUM,IAAOrwI,IAAUqwI,IAAON,KAAUM,IAAOrwI,IAC1DqwI,IAAON,KAAUM,IAAOrwI,IAAUqwI,IAAON,KAAUM,IAAOrwI,IAC1D+vI,EAAOS,GAOhB,GAHA37G,EAhNY,KAgNO27G,EAAST,GAC5BA,EAAOS,EAjNK,IAmNR37G,EAAMm7G,EAAU,CAGlB,GAFA5sI,EAAEytI,YAAcjB,EAChBI,EAAWn7G,EACPA,GAAOq7G,EACT,MAEFO,EAAaJ,EAAKN,EAAOC,EAAW,GACpCU,EAAaL,EAAKN,EAAOC,YAEnBJ,EAAY7xH,EAAK6xH,EAAYU,IAAUxhD,GAA4B,KAAjB+gD,GAE5D,OAAIG,GAAY5sI,EAAEwtI,UACTZ,EAEF5sI,EAAEwtI,UAcX,SAASE,EAAY1tI,GACnB,IACIjQ,EAAGV,EAAG8kB,EAAGw5H,EAAM72H,EArJH8vH,EAAMnpH,EAAKlb,EAAOqX,EAC9B6X,EAmJAm8G,EAAU5tI,EAAE+sI,OAKhB,EAAG,CAqBD,GApBAY,EAAO3tI,EAAE6tI,YAAc7tI,EAAEwtI,UAAYxtI,EAAEosI,SAoBnCpsI,EAAEosI,UAAYwB,GAAWA,EAzQZZ,KAyQsC,CAErDrwH,EAAMwsH,SAASnpI,EAAElR,OAAQkR,EAAElR,OAAQ8+I,EAASA,EAAS,GACrD5tI,EAAEytI,aAAeG,EACjB5tI,EAAEosI,UAAYwB,EAEd5tI,EAAEmsI,aAAeyB,EAUjB79I,EADAV,EAAI2Q,EAAE8tI,UAEN,GACE35H,EAAInU,EAAE+tI,OAAOh+I,GACbiQ,EAAE+tI,KAAKh+I,GAAMokB,GAAKy5H,EAAUz5H,EAAIy5H,EAAU,UACjCv+I,GAGXU,EADAV,EAAIu+I,EAEJ,GACEz5H,EAAInU,EAAE2a,OAAO5qB,GACbiQ,EAAE2a,KAAK5qB,GAAMokB,GAAKy5H,EAAUz5H,EAAIy5H,EAAU,UAIjCv+I,GAEXs+I,GAAQC,EAEV,GAAwB,IAApB5tI,EAAE4mI,KAAKW,SACT,MAmBF,GApOcX,EAgOD5mI,EAAE4mI,KAhOKnpH,EAgOCzd,EAAElR,OAhOEyT,EAgOMvC,EAAEosI,SAAWpsI,EAAEwtI,UAhOd5zH,EAgOyB+zH,EA/NvDl8G,OAAAA,GAAAA,EAAMm1G,EAAKW,UAEL3tH,IAAQ6X,EAAM7X,GA6NtBvqB,EA5NU,IAARoiC,EAAoB,GAExBm1G,EAAKW,UAAY91G,EAGjB9U,EAAMwsH,SAAS1rH,EAAKmpH,EAAKlzE,MAAOkzE,EAAKU,QAAS71G,EAAKlvB,GAC3B,IAApBqkI,EAAKx4H,MAAMqM,KACbmsH,EAAKwD,MAAQuB,EAAQ/E,EAAKwD,MAAO3sH,EAAKgU,EAAKlvB,GAGhB,IAApBqkI,EAAKx4H,MAAMqM,OAClBmsH,EAAKwD,MAAQvoB,EAAM+kB,EAAKwD,MAAO3sH,EAAKgU,EAAKlvB,IAG3CqkI,EAAKU,SAAW71G,EAChBm1G,EAAKoH,UAAYv8G,EAEVA,GA4MLzxB,EAAEwtI,WAAan+I,EAGX2Q,EAAEwtI,UAAYxtI,EAAEqR,QAjUR,EA0UV,IARAyF,EAAM9W,EAAEosI,SAAWpsI,EAAEqR,OACrBrR,EAAEiuI,MAAQjuI,EAAElR,OAAOgoB,GAGnB9W,EAAEiuI,OAAUjuI,EAAEiuI,OAASjuI,EAAEkuI,WAAcluI,EAAElR,OAAOgoB,EAAM,IAAM9W,EAAEmuI,UAIvDnuI,EAAEqR,SAEPrR,EAAEiuI,OAAUjuI,EAAEiuI,OAASjuI,EAAEkuI,WAAcluI,EAAElR,OAAOgoB,EA5UxC,EA4U0D,IAAM9W,EAAEmuI,UAE1EnuI,EAAE2a,KAAK7D,EAAM9W,EAAEmtI,QAAUntI,EAAE+tI,KAAK/tI,EAAEiuI,OAClCjuI,EAAE+tI,KAAK/tI,EAAEiuI,OAASn3H,EAClBA,IACA9W,EAAEqR,WACErR,EAAEwtI,UAAYxtI,EAAEqR,OAlVZ,aA2VLrR,EAAEwtI,UAzVQR,KAyVyC,IAApBhtI,EAAE4mI,KAAKW,UAmJjD,SAAS6G,EAAapuI,EAAGk5E,GAIvB,IAHA,IAAIm1D,EACAC,IAEK,CAMP,GAAItuI,EAAEwtI,UAtfWR,IAsfgB,CAE/B,GADAU,EAAY1tI,GACRA,EAAEwtI,UAxfSR,KAzEC,IAikBmB9zD,EACjC,OA7egB,EA+elB,GAAoB,IAAhBl5E,EAAEwtI,UACJ,MA2BJ,GApBAa,EAAY,EACRruI,EAAEwtI,WAtgBM,IAwgBVxtI,EAAEiuI,OAAUjuI,EAAEiuI,OAASjuI,EAAEkuI,WAAcluI,EAAElR,OAAOkR,EAAEosI,SAxgBxC,EAwgB+D,IAAMpsI,EAAEmuI,UACjFE,EAAYruI,EAAE2a,KAAK3a,EAAEosI,SAAWpsI,EAAEmtI,QAAUntI,EAAE+tI,KAAK/tI,EAAEiuI,OACrDjuI,EAAE+tI,KAAK/tI,EAAEiuI,OAASjuI,EAAEosI,UAOJ,IAAdiC,GAA4BruI,EAAEosI,SAAWiC,GAAeruI,EAAE+sI,OA/gB7CC,MAohBfhtI,EAAEuuI,aAAehC,EAAcvsI,EAAGquI,IAGhCruI,EAAEuuI,cAzhBM,EAqiBV,GAPAD,EAAS5C,EAAM8C,UAAUxuI,EAAGA,EAAEosI,SAAWpsI,EAAEytI,YAAaztI,EAAEuuI,aA9hBhD,GAgiBVvuI,EAAEwtI,WAAaxtI,EAAEuuI,aAKbvuI,EAAEuuI,cAAgBvuI,EAAEyuI,gBAAuCzuI,EAAEwtI,WAriBvD,EAqiB+E,CACvFxtI,EAAEuuI,eACF,GACEvuI,EAAEosI,WAEFpsI,EAAEiuI,OAAUjuI,EAAEiuI,OAASjuI,EAAEkuI,WAAcluI,EAAElR,OAAOkR,EAAEosI,SA1iB5C,EA0iBmE,IAAMpsI,EAAEmuI,UACjFE,EAAYruI,EAAE2a,KAAK3a,EAAEosI,SAAWpsI,EAAEmtI,QAAUntI,EAAE+tI,KAAK/tI,EAAEiuI,OACrDjuI,EAAE+tI,KAAK/tI,EAAEiuI,OAASjuI,EAAEosI,eAKQ,KAAnBpsI,EAAEuuI,cACbvuI,EAAEosI,gBAGFpsI,EAAEosI,UAAYpsI,EAAEuuI,aAChBvuI,EAAEuuI,aAAe,EACjBvuI,EAAEiuI,MAAQjuI,EAAElR,OAAOkR,EAAEosI,UAErBpsI,EAAEiuI,OAAUjuI,EAAEiuI,OAASjuI,EAAEkuI,WAAcluI,EAAElR,OAAOkR,EAAEosI,SAAW,IAAMpsI,EAAEmuI,eAavEG,EAAS5C,EAAM8C,UAAUxuI,EAAG,EAAGA,EAAElR,OAAOkR,EAAEosI,WAE1CpsI,EAAEwtI,YACFxtI,EAAEosI,WAEJ,GAAIkC,IAEFrC,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,WACT,OAjkBgB,EAukBtB,OADA7mI,EAAEqR,OAAWrR,EAAEosI,SAAYsC,EAAkB1uI,EAAEosI,SAAWsC,EAvpBtC,IAwpBhBx1D,GAEF+yD,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,UAxkBS,EACA,GA6kBlB7mI,EAAE2uI,WAEJ1C,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,WAnlBS,EACA,EA+lBxB,SAAS+H,EAAa5uI,EAAGk5E,GAOvB,IANA,IAAIm1D,EACAC,EAEAO,IAGK,CAMP,GAAI7uI,EAAEwtI,UAznBWR,IAynBgB,CAE/B,GADAU,EAAY1tI,GACRA,EAAEwtI,UA3nBSR,KAzEC,IAosBmB9zD,EACjC,OAhnBgB,EAknBlB,GAAoB,IAAhBl5E,EAAEwtI,UAAmB,MA0C3B,GApCAa,EAAY,EACRruI,EAAEwtI,WAvoBM,IAyoBVxtI,EAAEiuI,OAAUjuI,EAAEiuI,OAASjuI,EAAEkuI,WAAcluI,EAAElR,OAAOkR,EAAEosI,SAzoBxC,EAyoB+D,IAAMpsI,EAAEmuI,UACjFE,EAAYruI,EAAE2a,KAAK3a,EAAEosI,SAAWpsI,EAAEmtI,QAAUntI,EAAE+tI,KAAK/tI,EAAEiuI,OACrDjuI,EAAE+tI,KAAK/tI,EAAEiuI,OAASjuI,EAAEosI,UAMtBpsI,EAAE6sI,YAAc7sI,EAAEuuI,aAClBvuI,EAAE8uI,WAAa9uI,EAAEytI,YACjBztI,EAAEuuI,aAAeG,EAEC,IAAdL,GAA0BruI,EAAE6sI,YAAc7sI,EAAEyuI,gBAC5CzuI,EAAEosI,SAAWiC,GAAcruI,EAAE+sI,OAppBhBC,MAypBfhtI,EAAEuuI,aAAehC,EAAcvsI,EAAGquI,GAG9BruI,EAAEuuI,cAAgB,IAvsBA,IAwsBlBvuI,EAAEwmI,UA/pBI,IA+pBwBxmI,EAAEuuI,cAA8BvuI,EAAEosI,SAAWpsI,EAAEytI,YAAc,QAK7FztI,EAAEuuI,aAAeG,IAMjB1uI,EAAE6sI,aA1qBM,GA0qBsB7sI,EAAEuuI,cAAgBvuI,EAAE6sI,YAAa,CACjEgC,EAAa7uI,EAAEosI,SAAWpsI,EAAEwtI,UA3qBlB,EAkrBVc,EAAS5C,EAAM8C,UAAUxuI,EAAGA,EAAEosI,SAAW,EAAIpsI,EAAE8uI,WAAY9uI,EAAE6sI,YAlrBnD,GAwrBV7sI,EAAEwtI,WAAaxtI,EAAE6sI,YAAc,EAC/B7sI,EAAE6sI,aAAe,EACjB,KACQ7sI,EAAEosI,UAAYyC,IAElB7uI,EAAEiuI,OAAUjuI,EAAEiuI,OAASjuI,EAAEkuI,WAAcluI,EAAElR,OAAOkR,EAAEosI,SA7rB5C,EA6rBmE,IAAMpsI,EAAEmuI,UACjFE,EAAYruI,EAAE2a,KAAK3a,EAAEosI,SAAWpsI,EAAEmtI,QAAUntI,EAAE+tI,KAAK/tI,EAAEiuI,OACrDjuI,EAAE+tI,KAAK/tI,EAAEiuI,OAASjuI,EAAEosI,gBAGK,KAAlBpsI,EAAE6sI,aAKb,GAJA7sI,EAAE+uI,gBAAkB,EACpB/uI,EAAEuuI,aAAeG,EACjB1uI,EAAEosI,WAEEkC,IAEFrC,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,WACT,OA7rBc,OAksBb,GAAI7mI,EAAE+uI,iBAgBX,IATAT,EAAS5C,EAAM8C,UAAUxuI,EAAG,EAAGA,EAAElR,OAAOkR,EAAEosI,SAAW,MAInDH,EAAiBjsI,GAAG,GAGtBA,EAAEosI,WACFpsI,EAAEwtI,YACuB,IAArBxtI,EAAE4mI,KAAKC,UACT,OAntBgB,OAytBlB7mI,EAAE+uI,gBAAkB,EACpB/uI,EAAEosI,WACFpsI,EAAEwtI,YAYN,OARIxtI,EAAE+uI,kBAGJT,EAAS5C,EAAM8C,UAAUxuI,EAAG,EAAGA,EAAElR,OAAOkR,EAAEosI,SAAW,IAErDpsI,EAAE+uI,gBAAkB,GAEtB/uI,EAAEqR,OAASrR,EAAEosI,SAAWsC,EAAgB1uI,EAAEosI,SAAWsC,EAvzBjC,IAwzBhBx1D,GAEF+yD,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,UAxuBS,EACA,GA6uBlB7mI,EAAE2uI,WAEJ1C,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,WAnvBS,EACA,EAy5BxB,SAASmI,EAAOC,EAAaC,EAAUC,EAAaC,EAAWlX,GAC7DjpI,KAAKggJ,YAAcA,EACnBhgJ,KAAKigJ,SAAWA,EAChBjgJ,KAAKkgJ,YAAcA,EACnBlgJ,KAAKmgJ,UAAYA,EACjBngJ,KAAKipI,KAAOA,EA+Cd,SAASmX,IACPpgJ,KAAK23I,KAAO,KACZ33I,KAAKwpI,OAAS,EACdxpI,KAAK68I,YAAc,KACnB78I,KAAKqgJ,iBAAmB,EACxBrgJ,KAAK88I,YAAc,EACnB98I,KAAK6nH,QAAU,EACf7nH,KAAKwrB,KAAO,EACZxrB,KAAKsgJ,OAAS,KACdtgJ,KAAKugJ,QAAU,EACfvgJ,KAAKgkE,OAjgCW,EAkgChBhkE,KAAKwgJ,YAAc,EAEnBxgJ,KAAK89I,OAAS,EACd99I,KAAKygJ,OAAS,EACdzgJ,KAAKk+I,OAAS,EAEdl+I,KAAKH,OAAS,KAQdG,KAAK4+I,YAAc,EAKnB5+I,KAAK0rB,KAAO,KAMZ1rB,KAAK8+I,KAAO,KAEZ9+I,KAAKg/I,MAAQ,EACbh/I,KAAK6+I,UAAY,EACjB7+I,KAAK0gJ,UAAY,EACjB1gJ,KAAKk/I,UAAY,EAEjBl/I,KAAKi/I,WAAa,EAOlBj/I,KAAKk9I,YAAc,EAKnBl9I,KAAKs/I,aAAe,EACpBt/I,KAAK6/I,WAAa,EAClB7/I,KAAK8/I,gBAAkB,EACvB9/I,KAAKm9I,SAAW,EAChBn9I,KAAKw+I,YAAc,EACnBx+I,KAAKu+I,UAAY,EAEjBv+I,KAAK49I,YAAc,EAKnB59I,KAAKy9I,iBAAmB,EAMxBz9I,KAAKw/I,eAAiB,EAYtBx/I,KAAK4oB,MAAQ,EACb5oB,KAAKu3I,SAAW,EAEhBv3I,KAAKs+I,WAAa,EAGlBt+I,KAAK69I,WAAa,EAYlB79I,KAAK2gJ,UAAa,IAAIjzH,EAAMotH,MAAM8F,MAClC5gJ,KAAK6gJ,UAAa,IAAInzH,EAAMotH,MAAM,KAClC96I,KAAK8gJ,QAAa,IAAIpzH,EAAMotH,MAAM,IAClCtxG,EAAKxpC,KAAK2gJ,WACVn3G,EAAKxpC,KAAK6gJ,WACVr3G,EAAKxpC,KAAK8gJ,SAEV9gJ,KAAK+gJ,OAAW,KAChB/gJ,KAAKghJ,OAAW,KAChBhhJ,KAAKihJ,QAAW,KAGhBjhJ,KAAKkhJ,SAAW,IAAIxzH,EAAMotH,MAAMqG,IAIhCnhJ,KAAKohJ,KAAO,IAAI1zH,EAAMotH,MAAM,KAC5BtxG,EAAKxpC,KAAKohJ,MAEVphJ,KAAKqhJ,SAAW,EAChBrhJ,KAAKshJ,SAAW,EAKhBthJ,KAAKuhJ,MAAQ,IAAI7zH,EAAMotH,MAAM,KAC7BtxG,EAAKxpC,KAAKuhJ,OAIVvhJ,KAAKwhJ,MAAQ,EAEbxhJ,KAAKyhJ,YAAc,EAoBnBzhJ,KAAK0/I,SAAW,EAEhB1/I,KAAK0hJ,MAAQ,EAMb1hJ,KAAK2hJ,QAAU,EACf3hJ,KAAK4hJ,WAAa,EAClB5hJ,KAAK6hJ,QAAU,EACf7hJ,KAAKoiB,OAAS,EAGdpiB,KAAK8hJ,OAAS,EAId9hJ,KAAK+hJ,SAAW,EAgBlB,SAASC,EAAiBrK,GACxB,IAAI5mI,EAEJ,OAAK4mI,GAASA,EAAKx4H,OAInBw4H,EAAKoH,SAAWpH,EAAKoF,UAAY,EACjCpF,EAAKsK,UAhsCqB,GAksC1BlxI,EAAI4mI,EAAKx4H,OACP0oG,QAAU,EACZ92G,EAAE+rI,YAAc,EAEZ/rI,EAAEya,KAAO,IACXza,EAAEya,MAAQza,EAAEya,MAGdza,EAAEy4H,OAAUz4H,EAAEya,KArqCC,GAKA,IAiqCfmsH,EAAKwD,MAAoB,IAAXpqI,EAAEya,KACd,EAEA,EACFza,EAAEyvI,WAvvCkB,EAwvCpB/D,EAAMyF,SAASnxI,GA5uCK,GAwtCX+a,EAAI6rH,GAptCO,GA6uCtB,SAASwK,EAAaxK,GACpB,IAlPe5mI,EAkPXi+D,EAAMgzE,EAAiBrK,GAI3B,OAtvCoB,IAmvChB3oE,KAnPWj+D,EAoPL4mI,EAAKx4H,OAnPby/H,YAAc,EAAI7tI,EAAE+sI,OAGtBt0G,EAAKz4B,EAAE+tI,MAIP/tI,EAAEyuI,eAAiBhD,EAAoBzrI,EAAE6X,OAAOq3H,SAChDlvI,EAAEutI,WAAa9B,EAAoBzrI,EAAE6X,OAAOo3H,YAC5CjvI,EAAE8sI,WAAarB,EAAoBzrI,EAAE6X,OAAOs3H,YAC5CnvI,EAAE0sI,iBAAmBjB,EAAoBzrI,EAAE6X,OAAOu3H,UAElDpvI,EAAEosI,SAAW,EACbpsI,EAAEmsI,YAAc,EAChBnsI,EAAEwtI,UAAY,EACdxtI,EAAEqR,OAAS,EACXrR,EAAEuuI,aAAevuI,EAAE6sI,YAAc6B,EACjC1uI,EAAE+uI,gBAAkB,EACpB/uI,EAAEiuI,MAAQ,GAmOHhwE,EAYT,SAAS6oE,EAAaF,EAAM/uH,EAAOo7C,EAAQqzE,EAAYC,EAAUC,GAC/D,IAAKI,EACH,OAhwCkB,EAkwCpB,IAAInsH,EAAO,EAiBX,IAxwC0B,IAyvCtB5C,IACFA,EAAQ,GAGNyuH,EAAa,GACf7rH,EAAO,EACP6rH,GAAcA,GAGPA,EAAa,KACpB7rH,EAAO,EACP6rH,GAAc,IAIZC,EAAW,GAAKA,EAlvCF,GALF,IAuvCgCtzE,GAC9CqzE,EAAa,GAAKA,EAAa,IAAMzuH,EAAQ,GAAKA,EAAQ,GAC1D2uH,EAAW,GAAKA,EApwCQ,EAqwCxB,OAAOzrH,EAAI6rH,GAtxCO,GA0xCD,IAAfN,IACFA,EAAa,GAIf,IAAItmI,EAAI,IAAIqvI,EA0CZ,OAxCAzI,EAAKx4H,MAAQpO,EACbA,EAAE4mI,KAAOA,EAET5mI,EAAEya,KAAOA,EACTza,EAAEuvI,OAAS,KACXvvI,EAAE0vI,OAASpJ,EACXtmI,EAAE+sI,OAAS,GAAK/sI,EAAE0vI,OAClB1vI,EAAEmtI,OAASntI,EAAE+sI,OAAS,EAEtB/sI,EAAE2vI,UAAYpJ,EAAW,EACzBvmI,EAAE8tI,UAAY,GAAK9tI,EAAE2vI,UACrB3vI,EAAEmuI,UAAYnuI,EAAE8tI,UAAY,EAC5B9tI,EAAEkuI,eAAiBluI,EAAE2vI,UAtvCP,EAsvC+B,GAtvC/B,GAwvCd3vI,EAAElR,OAAS,IAAI6tB,EAAM6qH,KAAgB,EAAXxnI,EAAE+sI,QAC5B/sI,EAAE+tI,KAAO,IAAIpxH,EAAMotH,MAAM/pI,EAAE8tI,WAC3B9tI,EAAE2a,KAAO,IAAIgC,EAAMotH,MAAM/pI,EAAE+sI,QAK3B/sI,EAAE0wI,YAAc,GAAMnK,EAAW,EAEjCvmI,EAAEsvI,iBAAmC,EAAhBtvI,EAAE0wI,YAIvB1wI,EAAE8rI,YAAc,IAAInvH,EAAM6qH,KAAKxnI,EAAEsvI,kBAIjCtvI,EAAE2wI,MAAQ,EAAI3wI,EAAE0wI,YAGhB1wI,EAAEywI,MAAQ,EAAUzwI,EAAE0wI,YAEtB1wI,EAAE6X,MAAQA,EACV7X,EAAEwmI,SAAWA,EACbxmI,EAAEizD,OAASA,EAEJm+E,EAAaxK,GAhWtB6E,EAAsB,CAEpB,IAAIuD,EAAO,EAAG,EAAG,EAAG,GAxiBtB,SAAwBhvI,EAAGk5E,GAIzB,IAAIm4D,EAAiB,MAOrB,IALIA,EAAiBrxI,EAAEsvI,iBAAmB,IACxC+B,EAAiBrxI,EAAEsvI,iBAAmB,KAI/B,CAEP,GAAItvI,EAAEwtI,WAAa,EAAG,CAUpB,GADAE,EAAY1tI,GACQ,IAAhBA,EAAEwtI,WA1eU,IA0eSt0D,EACvB,OAtZgB,EAyZlB,GAAoB,IAAhBl5E,EAAEwtI,UACJ,MAOJxtI,EAAEosI,UAAYpsI,EAAEwtI,UAChBxtI,EAAEwtI,UAAY,EAGd,IAAI8D,EAAYtxI,EAAEmsI,YAAckF,EAEhC,IAAmB,IAAfrxI,EAAEosI,UAAkBpsI,EAAEosI,UAAYkF,KAEpCtxI,EAAEwtI,UAAYxtI,EAAEosI,SAAWkF,EAC3BtxI,EAAEosI,SAAWkF,EAEbrF,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,WACT,OA9agB,EAubpB,GAAI7mI,EAAEosI,SAAWpsI,EAAEmsI,aAAgBnsI,EAAE+sI,OAncpBC,MAqcff,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,WACT,OA3bgB,EAmctB,OAFA7mI,EAAEqR,OAAS,EAlhBS,IAohBhB6nE,GAEF+yD,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,UApcS,EACA,IA0clB7mI,EAAEosI,SAAWpsI,EAAEmsI,cAEjBF,EAAiBjsI,GAAG,GAChBA,EAAE4mI,KAAKC,WAhdS,MAu6BtB,IAAImI,EAAO,EAAG,EAAG,EAAG,EAAGZ,GACvB,IAAIY,EAAO,EAAG,EAAG,GAAI,EAAGZ,GACxB,IAAIY,EAAO,EAAG,EAAG,GAAI,GAAIZ,GAEzB,IAAIY,EAAO,EAAG,EAAG,GAAI,GAAIJ,GACzB,IAAII,EAAO,EAAG,GAAI,GAAI,GAAIJ,GAC1B,IAAII,EAAO,EAAG,GAAI,IAAK,IAAKJ,GAC5B,IAAII,EAAO,EAAG,GAAI,IAAK,IAAKJ,GAC5B,IAAII,EAAO,GAAI,IAAK,IAAK,KAAMJ,GAC/B,IAAII,EAAO,GAAI,IAAK,IAAK,KAAMJ,IA2xBjClgJ,EAAQ6iJ,YApcR,SAAqB3K,EAAM/uH,GACzB,OAAOivH,EAAaF,EAAM/uH,EAjzCV,EAOF,GAEI,EAnBQ,IA+vD5BnpB,EAAQo4I,aAAeA,EACvBp4I,EAAQ0iJ,aAAeA,EACvB1iJ,EAAQuiJ,iBAAmBA,EAC3BviJ,EAAQq4I,iBA9hBR,SAA0BH,EAAMmH,GAC9B,OAAKnH,GAASA,EAAKx4H,MACK,IAApBw4H,EAAKx4H,MAAMqM,MAxvCK,GAyvCpBmsH,EAAKx4H,MAAMmhI,OAASxB,EA7vCA,IAIA,GAqxDtBr/I,EAAQ04I,QApcR,SAAiBR,EAAM1tD,GACrB,IAAIs4D,EAAWxxI,EACXyxI,EAAKnwH,EAET,IAAKslH,IAASA,EAAKx4H,OACjB8qE,EAj2CkB,GAi2CCA,EAAQ,EAC3B,OAAO0tD,EAAO7rH,EAAI6rH,GAv1CA,IAAA,EA41CpB,GAFA5mI,EAAI4mI,EAAKx4H,OAEJw4H,EAAK/2D,SACJ+2D,EAAKlzE,OAA2B,IAAlBkzE,EAAKW,UA1xCR,MA2xCZvnI,EAAEy4H,QA12Ca,IA02Ccv/C,EAChC,OAAOn+D,EAAI6rH,EAA0B,IAAnBA,EAAKC,WA51CL,GAHA,GAu2CpB,GALA7mI,EAAE4mI,KAAOA,EACT4K,EAAYxxI,EAAEyvI,WACdzvI,EAAEyvI,WAAav2D,EAvyCA,KA0yCXl5E,EAAEy4H,OAEJ,GAAe,IAAXz4H,EAAEya,KACJmsH,EAAKwD,MAAQ,EACbiC,EAASrsI,EAAG,IACZqsI,EAASrsI,EAAG,KACZqsI,EAASrsI,EAAG,GACPA,EAAEuvI,QAaLlD,EAASrsI,GAAIA,EAAEuvI,OAAO96I,KAAO,EAAI,IACpBuL,EAAEuvI,OAAOmC,KAAO,EAAI,IACnB1xI,EAAEuvI,OAAOoC,MAAY,EAAJ,IACjB3xI,EAAEuvI,OAAOh2I,KAAW,EAAJ,IAChByG,EAAEuvI,OAAO10I,QAAc,GAAJ,IAEjCwxI,EAASrsI,EAAmB,IAAhBA,EAAEuvI,OAAOt1E,MACrBoyE,EAASrsI,EAAIA,EAAEuvI,OAAOt1E,MAAQ,EAAK,KACnCoyE,EAASrsI,EAAIA,EAAEuvI,OAAOt1E,MAAQ,GAAM,KACpCoyE,EAASrsI,EAAIA,EAAEuvI,OAAOt1E,MAAQ,GAAM,KACpCoyE,EAASrsI,EAAe,IAAZA,EAAE6X,MAAc,EACf7X,EAAEwmI,UAv3CK,GAu3CyBxmI,EAAE6X,MAAQ,EAC1C,EAAI,GACjBw0H,EAASrsI,EAAiB,IAAdA,EAAEuvI,OAAOqC,IACjB5xI,EAAEuvI,OAAOoC,OAAS3xI,EAAEuvI,OAAOoC,MAAM1hJ,SACnCo8I,EAASrsI,EAA2B,IAAxBA,EAAEuvI,OAAOoC,MAAM1hJ,QAC3Bo8I,EAASrsI,EAAIA,EAAEuvI,OAAOoC,MAAM1hJ,QAAU,EAAK,MAEzC+P,EAAEuvI,OAAOmC,OACX9K,EAAKwD,MAAQvoB,EAAM+kB,EAAKwD,MAAOpqI,EAAE8rI,YAAa9rI,EAAE82G,QAAS,IAE3D92G,EAAEwvI,QAAU,EACZxvI,EAAEy4H,OAn1CQ,KAizCV4T,EAASrsI,EAAG,GACZqsI,EAASrsI,EAAG,GACZqsI,EAASrsI,EAAG,GACZqsI,EAASrsI,EAAG,GACZqsI,EAASrsI,EAAG,GACZqsI,EAASrsI,EAAe,IAAZA,EAAE6X,MAAc,EACf7X,EAAEwmI,UAt2CK,GAs2CyBxmI,EAAE6X,MAAQ,EAC1C,EAAI,GACjBw0H,EAASrsI,EA7yCH,GA8yCNA,EAAEy4H,OAtzCO,SAm1Cb,CACE,IAAIp5H,EA13CQ,GA03CiBW,EAAE0vI,OAAS,GAAM,IAAO,EAYrDrwI,IATIW,EAAEwmI,UA14CgB,GA04CcxmI,EAAE6X,MAAQ,EAC9B,EACL7X,EAAE6X,MAAQ,EACL,EACO,IAAZ7X,EAAE6X,MACG,EAEA,IAEU,EACP,IAAf7X,EAAEosI,WAAkB/sI,GAx2CZ,IAy2CZA,GAAU,GAAMA,EAAS,GAEzBW,EAAEy4H,OAp2CS,IAq2CX6T,EAAYtsI,EAAGX,GAGI,IAAfW,EAAEosI,WACJE,EAAYtsI,EAAG4mI,EAAKwD,QAAU,IAC9BkC,EAAYtsI,EAAgB,MAAb4mI,EAAKwD,QAEtBxD,EAAKwD,MAAQ,EAKjB,GAr3CgB,KAq3CZpqI,EAAEy4H,OACJ,GAAIz4H,EAAEuvI,OAAOoC,MAAqB,CAGhC,IAFAF,EAAMzxI,EAAE82G,QAED92G,EAAEwvI,SAAmC,MAAxBxvI,EAAEuvI,OAAOoC,MAAM1hJ,UAC7B+P,EAAE82G,UAAY92G,EAAEsvI,mBACdtvI,EAAEuvI,OAAOmC,MAAQ1xI,EAAE82G,QAAU26B,IAC/B7K,EAAKwD,MAAQvoB,EAAM+kB,EAAKwD,MAAOpqI,EAAE8rI,YAAa9rI,EAAE82G,QAAU26B,EAAKA,IAEjE5F,EAAcjF,GACd6K,EAAMzxI,EAAE82G,QACJ92G,EAAE82G,UAAY92G,EAAEsvI,oBAItBjD,EAASrsI,EAA+B,IAA5BA,EAAEuvI,OAAOoC,MAAM3xI,EAAEwvI,UAC7BxvI,EAAEwvI,UAEAxvI,EAAEuvI,OAAOmC,MAAQ1xI,EAAE82G,QAAU26B,IAC/B7K,EAAKwD,MAAQvoB,EAAM+kB,EAAKwD,MAAOpqI,EAAE8rI,YAAa9rI,EAAE82G,QAAU26B,EAAKA,IAE7DzxI,EAAEwvI,UAAYxvI,EAAEuvI,OAAOoC,MAAM1hJ,SAC/B+P,EAAEwvI,QAAU,EACZxvI,EAAEy4H,OA34CO,SA+4CXz4H,EAAEy4H,OA/4CS,GAk5Cf,GAl5Ce,KAk5CXz4H,EAAEy4H,OACJ,GAAIz4H,EAAEuvI,OAAOh2I,KAAoB,CAC/Bk4I,EAAMzxI,EAAE82G,QAGR,EAAG,CACD,GAAI92G,EAAE82G,UAAY92G,EAAEsvI,mBACdtvI,EAAEuvI,OAAOmC,MAAQ1xI,EAAE82G,QAAU26B,IAC/B7K,EAAKwD,MAAQvoB,EAAM+kB,EAAKwD,MAAOpqI,EAAE8rI,YAAa9rI,EAAE82G,QAAU26B,EAAKA,IAEjE5F,EAAcjF,GACd6K,EAAMzxI,EAAE82G,QACJ92G,EAAE82G,UAAY92G,EAAEsvI,kBAAkB,CACpChuH,EAAM,EACN,MAKFA,EADEthB,EAAEwvI,QAAUxvI,EAAEuvI,OAAOh2I,KAAKtJ,OACkB,IAAxC+P,EAAEuvI,OAAOh2I,KAAK+e,WAAWtY,EAAEwvI,WAE3B,EAERnD,EAASrsI,EAAGshB,SACG,IAARA,GAELthB,EAAEuvI,OAAOmC,MAAQ1xI,EAAE82G,QAAU26B,IAC/B7K,EAAKwD,MAAQvoB,EAAM+kB,EAAKwD,MAAOpqI,EAAE8rI,YAAa9rI,EAAE82G,QAAU26B,EAAKA,IAErD,IAARnwH,IACFthB,EAAEwvI,QAAU,EACZxvI,EAAEy4H,OAh7CU,SAo7Cdz4H,EAAEy4H,OAp7CY,GAu7ClB,GAv7CkB,KAu7Cdz4H,EAAEy4H,OACJ,GAAIz4H,EAAEuvI,OAAO10I,QAAuB,CAClC42I,EAAMzxI,EAAE82G,QAGR,EAAG,CACD,GAAI92G,EAAE82G,UAAY92G,EAAEsvI,mBACdtvI,EAAEuvI,OAAOmC,MAAQ1xI,EAAE82G,QAAU26B,IAC/B7K,EAAKwD,MAAQvoB,EAAM+kB,EAAKwD,MAAOpqI,EAAE8rI,YAAa9rI,EAAE82G,QAAU26B,EAAKA,IAEjE5F,EAAcjF,GACd6K,EAAMzxI,EAAE82G,QACJ92G,EAAE82G,UAAY92G,EAAEsvI,kBAAkB,CACpChuH,EAAM,EACN,MAKFA,EADEthB,EAAEwvI,QAAUxvI,EAAEuvI,OAAO10I,QAAQ5K,OACkB,IAA3C+P,EAAEuvI,OAAO10I,QAAQyd,WAAWtY,EAAEwvI,WAE9B,EAERnD,EAASrsI,EAAGshB,SACG,IAARA,GAELthB,EAAEuvI,OAAOmC,MAAQ1xI,EAAE82G,QAAU26B,IAC/B7K,EAAKwD,MAAQvoB,EAAM+kB,EAAKwD,MAAOpqI,EAAE8rI,YAAa9rI,EAAE82G,QAAU26B,EAAKA,IAErD,IAARnwH,IACFthB,EAAEy4H,OAp9CO,UAw9CXz4H,EAAEy4H,OAx9CS,IA8+Cf,GA9+Ce,MA29CXz4H,EAAEy4H,SACAz4H,EAAEuvI,OAAOmC,MACP1xI,EAAE82G,QAAU,EAAI92G,EAAEsvI,kBACpBzD,EAAcjF,GAEZ5mI,EAAE82G,QAAU,GAAK92G,EAAEsvI,mBACrBjD,EAASrsI,EAAgB,IAAb4mI,EAAKwD,OACjBiC,EAASrsI,EAAI4mI,EAAKwD,OAAS,EAAK,KAChCxD,EAAKwD,MAAQ,EACbpqI,EAAEy4H,OAn+CO,MAu+CXz4H,EAAEy4H,OAv+CS,KA6+CG,IAAdz4H,EAAE82G,SAEJ,GADA+0B,EAAcjF,GACS,IAAnBA,EAAKC,UAQP,OADA7mI,EAAEyvI,YAAc,EA5jDA,OAokDb,GAAsB,IAAlB7I,EAAKW,UAAkB7kG,EAAKw2C,IAAUx2C,EAAK8uG,IA5kDlC,IA6kDlBt4D,EACA,OAAOn+D,EAAI6rH,GA/jDO,GAmkDpB,GAngDiB,MAmgDb5mI,EAAEy4H,QAA6C,IAAlBmO,EAAKW,SACpC,OAAOxsH,EAAI6rH,GApkDO,GAykDpB,GAAsB,IAAlBA,EAAKW,UAAkC,IAAhBvnI,EAAEwtI,WA5lDT,IA6lDjBt0D,GA1gDc,MA0gDUl5E,EAAEy4H,OAA0B,CACrD,IAAIoZ,EA/jDoB,IA+jDV7xI,EAAEwmI,SAxqBpB,SAAsBxmI,EAAGk5E,GAGvB,IAFA,IAAIo1D,IAEK,CAEP,GAAoB,IAAhBtuI,EAAEwtI,YACJE,EAAY1tI,GACQ,IAAhBA,EAAEwtI,WAAiB,CACrB,GA97Bc,IA87BVt0D,EACF,OA12Bc,EA42BhB,MAWJ,GANAl5E,EAAEuuI,aAAe,EAGjBD,EAAS5C,EAAM8C,UAAUxuI,EAAG,EAAGA,EAAElR,OAAOkR,EAAEosI,WAC1CpsI,EAAEwtI,YACFxtI,EAAEosI,WACEkC,IAEFrC,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,WACT,OA33BgB,EAi4BtB,OADA7mI,EAAEqR,OAAS,EAj9BS,IAk9BhB6nE,GAEF+yD,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,UAl4BS,EACA,GAu4BlB7mI,EAAE2uI,WAEJ1C,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,WA74BS,EACA,EAwgD2BiL,CAAa9xI,EAAGk5E,GA9jDvC,IA+jDrBl5E,EAAEwmI,SAxwBT,SAAqBxmI,EAAGk5E,GAOtB,IANA,IAAIo1D,EACA3zH,EACAgyH,EAAMS,EAENH,EAAOjtI,EAAElR,SAEJ,CAKP,GAAIkR,EAAEwtI,WA3xBM,IA2xBkB,CAE5B,GADAE,EAAY1tI,GACRA,EAAEwtI,WA7xBI,KAxEM,IAq2BgBt0D,EAC9B,OAjxBgB,EAmxBlB,GAAoB,IAAhBl5E,EAAEwtI,UAAmB,MAK3B,GADAxtI,EAAEuuI,aAAe,EACbvuI,EAAEwtI,WAtyBM,GAsyBoBxtI,EAAEosI,SAAW,IAE3CzxH,EAAOsyH,EADPN,EAAO3sI,EAAEosI,SAAW,MAEPa,IAAON,IAAShyH,IAASsyH,IAAON,IAAShyH,IAASsyH,IAAON,GAAO,CAC3ES,EAASptI,EAAEosI,SAzyBH,IA0yBR,UAESzxH,IAASsyH,IAAON,IAAShyH,IAASsyH,IAAON,IACzChyH,IAASsyH,IAAON,IAAShyH,IAASsyH,IAAON,IACzChyH,IAASsyH,IAAON,IAAShyH,IAASsyH,IAAON,IACzChyH,IAASsyH,IAAON,IAAShyH,IAASsyH,IAAON,IACzCA,EAAOS,GAChBptI,EAAEuuI,aAjzBM,KAizBsBnB,EAAST,GACnC3sI,EAAEuuI,aAAevuI,EAAEwtI,YACrBxtI,EAAEuuI,aAAevuI,EAAEwtI,WAyBzB,GAlBIxtI,EAAEuuI,cA3zBM,GA+zBVD,EAAS5C,EAAM8C,UAAUxuI,EAAG,EAAGA,EAAEuuI,aA/zBvB,GAi0BVvuI,EAAEwtI,WAAaxtI,EAAEuuI,aACjBvuI,EAAEosI,UAAYpsI,EAAEuuI,aAChBvuI,EAAEuuI,aAAe,IAKjBD,EAAS5C,EAAM8C,UAAUxuI,EAAG,EAAGA,EAAElR,OAAOkR,EAAEosI,WAE1CpsI,EAAEwtI,YACFxtI,EAAEosI,YAEAkC,IAEFrC,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,WACT,OAn0BgB,EAy0BtB,OADA7mI,EAAEqR,OAAS,EAz5BS,IA05BhB6nE,GAEF+yD,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,UA10BS,EACA,GA+0BlB7mI,EAAE2uI,WAEJ1C,EAAiBjsI,GAAG,GACK,IAArBA,EAAE4mI,KAAKC,WAr1BS,EACA,EAygDMkL,CAAY/xI,EAAGk5E,GACrCuyD,EAAoBzrI,EAAE6X,OAAOqgH,KAAKl4H,EAAGk5E,GAKzC,GA9gDoB,IA2gDhB24D,GA1gDgB,IA0gDgBA,IAClC7xI,EAAEy4H,OAhhDW,KAEK,IAghDhBoZ,GA9gDgB,IA8gDWA,EAK7B,OAJuB,IAAnBjL,EAAKC,YACP7mI,EAAEyvI,YAAc,GA3lDF,EAumDlB,GA7hDoB,IA6hDhBoC,IAlnDc,IAmnDZ34D,EACFwyD,EAAMsG,UAAUhyI,GAhnDF,IAknDPk5E,IAEPwyD,EAAMuG,iBAAiBjyI,EAAG,EAAG,GAAG,GAtnDlB,IA0nDVk5E,IAEFzgD,EAAKz4B,EAAE+tI,MAEa,IAAhB/tI,EAAEwtI,YACJxtI,EAAEosI,SAAW,EACbpsI,EAAEmsI,YAAc,EAChBnsI,EAAEqR,OAAS,KAIjBw6H,EAAcjF,GACS,IAAnBA,EAAKC,WAEP,OADA7mI,EAAEyvI,YAAc,EA9nDF,EAsoDpB,OA9oDoB,IA8oDhBv2D,EAtoDgB,EAuoDhBl5E,EAAEya,MAAQ,EAtoDM,GAyoDL,IAAXza,EAAEya,MACJ4xH,EAASrsI,EAAgB,IAAb4mI,EAAKwD,OACjBiC,EAASrsI,EAAI4mI,EAAKwD,OAAS,EAAK,KAChCiC,EAASrsI,EAAI4mI,EAAKwD,OAAS,GAAM,KACjCiC,EAASrsI,EAAI4mI,EAAKwD,OAAS,GAAM,KACjCiC,EAASrsI,EAAmB,IAAhB4mI,EAAKoH,UACjB3B,EAASrsI,EAAI4mI,EAAKoH,UAAY,EAAK,KACnC3B,EAASrsI,EAAI4mI,EAAKoH,UAAY,GAAM,KACpC3B,EAASrsI,EAAI4mI,EAAKoH,UAAY,GAAM,OAIpC1B,EAAYtsI,EAAG4mI,EAAKwD,QAAU,IAC9BkC,EAAYtsI,EAAgB,MAAb4mI,EAAKwD,QAGtByB,EAAcjF,GAIV5mI,EAAEya,KAAO,IAAKza,EAAEya,MAAQza,EAAEya,MAET,IAAdza,EAAE82G,QAhqDW,EACA,IAyxDtBpoH,EAAQm5I,WAvHR,SAAoBjB,GAClB,IAAInO,EAEJ,OAAKmO,GAAsBA,EAAKx4H,MArmDjB,MAymDfqqH,EAASmO,EAAKx4H,MAAMqqH,SAxmDJ,KA0mDdA,GAzmDa,KA0mDbA,GAzmDgB,KA0mDhBA,GAzmDa,MA0mDbA,GAzmDa,MA0mDbA,GAzmDe,MA0mDfA,EAEO19G,EAAI6rH,GA/qDO,IAkrDpBA,EAAKx4H,MAAQ,KAhnDE,MAknDRqqH,EAAwB19G,EAAI6rH,GAnrDf,GALA,IAIA,GAuxDtBl4I,EAAQw4I,qBA3FR,SAA8BN,EAAMI,GAClC,IAEIhnI,EACA8W,EAAKznB,EACLorB,EACAy3H,EACAt3H,EACA84C,EACAy+E,EARAC,EAAapL,EAAW/2I,OAU5B,IAAK22I,IAAsBA,EAAKx4H,MAC9B,OAxsDkB,EA8sDpB,GAAa,KAFbqM,GADAza,EAAI4mI,EAAKx4H,OACAqM,OAEmB,IAATA,GAjpDJ,KAipDkBza,EAAEy4H,QAA0Bz4H,EAAEwtI,UAC7D,OA/sDkB,EAkvDpB,IA/Ba,IAAT/yH,IAEFmsH,EAAKwD,MAAQuB,EAAQ/E,EAAKwD,MAAOpD,EAAYoL,EAAY,IAG3DpyI,EAAEya,KAAO,EAGL23H,GAAcpyI,EAAE+sI,SACL,IAATtyH,IAEFge,EAAKz4B,EAAE+tI,MACP/tI,EAAEosI,SAAW,EACbpsI,EAAEmsI,YAAc,EAChBnsI,EAAEqR,OAAS,GAIb8gI,EAAU,IAAIx1H,EAAM6qH,KAAKxnI,EAAE+sI,QAC3BpwH,EAAMwsH,SAASgJ,EAASnL,EAAYoL,EAAapyI,EAAE+sI,OAAQ/sI,EAAE+sI,OAAQ,GACrE/F,EAAamL,EACbC,EAAapyI,EAAE+sI,QAGjBmF,EAAQtL,EAAKW,SACb3sH,EAAOgsH,EAAKU,QACZ5zE,EAAQkzE,EAAKlzE,MACbkzE,EAAKW,SAAW6K,EAChBxL,EAAKU,QAAU,EACfV,EAAKlzE,MAAQszE,EACb0G,EAAY1tI,GACLA,EAAEwtI,WA3rDK,GA2rDmB,CAC/B12H,EAAM9W,EAAEosI,SACR/8I,EAAI2Q,EAAEwtI,UAAF,EACJ,GAEExtI,EAAEiuI,OAAUjuI,EAAEiuI,OAASjuI,EAAEkuI,WAAcluI,EAAElR,OAAOgoB,EAhsDtC,EAgsDwD,IAAM9W,EAAEmuI,UAE1EnuI,EAAE2a,KAAK7D,EAAM9W,EAAEmtI,QAAUntI,EAAE+tI,KAAK/tI,EAAEiuI,OAElCjuI,EAAE+tI,KAAK/tI,EAAEiuI,OAASn3H,EAClBA,YACSznB,GACX2Q,EAAEosI,SAAWt1H,EACb9W,EAAEwtI,UAAYkB,EACdhB,EAAY1tI,GAYd,OAVAA,EAAEosI,UAAYpsI,EAAEwtI,UAChBxtI,EAAEmsI,YAAcnsI,EAAEosI,SAClBpsI,EAAEqR,OAASrR,EAAEwtI,UACbxtI,EAAEwtI,UAAY,EACdxtI,EAAEuuI,aAAevuI,EAAE6sI,YAAc6B,EACjC1uI,EAAE+uI,gBAAkB,EACpBnI,EAAKU,QAAU1sH,EACfgsH,EAAKlzE,MAAQA,EACbkzE,EAAKW,SAAW2K,EAChBlyI,EAAEya,KAAOA,EA/wDW,GA4xDtB/rB,EAAQ2jJ,YAAc,iJCx0DtB,aAyDA1jJ,EAAOD,QApCP,WAEEO,KAAKwF,KAAa,EAElBxF,KAAKgrE,KAAa,EAElBhrE,KAAKqjJ,OAAa,EAElBrjJ,KAAK2iJ,GAAa,EAElB3iJ,KAAK0iJ,MAAa,KAElB1iJ,KAAKsjJ,UAAa,EAWlBtjJ,KAAKsK,KAAa,GAIlBtK,KAAK4L,QAAa,GAIlB5L,KAAKyiJ,KAAa,EAElBziJ,KAAKmsB,MAAa,6BCtDpB,aA4DAzsB,EAAOD,QAAU,SAAsBk4I,EAAMrkI,GAC3C,IAAI6L,EACAokI,EACAn0H,EACAw8C,EACA42E,EACAj8I,EAEAi9I,EAEAC,EACAC,EACAC,EAEAC,EACAC,EACAhqE,EACAiqE,EACAC,EACAC,EACAC,EACAC,EACAC,EAEA3hH,EACA4hH,EACAt8H,EACAu8H,EAGA5/E,EAAOmc,EAGXzhE,EAAQw4H,EAAKx4H,MAEbokI,EAAM5L,EAAKU,QACX5zE,EAAQkzE,EAAKlzE,MACbr1C,EAAOm0H,GAAO5L,EAAKW,SAAW,GAC9B1sE,EAAO+rE,EAAKa,SACZ53D,EAAS+2D,EAAK/2D,OACd4hE,EAAM52E,GAAQt4D,EAAQqkI,EAAKC,WAC3BrxI,EAAMqlE,GAAQ+rE,EAAKC,UAAY,KAE/B4L,EAAOrkI,EAAMqkI,KAEbC,EAAQtkI,EAAMskI,MACdC,EAAQvkI,EAAMukI,MACdC,EAAQxkI,EAAMwkI,MACdC,EAAWzkI,EAAMtf,OACjBgkJ,EAAO1kI,EAAM0kI,KACbhqE,EAAO16D,EAAM06D,KACbiqE,EAAQ3kI,EAAMmlI,QACdP,EAAQ5kI,EAAMolI,SACdP,GAAS,GAAK7kI,EAAMqlI,SAAW,EAC/BP,GAAS,GAAK9kI,EAAMslI,UAAY,EAMhC3yI,EACA,EAAG,CACG+nE,EAAO,KACTgqE,GAAQp/E,EAAM8+E,MAAU1pE,EACxBA,GAAQ,EACRgqE,GAAQp/E,EAAM8+E,MAAU1pE,EACxBA,GAAQ,GAGVqqE,EAAOJ,EAAMD,EAAOG,GAEpBU,EACA,OAAS,CAKP,GAHAb,KADAM,EAAKD,IAAS,GAEdrqE,GAAQsqE,EAEG,KADXA,EAAMD,IAAS,GAAM,KAKnBtjE,EAAOhV,KAAiB,MAAPs4E,MAEd,CAAA,KAAS,GAALC,GAwKJ,CAAA,GAAkB,IAAR,GAALA,GAAgB,CACxBD,EAAOJ,GAAc,MAAPI,IAA8BL,GAAS,GAAKM,GAAM,IAChE,SAASO,EAEN,GAAS,GAALP,EAAS,CAEhBhlI,EAAM+7D,KAtSH,GAuSH,MAAMppE,EAGN6lI,EAAKvwE,IAAM,8BACXjoD,EAAM+7D,KA5SJ,GA6SF,MAAMppE,EAnLN0wB,EAAa,MAAP0hH,GACNC,GAAM,MAEAtqE,EAAOsqE,IACTN,GAAQp/E,EAAM8+E,MAAU1pE,EACxBA,GAAQ,GAEVr3C,GAAOqhH,GAAS,GAAKM,GAAM,EAC3BN,KAAUM,EACVtqE,GAAQsqE,GAGNtqE,EAAO,KACTgqE,GAAQp/E,EAAM8+E,MAAU1pE,EACxBA,GAAQ,EACRgqE,GAAQp/E,EAAM8+E,MAAU1pE,EACxBA,GAAQ,GAEVqqE,EAAOH,EAAMF,EAAOI,GAEpBU,EACA,OAAS,CAMP,GAJAd,KADAM,EAAKD,IAAS,GAEdrqE,GAAQsqE,IAGC,IAFTA,EAAMD,IAAS,GAAM,MAiIhB,CAAA,GAAkB,IAAR,GAALC,GAAgB,CACxBD,EAAOH,GAAc,MAAPG,IAA8BL,GAAS,GAAKM,GAAM,IAChE,SAASQ,EAGThN,EAAKvwE,IAAM,wBACXjoD,EAAM+7D,KA1RR,GA2RE,MAAMppE,EAzHN,GAZAsyI,EAAc,MAAPF,EAEHrqE,GADJsqE,GAAM,MAEJN,GAAQp/E,EAAM8+E,MAAU1pE,GACxBA,GAAQ,GACGsqE,IACTN,GAAQp/E,EAAM8+E,MAAU1pE,EACxBA,GAAQ,KAGZuqE,GAAQP,GAAS,GAAKM,GAAM,GAEjBX,EAAM,CACf7L,EAAKvwE,IAAM,gCACXjoD,EAAM+7D,KApKV,GAqKI,MAAMppE,EAOR,GAJA+xI,KAAUM,EACVtqE,GAAQsqE,EAGJC,GADJD,EAAKv4E,EAAO42E,GACG,CAEb,IADA2B,EAAKC,EAAOD,GACHT,GACHvkI,EAAMylI,KAAM,CACdjN,EAAKvwE,IAAM,gCACXjoD,EAAM+7D,KAjLd,GAkLQ,MAAMppE,EA2BV,GAFAgW,EAAO,EACPu8H,EAAcT,EACA,IAAVD,GAEF,GADA77H,GAAQ27H,EAAQU,EACZA,EAAK3hH,EAAK,CACZA,GAAO2hH,EACP,GACEvjE,EAAOhV,KAAUg4E,EAAS97H,aACjBq8H,GACXr8H,EAAO8jD,EAAOw4E,EACdC,EAAczjE,QAGb,GAAI+iE,EAAQQ,GAGf,GAFAr8H,GAAQ27H,EAAQE,EAAQQ,GACxBA,GAAMR,GACGnhH,EAAK,CACZA,GAAO2hH,EACP,GACEvjE,EAAOhV,KAAUg4E,EAAS97H,aACjBq8H,GAEX,GADAr8H,EAAO,EACH67H,EAAQnhH,EAAK,CAEfA,GADA2hH,EAAKR,EAEL,GACE/iE,EAAOhV,KAAUg4E,EAAS97H,aACjBq8H,GACXr8H,EAAO8jD,EAAOw4E,EACdC,EAAczjE,SAMlB,GADA94D,GAAQ67H,EAAQQ,EACZA,EAAK3hH,EAAK,CACZA,GAAO2hH,EACP,GACEvjE,EAAOhV,KAAUg4E,EAAS97H,aACjBq8H,GACXr8H,EAAO8jD,EAAOw4E,EACdC,EAAczjE,EAGlB,KAAOp+C,EAAM,GACXo+C,EAAOhV,KAAUy4E,EAAYv8H,KAC7B84D,EAAOhV,KAAUy4E,EAAYv8H,KAC7B84D,EAAOhV,KAAUy4E,EAAYv8H,KAC7B0a,GAAO,EAELA,IACFo+C,EAAOhV,KAAUy4E,EAAYv8H,KACzB0a,EAAM,IACRo+C,EAAOhV,KAAUy4E,EAAYv8H,WAI9B,CACHA,EAAO8jD,EAAOw4E,EACd,GACExjE,EAAOhV,KAAUgV,EAAO94D,KACxB84D,EAAOhV,KAAUgV,EAAO94D,KACxB84D,EAAOhV,KAAUgV,EAAO94D,KACxB0a,GAAO,QACAA,EAAM,GACXA,IACFo+C,EAAOhV,KAAUgV,EAAO94D,KACpB0a,EAAM,IACRo+C,EAAOhV,KAAUgV,EAAO94D,OAehC,OAkBJ,aAEKy7H,EAAMn0H,GAAQw8C,EAAOrlE,GAI9Bg9I,GADA/gH,EAAMq3C,GAAQ,EAGdgqE,IAAS,IADThqE,GAAQr3C,GAAO,IACO,EAGtBm1G,EAAKU,QAAUkL,EACf5L,EAAKa,SAAW5sE,EAChB+rE,EAAKW,SAAYiL,EAAMn0H,EAAYA,EAAOm0H,EAAZ,EAAmB,GAAKA,EAAMn0H,GAC5DuoH,EAAKC,UAAahsE,EAAOrlE,EAAaA,EAAMqlE,EAAb,IAAqB,KAAOA,EAAOrlE,GAClE4Y,EAAM0kI,KAAOA,EACb1kI,EAAM06D,KAAOA,6BCtVf,aAqBA,IAAInsD,EAAgBjtB,EAAQ,mBACxBi8I,EAAgBj8I,EAAQ,aACxBmyH,EAAgBnyH,EAAQ,WACxBokJ,EAAgBpkJ,EAAQ,aACxBqkJ,EAAgBrkJ,EAAQ,cAuF5B,SAASskJ,EAAQz1E,GACf,OAAWA,IAAM,GAAM,MACbA,IAAM,EAAK,SACP,MAAJA,IAAe,KACX,IAAJA,IAAa,IAIzB,SAAS01E,IACPhlJ,KAAKk7E,KAAO,EACZl7E,KAAKovB,MAAO,EACZpvB,KAAKwrB,KAAO,EACZxrB,KAAKilJ,UAAW,EAChBjlJ,KAAKklJ,MAAQ,EACbllJ,KAAKwjJ,KAAO,EACZxjJ,KAAKmlJ,MAAQ,EACbnlJ,KAAKwtE,MAAQ,EAEbxtE,KAAK8+I,KAAO,KAGZ9+I,KAAKolJ,MAAQ,EACbplJ,KAAKyjJ,MAAQ,EACbzjJ,KAAK0jJ,MAAQ,EACb1jJ,KAAK2jJ,MAAQ,EACb3jJ,KAAKH,OAAS,KAGdG,KAAK6jJ,KAAO,EACZ7jJ,KAAK65E,KAAO,EAGZ75E,KAAKgB,OAAS,EACdhB,KAAK8G,OAAS,EAGd9G,KAAK0iJ,MAAQ,EAGb1iJ,KAAKskJ,QAAU,KACftkJ,KAAKukJ,SAAW,KAChBvkJ,KAAKwkJ,QAAU,EACfxkJ,KAAKykJ,SAAW,EAGhBzkJ,KAAKqlJ,MAAQ,EACbrlJ,KAAKslJ,KAAO,EACZtlJ,KAAKulJ,MAAQ,EACbvlJ,KAAKwlJ,KAAO,EACZxlJ,KAAK2rB,KAAO,KAEZ3rB,KAAKyhF,KAAO,IAAI/zD,EAAMotH,MAAM,KAC5B96I,KAAKylJ,KAAO,IAAI/3H,EAAMotH,MAAM,KAO5B96I,KAAK0lJ,OAAS,KACd1lJ,KAAK2lJ,QAAU,KACf3lJ,KAAK4kJ,KAAO,EACZ5kJ,KAAK4lJ,KAAO,EACZ5lJ,KAAK6lJ,IAAM,EAGb,SAASC,EAAiBnO,GACxB,IAAIx4H,EAEJ,OAAKw4H,GAASA,EAAKx4H,OACnBA,EAAQw4H,EAAKx4H,MACbw4H,EAAKoH,SAAWpH,EAAKoF,UAAY59H,EAAMquD,MAAQ,EAC/CmqE,EAAKvwE,IAAM,GACPjoD,EAAMqM,OACRmsH,EAAKwD,MAAqB,EAAbh8H,EAAMqM,MAErBrM,EAAM+7D,KA1HM,EA2HZ/7D,EAAMiQ,KAAO,EACbjQ,EAAM8lI,SAAW,EACjB9lI,EAAMqkI,KAAO,MACbrkI,EAAM2/H,KAAO,KACb3/H,EAAM0kI,KAAO,EACb1kI,EAAM06D,KAAO,EAEb16D,EAAMmlI,QAAUnlI,EAAMumI,OAAS,IAAIh4H,EAAMqtH,MA7FzB,KA8FhB57H,EAAMolI,SAAWplI,EAAMwmI,QAAU,IAAIj4H,EAAMqtH,MA7F1B,KA+FjB57H,EAAMylI,KAAO,EACbzlI,EAAMymI,MAAQ,EAxJM,IAIA,EAyJtB,SAASG,EAAapO,GACpB,IAAIx4H,EAEJ,OAAKw4H,GAASA,EAAKx4H,QACnBA,EAAQw4H,EAAKx4H,OACPskI,MAAQ,EACdtkI,EAAMukI,MAAQ,EACdvkI,EAAMwkI,MAAQ,EACPmC,EAAiBnO,KAjKJ,EAqKtB,SAASqO,EAAcrO,EAAMN,GAC3B,IAAI7rH,EACArM,EAGJ,OAAKw4H,GAASA,EAAKx4H,OACnBA,EAAQw4H,EAAKx4H,MAGTk4H,EAAa,GACf7rH,EAAO,EACP6rH,GAAcA,IAGd7rH,EAA2B,GAAnB6rH,GAAc,GAClBA,EAAa,KACfA,GAAc,KAKdA,IAAeA,EAAa,GAAKA,EAAa,KA1L9B,GA6LC,OAAjBl4H,EAAMtf,QAAmBsf,EAAMimI,QAAU/N,IAC3Cl4H,EAAMtf,OAAS,MAIjBsf,EAAMqM,KAAOA,EACbrM,EAAMimI,MAAQ/N,EACP0O,EAAapO,MApMA,EAuMtB,SAASuB,EAAavB,EAAMN,GAC1B,IAAIroE,EACA7vD,EAEJ,OAAKw4H,GAGLx4H,EAAQ,IAAI6lI,EAIZrN,EAAKx4H,MAAQA,EACbA,EAAMtf,OAAS,KAvNK,KAwNpBmvE,EAAMg3E,EAAcrO,EAAMN,MAExBM,EAAKx4H,MAAQ,MAER6vD,IAxNa,EA0OtB,IAEIi3E,EAAQC,EAFRC,GAAS,EAIb,SAASC,EAAYjnI,GAEnB,GAAIgnI,EAAQ,CACV,IAAIE,EAOJ,IALAJ,EAAS,IAAIv4H,EAAMqtH,MAAM,KACzBmL,EAAU,IAAIx4H,EAAMqtH,MAAM,IAG1BsL,EAAM,EACCA,EAAM,KAAOlnI,EAAMsiE,KAAK4kE,KAAS,EACxC,KAAOA,EAAM,KAAOlnI,EAAMsiE,KAAK4kE,KAAS,EACxC,KAAOA,EAAM,KAAOlnI,EAAMsiE,KAAK4kE,KAAS,EACxC,KAAOA,EAAM,KAAOlnI,EAAMsiE,KAAK4kE,KAAS,EAMxC,IAJAvB,EArRO,EAqRc3lI,EAAMsiE,KAAM,EAAG,IAAKwkE,EAAU,EAAG9mI,EAAMsmI,KAAM,CAAE5rE,KAAM,IAG1EwsE,EAAM,EACCA,EAAM,IAAMlnI,EAAMsiE,KAAK4kE,KAAS,EAEvCvB,EA1RQ,EA0Ra3lI,EAAMsiE,KAAM,EAAG,GAAMykE,EAAS,EAAG/mI,EAAMsmI,KAAM,CAAE5rE,KAAM,IAG1EssE,GAAS,EAGXhnI,EAAMmlI,QAAU2B,EAChB9mI,EAAMqlI,QAAU,EAChBrlI,EAAMolI,SAAW2B,EACjB/mI,EAAMslI,SAAW,EAkBnB,SAAS6B,EAAa3O,EAAM50H,EAAKxc,EAAK8G,GACpC,IAAI+2I,EACAjlI,EAAQw4H,EAAKx4H,MAqCjB,OAlCqB,OAAjBA,EAAMtf,SACRsf,EAAMskI,MAAQ,GAAKtkI,EAAMimI,MACzBjmI,EAAMwkI,MAAQ,EACdxkI,EAAMukI,MAAQ,EAEdvkI,EAAMtf,OAAS,IAAI6tB,EAAM6qH,KAAKp5H,EAAMskI,QAIlCp2I,GAAQ8R,EAAMskI,OAChB/1H,EAAMwsH,SAAS/6H,EAAMtf,OAAQkjB,EAAKxc,EAAM4Y,EAAMskI,MAAOtkI,EAAMskI,MAAO,GAClEtkI,EAAMwkI,MAAQ,EACdxkI,EAAMukI,MAAQvkI,EAAMskI,SAGpBW,EAAOjlI,EAAMskI,MAAQtkI,EAAMwkI,OAChBt2I,IACT+2I,EAAO/2I,GAGTqgB,EAAMwsH,SAAS/6H,EAAMtf,OAAQkjB,EAAKxc,EAAM8G,EAAM+2I,EAAMjlI,EAAMwkI,QAC1Dt2I,GAAQ+2I,IAGN12H,EAAMwsH,SAAS/6H,EAAMtf,OAAQkjB,EAAKxc,EAAM8G,EAAMA,EAAM,GACpD8R,EAAMwkI,MAAQt2I,EACd8R,EAAMukI,MAAQvkI,EAAMskI,QAGpBtkI,EAAMwkI,OAASS,EACXjlI,EAAMwkI,QAAUxkI,EAAMskI,QAAStkI,EAAMwkI,MAAQ,GAC7CxkI,EAAMukI,MAAQvkI,EAAMskI,QAAStkI,EAAMukI,OAASU,KAG7C,EAuoCT3kJ,EAAQsmJ,aAAeA,EACvBtmJ,EAAQumJ,cAAgBA,EACxBvmJ,EAAQqmJ,iBAAmBA,EAC3BrmJ,EAAQ8mJ,YApvCR,SAAqB5O,GACnB,OAAOuB,EAAavB,EArKN,KAy5ChBl4I,EAAQy5I,aAAeA,EACvBz5I,EAAQ65I,QAzoCR,SAAiB3B,EAAM1tD,GACrB,IAAI9qE,EACAslD,EAAOmc,EACPj1D,EACA66H,EACAhB,EAAMzzI,EACN8xI,EACAhqE,EACA0pE,EAAK33E,EACLv+D,EACAya,EACAu8H,EAEAoC,EAAWC,EAASC,EAEpBC,EAAWC,EAASC,EACpBtkH,EACAwsC,EAEAzd,EAEAnxD,EATA8jJ,EAAO,EAMP6C,EAAO,IAAIr5H,EAAM6qH,KAAK,GAKtByO,EACF,CAAE,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,IAGlE,IAAKrP,IAASA,EAAKx4H,QAAUw4H,EAAK/2D,SAC5B+2D,EAAKlzE,OAA2B,IAAlBkzE,EAAKW,SACvB,OArWkB,EAyBJ,MA+UhBn5H,EAAQw4H,EAAKx4H,OACH+7D,OAAiB/7D,EAAM+7D,KA/Uf,IAmVlBsrE,EAAM7O,EAAKa,SACX53D,EAAS+2D,EAAK/2D,OACd7uE,EAAO4lI,EAAKC,UACZjsH,EAAOgsH,EAAKU,QACZ5zE,EAAQkzE,EAAKlzE,MACb+gF,EAAO7N,EAAKW,SACZuL,EAAO1kI,EAAM0kI,KACbhqE,EAAO16D,EAAM06D,KAGb0pE,EAAMiC,EACN55E,EAAO75D,EACPi9D,EA7XoB,EA+XpBi4E,EACA,OACE,OAAQ9nI,EAAM+7D,MACZ,KAhXQ,EAiXN,GAAmB,IAAf/7D,EAAMqM,KAAY,CACpBrM,EAAM+7D,KAtWI,GAuWV,MAGF,KAAOrB,EAAO,IAAI,CAChB,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGV,GAAkB,EAAb16D,EAAMqM,MAAsB,QAATq4H,EAAiB,CACvC1kI,EAAMgmI,MAAQ,EAEd4B,EAAK,GAAY,IAAPlD,EACVkD,EAAK,GAAMlD,IAAS,EAAK,IACzB1kI,EAAMgmI,MAAQvyB,EAAMzzG,EAAMgmI,MAAO4B,EAAM,EAAG,GAI1ClD,EAAO,EACPhqE,EAAO,EAEP16D,EAAM+7D,KAxYD,EAyYL,MAMF,GAJA/7D,EAAM+lI,MAAQ,EACV/lI,EAAM2/H,OACR3/H,EAAM2/H,KAAK3yH,MAAO,KAED,EAAbhN,EAAMqM,UACA,IAAPq4H,IAA2B,IAAMA,GAAQ,IAAM,GAAI,CACtDlM,EAAKvwE,IAAM,yBACXjoD,EAAM+7D,KAtXH,GAuXH,MAEF,GA7ZU,IA6ZE,GAAP2oE,GAAwC,CAC3ClM,EAAKvwE,IAAM,6BACXjoD,EAAM+7D,KA3XH,GA4XH,MAOF,GAHArB,GAAQ,EAERr3C,EAAiC,GAAnB,IAHdqhH,KAAU,IAIU,IAAhB1kI,EAAMimI,MACRjmI,EAAMimI,MAAQ5iH,OAEX,GAAIA,EAAMrjB,EAAMimI,MAAO,CAC1BzN,EAAKvwE,IAAM,sBACXjoD,EAAM+7D,KAxYH,GAyYH,MAEF/7D,EAAMqkI,KAAO,GAAKhhH,EAElBm1G,EAAKwD,MAAQh8H,EAAMgmI,MAAQ,EAC3BhmI,EAAM+7D,KAAc,IAAP2oE,EAlaL,GAEE,GAkaVA,EAAO,EACPhqE,EAAO,EAEP,MACF,KAhbS,EAkbP,KAAOA,EAAO,IAAI,CAChB,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAIV,GADA16D,EAAM+lI,MAAQrB,EAjcJ,IAkcS,IAAd1kI,EAAM+lI,OAA8B,CACvCvN,EAAKvwE,IAAM,6BACXjoD,EAAM+7D,KAhaH,GAiaH,MAEF,GAAkB,MAAd/7D,EAAM+lI,MAAgB,CACxBvN,EAAKvwE,IAAM,2BACXjoD,EAAM+7D,KAraH,GAsaH,MAEE/7D,EAAM2/H,OACR3/H,EAAM2/H,KAAKt5I,KAASq+I,GAAQ,EAAK,GAEjB,IAAd1kI,EAAM+lI,QAER6B,EAAK,GAAY,IAAPlD,EACVkD,EAAK,GAAMlD,IAAS,EAAK,IACzB1kI,EAAMgmI,MAAQvyB,EAAMzzG,EAAMgmI,MAAO4B,EAAM,EAAG,IAI5ClD,EAAO,EACPhqE,EAAO,EAEP16D,EAAM+7D,KAjdA,EAmdR,KAndQ,EAqdN,KAAOrB,EAAO,IAAI,CAChB,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGN16D,EAAM2/H,OACR3/H,EAAM2/H,KAAK9zE,KAAO64E,GAEF,IAAd1kI,EAAM+lI,QAER6B,EAAK,GAAY,IAAPlD,EACVkD,EAAK,GAAMlD,IAAS,EAAK,IACzBkD,EAAK,GAAMlD,IAAS,GAAM,IAC1BkD,EAAK,GAAMlD,IAAS,GAAM,IAC1B1kI,EAAMgmI,MAAQvyB,EAAMzzG,EAAMgmI,MAAO4B,EAAM,EAAG,IAI5ClD,EAAO,EACPhqE,EAAO,EAEP16D,EAAM+7D,KA3eF,EA6eN,KA7eM,EA+eJ,KAAOrB,EAAO,IAAI,CAChB,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGN16D,EAAM2/H,OACR3/H,EAAM2/H,KAAKuE,OAAiB,IAAPQ,EACrB1kI,EAAM2/H,KAAK6D,GAAMkB,GAAQ,GAET,IAAd1kI,EAAM+lI,QAER6B,EAAK,GAAY,IAAPlD,EACVkD,EAAK,GAAMlD,IAAS,EAAK,IACzB1kI,EAAMgmI,MAAQvyB,EAAMzzG,EAAMgmI,MAAO4B,EAAM,EAAG,IAI5ClD,EAAO,EACPhqE,EAAO,EAEP16D,EAAM+7D,KApgBC,EAsgBT,KAtgBS,EAugBP,GAAkB,KAAd/7D,EAAM+lI,MAAgB,CAExB,KAAOrrE,EAAO,IAAI,CAChB,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGV16D,EAAMne,OAAS6iJ,EACX1kI,EAAM2/H,OACR3/H,EAAM2/H,KAAKwE,UAAYO,GAEP,IAAd1kI,EAAM+lI,QAER6B,EAAK,GAAY,IAAPlD,EACVkD,EAAK,GAAMlD,IAAS,EAAK,IACzB1kI,EAAMgmI,MAAQvyB,EAAMzzG,EAAMgmI,MAAO4B,EAAM,EAAG,IAI5ClD,EAAO,EACPhqE,EAAO,OAGA16D,EAAM2/H,OACb3/H,EAAM2/H,KAAK4D,MAAQ,MAErBvjI,EAAM+7D,KAliBC,EAoiBT,KApiBS,EAqiBP,GAAkB,KAAd/7D,EAAM+lI,SACR73I,EAAO8R,EAAMne,QACFwkJ,IAAQn4I,EAAOm4I,GACtBn4I,IACE8R,EAAM2/H,OACRt8G,EAAMrjB,EAAM2/H,KAAKwE,UAAYnkI,EAAMne,OAC9Bme,EAAM2/H,KAAK4D,QAEdvjI,EAAM2/H,KAAK4D,MAAQ,IAAIlyI,MAAM2O,EAAM2/H,KAAKwE,YAE1C51H,EAAMwsH,SACJ/6H,EAAM2/H,KAAK4D,MACXj+E,EACA94C,EAGAte,EAEAm1B,IAMc,IAAdrjB,EAAM+lI,QACR/lI,EAAMgmI,MAAQvyB,EAAMzzG,EAAMgmI,MAAO1gF,EAAOp3D,EAAMse,IAEhD65H,GAAQn4I,EACRse,GAAQte,EACR8R,EAAMne,QAAUqM,GAEd8R,EAAMne,QAAU,MAAMimJ,EAE5B9nI,EAAMne,OAAS,EACfme,EAAM+7D,KAtkBA,EAwkBR,KAxkBQ,EAykBN,GAAkB,KAAd/7D,EAAM+lI,MAAgB,CACxB,GAAa,IAATM,EAAc,MAAMyB,EACxB55I,EAAO,EACP,GAEEm1B,EAAMiiC,EAAM94C,EAAOte,KAEf8R,EAAM2/H,MAAQt8G,GACbrjB,EAAMne,OAAS,QAClBme,EAAM2/H,KAAKx0I,MAAQF,OAAO22C,aAAave,UAElCA,GAAOn1B,EAAOm4I,GAOvB,GALkB,IAAdrmI,EAAM+lI,QACR/lI,EAAMgmI,MAAQvyB,EAAMzzG,EAAMgmI,MAAO1gF,EAAOp3D,EAAMse,IAEhD65H,GAAQn4I,EACRse,GAAQte,EACJm1B,EAAO,MAAMykH,OAEV9nI,EAAM2/H,OACb3/H,EAAM2/H,KAAKx0I,KAAO,MAEpB6U,EAAMne,OAAS,EACfme,EAAM+7D,KAhmBG,EAkmBX,KAlmBW,EAmmBT,GAAkB,KAAd/7D,EAAM+lI,MAAgB,CACxB,GAAa,IAATM,EAAc,MAAMyB,EACxB55I,EAAO,EACP,GACEm1B,EAAMiiC,EAAM94C,EAAOte,KAEf8R,EAAM2/H,MAAQt8G,GACbrjB,EAAMne,OAAS,QAClBme,EAAM2/H,KAAKlzI,SAAWxB,OAAO22C,aAAave,UAErCA,GAAOn1B,EAAOm4I,GAMvB,GALkB,IAAdrmI,EAAM+lI,QACR/lI,EAAMgmI,MAAQvyB,EAAMzzG,EAAMgmI,MAAO1gF,EAAOp3D,EAAMse,IAEhD65H,GAAQn4I,EACRse,GAAQte,EACJm1B,EAAO,MAAMykH,OAEV9nI,EAAM2/H,OACb3/H,EAAM2/H,KAAKlzI,QAAU,MAEvBuT,EAAM+7D,KAvnBA,EAynBR,KAznBQ,EA0nBN,GAAkB,IAAd/7D,EAAM+lI,MAAgB,CAExB,KAAOrrE,EAAO,IAAI,CAChB,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGV,GAAIgqE,KAAwB,MAAd1kI,EAAMgmI,OAAiB,CACnCxN,EAAKvwE,IAAM,sBACXjoD,EAAM+7D,KAhnBL,GAinBD,MAGF2oE,EAAO,EACPhqE,EAAO,EAGL16D,EAAM2/H,OACR3/H,EAAM2/H,KAAK2D,KAAStjI,EAAM+lI,OAAS,EAAK,EACxC/lI,EAAM2/H,KAAK3yH,MAAO,GAEpBwrH,EAAKwD,MAAQh8H,EAAMgmI,MAAQ,EAC3BhmI,EAAM+7D,KA/oBI,GAgpBV,MACF,KAnpBU,GAqpBR,KAAOrB,EAAO,IAAI,CAChB,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGV89D,EAAKwD,MAAQh8H,EAAMgmI,MAAQJ,EAAQlB,GAEnCA,EAAO,EACPhqE,EAAO,EAEP16D,EAAM+7D,KAhqBA,GAkqBR,KAlqBQ,GAmqBN,GAAuB,IAAnB/7D,EAAM8lI,SASR,OAPAtN,EAAKa,SAAWgO,EAChB7O,EAAKC,UAAY7lI,EACjB4lI,EAAKU,QAAU1sH,EACfgsH,EAAKW,SAAWkN,EAChBrmI,EAAM0kI,KAAOA,EACb1kI,EAAM06D,KAAOA,EApsBD,EAwsBd89D,EAAKwD,MAAQh8H,EAAMgmI,MAAQ,EAC3BhmI,EAAM+7D,KA9qBI,GAgrBZ,KAhrBY,GAirBV,GArtBc,IAqtBV+O,GAptBU,IAotBWA,EAAqB,MAAMg9D,EAEtD,KAlrBc,GAmrBZ,GAAI9nI,EAAMiQ,KAAM,CAEdy0H,KAAiB,EAAPhqE,EACVA,GAAe,EAAPA,EAER16D,EAAM+7D,KA1qBD,GA2qBL,MAGF,KAAOrB,EAAO,GAAG,CACf,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EASV,OANA16D,EAAMiQ,KAAe,EAAPy0H,EAGdhqE,GAAQ,EAGQ,GAJhBgqE,KAAU,IAKR,KAAK,EAGH1kI,EAAM+7D,KA5sBE,GA6sBR,MACF,KAAK,EAKH,GAJAkrE,EAAYjnI,GAGZA,EAAM+7D,KA5sBI,GA3CA,IAwvBN+O,EAAmB,CAErB45D,KAAU,EACVhqE,GAAQ,EAER,MAAMotE,EAER,MACF,KAAK,EAGH9nI,EAAM+7D,KA3tBC,GA4tBP,MACF,KAAK,EACHy8D,EAAKvwE,IAAM,qBACXjoD,EAAM+7D,KAltBL,GAqtBL2oE,KAAU,EACVhqE,GAAQ,EAER,MACF,KAzuBc,GA+uBZ,IAJAgqE,KAAiB,EAAPhqE,EACVA,GAAe,EAAPA,EAGDA,EAAO,IAAI,CAChB,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGV,IAAY,MAAPgqE,KAAqBA,IAAS,GAAM,OAAS,CAChDlM,EAAKvwE,IAAM,+BACXjoD,EAAM+7D,KAxuBH,GAyuBH,MAUF,GARA/7D,EAAMne,OAAgB,MAAP6iJ,EAIfA,EAAO,EACPhqE,EAAO,EAEP16D,EAAM+7D,KAjwBK,GAtCG,IAwyBV+O,EAAqB,MAAMg9D,EAEjC,KApwBa,GAqwBX9nI,EAAM+7D,KApwBI,GAswBZ,KAtwBY,GAwwBV,GADA7tE,EAAO8R,EAAMne,OACH,CAGR,GAFIqM,EAAOm4I,IAAQn4I,EAAOm4I,GACtBn4I,EAAO0E,IAAQ1E,EAAO0E,GACb,IAAT1E,EAAc,MAAM45I,EAExBv5H,EAAMwsH,SAASt5D,EAAQnc,EAAO94C,EAAMte,EAAMm5I,GAE1ChB,GAAQn4I,EACRse,GAAQte,EACR0E,GAAQ1E,EACRm5I,GAAOn5I,EACP8R,EAAMne,QAAUqM,EAChB,MAGF8R,EAAM+7D,KA3xBI,GA4xBV,MACF,KAxxBa,GA0xBX,KAAOrB,EAAO,IAAI,CAChB,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAmBV,GAhBA16D,EAAMmmI,KAAkC,KAAnB,GAAPzB,GAEdA,KAAU,EACVhqE,GAAQ,EAER16D,EAAMomI,MAAmC,GAAnB,GAAP1B,GAEfA,KAAU,EACVhqE,GAAQ,EAER16D,EAAMkmI,MAAmC,GAAnB,GAAPxB,GAEfA,KAAU,EACVhqE,GAAQ,EAGJ16D,EAAMmmI,KAAO,KAAOnmI,EAAMomI,MAAQ,GAAI,CACxC5N,EAAKvwE,IAAM,sCACXjoD,EAAM+7D,KAtyBH,GAuyBH,MAIF/7D,EAAMqmI,KAAO,EACbrmI,EAAM+7D,KAxzBO,GA0zBf,KA1zBe,GA2zBb,KAAO/7D,EAAMqmI,KAAOrmI,EAAMkmI,OAAO,CAE/B,KAAOxrE,EAAO,GAAG,CACf,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGV16D,EAAMsiE,KAAKulE,EAAM7nI,EAAMqmI,SAAmB,EAAP3B,EAEnCA,KAAU,EACVhqE,GAAQ,EAGV,KAAO16D,EAAMqmI,KAAO,IAClBrmI,EAAMsiE,KAAKulE,EAAM7nI,EAAMqmI,SAAW,EAapC,GAPArmI,EAAMmlI,QAAUnlI,EAAMumI,OACtBvmI,EAAMqlI,QAAU,EAEhBjzF,EAAO,CAAEsoB,KAAM16D,EAAMqlI,SACrBx1E,EAAM81E,EA74BF,EA64BuB3lI,EAAMsiE,KAAM,EAAG,GAAItiE,EAAMmlI,QAAS,EAAGnlI,EAAMsmI,KAAMl0F,GAC5EpyC,EAAMqlI,QAAUjzF,EAAKsoB,KAEjB7K,EAAK,CACP2oE,EAAKvwE,IAAM,2BACXjoD,EAAM+7D,KA90BH,GA+0BH,MAGF/7D,EAAMqmI,KAAO,EACbrmI,EAAM+7D,KA91BQ,GAg2BhB,KAh2BgB,GAi2Bd,KAAO/7D,EAAMqmI,KAAOrmI,EAAMmmI,KAAOnmI,EAAMomI,OAAO,CAC5C,KAGEmB,GAFAxC,EAAO/kI,EAAMmlI,QAAQT,GAAS,GAAK1kI,EAAMqlI,SAAW,MAEhC,GAAM,IAC1BmC,EAAkB,MAAPzC,KAFXuC,EAAYvC,IAAS,KAIFrqE,IANZ,CAQP,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGV,GAAI8sE,EAAW,GAEb9C,KAAU4C,EACV5sE,GAAQ4sE,EAERtnI,EAAMsiE,KAAKtiE,EAAMqmI,QAAUmB,MAExB,CACH,GAAiB,KAAbA,EAAiB,CAGnB,IADAvmJ,EAAIqmJ,EAAY,EACT5sE,EAAOz5E,GAAG,CACf,GAAa,IAATolJ,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAOV,GAHAgqE,KAAU4C,EACV5sE,GAAQ4sE,EAEW,IAAftnI,EAAMqmI,KAAY,CACpB7N,EAAKvwE,IAAM,4BACXjoD,EAAM+7D,KA73BT,GA83BG,MAEF14C,EAAMrjB,EAAMsiE,KAAKtiE,EAAMqmI,KAAO,GAC9Bn4I,EAAO,GAAY,EAAPw2I,GAEZA,KAAU,EACVhqE,GAAQ,OAGL,GAAiB,KAAb8sE,EAAiB,CAGxB,IADAvmJ,EAAIqmJ,EAAY,EACT5sE,EAAOz5E,GAAG,CACf,GAAa,IAATolJ,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAKVA,GAAQ4sE,EAERjkH,EAAM,EACNn1B,EAAO,GAAY,GAJnBw2I,KAAU4C,IAMV5C,KAAU,EACVhqE,GAAQ,MAGL,CAGH,IADAz5E,EAAIqmJ,EAAY,EACT5sE,EAAOz5E,GAAG,CACf,GAAa,IAATolJ,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAKVA,GAAQ4sE,EAERjkH,EAAM,EACNn1B,EAAO,IAAa,KAJpBw2I,KAAU4C,IAMV5C,KAAU,EACVhqE,GAAQ,EAGV,GAAI16D,EAAMqmI,KAAOn4I,EAAO8R,EAAMmmI,KAAOnmI,EAAMomI,MAAO,CAChD5N,EAAKvwE,IAAM,4BACXjoD,EAAM+7D,KAn7BP,GAo7BC,MAEF,KAAO7tE,KACL8R,EAAMsiE,KAAKtiE,EAAMqmI,QAAUhjH,GAMjC,GA77BK,KA67BDrjB,EAAM+7D,KAAgB,MAG1B,GAAwB,IAApB/7D,EAAMsiE,KAAK,KAAY,CACzBk2D,EAAKvwE,IAAM,uCACXjoD,EAAM+7D,KAl8BH,GAm8BH,MAeF,GATA/7D,EAAMqlI,QAAU,EAEhBjzF,EAAO,CAAEsoB,KAAM16D,EAAMqlI,SACrBx1E,EAAM81E,EA/gCH,EA+gCuB3lI,EAAMsiE,KAAM,EAAGtiE,EAAMmmI,KAAMnmI,EAAMmlI,QAAS,EAAGnlI,EAAMsmI,KAAMl0F,GAGnFpyC,EAAMqlI,QAAUjzF,EAAKsoB,KAGjB7K,EAAK,CACP2oE,EAAKvwE,IAAM,8BACXjoD,EAAM+7D,KAp9BH,GAq9BH,MAcF,GAXA/7D,EAAMslI,SAAW,EAGjBtlI,EAAMolI,SAAWplI,EAAMwmI,QACvBp0F,EAAO,CAAEsoB,KAAM16D,EAAMslI,UACrBz1E,EAAM81E,EA/hCF,EA+hCuB3lI,EAAMsiE,KAAMtiE,EAAMmmI,KAAMnmI,EAAMomI,MAAOpmI,EAAMolI,SAAU,EAAGplI,EAAMsmI,KAAMl0F,GAG/FpyC,EAAMslI,SAAWlzF,EAAKsoB,KAGlB7K,EAAK,CACP2oE,EAAKvwE,IAAM,wBACXjoD,EAAM+7D,KAr+BH,GAs+BH,MAIF,GADA/7D,EAAM+7D,KAn/BQ,GA3CA,IA+hCV+O,EAAqB,MAAMg9D,EAEjC,KAt/BgB,GAu/Bd9nI,EAAM+7D,KAt/BO,GAw/Bf,KAx/Be,GAy/Bb,GAAIsqE,GAAQ,GAAKzzI,GAAQ,IAAK,CAE5B4lI,EAAKa,SAAWgO,EAChB7O,EAAKC,UAAY7lI,EACjB4lI,EAAKU,QAAU1sH,EACfgsH,EAAKW,SAAWkN,EAChBrmI,EAAM0kI,KAAOA,EACb1kI,EAAM06D,KAAOA,EAEbgrE,EAAalN,EAAM/rE,GAEnB46E,EAAM7O,EAAKa,SACX53D,EAAS+2D,EAAK/2D,OACd7uE,EAAO4lI,EAAKC,UACZjsH,EAAOgsH,EAAKU,QACZ5zE,EAAQkzE,EAAKlzE,MACb+gF,EAAO7N,EAAKW,SACZuL,EAAO1kI,EAAM0kI,KACbhqE,EAAO16D,EAAM06D,KAphCL,KAuhCJ16D,EAAM+7D,OACR/7D,EAAMymI,MAAQ,GAEhB,MAGF,IADAzmI,EAAMymI,KAAO,EAIXc,GAFAxC,EAAO/kI,EAAMmlI,QAAQT,GAAS,GAAK1kI,EAAMqlI,SAAW,MAEhC,GAAM,IAC1BmC,EAAkB,MAAPzC,KAFXuC,EAAYvC,IAAS,KAIJrqE,IANV,CAQP,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGV,GAAI6sE,GAAgC,IAAV,IAAVA,GAAuB,CAIrC,IAHAE,EAAYH,EACZI,EAAUH,EACVI,EAAWH,EAKTD,GAHAxC,EAAO/kI,EAAMmlI,QAAQwC,IACXjD,GAAS,GAAM+C,EAAYC,GAAY,IAAoCD,OAEjE,GAAM,IAC1BD,EAAkB,MAAPzC,IAEN0C,GAJLH,EAAYvC,IAAS,KAIUrqE,IAPxB,CASP,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAIVgqE,KAAU+C,EACV/sE,GAAQ+sE,EAERznI,EAAMymI,MAAQgB,EAQhB,GALA/C,KAAU4C,EACV5sE,GAAQ4sE,EAERtnI,EAAMymI,MAAQa,EACdtnI,EAAMne,OAAS2lJ,EACC,IAAZD,EAAe,CAIjBvnI,EAAM+7D,KAhkCK,GAikCX,MAEF,GAAc,GAAVwrE,EAAc,CAEhBvnI,EAAMymI,MAAQ,EACdzmI,EAAM+7D,KAplCE,GAqlCR,MAEF,GAAc,GAAVwrE,EAAc,CAChB/O,EAAKvwE,IAAM,8BACXjoD,EAAM+7D,KAvkCH,GAwkCH,MAEF/7D,EAAMujI,MAAkB,GAAVgE,EACdvnI,EAAM+7D,KAnlCU,GAqlClB,KArlCkB,GAslChB,GAAI/7D,EAAMujI,MAAO,CAGf,IADAtiJ,EAAI+e,EAAMujI,MACH7oE,EAAOz5E,GAAG,CACf,GAAa,IAATolJ,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGV16D,EAAMne,QAAU6iJ,GAAS,GAAK1kI,EAAMujI,OAAS,EAE7CmB,KAAU1kI,EAAMujI,MAChB7oE,GAAQ16D,EAAMujI,MAEdvjI,EAAMymI,MAAQzmI,EAAMujI,MAGtBvjI,EAAM0mI,IAAM1mI,EAAMne,OAClBme,EAAM+7D,KAxmCQ,GA0mChB,KA1mCgB,GA2mCd,KAGEwrE,GAFAxC,EAAO/kI,EAAMolI,SAASV,GAAS,GAAK1kI,EAAMslI,UAAY,MAElC,GAAM,IAC1BkC,EAAkB,MAAPzC,KAFXuC,EAAYvC,IAAS,KAIFrqE,IANZ,CAQP,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGV,GAAyB,IAAV,IAAV6sE,GAAuB,CAI1B,IAHAE,EAAYH,EACZI,EAAUH,EACVI,EAAWH,EAKTD,GAHAxC,EAAO/kI,EAAMolI,SAASuC,IACZjD,GAAS,GAAM+C,EAAYC,GAAY,IAAoCD,OAEjE,GAAM,IAC1BD,EAAkB,MAAPzC,IAEN0C,GAJLH,EAAYvC,IAAS,KAIUrqE,IAPxB,CASP,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAIVgqE,KAAU+C,EACV/sE,GAAQ+sE,EAERznI,EAAMymI,MAAQgB,EAOhB,GAJA/C,KAAU4C,EACV5sE,GAAQ4sE,EAERtnI,EAAMymI,MAAQa,EACA,GAAVC,EAAc,CAChB/O,EAAKvwE,IAAM,wBACXjoD,EAAM+7D,KAlpCH,GAmpCH,MAEF/7D,EAAMrY,OAAS6/I,EACfxnI,EAAMujI,MAAoB,GAAXgE,EACfvnI,EAAM+7D,KA7pCW,GA+pCnB,KA/pCmB,GAgqCjB,GAAI/7D,EAAMujI,MAAO,CAGf,IADAtiJ,EAAI+e,EAAMujI,MACH7oE,EAAOz5E,GAAG,CACf,GAAa,IAATolJ,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGV16D,EAAMrY,QAAU+8I,GAAS,GAAK1kI,EAAMujI,OAAS,EAE7CmB,KAAU1kI,EAAMujI,MAChB7oE,GAAQ16D,EAAMujI,MAEdvjI,EAAMymI,MAAQzmI,EAAMujI,MAGtB,GAAIvjI,EAAMrY,OAASqY,EAAMqkI,KAAM,CAC7B7L,EAAKvwE,IAAM,gCACXjoD,EAAM+7D,KA9qCH,GA+qCH,MAIF/7D,EAAM+7D,KAxrCS,GA0rCjB,KA1rCiB,GA2rCf,GAAa,IAATnpE,EAAc,MAAMk1I,EAExB,GADA55I,EAAOu+D,EAAO75D,EACVoN,EAAMrY,OAASuG,EAAM,CAEvB,IADAA,EAAO8R,EAAMrY,OAASuG,GACX8R,EAAMukI,OACXvkI,EAAMylI,KAAM,CACdjN,EAAKvwE,IAAM,gCACXjoD,EAAM+7D,KA7rCP,GA8rCC,MAkBA7tE,EAAO8R,EAAMwkI,OACft2I,GAAQ8R,EAAMwkI,MACd77H,EAAO3I,EAAMskI,MAAQp2I,GAGrBya,EAAO3I,EAAMwkI,MAAQt2I,EAEnBA,EAAO8R,EAAMne,SAAUqM,EAAO8R,EAAMne,QACxCqjJ,EAAcllI,EAAMtf,YAGpBwkJ,EAAczjE,EACd94D,EAAO0+H,EAAMrnI,EAAMrY,OACnBuG,EAAO8R,EAAMne,OAEXqM,EAAO0E,IAAQ1E,EAAO0E,GAC1BA,GAAQ1E,EACR8R,EAAMne,QAAUqM,EAChB,GACEuzE,EAAO4lE,KAASnC,EAAYv8H,aACnBza,GACU,IAAjB8R,EAAMne,SAAgBme,EAAM+7D,KA9uCnB,IA+uCb,MACF,KA3uCe,GA4uCb,GAAa,IAATnpE,EAAc,MAAMk1I,EACxBrmE,EAAO4lE,KAASrnI,EAAMne,OACtB+Q,IACAoN,EAAM+7D,KApvCO,GAqvCb,MACF,KAhvCS,GAivCP,GAAI/7D,EAAMqM,KAAM,CAEd,KAAOquD,EAAO,IAAI,CAChB,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IAEA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAcV,GAXAjO,GAAQ75D,EACR4lI,EAAKoF,WAAanxE,EAClBzsD,EAAMquD,OAAS5B,EACXA,IACF+rE,EAAKwD,MAAQh8H,EAAMgmI,MAEdhmI,EAAM+lI,MAAQtyB,EAAMzzG,EAAMgmI,MAAOvkE,EAAQhV,EAAM46E,EAAM56E,GAAQ8wE,EAAQv9H,EAAMgmI,MAAOvkE,EAAQhV,EAAM46E,EAAM56E,IAG7GA,EAAO75D,GAEFoN,EAAM+lI,MAAQrB,EAAOkB,EAAQlB,MAAW1kI,EAAMgmI,MAAO,CACxDxN,EAAKvwE,IAAM,uBACXjoD,EAAM+7D,KArwCL,GAswCD,MAGF2oE,EAAO,EACPhqE,EAAO,EAIT16D,EAAM+7D,KAhxCE,GAkxCV,KAlxCU,GAmxCR,GAAI/7D,EAAMqM,MAAQrM,EAAM+lI,MAAO,CAE7B,KAAOrrE,EAAO,IAAI,CAChB,GAAa,IAAT2rE,EAAc,MAAMyB,EACxBzB,IACA3B,GAAQp/E,EAAM94C,MAAWkuD,EACzBA,GAAQ,EAGV,GAAIgqE,KAAwB,WAAd1kI,EAAMquD,OAAqB,CACvCmqE,EAAKvwE,IAAM,yBACXjoD,EAAM+7D,KA5xCL,GA6xCD,MAGF2oE,EAAO,EACPhqE,EAAO,EAIT16D,EAAM+7D,KAtyCA,GAwyCR,KAxyCQ,GAyyCNlM,EAt1Cc,EAu1Cd,MAAMi4E,EACR,KA1yCO,GA2yCLj4E,GAr1Cc,EAs1Cd,MAAMi4E,EACR,KA5yCO,GA6yCL,OAv1Cc,EAw1ChB,KA7yCQ,GA+yCR,QACE,OA71Cc,EAm3CpB,OARAtP,EAAKa,SAAWgO,EAChB7O,EAAKC,UAAY7lI,EACjB4lI,EAAKU,QAAU1sH,EACfgsH,EAAKW,SAAWkN,EAChBrmI,EAAM0kI,KAAOA,EACb1kI,EAAM06D,KAAOA,GAGT16D,EAAMskI,OAAU73E,IAAS+rE,EAAKC,WAAaz4H,EAAM+7D,KAx0C1C,KAy0CU/7D,EAAM+7D,KA50Cd,IApDO,IAg4CuB+O,KACrCq8D,EAAa3O,EAAMA,EAAK/2D,OAAQ+2D,EAAKa,SAAU5sE,EAAO+rE,EAAKC,YAC7Dz4H,EAAM+7D,KA10CC,IA1CS,IAw3CpBqoE,GAAO5L,EAAKW,SACZ1sE,GAAQ+rE,EAAKC,UACbD,EAAKoH,UAAYwE,EACjB5L,EAAKoF,WAAanxE,EAClBzsD,EAAMquD,OAAS5B,EACXzsD,EAAMqM,MAAQogD,IAChB+rE,EAAKwD,MAAQh8H,EAAMgmI,MAChBhmI,EAAM+lI,MAAQtyB,EAAMzzG,EAAMgmI,MAAOvkE,EAAQhV,EAAM+rE,EAAKa,SAAW5sE,GAAQ8wE,EAAQv9H,EAAMgmI,MAAOvkE,EAAQhV,EAAM+rE,EAAKa,SAAW5sE,IAE/H+rE,EAAKsK,UAAY9iI,EAAM06D,MAAQ16D,EAAMiQ,KAAO,GAAK,IA12CjC,KA22CGjQ,EAAM+7D,KAAgB,IAAM,IAn2C3B,KAo2CD/7D,EAAM+7D,MAz2CR,KAy2CyB/7D,EAAM+7D,KAAiB,IAAM,IACzD,IAARqoE,GAAsB,IAAT33E,GAl5CC,IAk5Ccqe,IA14Cd,IA04CqCjb,IACvDA,GAp4CkB,GAs4CbA,IAyETvvE,EAAQ06I,WAtER,SAAoBxC,GAElB,IAAKA,IAASA,EAAKx4H,MACjB,OA/4CkB,EAk5CpB,IAAIA,EAAQw4H,EAAKx4H,MAKjB,OAJIA,EAAMtf,SACRsf,EAAMtf,OAAS,MAEjB83I,EAAKx4H,MAAQ,KA15CO,GAu9CtB1f,EAAQ25I,iBAzDR,SAA0BzB,EAAMmH,GAC9B,IAAI3/H,EAGJ,OAAKw4H,GAASA,EAAKx4H,MAEM,IAAP,GADlBA,EAAQw4H,EAAKx4H,OACFqM,OAh6CS,GAm6CpBrM,EAAM2/H,KAAOA,EACbA,EAAK3yH,MAAO,EAx6CQ,IAIA,GAo9CtB1sB,EAAQ45I,qBA5CR,SAA8B1B,EAAMI,GAClC,IAEI54H,EAFAgkI,EAAapL,EAAW/2I,OAO5B,OAAK22I,GAAyBA,EAAKx4H,MAGhB,KAFnBA,EAAQw4H,EAAKx4H,OAEHqM,MA35CE,KA25CYrM,EAAM+7D,MAn7CV,EAwBR,KAg6CR/7D,EAAM+7D,MAGCwhE,EAFA,EAEgB3E,EAAYoL,EAAY,KAClChkI,EAAMgmI,OA37CH,EAi8CdmB,EAAa3O,EAAMI,EAAYoL,EAAYA,IAE/ChkI,EAAM+7D,KAx5CG,IA1CS,IAq8CpB/7D,EAAM8lI,SAAW,EA38CG,IAIA,GAq9CtBxlJ,EAAQynJ,YAAc,mJCzgDtB,aAqBA,IAAIx5H,EAAQjtB,EAAQ,mBAWhB0mJ,EAAQ,CACV,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACrD,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,GAG3DC,EAAO,CACT,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAGtDC,EAAQ,CACV,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IACtD,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAClD,KAAM,MAAO,MAAO,MAAO,EAAG,GAG5BC,EAAO,CACT,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACpC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGtB5nJ,EAAOD,QAAU,SAAuByK,EAAMu3E,EAAM8lE,EAAYC,EAAOtuI,EAAOuuI,EAAahC,EAAMl0F,GAE/F,IAYIm2F,EACA/9I,EACAg+I,EACAxtE,EACAxuD,EAIAplB,EAMAkgJ,EAAWC,EAASC,EA1BpB9sE,EAAOtoB,EAAKsoB,KAGZr3C,EAAM,EACN6jH,EAAM,EACN5+I,EAAM,EAAG4H,EAAM,EACfoqH,EAAO,EACPmuB,EAAO,EACPC,EAAO,EACP91I,EAAO,EACP00G,EAAO,EACPqhC,EAAO,EAMPtxF,EAAO,KACPuxF,EAAa,EAGbr4I,EAAQ,IAAIge,EAAMotH,MAAMkN,IACxBC,EAAO,IAAIv6H,EAAMotH,MAAMkN,IACvBtF,EAAQ,KACRwF,EAAc,EAoClB,IAAK1lH,EAAM,EAAGA,GA7FF,GA6FkBA,IAC5B9yB,EAAM8yB,GAAO,EAEf,IAAK6jH,EAAM,EAAGA,EAAMmB,EAAOnB,IACzB32I,EAAM+xE,EAAK8lE,EAAalB,MAK1B,IADA5sB,EAAO5/C,EACFxqE,EAtGO,GAsGQA,GAAO,GACN,IAAfK,EAAML,GADkBA,KAM9B,GAHIoqH,EAAOpqH,IACToqH,EAAOpqH,GAEG,IAARA,EAaF,OATA6J,EAAMuuI,KAAkB,SAMxBvuI,EAAMuuI,KAAkB,SAExBl2F,EAAKsoB,KAAO,EACL,EAET,IAAKpyE,EAAM,EAAGA,EAAM4H,GACC,IAAfK,EAAMjI,GADaA,KASzB,IANIgyH,EAAOhyH,IACTgyH,EAAOhyH,GAITsK,EAAO,EACFywB,EAAM,EAAGA,GApIF,GAoIkBA,IAG5B,GAFAzwB,IAAS,GACTA,GAAQrC,EAAM8yB,IACH,EACT,OAAQ,EAGZ,GAAIzwB,EAAO,IAtID,IAsIO7H,GAA0B,IAARmF,GACjC,OAAQ,EAKV,IADA44I,EAAK,GAAK,EACLzlH,EAAM,EAAGA,EAjJF,GAiJiBA,IAC3BylH,EAAKzlH,EAAM,GAAKylH,EAAKzlH,GAAO9yB,EAAM8yB,GAIpC,IAAK6jH,EAAM,EAAGA,EAAMmB,EAAOnB,IACM,IAA3B5kE,EAAK8lE,EAAalB,KACpBZ,EAAKwC,EAAKxmE,EAAK8lE,EAAalB,OAAWA,GAmE3C,GAtNU,IAyLNn8I,GACFssD,EAAOksF,EAAQ+C,EACfl/I,EAAM,IA1LC,IA4LE2D,GACTssD,EAAO2wF,EACPY,GAAc,IACdrF,EAAQ0E,EACRc,GAAe,IACf3hJ,EAAM,MAGNiwD,EAAO6wF,EACP3E,EAAQ4E,EACR/gJ,GAAO,GAITuhJ,EAAO,EACPzB,EAAM,EACN7jH,EAAM/6B,EACNkkB,EAAO87H,EACPG,EAAOnuB,EACPouB,EAAO,EACPF,GAAO,EAEPxtE,GADAssC,EAAO,GAAKgT,GACE,EAlNL,IAqNJvvH,GAAiBu8G,EA1NN,KAMN,IAqNPv8G,GAAkBu8G,EA1NJ,IA2Nf,OAAO,EAIT,OAAS,CAEPggC,EAAYjkH,EAAMqlH,EACdpC,EAAKY,GAAO9/I,GACdmgJ,EAAU,EACVC,EAAWlB,EAAKY,IAETZ,EAAKY,GAAO9/I,GACnBmgJ,EAAUhE,EAAMwF,EAAczC,EAAKY,IACnCM,EAAWnwF,EAAKuxF,EAAatC,EAAKY,MAGlCK,EAAU,GACVC,EAAW,GAIbe,EAAO,GAAMllH,EAAMqlH,EAEnBpgJ,EADAkC,EAAO,GAAKi+I,EAEZ,GAEE1uI,EAAMyS,GAAQm8H,GAAQD,IADtBl+I,GAAQ+9I,IAC+BjB,GAAa,GAAOC,GAAW,GAAMC,EAAU,QACtE,IAATh9I,GAIT,IADA+9I,EAAO,GAAMllH,EAAM,EACZslH,EAAOJ,GACZA,IAAS,EAWX,GATa,IAATA,GACFI,GAAQJ,EAAO,EACfI,GAAQJ,GAERI,EAAO,EAITzB,IACqB,KAAf32I,EAAM8yB,GAAY,CACtB,GAAIA,IAAQnzB,EAAO,MACnBmzB,EAAMi/C,EAAK8lE,EAAa9B,EAAKY,IAI/B,GAAI7jH,EAAMi3F,IAASquB,EAAO3tE,KAAUwtE,EAAK,CAYvC,IAVa,IAATE,IACFA,EAAOpuB,GAIT9tG,GAAQlkB,EAIRsK,EAAO,IADP61I,EAAOplH,EAAMqlH,GAEND,EAAOC,EAAOx4I,MACnB0C,GAAQrC,EAAMk4I,EAAOC,KACT,IACZD,IACA71I,IAAS,EAKX,GADA00G,GAAQ,GAAKmhC,EA5RR,IA6RA19I,GAAiBu8G,EAlSV,KAMN,IA6RHv8G,GAAkBu8G,EAlSR,IAmSX,OAAO,EAQTvtG,EAJAyuI,EAAMG,EAAO3tE,GAICs/C,GAAQ,GAAOmuB,GAAQ,GAAOj8H,EAAO87H,EAAc,GAiBrE,OAVa,IAATK,IAIF5uI,EAAMyS,EAAOm8H,GAAUtlH,EAAMqlH,GAAS,GAAO,IAAM,GAAK,GAK1Dt2F,EAAKsoB,KAAO4/C,EACL,kDCrVT,aAqBA/5H,EAAOD,QAAU,CACfy3B,EAAQ,kBACRj2B,EAAQ,aACRg2B,EAAQ,GACRkxH,KAAQ,aACRC,KAAQ,eACRC,KAAQ,aACRC,KAAQ,sBACRC,KAAQ,eACRC,KAAQ,kDC9BV,aAuBA,IAAI96H,EAAQjtB,EAAQ,mBAqBpB,SAAS+oC,EAAKhb,GAA6B,IAAtB,IAAIgU,EAAMhU,EAAIxtB,SAAiBwhC,GAAO,GAAKhU,EAAIgU,GAAO,EAI3E,IA2DIimH,EACF,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAEvDC,EACF,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAEhEC,EACF,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAEnCC,EACF,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAgB3CC,EAAgB,IAAIr4I,MAAM,KAC9Bg5B,EAAKq/G,GAOL,IAAIC,EAAgB,IAAIt4I,MAAMu4I,IAC9Bv/G,EAAKs/G,GAKL,IAAIE,EAAgB,IAAIx4I,MAjBJ,KAkBpBg5B,EAAKw/G,GAML,IAAIC,EAAgB,IAAIz4I,MAAMutI,KAC9Bv0G,EAAKy/G,GAGL,IAAIC,EAAgB,IAAI14I,MAhGJ,IAiGpBg5B,EAAK0/G,GAGL,IAkBIC,EACAC,EACAC,EApBAC,EAAgB,IAAI94I,MA3FJ,IAgGpB,SAAS+4I,EAAeC,EAAaC,EAAYC,EAAYC,EAAOC,GAElE5pJ,KAAKwpJ,YAAeA,EACpBxpJ,KAAKypJ,WAAeA,EACpBzpJ,KAAK0pJ,WAAeA,EACpB1pJ,KAAK2pJ,MAAeA,EACpB3pJ,KAAK4pJ,WAAeA,EAGpB5pJ,KAAK6pJ,UAAeL,GAAeA,EAAYxoJ,OASjD,SAAS8oJ,EAASC,EAAUC,GAC1BhqJ,KAAK+pJ,SAAWA,EAChB/pJ,KAAKiqJ,SAAW,EAChBjqJ,KAAKgqJ,UAAYA,EAKnB,SAASE,EAAO9F,GACd,OAAOA,EAAO,IAAM4E,EAAW5E,GAAQ4E,EAAW,KAAO5E,IAAS,IAQpE,SAAS+F,EAAUp5I,EAAGq8D,GAGpBr8D,EAAE8rI,YAAY9rI,EAAE82G,WAAmB,IAALz6C,EAC9Br8D,EAAE8rI,YAAY9rI,EAAE82G,WAAcz6C,IAAM,EAAK,IAQ3C,SAASg9E,EAAUr5I,EAAGxL,EAAOvE,GACvB+P,EAAEgxI,SApIY,GAoIW/gJ,GAC3B+P,EAAE+wI,QAAWv8I,GAASwL,EAAEgxI,SAAY,MACpCoI,EAAUp5I,EAAGA,EAAE+wI,QACf/wI,EAAE+wI,OAASv8I,GAvIK,GAuIgBwL,EAAEgxI,SAClChxI,EAAEgxI,UAAY/gJ,EAxIE,KA0IhB+P,EAAE+wI,QAAWv8I,GAASwL,EAAEgxI,SAAY,MACpChxI,EAAEgxI,UAAY/gJ,GAKlB,SAASqpJ,EAAUt5I,EAAGvQ,EAAGkoE,GACvB0hF,EAAUr5I,EAAG23D,EAAS,EAAJloE,GAAiBkoE,EAAS,EAAJloE,EAAQ,IASlD,SAAS8pJ,EAAWzpJ,EAAM2hC,GACxB,IAAI2zB,EAAM,EACV,GACEA,GAAc,EAAPt1D,EACPA,KAAU,EACVs1D,IAAQ,UACC3zB,EAAM,GACjB,OAAO2zB,IAAQ,EAgIjB,SAASo0F,EAAU7hF,EAAMuhF,EAAU/I,GAKjC,IAEIrnE,EACAz5E,EAHAoqJ,EAAY,IAAIh6I,MAAM2wI,IACtBtgJ,EAAO,EAOX,IAAKg5E,EAAO,EAAGA,GAjTG,GAiTeA,IAC/B2wE,EAAU3wE,GAAQh5E,EAAQA,EAAOqgJ,EAASrnE,EAAO,IAAO,EAS1D,IAAKz5E,EAAI,EAAIA,GAAK6pJ,EAAU7pJ,IAAK,CAC/B,IAAIoiC,EAAMkmC,EAAS,EAAJtoE,EAAQ,GACX,IAARoiC,IAEJkmC,EAAS,EAAJtoE,GAAkBkqJ,EAAWE,EAAUhoH,KAAQA,KAmHxD,SAASioH,EAAW15I,GAClB,IAAI3Q,EAGJ,IAAKA,EAAI,EAAGA,EAlcMsqJ,IAkcQtqJ,IAAO2Q,EAAE4vI,UAAc,EAAJvgJ,GAAkB,EAC/D,IAAKA,EAAI,EAAGA,EAhcM,GAgcQA,IAAO2Q,EAAE8vI,UAAc,EAAJzgJ,GAAkB,EAC/D,IAAKA,EAAI,EAAGA,EA9bM,GA8bQA,IAAO2Q,EAAE+vI,QAAY,EAAJ1gJ,GAAkB,EAE7D2Q,EAAE4vI,UAAUgK,KAA0B,EACtC55I,EAAE4wI,QAAU5wI,EAAE6wI,WAAa,EAC3B7wI,EAAE2uI,SAAW3uI,EAAE8wI,QAAU,EAO3B,SAAS+I,EAAU75I,GAEbA,EAAEgxI,SAAW,EACfoI,EAAUp5I,EAAGA,EAAE+wI,QACN/wI,EAAEgxI,SAAW,IAEtBhxI,EAAE8rI,YAAY9rI,EAAE82G,WAAa92G,EAAE+wI,QAEjC/wI,EAAE+wI,OAAS,EACX/wI,EAAEgxI,SAAW,EA8Bf,SAAS8I,EAAQniF,EAAMtoE,EAAG8kB,EAAGq8H,GAC3B,IAAIuJ,EAAU,EAAJ1qJ,EACN2qJ,EAAU,EAAJ7lI,EACV,OAAQwjD,EAAKoiF,GAAgBpiF,EAAKqiF,IAC1BriF,EAAKoiF,KAAkBpiF,EAAKqiF,IAAiBxJ,EAAMnhJ,IAAMmhJ,EAAMr8H,GASzE,SAAS8lI,EAAWj6I,EAAG23D,EAAM3T,GAO3B,IAFA,IAAIptD,EAAIoJ,EAAEqwI,KAAKrsF,GACXn6C,EAAIm6C,GAAK,EACNn6C,GAAK7J,EAAEswI,WAERzmI,EAAI7J,EAAEswI,UACRwJ,EAAQniF,EAAM33D,EAAEqwI,KAAKxmI,EAAI,GAAI7J,EAAEqwI,KAAKxmI,GAAI7J,EAAEwwI,QAC1C3mI,KAGEiwI,EAAQniF,EAAM/gE,EAAGoJ,EAAEqwI,KAAKxmI,GAAI7J,EAAEwwI,SAGlCxwI,EAAEqwI,KAAKrsF,GAAKhkD,EAAEqwI,KAAKxmI,GACnBm6C,EAAIn6C,EAGJA,IAAM,EAER7J,EAAEqwI,KAAKrsF,GAAKptD,EAUd,SAASsjJ,EAAel6I,EAAGm6I,EAAOC,GAKhC,IAAI/G,EACAgH,EAEAvqJ,EACA6hJ,EAFA2I,EAAK,EAIT,GAAmB,IAAft6I,EAAE2uI,SACJ,GACE0E,EAAQrzI,EAAE8rI,YAAY9rI,EAAE2wI,MAAa,EAAL2J,IAAW,EAAMt6I,EAAE8rI,YAAY9rI,EAAE2wI,MAAa,EAAL2J,EAAS,GAClFD,EAAKr6I,EAAE8rI,YAAY9rI,EAAEywI,MAAQ6J,GAC7BA,IAEa,IAATjH,EACFiG,EAAUt5I,EAAGq6I,EAAIF,IAKjBb,EAAUt5I,GADVlQ,EAAOooJ,EAAamC,IA7jBR,IA8jBmB,EAAGF,GAEpB,KADdxI,EAAQ+F,EAAY5nJ,KAGlBupJ,EAAUr5I,EADVq6I,GAAMlC,EAAYroJ,GACD6hJ,GAMnB2H,EAAUt5I,EAHVlQ,EAAOqpJ,IADP9F,GAImB+G,GAEL,KADdzI,EAAQgG,EAAY7nJ,KAGlBupJ,EAAUr5I,EADVqzI,GAAQkF,EAAUzoJ,GACC6hJ,UAQhB2I,EAAKt6I,EAAE2uI,UAGlB2K,EAAUt5I,EA1jBM,IA0jBQm6I,GAY1B,SAASI,EAAWv6I,EAAG4lD,GAIrB,IAIIv2D,EAAG8kB,EAEH0Q,EANA8yC,EAAW/R,EAAKozF,SAChBwB,EAAW50F,EAAKqzF,UAAUR,YAC1BK,EAAYlzF,EAAKqzF,UAAUH,UAC3BF,EAAWhzF,EAAKqzF,UAAUL,MAE1BM,GAAY,EAUhB,IAHAl5I,EAAEswI,SAAW,EACbtwI,EAAEuwI,SAxmBgB,IA0mBblhJ,EAAI,EAAGA,EAAIupJ,EAAOvpJ,IACQ,IAAzBsoE,EAAS,EAAJtoE,IACP2Q,EAAEqwI,OAAOrwI,EAAEswI,UAAY4I,EAAW7pJ,EAClC2Q,EAAEwwI,MAAMnhJ,GAAK,GAGbsoE,EAAS,EAAJtoE,EAAQ,GAAa,EAS9B,KAAO2Q,EAAEswI,SAAW,GAElB34E,EAAY,GADZ9yC,EAAO7kB,EAAEqwI,OAAOrwI,EAAEswI,UAAa4I,EAAW,IAAMA,EAAW,IACjC,EAC1Bl5I,EAAEwwI,MAAM3rH,GAAQ,EAChB7kB,EAAE4wI,UAEEkI,IACF94I,EAAE6wI,YAAc2J,EAAa,EAAP31H,EAAW,IASrC,IALA+gC,EAAKszF,SAAWA,EAKX7pJ,EAAK2Q,EAAEswI,UAAY,EAAcjhJ,GAAK,EAAGA,IAAO4qJ,EAAWj6I,EAAG23D,EAAMtoE,GAKzEw1B,EAAO+zH,EACP,GAGEvpJ,EAAI2Q,EAAEqwI,KAAK,GACXrwI,EAAEqwI,KAAK,GAAiBrwI,EAAEqwI,KAAKrwI,EAAEswI,YACjC2J,EAAWj6I,EAAG23D,EAAM,GAGpBxjD,EAAInU,EAAEqwI,KAAK,GAEXrwI,EAAEqwI,OAAOrwI,EAAEuwI,UAAYlhJ,EACvB2Q,EAAEqwI,OAAOrwI,EAAEuwI,UAAYp8H,EAGvBwjD,EAAY,EAAP9yC,GAAqB8yC,EAAS,EAAJtoE,GAAkBsoE,EAAS,EAAJxjD,GACtDnU,EAAEwwI,MAAM3rH,IAAS7kB,EAAEwwI,MAAMnhJ,IAAM2Q,EAAEwwI,MAAMr8H,GAAKnU,EAAEwwI,MAAMnhJ,GAAK2Q,EAAEwwI,MAAMr8H,IAAM,EACvEwjD,EAAS,EAAJtoE,EAAQ,GAAasoE,EAAS,EAAJxjD,EAAQ,GAAa0Q,EAGpD7kB,EAAEqwI,KAAK,GAAiBxrH,IACxBo1H,EAAWj6I,EAAG23D,EAAM,SAEb33D,EAAEswI,UAAY,GAEvBtwI,EAAEqwI,OAAOrwI,EAAEuwI,UAAYvwI,EAAEqwI,KAAK,GAjehC,SAAoBrwI,EAAG4lD,GAIrB,IAOIpY,EACAn+C,EAAG8kB,EACH20D,EACA2xE,EACAhsJ,EAXAkpE,EAAkB/R,EAAKozF,SACvBE,EAAkBtzF,EAAKszF,SACvBsB,EAAkB50F,EAAKqzF,UAAUR,YACjCK,EAAkBlzF,EAAKqzF,UAAUH,UACjCnH,EAAkB/rF,EAAKqzF,UAAUP,WACjCjzF,EAAkBG,EAAKqzF,UAAUN,WACjCE,EAAkBjzF,EAAKqzF,UAAUJ,WAMjC6B,EAAW,EAEf,IAAK5xE,EAAO,EAAGA,GArNG,GAqNeA,IAC/B9oE,EAAEmwI,SAASrnE,GAAQ,EAQrB,IAFAnR,EAA0B,EAArB33D,EAAEqwI,KAAKrwI,EAAEuwI,UAAgB,GAAa,EAEtC/iG,EAAIxtC,EAAEuwI,SAAW,EAAG/iG,EAjOP,IAiOsBA,KAEtCs7B,EAAOnR,EAA+B,EAA1BA,EAAS,GADrBtoE,EAAI2Q,EAAEqwI,KAAK7iG,IACc,GAAiB,GAAa,GAC5CqrG,IACT/vE,EAAO+vE,EACP6B,KAEF/iF,EAAS,EAAJtoE,EAAQ,GAAay5E,EAGtBz5E,EAAI6pJ,IAERl5I,EAAEmwI,SAASrnE,KACX2xE,EAAQ,EACJprJ,GAAKo2D,IACPg1F,EAAQ9I,EAAMtiJ,EAAIo2D,IAEpBh3D,EAAIkpE,EAAS,EAAJtoE,GACT2Q,EAAE4wI,SAAWniJ,GAAKq6E,EAAO2xE,GACrB3B,IACF94I,EAAE6wI,YAAcpiJ,GAAK+rJ,EAAU,EAAJnrJ,EAAQ,GAAaorJ,KAGpD,GAAiB,IAAbC,EAAJ,CAMA,EAAG,CAED,IADA5xE,EAAO+vE,EAAa,EACQ,IAArB74I,EAAEmwI,SAASrnE,IAAeA,IACjC9oE,EAAEmwI,SAASrnE,KACX9oE,EAAEmwI,SAASrnE,EAAO,IAAM,EACxB9oE,EAAEmwI,SAAS0I,KAIX6B,GAAY,QACLA,EAAW,GAOpB,IAAK5xE,EAAO+vE,EAAqB,IAAT/vE,EAAYA,IAElC,IADAz5E,EAAI2Q,EAAEmwI,SAASrnE,GACF,IAANz5E,IACL8kB,EAAInU,EAAEqwI,OAAO7iG,IACL0rG,IACJvhF,EAAS,EAAJxjD,EAAQ,KAAe20D,IAE9B9oE,EAAE4wI,UAAY9nE,EAAOnR,EAAS,EAAJxjD,EAAQ,IAAcwjD,EAAS,EAAJxjD,GACrDwjD,EAAS,EAAJxjD,EAAQ,GAAa20D,GAE5Bz5E,MAmZJsrJ,CAAW36I,EAAG4lD,GAGd4zF,EAAU7hF,EAAMuhF,EAAUl5I,EAAEmwI,UAQ9B,SAASyK,EAAU56I,EAAG23D,EAAMuhF,GAK1B,IAAI7pJ,EAEAwrJ,EADAC,GAAW,EAGXC,EAAUpjF,EAAK,GAEfh5D,EAAQ,EACRq8I,EAAY,EACZC,EAAY,EAQhB,IANgB,IAAZF,IACFC,EAAY,IACZC,EAAY,GAEdtjF,EAAsB,GAAhBuhF,EAAW,GAAS,GAAa,MAElC7pJ,EAAI,EAAGA,GAAK6pJ,EAAU7pJ,IACzBwrJ,EAASE,EACTA,EAAUpjF,EAAe,GAATtoE,EAAI,GAAS,KAEvBsP,EAAQq8I,GAAaH,IAAWE,IAG3Bp8I,EAAQs8I,EACjBj7I,EAAE+vI,QAAiB,EAAT8K,IAAwBl8I,EAEd,IAAXk8I,GAELA,IAAWC,GAAW96I,EAAE+vI,QAAiB,EAAT8K,KACpC76I,EAAE+vI,QAAQmL,OAEDv8I,GAAS,GAClBqB,EAAE+vI,QAAQoL,MAGVn7I,EAAE+vI,QAAQqL,MAGZz8I,EAAQ,EACRm8I,EAAUD,EAEM,IAAZE,GACFC,EAAY,IACZC,EAAY,GAEHJ,IAAWE,GACpBC,EAAY,EACZC,EAAY,IAGZD,EAAY,EACZC,EAAY,IAUlB,SAASI,EAAUr7I,EAAG23D,EAAMuhF,GAK1B,IAAI7pJ,EAEAwrJ,EADAC,GAAW,EAGXC,EAAUpjF,EAAK,GAEfh5D,EAAQ,EACRq8I,EAAY,EACZC,EAAY,EAQhB,IALgB,IAAZF,IACFC,EAAY,IACZC,EAAY,GAGT5rJ,EAAI,EAAGA,GAAK6pJ,EAAU7pJ,IAIzB,GAHAwrJ,EAASE,EACTA,EAAUpjF,EAAe,GAATtoE,EAAI,GAAS,OAEvBsP,EAAQq8I,GAAaH,IAAWE,GAAtC,CAGO,GAAIp8I,EAAQs8I,EACjB,GAAK3B,EAAUt5I,EAAG66I,EAAQ76I,EAAE+vI,eAA+B,KAAVpxI,QAE7B,IAAXk8I,GACLA,IAAWC,IACbxB,EAAUt5I,EAAG66I,EAAQ76I,EAAE+vI,SACvBpxI,KAGF26I,EAAUt5I,EA1wBE,GA0wBUA,EAAE+vI,SACxBsJ,EAAUr5I,EAAGrB,EAAQ,EAAG,IAEfA,GAAS,IAClB26I,EAAUt5I,EA3wBE,GA2wBYA,EAAE+vI,SAC1BsJ,EAAUr5I,EAAGrB,EAAQ,EAAG,KAGxB26I,EAAUt5I,EA5wBE,GA4wBcA,EAAE+vI,SAC5BsJ,EAAUr5I,EAAGrB,EAAQ,GAAI,IAG3BA,EAAQ,EACRm8I,EAAUD,EACM,IAAZE,GACFC,EAAY,IACZC,EAAY,GAEHJ,IAAWE,GACpBC,EAAY,EACZC,EAAY,IAGZD,EAAY,EACZC,EAAY,IAhuBlBxiH,EAAK8/G,GAu1BL,IAAI+C,GAAmB,EA4BvB,SAASrJ,EAAiBjyI,EAAGyd,EAAK89H,EAAYl9H,GAM5Cg7H,EAAUr5I,EAAG,GAAuBqe,EAAO,EAAI,GAAI,GAzfrD,SAAoBre,EAAGyd,EAAKgU,EAAKpyB,GAM/Bw6I,EAAU75I,GAENX,IACF+5I,EAAUp5I,EAAGyxB,GACb2nH,EAAUp5I,GAAIyxB,IAKhB9U,EAAMwsH,SAASnpI,EAAE8rI,YAAa9rI,EAAElR,OAAQ2uB,EAAKgU,EAAKzxB,EAAE82G,SACpD92G,EAAE82G,SAAWrlF,EA0eb+pH,CAAWx7I,EAAGyd,EAAK89H,GAAY,GAoKjC7sJ,EAAQyiJ,SAlMR,SAAkBnxI,GAGXs7I,KAxmBP,WACE,IAAIjsJ,EACAy5E,EACA74E,EACAH,EACAujJ,EACAlD,EAAW,IAAI1wI,MAAM2wI,IAiBzB,IADAngJ,EAAS,EACJH,EAAO,EAAGA,EAAO2rJ,GAAkB3rJ,IAEtC,IADAqoJ,EAAYroJ,GAAQG,EACfZ,EAAI,EAAGA,EAAK,GAAKqoJ,EAAY5nJ,GAAQT,IACxC6oJ,EAAajoJ,KAAYH,EAY7B,IAJAooJ,EAAajoJ,EAAS,GAAKH,EAG3BujJ,EAAO,EACFvjJ,EAAO,EAAGA,EAAO,GAAIA,IAExB,IADAyoJ,EAAUzoJ,GAAQujJ,EACbhkJ,EAAI,EAAGA,EAAK,GAAKsoJ,EAAY7nJ,GAAQT,IACxC4oJ,EAAW5E,KAAUvjJ,EAKzB,IADAujJ,IAAS,EACFvjJ,EAjYW,GAiYKA,IAErB,IADAyoJ,EAAUzoJ,GAAQujJ,GAAQ,EACrBhkJ,EAAI,EAAGA,EAAK,GAAMsoJ,EAAY7nJ,GAAQ,EAAKT,IAC9C4oJ,EAAW,IAAM5E,KAAUvjJ,EAM/B,IAAKg5E,EAAO,EAAGA,GAjYG,GAiYeA,IAC/BqnE,EAASrnE,GAAQ,EAInB,IADAz5E,EAAI,EACGA,GAAK,KACVyoJ,EAAiB,EAAJzoJ,EAAQ,GAAa,EAClCA,IACA8gJ,EAAS,KAEX,KAAO9gJ,GAAK,KACVyoJ,EAAiB,EAAJzoJ,EAAQ,GAAa,EAClCA,IACA8gJ,EAAS,KAEX,KAAO9gJ,GAAK,KACVyoJ,EAAiB,EAAJzoJ,EAAQ,GAAa,EAClCA,IACA8gJ,EAAS,KAEX,KAAO9gJ,GAAK,KACVyoJ,EAAiB,EAAJzoJ,EAAQ,GAAa,EAClCA,IACA8gJ,EAAS,KASX,IAHAqJ,EAAU1B,EAAc4D,IAAavL,GAGhC9gJ,EAAI,EAAGA,EA1aM,GA0aOA,IACvB0oJ,EAAiB,EAAJ1oJ,EAAQ,GAAa,EAClC0oJ,EAAiB,EAAJ1oJ,GAAkBkqJ,EAAWlqJ,EAAG,GAI/C+oJ,EAAgB,IAAII,EAAeV,EAAcJ,EAAaiC,IAnb5CA,IAYA,IAwalBtB,EAAgB,IAAIG,EAAeT,EAAcJ,EAAa,EAjb5C,GASA,IAyalBW,EAAiB,IAAIE,EAAe,IAAI/4I,MAAM,GAAIm4I,EAAc,EA/a9C,GAiBF,GAw6Bd+D,GACAL,GAAmB,GAGrBt7I,EAAEgwI,OAAU,IAAI+I,EAAS/4I,EAAE4vI,UAAWwI,GACtCp4I,EAAEiwI,OAAU,IAAI8I,EAAS/4I,EAAE8vI,UAAWuI,GACtCr4I,EAAEkwI,QAAU,IAAI6I,EAAS/4I,EAAE+vI,QAASuI,GAEpCt4I,EAAE+wI,OAAS,EACX/wI,EAAEgxI,SAAW,EAGb0I,EAAW15I,IAmLbtR,EAAQujJ,iBAAmBA,EAC3BvjJ,EAAQw9I,gBAnJR,SAAyBlsI,EAAGyd,EAAK89H,EAAYl9H,GAM3C,IAAIu9H,EAAUC,EACVC,EAAc,EAGd97I,EAAE6X,MAAQ,GAnhCY,IAshCpB7X,EAAE4mI,KAAKsK,YACTlxI,EAAE4mI,KAAKsK,UArGb,SAA0BlxI,GAKxB,IACI3Q,EADA0sJ,EAAa,WAIjB,IAAK1sJ,EAAI,EAAGA,GAAK,GAAIA,IAAK0sJ,KAAgB,EACxC,GAAkB,EAAbA,GAAoD,IAAhC/7I,EAAE4vI,UAAc,EAAJvgJ,GACnC,OAh8BsB,EAq8B1B,GAAoC,IAAhC2Q,EAAE4vI,UAAU,KAA0D,IAAjC5vI,EAAE4vI,UAAU,KAChB,IAAjC5vI,EAAE4vI,UAAU,IACd,OAt8BwB,EAw8B1B,IAAKvgJ,EAAI,GAAIA,EA56BK,IA46BSA,IACzB,GAAoC,IAAhC2Q,EAAE4vI,UAAc,EAAJvgJ,GACd,OA18BsB,EAi9B1B,OAl9B0B,EA0hCH2sJ,CAAiBh8I,IAItCu6I,EAAWv6I,EAAGA,EAAEgwI,QAIhBuK,EAAWv6I,EAAGA,EAAEiwI,QAUhB6L,EAnMJ,SAAuB97I,GACrB,IAAI87I,EAgBJ,IAbAlB,EAAU56I,EAAGA,EAAE4vI,UAAW5vI,EAAEgwI,OAAOkJ,UACnC0B,EAAU56I,EAAGA,EAAE8vI,UAAW9vI,EAAEiwI,OAAOiJ,UAGnCqB,EAAWv6I,EAAGA,EAAEkwI,SASX4L,EAAcG,GAAcH,GAAe,GACW,IAArD97I,EAAE+vI,QAAgC,EAAxB8H,EAASiE,GAAmB,GADOA,KAUnD,OAJA97I,EAAE4wI,SAAW,GAAKkL,EAAc,GAAK,EAAI,EAAI,EAItCA,EAwKSI,CAAcl8I,GAG5B47I,EAAY57I,EAAE4wI,QAAU,EAAI,IAAO,GACnCiL,EAAe77I,EAAE6wI,WAAa,EAAI,IAAO,IAMtB+K,IAAYA,EAAWC,IAI1CD,EAAWC,EAAcN,EAAa,EAGnCA,EAAa,GAAKK,IAAuB,IAATn+H,EASnCw0H,EAAiBjyI,EAAGyd,EAAK89H,EAAYl9H,GA1kCb,IA4kCfre,EAAEwmI,UAAwBqV,IAAgBD,GAEnDvC,EAAUr5I,EAAG,GAAuBqe,EAAO,EAAI,GAAI,GACnD67H,EAAel6I,EAAG83I,EAAcC,KAGhCsB,EAAUr5I,EAAG,GAAoBqe,EAAO,EAAI,GAAI,GAjMpD,SAAwBre,EAAGm8I,EAAQC,EAAQC,GAIzC,IAAI35G,EASJ,IAHA22G,EAAUr5I,EAAGm8I,EAAS,IAAK,GAC3B9C,EAAUr5I,EAAGo8I,EAAS,EAAK,GAC3B/C,EAAUr5I,EAAGq8I,EAAU,EAAI,GACtB35G,EAAO,EAAGA,EAAO25G,EAAS35G,IAE7B22G,EAAUr5I,EAAGA,EAAE+vI,QAAyB,EAAjB8H,EAASn1G,GAAY,GAAY,GAI1D24G,EAAUr7I,EAAGA,EAAE4vI,UAAWuM,EAAS,GAGnCd,EAAUr7I,EAAGA,EAAE8vI,UAAWsM,EAAS,GA4KjCE,CAAet8I,EAAGA,EAAEgwI,OAAOkJ,SAAW,EAAGl5I,EAAEiwI,OAAOiJ,SAAW,EAAG4C,EAAc,GAC9E5B,EAAel6I,EAAGA,EAAE4vI,UAAW5vI,EAAE8vI,YAMnC4J,EAAW15I,GAEPqe,GACFw7H,EAAU75I,IAuEdtR,EAAQ8/I,UA7DR,SAAmBxuI,EAAGqzI,EAAMgH,GAmD1B,OA5CAr6I,EAAE8rI,YAAY9rI,EAAE2wI,MAAqB,EAAb3wI,EAAE2uI,UAAqB0E,IAAS,EAAK,IAC7DrzI,EAAE8rI,YAAY9rI,EAAE2wI,MAAqB,EAAb3wI,EAAE2uI,SAAe,GAAY,IAAP0E,EAE9CrzI,EAAE8rI,YAAY9rI,EAAEywI,MAAQzwI,EAAE2uI,UAAiB,IAAL0L,EACtCr6I,EAAE2uI,WAEW,IAAT0E,EAEFrzI,EAAE4vI,UAAe,EAALyK,MAEZr6I,EAAE8wI,UAEFuC,IAKArzI,EAAE4vI,UAA8C,GAAnCsI,EAAamC,GA9lCV,IA8lC2B,MAC3Cr6I,EAAE8vI,UAAyB,EAAfqJ,EAAO9F,OA0BbrzI,EAAE2uI,WAAa3uI,EAAE0wI,YAAc,GAWzChiJ,EAAQsjJ,UAhKR,SAAmBhyI,GACjBq5I,EAAUr5I,EAAGu8I,EAAmB,GAChCjD,EAAUt5I,EAz8BM,IAy8BQ83I,GA5yB1B,SAAkB93I,GACG,KAAfA,EAAEgxI,UACJoI,EAAUp5I,EAAGA,EAAE+wI,QACf/wI,EAAE+wI,OAAS,EACX/wI,EAAEgxI,SAAW,GAEJhxI,EAAEgxI,UAAY,IACvBhxI,EAAE8rI,YAAY9rI,EAAE82G,WAAwB,IAAX92G,EAAE+wI,OAC/B/wI,EAAE+wI,SAAW,EACb/wI,EAAEgxI,UAAY,GAoyBhBwL,CAASx8I,mDCxiCX,aA8CArR,EAAOD,QAzBP,WAEEO,KAAKykE,MAAQ,KACbzkE,KAAKq4I,QAAU,EAEfr4I,KAAKs4I,SAAW,EAEhBt4I,KAAK++I,SAAW,EAEhB/+I,KAAK4gF,OAAS,KACd5gF,KAAKw4I,SAAW,EAEhBx4I,KAAK43I,UAAY,EAEjB53I,KAAK+8I,UAAY,EAEjB/8I,KAAKonE,IAAM,GAEXpnE,KAAKmf,MAAQ,KAEbnf,KAAKiiJ,UAAY,EAEjBjiJ,KAAKm7I,MAAQ,6BC3Cfz7I,EAAAD,QAAA,CAAA+tJ,yBAAA,cACAC,yBAAA,cACAC,yBAAA,cACAC,yBAAA,cACAC,0BAAA,cACAC,0BAAA,cACAC,0BAAA,cACAC,0BAAA,cACAC,0BAAA,cACAC,0BAAA,cACAC,0BAAA,cACAC,0BAAA,yCCTA,aAEA,IAAIltF,EAAOxgE,EAAQ,WAEnBhB,EAAQ2uJ,YAAc3tJ,EAAQ,iBAE9B,IAAI4tJ,EAAgBptF,EAAKthE,OAAO,iBAAiB,WAC/CK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,WAAW4+I,MACpBvuJ,KAAK2P,IAAI,WAAW4+I,MACpBvuJ,KAAK2P,IAAI,kBAAkB4+I,MAC3BvuJ,KAAK2P,IAAI,mBAAmB4+I,MAC5BvuJ,KAAK2P,IAAI,UAAU4+I,MACnBvuJ,KAAK2P,IAAI,UAAU4+I,MACnBvuJ,KAAK2P,IAAI,aAAa4+I,MACtBvuJ,KAAK2P,IAAI,aAAa4+I,MACtBvuJ,KAAK2P,IAAI,eAAe4+I,UAG5B9uJ,EAAQ4uJ,cAAgBA,EAExB,IAAIG,EAAevtF,EAAKthE,OAAO,gBAAgB,WAC7CK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,WAAW4+I,MACpBvuJ,KAAK2P,IAAI,kBAAkB4+I,UAG/B9uJ,EAAQ+uJ,aAAeA,EAEvB,IAAIC,EAAYxtF,EAAKthE,OAAO,wBAAwB,WAClDK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,aAAa8zD,IAAIirF,GAC1B1uJ,KAAK2P,IAAI,oBAAoBg/I,aAGjClvJ,EAAQgvJ,UAAYA,EAEpB,IAAIC,EAAsBztF,EAAKthE,OAAO,uBAAuB,WAC3DK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,aAAak7D,QACtB7qE,KAAK2P,IAAI,QAAQi/I,QAAQrrF,WACzBvjE,KAAK2P,IAAI,SAASk7D,QAAQtH,WAC1BvjE,KAAK2P,IAAI,UAAU2+I,MAAMj9H,IACvBrxB,KAAK2P,IAAI,KAAK4+I,MACdvuJ,KAAK2P,IAAI,KAAK4+I,MACdvuJ,KAAK2P,IAAI,KAAK4+I,OACdhrF,eAIFsrF,EAAiB5tF,EAAKthE,OAAO,kBAAkB,WACjDK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,WAAW4+I,MACpBvuJ,KAAK2P,IAAI,aAAa8zD,IAAIirF,GAC1B1uJ,KAAK2P,IAAI,qBAAqBm/I,aAGlCrvJ,EAAQsvJ,WAAaF,EACrB,IAAIG,EAA0B/tF,EAAKthE,OAAO,2BAA2B,WACnEK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,aAAa2+I,MAAMj9H,IAC1BrxB,KAAK2P,IAAI,MAAMk7D,QACf7qE,KAAK2P,IAAI,WAAW2+I,MAAMj9H,IACxBrxB,KAAK2P,IAAI,OAAO2+I,MAAMj9H,IACpBrxB,KAAK2P,IAAI,MAAMk7D,QACf7qE,KAAK2P,IAAI,aAAa2+I,MAAMj9H,IAC1BrxB,KAAK2P,IAAI,QAAQm/I,SACjB9uJ,KAAK2P,IAAI,SAAS4+I,QAGtBvuJ,KAAK2P,IAAI,UAAU2+I,MAAMj9H,IACvBrxB,KAAK2P,IAAI,QAAQk7D,QACjB7qE,KAAK2P,IAAI,MAAMm/I,YAIrB9uJ,KAAK2P,IAAI,qBAAqBm/I,aAIlCrvJ,EAAQwvJ,oBAAsBD,EAE9B,IAAIE,EAAgBjuF,EAAKthE,OAAO,iBAAiB,WAC/CK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,WAAW4+I,MACpBvuJ,KAAK2P,IAAI,KAAK4+I,MACdvuJ,KAAK2P,IAAI,KAAK4+I,MACdvuJ,KAAK2P,IAAI,KAAK4+I,MACdvuJ,KAAK2P,IAAI,WAAW4+I,MACpBvuJ,KAAK2P,IAAI,YAAY4+I,UAGzB9uJ,EAAQyvJ,cAAgBA,EAExBzvJ,EAAQ0vJ,SAAWluF,EAAKthE,OAAO,YAAY,WACzCK,KAAKuuJ,SAGP,IAAIa,EAAenuF,EAAKthE,OAAO,gBAAgB,WAC7CK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,WAAW4+I,MACpBvuJ,KAAK2P,IAAI,cAAcm/I,SACvB9uJ,KAAK2P,IAAI,cAAc4zD,WAAWI,SAAS,GAAGF,IAAI4rF,GAClDrvJ,KAAK2P,IAAI,aAAa4zD,WAAWI,SAAS,GAAGgrF,aAGjDlvJ,EAAQ2vJ,aAAeA,EAEvB,IAAIC,EAAepuF,EAAKthE,OAAO,gBAAgB,WAC7CK,KAAKsjE,OAAO,CACVgsF,WAAYtvJ,KAAK6qE,aAIrBprE,EAAQ61F,UAAYr0B,EAAKthE,OAAO,aAAa,WAC3CK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,KAAK4+I,MACdvuJ,KAAK2P,IAAI,KAAK4+I,qECpHlB,aAEA,IAAIgB,EAAM9uJ,EAAQ,WAEd+uJ,EAAOD,EAAI5vJ,OAAO,QAAQ,WAC5BK,KAAKsjE,OAAO,CACVmsF,QAASzvJ,KAAK0vJ,UACdC,YAAa3vJ,KAAK4vJ,eAIlBC,EAAqBN,EAAI5vJ,OAAO,sBAAsB,WACxDK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,QAAQk7D,QACjB7qE,KAAK2P,IAAI,SAAS6zD,UAIlBkrF,EAAsBa,EAAI5vJ,OAAO,uBAAuB,WAC1DK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,aAAak7D,QACtB7qE,KAAK2P,IAAI,cAAc4zD,WACvBvjE,KAAK2P,IAAI,SAASk7D,QAAQtH,eAI1BusF,EAAuBP,EAAI5vJ,OAAO,wBAAwB,WAC5DK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,aAAa8zD,IAAIirF,GAC1B1uJ,KAAK2P,IAAI,oBAAoBg/I,aAI7BoB,EAA4BR,EAAI5vJ,OAAO,6BAA6B,WACtEK,KAAKgwJ,MAAMH,MAGTI,EAAcV,EAAI5vJ,OAAO,eAAe,WAC1CK,KAAKkwJ,MAAMH,MAGT56I,EAAOo6I,EAAI5vJ,OAAO,QAAQ,WAC5BK,KAAKsjE,OAAO,CACV6sF,YAAanwJ,KAAKyjE,IAAIwsF,QAItBG,EAAWb,EAAI5vJ,OAAO,YAAY,WACpCK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,aAAa8zD,IAAI+rF,GAC1BxvJ,KAAK2P,IAAI,YAAY8zD,IAAI+rF,OAIzB1pH,EAAYypH,EAAI5vJ,OAAO,aAAa,WACtCK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,UAAUk7D,QACnB7qE,KAAK2P,IAAI,YAAY0gJ,OAAOhsF,KAAI,GAChCrkE,KAAK2P,IAAI,aAAam/I,aAItBwB,EAAiBf,EAAI5vJ,OAAO,kBAAkB,WAChDK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,WAAWg0D,SAAS,GAAG4qF,MAAMhrF,WACtCvjE,KAAK2P,IAAI,gBAAgB4+I,MACzBvuJ,KAAK2P,IAAI,aAAa8zD,IAAIirF,GAC1B1uJ,KAAK2P,IAAI,UAAU8zD,IAAItuD,GACvBnV,KAAK2P,IAAI,YAAY8zD,IAAI2sF,GACzBpwJ,KAAK2P,IAAI,WAAW8zD,IAAItuD,GACxBnV,KAAK2P,IAAI,wBAAwB8zD,IAAIqsF,GACrC9vJ,KAAK2P,IAAI,kBAAkBi0D,SAAS,GAAG+qF,SAASprF,WAChDvjE,KAAK2P,IAAI,mBAAmBi0D,SAAS,GAAG+qF,SAASprF,WACjDvjE,KAAK2P,IAAI,cAAcg0D,SAAS,GAAGusF,MAAMpqH,GAAWy9B,eAIpDgtF,EAAkBhB,EAAI5vJ,OAAO,mBAAmB,WAClDK,KAAKsuJ,MAAMj9H,IACTrxB,KAAK2P,IAAI,kBAAkB8zD,IAAI6sF,GAC/BtwJ,KAAK2P,IAAI,sBAAsB8zD,IAAIirF,GACnC1uJ,KAAK2P,IAAI,kBAAkBg/I,aAI/BjvJ,EAAOD,QAAU8wJ,sDCvFjB,IAAIC,EAAW,wHACXC,EAAa,8CACbC,EAAY,iFACZC,EAAMlwJ,EAAQ,kBACdioF,EAAUjoF,EAAQ,kBAClBknB,EAASlnB,EAAQ,eAAeknB,OACpCjoB,EAAOD,QAAU,SAAUmxJ,EAAMzrI,GAC/B,IAEI0rI,EAFAlhJ,EAAMihJ,EAAK1lJ,WACXyC,EAAQgC,EAAIhC,MAAM6iJ,GAEtB,GAAK7iJ,EAGE,CACL,IAAIm8E,EAAQ,MAAQn8E,EAAM,GACtBm5E,EAAKn/D,EAAOG,KAAKna,EAAM,GAAI,OAC3BmjJ,EAAanpI,EAAOG,KAAKna,EAAM,GAAGxB,QAAQ,UAAW,IAAK,UAC1D4kJ,EAAYJ,EAAIxrI,EAAU2hE,EAAG7oE,MAAM,EAAG,GAAIuP,SAAS7f,EAAM,GAAI,KAAKgC,IAClEozD,EAAM,GACNqpB,EAAS1D,EAAQS,iBAAiBW,EAAOinE,EAAWjqE,GACxD/jB,EAAItzD,KAAK28E,EAAOliE,OAAO4mI,IACvB/tF,EAAItzD,KAAK28E,EAAO/D,SAChBwoE,EAAYlpI,EAAOhlB,OAAOogE,OAZhB,CACV,IAAIiuF,EAASrhJ,EAAIhC,MAAM+iJ,GACvBG,EAAYlpI,EAAOG,KAAKkpI,EAAO,GAAG7kJ,QAAQ,UAAW,IAAK,UAa5D,MAAO,CACLqyB,IAFQ7uB,EAAIhC,MAAM8iJ,GAAY,GAG9B9rJ,KAAMksJ,yUC5BV,IAAI5vF,EAAOxgE,EAAQ,UACfwwJ,EAAQxwJ,EAAQ,gBAChBywJ,EAAUzwJ,EAAQ,aAClBioF,EAAUjoF,EAAQ,kBAClB0wJ,EAAS1wJ,EAAQ,UACjBknB,EAASlnB,EAAQ,eAAeknB,OAGpC,SAAS4rE,EAAWxrE,GAClB,IAAI5C,EACkB,WAAlBvf,EAAOmiB,IAAwBJ,EAAOs6C,SAASl6C,KACjD5C,EAAW4C,EAAOqpI,WAClBrpI,EAASA,EAAOpY,KAEI,iBAAXoY,IACTA,EAASJ,EAAOG,KAAKC,IAGvB,IAIIspI,EAASC,EAJTC,EAAWL,EAAQnpI,EAAQ5C,GAE3Bjb,EAAOqnJ,EAAS/yH,IAChB75B,EAAO4sJ,EAAS5sJ,KAEpB,OAAQuF,GACN,IAAK,cACHonJ,EAAQrwF,EAAKmtF,YAAYt4I,OAAOnR,EAAM,OAAO6sJ,eAAeC,qBAE9D,IAAK,aAKH,OAJKH,IACHA,EAAQrwF,EAAKwtF,UAAU34I,OAAOnR,EAAM,QAEtC0sJ,EAAUC,EAAMvnI,UAAUA,UAAUzd,KAAK,MAEvC,IAAK,uBACH,OAAO20D,EAAKutF,aAAa14I,OAAOw7I,EAAMI,iBAAiB/sJ,KAAM,OAC/D,IAAK,oBAEH,OADA2sJ,EAAMp8D,kBAAoBo8D,EAAMI,iBACzB,CACLxnJ,KAAM,KACNvF,KAAM2sJ,GAEV,IAAK,oBAEH,OADAA,EAAMvnI,UAAU4qE,OAAOS,QAAUn0B,EAAKkuF,SAASr5I,OAAOw7I,EAAMI,iBAAiB/sJ,KAAM,OAC5E,CACLuF,KAAM,MACNvF,KAAM2sJ,EAAMvnI,UAAU4qE,QAE1B,QAAS,MAAM,IAAI/zF,MAAM,kBAAoBywJ,GAGjD,IAAK,wBAEH1sJ,EAyCN,SAAkBA,EAAMwgB,GACtB,IAAIohG,EAAO5hH,EAAKolB,UAAUg9D,QAAQ4qE,IAAIC,UAAUrrC,KAC5CsrC,EAAQrkI,SAAS7oB,EAAKolB,UAAUg9D,QAAQ4qE,IAAIC,UAAUC,MAAM3mJ,WAAY,IACxEwoF,EAAOu9D,EAAMtsJ,EAAKolB,UAAUg9D,QAAQqF,OAAOsH,KAAKpnF,KAAK,MACrDw6E,EAAKniF,EAAKolB,UAAUg9D,QAAQqF,OAAOtF,GACnCgqE,EAAansJ,EAAKuwF,kBAClB48D,EAAStkI,SAASkmE,EAAKx/E,MAAM,KAAK,GAAI,IAAM,EAC5CvE,EAAMwhJ,EAAOhvD,WAAWh9E,EAAUohG,EAAMsrC,EAAOC,EAAQ,QACvD1lE,EAAS1D,EAAQS,iBAAiBuK,EAAM/jF,EAAKm3E,GAC7C/jB,EAAM,GAGV,OAFAA,EAAItzD,KAAK28E,EAAOliE,OAAO4mI,IACvB/tF,EAAItzD,KAAK28E,EAAO/D,SACT1gE,EAAOhlB,OAAOogE,GArDVgkB,CADPpiF,EAAOs8D,EAAKguF,oBAAoBn5I,OAAOnR,EAAM,OACxBwgB,GAEvB,IAAK,cAGH,OADAksI,GADAC,EAAQrwF,EAAK8tF,WAAWj5I,OAAOnR,EAAM,QACrBolB,UAAUA,UAAUzd,KAAK,MAEvC,IAAK,uBACH,OAAO20D,EAAKotF,cAAcv4I,OAAOw7I,EAAMp8D,kBAAmB,OAC5D,IAAK,oBACH,MAAO,CACLb,MAAOi9D,EAAMvnI,UAAUsqE,MACvBG,WAAYvzB,EAAKmuF,aAAat5I,OAAOw7I,EAAMp8D,kBAAmB,OAAOV,YAEzE,IAAK,oBAEH,OADA88D,EAAMvnI,UAAU4qE,OAAOC,SAAW3zB,EAAKkuF,SAASr5I,OAAOw7I,EAAMp8D,kBAAmB,OACzE,CACLhrF,KAAM,MACNyqF,OAAQ28D,EAAMvnI,UAAU4qE,QAE5B,QAAS,MAAM,IAAI/zF,MAAM,kBAAoBywJ,GAGjD,IAAK,iBACH,OAAOpwF,EAAKutF,aAAa14I,OAAOnR,EAAM,OACxC,IAAK,kBACH,OAAOs8D,EAAKotF,cAAcv4I,OAAOnR,EAAM,OACzC,IAAK,kBACH,MAAO,CACLuF,KAAM,MACNyqF,OAAQ1zB,EAAKiuF,cAAcp5I,OAAOnR,EAAM,QAE5C,IAAK,iBAEH,MAAO,CACL0vF,OAFF1vF,EAAOs8D,EAAKmuF,aAAat5I,OAAOnR,EAAM,QAExBotJ,WAAWxsJ,MACvBivF,WAAY7vF,EAAK6vF,YAErB,QAAS,MAAM,IAAI5zF,MAAM,oBAAsBsJ,IAnFnDxK,EAAOD,QAAU8zF,EAsFjBA,EAAU+B,UAAYr0B,EAAKq0B,kJC5F3B71F,EAAQyiG,OAASzhG,EAAQ,eACzBhB,EAAQ0iG,WAAa1hG,EAAQ,sGCD7B,IAOIuxJ,EAPArqI,EAASlnB,EAAQ,eAAeknB,OAEhCsqI,EAAkBxxJ,EAAQ,kBAC1ByxJ,EAAkBzxJ,EAAQ,sBAC1B0xJ,EAAO1xJ,EAAQ,UACfutB,EAAWvtB,EAAQ,eAGnB2xJ,EAAStyJ,EAAO+pB,QAAU/pB,EAAO+pB,OAAOuoI,OACxCC,EAAY,CACdtxD,IAAK,QACLuxD,QAAS,QACT5qC,KAAM,QACN32B,OAAQ,UACRwhE,UAAW,UACXthE,OAAQ,UACRuhE,UAAW,UACXC,UAAW,UACXvhE,OAAQ,WAENwhE,EAAS,GAsBb,SAASC,EAAextI,EAAUohG,EAAMqsC,EAAY5xJ,EAAQ0yF,GAC1D,OAAO0+D,EAAOS,UACZ,MAAO1tI,EAAU,CAAE7a,KAAM,WAAY,EAAO,CAAC,eAC7CmkD,MAAK,SAAU9+C,GACf,OAAOyiJ,EAAOU,WAAW,CACvBxoJ,KAAM,SACNi8G,KAAMA,EACNqsC,WAAYA,EACZ9oI,KAAM,CACJxf,KAAMopF,IAEP/jF,EAAK3O,GAAU,MACjBytD,MAAK,SAAU0H,GAChB,OAAOxuC,EAAOG,KAAKquC,MAevBz2D,EAAOD,QAAU,SAAU0lB,EAAUohG,EAAMqsC,EAAYd,EAAQ3nI,EAAQ9X,GAC/C,mBAAX8X,IACT9X,EAAW8X,EACXA,OAAS7lB,GAIX,IAAIovF,EAAO2+D,GADXloI,EAASA,GAAU,QACSnN,eAE5B,IAAK02E,GAAkC,mBAAnB5zF,EAAOmD,QACzB,OAAO8sB,EAAQC,UAAS,WACtB,IAAI+yC,EACJ,IACEA,EAAMovF,EAAKhtI,EAAUohG,EAAMqsC,EAAYd,EAAQ3nI,GAC/C,MAAOhqB,GACP,OAAOkS,EAASlS,GAElBkS,EAAS,KAAM0wD,MAOnB,GAHAkvF,EAAgBW,EAAYd,GAC5B3sI,EAAW6I,EAAS7I,EAAU+sI,EAAiB,YAC/C3rC,EAAOv4F,EAASu4F,EAAM2rC,EAAiB,QACf,mBAAb7/I,EAAyB,MAAM,IAAIzR,MAAM,mCAnCtD,SAAyB8nI,EAASr2H,GAChCq2H,EAAQj6E,MAAK,SAAUsU,GACrBhzC,EAAQC,UAAS,WACf3d,EAAS,KAAM0wD,SAEhB,SAAU5iE,GACX4vB,EAAQC,UAAS,WACf3d,EAASlS,SA8Bb4yJ,CA3EF,SAAsBr/D,GACpB,GAAI5zF,EAAOiwB,UAAYjwB,EAAOiwB,QAAQ8G,QACpC,OAAO5zB,QAAQC,SAAQ,GAEzB,IAAKkvJ,IAAWA,EAAOS,YAAcT,EAAOU,WAC1C,OAAO7vJ,QAAQC,SAAQ,GAEzB,QAAqBoB,IAAjBouJ,EAAOh/D,GACT,OAAOg/D,EAAOh/D,GAGhB,IAAIs/D,EAAOL,EADXX,EAAWA,GAAYrqI,EAAO8C,MAAM,GACDunI,EAAU,GAAI,IAAKt+D,GACnDjlC,MAAK,WACJ,OAAO,KACNsH,OAAM,WACP,OAAO,KAGX,OADA28F,EAAOh/D,GAAQs/D,EACRA,EAyDQC,CAAYv/D,GAAMjlC,MAAK,SAAUykG,GAC9C,OAAIA,EAAaP,EAAcxtI,EAAUohG,EAAMqsC,EAAYd,EAAQp+D,GAE5Dy+D,EAAKhtI,EAAUohG,EAAMqsC,EAAYd,EAAQ3nI,MAC9C9X,mSCpGN,IAAI6/I,EAEJ,GAAIniI,EAAQ8G,QACVq7H,EAAkB,aACb,GAAIniI,EAAQqG,QAAS,CAG1B87H,EAFoB1kI,SAASuC,EAAQqG,QAAQliB,MAAM,KAAK,GAAG+J,MAAM,GAAI,KAElC,EAAI,QAAU,cAEjDi0I,EAAkB,QAEpBxyJ,EAAOD,QAAUyyJ,gFCXjB,IAAIiB,EAAY3rJ,KAAKomE,IAAI,EAAG,IAAM,EAElCluE,EAAOD,QAAU,SAAUmzJ,EAAYd,GACrC,GAA0B,iBAAfc,EACT,MAAM,IAAIviG,UAAU,2BAGtB,GAAIuiG,EAAa,EACf,MAAM,IAAIviG,UAAU,kBAGtB,GAAsB,iBAAXyhG,EACT,MAAM,IAAIzhG,UAAU,2BAGtB,GAAIyhG,EAAS,GAAKA,EAASqB,GAAarB,GAAWA,EACjD,MAAM,IAAIzhG,UAAU,0DChBxB,IAAI8wC,EAAM1gG,EAAQ,mBACdqgG,EAAYrgG,EAAQ,aACpBsgG,EAAMtgG,EAAQ,UACdknB,EAASlnB,EAAQ,eAAeknB,OAEhCsqI,EAAkBxxJ,EAAQ,kBAC1ByxJ,EAAkBzxJ,EAAQ,sBAC1ButB,EAAWvtB,EAAQ,eAEnB2gG,EAAQz5E,EAAO8C,MAAM,KACrB2oI,EAAQ,CACVjyD,IAAK,GACLumB,KAAM,GACN12B,OAAQ,GACRD,OAAQ,GACRE,OAAQ,GACRC,OAAQ,GACRmiE,OAAQ,GACR1rC,UAAW,IAGb,SAAStmB,EAAMJ,EAAKtxF,EAAK2jJ,GACvB,IAAIxpI,EAkCN,SAAoBm3E,GAClB,SAASsyD,EAAS5uJ,GAChB,OAAOo8F,EAAIE,GAAK/2E,OAAOvlB,GAAMwlB,SAM/B,MAAY,WAAR82E,GAA4B,cAARA,EAJxB,SAAqBt8F,GACnB,OAAO,IAAIm8F,GAAY52E,OAAOvlB,GAAMwlB,UAI1B,QAAR82E,EAAsBE,EACnBoyD,EA5CIC,CAAUvyD,GACjBK,EAAqB,WAARL,GAA4B,WAARA,EAAoB,IAAM,GAE3DtxF,EAAI3O,OAASsgG,EACf3xF,EAAMma,EAAKna,GACFA,EAAI3O,OAASsgG,IACtB3xF,EAAMgY,EAAOhlB,OAAO,CAACgN,EAAKyxF,GAAQE,IAKpC,IAFA,IAAIE,EAAO75E,EAAOm7D,YAAYwe,EAAY8xD,EAAMnyD,IAC5CS,EAAO/5E,EAAOm7D,YAAYwe,EAAY8xD,EAAMnyD,IACvC1gG,EAAI,EAAGA,EAAI+gG,EAAW/gG,IAC7BihG,EAAKjhG,GAAc,GAAToP,EAAIpP,GACdmhG,EAAKnhG,GAAc,GAAToP,EAAIpP,GAGhB,IAAIkzJ,EAAQ9rI,EAAOm7D,YAAYwe,EAAYgyD,EAAU,GACrD9xD,EAAKn0F,KAAKomJ,EAAO,EAAG,EAAGnyD,GACvBthG,KAAKyzJ,MAAQA,EACbzzJ,KAAK0zJ,MAAQlyD,EACbxhG,KAAK0hG,KAAOA,EACZ1hG,KAAKihG,IAAMA,EACXjhG,KAAKshG,UAAYA,EACjBthG,KAAK8pB,KAAOA,EACZ9pB,KAAK2qB,KAAOyoI,EAAMnyD,GAGpBI,EAAKlwE,UAAUwiI,IAAM,SAAUhvJ,EAAM68F,GAInC,OAHA78F,EAAK0I,KAAKm0F,EAAMxhG,KAAKshG,WACbthG,KAAK8pB,KAAK03E,GAChBn0F,KAAKrN,KAAK0hG,KAAM1hG,KAAKshG,WAChBthG,KAAK8pB,KAAK9pB,KAAK0hG,OAmDxBhiG,EAAOD,QAnCP,SAAiB0lB,EAAUohG,EAAMqsC,EAAYd,EAAQ3nI,GACnD8nI,EAAgBW,EAAYd,GAM5B,IAAIrqC,EAAO,IAAIpmB,EAFfl3E,EAASA,GAAU,OAHnBhF,EAAW6I,EAAS7I,EAAU+sI,EAAiB,aAC/C3rC,EAAOv4F,EAASu4F,EAAM2rC,EAAiB,SAIIlxJ,QAEvC4yJ,EAAKjsI,EAAOm7D,YAAYgvE,GACxB+B,EAASlsI,EAAOm7D,YAAYyjC,EAAKvlH,OAAS,GAC9CulH,EAAKl5G,KAAKwmJ,EAAQ,EAAG,EAAGttC,EAAKvlH,QAM7B,IAJA,IAAI8yJ,EAAU,EACVC,EAAOX,EAAMjpI,GACb1T,EAAIjP,KAAK2lE,KAAK2kF,EAASiC,GAElBxzJ,EAAI,EAAGA,GAAKkW,EAAGlW,IAAK,CAC3BszJ,EAAOvtE,cAAc/lF,EAAGgmH,EAAKvlH,QAK7B,IAHA,IAAI2N,EAAI84G,EAAKksC,IAAIE,EAAQpsC,EAAKgsC,OAC1BO,EAAIrlJ,EAECiM,EAAI,EAAGA,EAAIg4I,EAAYh4I,IAAK,CACnCo5I,EAAIvsC,EAAKksC,IAAIK,EAAGvsC,EAAKisC,OACrB,IAAK,IAAI3+F,EAAI,EAAGA,EAAIg/F,EAAMh/F,IAAKpmD,EAAEomD,IAAMi/F,EAAEj/F,GAG3CpmD,EAAEtB,KAAKumJ,EAAIE,GACXA,GAAWC,EAGb,OAAOH,4KCrGT,IAAIjsI,EAASlnB,EAAQ,eAAeknB,OAEpCjoB,EAAOD,QAAU,SAAUuqF,EAAOvjF,EAAU6D,GAC1C,GAAIqd,EAAOs6C,SAAS+nB,GAClB,OAAOA,EACF,GAAqB,iBAAVA,EAChB,OAAOriE,EAAOG,KAAKkiE,EAAOvjF,GACrB,GAAIqpB,YAAYymE,OAAOvM,GAC5B,OAAOriE,EAAOG,KAAKkiE,EAAMjiE,QAEzB,MAAM,IAAIsoC,UAAU/lD,EAAO,qHCV/B,kBAEuB,IAAZylB,IACNA,EAAQqG,SAC0B,IAAnCrG,EAAQqG,QAAQ9L,QAAQ,QACW,IAAnCyF,EAAQqG,QAAQ9L,QAAQ,QAAqD,IAArCyF,EAAQqG,QAAQ9L,QAAQ,SAClE5qB,EAAOD,QAAU,CAAEuwB,SAKrB,SAAkBmzF,EAAIc,EAAME,EAAME,GAChC,GAAkB,mBAAPlB,EACT,MAAM,IAAI9yD,UAAU,0CAEtB,IACIuK,EAAMr6D,EADNiiC,EAAMz7B,UAAU/F,OAEpB,OAAQwhC,GACR,KAAK,EACL,KAAK,EACH,OAAOzS,EAAQC,SAASmzF,GAC1B,KAAK,EACH,OAAOpzF,EAAQC,UAAS,WACtBmzF,EAAGpiH,KAAK,KAAMkjH,MAElB,KAAK,EACH,OAAOl0F,EAAQC,UAAS,WACtBmzF,EAAGpiH,KAAK,KAAMkjH,EAAME,MAExB,KAAK,EACH,OAAOp0F,EAAQC,UAAS,WACtBmzF,EAAGpiH,KAAK,KAAMkjH,EAAME,EAAME,MAE9B,QAGE,IAFAzpD,EAAO,IAAIpqD,MAAMgyB,EAAM,GACvBjiC,EAAI,EACGA,EAAIq6D,EAAK55D,QACd45D,EAAKr6D,KAAOwG,UAAUxG,GAExB,OAAOwvB,EAAQC,UAAS,WACtBmzF,EAAG9gG,MAAM,KAAMu4C,SAhCnBl7D,EAAOD,QAAUswB,gFCPnB,IAOIkkI,EACAC,EARAnkI,EAAUrwB,EAAOD,QAAU,GAU/B,SAAS00J,IACL,MAAM,IAAIvzJ,MAAM,mCAEpB,SAASwzJ,IACL,MAAM,IAAIxzJ,MAAM,qCAsBpB,SAASyzJ,EAAWC,GAChB,GAAIL,IAAqBphI,WAErB,OAAOA,WAAWyhI,EAAK,GAG3B,IAAKL,IAAqBE,IAAqBF,IAAqBphI,WAEhE,OADAohI,EAAmBphI,WACZA,WAAWyhI,EAAK,GAE3B,IAEI,OAAOL,EAAiBK,EAAK,GAC/B,MAAMn0J,GACJ,IAEI,OAAO8zJ,EAAiBlzJ,KAAK,KAAMuzJ,EAAK,GAC1C,MAAMn0J,GAEJ,OAAO8zJ,EAAiBlzJ,KAAKf,KAAMs0J,EAAK,MAvCnD,WACG,IAEQL,EADsB,mBAAfphI,WACYA,WAEAshI,EAEzB,MAAOh0J,GACL8zJ,EAAmBE,EAEvB,IAEQD,EADwB,mBAAjBK,aACcA,aAEAH,EAE3B,MAAOj0J,GACL+zJ,EAAqBE,GAjB5B,GAwED,IAEII,EAFArjC,EAAQ,GACRxB,GAAW,EAEX8kC,GAAc,EAElB,SAASC,IACA/kC,GAAa6kC,IAGlB7kC,GAAW,EACP6kC,EAAaxzJ,OACbmwH,EAAQqjC,EAAa7xJ,OAAOwuH,GAE5BsjC,GAAc,EAEdtjC,EAAMnwH,QACN2zJ,KAIR,SAASA,IACL,IAAIhlC,EAAJ,CAGA,IAAIilC,EAAUP,EAAWK,GACzB/kC,GAAW,EAGX,IADA,IAAIntF,EAAM2uF,EAAMnwH,OACVwhC,GAAK,CAGP,IAFAgyH,EAAerjC,EACfA,EAAQ,KACCsjC,EAAajyH,GACdgyH,GACAA,EAAaC,GAAYd,MAGjCc,GAAc,EACdjyH,EAAM2uF,EAAMnwH,OAEhBwzJ,EAAe,KACf7kC,GAAW,EAnEf,SAAyBklC,GACrB,GAAIX,IAAuBK,aAEvB,OAAOA,aAAaM,GAGxB,IAAKX,IAAuBE,IAAwBF,IAAuBK,aAEvE,OADAL,EAAqBK,aACdA,aAAaM,GAExB,IAEWX,EAAmBW,GAC5B,MAAO10J,GACL,IAEI,OAAO+zJ,EAAmBnzJ,KAAK,KAAM8zJ,GACvC,MAAO10J,GAGL,OAAO+zJ,EAAmBnzJ,KAAKf,KAAM60J,KAgD7CC,CAAgBF,IAiBpB,SAASG,EAAKT,EAAK59D,GACf12F,KAAKs0J,IAAMA,EACXt0J,KAAK02F,MAAQA,EAYjB,SAASs+D,KA5BTjlI,EAAQC,SAAW,SAAUskI,GACzB,IAAI15F,EAAO,IAAIpqD,MAAMzJ,UAAU/F,OAAS,GACxC,GAAI+F,UAAU/F,OAAS,EACnB,IAAK,IAAIT,EAAI,EAAGA,EAAIwG,UAAU/F,OAAQT,IAClCq6D,EAAKr6D,EAAI,GAAKwG,UAAUxG,GAGhC4wH,EAAM1hH,KAAK,IAAIslJ,EAAKT,EAAK15F,IACJ,IAAjBu2D,EAAMnwH,QAAiB2uH,GACvB0kC,EAAWM,IASnBI,EAAK5jI,UAAUwiI,IAAM,WACjB3zJ,KAAKs0J,IAAIjyI,MAAM,KAAMriB,KAAK02F,QAE9B3mE,EAAQtR,MAAQ,UAChBsR,EAAQ8G,SAAU,EAClB9G,EAAQklI,IAAM,GACdllI,EAAQnZ,KAAO,GACfmZ,EAAQqG,QAAU,GAClBrG,EAAQmlI,SAAW,GAInBnlI,EAAQrrB,GAAKswJ,EACbjlI,EAAQ81F,YAAcmvC,EACtBjlI,EAAQg2F,KAAOivC,EACfjlI,EAAQs9C,IAAM2nF,EACdjlI,EAAQi1F,eAAiBgwC,EACzBjlI,EAAQo2F,mBAAqB6uC,EAC7BjlI,EAAQlrB,KAAOmwJ,EACfjlI,EAAQ+1F,gBAAkBkvC,EAC1BjlI,EAAQi2F,oBAAsBgvC,EAE9BjlI,EAAQ+zF,UAAY,SAAUx5G,GAAQ,MAAO,IAE7CylB,EAAQ07G,QAAU,SAAUnhI,GACxB,MAAM,IAAI1J,MAAM,qCAGpBmvB,EAAQolI,IAAM,WAAc,MAAO,KACnCplI,EAAQqlI,MAAQ,SAAU7pG,GACtB,MAAM,IAAI3qD,MAAM,mCAEpBmvB,EAAQslI,MAAQ,WAAa,OAAO,0CCvLpC51J,EAAQkjG,cAAgBliG,EAAQ,mBAChChB,EAAQqjG,eAAiBriG,EAAQ,oBAEjChB,EAAQmjG,eAAiB,SAAyBjzF,EAAK6e,GACrD,OAAO/uB,EAAQkjG,cAAchzF,EAAK6e,GAAK,IAGzC/uB,EAAQojG,cAAgB,SAAwBlzF,EAAK6e,GACnD,OAAO/uB,EAAQqjG,eAAenzF,EAAK6e,GAAK,uFCR1C,IAAIxE,EAAavpB,EAAQ,eACrBknB,EAASlnB,EAAQ,eAAeknB,OAapC,SAAS2tI,EAAO90J,GACd,IAAIuiE,EAAMp7C,EAAOm7D,YAAY,GAE7B,OADA/f,EAAIujB,cAAc9lF,EAAG,GACduiE,EAdTrjE,EAAOD,QAAU,SAAUovH,EAAMrsF,GAI/B,IAHA,IAEIhiC,EAFAH,EAAIsnB,EAAO8C,MAAM,GACjBlqB,EAAI,EAEDF,EAAEW,OAASwhC,GAChBhiC,EAAI80J,EAAM/0J,KACVF,EAAIsnB,EAAOhlB,OAAO,CAACtC,EAAG2pB,EAAW,QAAQE,OAAO2kG,GAAM3kG,OAAO1pB,GAAG2pB,WAElE,OAAO9pB,EAAE4d,MAAM,EAAGukB,kKCXpB,IAAI+wD,EAAY9yF,EAAQ,cACpB80J,EAAM90J,EAAQ,SACd0wE,EAAM1wE,EAAQ,SACd0rE,EAAK1rE,EAAQ,SACbyuF,EAAMzuF,EAAQ,kBACdupB,EAAavpB,EAAQ,eACrB+0J,EAAa/0J,EAAQ,gBACrBknB,EAASlnB,EAAQ,eAAeknB,OAEpCjoB,EAAOD,QAAU,SAAyB+0F,EAAYv+B,EAAKnkB,GACzD,IAAI28B,EAEFA,EADE+lB,EAAW/lB,QACH+lB,EAAW/lB,QACZ38B,EACC,EAEA,EAGZ,IAKIs1B,EALAz3D,EAAM4jF,EAAUiB,GAChBz/B,EAAIplD,EAAI4/E,QAAQntB,aACpB,GAAInM,EAAIj1D,OAAS+zD,GAAK,IAAIoX,EAAGlW,GAAK4W,IAAIl9D,EAAI4/E,UAAY,EACpD,MAAM,IAAI3uF,MAAM,oBAIhBwmE,EADEt1B,EACI0jH,EAAW,IAAIrpF,EAAGlW,GAAMtmD,GAExBu/E,EAAIj5B,EAAKtmD,GAEjB,IAAI8lJ,EAAU9tI,EAAO8C,MAAMsqC,EAAIqS,EAAIpmE,QAEnC,GADAomE,EAAMz/C,EAAOhlB,OAAO,CAAC8yJ,EAASruF,GAAMrS,GACpB,IAAZ0Z,EACF,OAUJ,SAAe9+D,EAAKy3D,GAClB,IAAIrS,EAAIplD,EAAI4/E,QAAQntB,aAChBszF,EAAQ1rI,EAAW,QAAQE,OAAOvC,EAAO8C,MAAM,IAAIN,SACnD4pI,EAAO2B,EAAM10J,OACjB,GAAe,IAAXomE,EAAI,GACN,MAAM,IAAIxmE,MAAM,oBAElB,IAAI+0J,EAAavuF,EAAInpD,MAAM,EAAG81I,EAAO,GACjC6B,EAAWxuF,EAAInpD,MAAM81I,EAAO,GAC5BllC,EAAO19C,EAAIwkF,EAAYJ,EAAIK,EAAU7B,IACrC8B,EAAK1kF,EAAIykF,EAAUL,EAAI1mC,EAAM95D,EAAIg/F,EAAO,IAC5C,GAoCF,SAAkBpzJ,EAAG+V,GACnB/V,EAAIgnB,EAAOG,KAAKnnB,GAChB+V,EAAIiR,EAAOG,KAAKpR,GAChB,IAAIo/I,EAAM,EACNtzH,EAAM7hC,EAAEK,OACRL,EAAEK,SAAW0V,EAAE1V,SACjB80J,IACAtzH,EAAMh7B,KAAKC,IAAI9G,EAAEK,OAAQ0V,EAAE1V,SAE7B,IAAIT,GAAK,EACT,OAASA,EAAIiiC,GACXszH,GAAQn1J,EAAEJ,GAAKmW,EAAEnW,GAEnB,OAAOu1J,EAjDH37D,CAAQu7D,EAAOG,EAAG53I,MAAM,EAAG81I,IAC7B,MAAM,IAAInzJ,MAAM,oBAElB,IAAIL,EAAIwzJ,EACR,KAAiB,IAAV8B,EAAGt1J,IACRA,IAEF,GAAgB,IAAZs1J,EAAGt1J,KACL,MAAM,IAAIK,MAAM,oBAElB,OAAOi1J,EAAG53I,MAAM1d,GA/BPw1J,CAAKpmJ,EAAKy3D,GACZ,GAAgB,IAAZqH,EACT,OAgCJ,SAAgB9+D,EAAKy3D,EAAKt1B,GACxB,IAAI2kE,EAAKrvC,EAAInpD,MAAM,EAAG,GAClB1d,EAAI,EACJipI,EAAS,EACb,KAAoB,IAAbpiE,EAAI7mE,MACT,GAAIA,GAAK6mE,EAAIpmE,OAAQ,CACnBwoI,IACA,MAGJ,IAAIwsB,EAAK5uF,EAAInpD,MAAM,EAAG1d,EAAI,IAEE,SAAvBk2G,EAAGvrG,SAAS,SAAsB4mC,GAAoC,SAAvB2kE,EAAGvrG,SAAS,QAAqB4mC,IACnF03F,IAEEwsB,EAAGh1J,OAAS,GACdwoI,IAEF,GAAIA,EACF,MAAM,IAAI5oI,MAAM,oBAElB,OAAOwmE,EAAInpD,MAAM1d,GArDR01J,CAAMtmJ,EAAKy3D,EAAKt1B,GAClB,GAAgB,IAAZ28B,EACT,OAAOrH,EAEP,MAAM,IAAIxmE,MAAM,2LCvCpB,IAAI2yF,EAAY9yF,EAAQ,cACpBilB,EAAcjlB,EAAQ,eACtBupB,EAAavpB,EAAQ,eACrB80J,EAAM90J,EAAQ,SACd0wE,EAAM1wE,EAAQ,SACd0rE,EAAK1rE,EAAQ,SACb+0J,EAAa/0J,EAAQ,gBACrByuF,EAAMzuF,EAAQ,kBACdknB,EAASlnB,EAAQ,eAAeknB,OAEpCjoB,EAAOD,QAAU,SAAwBy2J,EAAW9uF,EAAKt1B,GACvD,IAAI28B,EAEFA,EADEynF,EAAUznF,QACFynF,EAAUznF,QACX38B,EACC,EAEA,EAEZ,IACIqkH,EADAxmJ,EAAM4jF,EAAU2iE,GAEpB,GAAgB,IAAZznF,EACF0nF,EAkBJ,SAAexmJ,EAAKy3D,GAClB,IAAIrS,EAAIplD,EAAI4/E,QAAQntB,aAChBgtD,EAAOhoD,EAAIpmE,OACX00J,EAAQ1rI,EAAW,QAAQE,OAAOvC,EAAO8C,MAAM,IAAIN,SACnD4pI,EAAO2B,EAAM10J,OACbo1J,EAAQ,EAAIrC,EAChB,GAAI3kC,EAAOr6D,EAAIqhG,EAAQ,EACrB,MAAM,IAAIx1J,MAAM,oBAElB,IAAIo1J,EAAKruI,EAAO8C,MAAMsqC,EAAIq6D,EAAOgnC,EAAQ,GACrCC,EAAQthG,EAAIg/F,EAAO,EACnBllC,EAAOnpG,EAAYquI,GACnB6B,EAAWzkF,EAAIxpD,EAAOhlB,OAAO,CAAC+yJ,EAAOM,EAAIruI,EAAO8C,MAAM,EAAG,GAAI28C,GAAMivF,GAAQd,EAAI1mC,EAAMwnC,IACrFV,EAAaxkF,EAAI09C,EAAM0mC,EAAIK,EAAU7B,IACzC,OAAO,IAAI5nF,EAAGxkD,EAAOhlB,OAAO,CAACglB,EAAO8C,MAAM,GAAIkrI,EAAYC,GAAW7gG,IAhCvDghG,CAAKpmJ,EAAKy3D,QACjB,GAAgB,IAAZqH,EACT0nF,EAgCJ,SAAgBxmJ,EAAKy3D,EAAKt1B,GACxB,IAKIkkH,EALA5mC,EAAOhoD,EAAIpmE,OACX+zD,EAAIplD,EAAI4/E,QAAQntB,aACpB,GAAIgtD,EAAOr6D,EAAI,GACb,MAAM,IAAIn0D,MAAM,oBAIhBo1J,EADElkH,EACGnqB,EAAO8C,MAAMsqC,EAAIq6D,EAAO,EAAG,KAMpC,SAAkB5sF,GAChB,IAII8hC,EAJAvB,EAAMp7C,EAAOm7D,YAAYtgD,GACzBjiC,EAAI,EACJspF,EAAQnkE,EAAkB,EAAN8c,GACpB8zH,EAAM,EAEV,KAAO/1J,EAAIiiC,GACL8zH,IAAQzsE,EAAM7oF,SAChB6oF,EAAQnkE,EAAkB,EAAN8c,GACpB8zH,EAAM,IAERhyF,EAAMulB,EAAMysE,QAEVvzF,EAAIxiE,KAAO+jE,GAGf,OAAOvB,EApBAwzF,CAAQxhG,EAAIq6D,EAAO,GAE1B,OAAO,IAAIjjD,EAAGxkD,EAAOhlB,OAAO,CAACglB,EAAOG,KAAK,CAAC,EAAGgqB,EAAU,EAAI,IAAKkkH,EAAIruI,EAAO8C,MAAM,GAAI28C,GAAMrS,IA5C7EkhG,CAAMtmJ,EAAKy3D,EAAKt1B,OACvB,CAAA,GAAgB,IAAZ28B,EAMT,MAAM,IAAI7tE,MAAM,mBAJhB,IADAu1J,EAAY,IAAIhqF,EAAG/E,IACLyF,IAAIl9D,EAAI4/E,UAAY,EAChC,MAAM,IAAI3uF,MAAM,6BAKpB,OAAIkxC,EACKo9C,EAAIinE,EAAWxmJ,GAEf6lJ,EAAWW,EAAWxmJ,2LCpCjC,IAAIw8D,EAAK1rE,EAAQ,SACbknB,EAASlnB,EAAQ,eAAeknB,OAUpCjoB,EAAOD,QARP,SAAqB02J,EAAWxmJ,GAC9B,OAAOgY,EAAOG,KAAKquI,EAChBp4E,MAAM5R,EAAGoV,KAAK5xE,EAAI4/E,UAClBjQ,OAAO,IAAInT,EAAGx8D,EAAI6/E,iBAClBrR,UACA1S,gFCRL/rE,EAAOD,QAAU,SAAckB,EAAG+V,GAGhC,IAFA,IAAI8rB,EAAM7hC,EAAEK,OACRT,GAAK,IACAA,EAAIiiC,GACX7hC,EAAEJ,IAAMmW,EAAEnW,GAEZ,OAAOI,4CCNT,aAcA,IAAIgnB,EAASlnB,EAAQ,eAAeknB,OAChCkC,EAAS/pB,EAAO+pB,QAAU/pB,EAAO4jF,SAEjC75D,GAAUA,EAAO45D,gBACnB/jF,EAAOD,QAKT,SAAsBkrB,EAAM1T,GAE1B,GAAI0T,EAjBW,WAiBQ,MAAM,IAAIwrE,WAAW,mCAE5C,IAAItzB,EAAQl7C,EAAOm7D,YAAYn4D,GAE/B,GAAIA,EAAO,EACT,GAAIA,EA1BQ,MA4BV,IAAK,IAAI6rI,EAAY,EAAGA,EAAY7rI,EAAM6rI,GA5BhC,MA+BR3sI,EAAO45D,gBAAgB5gB,EAAM5kD,MAAMu4I,EAAWA,EA/BtC,aAkCV3sI,EAAO45D,gBAAgB5gB,GAI3B,GAAkB,mBAAP5rD,EACT,OAAO8Y,EAAQC,UAAS,WACtB/Y,EAAG,KAAM4rD,MAIb,OAAOA,GA5BPnjE,EAAOD,QAVT,WACE,MAAM,IAAImB,MAAM,0TCXlB,aAEA,SAAS61J,IACP,MAAM,IAAI71J,MAAM,8GAElB,IAAI81J,EAAaj2J,EAAQ,eACrBk2J,EAAcl2J,EAAQ,eACtBknB,EAAS+uI,EAAW/uI,OACpBivI,EAAmBF,EAAW98D,WAC9B/vE,EAAS/pB,EAAO+pB,QAAU/pB,EAAO4jF,SACjCmzE,EAAarvJ,KAAKomE,IAAI,EAAG,IAAM,EACnC,SAASkpF,EAAchwJ,EAAQ9F,GAC7B,GAAsB,iBAAX8F,GAAuBA,GAAWA,EAC3C,MAAM,IAAIupD,UAAU,2BAGtB,GAAIvpD,EAAS+vJ,GAAc/vJ,EAAS,EAClC,MAAM,IAAIupD,UAAU,2BAGtB,GAAIvpD,EAAS8vJ,GAAoB9vJ,EAAS9F,EACxC,MAAM,IAAIm1F,WAAW,uBAIzB,SAASc,EAAYtsE,EAAM7jB,EAAQ9F,GACjC,GAAoB,iBAAT2pB,GAAqBA,GAASA,EACvC,MAAM,IAAI0lC,UAAU,yBAGtB,GAAI1lC,EAAOksI,GAAclsI,EAAO,EAC9B,MAAM,IAAI0lC,UAAU,yBAGtB,GAAI1lC,EAAO7jB,EAAS9F,GAAU2pB,EAAOisI,EACnC,MAAM,IAAIzgE,WAAW,oBA8BzB,SAAS4gE,EAAYvoI,EAAK1nB,EAAQ6jB,EAAM1T,GACtC,GAAI8Y,EAAQ8G,QAAS,CACnB,IAAImgI,EAASxoI,EAAIzG,OACbkvI,EAAO,IAAIx0E,WAAWu0E,EAAQlwJ,EAAQ6jB,GAE1C,OADAd,EAAO45D,gBAAgBwzE,GACnBhgJ,OACF8Y,EAAQC,UAAS,WACf/Y,EAAG,KAAMuX,MAINA,EAET,IAAIvX,EAYJ,OAFY0/I,EAAYhsI,GAClBtd,KAAKmhB,EAAK1nB,GACT0nB,EAXLmoI,EAAYhsI,GAAM,SAAUmB,EAAK+2C,GAC/B,GAAI/2C,EACF,OAAO7U,EAAG6U,GAEZ+2C,EAAMx1D,KAAKmhB,EAAK1nB,GAChBmQ,EAAG,KAAMuX,MA9CV3E,GAAUA,EAAO45D,kBAAqB1zD,EAAQ8G,SACjDp3B,EAAQsjG,WAMV,SAAqBv0E,EAAK1nB,EAAQ6jB,EAAM1T,GACtC,KAAK0Q,EAAOs6C,SAASzzC,IAAUA,aAAe1uB,EAAO2iF,YACnD,MAAM,IAAIpyB,UAAU,iDAGtB,GAAsB,mBAAXvpD,EACTmQ,EAAKnQ,EACLA,EAAS,EACT6jB,EAAO6D,EAAIxtB,YACN,GAAoB,mBAAT2pB,EAChB1T,EAAK0T,EACLA,EAAO6D,EAAIxtB,OAAS8F,OACf,GAAkB,mBAAPmQ,EAChB,MAAM,IAAIo5C,UAAU,oCAItB,OAFAymG,EAAahwJ,EAAQ0nB,EAAIxtB,QACzBi2F,EAAWtsE,EAAM7jB,EAAQ0nB,EAAIxtB,QACtB+1J,EAAWvoI,EAAK1nB,EAAQ6jB,EAAM1T,IAtBrCxX,EAAQujG,eAoDV,SAAyBx0E,EAAK1nB,EAAQ6jB,QACd,IAAX7jB,IACTA,EAAS,GAEX,KAAK6gB,EAAOs6C,SAASzzC,IAAUA,aAAe1uB,EAAO2iF,YACnD,MAAM,IAAIpyB,UAAU,iDAGtBymG,EAAahwJ,EAAQ0nB,EAAIxtB,aAEZsD,IAATqmB,IAAoBA,EAAO6D,EAAIxtB,OAAS8F,GAI5C,OAFAmwF,EAAWtsE,EAAM7jB,EAAQ0nB,EAAIxtB,QAEtB+1J,EAAWvoI,EAAK1nB,EAAQ6jB,MAhE/BlrB,EAAQsjG,WAAa0zD,EACrBh3J,EAAQujG,eAAiByzD,2MC3C3B,kPAIA,IAAIjP,EAAQ,GAEZ,SAAS0P,EAAgBr2J,EAAMmZ,EAASwnD,GACjCA,IACHA,EAAO5gE,OAWT,IAAIu2J,EAEJ,SAAUC,GAnBZ,IAAwBjnG,EAAUC,EAsB9B,SAAS+mG,EAAUlzC,EAAME,EAAME,GAC7B,OAAO+yC,EAAMr2J,KAAKf,KAdtB,SAAoBikH,EAAME,EAAME,GAC9B,MAAuB,iBAAZrqG,EACFA,EAEAA,EAAQiqG,EAAME,EAAME,GAUHgzC,CAAWpzC,EAAME,EAAME,KAAUrkH,KAG3D,OA1B8BowD,EAoBJgnG,GApBNjnG,EAoBLgnG,GApBsChmI,UAAYjb,OAAOnN,OAAOqnD,EAAWj/B,WAAYg/B,EAASh/B,UAAUxN,YAAcwsC,EAAUA,EAASpB,UAAYqB,EA0B/J+mG,EAPT,CAQE31F,GAEF21F,EAAUhmI,UAAU7mB,KAAOk3D,EAAKl3D,KAChC6sJ,EAAUhmI,UAAUtwB,KAAOA,EAC3B2mJ,EAAM3mJ,GAAQs2J,EAIhB,SAASG,EAAMC,EAAUvtE,GACvB,GAAIx5E,MAAMwU,QAAQuyI,GAAW,CAC3B,IAAI/0H,EAAM+0H,EAASv2J,OAKnB,OAJAu2J,EAAWA,EAASh0J,KAAI,SAAUhD,GAChC,OAAO6J,OAAO7J,MAGZiiC,EAAM,EACD,UAAU7/B,OAAOqnF,EAAO,KAAKrnF,OAAO40J,EAASt5I,MAAM,EAAGukB,EAAM,GAAGl2B,KAAK,MAAO,SAAWirJ,EAAS/0H,EAAM,GAC3F,IAARA,EACF,UAAU7/B,OAAOqnF,EAAO,KAAKrnF,OAAO40J,EAAS,GAAI,QAAQ50J,OAAO40J,EAAS,IAEzE,MAAM50J,OAAOqnF,EAAO,KAAKrnF,OAAO40J,EAAS,IAGlD,MAAO,MAAM50J,OAAOqnF,EAAO,KAAKrnF,OAAOyH,OAAOmtJ,IA+BlDL,EAAgB,yBAAyB,SAAU5sJ,EAAM/E,GACvD,MAAO,cAAgBA,EAAQ,4BAA8B+E,EAAO,MACnE+lD,WACH6mG,EAAgB,wBAAwB,SAAU5sJ,EAAMitJ,EAAUlhE,GAEhE,IAAImhE,EA/BmBnkG,EAAQ3wC,EAwC3B0kD,EAEJ,GATwB,iBAAbmwF,IAjCYlkG,EAiCkC,OAAVkkG,EAhCpCtsG,QAAQvoC,GAAOA,EAAM,EAAI,GAAKA,EAAK2wC,EAAOryD,UAAYqyD,IAiC/DmkG,EAAa,cACbD,EAAWA,EAASprJ,QAAQ,QAAS,KAErCqrJ,EAAa,UAhCjB,SAAkB3vI,EAAKwrC,EAAQokG,GAK7B,YAJiBnzJ,IAAbmzJ,GAA0BA,EAAW5vI,EAAI7mB,UAC3Cy2J,EAAW5vI,EAAI7mB,QAGV6mB,EAAI9K,UAAU06I,EAAWpkG,EAAOryD,OAAQy2J,KAAcpkG,EAgCzDqkG,CAASptJ,EAAM,aAEjB88D,EAAM,OAAOzkE,OAAO2H,EAAM,KAAK3H,OAAO60J,EAAY,KAAK70J,OAAO20J,EAAMC,EAAU,aACzE,CACL,IAAIrtJ,EAhCR,SAAkB2d,EAAKwrC,EAAQ//C,GAK7B,MAJqB,iBAAVA,IACTA,EAAQ,KAGNA,EAAQ+/C,EAAOryD,OAAS6mB,EAAI7mB,UAGS,IAAhC6mB,EAAIyC,QAAQ+oC,EAAQ//C,GAwBhBijC,CAASjsC,EAAM,KAAO,WAAa,WAC9C88D,EAAM,QAASzkE,OAAO2H,EAAM,MAAO3H,OAAOuH,EAAM,KAAKvH,OAAO60J,EAAY,KAAK70J,OAAO20J,EAAMC,EAAU,SAItG,OADAnwF,GAAO,mBAAmBzkE,OAAnBiD,EAAiCywF,MAEvChmC,WACH6mG,EAAgB,4BAA6B,2BAC7CA,EAAgB,8BAA8B,SAAU5sJ,GACtD,MAAO,OAASA,EAAO,gCAEzB4sJ,EAAgB,6BAA8B,mBAC9CA,EAAgB,wBAAwB,SAAU5sJ,GAChD,MAAO,eAAiBA,EAAO,mCAEjC4sJ,EAAgB,wBAAyB,kCACzCA,EAAgB,yBAA0B,6BAC1CA,EAAgB,6BAA8B,mBAC9CA,EAAgB,yBAA0B,sCAAuC7mG,WACjF6mG,EAAgB,wBAAwB,SAAU9yF,GAChD,MAAO,qBAAuBA,IAC7B/T,WACH6mG,EAAgB,qCAAsC,oCACtDx3J,EAAOD,QAAQ+nJ,MAAQA,yCCtGvB,aAGA,IAAIxkC,EAAa9sG,OAAOC,MAAQ,SAAUkb,GACxC,IAAIlb,EAAO,GAEX,IAAK,IAAIxG,KAAO0hB,EACdlb,EAAK1G,KAAKE,GAGZ,OAAOwG,GAKTzW,EAAOD,QAAUwvB,EAEjB,IAAI8rC,EAAWt6D,EAAQ,sBAEnBu1D,EAAWv1D,EAAQ,sBAEvBA,EAAQ,WAARA,CAAoBwuB,EAAQ8rC,GAM1B,IAFA,IAAI5kD,EAAO6sG,EAAWhtD,EAAS7kC,WAEtBxpB,EAAI,EAAGA,EAAIwO,EAAKnV,OAAQ2G,IAAK,CACpC,IAAIq8D,EAAS7tD,EAAKxO,GACbsnB,EAAOkC,UAAU6yC,KAAS/0C,EAAOkC,UAAU6yC,GAAUhO,EAAS7kC,UAAU6yC,IAIjF,SAAS/0C,EAAOvsB,GACd,KAAM1C,gBAAgBivB,GAAS,OAAO,IAAIA,EAAOvsB,GACjDq4D,EAASh6D,KAAKf,KAAM0C,GACpBszD,EAASj1D,KAAKf,KAAM0C,GACpB1C,KAAK23J,eAAgB,EAEjBj1J,KACuB,IAArBA,EAAQk1J,WAAoB53J,KAAK43J,UAAW,IACvB,IAArBl1J,EAAQ2wB,WAAoBrzB,KAAKqzB,UAAW,IAElB,IAA1B3wB,EAAQi1J,gBACV33J,KAAK23J,eAAgB,EACrB33J,KAAK+lH,KAAK,MAAO8xC,KAiCvB,SAASA,IAEH73J,KAAK83J,eAAepgB,OAGxB3nH,EAAQC,SAAS+nI,EAAS/3J,MAG5B,SAAS+3J,EAAQh4J,GACfA,EAAKwG,MArCP2P,OAAOgd,eAAejE,EAAOkC,UAAW,wBAAyB,CAI/DiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAK83J,eAAeE,iBAG/B9hJ,OAAOgd,eAAejE,EAAOkC,UAAW,iBAAkB,CAIxDiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAK83J,gBAAkB93J,KAAK83J,eAAeG,eAGtD/hJ,OAAOgd,eAAejE,EAAOkC,UAAW,iBAAkB,CAIxDiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAK83J,eAAe92J,UAgB/BkV,OAAOgd,eAAejE,EAAOkC,UAAW,YAAa,CAInDiC,YAAY,EACZm0B,IAAK,WACH,YAA4BjjD,IAAxBtE,KAAKk4J,qBAAwD5zJ,IAAxBtE,KAAK83J,iBAIvC93J,KAAKk4J,eAAeC,WAAan4J,KAAK83J,eAAeK,YAE9D1wG,IAAK,SAAaliD,QAGYjB,IAAxBtE,KAAKk4J,qBAAwD5zJ,IAAxBtE,KAAK83J,iBAM9C93J,KAAKk4J,eAAeC,UAAY5yJ,EAChCvF,KAAK83J,eAAeK,UAAY5yJ,sICjHpC,aAEA7F,EAAOD,QAAUorB,EAEjB,IAAIumC,EAAY3wD,EAAQ,uBAIxB,SAASoqB,EAAYnoB,GACnB,KAAM1C,gBAAgB6qB,GAAc,OAAO,IAAIA,EAAYnoB,GAC3D0uD,EAAUrwD,KAAKf,KAAM0C,GAJvBjC,EAAQ,WAARA,CAAoBoqB,EAAaumC,GAOjCvmC,EAAYsG,UAAU8sE,WAAa,SAAUz2E,EAAO/gB,EAAUwQ,GAC5DA,EAAG,KAAMuQ,mFCjBX,aAKA,IAAIyH,EAHJvvB,EAAOD,QAAUs7D,EAMjBA,EAASq9F,cAAgBA,EAGhB33J,EAAQ,UAAUu2B,aAA3B,IAEIqhI,EAAkB,SAAyBxzC,EAAS36G,GACtD,OAAO26G,EAAQf,UAAU55G,GAAMlJ,QAO7BysB,EAAShtB,EAAQ,6BAIjBknB,EAASlnB,EAAQ,UAAUknB,OAE3B2wI,EAAgBx4J,EAAO2iF,YAAc,aAYzC,IAEI81E,EAFAC,EAAY/3J,EAAQ,QAKtB83J,EADEC,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,aAKV,IAcIhhG,EACAihG,EACA5wI,EAhBA6wI,EAAal4J,EAAQ,kCAErBm4J,EAAcn4J,EAAQ,8BAGtBo4J,EADWp4J,EAAQ,4BACSo4J,iBAE5BC,EAAiBr4J,EAAQ,aAAa+mJ,MACtCuR,EAAuBD,EAAeC,qBACtCC,EAA4BF,EAAeE,0BAC3CC,EAA6BH,EAAeG,2BAC5CC,EAAqCJ,EAAeI,mCAOxDz4J,EAAQ,WAARA,CAAoBs6D,EAAUttC,GAE9B,IAAI0rI,EAAiBP,EAAYO,eAC7BC,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAa1D,SAAShB,EAAc11J,EAASE,EAAQy2J,GACtCpqI,EAASA,GAAUxuB,EAAQ,oBAC3BiC,EAAUA,GAAW,GAMG,kBAAb22J,IAAwBA,EAAWz2J,aAAkBqsB,GAGhEjvB,KAAK2wD,aAAejuD,EAAQiuD,WACxB0oG,IAAUr5J,KAAK2wD,WAAa3wD,KAAK2wD,cAAgBjuD,EAAQipD,oBAG7D3rD,KAAKg4J,cAAgBa,EAAiB74J,KAAM0C,EAAS,wBAAyB22J,GAI9Er5J,KAAK+nB,OAAS,IAAI4wI,EAClB34J,KAAKgB,OAAS,EACdhB,KAAK8uB,MAAQ,KACb9uB,KAAKs5J,WAAa,EAClBt5J,KAAKu5J,QAAU,KACfv5J,KAAK03I,OAAQ,EACb13I,KAAKm3D,YAAa,EAClBn3D,KAAKw5J,SAAU,EAKfx5J,KAAKmyJ,MAAO,EAGZnyJ,KAAKy5J,cAAe,EACpBz5J,KAAK05J,iBAAkB,EACvB15J,KAAK25J,mBAAoB,EACzB35J,KAAK45J,iBAAkB,EACvB55J,KAAK+uB,QAAS,EAEd/uB,KAAK65J,WAAkC,IAAtBn3J,EAAQm3J,UAEzB75J,KAAK85J,cAAgBp3J,EAAQo3J,YAE7B95J,KAAKm4J,WAAY,EAIjBn4J,KAAKkyJ,gBAAkBxvJ,EAAQwvJ,iBAAmB,OAElDlyJ,KAAK+5J,WAAa,EAElB/5J,KAAKg6J,aAAc,EACnBh6J,KAAKw3D,QAAU,KACfx3D,KAAKyG,SAAW,KAEZ/D,EAAQ+D,WACLgxD,IAAeA,EAAgBh3D,EAAQ,mBAAmBg3D,eAC/Dz3D,KAAKw3D,QAAU,IAAIC,EAAc/0D,EAAQ+D,UACzCzG,KAAKyG,SAAW/D,EAAQ+D,UAI5B,SAASs0D,EAASr4D,GAEhB,GADAusB,EAASA,GAAUxuB,EAAQ,sBACrBT,gBAAgB+6D,GAAW,OAAO,IAAIA,EAASr4D,GAGrD,IAAI22J,EAAWr5J,gBAAgBivB,EAC/BjvB,KAAKk4J,eAAiB,IAAIE,EAAc11J,EAAS1C,KAAMq5J,GAEvDr5J,KAAK43J,UAAW,EAEZl1J,IAC0B,mBAAjBA,EAAQI,OAAqB9C,KAAKo7H,MAAQ14H,EAAQI,MAC9B,mBAApBJ,EAAQgb,UAAwB1d,KAAKi6J,SAAWv3J,EAAQgb,UAGrE+P,EAAO1sB,KAAKf,MAiEd,SAASk6J,EAAiBt3J,EAAQ4kB,EAAO/gB,EAAU0zJ,EAAYC,GAC7D7B,EAAM,mBAAoB/wI,GAC1B,IAMMm+F,EANFxmG,EAAQvc,EAAOs1J,eAEnB,GAAc,OAAV1wI,EACFrI,EAAMq6I,SAAU,EAyOpB,SAAoB52J,EAAQuc,GAE1B,GADAo5I,EAAM,cACFp5I,EAAMu4H,MAAO,OAEjB,GAAIv4H,EAAMq4C,QAAS,CACjB,IAAIhwC,EAAQrI,EAAMq4C,QAAQjxD,MAEtBihB,GAASA,EAAMxmB,SACjBme,EAAM4I,OAAOtY,KAAK+X,GAClBrI,EAAMne,QAAUme,EAAMwxC,WAAa,EAAInpC,EAAMxmB,QAIjDme,EAAMu4H,OAAQ,EAEVv4H,EAAMgzI,KAIRkI,EAAaz3J,IAGbuc,EAAMs6I,cAAe,EAEhBt6I,EAAMu6I,kBACTv6I,EAAMu6I,iBAAkB,EACxBY,EAAc13J,KAlQhB23J,CAAW33J,EAAQuc,QAKnB,GAFKi7I,IAAgBz0C,EAmDzB,SAAsBxmG,EAAOqI,GAC3B,IAAIm+F,EAhQiBt0F,EAkQF7J,EAjQZG,EAAOs6C,SAAS5wC,IAAQA,aAAeinI,GAiQA,iBAAV9wI,QAAgCljB,IAAVkjB,GAAwBrI,EAAMwxC,aACtFg1D,EAAK,IAAIozC,EAAqB,QAAS,CAAC,SAAU,SAAU,cAAevxI,IAnQ/E,IAAuB6J,EAsQrB,OAAOs0F,EA1DqB60C,CAAar7I,EAAOqI,IAE1Cm+F,EACFwzC,EAAev2J,EAAQ+iH,QAClB,GAAIxmG,EAAMwxC,YAAcnpC,GAASA,EAAMxmB,OAAS,EAKrD,GAJqB,iBAAVwmB,GAAuBrI,EAAMwxC,YAAcz6C,OAAO45C,eAAetoC,KAAWG,EAAOwJ,YAC5F3J,EAtNR,SAA6BA,GAC3B,OAAOG,EAAOG,KAAKN,GAqNLizI,CAAoBjzI,IAG1B2yI,EACEh7I,EAAMg4C,WAAYgiG,EAAev2J,EAAQ,IAAIs2J,GAA2CwB,EAAS93J,EAAQuc,EAAOqI,GAAO,QACtH,GAAIrI,EAAMu4H,MACfyhB,EAAev2J,EAAQ,IAAIo2J,OACtB,CAAA,GAAI75I,EAAMg5I,UACf,OAAO,EAEPh5I,EAAMq6I,SAAU,EAEZr6I,EAAMq4C,UAAY/wD,GACpB+gB,EAAQrI,EAAMq4C,QAAQpxD,MAAMohB,GACxBrI,EAAMwxC,YAA+B,IAAjBnpC,EAAMxmB,OAAc05J,EAAS93J,EAAQuc,EAAOqI,GAAO,GAAYmzI,EAAc/3J,EAAQuc,IAE7Gu7I,EAAS93J,EAAQuc,EAAOqI,GAAO,QAGzB2yI,IACVh7I,EAAMq6I,SAAU,EAChBmB,EAAc/3J,EAAQuc,IAO1B,OAAQA,EAAMu4H,QAAUv4H,EAAMne,OAASme,EAAM64I,eAAkC,IAAjB74I,EAAMne,QAGtE,SAAS05J,EAAS93J,EAAQuc,EAAOqI,EAAO2yI,GAClCh7I,EAAMo6I,SAA4B,IAAjBp6I,EAAMne,SAAiBme,EAAMgzI,MAChDhzI,EAAM46I,WAAa,EACnBn3J,EAAOiC,KAAK,OAAQ2iB,KAGpBrI,EAAMne,QAAUme,EAAMwxC,WAAa,EAAInpC,EAAMxmB,OACzCm5J,EAAYh7I,EAAM4I,OAAO8I,QAAQrJ,GAAYrI,EAAM4I,OAAOtY,KAAK+X,GAC/DrI,EAAMs6I,cAAcY,EAAaz3J,IAGvC+3J,EAAc/3J,EAAQuc,GAvHxBjJ,OAAOgd,eAAe6nC,EAAS5pC,UAAW,YAAa,CAIrDiC,YAAY,EACZm0B,IAAK,WACH,YAA4BjjD,IAAxBtE,KAAKk4J,gBAIFl4J,KAAKk4J,eAAeC,WAE7B1wG,IAAK,SAAaliD,GAGXvF,KAAKk4J,iBAMVl4J,KAAKk4J,eAAeC,UAAY5yJ,MAGpCw1D,EAAS5pC,UAAUzT,QAAUk7I,EAAYl7I,QACzCq9C,EAAS5pC,UAAUypI,WAAahC,EAAYiC,UAE5C9/F,EAAS5pC,UAAU8oI,SAAW,SAAUnuI,EAAK7U,GAC3CA,EAAG6U,IAOLivC,EAAS5pC,UAAU1hB,KAAO,SAAU+X,EAAO/gB,GACzC,IACI2zJ,EADAj7I,EAAQnf,KAAKk4J,eAkBjB,OAfK/4I,EAAMwxC,WAYTypG,GAAiB,EAXI,iBAAV5yI,KACT/gB,EAAWA,GAAY0Y,EAAM+yI,mBAEZ/yI,EAAM1Y,WACrB+gB,EAAQG,EAAOG,KAAKN,EAAO/gB,GAC3BA,EAAW,IAGb2zJ,GAAiB,GAMdF,EAAiBl6J,KAAMwnB,EAAO/gB,GAAU,EAAO2zJ,IAIxDr/F,EAAS5pC,UAAUN,QAAU,SAAUrJ,GACrC,OAAO0yI,EAAiBl6J,KAAMwnB,EAAO,MAAM,GAAM,IAyEnDuzC,EAAS5pC,UAAUT,SAAW,WAC5B,OAAuC,IAAhC1wB,KAAKk4J,eAAeqB,SAI7Bx+F,EAAS5pC,UAAUZ,YAAc,SAAU0lC,GACpCwB,IAAeA,EAAgBh3D,EAAQ,mBAAmBg3D,eAC/D,IAAID,EAAU,IAAIC,EAAcxB,GAChCj2D,KAAKk4J,eAAe1gG,QAAUA,EAE9Bx3D,KAAKk4J,eAAezxJ,SAAWzG,KAAKk4J,eAAe1gG,QAAQ/wD,SAK3D,IAHA,IAAI3F,EAAId,KAAKk4J,eAAenwI,OAAO+2H,KAC/B/nH,EAAU,GAED,OAANj2B,GACLi2B,GAAWygC,EAAQpxD,MAAMtF,EAAE6D,MAC3B7D,EAAIA,EAAE6qB,KAOR,OAJA3rB,KAAKk4J,eAAenwI,OAAO6lH,QAEX,KAAZ72G,GAAgB/2B,KAAKk4J,eAAenwI,OAAOtY,KAAKsnB,GACpD/2B,KAAKk4J,eAAel3J,OAAS+1B,EAAQ/1B,OAC9BhB,MA2BT,SAAS86J,EAAc16J,EAAG+e,GACxB,OAAI/e,GAAK,GAAsB,IAAjB+e,EAAMne,QAAgBme,EAAMu4H,MAAc,EACpDv4H,EAAMwxC,WAAmB,EAEzBvwD,GAAMA,EAEJ+e,EAAMo6I,SAAWp6I,EAAMne,OAAeme,EAAM4I,OAAO+2H,KAAKn6I,KAAK3D,OAAmBme,EAAMne,QAIxFZ,EAAI+e,EAAM64I,gBAAe74I,EAAM64I,cA/BrC,SAAiC53J,GAgB/B,OAfIA,GAHQ,WAKVA,EALU,YASVA,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAGKA,EAe4C26J,CAAwB36J,IACvEA,GAAK+e,EAAMne,OAAeZ,EAEzB+e,EAAMu4H,MAKJv4H,EAAMne,QAJXme,EAAMs6I,cAAe,EACd,IAwIX,SAASY,EAAaz3J,GACpB,IAAIuc,EAAQvc,EAAOs1J,eACnBK,EAAM,eAAgBp5I,EAAMs6I,aAAct6I,EAAMu6I,iBAChDv6I,EAAMs6I,cAAe,EAEhBt6I,EAAMu6I,kBACTnB,EAAM,eAAgBp5I,EAAMo6I,SAC5Bp6I,EAAMu6I,iBAAkB,EACxB3pI,EAAQC,SAASsqI,EAAe13J,IAIpC,SAAS03J,EAAc13J,GACrB,IAAIuc,EAAQvc,EAAOs1J,eACnBK,EAAM,gBAAiBp5I,EAAMg5I,UAAWh5I,EAAMne,OAAQme,EAAMu4H,OAEvDv4H,EAAMg5I,YAAch5I,EAAMne,SAAUme,EAAMu4H,QAC7C90I,EAAOiC,KAAK,YACZsa,EAAMu6I,iBAAkB,GAS1Bv6I,EAAMs6I,cAAgBt6I,EAAMo6I,UAAYp6I,EAAMu4H,OAASv4H,EAAMne,QAAUme,EAAM64I,cAC7EgD,EAAKp4J,GASP,SAAS+3J,EAAc/3J,EAAQuc,GACxBA,EAAM66I,cACT76I,EAAM66I,aAAc,EACpBjqI,EAAQC,SAASirI,EAAgBr4J,EAAQuc,IAI7C,SAAS87I,EAAer4J,EAAQuc,GAwB9B,MAAQA,EAAMq6I,UAAYr6I,EAAMu4H,QAAUv4H,EAAMne,OAASme,EAAM64I,eAAiB74I,EAAMo6I,SAA4B,IAAjBp6I,EAAMne,SAAe,CACpH,IAAIwhC,EAAMrjB,EAAMne,OAGhB,GAFAu3J,EAAM,wBACN31J,EAAOE,KAAK,GACR0/B,IAAQrjB,EAAMne,OAChB,MAGJme,EAAM66I,aAAc,EA6QtB,SAASkB,EAAwBn7J,GAC/B,IAAIof,EAAQpf,EAAKm4J,eACjB/4I,EAAMw6I,kBAAoB55J,EAAKylH,cAAc,YAAc,EAEvDrmG,EAAMy6I,kBAAoBz6I,EAAM4P,OAGlC5P,EAAMo6I,SAAU,EACPx5J,EAAKylH,cAAc,QAAU,GACtCzlH,EAAK0wB,SAIT,SAAS0qI,EAAiBp7J,GACxBw4J,EAAM,4BACNx4J,EAAK+C,KAAK,GA4BZ,SAASs4J,EAAQx4J,EAAQuc,GACvBo5I,EAAM,SAAUp5I,EAAMq6I,SAEjBr6I,EAAMq6I,SACT52J,EAAOE,KAAK,GAGdqc,EAAMy6I,iBAAkB,EACxBh3J,EAAOiC,KAAK,UACZm2J,EAAKp4J,GACDuc,EAAMo6I,UAAYp6I,EAAMq6I,SAAS52J,EAAOE,KAAK,GAgBnD,SAASk4J,EAAKp4J,GACZ,IAAIuc,EAAQvc,EAAOs1J,eAGnB,IAFAK,EAAM,OAAQp5I,EAAMo6I,SAEbp6I,EAAMo6I,SAA6B,OAAlB32J,EAAOE,UA4HjC,SAASu4J,EAASj7J,EAAG+e,GAEnB,OAAqB,IAAjBA,EAAMne,OAAqB,MAE3Bme,EAAMwxC,WAAYqe,EAAM7vD,EAAM4I,OAAOzhB,SAAkBlG,GAAKA,GAAK+e,EAAMne,QAEtDguE,EAAf7vD,EAAMq4C,QAAer4C,EAAM4I,OAAOzb,KAAK,IAAqC,IAAxB6S,EAAM4I,OAAO/mB,OAAoBme,EAAM4I,OAAO9C,QAAmB9F,EAAM4I,OAAOplB,OAAOwc,EAAMne,QACnJme,EAAM4I,OAAO6lH,SAGb5+D,EAAM7vD,EAAM4I,OAAOuzI,QAAQl7J,EAAG+e,EAAMq4C,SAE/BwX,GATP,IAAIA,EAYN,SAASusF,EAAY34J,GACnB,IAAIuc,EAAQvc,EAAOs1J,eACnBK,EAAM,cAAep5I,EAAMg4C,YAEtBh4C,EAAMg4C,aACTh4C,EAAMu4H,OAAQ,EACd3nH,EAAQC,SAASwrI,EAAer8I,EAAOvc,IAI3C,SAAS44J,EAAcr8I,EAAOvc,GAG5B,GAFA21J,EAAM,gBAAiBp5I,EAAMg4C,WAAYh4C,EAAMne,SAE1Cme,EAAMg4C,YAA+B,IAAjBh4C,EAAMne,SAC7Bme,EAAMg4C,YAAa,EACnBv0D,EAAOg1J,UAAW,EAClBh1J,EAAOiC,KAAK,OAERsa,EAAM26I,aAAa,CAGrB,IAAI2B,EAAS74J,EAAOk1J,iBAEf2D,GAAUA,EAAO3B,aAAe2B,EAAOC,WAC1C94J,EAAO8a,WAgBf,SAAS4M,EAAQqxI,EAAIjpJ,GACnB,IAAK,IAAInS,EAAI,EAAGkW,EAAIklJ,EAAG36J,OAAQT,EAAIkW,EAAGlW,IACpC,GAAIo7J,EAAGp7J,KAAOmS,EAAG,OAAOnS,EAG1B,OAAQ,EA3tBVw6D,EAAS5pC,UAAUruB,KAAO,SAAU1C,GAClCm4J,EAAM,OAAQn4J,GACdA,EAAIotB,SAASptB,EAAG,IAChB,IAAI+e,EAAQnf,KAAKk4J,eACb0D,EAAQx7J,EAKZ,GAJU,IAANA,IAAS+e,EAAMu6I,iBAAkB,GAI3B,IAANt5J,GAAW+e,EAAMs6I,gBAA0C,IAAxBt6I,EAAM64I,cAAsB74I,EAAMne,QAAUme,EAAM64I,cAAgB74I,EAAMne,OAAS,IAAMme,EAAMu4H,OAGlI,OAFA6gB,EAAM,qBAAsBp5I,EAAMne,OAAQme,EAAMu4H,OAC3B,IAAjBv4H,EAAMne,QAAgBme,EAAMu4H,MAAO6jB,EAAYv7J,MAAWq6J,EAAar6J,MACpE,KAKT,GAAU,KAFVI,EAAI06J,EAAc16J,EAAG+e,KAENA,EAAMu4H,MAEnB,OADqB,IAAjBv4H,EAAMne,QAAcu6J,EAAYv7J,MAC7B,KAyBT,IA4BIgvE,EA5BA6sF,EAAS18I,EAAMs6I,aAgDnB,OA/CAlB,EAAM,gBAAiBsD,IAEF,IAAjB18I,EAAMne,QAAgBme,EAAMne,OAASZ,EAAI+e,EAAM64I,gBAEjDO,EAAM,6BADNsD,GAAS,GAMP18I,EAAMu4H,OAASv4H,EAAMq6I,QAEvBjB,EAAM,mBADNsD,GAAS,GAEAA,IACTtD,EAAM,WACNp5I,EAAMq6I,SAAU,EAChBr6I,EAAMgzI,MAAO,EAEQ,IAAjBhzI,EAAMne,SAAcme,EAAMs6I,cAAe,GAE7Cz5J,KAAKo7H,MAAMj8G,EAAM64I,eAEjB74I,EAAMgzI,MAAO,EAGRhzI,EAAMq6I,UAASp5J,EAAI06J,EAAcc,EAAOz8I,KAMnC,QAFD6vD,EAAP5uE,EAAI,EAASi7J,EAASj7J,EAAG+e,GAAkB,OAG7CA,EAAMs6I,aAAet6I,EAAMne,QAAUme,EAAM64I,cAC3C53J,EAAI,IAEJ+e,EAAMne,QAAUZ,EAChB+e,EAAM46I,WAAa,GAGA,IAAjB56I,EAAMne,SAGHme,EAAMu4H,QAAOv4H,EAAMs6I,cAAe,GAEnCmC,IAAUx7J,GAAK+e,EAAMu4H,OAAO6jB,EAAYv7J,OAGlC,OAARgvE,GAAchvE,KAAK6E,KAAK,OAAQmqE,GAC7BA,GAwHTjU,EAAS5pC,UAAUiqG,MAAQ,SAAUh7H,GACnC+4J,EAAen5J,KAAM,IAAIi5J,EAA2B,aAGtDl+F,EAAS5pC,UAAUrsB,KAAO,SAAUke,EAAM84I,GACxC,IAAI/4I,EAAM/iB,KACNmf,EAAQnf,KAAKk4J,eAEjB,OAAQ/4I,EAAMm6I,YACZ,KAAK,EACHn6I,EAAM2P,MAAQ9L,EACd,MAEF,KAAK,EACH7D,EAAM2P,MAAQ,CAAC3P,EAAM2P,MAAO9L,GAC5B,MAEF,QACE7D,EAAM2P,MAAMrf,KAAKuT,GAIrB7D,EAAMm6I,YAAc,EACpBf,EAAM,wBAAyBp5I,EAAMm6I,WAAYwC,GACjD,IACIC,IADUD,IAA6B,IAAjBA,EAASv1J,MAAkByc,IAAS+M,EAAQisI,QAAUh5I,IAAS+M,EAAQksI,OAC7EpE,EAAQjnI,EAI5B,SAASsrI,EAAStE,EAAUuE,GAC1B5D,EAAM,YAEFX,IAAa70I,GACXo5I,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAoB5B7D,EAAM,WAENv1I,EAAKgiG,eAAe,QAASq3C,GAC7Br5I,EAAKgiG,eAAe,SAAUs3C,GAC9Bt5I,EAAKgiG,eAAe,QAASu3C,GAC7Bv5I,EAAKgiG,eAAe,QAASme,GAC7BngH,EAAKgiG,eAAe,SAAUk3C,GAC9Bn5I,EAAIiiG,eAAe,MAAO6yC,GAC1B90I,EAAIiiG,eAAe,MAAOp0F,GAC1B7N,EAAIiiG,eAAe,OAAQw3C,GAC3BC,GAAY,GAMRt9I,EAAM46I,YAAgB/2I,EAAK80I,iBAAkB90I,EAAK80I,eAAe4E,WAAYH,KA9BnF,SAAS1E,IACPU,EAAM,SACNv1I,EAAKzc,MAhBH4Y,EAAMg4C,WAAYpnC,EAAQC,SAAS+rI,GAAYh5I,EAAIgjG,KAAK,MAAOg2C,GACnE/4I,EAAKte,GAAG,SAAUw3J,GAsBlB,IAAIK,EAwFN,SAAqBx5I,GACnB,OAAO,WACL,IAAI5D,EAAQ4D,EAAIm1I,eAChBK,EAAM,cAAep5I,EAAM46I,YACvB56I,EAAM46I,YAAY56I,EAAM46I,aAEH,IAArB56I,EAAM46I,YAAoB1B,EAAgBt1I,EAAK,UACjD5D,EAAMo6I,SAAU,EAChByB,EAAKj4I,KAhGK45I,CAAY55I,GAC1BC,EAAKte,GAAG,QAAS63J,GACjB,IAAIE,GAAY,EAwBhB,SAASD,EAAOh1I,GACd+wI,EAAM,UACN,IAAIvpF,EAAMhsD,EAAK5c,MAAMohB,GACrB+wI,EAAM,aAAcvpF,IAER,IAARA,KAKwB,IAArB7vD,EAAMm6I,YAAoBn6I,EAAM2P,QAAU9L,GAAQ7D,EAAMm6I,WAAa,IAAqC,IAAhChvI,EAAQnL,EAAM2P,MAAO9L,MAAkBy5I,IACpHlE,EAAM,8BAA+Bp5I,EAAM46I,YAC3C56I,EAAM46I,cAGRh3I,EAAIyN,SAMR,SAAS2yG,EAAQxd,GACf4yC,EAAM,UAAW5yC,GACjB/0F,IACA5N,EAAKgiG,eAAe,QAASme,GACU,IAAnCk1B,EAAgBr1I,EAAM,UAAgBm2I,EAAen2I,EAAM2iG,GAMjE,SAAS02C,IACPr5I,EAAKgiG,eAAe,SAAUs3C,GAC9B1rI,IAKF,SAAS0rI,IACP/D,EAAM,YACNv1I,EAAKgiG,eAAe,QAASq3C,GAC7BzrI,IAKF,SAASA,IACP2nI,EAAM,UACNx1I,EAAI6N,OAAO5N,GAWb,OA7DAD,EAAIre,GAAG,OAAQ83J,GAtkBjB,SAAyB33C,EAAS/sD,EAAOqrD,GAGvC,GAAuC,mBAA5B0B,EAAQiB,gBAAgC,OAAOjB,EAAQiB,gBAAgBhuD,EAAOqrD,GAKpF0B,EAAQzB,SAAYyB,EAAQzB,QAAQtrD,GAAuCtnD,MAAMwU,QAAQ6/F,EAAQzB,QAAQtrD,IAAS+sD,EAAQzB,QAAQtrD,GAAOjnC,QAAQsyF,GAAS0B,EAAQzB,QAAQtrD,GAAS,CAACqrD,EAAI0B,EAAQzB,QAAQtrD,IAA5J+sD,EAAQngH,GAAGozD,EAAOqrD,GA6lBnE2C,CAAgB9iG,EAAM,QAASmgH,GAO/BngH,EAAK+iG,KAAK,QAASs2C,GAQnBr5I,EAAK+iG,KAAK,SAAUu2C,GAQpBt5I,EAAKne,KAAK,OAAQke,GAEb5D,EAAMo6I,UACThB,EAAM,eACNx1I,EAAI0N,UAGCzN,GAgBT+3C,EAAS5pC,UAAUP,OAAS,SAAU5N,GACpC,IAAI7D,EAAQnf,KAAKk4J,eACbiE,EAAa,CACfC,YAAY,GAGd,GAAyB,IAArBj9I,EAAMm6I,WAAkB,OAAOt5J,KAEnC,GAAyB,IAArBmf,EAAMm6I,WAER,OAAIt2I,GAAQA,IAAS7D,EAAM2P,QACtB9L,IAAMA,EAAO7D,EAAM2P,OAExB3P,EAAM2P,MAAQ,KACd3P,EAAMm6I,WAAa,EACnBn6I,EAAMo6I,SAAU,EACZv2I,GAAMA,EAAKne,KAAK,SAAU7E,KAAMm8J,IANKn8J,KAW3C,IAAKgjB,EAAM,CAET,IAAI45I,EAAQz9I,EAAM2P,MACd0T,EAAMrjB,EAAMm6I,WAChBn6I,EAAM2P,MAAQ,KACd3P,EAAMm6I,WAAa,EACnBn6I,EAAMo6I,SAAU,EAEhB,IAAK,IAAIh5J,EAAI,EAAGA,EAAIiiC,EAAKjiC,IACvBq8J,EAAMr8J,GAAGsE,KAAK,SAAU7E,KAAM,CAC5Bo8J,YAAY,IAIhB,OAAOp8J,KAIT,IAAIkP,EAAQob,EAAQnL,EAAM2P,MAAO9L,GACjC,OAAe,IAAX9T,IACJiQ,EAAM2P,MAAMvT,OAAOrM,EAAO,GAC1BiQ,EAAMm6I,YAAc,EACK,IAArBn6I,EAAMm6I,aAAkBn6I,EAAM2P,MAAQ3P,EAAM2P,MAAM,IACtD9L,EAAKne,KAAK,SAAU7E,KAAMm8J,IAJDn8J,MAU3B+6D,EAAS5pC,UAAUzsB,GAAK,SAAUm4J,EAAI15C,GACpC,IAAIhtD,EAAM1oC,EAAO0D,UAAUzsB,GAAG3D,KAAKf,KAAM68J,EAAI15C,GACzChkG,EAAQnf,KAAKk4J,eAuBjB,MArBW,SAAP2E,GAGF19I,EAAMw6I,kBAAoB35J,KAAKwlH,cAAc,YAAc,GAErC,IAAlBrmG,EAAMo6I,SAAmBv5J,KAAKywB,UAClB,aAAPosI,IACJ19I,EAAMg4C,YAAeh4C,EAAMw6I,oBAC9Bx6I,EAAMw6I,kBAAoBx6I,EAAMs6I,cAAe,EAC/Ct6I,EAAMo6I,SAAU,EAChBp6I,EAAMu6I,iBAAkB,EACxBnB,EAAM,cAAep5I,EAAMne,OAAQme,EAAMq6I,SAErCr6I,EAAMne,OACRq5J,EAAar6J,MACHmf,EAAMq6I,SAChBzpI,EAAQC,SAASmrI,EAAkBn7J,QAKlCm2D,GAGT4E,EAAS5pC,UAAU00F,YAAc9qD,EAAS5pC,UAAUzsB,GAEpDq2D,EAAS5pC,UAAU6zF,eAAiB,SAAU63C,EAAI15C,GAChD,IAAIhtD,EAAM1oC,EAAO0D,UAAU6zF,eAAejkH,KAAKf,KAAM68J,EAAI15C,GAYzD,MAVW,aAAP05C,GAOF9sI,EAAQC,SAASkrI,EAAyBl7J,MAGrCm2D,GAGT4E,EAAS5pC,UAAUg1F,mBAAqB,SAAU02C,GAChD,IAAI1mG,EAAM1oC,EAAO0D,UAAUg1F,mBAAmB9jG,MAAMriB,KAAM+G,WAY1D,MAVW,aAAP81J,QAA4Bv4J,IAAPu4J,GAOvB9sI,EAAQC,SAASkrI,EAAyBl7J,MAGrCm2D,GAuBT4E,EAAS5pC,UAAUV,OAAS,WAC1B,IAAItR,EAAQnf,KAAKk4J,eAYjB,OAVK/4I,EAAMo6I,UACThB,EAAM,UAINp5I,EAAMo6I,SAAWp6I,EAAMw6I,kBAQ3B,SAAgB/2J,EAAQuc,GACjBA,EAAMy6I,kBACTz6I,EAAMy6I,iBAAkB,EACxB7pI,EAAQC,SAASorI,EAASx4J,EAAQuc,IAVlCsR,CAAOzwB,KAAMmf,IAGfA,EAAM4P,QAAS,EACR/uB,MAuBT+6D,EAAS5pC,UAAUX,MAAQ,WAUzB,OATA+nI,EAAM,wBAAyBv4J,KAAKk4J,eAAeqB,UAEf,IAAhCv5J,KAAKk4J,eAAeqB,UACtBhB,EAAM,SACNv4J,KAAKk4J,eAAeqB,SAAU,EAC9Bv5J,KAAK6E,KAAK,UAGZ7E,KAAKk4J,eAAenpI,QAAS,EACtB/uB,MAeT+6D,EAAS5pC,UAAU3F,KAAO,SAAU5oB,GAClC,IAAII,EAAQhD,KAERmf,EAAQnf,KAAKk4J,eACbnpI,GAAS,EA0Bb,IAAK,IAAIxuB,KAzBTqC,EAAO8B,GAAG,OAAO,WAGf,GAFA6zJ,EAAM,eAEFp5I,EAAMq4C,UAAYr4C,EAAMu4H,MAAO,CACjC,IAAIlwH,EAAQrI,EAAMq4C,QAAQjxD,MACtBihB,GAASA,EAAMxmB,QAAQgC,EAAMyM,KAAK+X,GAGxCxkB,EAAMyM,KAAK,SAEb7M,EAAO8B,GAAG,QAAQ,SAAU8iB,IAC1B+wI,EAAM,gBACFp5I,EAAMq4C,UAAShwC,EAAQrI,EAAMq4C,QAAQpxD,MAAMohB,IAE3CrI,EAAMwxC,YAAN,MAAqBnpC,KAAyDrI,EAAMwxC,YAAgBnpC,GAAUA,EAAMxmB,UAE9GgC,EAAMyM,KAAK+X,KAGnBuH,GAAS,EACTnsB,EAAO4tB,aAKG5tB,OACI0B,IAAZtE,KAAKO,IAAyC,mBAAdqC,EAAOrC,KACzCP,KAAKO,GAAK,SAAoByjE,GAC5B,OAAO,WACL,OAAOphE,EAAOohE,GAAQ3hD,MAAMzf,EAAQmE,YAF9B,CAIRxG,IAKN,IAAK,IAAIH,EAAI,EAAGA,EAAIg5J,EAAap4J,OAAQZ,IACvCwC,EAAO8B,GAAG00J,EAAah5J,GAAIJ,KAAK6E,KAAKo+G,KAAKjjH,KAAMo5J,EAAah5J,KAc/D,OATAJ,KAAKo7H,MAAQ,SAAUh7H,GACrBm4J,EAAM,gBAAiBn4J,GAEnB2uB,IACFA,GAAS,EACTnsB,EAAO6tB,WAIJzwB,MAGa,mBAAX4rB,SACTmvC,EAAS5pC,UAAUvF,OAAOC,eAAiB,WAKzC,YAJ0CvnB,IAAtCo0J,IACFA,EAAoCj4J,EAAQ,sCAGvCi4J,EAAkC14J,QAI7CkW,OAAOgd,eAAe6nC,EAAS5pC,UAAW,wBAAyB,CAIjEiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAKk4J,eAAeF,iBAG/B9hJ,OAAOgd,eAAe6nC,EAAS5pC,UAAW,iBAAkB,CAI1DiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAKk4J,gBAAkBl4J,KAAKk4J,eAAenwI,UAGtD7R,OAAOgd,eAAe6nC,EAAS5pC,UAAW,kBAAmB,CAI3DiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAKk4J,eAAeqB,SAE7B9xG,IAAK,SAAatoC,GACZnf,KAAKk4J,iBACPl4J,KAAKk4J,eAAeqB,QAAUp6I,MAKpC47C,EAAS+hG,UAAYzB,EACrBnlJ,OAAOgd,eAAe6nC,EAAS5pC,UAAW,iBAAkB,CAI1DiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAKk4J,eAAel3J,UAoDT,mBAAX4qB,SACTmvC,EAASjzC,KAAO,SAAUkD,EAAUumC,GAKlC,YAJajtD,IAATwjB,IACFA,EAAOrnB,EAAQ,4BAGVqnB,EAAKizC,EAAU/vC,EAAUumC,+dC5hCpC,aAEA7xD,EAAOD,QAAU2xD,EAEjB,IAAI0nG,EAAiBr4J,EAAQ,aAAa+mJ,MACtCyR,EAA6BH,EAAeG,2BAC5C8D,EAAwBjE,EAAeiE,sBACvCC,EAAqClE,EAAekE,mCACpDC,EAA8BnE,EAAemE,4BAE7ChuI,EAASxuB,EAAQ,oBAIrB,SAASy8J,EAAev3C,EAAIhhH,GAC1B,IAAIw4J,EAAKn9J,KAAKo9J,gBACdD,EAAGE,cAAe,EAClB,IAAIpmJ,EAAKkmJ,EAAGG,QAEZ,GAAW,OAAPrmJ,EACF,OAAOjX,KAAK6E,KAAK,QAAS,IAAIk4J,GAGhCI,EAAGI,WAAa,KAChBJ,EAAGG,QAAU,KACD,MAAR34J,GACF3E,KAAKyP,KAAK9K,GACZsS,EAAG0uG,GACH,IAAI7qD,EAAK96D,KAAKk4J,eACdp9F,EAAG0+F,SAAU,GAET1+F,EAAG2+F,cAAgB3+F,EAAG95D,OAAS85D,EAAGk9F,gBACpCh4J,KAAKo7H,MAAMtgE,EAAGk9F,eAIlB,SAAS5mG,EAAU1uD,GACjB,KAAM1C,gBAAgBoxD,GAAY,OAAO,IAAIA,EAAU1uD,GACvDusB,EAAOluB,KAAKf,KAAM0C,GAClB1C,KAAKo9J,gBAAkB,CACrBF,eAAgBA,EAAej6C,KAAKjjH,MACpCw9J,eAAe,EACfH,cAAc,EACdC,QAAS,KACTC,WAAY,KACZE,cAAe,MAGjBz9J,KAAKk4J,eAAeuB,cAAe,EAInCz5J,KAAKk4J,eAAe/F,MAAO,EAEvBzvJ,IAC+B,mBAAtBA,EAAQoxD,YAA0B9zD,KAAKi+F,WAAav7F,EAAQoxD,WAC1C,mBAAlBpxD,EAAQunF,QAAsBjqF,KAAKmwB,OAASztB,EAAQunF,QAIjEjqF,KAAK0E,GAAG,YAAag5J,GAGvB,SAASA,IACP,IAAI16J,EAAQhD,KAEe,mBAAhBA,KAAKmwB,QAA0BnwB,KAAKk4J,eAAeC,UAK5DhsI,EAAKnsB,KAAM,KAAM,MAJjBA,KAAKmwB,QAAO,SAAUw1F,EAAIhhH,GACxBwnB,EAAKnpB,EAAO2iH,EAAIhhH,MA6DtB,SAASwnB,EAAKvpB,EAAQ+iH,EAAIhhH,GACxB,GAAIghH,EAAI,OAAO/iH,EAAOiC,KAAK,QAAS8gH,GAMpC,GALY,MAARhhH,GACF/B,EAAO6M,KAAK9K,GAIV/B,EAAOk1J,eAAe92J,OAAQ,MAAM,IAAIi8J,EAC5C,GAAIr6J,EAAOw6J,gBAAgBC,aAAc,MAAM,IAAIL,EACnD,OAAOp6J,EAAO6M,KAAK,MA9HrBhP,EAAQ,WAARA,CAAoB2wD,EAAWniC,GA+D/BmiC,EAAUjgC,UAAU1hB,KAAO,SAAU+X,EAAO/gB,GAE1C,OADAzG,KAAKo9J,gBAAgBI,eAAgB,EAC9BvuI,EAAOkC,UAAU1hB,KAAK1O,KAAKf,KAAMwnB,EAAO/gB,IAajD2qD,EAAUjgC,UAAU8sE,WAAa,SAAUz2E,EAAO/gB,EAAUwQ,GAC1DA,EAAG,IAAIgiJ,EAA2B,kBAGpC7nG,EAAUjgC,UAAU+hE,OAAS,SAAU1rE,EAAO/gB,EAAUwQ,GACtD,IAAIkmJ,EAAKn9J,KAAKo9J,gBAKd,GAJAD,EAAGG,QAAUrmJ,EACbkmJ,EAAGI,WAAa/1I,EAChB21I,EAAGM,cAAgBh3J,GAEd02J,EAAGE,aAAc,CACpB,IAAIviG,EAAK96D,KAAKk4J,gBACViF,EAAGK,eAAiB1iG,EAAG2+F,cAAgB3+F,EAAG95D,OAAS85D,EAAGk9F,gBAAeh4J,KAAKo7H,MAAMtgE,EAAGk9F,iBAO3F5mG,EAAUjgC,UAAUiqG,MAAQ,SAAUh7H,GACpC,IAAI+8J,EAAKn9J,KAAKo9J,gBAEQ,OAAlBD,EAAGI,YAAwBJ,EAAGE,aAOhCF,EAAGK,eAAgB,GANnBL,EAAGE,cAAe,EAElBr9J,KAAKi+F,WAAWk/D,EAAGI,WAAYJ,EAAGM,cAAeN,EAAGD,kBAQxD9rG,EAAUjgC,UAAU8oI,SAAW,SAAUnuI,EAAK7U,GAC5CgY,EAAOkC,UAAU8oI,SAASl5J,KAAKf,KAAM8rB,GAAK,SAAU6xI,GAClD1mJ,EAAG0mJ,mGCnKP,aAcA,SAASC,EAAcz+I,GACrB,IAAInc,EAAQhD,KAEZA,KAAK2rB,KAAO,KACZ3rB,KAAK+qD,MAAQ,KAEb/qD,KAAKssB,OAAS,YAimBhB,SAAwBuxI,EAAS1+I,EAAO2M,GACtC,IAAIi/B,EAAQ8yG,EAAQ9yG,MACpB8yG,EAAQ9yG,MAAQ,KAEhB,KAAOA,GAAO,CACZ,IAAI9zC,EAAK8zC,EAAM14C,SACf8M,EAAM2+I,YACN7mJ,EAAG6U,GACHi/B,EAAQA,EAAMp/B,KAIhBxM,EAAM4+I,mBAAmBpyI,KAAOkyI,EA5mB9BG,CAAeh7J,EAAOmc,IAQ1B,IAAI8P,EA3BJvvB,EAAOD,QAAUu2D,EA8BjBA,EAASioG,cAAgBA,EAGzB,IAAIC,EAAe,CACjBC,UAAW19J,EAAQ,mBAMjBgtB,EAAShtB,EAAQ,6BAIjBknB,EAASlnB,EAAQ,UAAUknB,OAE3B2wI,EAAgBx4J,EAAO2iF,YAAc,aAUzC,IAkII27E,EAlIAxF,EAAcn4J,EAAQ,8BAGtBo4J,EADWp4J,EAAQ,4BACSo4J,iBAE5BC,EAAiBr4J,EAAQ,aAAa+mJ,MACtCuR,EAAuBD,EAAeC,qBACtCE,EAA6BH,EAAeG,2BAC5C8D,EAAwBjE,EAAeiE,sBACvCsB,EAAyBvF,EAAeuF,uBACxCC,EAAuBxF,EAAewF,qBACtCC,EAAyBzF,EAAeyF,uBACxCC,EAA6B1F,EAAe0F,2BAC5CC,EAAuB3F,EAAe2F,qBAEtCtF,EAAiBP,EAAYO,eAIjC,SAAStpI,KAET,SAASouI,EAAcv7J,EAASE,EAAQy2J,GACtCpqI,EAASA,GAAUxuB,EAAQ,oBAC3BiC,EAAUA,GAAW,GAMG,kBAAb22J,IAAwBA,EAAWz2J,aAAkBqsB,GAGhEjvB,KAAK2wD,aAAejuD,EAAQiuD,WACxB0oG,IAAUr5J,KAAK2wD,WAAa3wD,KAAK2wD,cAAgBjuD,EAAQgpD,oBAI7D1rD,KAAKg4J,cAAgBa,EAAiB74J,KAAM0C,EAAS,wBAAyB22J,GAE9Er5J,KAAK0+J,aAAc,EAEnB1+J,KAAK08J,WAAY,EAEjB18J,KAAK2+J,QAAS,EAEd3+J,KAAK03I,OAAQ,EAEb13I,KAAK07J,UAAW,EAEhB17J,KAAKm4J,WAAY,EAIjB,IAAIyG,GAAqC,IAA1Bl8J,EAAQm8J,cACvB7+J,KAAK6+J,eAAiBD,EAItB5+J,KAAKkyJ,gBAAkBxvJ,EAAQwvJ,iBAAmB,OAIlDlyJ,KAAKgB,OAAS,EAEdhB,KAAK8+J,SAAU,EAEf9+J,KAAK2uB,OAAS,EAKd3uB,KAAKmyJ,MAAO,EAIZnyJ,KAAK++J,kBAAmB,EAExB/+J,KAAKg/J,QAAU,SAAUr5C,IA6R3B,SAAiB/iH,EAAQ+iH,GACvB,IAAIxmG,EAAQvc,EAAOk1J,eACf3F,EAAOhzI,EAAMgzI,KACbl7I,EAAKkI,EAAMm+I,QACf,GAAkB,mBAAPrmJ,EAAmB,MAAM,IAAI8lJ,EAExC,GAbF,SAA4B59I,GAC1BA,EAAM2/I,SAAU,EAChB3/I,EAAMm+I,QAAU,KAChBn+I,EAAMne,QAAUme,EAAM8/I,SACtB9/I,EAAM8/I,SAAW,EAQjBC,CAAmB//I,GACfwmG,GArCN,SAAsB/iH,EAAQuc,EAAOgzI,EAAMxsC,EAAI1uG,KAC3CkI,EAAM2+I,UAEJ3L,GAGFpiI,EAAQC,SAAS/Y,EAAI0uG,GAGrB51F,EAAQC,SAASmvI,EAAav8J,EAAQuc,GACtCvc,EAAOk1J,eAAesH,cAAe,EACrCjG,EAAev2J,EAAQ+iH,KAIvB1uG,EAAG0uG,GACH/iH,EAAOk1J,eAAesH,cAAe,EACrCjG,EAAev2J,EAAQ+iH,GAGvBw5C,EAAYv8J,EAAQuc,IAiBdkgJ,CAAaz8J,EAAQuc,EAAOgzI,EAAMxsC,EAAI1uG,OAAS,CAErD,IAAIykJ,EAAW4D,EAAWngJ,IAAUvc,EAAOu1J,UAEtCuD,GAAav8I,EAAMwP,QAAWxP,EAAM4/I,mBAAoB5/I,EAAMogJ,iBACjEC,EAAY58J,EAAQuc,GAGlBgzI,EACFpiI,EAAQC,SAASyvI,EAAY78J,EAAQuc,EAAOu8I,EAAUzkJ,GAEtDwoJ,EAAW78J,EAAQuc,EAAOu8I,EAAUzkJ,IA7StC+nJ,CAAQp8J,EAAQ+iH,IAIlB3lH,KAAKs9J,QAAU,KAEft9J,KAAKi/J,SAAW,EAChBj/J,KAAKu/J,gBAAkB,KACvBv/J,KAAK0/J,oBAAsB,KAG3B1/J,KAAK89J,UAAY,EAGjB99J,KAAK2/J,aAAc,EAEnB3/J,KAAKo/J,cAAe,EAEpBp/J,KAAK65J,WAAkC,IAAtBn3J,EAAQm3J,UAEzB75J,KAAK85J,cAAgBp3J,EAAQo3J,YAE7B95J,KAAK4/J,qBAAuB,EAG5B5/J,KAAK+9J,mBAAqB,IAAIH,EAAc59J,MA4C9C,SAASg2D,EAAStzD,GAUhB,IAAI22J,EAAWr5J,gBATfivB,EAASA,GAAUxuB,EAAQ,qBAU3B,IAAK44J,IAAa+E,EAAgBr9J,KAAKi1D,EAAUh2D,MAAO,OAAO,IAAIg2D,EAAStzD,GAC5E1C,KAAK83J,eAAiB,IAAImG,EAAcv7J,EAAS1C,KAAMq5J,GAEvDr5J,KAAKqzB,UAAW,EAEZ3wB,IAC2B,mBAAlBA,EAAQ0D,QAAsBpG,KAAKkzF,OAASxwF,EAAQ0D,OACjC,mBAAnB1D,EAAQm9J,SAAuB7/J,KAAK8/J,QAAUp9J,EAAQm9J,QAClC,mBAApBn9J,EAAQgb,UAAwB1d,KAAKi6J,SAAWv3J,EAAQgb,SACtC,mBAAlBhb,EAAQ2lF,QAAsBroF,KAAKooF,OAAS1lF,EAAQ2lF,QAGjE56D,EAAO1sB,KAAKf,MAwJd,SAAS+/J,EAAQn9J,EAAQuc,EAAO0gJ,EAAQr9H,EAAKhb,EAAO/gB,EAAUwQ,GAC5DkI,EAAM8/I,SAAWz8H,EACjBrjB,EAAMm+I,QAAUrmJ,EAChBkI,EAAM2/I,SAAU,EAChB3/I,EAAMgzI,MAAO,EACThzI,EAAMg5I,UAAWh5I,EAAM6/I,QAAQ,IAAIV,EAAqB,UAAmBuB,EAAQj9J,EAAOk9J,QAAQt4I,EAAOrI,EAAM6/I,SAAcp8J,EAAOswF,OAAO1rE,EAAO/gB,EAAU0Y,EAAM6/I,SACtK7/I,EAAMgzI,MAAO,EAwDf,SAASsN,EAAW78J,EAAQuc,EAAOu8I,EAAUzkJ,GACtCykJ,GASP,SAAsB94J,EAAQuc,GACP,IAAjBA,EAAMne,QAAgBme,EAAMu9I,YAC9Bv9I,EAAMu9I,WAAY,EAClB95J,EAAOiC,KAAK,UAZCm7J,CAAap9J,EAAQuc,GACpCA,EAAM2+I,YACN7mJ,IACAkoJ,EAAYv8J,EAAQuc,GActB,SAASqgJ,EAAY58J,EAAQuc,GAC3BA,EAAM4/I,kBAAmB,EACzB,IAAIh0G,EAAQ5rC,EAAMogJ,gBAElB,GAAI38J,EAAOk9J,SAAW/0G,GAASA,EAAMp/B,KAAM,CAEzC,IAAIlV,EAAI0I,EAAMygJ,qBACV73I,EAAS,IAAIvX,MAAMiG,GACnBwpJ,EAAS9gJ,EAAM4+I,mBACnBkC,EAAOl1G,MAAQA,EAIf,IAHA,IAAIr7C,EAAQ,EACRwwJ,GAAa,EAEVn1G,GACLhjC,EAAOrY,GAASq7C,EACXA,EAAMo1G,QAAOD,GAAa,GAC/Bn1G,EAAQA,EAAMp/B,KACdjc,GAAS,EAGXqY,EAAOm4I,WAAaA,EACpBH,EAAQn9J,EAAQuc,GAAO,EAAMA,EAAMne,OAAQ+mB,EAAQ,GAAIk4I,EAAO3zI,QAG9DnN,EAAM2+I,YACN3+I,EAAMugJ,oBAAsB,KAExBO,EAAOt0I,MACTxM,EAAM4+I,mBAAqBkC,EAAOt0I,KAClCs0I,EAAOt0I,KAAO,MAEdxM,EAAM4+I,mBAAqB,IAAIH,EAAcz+I,GAG/CA,EAAMygJ,qBAAuB,MACxB,CAEL,KAAO70G,GAAO,CACZ,IAAIvjC,EAAQujC,EAAMvjC,MACd/gB,EAAWskD,EAAMtkD,SACjBwQ,EAAK8zC,EAAM14C,SASf,GAPA0tJ,EAAQn9J,EAAQuc,GAAO,EADbA,EAAMwxC,WAAa,EAAInpC,EAAMxmB,OACJwmB,EAAO/gB,EAAUwQ,GACpD8zC,EAAQA,EAAMp/B,KACdxM,EAAMygJ,uBAKFzgJ,EAAM2/I,QACR,MAIU,OAAV/zG,IAAgB5rC,EAAMugJ,oBAAsB,MAGlDvgJ,EAAMogJ,gBAAkBx0G,EACxB5rC,EAAM4/I,kBAAmB,EA2C3B,SAASO,EAAWngJ,GAClB,OAAOA,EAAMw/I,QAA2B,IAAjBx/I,EAAMne,QAA0C,OAA1Bme,EAAMogJ,kBAA6BpgJ,EAAMu8I,WAAav8I,EAAM2/I,QAG3G,SAASsB,EAAUx9J,EAAQuc,GACzBvc,EAAOwlF,QAAO,SAAUt8D,GACtB3M,EAAM2+I,YAEFhyI,GACFqtI,EAAev2J,EAAQkpB,GAGzB3M,EAAMwgJ,aAAc,EACpB/8J,EAAOiC,KAAK,aACZs6J,EAAYv8J,EAAQuc,MAiBxB,SAASggJ,EAAYv8J,EAAQuc,GAC3B,IAAIkhJ,EAAOf,EAAWngJ,GAEtB,GAAIkhJ,IAhBN,SAAmBz9J,EAAQuc,GACpBA,EAAMwgJ,aAAgBxgJ,EAAMu/I,cACF,mBAAlB97J,EAAOwlF,QAA0BjpE,EAAMg5I,WAKhDh5I,EAAMwgJ,aAAc,EACpB/8J,EAAOiC,KAAK,eALZsa,EAAM2+I,YACN3+I,EAAMu/I,aAAc,EACpB3uI,EAAQC,SAASowI,EAAWx9J,EAAQuc,KAYtCu+I,CAAU96J,EAAQuc,GAEM,IAApBA,EAAM2+I,YACR3+I,EAAMu8I,UAAW,EACjB94J,EAAOiC,KAAK,UAERsa,EAAM26I,cAAa,CAGrB,IAAIwG,EAAS19J,EAAOs1J,iBAEfoI,GAAUA,EAAOxG,aAAewG,EAAOnpG,aAC1Cv0D,EAAO8a,UAMf,OAAO2iJ,EA3hBT5/J,EAAQ,WAARA,CAAoBu1D,EAAUvoC,GAyF9BwwI,EAAc9sI,UAAU8mI,UAAY,WAIlC,IAHA,IAAI52E,EAAUrhF,KAAKu/J,gBACfx8F,EAAM,GAEHse,GACLte,EAAItzD,KAAK4xE,GACTA,EAAUA,EAAQ11D,KAGpB,OAAOo3C,GAGT,WACE,IACE7sD,OAAOgd,eAAe+qI,EAAc9sI,UAAW,SAAU,CACvDo2B,IAAK22G,EAAaC,WAAU,WAC1B,OAAOn+J,KAAKi4J,cACX,6EAAmF,aAExF,MAAO9vJ,KAPX,GAcsB,mBAAXyjB,QAAyBA,OAAO20I,aAAiE,mBAA3Cz6I,SAASqL,UAAUvF,OAAO20I,cACzFnC,EAAkBt4I,SAASqL,UAAUvF,OAAO20I,aAC5CrqJ,OAAOgd,eAAe8iC,EAAUpqC,OAAO20I,YAAa,CAClDh7J,MAAO,SAAekxD,GACpB,QAAI2nG,EAAgBr9J,KAAKf,KAAMy2D,IAC3Bz2D,OAASg2D,IACNS,GAAUA,EAAOqhG,0BAA0BmG,OAItDG,EAAkB,SAAyB3nG,GACzC,OAAOA,aAAkBz2D,MA+B7Bg2D,EAAS7kC,UAAUrsB,KAAO,WACxBq0J,EAAen5J,KAAM,IAAIq+J,IA+B3BroG,EAAS7kC,UAAU/qB,MAAQ,SAAUohB,EAAO/gB,EAAUwQ,GACpD,IAnNqBoa,EAmNjBlS,EAAQnf,KAAK83J,eACb9oF,GAAM,EAENmxF,GAAShhJ,EAAMwxC,aAtNEt/B,EAsN0B7J,EArNxCG,EAAOs6C,SAAS5wC,IAAQA,aAAeinI,GAsO9C,OAfI6H,IAAUx4I,EAAOs6C,SAASz6C,KAC5BA,EA7NJ,SAA6BA,GAC3B,OAAOG,EAAOG,KAAKN,GA4NTizI,CAAoBjzI,IAGN,mBAAb/gB,IACTwQ,EAAKxQ,EACLA,EAAW,MAGT05J,EAAO15J,EAAW,SAAmBA,IAAUA,EAAW0Y,EAAM+yI,iBAClD,mBAAPj7I,IAAmBA,EAAK4Y,GAC/B1Q,EAAMw/I,OA7CZ,SAAuB/7J,EAAQqU,GAC7B,IAAI0uG,EAAK,IAAI64C,EAEbrF,EAAev2J,EAAQ+iH,GACvB51F,EAAQC,SAAS/Y,EAAI0uG,GAyCH66C,CAAcxgK,KAAMiX,IAAakpJ,GAnCrD,SAAoBv9J,EAAQuc,EAAOqI,EAAOvQ,GACxC,IAAI0uG,EAQJ,OANc,OAAVn+F,EACFm+F,EAAK,IAAI44C,EACiB,iBAAV/2I,GAAuBrI,EAAMwxC,aAC7Cg1D,EAAK,IAAIozC,EAAqB,QAAS,CAAC,SAAU,UAAWvxI,KAG3Dm+F,IACFwzC,EAAev2J,EAAQ+iH,GACvB51F,EAAQC,SAAS/Y,EAAI0uG,IACd,GAuBmD86C,CAAWzgK,KAAMmf,EAAOqI,EAAOvQ,MACzFkI,EAAM2+I,YACN9uF,EAwDJ,SAAuBpsE,EAAQuc,EAAOghJ,EAAO34I,EAAO/gB,EAAUwQ,GAC5D,IAAKkpJ,EAAO,CACV,IAAIO,EAtBR,SAAqBvhJ,EAAOqI,EAAO/gB,GAC5B0Y,EAAMwxC,aAAsC,IAAxBxxC,EAAM0/I,eAA4C,iBAAVr3I,IAC/DA,EAAQG,EAAOG,KAAKN,EAAO/gB,IAG7B,OAAO+gB,EAiBUm5I,CAAYxhJ,EAAOqI,EAAO/gB,GAErC+gB,IAAUk5I,IACZP,GAAQ,EACR15J,EAAW,SACX+gB,EAAQk5I,GAIZ,IAAIl+H,EAAMrjB,EAAMwxC,WAAa,EAAInpC,EAAMxmB,OACvCme,EAAMne,QAAUwhC,EAChB,IAAIwsC,EAAM7vD,EAAMne,OAASme,EAAM64I,cAE1BhpF,IAAK7vD,EAAMu9I,WAAY,GAE5B,GAAIv9I,EAAM2/I,SAAW3/I,EAAMwP,OAAQ,CACjC,IAAIS,EAAOjQ,EAAMugJ,oBACjBvgJ,EAAMugJ,oBAAsB,CAC1Bl4I,MAAOA,EACP/gB,SAAUA,EACV05J,MAAOA,EACP9tJ,SAAU4E,EACV0U,KAAM,MAGJyD,EACFA,EAAKzD,KAAOxM,EAAMugJ,oBAElBvgJ,EAAMogJ,gBAAkBpgJ,EAAMugJ,oBAGhCvgJ,EAAMygJ,sBAAwB,OAE9BG,EAAQn9J,EAAQuc,GAAO,EAAOqjB,EAAKhb,EAAO/gB,EAAUwQ,GAGtD,OAAO+3D,EA9FC4xF,CAAc5gK,KAAMmf,EAAOghJ,EAAO34I,EAAO/gB,EAAUwQ,IAEpD+3D,GAGThZ,EAAS7kC,UAAUjB,KAAO,WACxBlwB,KAAK83J,eAAenpI,UAGtBqnC,EAAS7kC,UAAUf,OAAS,WAC1B,IAAIjR,EAAQnf,KAAK83J,eAEb34I,EAAMwP,SACRxP,EAAMwP,SACDxP,EAAM2/I,SAAY3/I,EAAMwP,QAAWxP,EAAM4/I,mBAAoB5/I,EAAMogJ,iBAAiBC,EAAYx/J,KAAMmf,KAI/G62C,EAAS7kC,UAAU0vI,mBAAqB,SAA4Bp6J,GAGlE,GADwB,iBAAbA,IAAuBA,EAAWA,EAASuW,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAOsN,SAAS7jB,EAAW,IAAIuW,gBAAkB,GAAI,MAAM,IAAIyhJ,EAAqBh4J,GAExL,OADAzG,KAAK83J,eAAe5F,gBAAkBzrJ,EAC/BzG,MAGTkW,OAAOgd,eAAe8iC,EAAS7kC,UAAW,iBAAkB,CAI1DiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAK83J,gBAAkB93J,KAAK83J,eAAeG,eAYtD/hJ,OAAOgd,eAAe8iC,EAAS7kC,UAAW,wBAAyB,CAIjEiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAK83J,eAAeE,iBA4L/BhiG,EAAS7kC,UAAU+hE,OAAS,SAAU1rE,EAAO/gB,EAAUwQ,GACrDA,EAAG,IAAIgiJ,EAA2B,cAGpCjjG,EAAS7kC,UAAU2uI,QAAU,KAE7B9pG,EAAS7kC,UAAU5qB,IAAM,SAAUihB,EAAO/gB,EAAUwQ,GAClD,IAAIkI,EAAQnf,KAAK83J,eAoBjB,MAlBqB,mBAAVtwI,GACTvQ,EAAKuQ,EACLA,EAAQ,KACR/gB,EAAW,MACkB,mBAAbA,IAChBwQ,EAAKxQ,EACLA,EAAW,MAGT+gB,MAAAA,GAAuCxnB,KAAKoG,MAAMohB,EAAO/gB,GAEzD0Y,EAAMwP,SACRxP,EAAMwP,OAAS,EACf3uB,KAAKowB,UAIFjR,EAAMw/I,QAsEb,SAAqB/7J,EAAQuc,EAAOlI,GAClCkI,EAAMw/I,QAAS,EACfQ,EAAYv8J,EAAQuc,GAEhBlI,IACEkI,EAAMu8I,SAAU3rI,EAAQC,SAAS/Y,GAASrU,EAAOmjH,KAAK,SAAU9uG,IAGtEkI,EAAMu4H,OAAQ,EACd90I,EAAOywB,UAAW,EA/ECytI,CAAY9gK,KAAMmf,EAAOlI,GACrCjX,MAGTkW,OAAOgd,eAAe8iC,EAAS7kC,UAAW,iBAAkB,CAI1DiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAK83J,eAAe92J,UAuF/BkV,OAAOgd,eAAe8iC,EAAS7kC,UAAW,YAAa,CAIrDiC,YAAY,EACZm0B,IAAK,WACH,YAA4BjjD,IAAxBtE,KAAK83J,gBAIF93J,KAAK83J,eAAeK,WAE7B1wG,IAAK,SAAaliD,GAGXvF,KAAK83J,iBAMV93J,KAAK83J,eAAeK,UAAY5yJ,MAGpCywD,EAAS7kC,UAAUzT,QAAUk7I,EAAYl7I,QACzCs4C,EAAS7kC,UAAUypI,WAAahC,EAAYiC,UAE5C7kG,EAAS7kC,UAAU8oI,SAAW,SAAUnuI,EAAK7U,GAC3CA,EAAG6U,2WCvrBL,aAEA,IAAIi1I,EAEJ,SAASC,EAAgB3vI,EAAK1hB,EAAKpK,GAAiK,OAApJoK,KAAO0hB,EAAOnb,OAAOgd,eAAe7B,EAAK1hB,EAAK,CAAEpK,MAAOA,EAAO6tB,YAAY,EAAME,cAAc,EAAMD,UAAU,IAAkBhC,EAAI1hB,GAAOpK,EAAgB8rB,EAE3M,IAAIqqI,EAAWj7J,EAAQ,mBAEnBwgK,EAAer1I,OAAO,eACtBs1I,EAAct1I,OAAO,cACrBu1I,EAASv1I,OAAO,SAChBw1I,EAASx1I,OAAO,SAChBy1I,EAAez1I,OAAO,eACtB01I,EAAiB11I,OAAO,iBACxB21I,EAAU31I,OAAO,UAErB,SAAS41I,EAAiBj8J,EAAO4mB,GAC/B,MAAO,CACL5mB,MAAOA,EACP4mB,KAAMA,GAIV,SAASs1I,EAAepmD,GACtB,IAAIn4G,EAAUm4G,EAAK4lD,GAEnB,GAAgB,OAAZ/9J,EAAkB,CACpB,IAAIyB,EAAO02G,EAAKkmD,GAASz+J,OAIZ,OAAT6B,IACF02G,EAAKgmD,GAAgB,KACrBhmD,EAAK4lD,GAAgB,KACrB5lD,EAAK6lD,GAAe,KACpBh+J,EAAQs+J,EAAiB78J,GAAM,MAKrC,SAAS+8J,EAAWrmD,GAGlBtrF,EAAQC,SAASyxI,EAAgBpmD,GAgBnC,IAAIsmD,EAAyBzrJ,OAAO45C,gBAAe,eAC/C8xG,EAAuC1rJ,OAAO44C,gBA4D/CkyG,EA5D+DD,EAAwB,CACxFn+J,aACE,OAAO5C,KAAKuhK,IAGd51I,KAAM,WACJ,IAAI3oB,EAAQhD,KAIR8B,EAAQ9B,KAAKmhK,GAEjB,GAAc,OAAVr/J,EACF,OAAOmB,QAAQE,OAAOrB,GAGxB,GAAI9B,KAAKohK,GACP,OAAOn+J,QAAQC,QAAQs+J,OAAiBl9J,GAAW,IAGrD,GAAItE,KAAKuhK,GAASpJ,UAKhB,OAAO,IAAIl1J,SAAQ,SAAUC,EAASC,GACpC4sB,EAAQC,UAAS,WACXhtB,EAAMm+J,GACRh+J,EAAOH,EAAMm+J,IAEbj+J,EAAQs+J,OAAiBl9J,GAAW,UAU5C,IACIokI,EADAm5B,EAAc7hK,KAAKqhK,GAGvB,GAAIQ,EACFn5B,EAAU,IAAIzlI,QA1DpB,SAAqB4+J,EAAaxmD,GAChC,OAAO,SAAUn4G,EAASC,GACxB0+J,EAAYpzG,MAAK,WACX4sD,EAAK+lD,GACPl+J,EAAQs+J,OAAiBl9J,GAAW,IAItC+2G,EAAKimD,GAAgBp+J,EAASC,KAC7BA,IAiDqB2+J,CAAYD,EAAa7hK,WAC1C,CAGL,IAAI2E,EAAO3E,KAAKuhK,GAASz+J,OAEzB,GAAa,OAAT6B,EACF,OAAO1B,QAAQC,QAAQs+J,EAAiB78J,GAAM,IAGhD+jI,EAAU,IAAIzlI,QAAQjD,KAAKshK,IAI7B,OADAthK,KAAKqhK,GAAgB34B,EACdA,IAE+B98G,OAAOC,eAAe,WAC9D,OAAO7rB,QACLghK,EAAgBD,EAAuB,UAAU,WACnD,IAAIh8J,EAAS/E,KAKb,OAAO,IAAIiD,SAAQ,SAAUC,EAASC,GACpC4B,EAAOw8J,GAAS7jJ,QAAQ,MAAM,SAAUoO,GAClCA,EACF3oB,EAAO2oB,GAIT5oB,EAAQs+J,OAAiBl9J,GAAW,aAGtCy8J,GAAwBY,GAoE5BjiK,EAAOD,QAlEiC,SAA2CmD,GACjF,IAAIm/J,EAEAv3I,EAAWtU,OAAOnN,OAAO64J,GAA4DZ,EAArBe,EAAiB,GAAoCR,EAAS,CAChIh8J,MAAO3C,EACPywB,UAAU,IACR2tI,EAAgBe,EAAgBd,EAAc,CAChD17J,MAAO,KACP8tB,UAAU,IACR2tI,EAAgBe,EAAgBb,EAAa,CAC/C37J,MAAO,KACP8tB,UAAU,IACR2tI,EAAgBe,EAAgBZ,EAAQ,CAC1C57J,MAAO,KACP8tB,UAAU,IACR2tI,EAAgBe,EAAgBX,EAAQ,CAC1C77J,MAAO3C,EAAOs1J,eAAe/gG,WAC7B9jC,UAAU,IACR2tI,EAAgBe,EAAgBT,EAAgB,CAClD/7J,MAAO,SAAerC,EAASC,GAC7B,IAAIwB,EAAO6lB,EAAS+2I,GAASz+J,OAEzB6B,GACF6lB,EAAS62I,GAAgB,KACzB72I,EAASy2I,GAAgB,KACzBz2I,EAAS02I,GAAe,KACxBh+J,EAAQs+J,EAAiB78J,GAAM,MAE/B6lB,EAASy2I,GAAgB/9J,EACzBsnB,EAAS02I,GAAe/9J,IAG5BkwB,UAAU,IACR0uI,IA8BJ,OA7BAv3I,EAAS62I,GAAgB,KACzB3F,EAAS94J,GAAQ,SAAUkpB,GACzB,GAAIA,GAAoB,+BAAbA,EAAIjrB,KAAuC,CACpD,IAAIsC,EAASqnB,EAAS02I,GAWtB,OARe,OAAX/9J,IACFqnB,EAAS62I,GAAgB,KACzB72I,EAASy2I,GAAgB,KACzBz2I,EAAS02I,GAAe,KACxB/9J,EAAO2oB,SAGTtB,EAAS22I,GAAUr1I,GAIrB,IAAI5oB,EAAUsnB,EAASy2I,GAEP,OAAZ/9J,IACFsnB,EAAS62I,GAAgB,KACzB72I,EAASy2I,GAAgB,KACzBz2I,EAAS02I,GAAe,KACxBh+J,EAAQs+J,OAAiBl9J,GAAW,KAGtCkmB,EAAS42I,IAAU,KAErBx+J,EAAO8B,GAAG,WAAYg9J,EAAWz+C,KAAK,KAAMz4F,IACrCA,0FC3MT,aAEA,SAAS87F,EAAQ7vD,EAAQurG,GAAkB,IAAI7rJ,EAAOD,OAAOC,KAAKsgD,GAAS,GAAIvgD,OAAO69H,sBAAuB,CAAE,IAAIkuB,EAAU/rJ,OAAO69H,sBAAsBt9E,GAAaurG,IAAgBC,EAAUA,EAAQzvJ,QAAO,SAAU6zI,GAAO,OAAOnwI,OAAOid,yBAAyBsjC,EAAQ4vF,GAAKjzH,eAAgBjd,EAAK1G,KAAK4S,MAAMlM,EAAM8rJ,GAAY,OAAO9rJ,EAI9U,SAAS6qJ,EAAgB3vI,EAAK1hB,EAAKpK,GAAiK,OAApJoK,KAAO0hB,EAAOnb,OAAOgd,eAAe7B,EAAK1hB,EAAK,CAAEpK,MAAOA,EAAO6tB,YAAY,EAAME,cAAc,EAAMD,UAAU,IAAkBhC,EAAI1hB,GAAOpK,EAAgB8rB,EAI3M,SAASq9B,EAAkBhzC,EAAQizC,GAAS,IAAK,IAAIpuD,EAAI,EAAGA,EAAIouD,EAAM3tD,OAAQT,IAAK,CAAE,IAAIquD,EAAaD,EAAMpuD,GAAIquD,EAAWx7B,WAAaw7B,EAAWx7B,aAAc,EAAOw7B,EAAWt7B,cAAe,EAAU,UAAWs7B,IAAYA,EAAWv7B,UAAW,GAAMnd,OAAOgd,eAAexX,EAAQkzC,EAAWj/C,IAAKi/C,IAI7S,IACIjnC,EADWlnB,EAAQ,UACDknB,OAGlBomD,EADYttE,EAAQ,QACAstE,QAEpBr/B,EAASq/B,GAAWA,EAAQr/B,QAAU,UAM1ChvC,EAAOD,QAEP,WACE,SAASk5J,KArBX,SAAyBjoG,EAAUH,GAAe,KAAMG,aAAoBH,GAAgB,MAAM,IAAIF,UAAU,qCAsB5G9tD,CAAgBvC,KAAM24J,GAEtB34J,KAAK8+I,KAAO,KACZ9+I,KAAKunF,KAAO,KACZvnF,KAAKgB,OAAS,EAtBlB,IAAsBuvD,EAAaC,EAAYC,EAoM7C,OApMoBF,EAyBPooG,GAzBoBnoG,EAyBR,CAAC,CACxB7gD,IAAK,OACLpK,MAAO,SAAcoC,GACnB,IAAIojD,EAAQ,CACVpmD,KAAMgD,EACNgkB,KAAM,MAEJ3rB,KAAKgB,OAAS,EAAGhB,KAAKunF,KAAK57D,KAAOo/B,EAAW/qD,KAAK8+I,KAAO/zF,EAC7D/qD,KAAKunF,KAAOx8B,IACV/qD,KAAKgB,SAER,CACD2O,IAAK,UACLpK,MAAO,SAAiBoC,GACtB,IAAIojD,EAAQ,CACVpmD,KAAMgD,EACNgkB,KAAM3rB,KAAK8+I,MAEO,IAAhB9+I,KAAKgB,SAAchB,KAAKunF,KAAOx8B,GACnC/qD,KAAK8+I,KAAO/zF,IACV/qD,KAAKgB,SAER,CACD2O,IAAK,QACLpK,MAAO,WACL,GAAoB,IAAhBvF,KAAKgB,OAAT,CACA,IAAIguE,EAAMhvE,KAAK8+I,KAAKn6I,KAGpB,OAFoB,IAAhB3E,KAAKgB,OAAchB,KAAK8+I,KAAO9+I,KAAKunF,KAAO,KAAUvnF,KAAK8+I,KAAO9+I,KAAK8+I,KAAKnzH,OAC7E3rB,KAAKgB,OACAguE,KAER,CACDr/D,IAAK,QACLpK,MAAO,WACLvF,KAAK8+I,KAAO9+I,KAAKunF,KAAO,KACxBvnF,KAAKgB,OAAS,IAEf,CACD2O,IAAK,OACLpK,MAAO,SAAcwL,GACnB,GAAoB,IAAhB/Q,KAAKgB,OAAc,MAAO,GAI9B,IAHA,IAAIF,EAAId,KAAK8+I,KACT9vE,EAAM,GAAKluE,EAAE6D,KAEV7D,EAAIA,EAAE6qB,MACXqjD,GAAOj+D,EAAIjQ,EAAE6D,KAGf,OAAOqqE,IAER,CACDr/D,IAAK,SACLpK,MAAO,SAAgBnF,GACrB,GAAoB,IAAhBJ,KAAKgB,OAAc,OAAO2mB,EAAO8C,MAAM,GAK3C,IAJA,IArEc1H,EAAKrH,EAAQ5U,EAqEvBkoE,EAAMrnD,EAAOm7D,YAAY1iF,IAAM,GAC/BU,EAAId,KAAK8+I,KACTv+I,EAAI,EAEDO,GAzEOiiB,EA0EDjiB,EAAE6D,KA1EI+W,EA0EEszD,EA1EMloE,EA0EDvG,EAzE9BonB,EAAOwJ,UAAU9jB,KAAKtM,KAAKgiB,EAAKrH,EAAQ5U,GA0ElCvG,GAAKO,EAAE6D,KAAK3D,OACZF,EAAIA,EAAE6qB,KAGR,OAAOqjD,IAGR,CACDr/D,IAAK,UACLpK,MAAO,SAAiBnF,EAAG8hK,GACzB,IAAIlzF,EAcJ,OAZI5uE,EAAIJ,KAAK8+I,KAAKn6I,KAAK3D,QAErBguE,EAAMhvE,KAAK8+I,KAAKn6I,KAAKsZ,MAAM,EAAG7d,GAC9BJ,KAAK8+I,KAAKn6I,KAAO3E,KAAK8+I,KAAKn6I,KAAKsZ,MAAM7d,IAGtC4uE,EAFS5uE,IAAMJ,KAAK8+I,KAAKn6I,KAAK3D,OAExBhB,KAAKsG,QAGL47J,EAAaliK,KAAKmiK,WAAW/hK,GAAKJ,KAAKoiK,WAAWhiK,GAGnD4uE,IAER,CACDr/D,IAAK,QACLpK,MAAO,WACL,OAAOvF,KAAK8+I,KAAKn6I,OAGlB,CACDgL,IAAK,aACLpK,MAAO,SAAoBnF,GACzB,IAAIU,EAAId,KAAK8+I,KACTt+I,EAAI,EACJwuE,EAAMluE,EAAE6D,KAGZ,IAFAvE,GAAK4uE,EAAIhuE,OAEFF,EAAIA,EAAE6qB,MAAM,CACjB,IAAI9D,EAAM/mB,EAAE6D,KACR09J,EAAKjiK,EAAIynB,EAAI7mB,OAAS6mB,EAAI7mB,OAASZ,EAIvC,GAHIiiK,IAAOx6I,EAAI7mB,OAAQguE,GAAOnnD,EAASmnD,GAAOnnD,EAAI5J,MAAM,EAAG7d,GAGjD,IAFVA,GAAKiiK,GAEQ,CACPA,IAAOx6I,EAAI7mB,UACXR,EACEM,EAAE6qB,KAAM3rB,KAAK8+I,KAAOh+I,EAAE6qB,KAAU3rB,KAAK8+I,KAAO9+I,KAAKunF,KAAO,OAE5DvnF,KAAK8+I,KAAOh+I,EACZA,EAAE6D,KAAOkjB,EAAI5J,MAAMokJ,IAGrB,QAGA7hK,EAIJ,OADAR,KAAKgB,QAAUR,EACRwuE,IAGR,CACDr/D,IAAK,aACLpK,MAAO,SAAoBnF,GACzB,IAAI4uE,EAAMrnD,EAAOm7D,YAAY1iF,GACzBU,EAAId,KAAK8+I,KACTt+I,EAAI,EAIR,IAHAM,EAAE6D,KAAK0I,KAAK2hE,GACZ5uE,GAAKU,EAAE6D,KAAK3D,OAELF,EAAIA,EAAE6qB,MAAM,CACjB,IAAI6C,EAAM1tB,EAAE6D,KACR09J,EAAKjiK,EAAIouB,EAAIxtB,OAASwtB,EAAIxtB,OAASZ,EAIvC,GAHAouB,EAAInhB,KAAK2hE,EAAKA,EAAIhuE,OAASZ,EAAG,EAAGiiK,GAGvB,IAFVjiK,GAAKiiK,GAEQ,CACPA,IAAO7zI,EAAIxtB,UACXR,EACEM,EAAE6qB,KAAM3rB,KAAK8+I,KAAOh+I,EAAE6qB,KAAU3rB,KAAK8+I,KAAO9+I,KAAKunF,KAAO,OAE5DvnF,KAAK8+I,KAAOh+I,EACZA,EAAE6D,KAAO6pB,EAAIvQ,MAAMokJ,IAGrB,QAGA7hK,EAIJ,OADAR,KAAKgB,QAAUR,EACRwuE,IAGR,CACDr/D,IAAK++B,EACLnpC,MAAO,SAAe4C,EAAGzF,GACvB,OAAOqrE,EAAQ/tE,KAnMrB,SAAuB0b,GAAU,IAAK,IAAInb,EAAI,EAAGA,EAAIwG,UAAU/F,OAAQT,IAAK,CAAE,IAAIypI,EAAyB,MAAhBjjI,UAAUxG,GAAawG,UAAUxG,GAAK,GAAQA,EAAI,EAAK+lH,EAAQpwG,OAAO8zH,IAAS,GAAMz+H,SAAQ,SAAUoE,GAAOqxJ,EAAgBtlJ,EAAQ/L,EAAKq6H,EAAOr6H,OAAsBuG,OAAOosJ,0BAA6BpsJ,OAAOqsJ,iBAAiB7mJ,EAAQxF,OAAOosJ,0BAA0Bt4B,IAAmB1jB,EAAQpwG,OAAO8zH,IAASz+H,SAAQ,SAAUoE,GAAOuG,OAAOgd,eAAexX,EAAQ/L,EAAKuG,OAAOid,yBAAyB62G,EAAQr6H,OAAe,OAAO+L,EAmMlf2H,CAAc,GAAI3gB,EAAS,CAE9C6+I,MAAO,EAEPihB,eAAe,UA/LuD9zG,EAAkB6B,EAAYp/B,UAAWq/B,GAAiBC,GAAa/B,EAAkB6B,EAAaE,GAoM3KkoG,EApLT,6DC5BA,aAuDA,SAAS8J,EAAoB1iK,EAAM+rB,GACjC42I,EAAY3iK,EAAM+rB,GAClB62I,EAAY5iK,GAGd,SAAS4iK,EAAY5iK,GACfA,EAAK+3J,iBAAmB/3J,EAAK+3J,eAAe+B,WAC5C95J,EAAKm4J,iBAAmBn4J,EAAKm4J,eAAe2B,WAChD95J,EAAK8E,KAAK,SAsBZ,SAAS69J,EAAY3iK,EAAM+rB,GACzB/rB,EAAK8E,KAAK,QAASinB,GAcrBpsB,EAAOD,QAAU,CACfie,QAnGF,SAAiBoO,EAAK7U,GACpB,IAAIjU,EAAQhD,KAER4iK,EAAoB5iK,KAAKk4J,gBAAkBl4J,KAAKk4J,eAAeC,UAC/D0K,EAAoB7iK,KAAK83J,gBAAkB93J,KAAK83J,eAAeK,UAEnE,OAAIyK,GAAqBC,GACnB5rJ,EACFA,EAAG6U,GACMA,IACJ9rB,KAAK83J,eAEE93J,KAAK83J,eAAesH,eAC9Bp/J,KAAK83J,eAAesH,cAAe,EACnCrvI,EAAQC,SAAS0yI,EAAa1iK,KAAM8rB,IAHpCiE,EAAQC,SAAS0yI,EAAa1iK,KAAM8rB,IAOjC9rB,OAKLA,KAAKk4J,iBACPl4J,KAAKk4J,eAAeC,WAAY,GAI9Bn4J,KAAK83J,iBACP93J,KAAK83J,eAAeK,WAAY,GAGlCn4J,KAAKi6J,SAASnuI,GAAO,MAAM,SAAUA,IAC9B7U,GAAM6U,EACJ9oB,EAAM80J,eAEC90J,EAAM80J,eAAesH,aAI/BrvI,EAAQC,SAAS2yI,EAAa3/J,IAH9BA,EAAM80J,eAAesH,cAAe,EACpCrvI,EAAQC,SAASyyI,EAAqBz/J,EAAO8oB,IAH7CiE,EAAQC,SAASyyI,EAAqBz/J,EAAO8oB,GAOtC7U,GACT8Y,EAAQC,SAAS2yI,EAAa3/J,GAC9BiU,EAAG6U,IAEHiE,EAAQC,SAAS2yI,EAAa3/J,MAI3BhD,OAkDP66J,UApCF,WACM76J,KAAKk4J,iBACPl4J,KAAKk4J,eAAeC,WAAY,EAChCn4J,KAAKk4J,eAAesB,SAAU,EAC9Bx5J,KAAKk4J,eAAexgB,OAAQ,EAC5B13I,KAAKk4J,eAAe/gG,YAAa,GAG/Bn3D,KAAK83J,iBACP93J,KAAK83J,eAAeK,WAAY,EAChCn4J,KAAK83J,eAAepgB,OAAQ,EAC5B13I,KAAK83J,eAAe6G,QAAS,EAC7B3+J,KAAK83J,eAAe4G,aAAc,EAClC1+J,KAAK83J,eAAe6H,aAAc,EAClC3/J,KAAK83J,eAAe4D,UAAW,EAC/B17J,KAAK83J,eAAesH,cAAe,IAsBrCjG,eAdF,SAAwBv2J,EAAQkpB,GAM9B,IAAIw0I,EAAS19J,EAAOs1J,eAChBuD,EAAS74J,EAAOk1J,eAChBwI,GAAUA,EAAOxG,aAAe2B,GAAUA,EAAO3B,YAAal3J,EAAO8a,QAAQoO,GAAUlpB,EAAOiC,KAAK,QAASinB,sEC/FlH,aAEA,IAAIg3I,EAA6BriK,EAAQ,mBAAmB+mJ,MAAMsb,2BAgBlE,SAAS9N,KAmFTt1J,EAAOD,QA7EP,SAASsjK,EAAIngK,EAAQ2uD,EAAMl/C,GACzB,GAAoB,mBAATk/C,EAAqB,OAAOwxG,EAAIngK,EAAQ,KAAM2uD,GACpDA,IAAMA,EAAO,IAClBl/C,EAvBF,SAAcA,GACZ,IAAI09G,GAAS,EACb,OAAO,WACL,IAAIA,EAAJ,CACAA,GAAS,EAET,IAAK,IAAIl4G,EAAO9Q,UAAU/F,OAAQ45D,EAAO,IAAIpqD,MAAMqH,GAAOtH,EAAO,EAAGA,EAAOsH,EAAMtH,IAC/EqqD,EAAKrqD,GAAQxJ,UAAUwJ,GAGzB8B,EAASgQ,MAAMriB,KAAM46D,KAaZmrD,CAAK1zG,GAAY2iJ,GAC5B,IAAI4C,EAAWrmG,EAAKqmG,WAA8B,IAAlBrmG,EAAKqmG,UAAsBh1J,EAAOg1J,SAC9DvkI,EAAWk+B,EAAKl+B,WAA8B,IAAlBk+B,EAAKl+B,UAAsBzwB,EAAOywB,SAE9D2vI,EAAiB,WACdpgK,EAAOywB,UAAUipI,KAGpB2G,EAAgBrgK,EAAOk1J,gBAAkBl1J,EAAOk1J,eAAe4D,SAE/DY,EAAW,WACbjpI,GAAW,EACX4vI,GAAgB,EACXrL,GAAUvlJ,EAAStR,KAAK6B,IAG3BsgK,EAAgBtgK,EAAOs1J,gBAAkBt1J,EAAOs1J,eAAe/gG,WAE/D0gG,EAAQ,WACVD,GAAW,EACXsL,GAAgB,EACX7vI,GAAUhhB,EAAStR,KAAK6B,IAG3BugI,EAAU,SAAiBr3G,GAC7BzZ,EAAStR,KAAK6B,EAAQkpB,IAGpBuwI,EAAU,WACZ,IAAIvwI,EAEJ,OAAI8rI,IAAasL,GACVtgK,EAAOs1J,gBAAmBt1J,EAAOs1J,eAAexgB,QAAO5rH,EAAM,IAAIg3I,GAC/DzwJ,EAAStR,KAAK6B,EAAQkpB,IAG3BuH,IAAa4vI,GACVrgK,EAAOk1J,gBAAmBl1J,EAAOk1J,eAAepgB,QAAO5rH,EAAM,IAAIg3I,GAC/DzwJ,EAAStR,KAAK6B,EAAQkpB,SAF/B,GAMEq3I,EAAY,WACdvgK,EAAOwgK,IAAI1+J,GAAG,SAAU43J,IAiB1B,OAnEF,SAAmB15J,GACjB,OAAOA,EAAOygK,WAAqC,mBAAjBzgK,EAAO0gK,MAoDrCC,CAAU3gK,GAIHywB,IAAazwB,EAAOk1J,iBAE7Bl1J,EAAO8B,GAAG,MAAOs+J,GACjBpgK,EAAO8B,GAAG,QAASs+J,KANnBpgK,EAAO8B,GAAG,WAAY43J,GACtB15J,EAAO8B,GAAG,QAAS23J,GACfz5J,EAAOwgK,IAAKD,IAAiBvgK,EAAO8B,GAAG,UAAWy+J,IAOxDvgK,EAAO8B,GAAG,MAAOmzJ,GACjBj1J,EAAO8B,GAAG,SAAU43J,IACD,IAAf/qG,EAAKzvD,OAAiBc,EAAO8B,GAAG,QAASy+H,GAC7CvgI,EAAO8B,GAAG,QAAS23J,GACZ,WACLz5J,EAAOoiH,eAAe,WAAYs3C,GAClC15J,EAAOoiH,eAAe,QAASq3C,GAC/Bz5J,EAAOoiH,eAAe,UAAWm+C,GAC7BvgK,EAAOwgK,KAAKxgK,EAAOwgK,IAAIp+C,eAAe,SAAUs3C,GACpD15J,EAAOoiH,eAAe,MAAOg+C,GAC7BpgK,EAAOoiH,eAAe,QAASg+C,GAC/BpgK,EAAOoiH,eAAe,SAAUs3C,GAChC15J,EAAOoiH,eAAe,MAAO6yC,GAC7Bj1J,EAAOoiH,eAAe,QAASme,GAC/BvgI,EAAOoiH,eAAe,QAASq3C,iECnGnC38J,EAAOD,QAAU,WACf,MAAM,IAAImB,MAAM,4ECClB,aAEA,IAAImiK,EAWJ,IAAIjK,EAAiBr4J,EAAQ,mBAAmB+mJ,MAC5Cgc,EAAmB1K,EAAe0K,iBAClClF,EAAuBxF,EAAewF,qBAE1C,SAAStJ,EAAKlpI,GAEZ,GAAIA,EAAK,MAAMA,EAOjB,SAAS23I,EAAU7gK,EAAQ42J,EAASsF,EAASzsJ,GAC3CA,EAvBF,SAAcA,GACZ,IAAI09G,GAAS,EACb,OAAO,WACDA,IACJA,GAAS,EACT19G,EAASgQ,WAAM,EAAQtb,aAkBdg/G,CAAK1zG,GAChB,IAAIqxJ,GAAS,EACb9gK,EAAO8B,GAAG,SAAS,WACjBg/J,GAAS,UAECp/J,IAARy+J,IAAmBA,EAAMtiK,EAAQ,oBACrCsiK,EAAIngK,EAAQ,CACVg1J,SAAU4B,EACVnmI,SAAUyrI,IACT,SAAUhzI,GACX,GAAIA,EAAK,OAAOzZ,EAASyZ,GACzB43I,GAAS,EACTrxJ,OAEF,IAAI8lJ,GAAY,EAChB,OAAO,SAAUrsI,GACf,IAAI43I,IACAvL,EAGJ,OAFAA,GAAY,EAvBhB,SAAmBv1J,GACjB,OAAOA,EAAOygK,WAAqC,mBAAjBzgK,EAAO0gK,MAwBnCC,CAAU3gK,GAAgBA,EAAO0gK,QACP,mBAAnB1gK,EAAO8a,QAA+B9a,EAAO8a,eACxDrL,EAASyZ,GAAO,IAAIwyI,EAAqB,UAI7C,SAASv9J,EAAKoiH,GACZA,IAGF,SAASr+G,EAAKgjB,EAAM+E,GAClB,OAAO/E,EAAKhjB,KAAK+nB,GAGnB,SAAS82I,EAAYC,GACnB,OAAKA,EAAQ5iK,OAC8B,mBAAhC4iK,EAAQA,EAAQ5iK,OAAS,GAA0Bg0J,EACvD4O,EAAQzvJ,MAFa6gJ,EAgC9Bt1J,EAAOD,QA3BP,WACE,IAAK,IAAIoY,EAAO9Q,UAAU/F,OAAQ4iK,EAAU,IAAIpzJ,MAAMqH,GAAOtH,EAAO,EAAGA,EAAOsH,EAAMtH,IAClFqzJ,EAAQrzJ,GAAQxJ,UAAUwJ,GAG5B,IAOIzO,EAPAuQ,EAAWsxJ,EAAYC,GAG3B,GAFIpzJ,MAAMwU,QAAQ4+I,EAAQ,MAAKA,EAAUA,EAAQ,IAE7CA,EAAQ5iK,OAAS,EACnB,MAAM,IAAIwiK,EAAiB,WAI7B,IAAIK,EAAWD,EAAQrgK,KAAI,SAAUX,EAAQrC,GAC3C,IAAIi5J,EAAUj5J,EAAIqjK,EAAQ5iK,OAAS,EAEnC,OAAOyiK,EAAU7gK,EAAQ42J,EADXj5J,EAAI,GACyB,SAAUurB,GAC9ChqB,IAAOA,EAAQgqB,GAChBA,GAAK+3I,EAASt4J,QAAQxK,GACtBy4J,IACJqK,EAASt4J,QAAQxK,GACjBsR,EAASvQ,UAGb,OAAO8hK,EAAQ9/J,OAAOgB,yEC7FxB,aAEA,IAAIg/J,EAAwBrjK,EAAQ,mBAAmB+mJ,MAAMsc,sBAsB7DpkK,EAAOD,QAAU,CACfo5J,iBAjBF,SAA0B15I,EAAOzc,EAASqhK,EAAW1K,GACnD,IAAI2K,EALN,SAA2BthK,EAAS22J,EAAU0K,GAC5C,OAAgC,MAAzBrhK,EAAQs1J,cAAwBt1J,EAAQs1J,cAAgBqB,EAAW32J,EAAQqhK,GAAa,KAIrFE,CAAkBvhK,EAAS22J,EAAU0K,GAE/C,GAAW,MAAPC,EAAa,CACf,IAAM1+I,SAAS0+I,IAAQx8J,KAAKI,MAAMo8J,KAASA,GAAQA,EAAM,EAEvD,MAAM,IAAIF,EADCzK,EAAW0K,EAAY,gBACIC,GAGxC,OAAOx8J,KAAKI,MAAMo8J,GAIpB,OAAO7kJ,EAAMwxC,WAAa,GAAK,oECrBjCjxD,EAAOD,QAAUgB,EAAQ,UAAUu2B,+DCAnCv3B,EAAUC,EAAOD,QAAUgB,EAAQ,8BAC3BgtB,OAAShuB,EACjBA,EAAQs7D,SAAWt7D,EACnBA,EAAQu2D,SAAWv1D,EAAQ,6BAC3BhB,EAAQwvB,OAASxuB,EAAQ,2BACzBhB,EAAQ2xD,UAAY3wD,EAAQ,8BAC5BhB,EAAQorB,YAAcpqB,EAAQ,gCAC9BhB,EAAQi8J,SAAWj7J,EAAQ,2CAC3BhB,EAAQykK,SAAWzjK,EAAQ,wTCR3B,aACA,IAAIknB,EAASlnB,EAAQ,UAAUknB,OAC3BqH,EAAWvuB,EAAQ,YACnBqmH,EAAWrmH,EAAQ,aAEnBs1I,EAAU,IAAIvlI,MAAM,IAEpBm7G,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,IAGhDw4C,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,IAGlD12C,EAAK,CAAC,EAAY,WAAY,WAAY,WAAY,YACtD22C,EAAK,CAAC,WAAY,WAAY,WAAY,WAAY,GAE1D,SAASxjE,IACPgmB,EAAS/lH,KAAKf,KAAM,IAGpBA,KAAKsxD,GAAK,WACVtxD,KAAKg2I,GAAK,WACVh2I,KAAKi2I,GAAK,WACVj2I,KAAKk2I,GAAK,UACVl2I,KAAKukK,GAAK,WAwFZ,SAASpuB,EAAMzjI,EAAGtS,GAChB,OAAQsS,GAAKtS,EAAMsS,IAAO,GAAKtS,EAGjC,SAASokK,EAAK7jK,EAAG+V,EAAGlW,EAAGgzB,EAAGrzB,EAAG+kB,EAAG6vC,EAAGhkD,GACjC,OAAQolI,EAAMx1I,GAAK+V,EAAIlW,EAAIgzB,GAAKtO,EAAI6vC,EAAK,EAAGhkD,GAAK5Q,EAAK,EAGxD,SAASskK,EAAK9jK,EAAG+V,EAAGlW,EAAGgzB,EAAGrzB,EAAG+kB,EAAG6vC,EAAGhkD,GACjC,OAAQolI,EAAMx1I,GAAM+V,EAAIlW,GAAQkW,EAAK8c,GAAMtO,EAAI6vC,EAAK,EAAGhkD,GAAK5Q,EAAK,EAGnE,SAASukK,EAAK/jK,EAAG+V,EAAGlW,EAAGgzB,EAAGrzB,EAAG+kB,EAAG6vC,EAAGhkD,GACjC,OAAQolI,EAAMx1I,IAAM+V,GAAMlW,GAAMgzB,GAAKtO,EAAI6vC,EAAK,EAAGhkD,GAAK5Q,EAAK,EAG7D,SAASwkK,EAAKhkK,EAAG+V,EAAGlW,EAAGgzB,EAAGrzB,EAAG+kB,EAAG6vC,EAAGhkD,GACjC,OAAQolI,EAAMx1I,GAAM+V,EAAI8c,EAAMhzB,GAAMgzB,GAAOtO,EAAI6vC,EAAK,EAAGhkD,GAAK5Q,EAAK,EAGnE,SAASykK,EAAKjkK,EAAG+V,EAAGlW,EAAGgzB,EAAGrzB,EAAG+kB,EAAG6vC,EAAGhkD,GACjC,OAAQolI,EAAMx1I,GAAK+V,GAAKlW,GAAMgzB,IAAOtO,EAAI6vC,EAAK,EAAGhkD,GAAK5Q,EAAK,EA1G7D6uB,EAAS8xE,EAAWgmB,GAEpBhmB,EAAU3vE,UAAU82D,QAAU,WAE5B,IADA,IAAI1b,EAAQwpE,EACHn7H,EAAI,EAAGA,EAAI,KAAMA,EAAG2xD,EAAM3xD,GAAK5a,KAAK+mH,OAAO/qB,YAAgB,EAAJphF,GAehE,IAbA,IAAIoyG,EAAe,EAAVhtH,KAAKsxD,GACV45B,EAAe,EAAVlrF,KAAKg2I,GACV7oB,EAAe,EAAVntH,KAAKi2I,GACV7oB,EAAe,EAAVptH,KAAKk2I,GACV5oB,EAAe,EAAVttH,KAAKukK,GAEVM,EAAe,EAAV7kK,KAAKsxD,GACV57C,EAAe,EAAV1V,KAAKg2I,GACV8uB,EAAe,EAAV9kK,KAAKi2I,GACV8uB,EAAe,EAAV/kK,KAAKk2I,GACVvwB,EAAe,EAAV3lH,KAAKukK,GAGLhkK,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,CAC9B,IAAIkV,EACAisC,EACAnhD,EAAI,IACNkV,EAAK+uJ,EAAIx3C,EAAI9hC,EAAIiiC,EAAIC,EAAIE,EAAI/gD,EAAMo/C,EAAGprH,IAAKotH,EAAG,GAAIy2C,EAAG7jK,IACrDmhD,EAAKkjH,EAAIC,EAAInvJ,EAAIovJ,EAAIC,EAAIp/C,EAAIp5C,EAAM43F,EAAG5jK,IAAK+jK,EAAG,GAAID,EAAG9jK,KAC5CA,EAAI,IACbkV,EAAKgvJ,EAAIz3C,EAAI9hC,EAAIiiC,EAAIC,EAAIE,EAAI/gD,EAAMo/C,EAAGprH,IAAKotH,EAAG,GAAIy2C,EAAG7jK,IACrDmhD,EAAKijH,EAAIE,EAAInvJ,EAAIovJ,EAAIC,EAAIp/C,EAAIp5C,EAAM43F,EAAG5jK,IAAK+jK,EAAG,GAAID,EAAG9jK,KAC5CA,EAAI,IACbkV,EAAKivJ,EAAI13C,EAAI9hC,EAAIiiC,EAAIC,EAAIE,EAAI/gD,EAAMo/C,EAAGprH,IAAKotH,EAAG,GAAIy2C,EAAG7jK,IACrDmhD,EAAKgjH,EAAIG,EAAInvJ,EAAIovJ,EAAIC,EAAIp/C,EAAIp5C,EAAM43F,EAAG5jK,IAAK+jK,EAAG,GAAID,EAAG9jK,KAC5CA,EAAI,IACbkV,EAAKkvJ,EAAI33C,EAAI9hC,EAAIiiC,EAAIC,EAAIE,EAAI/gD,EAAMo/C,EAAGprH,IAAKotH,EAAG,GAAIy2C,EAAG7jK,IACrDmhD,EAAK+iH,EAAII,EAAInvJ,EAAIovJ,EAAIC,EAAIp/C,EAAIp5C,EAAM43F,EAAG5jK,IAAK+jK,EAAG,GAAID,EAAG9jK,MAErDkV,EAAKmvJ,EAAI53C,EAAI9hC,EAAIiiC,EAAIC,EAAIE,EAAI/gD,EAAMo/C,EAAGprH,IAAKotH,EAAG,GAAIy2C,EAAG7jK,IACrDmhD,EAAK8iH,EAAIK,EAAInvJ,EAAIovJ,EAAIC,EAAIp/C,EAAIp5C,EAAM43F,EAAG5jK,IAAK+jK,EAAG,GAAID,EAAG9jK,KAGvDysH,EAAKM,EACLA,EAAKF,EACLA,EAAK+oB,EAAKhpB,EAAI,IACdA,EAAKjiC,EACLA,EAAKz1E,EAELovJ,EAAKl/C,EACLA,EAAKo/C,EACLA,EAAK5uB,EAAK2uB,EAAI,IACdA,EAAKpvJ,EACLA,EAAKgsC,EAIP,IAAIrhD,EAAKL,KAAKg2I,GAAK7oB,EAAK43C,EAAM,EAC9B/kK,KAAKg2I,GAAMh2I,KAAKi2I,GAAK7oB,EAAKzH,EAAM,EAChC3lH,KAAKi2I,GAAMj2I,KAAKk2I,GAAK5oB,EAAKu3C,EAAM,EAChC7kK,KAAKk2I,GAAMl2I,KAAKukK,GAAKv3C,EAAKt3G,EAAM,EAChC1V,KAAKukK,GAAMvkK,KAAKsxD,GAAK45B,EAAK45E,EAAM,EAChC9kK,KAAKsxD,GAAKjxD,GAGZygG,EAAU3vE,UAAUm2F,QAAU,WAE5BtnH,KAAK+mH,OAAO/mH,KAAKinH,gBAAkB,IAC/BjnH,KAAKinH,aAAe,KACtBjnH,KAAK+mH,OAAOp9G,KAAK,EAAG3J,KAAKinH,aAAc,IACvCjnH,KAAKioF,UACLjoF,KAAKinH,aAAe,GAGtBjnH,KAAK+mH,OAAOp9G,KAAK,EAAG3J,KAAKinH,aAAc,IACvCjnH,KAAK+mH,OAAOr8F,cAAc1qB,KAAKknH,QAAQ,GAAI,IAC3ClnH,KAAK+mH,OAAOr8F,cAAc1qB,KAAKknH,QAAQ,GAAI,IAC3ClnH,KAAKioF,UAGL,IAAIlgE,EAASJ,EAAO8C,MAAQ9C,EAAO8C,MAAM,IAAM,IAAI9C,EAAO,IAM1D,OALAI,EAAO+0E,aAAa98F,KAAKsxD,GAAI,GAC7BvpC,EAAO+0E,aAAa98F,KAAKg2I,GAAI,GAC7BjuH,EAAO+0E,aAAa98F,KAAKi2I,GAAI,GAC7BluH,EAAO+0E,aAAa98F,KAAKk2I,GAAI,IAC7BnuH,EAAO+0E,aAAa98F,KAAKukK,GAAI,IACtBx8I,GA2BTroB,EAAOD,QAAUqhG,gFCjKjB,IAAI/4E,EAAStnB,EAAQ,UACjBknB,EAASI,EAAOJ,OAGpB,SAAS+tE,EAAW3yE,EAAK4yE,GACvB,IAAK,IAAIhmF,KAAOoT,EACd4yE,EAAIhmF,GAAOoT,EAAIpT,GAWnB,SAASimF,EAAYxxB,EAAKyxB,EAAkB70F,GAC1C,OAAO2mB,EAAOy8C,EAAKyxB,EAAkB70F,GATnC2mB,EAAOG,MAAQH,EAAO8C,OAAS9C,EAAOm7D,aAAen7D,EAAOmuE,gBAC9Dp2F,EAAOD,QAAUsoB,GAGjB2tE,EAAU3tE,EAAQtoB,GAClBA,EAAQkoB,OAASiuE,GAQnBF,EAAU/tE,EAAQiuE,GAElBA,EAAW9tE,KAAO,SAAUs8C,EAAKyxB,EAAkB70F,GACjD,GAAmB,iBAARojE,EACT,MAAM,IAAI/T,UAAU,iCAEtB,OAAO1oC,EAAOy8C,EAAKyxB,EAAkB70F,IAGvC40F,EAAWnrE,MAAQ,SAAUE,EAAMhhB,EAAMlD,GACvC,GAAoB,iBAATkkB,EACT,MAAM,IAAI0lC,UAAU,6BAEtB,IAAI7hC,EAAM7G,EAAOgD,GAUjB,YATarmB,IAATqF,EACsB,iBAAblD,EACT+nB,EAAI7kB,KAAKA,EAAMlD,GAEf+nB,EAAI7kB,KAAKA,GAGX6kB,EAAI7kB,KAAK,GAEJ6kB,GAGTonE,EAAW9S,YAAc,SAAUn4D,GACjC,GAAoB,iBAATA,EACT,MAAM,IAAI0lC,UAAU,6BAEtB,OAAO1oC,EAAOgD,IAGhBirE,EAAWE,gBAAkB,SAAUnrE,GACrC,GAAoB,iBAATA,EACT,MAAM,IAAI0lC,UAAU,6BAEtB,OAAOtoC,EAAOguE,WAAWprE,qDC1D3B,kPAEA,IAKIhb,EALAoY,EAAStnB,EAAQ,UACjBknB,EAASI,EAAOJ,OAEhBq9I,EAAQ,GAIZ,IAAKr1J,KAAOoY,EACLA,EAAO/W,eAAerB,IACf,eAARA,GAAgC,WAARA,IAC5Bq1J,EAAMr1J,GAAOoY,EAAOpY,IAGtB,IAAIs1J,EAAQD,EAAMr9I,OAAS,GAC3B,IAAKhY,KAAOgY,EACLA,EAAO3W,eAAerB,IACf,gBAARA,GAAiC,oBAARA,IAC7Bs1J,EAAMt1J,GAAOgY,EAAOhY,IAqCtB,GAlCAq1J,EAAMr9I,OAAOwJ,UAAYxJ,EAAOwJ,UAE3B8zI,EAAMn9I,MAAQm9I,EAAMn9I,OAAS26D,WAAW36D,OAC3Cm9I,EAAMn9I,KAAO,SAAUviB,EAAOswF,EAAkB70F,GAC9C,GAAqB,iBAAVuE,EACT,MAAM,IAAI8qD,UAAU,kEAAAzqD,EAA2EL,IAEjG,GAAIA,QAAiC,IAAjBA,EAAMvE,OACxB,MAAM,IAAIqvD,UAAU,kHAAAzqD,EAA2HL,IAEjJ,OAAOoiB,EAAOpiB,EAAOswF,EAAkB70F,KAItCikK,EAAMx6I,QACTw6I,EAAMx6I,MAAQ,SAAUE,EAAMhhB,EAAMlD,GAClC,GAAoB,iBAATkkB,EACT,MAAM,IAAI0lC,UAAU,6DAAAzqD,EAAsE+kB,IAE5F,GAAIA,EAAO,GAAKA,GAAQ,GAAK,GAAK,IAChC,MAAM,IAAIwrE,WAAW,cAAgBxrE,EAAO,kCAE9C,IAAI6D,EAAM7G,EAAOgD,GAQjB,OAPKhhB,GAAwB,IAAhBA,EAAK3I,OAEa,iBAAbyF,EAChB+nB,EAAI7kB,KAAKA,EAAMlD,GAEf+nB,EAAI7kB,KAAKA,GAJT6kB,EAAI7kB,KAAK,GAMJ6kB,KAINw2I,EAAME,iBACT,IACEF,EAAME,iBAAmBn1I,EAAQ07G,QAAQ,UAAUy5B,iBACnD,MAAO/kK,IAMN6kK,EAAMvwI,YACTuwI,EAAMvwI,UAAY,CAChB0wI,WAAYH,EAAMprE,YAEhBorE,EAAME,mBACRF,EAAMvwI,UAAU2wI,kBAAoBJ,EAAME,mBAI9CxlK,EAAOD,QAAUulK,8EC5EjB,aAEA,SAAAK,EAAA/kK,EAAAglK,GAAA,IAAAtxG,EAAA,GAAA,oBAAApoC,QAAA,MAAAtrB,EAAAsrB,OAAApB,UAAA,CAAA,GAAAha,MAAAwU,QAAA1kB,KAAA0zD,EAAAuxG,EAAAjlK,KAAAglK,GAAAhlK,GAAA,iBAAAA,EAAAU,OAAA,CAAAgzD,IAAA1zD,EAAA0zD,GAAA,IAAAzzD,EAAA,EAAAwiH,EAAA,aAAA,MAAA,CAAAhyG,EAAAgyG,EAAA3iH,EAAA,WAAA,OAAAG,GAAAD,EAAAU,OAAA,CAAAmrB,MAAA,GAAA,CAAAA,MAAA,EAAA5mB,MAAAjF,EAAAC,OAAAJ,EAAA,SAAAokK,GAAA,MAAAA,GAAA/kK,EAAAujH,GAAA,MAAA,IAAA1yD,UAAA,yIAAA,IAAAvkC,EAAA05I,GAAA,EAAAC,GAAA,EAAA,MAAA,CAAA10J,EAAA,WAAAijD,EAAA1zD,EAAAsrB,OAAApB,aAAApqB,EAAA,WAAA,IAAAqwG,EAAAz8C,EAAAroC,OAAA,OAAA65I,EAAA/0D,EAAAtkF,KAAAskF,GAAAtwG,EAAA,SAAAulK,GAAAD,GAAA,EAAA35I,EAAA45I,GAAAlmK,EAAA,WAAA,IAAAgmK,GAAA,MAAAxxG,EAAA3nC,QAAA2nC,EAAA3nC,SAAA,QAAA,GAAAo5I,EAAA,MAAA35I,KAEA,SAAAlmB,EAAAyrB,GAAA,OAAAzrB,EAAA,mBAAAgmB,QAAA,iBAAAA,OAAApB,SAAA,SAAA6G,GAAA,cAAAA,GAAA,SAAAA,GAAA,OAAAA,GAAA,mBAAAzF,QAAAyF,EAAA1N,cAAAiI,QAAAyF,IAAAzF,OAAAuF,UAAA,gBAAAE,IAAAA,GAIA,SAAAq9B,EAAAhzC,EAAAizC,GAAA,IAAA,IAAApuD,EAAA,EAAAA,EAAAouD,EAAA3tD,OAAAT,IAAA,CAAA,IAAAquD,EAAAD,EAAApuD,GAAAquD,EAAAx7B,WAAAw7B,EAAAx7B,aAAA,EAAAw7B,EAAAt7B,cAAA,EAAA,UAAAs7B,IAAAA,EAAAv7B,UAAA,GAAAnd,OAAAgd,eAAAxX,EAAAkzC,EAAAj/C,IAAAi/C,IAIA,SAAAjsC,EAAAm/D,GAAA,OAQA,SAAAA,GAAA,GAAAtxE,MAAAwU,QAAA88D,GAAA,OAAA6jF,EAAA7jF,GARA8jF,CAAA9jF,IAMA,SAAAu5B,GAAA,GAAA,oBAAAzvF,QAAAA,OAAApB,YAAAtU,OAAAmlG,GAAA,OAAA7qG,MAAAsX,KAAAuzF,GANAwqD,CAAA/jF,IAAAyjF,EAAAzjF,IAEA,WAAA,MAAA,IAAAzxB,UAAA,wIAFAy1G,GAIA,SAAAP,EAAAjlK,EAAAylK,GAAA,GAAAzlK,EAAA,CAAA,GAAA,iBAAAA,EAAA,OAAAqlK,EAAArlK,EAAAylK,GAAA,IAAA3lK,EAAA8V,OAAAib,UAAAjmB,SAAAnK,KAAAT,GAAA2d,MAAA,GAAA,GAAA,MAAA,WAAA7d,GAAAE,EAAAqjB,cAAAvjB,EAAAE,EAAAqjB,YAAArZ,MAAA,QAAAlK,GAAA,QAAAA,EAAAoQ,MAAAsX,KAAAxnB,GAAA,cAAAF,GAAA,2CAAA6T,KAAA7T,GAAAulK,EAAArlK,EAAAylK,QAAA,GAMA,SAAAJ,EAAA7jF,EAAAt/C,IAAA,MAAAA,GAAAA,EAAAs/C,EAAA9gF,UAAAwhC,EAAAs/C,EAAA9gF,QAAA,IAAA,IAAAT,EAAA,EAAAylK,EAAA,IAAAx1J,MAAAgyB,GAAAjiC,EAAAiiC,EAAAjiC,IAAAylK,EAAAzlK,GAAAuhF,EAAAvhF,GAAA,OAAAylK,EAEA9vJ,OAAAgd,eAAAzzB,EAAA,aAAA,CACA8F,OAAA,IAGA,IAAA0gK,EAAAxlK,EAAA,wBAEAylK,EAAAzlK,EAAA,wBAEA0lK,EAAA1lK,EAAA,0BAEA2lK,EAAAH,EAAAG,IACAC,EAAAJ,EAAAK,OACAC,EAAAN,EAAAM,gBACAC,EAAAP,EAAAO,WACAC,EAAAR,EAAAQ,OACAC,EAAAT,EAAAS,QACAC,EAAAT,EAAAI,OACAM,EAAAT,EAAAS,kBACAC,EAAAV,EAAAU,aACAC,EAAAX,EAAAW,WACAC,EAAA,uCACAC,EAAA,gCACAC,EAAA,CAEAl4G,UAAA,KACAh6B,IAAAgyI,EACA/mI,MAAAgnI,GAEAE,EAAA,CAEAn4G,UAAA,KACAo4G,IAAA,IACA9pF,GAAA,IACAI,GAAA,IACA2pF,KAAA,IACAC,KAAA,KAyGAC,EAAA,GAEAC,EAAA,GAMAxoG,EAAA,SAAAv+D,GACA,OAhBA,KAgBAA,GAdA,KAcAA,GAGAgnK,EAAA,CAnBA,GAEA,IAkBAC,EAAA,GAAA9kK,OAAA6kK,EAAA,CAVA,GAFA,KAaAE,EAAA,GAAA/kK,OAAA6kK,EAAA,CAfA,GAKA,KAWAG,EAAA,CAAAL,EAAAC,GAAA5kK,OAAAggB,EAAA8jJ,IACAmB,EAAA,GAAAjlK,OAAAggB,EAAA8jJ,GAAA,CAfA,GAPA,GAKA,KAmBA,SAAAoB,EAAAzoI,EAAAgoF,EAAA98E,GACA,OAAA88E,GACA,IAAA,MACA98E,IAAAy8H,GACA3nI,EAAAwjC,KAAA,+BAAAjgE,OAAAokK,EAAA,MAGA,MAEA,IAAA,QACAz8H,IAAA08H,GACA5nI,EAAAwjC,KAAA,iCAAAjgE,OAAAqkK,EAAA,MAQA,OAAA18H,GACA,KAAA08H,EACA5nI,EAAAwjC,KAAA,KAAAwkD,EAAA,2CAAAzkH,OAAA2nC,EAAA,KAAA,qDAAA3nC,OAAAqkK,EAAA,MACA,MAEA,KAAAD,EACA,OAAA3/C,GACA,IAAA,MAEA,MAEA,IAAA,GACAhoF,EAAAwjC,KAAA,2CAAAjgE,OAAA2nC,EAAA,MACA,MAEA,QACAlL,EAAAwjC,KAAA,yDAgBA,IAAAklG,EAAA,SAAAx9J,GACA,OAAAw8J,EAAA7yJ,KAAA3J,IAGAy9J,EAAA,SAAAz9J,GACA,OAAAo8J,EAAAzyJ,KAAA3J,IAUA7K,EAAAuoK,OAAA,CAAA,UAAA,OAAA,wBAAA,UAAA,UAAA,eAAA,YAAA,UAAA,WAAA,QAAA,QAAA,MAAA,SACA,IAAAC,EAAA,CACAC,QAAA,iBACA1iK,KAAA,cACA2iK,sBAAA,YACAC,QAAA,iBACAx8J,QAAA,iBACAy8J,aAAA,sBACAC,UAAA,mBACAC,QAAA,iBACAC,SAAA,kBACAC,MAAA,eACA3mK,MAAA,eACAyE,IAAA,aACAmiK,MAAA,gBAGA99I,EAAA,WAIA,SAAAA,EAAA4sH,IAvQA,SAAA9mF,EAAAH,GAAA,KAAAG,aAAAH,GAAA,MAAA,IAAAF,UAAA,qCAwQA9tD,CAAAvC,KAAA4qB,GAEA5qB,KAAAw3I,IAAAA,MAAAA,EAAAA,EAAA,GACAx3I,KAAA2oK,cAAA3oK,KAAAw3I,IAAAoxB,SACA,IAAAC,EAAA7oK,KAAA6oK,WAAA7oK,KAAAw3I,IAAAx3G,MAIA,GAHAhgC,KAAA8oK,eAAA,IAAA9oK,KAAAw3I,IAAAzmH,SACA/wB,KAAAomI,SAAApmI,KAAAw3I,IAAApR,SAEAyiC,EAAA,CAQA7oK,KAAA+oK,eAAAnC,EACA5mK,KAAAgpK,UAAAnC,EACA7mK,KAAA+nK,OAAAD,EAEA9nK,KAAAipK,eAAAjpK,KAAAkpK,iBAEAlpK,KAAAmpK,WAAAnpK,KAAAopK,aAEAppK,KAAAqpK,GAAAnzJ,OAAA2D,OAAA,CACAk1C,UAAA,MACAk4G,GACA,IAAAqC,EAAAtpK,KAAAw3I,IAAA+xB,qBAEA,MAAAD,KAzEA,SAAAlqI,EAAAoqI,GACA,IAAA,IAAAtuJ,EAAA,EAAAuuJ,EAAAvzJ,OAAAC,KAAAqzJ,GAAAtuJ,EAAAuuJ,EAAAzoK,OAAAka,IAAA,CACA,IAAA8tF,EAAAygE,EAAAvuJ,GACA2sJ,EAAAzoI,EAAA4pE,EAAAwgE,EAAAxgE,KAuEA0gE,CAAA1pK,KAAAspK,GACApzJ,OAAA2D,OAAA7Z,KAAAqpK,GAAAC,SAGAtpK,KAAA+oK,eAAAxC,EACAvmK,KAAAgpK,UAAAxC,EACAxmK,KAAA+nK,OAAAA,EAEA/nK,KAAAipK,eAAAjpK,KAAA2pK,oBAEA3pK,KAAAmpK,WAAAnpK,KAAA4pK,gBAQA5pK,KAAA6pK,WAAA,CAEA7pK,KAAA8pK,OAAA9pK,KAAA+pK,iBAAA/pK,KAAAgqK,SAAAhqK,KAAAiqK,cAAAjqK,KAAAkqK,KAAAlqK,KAAAmqK,WAAAnqK,KAAAoqK,aAAApqK,KAAAqqK,iBAAArqK,KAAAsqK,YAAAtqK,KAAAuqK,kBAAAvqK,KAAAwqK,iBAAAxqK,KAAAyqK,OAAAzqK,KAAA0qK,aAAA1qK,KAAA2qK,MAAA3qK,KAAA4qK,QAAA5qK,KAAA6qK,UAAA7qK,KAAA8qK,cAAA9qK,KAAA+qK,SAAA/qK,KAAAgrK,eAAAhrK,KAAAirK,cAAAjrK,KAAAkrK,OAAAlrK,KAAAmrK,aAAAnrK,KAAAorK,cAAAprK,KAAAqrK,aAAArrK,KAAAsrK,QAAAtrK,KAAAurK,QAAAvrK,KAAAwrK,UAAAxrK,KAAAyrK,kBAAAzrK,KAAA0rK,aAAA1rK,KAAA2rK,WAAA3rK,KAAA4rK,mBAAA5rK,KAAA6rK,cAAA7rK,KAAA8rK,kBAAA9rK,KAAA+rK,eAAA/rK,KAAAgsK,SAAAhsK,KAAAisK,cAAAjsK,KAAAksK,QAAAlsK,KAAAmsK,YAAAnsK,KAAAosK,oBAAApsK,KAAAqsK,aAAArsK,KAAAssK,mBAAAtsK,KAAAusK,mBAAAvsK,KAAAwsK,qBAAAxsK,KAAAysK,UAAAzsK,KAAA0sK,mBAEA1sK,KAAAikE,QAxTA,IAAA1T,EAAAC,EAAAC,EAy/EA,OAz/EAF,EAgUA3lC,GAhUA4lC,EAgUA,CAAA,CACA7gD,IAAA,QACApK,MAAA,WACA,IAAA+rD,EAEAtxD,KAAA2sK,aAAA,GACA3sK,KAAAwF,KAAA,GACAxF,KAAAsK,KAAA,GACAtK,KAAA4sK,SAAA,GACA5sK,KAAA0hE,OAAA,GACA1hE,KAAAsvE,EAAA,KACAtvE,KAAAijE,KAAA,GACAjjE,KAAAw+B,IAAA,KACAx+B,KAAA6sK,MAAA,KACA7sK,KAAAwnB,MAAA,GACAxnB,KAAA8sK,cAAA,EACA9sK,KAAAO,EAAA,EACAP,KAAA+sK,MAAA,EACA/sK,KAAAgtK,yBAAA1oK,EACAtE,KAAAitK,eA5GA,EA6GAjtK,KAAAktK,WAAA,GAGA,IAAAvE,EAAA3oK,KAAA2oK,YACA3oK,KAAAmf,MAAAwpJ,EA1QA,GAxBA,EAoSA3oK,KAAAmtK,uBAAAntK,KAAAotK,sBAAAptK,KAAAqtK,WAAArtK,KAAAstK,QAAA3E,EAGA3oK,KAAAutK,iBAAA5E,EACA3oK,KAAAwtK,eAAA,CAAA,WACAxtK,KAAAytK,uBAAAnpK,EACA,IAAAopK,EAAA1tK,KAAAw3I,IAAAk2B,kBAEA,QAAAppK,IAAAopK,EAAA,CACA,IAAA,IAAA1tK,KAAAw3I,IAAAm2B,gBACA,MAAA,IAAA/sK,MAAA,wDAGA8sK,EAAA,MAGA1tK,KAAA4tK,cAAAF,GACA1tK,KAAA6tK,kBAAA,EACA7tK,KAAAooK,SAAA,EACApoK,KAAA8tK,SAAA,EACA9tK,KAAA+tK,QAAA,CACA33I,aAAA9xB,EACAmC,cAAAnC,EACA+xB,gBAAA/xB,GAEAtE,KAAAs4D,KAAA,EACAt4D,KAAAwI,OAAA,EACAxI,KAAAguK,SAAA93J,OAAAnN,OAAAm+J,GAEA,QAAA51G,EAAAtxD,KAAAiuK,oBAAA,IAAA38G,GAAAA,EAAAvwD,KAAAf,QAUA,CACA2P,IAAA,KAWApK,MAAA,SAAA+E,EAAAs5G,GAEA5jH,KAAAioK,EAAA39J,IAAAs5G,IAQA,CACAj0G,IAAA,MACApK,MAAA,SAAA+E,GAEAtK,KAAAioK,EAAA39J,SAAAhG,IAaA,CACAqL,IAAA,YACApK,MAAA,SAAAyU,GACA,IAAAs3C,EAEA8V,EAAA,QAAA9V,EAAAtxD,KAAAomI,gBAAA,IAAA90E,EAAAA,EAAA,GAcA,OAZAtxD,KAAA8oK,gBACA1hG,EAAApmE,OAAA,IACAomE,GAAA,KAGAA,GAAA,GAAAzkE,OAAA3C,KAAAs4D,KAAA,KAAA31D,OAAA3C,KAAAwI,SAGA4+D,EAAApmE,OAAA,IACAomE,GAAA,MAGA,IAAAxmE,MAAAwmE,EAAAptD,KAYA,CACArK,IAAA,OACApK,MAAA,SAAAyU,GACA,IAAA8R,EAAA9rB,KAAAkuK,UAAAl0J,GACA4pG,EAAA5jH,KAAAmuK,aAEA,QAAA7pK,IAAAs/G,EACA,MAAA93F,EAKA,OAHA83F,EAAA93F,GAGA9rB,OAUA,CACA2P,IAAA,QACApK,MAAA,SAAAiiB,GACA,GAAAxnB,KAAA0jK,OACA,OAAA1jK,KAAA4iE,KAAA,wDAGA,IAAAr8D,GAAA,EAEA,OAAAihB,GAGAjhB,GAAA,EACAihB,EAAA,IACA,WAAA5hB,EAAA4hB,KACAA,EAAAA,EAAAtc,iBAQA5G,IAAAtE,KAAAgtK,sBAEAxlJ,EAAA,GAAA7kB,OAAA3C,KAAAgtK,qBAAArqK,OAAA6kB,GACAxnB,KAAAgtK,yBAAA1oK,GAGA,IAAAm4F,EAAAj1E,EAAAxmB,OACAotK,EAAA5mJ,EAAA6B,WAAAozE,EAAA,IAEAl2F,IA7WA,KA+WA6nK,GAAAA,GAAA,OAAAA,GAAA,SAIApuK,KAAAgtK,oBAAAxlJ,EAAAi1E,EAAA,GACAA,IACAj1E,EAAAA,EAAAvJ,MAAA,EAAAw+E,IAGA,IAAAotE,EAAA7pK,KAAA6pK,WAIA,IAHA7pK,KAAAwnB,MAAAA,EACAxnB,KAAAO,EAAA,EAEAP,KAAAO,EAAAk8F,GAEAotE,EAAA7pK,KAAAmf,OAAApe,KAAAf,MAIA,OADAA,KAAA8sK,eAAArwE,EACAl2F,EAAAvG,KAAAuG,MAAAvG,OASA,CACA2P,IAAA,QACApK,MAAA,WACA,OAAAvF,KAAAoG,MAAA,QAWA,CACAuJ,IAAA,YACApK,MAAA,WACA,IAAAiiB,EAAAxnB,KAAAwnB,MACAjnB,EAAAP,KAAAO,EAMA,GALAP,KAAA+sK,MAAAxsK,EAGAP,KAAAO,EAAAA,EAAA,EAEAA,GAAAinB,EAAAxmB,OACA,OAhgBA,EAqgBA,IAAAH,EAAA2mB,EAAA6B,WAAA9oB,GAGA,GAFAP,KAAAwI,SAEA3H,EAAA,MAAA,CACA,GAAAA,GA5aA,IAHA,IA+aAA,EACA,OAAAA,EAGA,OAAAA,GACA,KAnbA,GAubA,OAHAb,KAAAs4D,OACAt4D,KAAAwI,OAAA,EACAxI,KAAA6tK,kBAAA7tK,KAAA+wB,SAtbA,GAybA,KAxbA,GAucA,OAxcA,KA2bAvJ,EAAA6B,WAAA9oB,EAAA,KAIAP,KAAAO,EAAAA,EAAA,GAMAP,KAAAs4D,OACAt4D,KAAAwI,OAAA,EACAxI,KAAA6tK,kBAAA7tK,KAAA+wB,UAjiBA,EAoiBA,QAGA,OADA/wB,KAAA4iE,KAAA,yBACA/hE,GAIA,GAAAA,EAAA,MAQA,OAJAA,GAAA,OAAAA,GAAA,OACAb,KAAA4iE,KAAA,yBAGA/hE,EAGA,IAAAwnF,EAAA,MAAA,MAAAxnF,EAAA,QAAA2mB,EAAA6B,WAAA9oB,EAAA,GAAA,OAQA,OAPAP,KAAAO,EAAAA,EAAA,EAGA8nF,EAAA,SACAroF,KAAA4iE,KAAA,yBAGAylB,IAWA,CACA14E,IAAA,YACApK,MAAA,WACA,IAAAiiB,EAAAxnB,KAAAwnB,MACAjnB,EAAAP,KAAAO,EAMA,GALAP,KAAA+sK,MAAAxsK,EAGAP,KAAAO,EAAAA,EAAA,EAEAA,GAAAinB,EAAAxmB,OACA,OArlBA,EA0lBA,IAAAH,EAAA2mB,EAAA6B,WAAA9oB,GAGA,GAFAP,KAAAwI,SAEA3H,EAAA,MAAA,CACA,GAAAA,EAAA,IAAAA,EAAA,KAAAA,EAAA,KAlfA,OAkfAA,GApgBA,IAogBAA,EACA,OAAAA,EAGA,OAAAA,GACA,KAxgBA,GA6gBA,OAHAb,KAAAs4D,OACAt4D,KAAAwI,OAAA,EACAxI,KAAA6tK,kBAAA7tK,KAAA+wB,SA5gBA,GA+gBA,KA9gBA,GAmhBA,IAAApF,EAAAnE,EAAA6B,WAAA9oB,EAAA,GAphBA,KAshBAorB,GAtgBA,MAsgBAA,IAGA3rB,KAAAO,EAAAA,EAAA,GAOA,KAhhBA,IAkhBA,KAjhBA,KAshBA,OAHAP,KAAAs4D,OACAt4D,KAAAwI,OAAA,EACAxI,KAAA6tK,kBAAA7tK,KAAA+wB,UAhoBA,EAmoBA,QAEA,OADA/wB,KAAA4iE,KAAA,yBACA/hE,GAIA,GAAAA,EAAA,MAQA,OAJAA,GAAA,OAAAA,GAAA,OACAb,KAAA4iE,KAAA,yBAGA/hE,EAGA,IAAAwnF,EAAA,MAAA,MAAAxnF,EAAA,QAAA2mB,EAAA6B,WAAA9oB,EAAA,GAAA,OAQA,OAPAP,KAAAO,EAAAA,EAAA,EAGA8nF,EAAA,SACAroF,KAAA4iE,KAAA,yBAGAylB,IAOA,CACA14E,IAAA,cACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAquK,UACA,OAvqBA,IAuqBA7tK,EA7kBA,GA6kBAA,IAEA,CACAmP,IAAA,QACApK,MAAA,WACAvF,KAAAO,EAAAP,KAAA+sK,MACA/sK,KAAAwI,WAcA,CACAmH,IAAA,YACApK,MAAA,SAAA+oK,GAIA,IAHA,IAAAh7J,EAAAtT,KAAAO,EACAinB,EAAAxnB,KAAAwnB,QAEA,CACA,IAAAhnB,EAAAR,KAAAquK,UACAE,GAnsBA,IAmsBA/tK,EACA6nF,EAAAkmF,EA1mBA,GA0mBA/tK,EAEA,IAvsBA,IAusBA6nF,GAAAimF,EAAA/3H,SAAA8xC,GAEA,OADAroF,KAAAwF,MAAAgiB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,OACA1kF,EAGAkmF,IACAvuK,KAAAwF,MAAA,GAAA7C,OAAA6kB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,OAAA,MACAz5J,EAAAtT,KAAAO,MAcA,CACAoP,IAAA,gBACApK,MAAA,SAAA2jB,GAIA,IAHA,IAAA5V,EAAAtT,KAAAO,EACAinB,EAAAxnB,KAAAwnB,QAEA,CACA,IAAAhnB,EAAAR,KAAAquK,UAEA,OAAA7tK,GACA,KAruBA,EAsuBAR,KAAAwF,MAAA,GAAA7C,OAAA6kB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,OAAA,MACAz5J,EAAAtT,KAAAO,EACAC,EA9oBA,GA+oBA,MAEA,KA5uBA,EA8uBA,OADAR,KAAAwF,MAAAgiB,EAAAvJ,MAAA3K,IACA,EAKA,GAAA9S,IAAA0oB,EAEA,OADAlpB,KAAAwF,MAAAgiB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,QACA,KAaA,CACAp9J,IAAA,mBACApK,MAAA,WAIA,IAHA,IAAAiiB,EAAAxnB,KAAAwnB,MACAlU,EAAAtT,KAAAO,IAEA,CACA,IAAAC,EAAAR,KAAAquK,UAEA,IA3wBA,IA2wBA7tK,EAEA,OADAR,KAAAsK,MAAAkd,EAAAvJ,MAAA3K,IA5wBA,EAixBA,IAAAkzJ,EAAAhmK,GAEA,OADAR,KAAAsK,MAAAkd,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,QAjxBA,IAkxBAvsK,EAxrBA,GAwrBAA,KAYA,CACAmP,IAAA,aACApK,MAAA,WAEA,OAAA,CACA,IAAA/E,EAAAR,KAAAwuK,cAEA,IAtyBA,IAsyBAhuK,IAAA4lK,EAAA5lK,GACA,OAAAA,KAIA,CACAmP,IAAA,gBACApK,MAAA,SAAA6wB,GACAp2B,KAAAyuK,kBAAAr4I,EAGA,QAAAA,GACAp2B,KAAAsmK,OAAAD,EACArmK,KAAAquK,QAAAruK,KAAA0uK,YAEA1uK,KAAAsmK,OAAAK,EACA3mK,KAAAquK,QAAAruK,KAAA2uK,aAQA,CACAh/J,IAAA,SACApK,MAAA,WAMA,QAAAvF,KAAAwnB,MAAA6B,WAAA,KACArpB,KAAAO,IACAP,KAAAwI,UAGAxI,KAAAmf,MAv0BA,IAy0BA,CACAxP,IAAA,mBACApK,MAAA,WAMA,IAAAqpK,EAAA5uK,KAAAO,EACAC,EAAAR,KAAA6uK,aAMA,OAJA7uK,KAAA+sK,QAAA6B,IACA5uK,KAAAutK,iBAAA,GAGA/sK,GACA,KAxvBA,GA4vBA,GAHAR,KAAAmf,MAh0BA,GAm0BA,IAAAnf,KAAAwF,KAAAxE,OACA,MAAA,IAAAJ,MAAA,0BAGA,MAEA,KAv2BA,EAw2BA,MAEA,QACAZ,KAAA8uK,QACA9uK,KAAAmf,MAl1BA,GAm1BAnf,KAAAutK,iBAAA,KAGA,CACA59J,IAAA,WACApK,MAAA,WACA,IAAA+rD,EAEA9wD,EAAAR,KAAA+uK,UAAAtH,GAEA,OAAAjnK,GACA,KAjxBA,GAoxBA,QAAA8wD,EAAAtxD,KAAAgvK,sBAAA,IAAA19G,GAAAA,EAAAvwD,KAAAf,KAAAA,KAAAwF,MACAxF,KAAAwF,KAAA,GACAxF,KAAAmf,MAn2BA,GAo2BAnf,KAAAooK,SAAA,EAEA,MAGA,KAn4BA,EAo4BA,MAEA,QACApoK,KAAAwF,MAAA4E,OAAA6kK,cAAAzuK,GA9xBA,KAgyBAA,EACAR,KAAAmf,MAh4BA,EAi4BA4/C,EAAAv+D,KACAR,KAAAmf,MAp4BA,EAq4BAnf,KAAAsvE,EAAA9uE,MAKA,CACAmP,IAAA,gBACApK,MAAA,WACA,IAAA+pE,EAAAtvE,KAAAsvE,EAEAtvE,KAAAkvK,cAAA5/F,KACAtvE,KAAAwF,MAAA4E,OAAA6kK,cAAA3/F,GACAtvE,KAAAsvE,EAAA,KACAtvE,KAAAmf,MAp5BA,KAu5BA,CACAxP,IAAA,OACApK,MAAA,WACA,IAAA/E,EAAAR,KAAA+uK,UAAArH,IAh6BA,IAk6BAlnK,IAIAR,KAAAwF,MAAA4E,OAAA6kK,cAAAzuK,GA5zBA,KA8zBAA,EACAR,KAAAmf,MAn6BA,EA+FA,KAq0BA3e,EACAR,KAAAmf,MA75BA,EA85BA4/C,EAAAv+D,KACAR,KAAAmf,MAj6BA,EAk6BAnf,KAAAsvE,EAAA9uE,MAGA,CACAmP,IAAA,aACApK,MAAA,WACA,IAAA+pE,EAAAtvE,KAAAsvE,EAEAtvE,KAAAkvK,cAAA5/F,KACAtvE,KAAAwF,MAAA4E,OAAA6kK,cAAA3/F,GACAtvE,KAAAmf,MA96BA,EA+6BAnf,KAAAsvE,EAAA,QAGA,CACA3/D,IAAA,eACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAwuK,cAGA,OAFAxuK,KAAAwF,MAAA4E,OAAA6kK,cAAAzuK,GAEAA,GACA,KAr2BA,GAs2BAR,KAAAmf,MAr7BA,EAs7BAnf,KAAA2sK,aAAA,GACA,MAEA,KAAApF,EACAvnK,KAAAmf,MAn7BA,GAo7BA,MAEA,QACAnf,KAAAmf,MAn8BA,KAs8BA,CACAxP,IAAA,mBACApK,MAAA,WACA,IAAA2jB,EAAA9e,OAAA6kK,cAAAjvK,KAAAwuK,eACAW,EAAAnvK,KAAA2sK,cAAAzjJ,EACAlpB,KAAAwF,MAAA0jB,EAEA,MAAAimJ,IACAnvK,KAAAmf,MAAA,OAAAgwJ,EAx8BA,EANA,EA+8BAnvK,KAAA2sK,aAAA,MAGA,CACAh9J,IAAA,cACApK,MAAA,WACAvF,KAAAkvK,cA73BA,MA83BAlvK,KAAAwF,MAAA,IACAxF,KAAAmf,MA/8BA,KAk9BA,CACAxP,IAAA,oBACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAwuK,cACAxuK,KAAAwF,MAAA4E,OAAA6kK,cAAAzuK,GACAR,KAAAmf,MAv4BA,KAu4BA3e,EAr9BA,GAJA,IA29BA,CACAmP,IAAA,mBACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAwuK,cACAxuK,KAAAwF,MAAA4E,OAAA6kK,cAAAzuK,GAx4BA,KA04BAA,EACAR,KAAAmf,MAx+BA,GA0+BAnf,KAAA4iE,KAAA,sBAGA5iE,KAAAmf,MAv+BA,KA0+BA,CACAxP,IAAA,SACApK,MAAA,WACAvF,KAAAkvK,cAAA3H,KACAvnK,KAAAwF,MAAA,IACAxF,KAAAmf,MAv+BA,MA0+BA,CACAxP,IAAA,eACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAwuK,cACAxuK,KAAAwF,MAAA4E,OAAA6kK,cAAAzuK,GA/5BA,KAi6BAA,IACAR,KAAAmf,MA//BA,KAkgCA,CACAxP,IAAA,QACApK,MAAA,WAcA,IAAAvF,KAAAijE,KAAAjiE,OACAhB,KAAAovK,mBAEApvK,KAAAqvK,0BAGA,CACA1/J,IAAA,UACApK,MAAA,WAEA,IAAA+N,EAAAtT,KAAAO,EACAinB,EAAAxnB,KAAAwnB,MAEA8nJ,EACA,OACA,OAAAtvK,KAAAquK,WACA,KA3iCA,EA4iCAruK,KAAA0hE,QAAA,GAAA/+D,OAAA6kB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,OAAA,MACAz5J,EAAAtT,KAAAO,EACA,MAEA,KA78BA,GA+8BA,IAAAktK,EAAAztK,KAAAytK,kBACA/rG,EAAA1hE,KAAA0hE,OAAAl6C,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,OACA/sK,KAAAmf,MAAAsuJ,EACA,IAAAj1E,OAAA,EAEA,KAAA92B,GACA1hE,KAAA4iE,KAAA,sBACA41B,EAAA,OAEAA,EAAAx4F,KAAAuvK,YAAA7tG,GACA1hE,KAAA0hE,OAAA,IAniCA,KAsiCA+rG,QAAAnpK,IAAAtE,KAAAwvK,cACAxvK,KAAAwF,MAAAgzF,GAIA,MAAA82E,EAGA,KAxkCA,EAykCAtvK,KAAA0hE,QAAAl6C,EAAAvJ,MAAA3K,GAEA,MAAAg8J,KAMA,CACA3/J,IAAA,YACApK,MAAA,WAKA,IAAA/E,EAAAR,KAAAquK,UAEA,GAAA9H,EAAA/lK,GACAR,KAAAmf,MAvhCA,GAwhCAnf,KAAA8uK,QACA9uK,KAAAutK,iBAAA,OAEA,OAAA/sK,GACA,KA7/BA,GA8/BAR,KAAAmf,MA3gCA,GA4gCAnf,KAAAutK,iBAAA,EACA,MAEA,KAvgCA,GAwgCAvtK,KAAAmf,MAtkCA,GAukCAnf,KAAA2sK,aAAA,GACA3sK,KAAAutK,iBAAA,EACA,MAEA,KAAAhG,EACAvnK,KAAAmf,MA9jCA,GA+jCA,MAEA,QACAnf,KAAA4iE,KAAA,oCACA5iE,KAAAmf,MAvlCA,GAwlCAnf,KAAAutK,iBAAA,KAIA,CACA59J,IAAA,gBACApK,MAAA,WAGA,OAFAvF,KAAA2sK,cAAAviK,OAAA6kK,cAAAjvK,KAAAwuK,eAEAxuK,KAAA2sK,cACA,IAAA,UACA3sK,KAAAstK,SAAAttK,KAAAmtK,yBACAntK,KAAA4iE,KAAA,mCACA5iE,KAAAmtK,wBAAA,GAGAntK,KAAAqtK,aAAArtK,KAAAotK,wBACAptK,KAAA4iE,KAAA,mCACA5iE,KAAAotK,uBAAA,GAGAptK,KAAAmf,MA/lCA,GAgmCAnf,KAAA2sK,aAAA,GACA,MAEA,IAAA,KACA3sK,KAAAmf,MA1mCA,GA2mCAnf,KAAA2sK,aAAA,GACA,MAEA,IAAA,UACA3sK,KAAAmf,MA3oCA,GA6oCAnf,KAAAooK,SAAApoK,KAAAstK,UACAttK,KAAA4iE,KAAA,gDAGA5iE,KAAA2sK,aAAA,GACA,MAEA,QAGA3sK,KAAA2sK,aAAA3rK,QAAA,GACAhB,KAAA4iE,KAAA,wBAKA,CACAjzD,IAAA,WACApK,MAAA,WACAvF,KAAAkvK,cApkCA,MAqkCAlvK,KAAAmf,MAnoCA,MAsoCA,CACAxP,IAAA,iBACApK,MAAA,WACA,IAAA+rD,EAEA9wD,EAAAR,KAAAwuK,cA7kCA,KA+kCAhuK,GACAR,KAAAmf,MA5oCA,GA8oCA,QAAAmyC,EAAAtxD,KAAAyvK,sBAAA,IAAAn+G,GAAAA,EAAAvwD,KAAAf,KAAAA,KAAAwF,MACAxF,KAAAwF,KAAA,KAEAxF,KAAAwF,MAAA,IAAA7C,OAAAyH,OAAA6kK,cAAAzuK,IACAR,KAAAmf,MAtpCA,MAypCA,CACAxP,IAAA,gBACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAwuK,cAvlCA,KAylCAhuK,GACAR,KAAA4iE,KAAA,sBAGA5iE,KAAAwF,MAAA,KAAA7C,OAAAyH,OAAA6kK,cAAAzuK,IACAR,KAAAmf,MAnqCA,IAqqCAnf,KAAAmf,MA7qCA,KAgrCA,CACAxP,IAAA,SACApK,MAAA,WACAvF,KAAAkvK,cAnmCA,MAomCAlvK,KAAAmf,MApqCA,MAuqCA,CACAxP,IAAA,eACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAwuK,cA1mCA,KA4mCAhuK,EACAR,KAAAmf,MA3qCA,IA6qCAnf,KAAAwF,MAAA,IAAA7C,OAAAyH,OAAA6kK,cAAAzuK,IACAR,KAAAmf,MAlrCA,MAqrCA,CACAxP,IAAA,gBACApK,MAAA,WACA,IAAA+rD,EAEA9wD,EAAAR,KAAAwuK,cAEA,OAAAhuK,GACA,KA9nCA,GAioCA,QAAA8wD,EAAAtxD,KAAA0vK,oBAAA,IAAAp+G,GAAAA,EAAAvwD,KAAAf,KAAAA,KAAAwF,MACAxF,KAAAwF,KAAA,GACAxF,KAAAmf,MAhtCA,GAitCA,MAGA,KApoCA,GAqoCAnf,KAAAwF,MAAA,IACA,MAEA,QACAxF,KAAAwF,MAAA,KAAA7C,OAAAyH,OAAA6kK,cAAAzuK,IACAR,KAAAmf,MA5sCA,MAitCA,CACAxP,IAAA,eACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAwuK,cAGAxuK,KAAA+oK,eAAAvoK,IACAR,KAAA4sK,UAAAxiK,OAAA6kK,cAAAzuK,GACAR,KAAAmf,MAjtCA,IAktCA3e,IAAA+mK,GAAAnB,EAAA5lK,IACAR,KAAA4iE,KAAA,4CACA5iE,KAAAmf,MAAA3e,IAAA+mK,EAhtCA,GAFA,KAotCAvnK,KAAA4iE,KAAA,wDACA5iE,KAAA4sK,UAAAxiK,OAAA6kK,cAAAzuK,GACAR,KAAAmf,MAxtCA,MA2tCA,CACAxP,IAAA,UACApK,MAAA,WAMA,IAHA,IAAAiiB,EAAAxnB,KAAAwnB,MACAlU,EAAAtT,KAAAO,IAEA,CACA,IAAAC,EAAAR,KAAAwuK,cAEA,IAtxCA,IAsxCAhuK,EAEA,YADAR,KAAA4sK,UAAAplJ,EAAAvJ,MAAA3K,IAMA,IAAAtT,KAAAgpK,UAAAxoK,GAAA,CACAR,KAAA4sK,UAAAplJ,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,OACA,IAAA4C,EAAAnvK,IAAA+mK,EAEAoI,GAAAvJ,EAAA5lK,GACA,QAAAR,KAAA4sK,UACA5sK,KAAAutK,iBACAvtK,KAAA4iE,KAAA,4DAGA5iE,KAAAmf,MAAAwwJ,EAruCA,GAZA,IAmvCA3vK,KAAAmf,MAAAwwJ,EArvCA,GAFA,IA0vCA3vK,KAAA4iE,KAAA,wDACA5iE,KAAA4sK,UAAAxiK,OAAA6kK,cAAAzuK,IAGA,UAIA,CACAmP,IAAA,UACApK,MAAA,WACA,GAAA,IAAAvF,KAAAwF,KAAAxE,OAAA,CACA,IAAAR,EAAAR,KAAAwuK,cAEAhuK,IAAA+mK,EACAvnK,KAAAmf,MAvwCA,GAwwCAinJ,EAAA5lK,KACAR,KAAAwF,KAAA4E,OAAA6kK,cAAAzuK,SAIAR,KAAAkvK,cAAA3H,KACAvnK,KAAAmf,MA9wCA,MAixCA,CACAxP,IAAA,YACApK,MAAA,WACA,IAAA+rD,EAEA9wD,EAAAR,KAAAwuK,cAEA,GAruCA,KAquCAhuK,EAAA,CACA,IAAAosK,EAAA5sK,KAAA4sK,SAEA,QAAAA,EAAA5vJ,eACAhd,KAAA4iE,KAAA,iEAIA,QAAAtR,EAAAtxD,KAAA4vK,iBAAA,IAAAt+G,GAAAA,EAAAvwD,KAAAf,KAAA,CACA0b,OAAAkxJ,EACAtrG,KAAAthE,KAAAwF,OAEAxF,KAAA4sK,SAAA5sK,KAAAwF,KAAA,GACAxF,KAAAmf,MA/zCA,QAg0CA3e,IAAA+mK,EAKAvnK,KAAAwF,MAAA,KAEAxF,KAAAwF,MAAA,IAAA7C,OAAAyH,OAAA6kK,cAAAzuK,IACAR,KAAAmf,MAhzCA,IAmzCAnf,KAAAutK,iBAAA,IAEA,CACA59J,IAAA,oBACApK,MAAA,WACA,IAAA/E,EAAAR,KAAA6uK,aAGAruK,IAAA+mK,GA72CA,IAm3CA/mK,IACAR,KAAAmf,MA5zCA,GA6zCAnf,KAAAsK,KAAAF,OAAA6kK,cAAAzuK,IANAR,KAAAmf,MA7yCA,KAszCA,CACAxP,IAAA,eACApK,MAAA,WACA,IAAA/E,EAAAR,KAAA+uK,UAAApH,GAGA,GAAAnnK,IAAA+mK,EAKA,OAJAvnK,KAAAmf,MA7zCA,GA8zCAnf,KAAAsK,MAAAtK,KAAAwF,KACAxF,KAAAwF,KAAA,QACAxF,KAAA4iE,KAAA,kCAIA,GAAAwjG,EAAA5lK,IAAAA,IAAA8mK,EAAA,CAOA,GAHAtnK,KAAAsK,MAAAtK,KAAAwF,KACAxF,KAAAwF,KAAA,IAEAxF,KAAAwtK,eAAAj3H,SAAAv2C,KAAAsK,MACA,OAAAtK,KAAAsK,KAAAtJ,QACA,KAAA,EACAhB,KAAA4iE,KAAA,6CACA,MAEA,KAAA,EACA5iE,KAAA4iE,KAAA,qBAAAjgE,OAAA3C,KAAAwtK,eAAA,GAAA,MACA,MAEA,QACAxtK,KAAA4iE,KAAA,mBAAAjgE,OAAA3C,KAAAwtK,eAAAlhK,KAAA,QAIAtM,KAAAmf,MAAA3e,IAAA8mK,EAh2CA,GAFA,MAo2CA,CACA33J,IAAA,aACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAwuK,cAGA,GAAAhuK,IAAA+mK,EAGA,OAFAvnK,KAAAmf,MAn2CA,QAo2CAnf,KAAA4iE,KAAA,kCAIAwjG,EAAA5lK,KAIAA,IAAA8mK,GACAtnK,KAAA4iE,KAAA,mBAGA5iE,KAAAmf,MAt3CA,MAw3CA,CACAxP,IAAA,qBACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAwuK,cAGA,GAAAhuK,IAAA+mK,EAGA,OAFAvnK,KAAAmf,MAz3CA,QA03CAnf,KAAA4iE,KAAA,kCAIAwjG,EAAA5lK,KAIAu+D,EAAAv+D,GAIAR,KAAAsvE,EAAA9uE,GAHAR,KAAA4iE,KAAA,yBACA5iE,KAAAsvE,EAz2CA,IA82CAtvE,KAAAmf,MA74CA,MA+4CA,CACAxP,IAAA,gBACApK,MAAA,WACA,IAAA/E,EAAAR,KAAA+uK,UAAA,CAAA/uK,KAAAsvE,EAAAi4F,IAGA,GAAA/mK,IAAA+mK,EAIA,OAHAvnK,KAAAmf,MAl5CA,GAm5CAnf,KAAAwF,KAAA,QACAxF,KAAA4iE,KAAA,kCAIA,IA19CA,IA09CApiE,EAAA,CAIA,IAAA+E,EAAAvF,KAAAwF,KAGA,OAFAxF,KAAAwF,KAAA,GAEAxF,KAAAsK,MACA,IAAA,UAEAtK,KAAAwtK,eAAA,CAAA,WAAA,cACA,IAAAp3I,EAAA7wB,EACAvF,KAAA+tK,QAAA33I,QAAAA,EAEA,cAAAniB,KAAAmiB,GAGAp2B,KAAAw3I,IAAAm2B,iBACA3tK,KAAA4tK,cAAAx3I,GAHAp2B,KAAA4iE,KAAA,6CAMA,MAGA,IAAA,WACA,4BAAA3uD,KAAA1O,IACAvF,KAAA4iE,KAAA,6DAIA5iE,KAAAwtK,eAAA,CAAA,cACAxtK,KAAA+tK,QAAAtnK,SAAAlB,EACA,MAEA,IAAA,aACA,QAAAA,GAAA,OAAAA,GACAvF,KAAA4iE,KAAA,8CAGA5iE,KAAAwtK,eAAA,GACAxtK,KAAA+tK,QAAA13I,WAAA9wB,EAQAvF,KAAAsK,KAAA,GACAtK,KAAAmf,MA38CA,MA68CA,CACAxP,IAAA,oBACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAwuK,cAGAhuK,IAAA+mK,GAMAnB,EAAA5lK,KACAR,KAAA4iE,KAAA,wBACA5iE,KAAA8uK,SAGA9uK,KAAAmf,MAx+CA,IA+9CAnf,KAAAmf,MAn9CA,KA89CA,CACAxP,IAAA,iBACApK,MAAA,WACA,IAAA+rD,EA57CA,KA87CAtxD,KAAAwuK,eAGA,QAAAxuK,KAAA4sK,SACA5sK,KAAA4iE,KAAA,wDACA,YAAA5iE,KAAAsK,MAAAtK,KAAAwtK,eAAAj3H,SAAA,YACAv2C,KAAA4iE,KAAA,2CAIA,QAAAtR,EAAAtxD,KAAA6vK,sBAAA,IAAAv+G,GAAAA,EAAAvwD,KAAAf,KAAAA,KAAA+tK,SACA/tK,KAAAsK,KAAA,GACAtK,KAAA4sK,SAAA5sK,KAAAwF,KAAA,GACAxF,KAAAmf,MAxhDA,IA6hDAnf,KAAA4iE,KAAA,+DAGA5iE,KAAAutK,iBAAA,IAEA,CACA59J,IAAA,WACApK,MAAA,WACA,IAAA+rD,EAEA9wD,EAAAR,KAAA8vK,mBAEA,IAnkDA,IAmkDAtvK,EAAA,CAIA,IAAAg+B,EAAAx+B,KAAAw+B,IAAA,CACAl0B,KAAAtK,KAAAsK,KACA2qB,WAAA/e,OAAAnN,OAAA,OAgBA,OAdA/I,KAAAsK,KAAA,GAEAtK,KAAA6oK,WACA7oK,KAAA6sK,MAAAruI,EAAA6qI,GAAAnzJ,OAAAnN,OAAA,OAIA,QAAAuoD,EAAAtxD,KAAA+vK,2BAAA,IAAAz+G,GAAAA,EAAAvwD,KAAAf,KAAAw+B,GACAx+B,KAAAstK,SAAA,GAEAttK,KAAA2oK,aAAA3oK,KAAAqtK,YACArtK,KAAA4iE,KAAA,wCAGApiE,GACA,KAn/CA,GAo/CAR,KAAAgwK,UACA,MAEA,KA3/CA,GA4/CAhwK,KAAAmf,MAzhDA,GA0hDA,MAEA,QACAinJ,EAAA5lK,IACAR,KAAA4iE,KAAA,qCAGA5iE,KAAAmf,MA/hDA,OAkiDA,CACAxP,IAAA,gBACApK,MAAA,WArgDA,KAsgDAvF,KAAAquK,UACAruK,KAAAiwK,sBAEAjwK,KAAA4iE,KAAA,mDACA5iE,KAAAmf,MAziDA,MA4iDA,CACAxP,IAAA,UACApK,MAAA,WACA,IAAA/E,EAAAR,KAAA6uK,cAvnDA,IAynDAruK,IAIA+lK,EAAA/lK,IACAR,KAAA8uK,QACA9uK,KAAAmf,MArjDA,IA6BA,KAyhDA3e,EACAR,KAAAgwK,UA9hDA,KA+hDAxvK,EACAR,KAAAmf,MA7jDA,GA+jDAnf,KAAA4iE,KAAA,8CAGA,CACAjzD,IAAA,cACApK,MAAA,WACA,IAAA/E,EAAAR,KAAA8vK,mBAEAtvK,IAAA8mK,EACAtnK,KAAAmf,MAhkDA,GAikDAinJ,EAAA5lK,GACAR,KAAAmf,MApkDA,GA2BA,KA0iDA3e,GACAR,KAAA4iE,KAAA,4BACA5iE,KAAAmpK,WAAAnpK,KAAAsK,KAAAtK,KAAAsK,MACAtK,KAAAsK,KAAAtK,KAAAwF,KAAA,GACAxF,KAAAgwK,YArpDA,IAspDAxvK,GACAR,KAAA4iE,KAAA,6CAGA,CACAjzD,IAAA,sBACApK,MAAA,WACA,IAAA/E,EAAAR,KAAA6uK,aAEA,OAAAruK,GACA,KAhqDA,EAiqDA,OAEA,KAAA8mK,EACAtnK,KAAAmf,MAtlDA,GAulDA,MAEA,QACAnf,KAAA4iE,KAAA,4BAGA5iE,KAAAwF,KAAA,GACAxF,KAAAsK,KAAA,GArkDA,KAukDA9J,EACAR,KAAAgwK,UACAzJ,EAAA/lK,IACAR,KAAA8uK,QACA9uK,KAAAmf,MAxmDA,KA0mDAnf,KAAA4iE,KAAA,2CACA5iE,KAAAmf,MA7mDA,OAknDA,CACAxP,IAAA,eACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAwuK,cAEAzvG,EAAAv+D,IACAR,KAAAsvE,EAAA9uE,EACAR,KAAAmf,MAjnDA,IAknDAinJ,EAAA5lK,KACAR,KAAA4iE,KAAA,6BACA5iE,KAAAmf,MAhnDA,GAinDAnf,KAAA8uK,WAGA,CACAn/J,IAAA,qBACApK,MAAA,WAOA,IAJA,IAAA+pE,EAAAtvE,KAAAsvE,EACA9nD,EAAAxnB,KAAAwnB,MACAlU,EAAAtT,KAAAO,IAGA,OAAAP,KAAAquK,WACA,KAAA/+F,EAKA,OAJAtvE,KAAAmpK,WAAAnpK,KAAAsK,KAAAtK,KAAAwF,KAAAgiB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,QACA/sK,KAAAsK,KAAAtK,KAAAwF,KAAA,GACAxF,KAAAsvE,EAAA,UACAtvE,KAAAmf,MAroDA,IAwoDA,KA1nDA,GA8nDA,OAHAnf,KAAAwF,MAAAgiB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,OACA/sK,KAAAmf,MAhsDA,QAisDAnf,KAAAytK,kBA7oDA,IAgpDA,KAroDA,GAsoDA,KAhuDA,EAiuDA,KAxoDA,EAyoDAztK,KAAAwF,MAAA,GAAA7C,OAAA6kB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,OAAA,KACAz5J,EAAAtT,KAAAO,EACA,MAEA,KAloDA,GAqoDA,OAFAP,KAAAwF,MAAAgiB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,YACA/sK,KAAA4iE,KAAA,yBAGA,KA5uDA,EA8uDA,YADA5iE,KAAAwF,MAAAgiB,EAAAvJ,MAAA3K,OAOA,CACA3D,IAAA,qBACApK,MAAA,WACA,IAAA/E,EAAAR,KAAAwuK,cAEApI,EAAA5lK,GACAR,KAAAmf,MAlrDA,GA+BA,KAopDA3e,EACAR,KAAAgwK,UAzpDA,KA0pDAxvK,EACAR,KAAAmf,MAxrDA,GAyrDAonJ,EAAA/lK,IACAR,KAAA4iE,KAAA,qCACA5iE,KAAA8uK,QACA9uK,KAAAmf,MAxrDA,IA0rDAnf,KAAA4iE,KAAA,6CAGA,CACAjzD,IAAA,uBACApK,MAAA,WAMA,IAAA/E,EAAAR,KAAA+uK,UAAAnH,GAEA,OAAApnK,GACA,KAlrDA,GAmrDAR,KAAAmf,MAvvDA,GAwvDAnf,KAAAytK,kBAhsDA,GAisDA,MAEA,KAlrDA,GAmrDAztK,KAAA4iE,KAAA,yBACA,MAEA,KA3xDA,EA4xDA,MAEA,QACA5iE,KAAAwF,KAAA+wC,SAAA,QACAv2C,KAAA4iE,KAAA,gDAGA5iE,KAAAmpK,WAAAnpK,KAAAsK,KAAAtK,KAAAwF,MACAxF,KAAAsK,KAAAtK,KAAAwF,KAAA,GA7rDA,KA+rDAhF,EACAR,KAAAgwK,UAEAhwK,KAAAmf,MAjuDA,MAsuDA,CACAxP,IAAA,YACApK,MAAA,WACA,IAAA/E,EAAAR,KAAA8vK,mBA1sDA,KA4sDAtvK,EACAR,KAAAkwK,WACA9J,EAAA5lK,GACAR,KAAAmf,MA9tDA,IAxFA,IAuzDA3e,GACAR,KAAA4iE,KAAA,0CAGA,CACAjzD,IAAA,oBACApK,MAAA,WACA,OAAAvF,KAAA6uK,cACA,KAxtDA,GAytDA7uK,KAAAkwK,WACA,MAEA,KAn0DA,EAo0DA,MAEA,QACAlwK,KAAA4iE,KAAA,2CAIA,CACAjzD,IAAA,mBACApK,MAAA,WASA,IAAA+N,EAAAtT,KAAAO,EACA0sK,EAAAjtK,KAAAitK,eACAzlJ,EAAAxnB,KAAAwnB,MACAo8F,EAAA5jH,KAAAwvK,YAEAW,EACA,OACA,OAAAnwK,KAAAquK,WACA,KAzvDA,GA6vDA,GAFAruK,KAAAmf,MAl0DA,QAo0DA7a,IAAAs/G,EAAA,CACA,IAAAp+G,EAAAxF,KAAAwF,KACAyY,EAAAuJ,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,OAEA,IAAAvnK,EAAAxE,QACA4iH,EAAAp+G,EAAAyY,GACAje,KAAAwF,KAAA,IACA,IAAAyY,EAAAjd,QACA4iH,EAAA3lG,GAIAgvJ,EA3rDA,EA6rDA,MAAAkD,EAGA,KAnxDA,GAoxDAnwK,KAAAmf,MAx1DA,GAy1DAnf,KAAAytK,kBA31DA,QA61DAnpK,IAAAs/G,IACA5jH,KAAAwF,MAAAgiB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,QAGAE,EAxsDA,EA0sDA,MAAAkD,EAEA,KArxDA,GAsxDA,OAAAlD,GACA,KA9sDA,EA+sDAA,EA9sDA,EA+sDA,MAEA,KAjtDA,EAktDAA,EAjtDA,EAktDA,MAEA,KAptDA,EAqtDA,MAEA,QACA,MAAA,IAAArsK,MAAA,oBAGA,MAEA,KA3yDA,GA8EA,IA8tDAqsK,GACAjtK,KAAA4iE,KAAA,gDAGAqqG,EApuDA,EAquDA,MAEA,KAz5DA,OA05DA3oK,IAAAs/G,IACA5jH,KAAAwF,MAAA,GAAA7C,OAAA6kB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,OAAA,OAGAz5J,EAAAtT,KAAAO,EACA0sK,EA7uDA,EA8uDA,MAEA,KAn6DA,OAo6DA3oK,IAAAs/G,IACA5jH,KAAAwF,MAAAgiB,EAAAvJ,MAAA3K,IAIA,MAAA68J,EAEA,QACAlD,EAzvDA,EA6vDAjtK,KAAAitK,eAAAA,IAEA,CACAt9J,IAAA,wBACApK,MAAA,WAKA,IAAA+N,EAAAtT,KAAAO,EACAinB,EAAAxnB,KAAAwnB,MACAo8F,EAAA5jH,KAAAwvK,YACAY,GAAA,EAEAC,EACA,OAAA,CACA,IAAAxvK,EAAAb,KAAAquK,UAEA,OAAAxtK,GACA,KA91DA,GAk2DA,GAFAb,KAAAmf,MAv6DA,QAy6DA7a,IAAAs/G,EAAA,CACA,IAAAp+G,EAAAxF,KAAAwF,KACAyY,EAAAuJ,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,OAEA,IAAAvnK,EAAAxE,QACA4iH,EAAAp+G,EAAAyY,GACAje,KAAAwF,KAAA,IACA,IAAAyY,EAAAjd,QACA4iH,EAAA3lG,GAKA,MAAAoyJ,EAGA,KAv3DA,GAw3DArwK,KAAAmf,MA57DA,GA67DAnf,KAAAytK,kBA/7DA,QAi8DAnpK,IAAAs/G,IACA5jH,KAAAwF,MAAAgiB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,QAGAqD,GAAA,EAEA,MAAAC,EAEA,KAl+DA,OAm+DA/rK,IAAAs/G,IACA5jH,KAAAwF,MAAA,GAAA7C,OAAA6kB,EAAAvJ,MAAA3K,EAAAtT,KAAA+sK,OAAA,OAGAz5J,EAAAtT,KAAAO,EACA,MAEA,KA3+DA,OA4+DA+D,IAAAs/G,IACA5jH,KAAAwF,MAAAgiB,EAAAvJ,MAAA3K,IAIA,MAAA+8J,EAEA,QACAjK,EAAAvlK,KACAuvK,GAAA,IAMAA,IAOApwK,KAAAstK,SAAAttK,KAAAmtK,yBACAntK,KAAA4iE,KAAA,mCACA5iE,KAAAmtK,wBAAA,GAGAntK,KAAAqtK,aAAArtK,KAAAotK,wBACAptK,KAAA4iE,KAAA,mCACA5iE,KAAAotK,uBAAA,MAGA,CACAz9J,IAAA,eACApK,MAAA,SAAA+E,EAAA/E,GACA,IAAA+rD,EAEAg/G,EAAAtwK,KAAAuwK,MAAAjmK,GACA88G,EAAAkpD,EAAAlpD,OACApe,EAAAsnE,EAAAtnE,MAEAltE,EAAA,CACAxxB,KAAAA,EACA88G,OAAAA,EACApe,MAAAA,EACAzjG,MAAAA,GAMA,GAJAvF,KAAAktK,WAAAz9J,KAAAqsB,GAEA,QAAAw1B,EAAAtxD,KAAAwwK,wBAAA,IAAAl/G,GAAAA,EAAAvwD,KAAAf,KAAA87B,GAEA,UAAAsrF,EAAA,CACA,IAAAqpD,EAAAlrK,EAAAw0D,OAEA,QAAA/5D,KAAAyuK,mBAAA,KAAAgC,GACAzwK,KAAA4iE,KAAA,iDAGA5iE,KAAA6sK,MAAA7jE,GAAAynE,EACA5I,EAAA7nK,KAAAgpG,EAAAynE,QACA,GAAA,UAAAnmK,EAAA,CACA,IAAAomK,EAAAnrK,EAAAw0D,OAEA/5D,KAAA6sK,MAAA,IAAA6D,EACA7I,EAAA7nK,KAAA,GAAA0wK,MAGA,CACA/gK,IAAA,kBACApK,MAAA,SAAA+E,EAAA/E,GACA,IAAA+rD,EAEAx1B,EAAA,CACAxxB,KAAAA,EACA/E,MAAAA,GAEAvF,KAAAktK,WAAAz9J,KAAAqsB,GAEA,QAAAw1B,EAAAtxD,KAAAwwK,wBAAA,IAAAl/G,GAAAA,EAAAvwD,KAAAf,KAAA87B,KASA,CACAnsB,IAAA,MACApK,MAAA,WACA,IAAA+rD,EAAA0kF,EAEAh2I,KAAAstK,SACAttK,KAAA4iE,KAAA,yCAKA,IAFA,IAAAK,EAAAjjE,KAAAijE,KAEAA,EAAAjiE,OAAA,GAAA,CACA,IAAAw9B,EAAAykC,EAAA9uD,MACAnU,KAAA4iE,KAAA,iBAAAjgE,OAAA67B,EAAAl0B,OA9kEA,IAilEAtK,KAAAmf,OAzjEA,KAyjEAnf,KAAAmf,OACAnf,KAAA4iE,KAAA,mBAGA,IAAAp9D,EAAAxF,KAAAwF,KAcA,OAZA,IAAAA,EAAAxE,SAEA,QAAAswD,EAAAtxD,KAAAwvK,mBAAA,IAAAl+G,GAAAA,EAAAvwD,KAAAf,KAAAwF,GACAxF,KAAAwF,KAAA,IAGAxF,KAAA8tK,SAAA,EAEA,QAAA93B,EAAAh2I,KAAA2wK,kBAAA,IAAA36B,GAAAA,EAAAj1I,KAAAf,MAEAA,KAAAikE,QAEAjkE,OAUA,CACA2P,IAAA,UACApK,MAAA,SAAA6hH,GACA,IAAA91D,EAAA0kF,EAEA1rG,EAAAtqC,KAAA6sK,MAAAzlD,GAEA,QAAA9iH,IAAAgmC,EACA,OAAAA,EAKA,IAFA,IAAA24B,EAAAjjE,KAAAijE,KAEA/zD,EAAA+zD,EAAAjiE,OAAA,EAAAkO,GAAA,EAAAA,IAGA,QAAA5K,KAFAgmC,EAAA24B,EAAA/zD,GAAAm6J,GAAAjiD,IAGA,OAAA98E,EAMA,YAAAhmC,KAFAgmC,EAAAtqC,KAAAqpK,GAAAjiD,IAGA98E,EAGA,QAAA0rG,GAAA1kF,EAAAtxD,KAAAw3I,KAAAo5B,qBAAA,IAAA56B,OAAA,EAAAA,EAAAj1I,KAAAuwD,EAAA81D,KAUA,CACAz3G,IAAA,QACApK,MAAA,SAAA+E,GAEA,IAAAumK,EAAAvmK,EAAAggB,QAAA,KAEA,IAAA,IAAAumJ,EACA,MAAA,CACAzpD,OAAA,GACApe,MAAA1+F,GAIA,IAAA0+F,EAAA1+F,EAAA2T,MAAA4yJ,EAAA,GACAzpD,EAAA98G,EAAA2T,MAAA,EAAA4yJ,GAMA,OAJA,KAAAzpD,GAAA,KAAApe,GAAAA,EAAAzyD,SAAA,OACAv2C,KAAA4iE,KAAA,mBAAAjgE,OAAA2H,EAAA,MAGA,CACA88G,OAAAA,EACApe,MAAAA,KAGA,CACAr5F,IAAA,mBACApK,MAAA,WACA,IAAA+rD,EAEA47G,EAAAltK,KAAAktK,WACA1uI,EAAAx+B,KAAAw+B,IAGAsyI,EAAA9wK,KAAAuwK,MAAA/xI,EAAAl0B,MACA88G,EAAA0pD,EAAA1pD,OACApe,EAAA8nE,EAAA9nE,MAEAxqE,EAAA4oF,OAAAA,EACA5oF,EAAAwqE,MAAAA,EACA,IAAA1+D,EAAA9L,EAAA8L,IAAA,QAAAgnB,EAAAtxD,KAAAkD,QAAAkkH,UAAA,IAAA91D,EAAAA,EAAA,GAcA,GAZA,KAAA81D,IACA,UAAAA,GACApnH,KAAA4iE,KAAA,wCAGA,KAAAt4B,IACAtqC,KAAA4iE,KAAA,6BAAAjgE,OAAAkD,KAAAC,UAAAshH,GAAA,MACA5oF,EAAA8L,IAAA88E,IAKA,IAAA8lD,EAAAlsK,OAAA,CAIA,IAKAuqB,EALA0J,EAAAuJ,EAAAvJ,WACA69G,EAAA,IAAA5F,IAGA5hH,EAAA+5I,EAAA6H,GAGA,IACA,IAAA5hJ,EAAAva,MAAAwa,EAAAD,EAAAlrB,KAAA+rB,MAAA,CACA,IAAA2P,EAAAvQ,EAAAhmB,MACA+E,EAAAwxB,EAAAxxB,KACAymK,EAAAj1I,EAAAsrF,OACA4pD,EAAAl1I,EAAAktE,MAEAioE,OAAA,EAEAC,OAAA,EAEA,KAAAH,GACAE,EAAA,UAAA3mK,EAAA08J,EAAA,GACAkK,EAAA5mK,SAKAhG,KAHA2sK,EAAAjxK,KAAAkD,QAAA6tK,MAIA/wK,KAAA4iE,KAAA,6BAAAjgE,OAAAkD,KAAAC,UAAAirK,GAAA,MACAE,EAAAF,GAGAG,EAAA,IAAAvuK,OAAAsuK,EAAA,KAAAtuK,OAAAquK,IAGAl+B,EAAAxrF,IAAA4pH,IACAlxK,KAAA4iE,KAAA,wBAAAjgE,OAAAuuK,EAAA,MAGAp+B,EAAAnnI,IAAAulK,GACAp1I,EAAAwO,IAAA2mI,EACAh8I,EAAA3qB,GAAAwxB,GAEA,MAAAhQ,GACAR,EAAAnrB,EAAA2rB,GACA,QACAR,EAAA9rB,IAGAQ,KAAAktK,WAAA,MAEA,CACAv9J,IAAA,sBACApK,MAAA,WACA,IAKA4rK,EALAjE,EAAAltK,KAAAktK,WAEAj4I,EAAAj1B,KAAAw+B,IAAAvJ,WAEAm8I,EAAA/L,EAAA6H,GAGA,IACA,IAAAkE,EAAArgK,MAAAogK,EAAAC,EAAAhxK,KAAA+rB,MAAA,CACA,IAAAklJ,EAAAF,EAAA5rK,MACA+E,EAAA+mK,EAAA/mK,KACA/E,EAAA8rK,EAAA9rK,WAEAjB,IAAA2wB,EAAA3qB,IACAtK,KAAA4iE,KAAA,wBAAAjgE,OAAA2H,EAAA,MAGA2qB,EAAA3qB,GAAA/E,GAEA,MAAAumB,GACAslJ,EAAAjxK,EAAA2rB,GACA,QACAslJ,EAAA5xK,IAGAQ,KAAAktK,WAAA,KAQA,CACAv9J,IAAA,UACApK,MAAA,WACA,IAAA+rD,EAEAtxD,KAAAipK,iBACA,IAAAhmG,EAAAjjE,KAAAijE,KACAzkC,EAAAx+B,KAAAw+B,IACAA,EAAA8yI,eAAA,EAIA,QAAAhgH,EAAAtxD,KAAAuxK,sBAAA,IAAAjgH,GAAAA,EAAAvwD,KAAAf,KAAAw+B,GACAykC,EAAAxzD,KAAA+uB,GACAx+B,KAAAmf,MAvxEA,GAwxEAnf,KAAAsK,KAAA,KAQA,CACAqF,IAAA,qBACApK,MAAA,WACA,IAAA+rD,EAAA0kF,EAAAC,EAEAj2I,KAAAipK,iBACA,IAAAhmG,EAAAjjE,KAAAijE,KACAzkC,EAAAx+B,KAAAw+B,IACAA,EAAA8yI,eAAA,EAIA,QAAAhgH,EAAAtxD,KAAAuxK,sBAAA,IAAAjgH,GAAAA,EAAAvwD,KAAAf,KAAAw+B,GAEA,QAAAw3G,EAAAh2I,KAAAwxK,uBAAA,IAAAx7B,GAAAA,EAAAj1I,KAAAf,KAAAw+B,GAGA,QAFAx+B,KAAAw+B,IAAA,QAAAy3G,EAAAhzE,EAAAA,EAAAjiE,OAAA,UAAA,IAAAi1I,EAAAA,EAAA,QAGAj2I,KAAAqtK,YAAA,GAGArtK,KAAAmf,MArzEA,GAszEAnf,KAAAsK,KAAA,KAQA,CACAqF,IAAA,WACApK,MAAA,WACA,IAAA09D,EAAAjjE,KAAAijE,KACA34D,EAAAtK,KAAAsK,KAMA,GAHAtK,KAAAmf,MAr0EA,GAs0EAnf,KAAAsK,KAAA,GAEA,KAAAA,EAGA,OAFAtK,KAAA4iE,KAAA,+BACA5iE,KAAAwF,MAAA,OAOA,IAHA,IAAAo+G,EAAA5jH,KAAAwxK,gBACA/6J,EAAAwsD,EAAAjiE,OAEAyV,KAAA,GAAA,CACA,IAAA+nB,EAAAx+B,KAAAw+B,IAAAykC,EAAA9uD,MAKA,GAJAnU,KAAA6sK,MAAAruI,EAAA6qI,GAEAzlD,MAAAA,GAAAA,EAAAplF,GAEAA,EAAAl0B,OAAAA,EACA,MAGAtK,KAAA4iE,KAAA,yBAGA,IAAAnsD,EACAzW,KAAAqtK,YAAA,EACA52J,EAAA,IACAzW,KAAA4iE,KAAA,0BAAAjgE,OAAA2H,EAAA,MACAtK,KAAAwF,MAAA,KAAA7C,OAAA2H,EAAA,QAWA,CACAqF,IAAA,cACApK,MAAA,SAAAm8D,GAGA,GAAA,MAAAA,EAAA,GAAA,CACA,IAAA+vG,EAAAzxK,KAAAguK,SAAAtsG,GAEA,YAAAp9D,IAAAmtK,EACAA,GAGAzxK,KAAA4iE,KAAA5iE,KAAA+nK,OAAArmG,GAAA,oBAAA,wCACA,IAAA/+D,OAAA++D,EAAA,MAGA,IAAA4C,EAAAugC,IASA,MAPA,MAAAnjC,EAAA,IAAA,iBAAAztD,KAAAytD,GACA4C,EAAA92C,SAAAk0C,EAAAzjD,MAAA,GAAA,IACA,YAAAhK,KAAAytD,KACA4C,EAAA92C,SAAAk0C,EAAAzjD,MAAA,GAAA,KAIAje,KAAAsmK,OAAAhiG,GAKAl6D,OAAA6kK,cAAA3qG,IAJAtkE,KAAA4iE,KAAA,+BACA,IAAAjgE,OAAA++D,EAAA,QAKA,CACA/xD,IAAA,SACA43C,IAAA,WACA,OAAAvnD,KAAA8tK,UAEA,CACAn+J,IAAA,WACA43C,IAAA,WACA,OAAAvnD,KAAA8sK,cAAA9sK,KAAAO,IAeA,CACAoP,IAAA,cACA43C,IAAA,WACA,OAAAvnD,KAAA+wB,SAAA/wB,KAAA6tK,uBAr/EAn/G,EAAA6B,EAAAp/B,UAAAq/B,GAAAC,GAAA/B,EAAA6B,EAAAE,GAy/EA7lC,EA1vEA,GA6vEAnrB,EAAAmrB,YAAAA,2HCtgFA,aACAlrB,EAAOD,QAAkC,mBAAjBmzB,EAA8BA,EACrD,WACC,IAAIgoC,EAAO,GAAG38C,MAAMoE,MAAMtb,WAC1B6zD,EAAKr/C,OAAO,EAAG,EAAG,GAClBsX,WAAWxQ,MAAM,KAAMu4C,2FCLzB,IAAIjzC,EAASlnB,EAAQ,eAAeknB,OAGpC,SAASq5E,EAAMvb,EAAWisF,GACxB1xK,KAAK+mH,OAASp/F,EAAO8C,MAAMg7D,GAC3BzlF,KAAK2xK,WAAaD,EAClB1xK,KAAKgnH,WAAavhC,EAClBzlF,KAAK6X,KAAO,EAGdmpF,EAAK7vE,UAAUjH,OAAS,SAAUvlB,EAAMsxD,GAClB,iBAATtxD,IACTsxD,EAAMA,GAAO,OACbtxD,EAAOgjB,EAAOG,KAAKnjB,EAAMsxD,IAQ3B,IALA,IAAI20B,EAAQ5qF,KAAK+mH,OACbthC,EAAYzlF,KAAKgnH,WACjBhmH,EAAS2D,EAAK3D,OACd4wK,EAAQ5xK,KAAK6X,KAER/Q,EAAS,EAAGA,EAAS9F,GAAS,CAIrC,IAHA,IAAI6wK,EAAWD,EAAQnsF,EACnBqsF,EAAYtqK,KAAKC,IAAIzG,EAAS8F,EAAQ2+E,EAAYosF,GAE7CtxK,EAAI,EAAGA,EAAIuxK,EAAWvxK,IAC7BqqF,EAAMinF,EAAWtxK,GAAKoE,EAAKmC,EAASvG,GAItCuG,GAAUgrK,GADVF,GAASE,GAGIrsF,GAAe,GAC1BzlF,KAAKioF,QAAQ2C,GAKjB,OADA5qF,KAAK6X,MAAQ7W,EACNhB,MAGTghG,EAAK7vE,UAAUhH,OAAS,SAAU8rC,GAChC,IAAIw3C,EAAMztG,KAAK6X,KAAO7X,KAAKgnH,WAE3BhnH,KAAK+mH,OAAOtZ,GAAO,IAInBztG,KAAK+mH,OAAOp9G,KAAK,EAAG8jG,EAAM,GAEtBA,GAAOztG,KAAK2xK,aACd3xK,KAAKioF,QAAQjoF,KAAK+mH,QAClB/mH,KAAK+mH,OAAOp9G,KAAK,IAGnB,IAAIkwE,EAAmB,EAAZ75E,KAAK6X,KAGhB,GAAIgiE,GAAQ,WACV75E,KAAK+mH,OAAOzgC,cAAczM,EAAM75E,KAAKgnH,WAAa,OAG7C,CACL,IAAI+qD,GAAkB,WAAPl4F,KAAuB,EAClCm4F,GAAYn4F,EAAOk4F,GAAW,WAElC/xK,KAAK+mH,OAAOzgC,cAAc0rF,EAAUhyK,KAAKgnH,WAAa,GACtDhnH,KAAK+mH,OAAOzgC,cAAcyrF,EAAS/xK,KAAKgnH,WAAa,GAGvDhnH,KAAKioF,QAAQjoF,KAAK+mH,QAClB,IAAIj9F,EAAO9pB,KAAKgpB,QAEhB,OAAOitC,EAAMnsC,EAAK5e,SAAS+qD,GAAOnsC,GAGpCk3E,EAAK7vE,UAAU82D,QAAU,WACvB,MAAM,IAAIrnF,MAAM,4CAGlBlB,EAAOD,QAAUuhG,0DChFjB,IAAIixE,EAAUvyK,EAAOD,QAAU,SAAcsqB,GAC3CA,EAAYA,EAAU/M,cAEtB,IAAIk1J,EAAYD,EAAQloJ,GACxB,IAAKmoJ,EAAW,MAAM,IAAItxK,MAAMmpB,EAAY,+CAE5C,OAAO,IAAImoJ,GAGbD,EAAQlxE,IAAMtgG,EAAQ,SACtBwxK,EAAQvqD,KAAOjnH,EAAQ,UACvBwxK,EAAQjhF,OAASvwF,EAAQ,YACzBwxK,EAAQlhF,OAAStwF,EAAQ,YACzBwxK,EAAQhhF,OAASxwF,EAAQ,YACzBwxK,EAAQ/gF,OAASzwF,EAAQ,uICNzB,IAAIuuB,EAAWvuB,EAAQ,YACnBugG,EAAOvgG,EAAQ,UACfknB,EAASlnB,EAAQ,eAAeknB,OAEhC8gG,EAAI,CACN,WAAY,YAAY,YAAgB,WAGtCiB,EAAI,IAAIl5G,MAAM,IAElB,SAAS2hK,IACPnyK,KAAKomD,OACLpmD,KAAKoyK,GAAK1oD,EAEV1oB,EAAKjgG,KAAKf,KAAM,GAAI,IAmBtB,SAASqyK,EAAQ/tG,GACf,OAAQA,GAAO,GAAOA,IAAQ,EAGhC,SAASguG,EAAIvhK,EAAG2F,EAAGlW,EAAGgzB,GACpB,OAAU,IAANziB,EAAiB2F,EAAIlW,GAAQkW,EAAK8c,EAC5B,IAANziB,EAAiB2F,EAAIlW,EAAMkW,EAAI8c,EAAMhzB,EAAIgzB,EACtC9c,EAAIlW,EAAIgzB,EAvBjBxE,EAASmjJ,EAAKnxE,GAEdmxE,EAAIhhJ,UAAUi1B,KAAO,WAOnB,OANApmD,KAAKsxD,GAAK,WACVtxD,KAAKg2I,GAAK,WACVh2I,KAAKi2I,GAAK,WACVj2I,KAAKk2I,GAAK,UACVl2I,KAAKukK,GAAK,WAEHvkK,MAiBTmyK,EAAIhhJ,UAAU82D,QAAU,SAAUlE,GAShC,IARA,IAfczf,EAeVolD,EAAI1pH,KAAKoyK,GAETzxK,EAAc,EAAVX,KAAKsxD,GACT56C,EAAc,EAAV1W,KAAKg2I,GACTx1I,EAAc,EAAVR,KAAKi2I,GACTziH,EAAc,EAAVxzB,KAAKk2I,GACT/1I,EAAc,EAAVH,KAAKukK,GAEJhkK,EAAI,EAAGA,EAAI,KAAMA,EAAGmpH,EAAEnpH,GAAKwjF,EAAEkY,YAAgB,EAAJ17F,GAClD,KAAOA,EAAI,KAAMA,EAAGmpH,EAAEnpH,GAAKmpH,EAAEnpH,EAAI,GAAKmpH,EAAEnpH,EAAI,GAAKmpH,EAAEnpH,EAAI,IAAMmpH,EAAEnpH,EAAI,IAEnE,IAAK,IAAIqa,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAI7J,KAAO6J,EAAI,IACXva,EAAoD,IA5B5CikE,EA4BG3jE,IA3BF,EAAM2jE,IAAQ,IA2BPguG,EAAGvhK,EAAG2F,EAAGlW,EAAGgzB,GAAKrzB,EAAIupH,EAAE9uG,GAAK6tG,EAAE13G,GAElD5Q,EAAIqzB,EACJA,EAAIhzB,EACJA,EAAI6xK,EAAO37J,GACXA,EAAI/V,EACJA,EAAIN,EAGNL,KAAKsxD,GAAM3wD,EAAIX,KAAKsxD,GAAM,EAC1BtxD,KAAKg2I,GAAMt/H,EAAI1W,KAAKg2I,GAAM,EAC1Bh2I,KAAKi2I,GAAMz1I,EAAIR,KAAKi2I,GAAM,EAC1Bj2I,KAAKk2I,GAAM1iH,EAAIxzB,KAAKk2I,GAAM,EAC1Bl2I,KAAKukK,GAAMpkK,EAAIH,KAAKukK,GAAM,GAG5B4N,EAAIhhJ,UAAUnI,MAAQ,WACpB,IAAI6rE,EAAIltE,EAAOm7D,YAAY,IAQ3B,OANA+R,EAAEkI,aAAuB,EAAV/8F,KAAKsxD,GAAQ,GAC5BujC,EAAEkI,aAAuB,EAAV/8F,KAAKg2I,GAAQ,GAC5BnhD,EAAEkI,aAAuB,EAAV/8F,KAAKi2I,GAAQ,GAC5BphD,EAAEkI,aAAuB,EAAV/8F,KAAKk2I,GAAQ,IAC5BrhD,EAAEkI,aAAuB,EAAV/8F,KAAKukK,GAAQ,IAErB1vE,GAGTn1F,EAAOD,QAAU0yK,oFCpFjB,IAAInjJ,EAAWvuB,EAAQ,YACnBugG,EAAOvgG,EAAQ,UACfknB,EAASlnB,EAAQ,eAAeknB,OAEhC8gG,EAAI,CACN,WAAY,YAAY,YAAgB,WAGtCiB,EAAI,IAAIl5G,MAAM,IAElB,SAAS+hK,IACPvyK,KAAKomD,OACLpmD,KAAKoyK,GAAK1oD,EAEV1oB,EAAKjgG,KAAKf,KAAM,GAAI,IAmBtB,SAASwyK,EAAOluG,GACd,OAAQA,GAAO,EAAMA,IAAQ,GAG/B,SAAS+tG,EAAQ/tG,GACf,OAAQA,GAAO,GAAOA,IAAQ,EAGhC,SAASguG,EAAIvhK,EAAG2F,EAAGlW,EAAGgzB,GACpB,OAAU,IAANziB,EAAiB2F,EAAIlW,GAAQkW,EAAK8c,EAC5B,IAANziB,EAAiB2F,EAAIlW,EAAMkW,EAAI8c,EAAMhzB,EAAIgzB,EACtC9c,EAAIlW,EAAIgzB,EA3BjBxE,EAASujJ,EAAMvxE,GAEfuxE,EAAKphJ,UAAUi1B,KAAO,WAOpB,OANApmD,KAAKsxD,GAAK,WACVtxD,KAAKg2I,GAAK,WACVh2I,KAAKi2I,GAAK,WACVj2I,KAAKk2I,GAAK,UACVl2I,KAAKukK,GAAK,WAEHvkK,MAqBTuyK,EAAKphJ,UAAU82D,QAAU,SAAUlE,GASjC,IARA,IAnBczf,EAmBVolD,EAAI1pH,KAAKoyK,GAETzxK,EAAc,EAAVX,KAAKsxD,GACT56C,EAAc,EAAV1W,KAAKg2I,GACTx1I,EAAc,EAAVR,KAAKi2I,GACTziH,EAAc,EAAVxzB,KAAKk2I,GACT/1I,EAAc,EAAVH,KAAKukK,GAEJhkK,EAAI,EAAGA,EAAI,KAAMA,EAAGmpH,EAAEnpH,GAAKwjF,EAAEkY,YAAgB,EAAJ17F,GAClD,KAAOA,EAAI,KAAMA,EAAGmpH,EAAEnpH,IA5BR+jE,EA4BmBolD,EAAEnpH,EAAI,GAAKmpH,EAAEnpH,EAAI,GAAKmpH,EAAEnpH,EAAI,IAAMmpH,EAAEnpH,EAAI,MA3B1D,EAAM+jE,IAAQ,GA6B7B,IAAK,IAAI1pD,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAI7J,KAAO6J,EAAI,IACXva,EAAKmyK,EAAM7xK,GAAK2xK,EAAGvhK,EAAG2F,EAAGlW,EAAGgzB,GAAKrzB,EAAIupH,EAAE9uG,GAAK6tG,EAAE13G,GAAM,EAExD5Q,EAAIqzB,EACJA,EAAIhzB,EACJA,EAAI6xK,EAAO37J,GACXA,EAAI/V,EACJA,EAAIN,EAGNL,KAAKsxD,GAAM3wD,EAAIX,KAAKsxD,GAAM,EAC1BtxD,KAAKg2I,GAAMt/H,EAAI1W,KAAKg2I,GAAM,EAC1Bh2I,KAAKi2I,GAAMz1I,EAAIR,KAAKi2I,GAAM,EAC1Bj2I,KAAKk2I,GAAM1iH,EAAIxzB,KAAKk2I,GAAM,EAC1Bl2I,KAAKukK,GAAMpkK,EAAIH,KAAKukK,GAAM,GAG5BgO,EAAKphJ,UAAUnI,MAAQ,WACrB,IAAI6rE,EAAIltE,EAAOm7D,YAAY,IAQ3B,OANA+R,EAAEkI,aAAuB,EAAV/8F,KAAKsxD,GAAQ,GAC5BujC,EAAEkI,aAAuB,EAAV/8F,KAAKg2I,GAAQ,GAC5BnhD,EAAEkI,aAAuB,EAAV/8F,KAAKi2I,GAAQ,GAC5BphD,EAAEkI,aAAuB,EAAV/8F,KAAKk2I,GAAQ,IAC5BrhD,EAAEkI,aAAuB,EAAV/8F,KAAKukK,GAAQ,IAErB1vE,GAGTn1F,EAAOD,QAAU8yK,oFC1FjB,IAAIvjJ,EAAWvuB,EAAQ,YACnBgyK,EAAShyK,EAAQ,YACjBugG,EAAOvgG,EAAQ,UACfknB,EAASlnB,EAAQ,eAAeknB,OAEhC+hG,EAAI,IAAIl5G,MAAM,IAElB,SAASkiK,IACP1yK,KAAKomD,OAELpmD,KAAKoyK,GAAK1oD,EAEV1oB,EAAKjgG,KAAKf,KAAM,GAAI,IAGtBgvB,EAAS0jJ,EAAQD,GAEjBC,EAAOvhJ,UAAUi1B,KAAO,WAUtB,OATApmD,KAAKsxD,GAAK,WACVtxD,KAAKg2I,GAAK,UACVh2I,KAAKi2I,GAAK,UACVj2I,KAAKk2I,GAAK,WACVl2I,KAAKukK,GAAK,WACVvkK,KAAK2yK,GAAK,WACV3yK,KAAK4yK,GAAK,WACV5yK,KAAK6yK,GAAK,WAEH7yK,MAGT0yK,EAAOvhJ,UAAUnI,MAAQ,WACvB,IAAI6rE,EAAIltE,EAAOm7D,YAAY,IAU3B,OARA+R,EAAEkI,aAAa/8F,KAAKsxD,GAAI,GACxBujC,EAAEkI,aAAa/8F,KAAKg2I,GAAI,GACxBnhD,EAAEkI,aAAa/8F,KAAKi2I,GAAI,GACxBphD,EAAEkI,aAAa/8F,KAAKk2I,GAAI,IACxBrhD,EAAEkI,aAAa/8F,KAAKukK,GAAI,IACxB1vE,EAAEkI,aAAa/8F,KAAK2yK,GAAI,IACxB99E,EAAEkI,aAAa/8F,KAAK4yK,GAAI,IAEjB/9E,GAGTn1F,EAAOD,QAAUizK,mGC5CjB,IAAI1jJ,EAAWvuB,EAAQ,YACnBugG,EAAOvgG,EAAQ,UACfknB,EAASlnB,EAAQ,eAAeknB,OAEhC8gG,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,YAGlCiB,EAAI,IAAIl5G,MAAM,IAElB,SAASiiK,IACPzyK,KAAKomD,OAELpmD,KAAKoyK,GAAK1oD,EAEV1oB,EAAKjgG,KAAKf,KAAM,GAAI,IAkBtB,SAASktH,EAAIx6G,EAAGC,EAAGuuE,GACjB,OAAOA,EAAKxuE,GAAKC,EAAIuuE,GAGvB,SAAS4xF,EAAKpgK,EAAGC,EAAGuuE,GAClB,OAAQxuE,EAAIC,EAAMuuE,GAAKxuE,EAAIC,GAG7B,SAASogK,EAAQrgK,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAGvE,SAASsgK,EAAQtgK,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,KAAOA,IAAM,GAAKA,GAAK,GAGvE,SAASugK,EAAQvgK,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAAOA,IAAM,EAhC7Dsc,EAASyjJ,EAAQzxE,GAEjByxE,EAAOthJ,UAAUi1B,KAAO,WAUtB,OATApmD,KAAKsxD,GAAK,WACVtxD,KAAKg2I,GAAK,WACVh2I,KAAKi2I,GAAK,WACVj2I,KAAKk2I,GAAK,WACVl2I,KAAKukK,GAAK,WACVvkK,KAAK2yK,GAAK,WACV3yK,KAAK4yK,GAAK,UACV5yK,KAAK6yK,GAAK,WAEH7yK,MA2BTyyK,EAAOthJ,UAAU82D,QAAU,SAAUlE,GAYnC,IAXA,IALerxE,EAKXg3G,EAAI1pH,KAAKoyK,GAETzxK,EAAc,EAAVX,KAAKsxD,GACT56C,EAAc,EAAV1W,KAAKg2I,GACTx1I,EAAc,EAAVR,KAAKi2I,GACTziH,EAAc,EAAVxzB,KAAKk2I,GACT/1I,EAAc,EAAVH,KAAKukK,GACT/kK,EAAc,EAAVQ,KAAK2yK,GACTv2F,EAAc,EAAVp8E,KAAK4yK,GACTr0H,EAAc,EAAVv+C,KAAK6yK,GAEJtyK,EAAI,EAAGA,EAAI,KAAMA,EAAGmpH,EAAEnpH,GAAKwjF,EAAEkY,YAAgB,EAAJ17F,GAClD,KAAOA,EAAI,KAAMA,EAAGmpH,EAAEnpH,GAAqE,KAjB5EmS,EAiBoBg3G,EAAEnpH,EAAI,MAhB3B,GAAKmS,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAAOA,IAAM,IAgBbg3G,EAAEnpH,EAAI,GAAK0yK,EAAOvpD,EAAEnpH,EAAI,KAAOmpH,EAAEnpH,EAAI,IAEpF,IAAK,IAAIqa,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAIwvG,EAAM7rE,EAAIy0H,EAAO7yK,GAAK+sH,EAAG/sH,EAAGX,EAAG48E,GAAKqsC,EAAE7tG,GAAK8uG,EAAE9uG,GAAM,EACnDyvG,EAAM0oD,EAAOpyK,GAAKmyK,EAAInyK,EAAG+V,EAAGlW,GAAM,EAEtC+9C,EAAI69B,EACJA,EAAI58E,EACJA,EAAIW,EACJA,EAAKqzB,EAAI42F,EAAM,EACf52F,EAAIhzB,EACJA,EAAIkW,EACJA,EAAI/V,EACJA,EAAKypH,EAAKC,EAAM,EAGlBrqH,KAAKsxD,GAAM3wD,EAAIX,KAAKsxD,GAAM,EAC1BtxD,KAAKg2I,GAAMt/H,EAAI1W,KAAKg2I,GAAM,EAC1Bh2I,KAAKi2I,GAAMz1I,EAAIR,KAAKi2I,GAAM,EAC1Bj2I,KAAKk2I,GAAM1iH,EAAIxzB,KAAKk2I,GAAM,EAC1Bl2I,KAAKukK,GAAMpkK,EAAIH,KAAKukK,GAAM,EAC1BvkK,KAAK2yK,GAAMnzK,EAAIQ,KAAK2yK,GAAM,EAC1B3yK,KAAK4yK,GAAMx2F,EAAIp8E,KAAK4yK,GAAM,EAC1B5yK,KAAK6yK,GAAMt0H,EAAIv+C,KAAK6yK,GAAM,GAG5BJ,EAAOthJ,UAAUnI,MAAQ,WACvB,IAAI6rE,EAAIltE,EAAOm7D,YAAY,IAW3B,OATA+R,EAAEkI,aAAa/8F,KAAKsxD,GAAI,GACxBujC,EAAEkI,aAAa/8F,KAAKg2I,GAAI,GACxBnhD,EAAEkI,aAAa/8F,KAAKi2I,GAAI,GACxBphD,EAAEkI,aAAa/8F,KAAKk2I,GAAI,IACxBrhD,EAAEkI,aAAa/8F,KAAKukK,GAAI,IACxB1vE,EAAEkI,aAAa/8F,KAAK2yK,GAAI,IACxB99E,EAAEkI,aAAa/8F,KAAK4yK,GAAI,IACxB/9E,EAAEkI,aAAa/8F,KAAK6yK,GAAI,IAEjBh+E,GAGTn1F,EAAOD,QAAUgzK,oFCtIjB,IAAIzjJ,EAAWvuB,EAAQ,YACnB6pH,EAAS7pH,EAAQ,YACjBugG,EAAOvgG,EAAQ,UACfknB,EAASlnB,EAAQ,eAAeknB,OAEhC+hG,EAAI,IAAIl5G,MAAM,KAElB,SAAS0iK,IACPlzK,KAAKomD,OACLpmD,KAAKoyK,GAAK1oD,EAEV1oB,EAAKjgG,KAAKf,KAAM,IAAK,KAGvBgvB,EAASkkJ,EAAQ5oD,GAEjB4oD,EAAO/hJ,UAAUi1B,KAAO,WAmBtB,OAlBApmD,KAAKmzK,IAAM,WACXnzK,KAAKozK,IAAM,WACXpzK,KAAKqzK,IAAM,WACXrzK,KAAKszK,IAAM,UACXtzK,KAAKuzK,IAAM,WACXvzK,KAAKwzK,IAAM,WACXxzK,KAAKyzK,IAAM,WACXzzK,KAAK0zK,IAAM,WAEX1zK,KAAK2zK,IAAM,WACX3zK,KAAK4zK,IAAM,UACX5zK,KAAK6zK,IAAM,UACX7zK,KAAK8zK,IAAM,WACX9zK,KAAK+zK,IAAM,WACX/zK,KAAKg0K,IAAM,WACXh0K,KAAKi0K,IAAM,WACXj0K,KAAKk0K,IAAM,WAEJl0K,MAGTkzK,EAAO/hJ,UAAUnI,MAAQ,WACvB,IAAI6rE,EAAIltE,EAAOm7D,YAAY,IAE3B,SAASqxF,EAAc51H,EAAG9nC,EAAG3P,GAC3B+tF,EAAEkI,aAAax+C,EAAGz3C,GAClB+tF,EAAEkI,aAAatmF,EAAG3P,EAAS,GAU7B,OAPAqtK,EAAan0K,KAAKmzK,IAAKnzK,KAAK2zK,IAAK,GACjCQ,EAAan0K,KAAKozK,IAAKpzK,KAAK4zK,IAAK,GACjCO,EAAan0K,KAAKqzK,IAAKrzK,KAAK6zK,IAAK,IACjCM,EAAan0K,KAAKszK,IAAKtzK,KAAK8zK,IAAK,IACjCK,EAAan0K,KAAKuzK,IAAKvzK,KAAK+zK,IAAK,IACjCI,EAAan0K,KAAKwzK,IAAKxzK,KAAKg0K,IAAK,IAE1Bn/E,GAGTn1F,EAAOD,QAAUyzK,mGCxDjB,IAAIlkJ,EAAWvuB,EAAQ,YACnBugG,EAAOvgG,EAAQ,UACfknB,EAASlnB,EAAQ,eAAeknB,OAEhC8gG,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,YAGlCiB,EAAI,IAAIl5G,MAAM,KAElB,SAAS4jK,IACPp0K,KAAKomD,OACLpmD,KAAKoyK,GAAK1oD,EAEV1oB,EAAKjgG,KAAKf,KAAM,IAAK,KA2BvB,SAAS8oH,EAAIp2G,EAAGC,EAAGuuE,GACjB,OAAOA,EAAKxuE,GAAKC,EAAIuuE,GAGvB,SAAS4xF,EAAKpgK,EAAGC,EAAGuuE,GAClB,OAAQxuE,EAAIC,EAAMuuE,GAAKxuE,EAAIC,GAG7B,SAASogK,EAAQrgK,EAAG44G,GAClB,OAAQ54G,IAAM,GAAK44G,GAAM,IAAMA,IAAO,EAAI54G,GAAK,KAAO44G,IAAO,EAAI54G,GAAK,IAGxE,SAASsgK,EAAQtgK,EAAG44G,GAClB,OAAQ54G,IAAM,GAAK44G,GAAM,KAAO54G,IAAM,GAAK44G,GAAM,KAAOA,IAAO,EAAI54G,GAAK,IAG1E,SAAS2hK,EAAQ3hK,EAAG44G,GAClB,OAAQ54G,IAAM,EAAI44G,GAAM,KAAO54G,IAAM,EAAI44G,GAAM,IAAO54G,IAAM,EAG9D,SAAS4hK,EAAS5hK,EAAG44G,GACnB,OAAQ54G,IAAM,EAAI44G,GAAM,KAAO54G,IAAM,EAAI44G,GAAM,KAAO54G,IAAM,EAAI44G,GAAM,IAGxE,SAASipD,EAAQ7hK,EAAG44G,GAClB,OAAQ54G,IAAM,GAAK44G,GAAM,KAAOA,IAAO,GAAK54G,GAAK,GAAMA,IAAM,EAG/D,SAAS8hK,EAAS9hK,EAAG44G,GACnB,OAAQ54G,IAAM,GAAK44G,GAAM,KAAOA,IAAO,GAAK54G,GAAK,IAAMA,IAAM,EAAI44G,GAAM,IAGzE,SAASmpD,EAAU9zK,EAAG+V,GACpB,OAAQ/V,IAAM,EAAM+V,IAAM,EAAK,EAAI,EAzDrCsY,EAASolJ,EAAQpzE,GAEjBozE,EAAOjjJ,UAAUi1B,KAAO,WAmBtB,OAlBApmD,KAAKmzK,IAAM,WACXnzK,KAAKozK,IAAM,WACXpzK,KAAKqzK,IAAM,WACXrzK,KAAKszK,IAAM,WACXtzK,KAAKuzK,IAAM,WACXvzK,KAAKwzK,IAAM,WACXxzK,KAAKyzK,IAAM,UACXzzK,KAAK0zK,IAAM,WAEX1zK,KAAK2zK,IAAM,WACX3zK,KAAK4zK,IAAM,WACX5zK,KAAK6zK,IAAM,WACX7zK,KAAK8zK,IAAM,WACX9zK,KAAK+zK,IAAM,WACX/zK,KAAKg0K,IAAM,UACXh0K,KAAKi0K,IAAM,WACXj0K,KAAKk0K,IAAM,UAEJl0K,MAuCTo0K,EAAOjjJ,UAAU82D,QAAU,SAAUlE,GAqBnC,IApBA,IAAI2lC,EAAI1pH,KAAKoyK,GAETrlD,EAAgB,EAAX/sH,KAAKmzK,IACVlmD,EAAgB,EAAXjtH,KAAKozK,IACVlmD,EAAgB,EAAXltH,KAAKqzK,IACVjxE,EAAgB,EAAXpiG,KAAKszK,IACVjmD,EAAgB,EAAXrtH,KAAKuzK,IACVhmD,EAAgB,EAAXvtH,KAAKwzK,IACV/lD,EAAgB,EAAXztH,KAAKyzK,IACV/rE,EAAgB,EAAX1nG,KAAK0zK,IAEV1mD,EAAgB,EAAXhtH,KAAK2zK,IACVzoF,EAAgB,EAAXlrF,KAAK4zK,IACVzmD,EAAgB,EAAXntH,KAAK6zK,IACVzmD,EAAgB,EAAXptH,KAAK8zK,IACVxmD,EAAgB,EAAXttH,KAAK+zK,IACVvmD,EAAgB,EAAXxtH,KAAKg0K,IACVtmD,EAAgB,EAAX1tH,KAAKi0K,IACVtmD,EAAgB,EAAX3tH,KAAKk0K,IAEL3zK,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAC3BmpH,EAAEnpH,GAAKwjF,EAAEkY,YAAgB,EAAJ17F,GACrBmpH,EAAEnpH,EAAI,GAAKwjF,EAAEkY,YAAgB,EAAJ17F,EAAQ,GAEnC,KAAOA,EAAI,IAAKA,GAAK,EAAG,CACtB,IAAI8qH,EAAK3B,EAAEnpH,EAAI,IACX+qH,EAAK5B,EAAEnpH,EAAI,GAAS,GACpB0yK,EAASoB,EAAOhpD,EAAIC,GACpBopD,EAAUJ,EAAQhpD,EAAID,GAItBspD,EAASJ,EAFblpD,EAAK3B,EAAEnpH,EAAI,GACX+qH,EAAK5B,EAAEnpH,EAAI,EAAQ,IAEfq0K,EAAUJ,EAAQlpD,EAAID,GAGtBwpD,EAAOnrD,EAAEnpH,EAAI,IACbu0K,EAAOprD,EAAEnpH,EAAI,GAAQ,GAErBw0K,EAAQrrD,EAAEnpH,EAAI,IACdy0K,EAAQtrD,EAAEnpH,EAAI,GAAS,GAEvB00K,EAAOP,EAAUI,EAAQ,EACzBI,EAAOjC,EAAS4B,EAAOJ,EAASQ,EAAKP,GAAY,EAIrDQ,GAFAA,EAAOA,EAAMP,EAASF,EADtBQ,EAAOA,EAAML,EAAW,EACYA,GAAY,GAEnCG,EAAQN,EADrBQ,EAAOA,EAAMD,EAAS,EACaA,GAAU,EAE7CtrD,EAAEnpH,GAAK20K,EACPxrD,EAAEnpH,EAAI,GAAK00K,EAGb,IAAK,IAAIr6J,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAAG,CAC/Bs6J,EAAMxrD,EAAE9uG,GACRq6J,EAAMvrD,EAAE9uG,EAAI,GAEZ,IAAIu6J,EAAOrC,EAAI/lD,EAAIE,EAAIC,GACnBkoD,EAAOtC,EAAI9lD,EAAI9hC,EAAIiiC,GAEnBkoD,EAAUtC,EAAOhmD,EAAIC,GACrBsoD,EAAUvC,EAAO/lD,EAAID,GACrBwoD,EAAUvC,EAAO3lD,EAAIC,GACrBkoD,EAAUxC,EAAO1lD,EAAID,GAGrBooD,EAAMhtD,EAAE7tG,GACR86J,EAAMjtD,EAAE7tG,EAAI,GAEZ+6J,EAAM7sD,EAAGuE,EAAIE,EAAIE,GACjBmoD,EAAM9sD,EAAGwE,EAAIE,EAAIE,GAEjBmoD,EAAOloD,EAAK6nD,EAAW,EACvBM,EAAOpuE,EAAK6tE,EAAUd,EAASoB,EAAKloD,GAAO,EAM/CmoD,GAFAA,GAFAA,EAAOA,EAAMH,EAAMlB,EADnBoB,EAAOA,EAAMD,EAAO,EACaA,GAAQ,GAE5BH,EAAMhB,EADnBoB,EAAOA,EAAMH,EAAO,EACaA,GAAQ,GAE5BR,EAAMT,EADnBoB,EAAOA,EAAMZ,EAAO,EACaA,GAAQ,EAGzC,IAAIc,GAAOT,EAAUF,EAAQ,EACzBY,GAAOX,EAAUF,EAAOV,EAASsB,GAAKT,GAAY,EAEtD5tE,EAAK+lB,EACLE,EAAKD,EACLD,EAAKF,EACLG,EAAKF,EACLD,EAAKF,EACLG,EAAKF,EAELD,EAAMjrB,EAAK0zE,EAAMrB,EADjBnnD,EAAMF,EAAKyoD,EAAO,EACYzoD,GAAO,EACrChrB,EAAK8qB,EACLE,EAAKD,EACLD,EAAKD,EACLE,EAAKjiC,EACL+hC,EAAKF,EACL7hC,EAAK8hC,EAELD,EAAM+oD,EAAME,GAAMvB,EADlBznD,EAAM6oD,EAAME,GAAO,EACYF,GAAQ,EAGzC71K,KAAK2zK,IAAO3zK,KAAK2zK,IAAM3mD,EAAM,EAC7BhtH,KAAK4zK,IAAO5zK,KAAK4zK,IAAM1oF,EAAM,EAC7BlrF,KAAK6zK,IAAO7zK,KAAK6zK,IAAM1mD,EAAM,EAC7BntH,KAAK8zK,IAAO9zK,KAAK8zK,IAAM1mD,EAAM,EAC7BptH,KAAK+zK,IAAO/zK,KAAK+zK,IAAMzmD,EAAM,EAC7BttH,KAAKg0K,IAAOh0K,KAAKg0K,IAAMxmD,EAAM,EAC7BxtH,KAAKi0K,IAAOj0K,KAAKi0K,IAAMvmD,EAAM,EAC7B1tH,KAAKk0K,IAAOl0K,KAAKk0K,IAAMvmD,EAAM,EAE7B3tH,KAAKmzK,IAAOnzK,KAAKmzK,IAAMpmD,EAAK0nD,EAASz0K,KAAK2zK,IAAK3mD,GAAO,EACtDhtH,KAAKozK,IAAOpzK,KAAKozK,IAAMnmD,EAAKwnD,EAASz0K,KAAK4zK,IAAK1oF,GAAO,EACtDlrF,KAAKqzK,IAAOrzK,KAAKqzK,IAAMnmD,EAAKunD,EAASz0K,KAAK6zK,IAAK1mD,GAAO,EACtDntH,KAAKszK,IAAOtzK,KAAKszK,IAAMlxE,EAAKqyE,EAASz0K,KAAK8zK,IAAK1mD,GAAO,EACtDptH,KAAKuzK,IAAOvzK,KAAKuzK,IAAMlmD,EAAKonD,EAASz0K,KAAK+zK,IAAKzmD,GAAO,EACtDttH,KAAKwzK,IAAOxzK,KAAKwzK,IAAMjmD,EAAKknD,EAASz0K,KAAKg0K,IAAKxmD,GAAO,EACtDxtH,KAAKyzK,IAAOzzK,KAAKyzK,IAAMhmD,EAAKgnD,EAASz0K,KAAKi0K,IAAKvmD,GAAO,EACtD1tH,KAAK0zK,IAAO1zK,KAAK0zK,IAAMhsE,EAAK+sE,EAASz0K,KAAKk0K,IAAKvmD,GAAO,GAGxDymD,EAAOjjJ,UAAUnI,MAAQ,WACvB,IAAI6rE,EAAIltE,EAAOm7D,YAAY,IAE3B,SAASqxF,EAAc51H,EAAG9nC,EAAG3P,GAC3B+tF,EAAEkI,aAAax+C,EAAGz3C,GAClB+tF,EAAEkI,aAAatmF,EAAG3P,EAAS,GAY7B,OATAqtK,EAAan0K,KAAKmzK,IAAKnzK,KAAK2zK,IAAK,GACjCQ,EAAan0K,KAAKozK,IAAKpzK,KAAK4zK,IAAK,GACjCO,EAAan0K,KAAKqzK,IAAKrzK,KAAK6zK,IAAK,IACjCM,EAAan0K,KAAKszK,IAAKtzK,KAAK8zK,IAAK,IACjCK,EAAan0K,KAAKuzK,IAAKvzK,KAAK+zK,IAAK,IACjCI,EAAan0K,KAAKwzK,IAAKxzK,KAAKg0K,IAAK,IACjCG,EAAan0K,KAAKyzK,IAAKzzK,KAAKi0K,IAAK,IACjCE,EAAan0K,KAAK0zK,IAAK1zK,KAAKk0K,IAAK,IAE1Br/E,GAGTn1F,EAAOD,QAAU20K,oFC9OjB10K,EAAOD,QAAUguB,EAEjB,IAAIwoJ,EAAKx1K,EAAQ,UAAUu2B,aAkB3B,SAASvJ,IACPwoJ,EAAGl1K,KAAKf,MAlBKS,EAAQ,WAEvBuuB,CAASvB,EAAQwoJ,GACjBxoJ,EAAOstC,SAAWt6D,EAAQ,+BAC1BgtB,EAAOuoC,SAAWv1D,EAAQ,+BAC1BgtB,EAAOwB,OAASxuB,EAAQ,6BACxBgtB,EAAO2jC,UAAY3wD,EAAQ,gCAC3BgtB,EAAO5C,YAAcpqB,EAAQ,kCAG7BgtB,EAAOA,OAASA,EAWhBA,EAAO0D,UAAUrsB,KAAO,SAASke,EAAMtgB,GACrC,IAAIsnI,EAAShqI,KAEb,SAASw8J,EAAOh1I,GACVxE,EAAKqQ,WACH,IAAUrQ,EAAK5c,MAAMohB,IAAUwiH,EAAOx5G,OACxCw5G,EAAOx5G,QAOb,SAAS+rI,IACHvyB,EAAO4tB,UAAY5tB,EAAOv5G,QAC5Bu5G,EAAOv5G,SAJXu5G,EAAOtlI,GAAG,OAAQ83J,GAQlBx5I,EAAKte,GAAG,QAAS63J,GAIZv5I,EAAKkzJ,UAAcxzK,IAA2B,IAAhBA,EAAQ6D,MACzCyjI,EAAOtlI,GAAG,MAAOmzJ,GACjB7tB,EAAOtlI,GAAG,QAAS23J,IAGrB,IAAI8Z,GAAW,EACf,SAASte,IACHse,IACJA,GAAW,EAEXnzJ,EAAKzc,OAIP,SAAS81J,IACH8Z,IACJA,GAAW,EAEiB,mBAAjBnzJ,EAAKtF,SAAwBsF,EAAKtF,WAI/C,SAASylH,EAAQxd,GAEf,GADAywD,IACwC,IAApCH,EAAGzwD,cAAcxlH,KAAM,SACzB,MAAM2lH,EAQV,SAASywD,IACPpsC,EAAOhlB,eAAe,OAAQw3C,GAC9Bx5I,EAAKgiG,eAAe,QAASu3C,GAE7BvyB,EAAOhlB,eAAe,MAAO6yC,GAC7B7tB,EAAOhlB,eAAe,QAASq3C,GAE/BryB,EAAOhlB,eAAe,QAASme,GAC/BngH,EAAKgiG,eAAe,QAASme,GAE7B6G,EAAOhlB,eAAe,MAAOoxD,GAC7BpsC,EAAOhlB,eAAe,QAASoxD,GAE/BpzJ,EAAKgiG,eAAe,QAASoxD,GAW/B,OA5BApsC,EAAOtlI,GAAG,QAASy+H,GACnBngH,EAAKte,GAAG,QAASy+H,GAmBjB6G,EAAOtlI,GAAG,MAAO0xK,GACjBpsC,EAAOtlI,GAAG,QAAS0xK,GAEnBpzJ,EAAKte,GAAG,QAAS0xK,GAEjBpzJ,EAAKne,KAAK,OAAQmlI,GAGXhnH,6OC7HTtjB,EAAOD,QAAUgB,EAAQ,kFC0BzB,aAIA,IAAI41K,EAAM51K,EAAQ,wBAIduiH,EAAa9sG,OAAOC,MAAQ,SAAUkb,GACxC,IAAIlb,EAAO,GACX,IAAK,IAAIxG,KAAO0hB,EACdlb,EAAK1G,KAAKE,GACX,OAAOwG,GAIVzW,EAAOD,QAAUwvB,EAGjB,IAAIqnJ,EAAOpgK,OAAOnN,OAAOtI,EAAQ,iBACjC61K,EAAKtnJ,SAAWvuB,EAAQ,YAGxB,IAAIs6D,EAAWt6D,EAAQ,sBACnBu1D,EAAWv1D,EAAQ,sBAEvB61K,EAAKtnJ,SAASC,EAAQ8rC,GAKpB,IADA,IAAI5kD,EAAO6sG,EAAWhtD,EAAS7kC,WACtBxpB,EAAI,EAAGA,EAAIwO,EAAKnV,OAAQ2G,IAAK,CACpC,IAAIq8D,EAAS7tD,EAAKxO,GACbsnB,EAAOkC,UAAU6yC,KAAS/0C,EAAOkC,UAAU6yC,GAAUhO,EAAS7kC,UAAU6yC,IAIjF,SAAS/0C,EAAOvsB,GACd,KAAM1C,gBAAgBivB,GAAS,OAAO,IAAIA,EAAOvsB,GAEjDq4D,EAASh6D,KAAKf,KAAM0C,GACpBszD,EAASj1D,KAAKf,KAAM0C,GAEhBA,IAAgC,IAArBA,EAAQk1J,WAAoB53J,KAAK43J,UAAW,GAEvDl1J,IAAgC,IAArBA,EAAQ2wB,WAAoBrzB,KAAKqzB,UAAW,GAE3DrzB,KAAK23J,eAAgB,EACjBj1J,IAAqC,IAA1BA,EAAQi1J,gBAAyB33J,KAAK23J,eAAgB,GAErE33J,KAAK+lH,KAAK,MAAO8xC,GAcnB,SAASA,IAGH73J,KAAK23J,eAAiB33J,KAAK83J,eAAepgB,OAI9C2+B,EAAIrmJ,SAAS+nI,EAAS/3J,MAGxB,SAAS+3J,EAAQh4J,GACfA,EAAKwG,MAtBP2P,OAAOgd,eAAejE,EAAOkC,UAAW,wBAAyB,CAI/DiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAK83J,eAAeE,iBAmB/B9hJ,OAAOgd,eAAejE,EAAOkC,UAAW,YAAa,CACnDo2B,IAAK,WACH,YAA4BjjD,IAAxBtE,KAAKk4J,qBAAwD5zJ,IAAxBtE,KAAK83J,iBAGvC93J,KAAKk4J,eAAeC,WAAan4J,KAAK83J,eAAeK,YAE9D1wG,IAAK,SAAUliD,QAGejB,IAAxBtE,KAAKk4J,qBAAwD5zJ,IAAxBtE,KAAK83J,iBAM9C93J,KAAKk4J,eAAeC,UAAY5yJ,EAChCvF,KAAK83J,eAAeK,UAAY5yJ,MAIpC0pB,EAAOkC,UAAU8oI,SAAW,SAAUnuI,EAAK7U,GACzCjX,KAAKyP,KAAK,MACVzP,KAAKuG,MAEL8vK,EAAIrmJ,SAAS/Y,EAAI6U,0ICxGnB,aAEApsB,EAAOD,QAAUorB,EAEjB,IAAIumC,EAAY3wD,EAAQ,uBAGpB61K,EAAOpgK,OAAOnN,OAAOtI,EAAQ,iBAMjC,SAASoqB,EAAYnoB,GACnB,KAAM1C,gBAAgB6qB,GAAc,OAAO,IAAIA,EAAYnoB,GAE3D0uD,EAAUrwD,KAAKf,KAAM0C,GARvB4zK,EAAKtnJ,SAAWvuB,EAAQ,YAGxB61K,EAAKtnJ,SAASnE,EAAaumC,GAQ3BvmC,EAAYsG,UAAU8sE,WAAa,SAAUz2E,EAAO/gB,EAAUwQ,GAC5DA,EAAG,KAAMuQ,sGCxBX,aAIA,IAAI6uJ,EAAM51K,EAAQ,wBAGlBf,EAAOD,QAAUs7D,EAGjB,IAII9rC,EAJAjK,EAAUvkB,EAAQ,WAOtBs6D,EAASq9F,cAAgBA,EAGhB33J,EAAQ,UAAUu2B,aAA3B,IAEIqhI,EAAkB,SAAUxzC,EAAS36G,GACvC,OAAO26G,EAAQf,UAAU55G,GAAMlJ,QAK7BysB,EAAShtB,EAAQ,6BAKjBknB,EAASlnB,EAAQ,eAAeknB,OAChC2wI,EAAgBx4J,EAAO2iF,YAAc,aAWzC,IAAI6zF,EAAOpgK,OAAOnN,OAAOtI,EAAQ,iBACjC61K,EAAKtnJ,SAAWvuB,EAAQ,YAIxB,IAAI+3J,EAAY/3J,EAAQ,QACpB83J,OAAQ,EAEVA,EADEC,GAAaA,EAAUC,SACjBD,EAAUC,SAAS,UAEnB,aAIV,IAEIhhG,EAFAkhG,EAAal4J,EAAQ,iCACrBm4J,EAAcn4J,EAAQ,8BAG1B61K,EAAKtnJ,SAAS+rC,EAAUttC,GAExB,IAAI2rI,EAAe,CAAC,QAAS,QAAS,UAAW,QAAS,UAc1D,SAAShB,EAAc11J,EAASE,GAG9BF,EAAUA,GAAW,GAOrB,IAAI22J,EAAWz2J,aATfqsB,EAASA,GAAUxuB,EAAQ,qBAa3BT,KAAK2wD,aAAejuD,EAAQiuD,WAExB0oG,IAAUr5J,KAAK2wD,WAAa3wD,KAAK2wD,cAAgBjuD,EAAQipD,oBAI7D,IAAIq4G,EAAMthK,EAAQs1J,cACdue,EAAc7zK,EAAQ8zK,sBACtBC,EAAaz2K,KAAK2wD,WAAa,GAAK,MAElB3wD,KAAKg4J,cAAvBgM,GAAe,IAARA,EAAgCA,EAAa3K,IAAakd,GAA+B,IAAhBA,GAAyCA,EAAsCE,EAGnKz2K,KAAKg4J,cAAgBxwJ,KAAKI,MAAM5H,KAAKg4J,eAKrCh4J,KAAK+nB,OAAS,IAAI4wI,EAClB34J,KAAKgB,OAAS,EACdhB,KAAK8uB,MAAQ,KACb9uB,KAAKs5J,WAAa,EAClBt5J,KAAKu5J,QAAU,KACfv5J,KAAK03I,OAAQ,EACb13I,KAAKm3D,YAAa,EAClBn3D,KAAKw5J,SAAU,EAMfx5J,KAAKmyJ,MAAO,EAIZnyJ,KAAKy5J,cAAe,EACpBz5J,KAAK05J,iBAAkB,EACvB15J,KAAK25J,mBAAoB,EACzB35J,KAAK45J,iBAAkB,EAGvB55J,KAAKm4J,WAAY,EAKjBn4J,KAAKkyJ,gBAAkBxvJ,EAAQwvJ,iBAAmB,OAGlDlyJ,KAAK+5J,WAAa,EAGlB/5J,KAAKg6J,aAAc,EAEnBh6J,KAAKw3D,QAAU,KACfx3D,KAAKyG,SAAW,KACZ/D,EAAQ+D,WACLgxD,IAAeA,EAAgBh3D,EAAQ,mBAAmBg3D,eAC/Dz3D,KAAKw3D,QAAU,IAAIC,EAAc/0D,EAAQ+D,UACzCzG,KAAKyG,SAAW/D,EAAQ+D,UAI5B,SAASs0D,EAASr4D,GAGhB,GAFAusB,EAASA,GAAUxuB,EAAQ,sBAErBT,gBAAgB+6D,GAAW,OAAO,IAAIA,EAASr4D,GAErD1C,KAAKk4J,eAAiB,IAAIE,EAAc11J,EAAS1C,MAGjDA,KAAK43J,UAAW,EAEZl1J,IAC0B,mBAAjBA,EAAQI,OAAqB9C,KAAKo7H,MAAQ14H,EAAQI,MAE9B,mBAApBJ,EAAQgb,UAAwB1d,KAAKi6J,SAAWv3J,EAAQgb,UAGrE+P,EAAO1sB,KAAKf,MA2Dd,SAASk6J,EAAiBt3J,EAAQ4kB,EAAO/gB,EAAU0zJ,EAAYC,GAC7D,IAKMz0C,EALFxmG,EAAQvc,EAAOs1J,eACL,OAAV1wI,GACFrI,EAAMq6I,SAAU,EA0NpB,SAAoB52J,EAAQuc,GAC1B,GAAIA,EAAMu4H,MAAO,OACjB,GAAIv4H,EAAMq4C,QAAS,CACjB,IAAIhwC,EAAQrI,EAAMq4C,QAAQjxD,MACtBihB,GAASA,EAAMxmB,SACjBme,EAAM4I,OAAOtY,KAAK+X,GAClBrI,EAAMne,QAAUme,EAAMwxC,WAAa,EAAInpC,EAAMxmB,QAGjDme,EAAMu4H,OAAQ,EAGd2iB,EAAaz3J,GArOX23J,CAAW33J,EAAQuc,KAGdi7I,IAAgBz0C,EA2CzB,SAAsBxmG,EAAOqI,GAC3B,IAAIm+F,EApPiBt0F,EAqPF7J,EApPZG,EAAOs6C,SAAS5wC,IAAQA,aAAeinI,GAoPA,iBAAV9wI,QAAgCljB,IAAVkjB,GAAwBrI,EAAMwxC,aACtFg1D,EAAK,IAAIt1D,UAAU,oCAtPvB,IAAuBh/B,EAwPrB,OAAOs0F,EAhDqB60C,CAAar7I,EAAOqI,IAC1Cm+F,EACF/iH,EAAOiC,KAAK,QAAS8gH,GACZxmG,EAAMwxC,YAAcnpC,GAASA,EAAMxmB,OAAS,GAChC,iBAAVwmB,GAAuBrI,EAAMwxC,YAAcz6C,OAAO45C,eAAetoC,KAAWG,EAAOwJ,YAC5F3J,EAhNR,SAA6BA,GAC3B,OAAOG,EAAOG,KAAKN,GA+MLizI,CAAoBjzI,IAG1B2yI,EACEh7I,EAAMg4C,WAAYv0D,EAAOiC,KAAK,QAAS,IAAIjE,MAAM,qCAA0C85J,EAAS93J,EAAQuc,EAAOqI,GAAO,GACrHrI,EAAMu4H,MACf90I,EAAOiC,KAAK,QAAS,IAAIjE,MAAM,6BAE/Bue,EAAMq6I,SAAU,EACZr6I,EAAMq4C,UAAY/wD,GACpB+gB,EAAQrI,EAAMq4C,QAAQpxD,MAAMohB,GACxBrI,EAAMwxC,YAA+B,IAAjBnpC,EAAMxmB,OAAc05J,EAAS93J,EAAQuc,EAAOqI,GAAO,GAAYmzI,EAAc/3J,EAAQuc,IAE7Gu7I,EAAS93J,EAAQuc,EAAOqI,GAAO,KAGzB2yI,IACVh7I,EAAMq6I,SAAU,IAIpB,OAgCF,SAAsBr6I,GACpB,OAAQA,EAAMu4H,QAAUv4H,EAAMs6I,cAAgBt6I,EAAMne,OAASme,EAAM64I,eAAkC,IAAjB74I,EAAMne,QAjCnF01K,CAAav3J,GAGtB,SAASu7I,EAAS93J,EAAQuc,EAAOqI,EAAO2yI,GAClCh7I,EAAMo6I,SAA4B,IAAjBp6I,EAAMne,SAAiBme,EAAMgzI,MAChDvvJ,EAAOiC,KAAK,OAAQ2iB,GACpB5kB,EAAOE,KAAK,KAGZqc,EAAMne,QAAUme,EAAMwxC,WAAa,EAAInpC,EAAMxmB,OACzCm5J,EAAYh7I,EAAM4I,OAAO8I,QAAQrJ,GAAYrI,EAAM4I,OAAOtY,KAAK+X,GAE/DrI,EAAMs6I,cAAcY,EAAaz3J,IAEvC+3J,EAAc/3J,EAAQuc,GAvGxBjJ,OAAOgd,eAAe6nC,EAAS5pC,UAAW,YAAa,CACrDo2B,IAAK,WACH,YAA4BjjD,IAAxBtE,KAAKk4J,gBAGFl4J,KAAKk4J,eAAeC,WAE7B1wG,IAAK,SAAUliD,GAGRvF,KAAKk4J,iBAMVl4J,KAAKk4J,eAAeC,UAAY5yJ,MAIpCw1D,EAAS5pC,UAAUzT,QAAUk7I,EAAYl7I,QACzCq9C,EAAS5pC,UAAUypI,WAAahC,EAAYiC,UAC5C9/F,EAAS5pC,UAAU8oI,SAAW,SAAUnuI,EAAK7U,GAC3CjX,KAAKyP,KAAK,MACVwH,EAAG6U,IAOLivC,EAAS5pC,UAAU1hB,KAAO,SAAU+X,EAAO/gB,GACzC,IACI2zJ,EADAj7I,EAAQnf,KAAKk4J,eAgBjB,OAbK/4I,EAAMwxC,WAUTypG,GAAiB,EATI,iBAAV5yI,KACT/gB,EAAWA,GAAY0Y,EAAM+yI,mBACZ/yI,EAAM1Y,WACrB+gB,EAAQG,EAAOG,KAAKN,EAAO/gB,GAC3BA,EAAW,IAEb2zJ,GAAiB,GAMdF,EAAiBl6J,KAAMwnB,EAAO/gB,GAAU,EAAO2zJ,IAIxDr/F,EAAS5pC,UAAUN,QAAU,SAAUrJ,GACrC,OAAO0yI,EAAiBl6J,KAAMwnB,EAAO,MAAM,GAAM,IAwEnDuzC,EAAS5pC,UAAUT,SAAW,WAC5B,OAAuC,IAAhC1wB,KAAKk4J,eAAeqB,SAI7Bx+F,EAAS5pC,UAAUZ,YAAc,SAAU0lC,GAIzC,OAHKwB,IAAeA,EAAgBh3D,EAAQ,mBAAmBg3D,eAC/Dz3D,KAAKk4J,eAAe1gG,QAAU,IAAIC,EAAcxB,GAChDj2D,KAAKk4J,eAAezxJ,SAAWwvD,EACxBj2D,MAwBT,SAAS86J,EAAc16J,EAAG+e,GACxB,OAAI/e,GAAK,GAAsB,IAAjB+e,EAAMne,QAAgBme,EAAMu4H,MAAc,EACpDv4H,EAAMwxC,WAAmB,EACzBvwD,GAAMA,EAEJ+e,EAAMo6I,SAAWp6I,EAAMne,OAAeme,EAAM4I,OAAO+2H,KAAKn6I,KAAK3D,OAAmBme,EAAMne,QAGxFZ,EAAI+e,EAAM64I,gBAAe74I,EAAM64I,cA3BrC,SAAiC53J,GAc/B,OAbIA,GAFQ,QAGVA,EAHU,SAOVA,IACAA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,EACXA,GAAKA,IAAM,GACXA,KAEKA,EAa4C26J,CAAwB36J,IACvEA,GAAK+e,EAAMne,OAAeZ,EAEzB+e,EAAMu4H,MAIJv4H,EAAMne,QAHXme,EAAMs6I,cAAe,EACd,IA4HX,SAASY,EAAaz3J,GACpB,IAAIuc,EAAQvc,EAAOs1J,eACnB/4I,EAAMs6I,cAAe,EAChBt6I,EAAMu6I,kBACTnB,EAAM,eAAgBp5I,EAAMo6I,SAC5Bp6I,EAAMu6I,iBAAkB,EACpBv6I,EAAMgzI,KAAMkkB,EAAIrmJ,SAASsqI,EAAe13J,GAAa03J,EAAc13J,IAI3E,SAAS03J,EAAc13J,GACrB21J,EAAM,iBACN31J,EAAOiC,KAAK,YACZm2J,EAAKp4J,GASP,SAAS+3J,EAAc/3J,EAAQuc,GACxBA,EAAM66I,cACT76I,EAAM66I,aAAc,EACpBqc,EAAIrmJ,SAASirI,EAAgBr4J,EAAQuc,IAIzC,SAAS87I,EAAer4J,EAAQuc,GAE9B,IADA,IAAIqjB,EAAMrjB,EAAMne,QACRme,EAAMq6I,UAAYr6I,EAAMo6I,UAAYp6I,EAAMu4H,OAASv4H,EAAMne,OAASme,EAAM64I,gBAC9EO,EAAM,wBACN31J,EAAOE,KAAK,GACR0/B,IAAQrjB,EAAMne,SAELwhC,EAAMrjB,EAAMne,OAE3Bme,EAAM66I,aAAc,EAyOtB,SAASmB,EAAiBp7J,GACxBw4J,EAAM,4BACNx4J,EAAK+C,KAAK,GAsBZ,SAASs4J,EAAQx4J,EAAQuc,GAClBA,EAAMq6I,UACTjB,EAAM,iBACN31J,EAAOE,KAAK,IAGdqc,EAAMy6I,iBAAkB,EACxBz6I,EAAM46I,WAAa,EACnBn3J,EAAOiC,KAAK,UACZm2J,EAAKp4J,GACDuc,EAAMo6I,UAAYp6I,EAAMq6I,SAAS52J,EAAOE,KAAK,GAanD,SAASk4J,EAAKp4J,GACZ,IAAIuc,EAAQvc,EAAOs1J,eAEnB,IADAK,EAAM,OAAQp5I,EAAMo6I,SACbp6I,EAAMo6I,SAA6B,OAAlB32J,EAAOE,UAmFjC,SAASu4J,EAASj7J,EAAG+e,GAEnB,OAAqB,IAAjBA,EAAMne,OAAqB,MAG3Bme,EAAMwxC,WAAYqe,EAAM7vD,EAAM4I,OAAOzhB,SAAkBlG,GAAKA,GAAK+e,EAAMne,QAEtDguE,EAAf7vD,EAAMq4C,QAAer4C,EAAM4I,OAAOzb,KAAK,IAAqC,IAAxB6S,EAAM4I,OAAO/mB,OAAoBme,EAAM4I,OAAO+2H,KAAKn6I,KAAgBwa,EAAM4I,OAAOplB,OAAOwc,EAAMne,QACrJme,EAAM4I,OAAO6lH,SAGb5+D,EASJ,SAAyB5uE,EAAGg6F,EAAM8nE,GAChC,IAAIlzF,EACA5uE,EAAIg6F,EAAK0kD,KAAKn6I,KAAK3D,QAErBguE,EAAMorB,EAAK0kD,KAAKn6I,KAAKsZ,MAAM,EAAG7d,GAC9Bg6F,EAAK0kD,KAAKn6I,KAAOy1F,EAAK0kD,KAAKn6I,KAAKsZ,MAAM7d,IAGtC4uE,EAFS5uE,IAAMg6F,EAAK0kD,KAAKn6I,KAAK3D,OAExBo5F,EAAK9zF,QAGL47J,EASV,SAA8B9hK,EAAGg6F,GAC/B,IAAIt5F,EAAIs5F,EAAK0kD,KACTt+I,EAAI,EACJwuE,EAAMluE,EAAE6D,KACZvE,GAAK4uE,EAAIhuE,OACT,KAAOF,EAAIA,EAAE6qB,MAAM,CACjB,IAAI9D,EAAM/mB,EAAE6D,KACR09J,EAAKjiK,EAAIynB,EAAI7mB,OAAS6mB,EAAI7mB,OAASZ,EAGvC,GAFIiiK,IAAOx6I,EAAI7mB,OAAQguE,GAAOnnD,EAASmnD,GAAOnnD,EAAI5J,MAAM,EAAG7d,GAEjD,KADVA,GAAKiiK,GACQ,CACPA,IAAOx6I,EAAI7mB,UACXR,EACEM,EAAE6qB,KAAMyuE,EAAK0kD,KAAOh+I,EAAE6qB,KAAUyuE,EAAK0kD,KAAO1kD,EAAK7S,KAAO,OAE5D6S,EAAK0kD,KAAOh+I,EACZA,EAAE6D,KAAOkjB,EAAI5J,MAAMokJ,IAErB,QAEA7hK,EAGJ,OADA45F,EAAKp5F,QAAUR,EACRwuE,EAhCc2nG,CAAqBv2K,EAAGg6F,GAsC/C,SAAwBh6F,EAAGg6F,GACzB,IAAIprB,EAAMrnD,EAAOm7D,YAAY1iF,GACzBU,EAAIs5F,EAAK0kD,KACTt+I,EAAI,EACRM,EAAE6D,KAAK0I,KAAK2hE,GACZ5uE,GAAKU,EAAE6D,KAAK3D,OACZ,KAAOF,EAAIA,EAAE6qB,MAAM,CACjB,IAAI6C,EAAM1tB,EAAE6D,KACR09J,EAAKjiK,EAAIouB,EAAIxtB,OAASwtB,EAAIxtB,OAASZ,EAGvC,GAFAouB,EAAInhB,KAAK2hE,EAAKA,EAAIhuE,OAASZ,EAAG,EAAGiiK,GAEvB,KADVjiK,GAAKiiK,GACQ,CACPA,IAAO7zI,EAAIxtB,UACXR,EACEM,EAAE6qB,KAAMyuE,EAAK0kD,KAAOh+I,EAAE6qB,KAAUyuE,EAAK0kD,KAAO1kD,EAAK7S,KAAO,OAE5D6S,EAAK0kD,KAAOh+I,EACZA,EAAE6D,KAAO6pB,EAAIvQ,MAAMokJ,IAErB,QAEA7hK,EAGJ,OADA45F,EAAKp5F,QAAUR,EACRwuE,EA9D8C4nG,CAAex2K,EAAGg6F,GAEvE,OAAOprB,EAtBC6nG,CAAgBz2K,EAAG+e,EAAM4I,OAAQ5I,EAAMq4C,SAGxCwX,GAVP,IAAIA,EA4FN,SAASusF,EAAY34J,GACnB,IAAIuc,EAAQvc,EAAOs1J,eAInB,GAAI/4I,EAAMne,OAAS,EAAG,MAAM,IAAIJ,MAAM,8CAEjCue,EAAMg4C,aACTh4C,EAAMu4H,OAAQ,EACd2+B,EAAIrmJ,SAASwrI,EAAer8I,EAAOvc,IAIvC,SAAS44J,EAAcr8I,EAAOvc,GAEvBuc,EAAMg4C,YAA+B,IAAjBh4C,EAAMne,SAC7Bme,EAAMg4C,YAAa,EACnBv0D,EAAOg1J,UAAW,EAClBh1J,EAAOiC,KAAK,QAIhB,SAASylB,EAAQqxI,EAAIjpJ,GACnB,IAAK,IAAInS,EAAI,EAAGkW,EAAIklJ,EAAG36J,OAAQT,EAAIkW,EAAGlW,IACpC,GAAIo7J,EAAGp7J,KAAOmS,EAAG,OAAOnS,EAE1B,OAAQ,EApoBVw6D,EAAS5pC,UAAUruB,KAAO,SAAU1C,GAClCm4J,EAAM,OAAQn4J,GACdA,EAAIotB,SAASptB,EAAG,IAChB,IAAI+e,EAAQnf,KAAKk4J,eACb0D,EAAQx7J,EAOZ,GALU,IAANA,IAAS+e,EAAMu6I,iBAAkB,GAK3B,IAANt5J,GAAW+e,EAAMs6I,eAAiBt6I,EAAMne,QAAUme,EAAM64I,eAAiB74I,EAAMu4H,OAGjF,OAFA6gB,EAAM,qBAAsBp5I,EAAMne,OAAQme,EAAMu4H,OAC3B,IAAjBv4H,EAAMne,QAAgBme,EAAMu4H,MAAO6jB,EAAYv7J,MAAWq6J,EAAar6J,MACpE,KAMT,GAAU,KAHVI,EAAI06J,EAAc16J,EAAG+e,KAGNA,EAAMu4H,MAEnB,OADqB,IAAjBv4H,EAAMne,QAAcu6J,EAAYv7J,MAC7B,KA0BT,IA4BIgvE,EA5BA6sF,EAAS18I,EAAMs6I,aAiDnB,OAhDAlB,EAAM,gBAAiBsD,IAGF,IAAjB18I,EAAMne,QAAgBme,EAAMne,OAASZ,EAAI+e,EAAM64I,gBAEjDO,EAAM,6BADNsD,GAAS,GAMP18I,EAAMu4H,OAASv4H,EAAMq6I,QAEvBjB,EAAM,mBADNsD,GAAS,GAEAA,IACTtD,EAAM,WACNp5I,EAAMq6I,SAAU,EAChBr6I,EAAMgzI,MAAO,EAEQ,IAAjBhzI,EAAMne,SAAcme,EAAMs6I,cAAe,GAE7Cz5J,KAAKo7H,MAAMj8G,EAAM64I,eACjB74I,EAAMgzI,MAAO,EAGRhzI,EAAMq6I,UAASp5J,EAAI06J,EAAcc,EAAOz8I,KAMnC,QAFD6vD,EAAP5uE,EAAI,EAASi7J,EAASj7J,EAAG+e,GAAkB,OAG7CA,EAAMs6I,cAAe,EACrBr5J,EAAI,GAEJ+e,EAAMne,QAAUZ,EAGG,IAAjB+e,EAAMne,SAGHme,EAAMu4H,QAAOv4H,EAAMs6I,cAAe,GAGnCmC,IAAUx7J,GAAK+e,EAAMu4H,OAAO6jB,EAAYv7J,OAGlC,OAARgvE,GAAchvE,KAAK6E,KAAK,OAAQmqE,GAE7BA,GAkETjU,EAAS5pC,UAAUiqG,MAAQ,SAAUh7H,GACnCJ,KAAK6E,KAAK,QAAS,IAAIjE,MAAM,gCAG/Bm6D,EAAS5pC,UAAUrsB,KAAO,SAAUke,EAAM84I,GACxC,IAAI/4I,EAAM/iB,KACNmf,EAAQnf,KAAKk4J,eAEjB,OAAQ/4I,EAAMm6I,YACZ,KAAK,EACHn6I,EAAM2P,MAAQ9L,EACd,MACF,KAAK,EACH7D,EAAM2P,MAAQ,CAAC3P,EAAM2P,MAAO9L,GAC5B,MACF,QACE7D,EAAM2P,MAAMrf,KAAKuT,GAGrB7D,EAAMm6I,YAAc,EACpBf,EAAM,wBAAyBp5I,EAAMm6I,WAAYwC,GAEjD,IAEIC,IAFUD,IAA6B,IAAjBA,EAASv1J,MAAkByc,IAAS+M,EAAQisI,QAAUh5I,IAAS+M,EAAQksI,OAE7EpE,EAAQjnI,EAI5B,SAASsrI,EAAStE,EAAUuE,GAC1B5D,EAAM,YACFX,IAAa70I,GACXo5I,IAAwC,IAA1BA,EAAWC,aAC3BD,EAAWC,YAAa,EAoB5B7D,EAAM,WAENv1I,EAAKgiG,eAAe,QAASq3C,GAC7Br5I,EAAKgiG,eAAe,SAAUs3C,GAC9Bt5I,EAAKgiG,eAAe,QAASu3C,GAC7Bv5I,EAAKgiG,eAAe,QAASme,GAC7BngH,EAAKgiG,eAAe,SAAUk3C,GAC9Bn5I,EAAIiiG,eAAe,MAAO6yC,GAC1B90I,EAAIiiG,eAAe,MAAOp0F,GAC1B7N,EAAIiiG,eAAe,OAAQw3C,GAE3BC,GAAY,GAORt9I,EAAM46I,YAAgB/2I,EAAK80I,iBAAkB90I,EAAK80I,eAAe4E,WAAYH,KAhCnF,SAAS1E,IACPU,EAAM,SACNv1I,EAAKzc,MAfH4Y,EAAMg4C,WAAYk/G,EAAIrmJ,SAAS+rI,GAAYh5I,EAAIgjG,KAAK,MAAOg2C,GAE/D/4I,EAAKte,GAAG,SAAUw3J,GAoBlB,IAAIK,EA4FN,SAAqBx5I,GACnB,OAAO,WACL,IAAI5D,EAAQ4D,EAAIm1I,eAChBK,EAAM,cAAep5I,EAAM46I,YACvB56I,EAAM46I,YAAY56I,EAAM46I,aACH,IAArB56I,EAAM46I,YAAoB1B,EAAgBt1I,EAAK,UACjD5D,EAAMo6I,SAAU,EAChByB,EAAKj4I,KAnGK45I,CAAY55I,GAC1BC,EAAKte,GAAG,QAAS63J,GAEjB,IAAIE,GAAY,EA2BhB,IAAIqa,GAAsB,EAE1B,SAASta,EAAOh1I,GACd+wI,EAAM,UACNue,GAAsB,GAElB,IADM9zJ,EAAK5c,MAAMohB,IACCsvJ,KAKM,IAArB33J,EAAMm6I,YAAoBn6I,EAAM2P,QAAU9L,GAAQ7D,EAAMm6I,WAAa,IAAqC,IAAhChvI,EAAQnL,EAAM2P,MAAO9L,MAAkBy5I,IACpHlE,EAAM,8BAA+Bx1I,EAAIm1I,eAAe6B,YACxDh3I,EAAIm1I,eAAe6B,aACnB+c,GAAsB,GAExB/zJ,EAAIyN,SAMR,SAAS2yG,EAAQxd,GACf4yC,EAAM,UAAW5yC,GACjB/0F,IACA5N,EAAKgiG,eAAe,QAASme,GACU,IAAnCk1B,EAAgBr1I,EAAM,UAAgBA,EAAKne,KAAK,QAAS8gH,GAO/D,SAAS02C,IACPr5I,EAAKgiG,eAAe,SAAUs3C,GAC9B1rI,IAGF,SAAS0rI,IACP/D,EAAM,YACNv1I,EAAKgiG,eAAe,QAASq3C,GAC7BzrI,IAIF,SAASA,IACP2nI,EAAM,UACNx1I,EAAI6N,OAAO5N,GAYb,OA1DAD,EAAIre,GAAG,OAAQ83J,GA9gBjB,SAAyB33C,EAAS/sD,EAAOqrD,GAGvC,GAAuC,mBAA5B0B,EAAQiB,gBAAgC,OAAOjB,EAAQiB,gBAAgBhuD,EAAOqrD,GAMpF0B,EAAQzB,SAAYyB,EAAQzB,QAAQtrD,GAAuC9yC,EAAQ6/F,EAAQzB,QAAQtrD,IAAS+sD,EAAQzB,QAAQtrD,GAAOjnC,QAAQsyF,GAAS0B,EAAQzB,QAAQtrD,GAAS,CAACqrD,EAAI0B,EAAQzB,QAAQtrD,IAAtJ+sD,EAAQngH,GAAGozD,EAAOqrD,GAkiBnE2C,CAAgB9iG,EAAM,QAASmgH,GAO/BngH,EAAK+iG,KAAK,QAASs2C,GAMnBr5I,EAAK+iG,KAAK,SAAUu2C,GAQpBt5I,EAAKne,KAAK,OAAQke,GAGb5D,EAAMo6I,UACThB,EAAM,eACNx1I,EAAI0N,UAGCzN,GAeT+3C,EAAS5pC,UAAUP,OAAS,SAAU5N,GACpC,IAAI7D,EAAQnf,KAAKk4J,eACbiE,EAAa,CAAEC,YAAY,GAG/B,GAAyB,IAArBj9I,EAAMm6I,WAAkB,OAAOt5J,KAGnC,GAAyB,IAArBmf,EAAMm6I,WAER,OAAIt2I,GAAQA,IAAS7D,EAAM2P,QAEtB9L,IAAMA,EAAO7D,EAAM2P,OAGxB3P,EAAM2P,MAAQ,KACd3P,EAAMm6I,WAAa,EACnBn6I,EAAMo6I,SAAU,EACZv2I,GAAMA,EAAKne,KAAK,SAAU7E,KAAMm8J,IARKn8J,KAc3C,IAAKgjB,EAAM,CAET,IAAI45I,EAAQz9I,EAAM2P,MACd0T,EAAMrjB,EAAMm6I,WAChBn6I,EAAM2P,MAAQ,KACd3P,EAAMm6I,WAAa,EACnBn6I,EAAMo6I,SAAU,EAEhB,IAAK,IAAIh5J,EAAI,EAAGA,EAAIiiC,EAAKjiC,IACvBq8J,EAAMr8J,GAAGsE,KAAK,SAAU7E,KAAMm8J,GAC/B,OAAOn8J,KAIV,IAAIkP,EAAQob,EAAQnL,EAAM2P,MAAO9L,GACjC,OAAe,IAAX9T,IAEJiQ,EAAM2P,MAAMvT,OAAOrM,EAAO,GAC1BiQ,EAAMm6I,YAAc,EACK,IAArBn6I,EAAMm6I,aAAkBn6I,EAAM2P,MAAQ3P,EAAM2P,MAAM,IAEtD9L,EAAKne,KAAK,SAAU7E,KAAMm8J,IANDn8J,MAa3B+6D,EAAS5pC,UAAUzsB,GAAK,SAAUm4J,EAAI15C,GACpC,IAAIhtD,EAAM1oC,EAAO0D,UAAUzsB,GAAG3D,KAAKf,KAAM68J,EAAI15C,GAE7C,GAAW,SAAP05C,GAEkC,IAAhC78J,KAAKk4J,eAAeqB,SAAmBv5J,KAAKywB,cAC3C,GAAW,aAAPosI,EAAmB,CAC5B,IAAI19I,EAAQnf,KAAKk4J,eACZ/4I,EAAMg4C,YAAeh4C,EAAMw6I,oBAC9Bx6I,EAAMw6I,kBAAoBx6I,EAAMs6I,cAAe,EAC/Ct6I,EAAMu6I,iBAAkB,EACnBv6I,EAAMq6I,QAEAr6I,EAAMne,QACfq5J,EAAar6J,MAFbq2K,EAAIrmJ,SAASmrI,EAAkBn7J,OAOrC,OAAOm2D,GAET4E,EAAS5pC,UAAU00F,YAAc9qD,EAAS5pC,UAAUzsB,GASpDq2D,EAAS5pC,UAAUV,OAAS,WAC1B,IAAItR,EAAQnf,KAAKk4J,eAMjB,OALK/4I,EAAMo6I,UACThB,EAAM,UACNp5I,EAAMo6I,SAAU,EAMpB,SAAgB32J,EAAQuc,GACjBA,EAAMy6I,kBACTz6I,EAAMy6I,iBAAkB,EACxByc,EAAIrmJ,SAASorI,EAASx4J,EAAQuc,IAR9BsR,CAAOzwB,KAAMmf,IAERnf,MAuBT+6D,EAAS5pC,UAAUX,MAAQ,WAOzB,OANA+nI,EAAM,wBAAyBv4J,KAAKk4J,eAAeqB,UAC/C,IAAUv5J,KAAKk4J,eAAeqB,UAChChB,EAAM,SACNv4J,KAAKk4J,eAAeqB,SAAU,EAC9Bv5J,KAAK6E,KAAK,UAEL7E,MAYT+6D,EAAS5pC,UAAU3F,KAAO,SAAU5oB,GAClC,IAAII,EAAQhD,KAERmf,EAAQnf,KAAKk4J,eACbnpI,GAAS,EA4Bb,IAAK,IAAIxuB,KA1BTqC,EAAO8B,GAAG,OAAO,WAEf,GADA6zJ,EAAM,eACFp5I,EAAMq4C,UAAYr4C,EAAMu4H,MAAO,CACjC,IAAIlwH,EAAQrI,EAAMq4C,QAAQjxD,MACtBihB,GAASA,EAAMxmB,QAAQgC,EAAMyM,KAAK+X,GAGxCxkB,EAAMyM,KAAK,SAGb7M,EAAO8B,GAAG,QAAQ,SAAU8iB,IAC1B+wI,EAAM,gBACFp5I,EAAMq4C,UAAShwC,EAAQrI,EAAMq4C,QAAQpxD,MAAMohB,IAG3CrI,EAAMwxC,YAAN,MAAqBnpC,KAAyDrI,EAAMwxC,YAAgBnpC,GAAUA,EAAMxmB,UAE9GgC,EAAMyM,KAAK+X,KAEnBuH,GAAS,EACTnsB,EAAO4tB,aAMG5tB,OACI0B,IAAZtE,KAAKO,IAAyC,mBAAdqC,EAAOrC,KACzCP,KAAKO,GAAK,SAAUyjE,GAClB,OAAO,WACL,OAAOphE,EAAOohE,GAAQ3hD,MAAMzf,EAAQmE,YAF9B,CAIRxG,IAKN,IAAK,IAAIH,EAAI,EAAGA,EAAIg5J,EAAap4J,OAAQZ,IACvCwC,EAAO8B,GAAG00J,EAAah5J,GAAIJ,KAAK6E,KAAKo+G,KAAKjjH,KAAMo5J,EAAah5J,KAa/D,OARAJ,KAAKo7H,MAAQ,SAAUh7H,GACrBm4J,EAAM,gBAAiBn4J,GACnB2uB,IACFA,GAAS,EACTnsB,EAAO6tB,WAIJzwB,MAGTkW,OAAOgd,eAAe6nC,EAAS5pC,UAAW,wBAAyB,CAIjEiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAKk4J,eAAeF,iBAK/Bj9F,EAAS+hG,UAAYzB,uaC1zBrB,aAEA37J,EAAOD,QAAU2xD,EAEjB,IAAIniC,EAASxuB,EAAQ,oBAGjB61K,EAAOpgK,OAAOnN,OAAOtI,EAAQ,iBAMjC,SAASy8J,EAAev3C,EAAIhhH,GAC1B,IAAIw4J,EAAKn9J,KAAKo9J,gBACdD,EAAGE,cAAe,EAElB,IAAIpmJ,EAAKkmJ,EAAGG,QAEZ,IAAKrmJ,EACH,OAAOjX,KAAK6E,KAAK,QAAS,IAAIjE,MAAM,yCAGtCu8J,EAAGI,WAAa,KAChBJ,EAAGG,QAAU,KAED,MAAR34J,GACF3E,KAAKyP,KAAK9K,GAEZsS,EAAG0uG,GAEH,IAAI7qD,EAAK96D,KAAKk4J,eACdp9F,EAAG0+F,SAAU,GACT1+F,EAAG2+F,cAAgB3+F,EAAG95D,OAAS85D,EAAGk9F,gBACpCh4J,KAAKo7H,MAAMtgE,EAAGk9F,eAIlB,SAAS5mG,EAAU1uD,GACjB,KAAM1C,gBAAgBoxD,GAAY,OAAO,IAAIA,EAAU1uD,GAEvDusB,EAAOluB,KAAKf,KAAM0C,GAElB1C,KAAKo9J,gBAAkB,CACrBF,eAAgBA,EAAej6C,KAAKjjH,MACpCw9J,eAAe,EACfH,cAAc,EACdC,QAAS,KACTC,WAAY,KACZE,cAAe,MAIjBz9J,KAAKk4J,eAAeuB,cAAe,EAKnCz5J,KAAKk4J,eAAe/F,MAAO,EAEvBzvJ,IAC+B,mBAAtBA,EAAQoxD,YAA0B9zD,KAAKi+F,WAAav7F,EAAQoxD,WAE1C,mBAAlBpxD,EAAQunF,QAAsBjqF,KAAKmwB,OAASztB,EAAQunF,QAIjEjqF,KAAK0E,GAAG,YAAag5J,GAGvB,SAASA,IACP,IAAI16J,EAAQhD,KAEe,mBAAhBA,KAAKmwB,OACdnwB,KAAKmwB,QAAO,SAAUw1F,EAAIhhH,GACxBwnB,EAAKnpB,EAAO2iH,EAAIhhH,MAGlBwnB,EAAKnsB,KAAM,KAAM,MA2DrB,SAASmsB,EAAKvpB,EAAQ+iH,EAAIhhH,GACxB,GAAIghH,EAAI,OAAO/iH,EAAOiC,KAAK,QAAS8gH,GAOpC,GALY,MAARhhH,GACF/B,EAAO6M,KAAK9K,GAIV/B,EAAOk1J,eAAe92J,OAAQ,MAAM,IAAIJ,MAAM,8CAElD,GAAIgC,EAAOw6J,gBAAgBC,aAAc,MAAM,IAAIz8J,MAAM,kDAEzD,OAAOgC,EAAO6M,KAAK,MA7IrB6mK,EAAKtnJ,SAAWvuB,EAAQ,YAGxB61K,EAAKtnJ,SAASoiC,EAAWniC,GAuEzBmiC,EAAUjgC,UAAU1hB,KAAO,SAAU+X,EAAO/gB,GAE1C,OADAzG,KAAKo9J,gBAAgBI,eAAgB,EAC9BvuI,EAAOkC,UAAU1hB,KAAK1O,KAAKf,KAAMwnB,EAAO/gB,IAajD2qD,EAAUjgC,UAAU8sE,WAAa,SAAUz2E,EAAO/gB,EAAUwQ,GAC1D,MAAM,IAAIrW,MAAM,oCAGlBwwD,EAAUjgC,UAAU+hE,OAAS,SAAU1rE,EAAO/gB,EAAUwQ,GACtD,IAAIkmJ,EAAKn9J,KAAKo9J,gBAId,GAHAD,EAAGG,QAAUrmJ,EACbkmJ,EAAGI,WAAa/1I,EAChB21I,EAAGM,cAAgBh3J,GACd02J,EAAGE,aAAc,CACpB,IAAIviG,EAAK96D,KAAKk4J,gBACViF,EAAGK,eAAiB1iG,EAAG2+F,cAAgB3+F,EAAG95D,OAAS85D,EAAGk9F,gBAAeh4J,KAAKo7H,MAAMtgE,EAAGk9F,iBAO3F5mG,EAAUjgC,UAAUiqG,MAAQ,SAAUh7H,GACpC,IAAI+8J,EAAKn9J,KAAKo9J,gBAEQ,OAAlBD,EAAGI,YAAuBJ,EAAGG,UAAYH,EAAGE,cAC9CF,EAAGE,cAAe,EAClBr9J,KAAKi+F,WAAWk/D,EAAGI,WAAYJ,EAAGM,cAAeN,EAAGD,iBAIpDC,EAAGK,eAAgB,GAIvBpsG,EAAUjgC,UAAU8oI,SAAW,SAAUnuI,EAAK7U,GAC5C,IAAIlS,EAAS/E,KAEbivB,EAAOkC,UAAU8oI,SAASl5J,KAAKf,KAAM8rB,GAAK,SAAU6xI,GAClD1mJ,EAAG0mJ,GACH54J,EAAOF,KAAK,8GC3KhB,aAIA,IAAIwxK,EAAM51K,EAAQ,wBAelB,SAASm9J,EAAcz+I,GACrB,IAAInc,EAAQhD,KAEZA,KAAK2rB,KAAO,KACZ3rB,KAAK+qD,MAAQ,KACb/qD,KAAKssB,OAAS,YAolBhB,SAAwBuxI,EAAS1+I,EAAO2M,GACtC,IAAIi/B,EAAQ8yG,EAAQ9yG,MACpB8yG,EAAQ9yG,MAAQ,KAChB,KAAOA,GAAO,CACZ,IAAI9zC,EAAK8zC,EAAM14C,SACf8M,EAAM2+I,YACN7mJ,EAAG6U,GACHi/B,EAAQA,EAAMp/B,KAEZxM,EAAM4+I,mBACR5+I,EAAM4+I,mBAAmBpyI,KAAOkyI,EAEhC1+I,EAAM4+I,mBAAqBF,EA/lB3BG,CAAeh7J,EAAOmc,IAlB1Bzf,EAAOD,QAAUu2D,EAwBjB,IAII/mC,EAJA8nJ,GAAchnJ,EAAQ8G,SAAW,CAAC,QAAS,SAASvM,QAAQyF,EAAQqG,QAAQnY,MAAM,EAAG,KAAO,EAAI2U,EAAeyjJ,EAAIrmJ,SAOvHgmC,EAASioG,cAAgBA,EAGzB,IAAIqY,EAAOpgK,OAAOnN,OAAOtI,EAAQ,iBACjC61K,EAAKtnJ,SAAWvuB,EAAQ,YAIxB,IAAIy9J,EAAe,CACjBC,UAAW19J,EAAQ,mBAKjBgtB,EAAShtB,EAAQ,6BAKjBknB,EAASlnB,EAAQ,eAAeknB,OAChC2wI,EAAgBx4J,EAAO2iF,YAAc,aAUzC,IA2II27E,EA3IAxF,EAAcn4J,EAAQ,8BAI1B,SAASovB,KAET,SAASouI,EAAcv7J,EAASE,GAC9BqsB,EAASA,GAAUxuB,EAAQ,oBAE3BiC,EAAUA,GAAW,GAOrB,IAAI22J,EAAWz2J,aAAkBqsB,EAIjCjvB,KAAK2wD,aAAejuD,EAAQiuD,WAExB0oG,IAAUr5J,KAAK2wD,WAAa3wD,KAAK2wD,cAAgBjuD,EAAQgpD,oBAK7D,IAAIs4G,EAAMthK,EAAQs1J,cACdgf,EAAct0K,EAAQu0K,sBACtBR,EAAaz2K,KAAK2wD,WAAa,GAAK,MAElB3wD,KAAKg4J,cAAvBgM,GAAe,IAARA,EAAgCA,EAAa3K,IAAa2d,GAA+B,IAAhBA,GAAyCA,EAAsCP,EAGnKz2K,KAAKg4J,cAAgBxwJ,KAAKI,MAAM5H,KAAKg4J,eAGrCh4J,KAAK0+J,aAAc,EAGnB1+J,KAAK08J,WAAY,EAEjB18J,KAAK2+J,QAAS,EAEd3+J,KAAK03I,OAAQ,EAEb13I,KAAK07J,UAAW,EAGhB17J,KAAKm4J,WAAY,EAKjB,IAAIyG,GAAqC,IAA1Bl8J,EAAQm8J,cACvB7+J,KAAK6+J,eAAiBD,EAKtB5+J,KAAKkyJ,gBAAkBxvJ,EAAQwvJ,iBAAmB,OAKlDlyJ,KAAKgB,OAAS,EAGdhB,KAAK8+J,SAAU,EAGf9+J,KAAK2uB,OAAS,EAMd3uB,KAAKmyJ,MAAO,EAKZnyJ,KAAK++J,kBAAmB,EAGxB/+J,KAAKg/J,QAAU,SAAUr5C,IA4R3B,SAAiB/iH,EAAQ+iH,GACvB,IAAIxmG,EAAQvc,EAAOk1J,eACf3F,EAAOhzI,EAAMgzI,KACbl7I,EAAKkI,EAAMm+I,QAIf,GAdF,SAA4Bn+I,GAC1BA,EAAM2/I,SAAU,EAChB3/I,EAAMm+I,QAAU,KAChBn+I,EAAMne,QAAUme,EAAM8/I,SACtB9/I,EAAM8/I,SAAW,EAQjBC,CAAmB//I,GAEfwmG,GAtCN,SAAsB/iH,EAAQuc,EAAOgzI,EAAMxsC,EAAI1uG,KAC3CkI,EAAM2+I,UAEJ3L,GAGFkkB,EAAIrmJ,SAAS/Y,EAAI0uG,GAGjB0wD,EAAIrmJ,SAASmvI,EAAav8J,EAAQuc,GAClCvc,EAAOk1J,eAAesH,cAAe,EACrCx8J,EAAOiC,KAAK,QAAS8gH,KAIrB1uG,EAAG0uG,GACH/iH,EAAOk1J,eAAesH,cAAe,EACrCx8J,EAAOiC,KAAK,QAAS8gH,GAGrBw5C,EAAYv8J,EAAQuc,IAkBdkgJ,CAAaz8J,EAAQuc,EAAOgzI,EAAMxsC,EAAI1uG,OAAS,CAErD,IAAIykJ,EAAW4D,EAAWngJ,GAErBu8I,GAAav8I,EAAMwP,QAAWxP,EAAM4/I,mBAAoB5/I,EAAMogJ,iBACjEC,EAAY58J,EAAQuc,GAGlBgzI,EAEF4kB,EAAWtX,EAAY78J,EAAQuc,EAAOu8I,EAAUzkJ,GAGhDwoJ,EAAW78J,EAAQuc,EAAOu8I,EAAUzkJ,IA/StC+nJ,CAAQp8J,EAAQ+iH,IAIlB3lH,KAAKs9J,QAAU,KAGft9J,KAAKi/J,SAAW,EAEhBj/J,KAAKu/J,gBAAkB,KACvBv/J,KAAK0/J,oBAAsB,KAI3B1/J,KAAK89J,UAAY,EAIjB99J,KAAK2/J,aAAc,EAGnB3/J,KAAKo/J,cAAe,EAGpBp/J,KAAK4/J,qBAAuB,EAI5B5/J,KAAK+9J,mBAAqB,IAAIH,EAAc59J,MA0C9C,SAASg2D,EAAStzD,GAUhB,GATAusB,EAASA,GAAUxuB,EAAQ,sBAStB29J,EAAgBr9J,KAAKi1D,EAAUh2D,OAAWA,gBAAgBivB,GAC7D,OAAO,IAAI+mC,EAAStzD,GAGtB1C,KAAK83J,eAAiB,IAAImG,EAAcv7J,EAAS1C,MAGjDA,KAAKqzB,UAAW,EAEZ3wB,IAC2B,mBAAlBA,EAAQ0D,QAAsBpG,KAAKkzF,OAASxwF,EAAQ0D,OAEjC,mBAAnB1D,EAAQm9J,SAAuB7/J,KAAK8/J,QAAUp9J,EAAQm9J,QAElC,mBAApBn9J,EAAQgb,UAAwB1d,KAAKi6J,SAAWv3J,EAAQgb,SAEtC,mBAAlBhb,EAAQ2lF,QAAsBroF,KAAKooF,OAAS1lF,EAAQ2lF,QAGjE56D,EAAO1sB,KAAKf,MAgJd,SAAS+/J,EAAQn9J,EAAQuc,EAAO0gJ,EAAQr9H,EAAKhb,EAAO/gB,EAAUwQ,GAC5DkI,EAAM8/I,SAAWz8H,EACjBrjB,EAAMm+I,QAAUrmJ,EAChBkI,EAAM2/I,SAAU,EAChB3/I,EAAMgzI,MAAO,EACT0N,EAAQj9J,EAAOk9J,QAAQt4I,EAAOrI,EAAM6/I,SAAcp8J,EAAOswF,OAAO1rE,EAAO/gB,EAAU0Y,EAAM6/I,SAC3F7/I,EAAMgzI,MAAO,EA2Df,SAASsN,EAAW78J,EAAQuc,EAAOu8I,EAAUzkJ,GACtCykJ,GASP,SAAsB94J,EAAQuc,GACP,IAAjBA,EAAMne,QAAgBme,EAAMu9I,YAC9Bv9I,EAAMu9I,WAAY,EAClB95J,EAAOiC,KAAK,UAZCm7J,CAAap9J,EAAQuc,GACpCA,EAAM2+I,YACN7mJ,IACAkoJ,EAAYv8J,EAAQuc,GActB,SAASqgJ,EAAY58J,EAAQuc,GAC3BA,EAAM4/I,kBAAmB,EACzB,IAAIh0G,EAAQ5rC,EAAMogJ,gBAElB,GAAI38J,EAAOk9J,SAAW/0G,GAASA,EAAMp/B,KAAM,CAEzC,IAAIlV,EAAI0I,EAAMygJ,qBACV73I,EAAS,IAAIvX,MAAMiG,GACnBwpJ,EAAS9gJ,EAAM4+I,mBACnBkC,EAAOl1G,MAAQA,EAIf,IAFA,IAAIr7C,EAAQ,EACRwwJ,GAAa,EACVn1G,GACLhjC,EAAOrY,GAASq7C,EACXA,EAAMo1G,QAAOD,GAAa,GAC/Bn1G,EAAQA,EAAMp/B,KACdjc,GAAS,EAEXqY,EAAOm4I,WAAaA,EAEpBH,EAAQn9J,EAAQuc,GAAO,EAAMA,EAAMne,OAAQ+mB,EAAQ,GAAIk4I,EAAO3zI,QAI9DnN,EAAM2+I,YACN3+I,EAAMugJ,oBAAsB,KACxBO,EAAOt0I,MACTxM,EAAM4+I,mBAAqBkC,EAAOt0I,KAClCs0I,EAAOt0I,KAAO,MAEdxM,EAAM4+I,mBAAqB,IAAIH,EAAcz+I,GAE/CA,EAAMygJ,qBAAuB,MACxB,CAEL,KAAO70G,GAAO,CACZ,IAAIvjC,EAAQujC,EAAMvjC,MACd/gB,EAAWskD,EAAMtkD,SACjBwQ,EAAK8zC,EAAM14C,SAUf,GAPA0tJ,EAAQn9J,EAAQuc,GAAO,EAFbA,EAAMwxC,WAAa,EAAInpC,EAAMxmB,OAEJwmB,EAAO/gB,EAAUwQ,GACpD8zC,EAAQA,EAAMp/B,KACdxM,EAAMygJ,uBAKFzgJ,EAAM2/I,QACR,MAIU,OAAV/zG,IAAgB5rC,EAAMugJ,oBAAsB,MAGlDvgJ,EAAMogJ,gBAAkBx0G,EACxB5rC,EAAM4/I,kBAAmB,EAiC3B,SAASO,EAAWngJ,GAClB,OAAOA,EAAMw/I,QAA2B,IAAjBx/I,EAAMne,QAA0C,OAA1Bme,EAAMogJ,kBAA6BpgJ,EAAMu8I,WAAav8I,EAAM2/I,QAE3G,SAASsB,EAAUx9J,EAAQuc,GACzBvc,EAAOwlF,QAAO,SAAUt8D,GACtB3M,EAAM2+I,YACFhyI,GACFlpB,EAAOiC,KAAK,QAASinB,GAEvB3M,EAAMwgJ,aAAc,EACpB/8J,EAAOiC,KAAK,aACZs6J,EAAYv8J,EAAQuc,MAgBxB,SAASggJ,EAAYv8J,EAAQuc,GAC3B,IAAIkhJ,EAAOf,EAAWngJ,GAQtB,OAPIkhJ,KAfN,SAAmBz9J,EAAQuc,GACpBA,EAAMwgJ,aAAgBxgJ,EAAMu/I,cACF,mBAAlB97J,EAAOwlF,QAChBjpE,EAAM2+I,YACN3+I,EAAMu/I,aAAc,EACpB2X,EAAIrmJ,SAASowI,EAAWx9J,EAAQuc,KAEhCA,EAAMwgJ,aAAc,EACpB/8J,EAAOiC,KAAK,eAQd64J,CAAU96J,EAAQuc,GACM,IAApBA,EAAM2+I,YACR3+I,EAAMu8I,UAAW,EACjB94J,EAAOiC,KAAK,YAGTw7J,EAzhBTiW,EAAKtnJ,SAASgnC,EAAUvoC,GAmHxBwwI,EAAc9sI,UAAU8mI,UAAY,WAGlC,IAFA,IAAI52E,EAAUrhF,KAAKu/J,gBACfx8F,EAAM,GACHse,GACLte,EAAItzD,KAAK4xE,GACTA,EAAUA,EAAQ11D,KAEpB,OAAOo3C,GAGT,WACE,IACE7sD,OAAOgd,eAAe+qI,EAAc9sI,UAAW,SAAU,CACvDo2B,IAAK22G,EAAaC,WAAU,WAC1B,OAAOn+J,KAAKi4J,cACX,6EAAmF,aAExF,MAAO9vJ,KAPX,GAasB,mBAAXyjB,QAAyBA,OAAO20I,aAAiE,mBAA3Cz6I,SAASqL,UAAUvF,OAAO20I,cACzFnC,EAAkBt4I,SAASqL,UAAUvF,OAAO20I,aAC5CrqJ,OAAOgd,eAAe8iC,EAAUpqC,OAAO20I,YAAa,CAClDh7J,MAAO,SAAUkxD,GACf,QAAI2nG,EAAgBr9J,KAAKf,KAAMy2D,IAC3Bz2D,OAASg2D,IAENS,GAAUA,EAAOqhG,0BAA0BmG,OAItDG,EAAkB,SAAU3nG,GAC1B,OAAOA,aAAkBz2D,MAqC7Bg2D,EAAS7kC,UAAUrsB,KAAO,WACxB9E,KAAK6E,KAAK,QAAS,IAAIjE,MAAM,+BA8B/Bo1D,EAAS7kC,UAAU/qB,MAAQ,SAAUohB,EAAO/gB,EAAUwQ,GACpD,IAnOqBoa,EAmOjBlS,EAAQnf,KAAK83J,eACb9oF,GAAM,EACNmxF,GAAShhJ,EAAMwxC,aArOEt/B,EAqO0B7J,EApOxCG,EAAOs6C,SAAS5wC,IAAQA,aAAeinI,GAwP9C,OAlBI6H,IAAUx4I,EAAOs6C,SAASz6C,KAC5BA,EA3OJ,SAA6BA,GAC3B,OAAOG,EAAOG,KAAKN,GA0OTizI,CAAoBjzI,IAGN,mBAAb/gB,IACTwQ,EAAKxQ,EACLA,EAAW,MAGT05J,EAAO15J,EAAW,SAAmBA,IAAUA,EAAW0Y,EAAM+yI,iBAElD,mBAAPj7I,IAAmBA,EAAK4Y,GAE/B1Q,EAAMu4H,MA7CZ,SAAuB90I,EAAQqU,GAC7B,IAAI0uG,EAAK,IAAI/kH,MAAM,mBAEnBgC,EAAOiC,KAAK,QAAS8gH,GACrB0wD,EAAIrmJ,SAAS/Y,EAAI0uG,GAyCA66C,CAAcxgK,KAAMiX,IAAakpJ,GAnCpD,SAAoBv9J,EAAQuc,EAAOqI,EAAOvQ,GACxC,IAAI2qC,GAAQ,EACR+jE,GAAK,EAYT,OAVc,OAAVn+F,EACFm+F,EAAK,IAAIt1D,UAAU,uCACO,iBAAV7oC,QAAgCljB,IAAVkjB,GAAwBrI,EAAMwxC,aACpEg1D,EAAK,IAAIt1D,UAAU,oCAEjBs1D,IACF/iH,EAAOiC,KAAK,QAAS8gH,GACrB0wD,EAAIrmJ,SAAS/Y,EAAI0uG,GACjB/jE,GAAQ,GAEHA,EAqBoD6+G,CAAWzgK,KAAMmf,EAAOqI,EAAOvQ,MACxFkI,EAAM2+I,YACN9uF,EAkDJ,SAAuBpsE,EAAQuc,EAAOghJ,EAAO34I,EAAO/gB,EAAUwQ,GAC5D,IAAKkpJ,EAAO,CACV,IAAIO,EAtBR,SAAqBvhJ,EAAOqI,EAAO/gB,GAC5B0Y,EAAMwxC,aAAsC,IAAxBxxC,EAAM0/I,eAA4C,iBAAVr3I,IAC/DA,EAAQG,EAAOG,KAAKN,EAAO/gB,IAE7B,OAAO+gB,EAkBUm5I,CAAYxhJ,EAAOqI,EAAO/gB,GACrC+gB,IAAUk5I,IACZP,GAAQ,EACR15J,EAAW,SACX+gB,EAAQk5I,GAGZ,IAAIl+H,EAAMrjB,EAAMwxC,WAAa,EAAInpC,EAAMxmB,OAEvCme,EAAMne,QAAUwhC,EAEhB,IAAIwsC,EAAM7vD,EAAMne,OAASme,EAAM64I,cAE1BhpF,IAAK7vD,EAAMu9I,WAAY,GAE5B,GAAIv9I,EAAM2/I,SAAW3/I,EAAMwP,OAAQ,CACjC,IAAIS,EAAOjQ,EAAMugJ,oBACjBvgJ,EAAMugJ,oBAAsB,CAC1Bl4I,MAAOA,EACP/gB,SAAUA,EACV05J,MAAOA,EACP9tJ,SAAU4E,EACV0U,KAAM,MAEJyD,EACFA,EAAKzD,KAAOxM,EAAMugJ,oBAElBvgJ,EAAMogJ,gBAAkBpgJ,EAAMugJ,oBAEhCvgJ,EAAMygJ,sBAAwB,OAE9BG,EAAQn9J,EAAQuc,GAAO,EAAOqjB,EAAKhb,EAAO/gB,EAAUwQ,GAGtD,OAAO+3D,EAtFC4xF,CAAc5gK,KAAMmf,EAAOghJ,EAAO34I,EAAO/gB,EAAUwQ,IAGpD+3D,GAGThZ,EAAS7kC,UAAUjB,KAAO,WACZlwB,KAAK83J,eAEXnpI,UAGRqnC,EAAS7kC,UAAUf,OAAS,WAC1B,IAAIjR,EAAQnf,KAAK83J,eAEb34I,EAAMwP,SACRxP,EAAMwP,SAEDxP,EAAM2/I,SAAY3/I,EAAMwP,QAAWxP,EAAMu8I,UAAav8I,EAAM4/I,mBAAoB5/I,EAAMogJ,iBAAiBC,EAAYx/J,KAAMmf,KAIlI62C,EAAS7kC,UAAU0vI,mBAAqB,SAA4Bp6J,GAGlE,GADwB,iBAAbA,IAAuBA,EAAWA,EAASuW,iBAChD,CAAC,MAAO,OAAQ,QAAS,QAAS,SAAU,SAAU,OAAQ,QAAS,UAAW,WAAY,OAAOsN,SAAS7jB,EAAW,IAAIuW,gBAAkB,GAAI,MAAM,IAAIqzC,UAAU,qBAAuB5pD,GAEpM,OADAzG,KAAK83J,eAAe5F,gBAAkBzrJ,EAC/BzG,MAUTkW,OAAOgd,eAAe8iC,EAAS7kC,UAAW,wBAAyB,CAIjEiC,YAAY,EACZm0B,IAAK,WACH,OAAOvnD,KAAK83J,eAAeE,iBA8L/BhiG,EAAS7kC,UAAU+hE,OAAS,SAAU1rE,EAAO/gB,EAAUwQ,GACrDA,EAAG,IAAIrW,MAAM,iCAGfo1D,EAAS7kC,UAAU2uI,QAAU,KAE7B9pG,EAAS7kC,UAAU5qB,IAAM,SAAUihB,EAAO/gB,EAAUwQ,GAClD,IAAIkI,EAAQnf,KAAK83J,eAEI,mBAAVtwI,GACTvQ,EAAKuQ,EACLA,EAAQ,KACR/gB,EAAW,MACkB,mBAAbA,IAChBwQ,EAAKxQ,EACLA,EAAW,MAGT+gB,MAAAA,GAAuCxnB,KAAKoG,MAAMohB,EAAO/gB,GAGzD0Y,EAAMwP,SACRxP,EAAMwP,OAAS,EACf3uB,KAAKowB,UAIFjR,EAAMw/I,QAAWx/I,EAAMu8I,UA0C9B,SAAqB94J,EAAQuc,EAAOlI,GAClCkI,EAAMw/I,QAAS,EACfQ,EAAYv8J,EAAQuc,GAChBlI,IACEkI,EAAMu8I,SAAU2a,EAAIrmJ,SAAS/Y,GAASrU,EAAOmjH,KAAK,SAAU9uG,IAElEkI,EAAMu4H,OAAQ,EACd90I,EAAOywB,UAAW,EAjDoBytI,CAAY9gK,KAAMmf,EAAOlI,IAoEjEf,OAAOgd,eAAe8iC,EAAS7kC,UAAW,YAAa,CACrDo2B,IAAK,WACH,YAA4BjjD,IAAxBtE,KAAK83J,gBAGF93J,KAAK83J,eAAeK,WAE7B1wG,IAAK,SAAUliD,GAGRvF,KAAK83J,iBAMV93J,KAAK83J,eAAeK,UAAY5yJ,MAIpCywD,EAAS7kC,UAAUzT,QAAUk7I,EAAYl7I,QACzCs4C,EAAS7kC,UAAUypI,WAAahC,EAAYiC,UAC5C7kG,EAAS7kC,UAAU8oI,SAAW,SAAUnuI,EAAK7U,GAC3CjX,KAAKuG,MACL0Q,EAAG6U,wYC7qBL,aAIA,IAAInE,EAASlnB,EAAQ,eAAeknB,OAChC2uJ,EAAO71K,EAAQ,QAMnBf,EAAOD,QAAU,WACf,SAASk5J,KAVX,SAAyBjoG,EAAUH,GAAe,KAAMG,aAAoBH,GAAgB,MAAM,IAAIF,UAAU,qCAW5G9tD,CAAgBvC,KAAM24J,GAEtB34J,KAAK8+I,KAAO,KACZ9+I,KAAKunF,KAAO,KACZvnF,KAAKgB,OAAS,EAqDhB,OAlDA23J,EAAWxnI,UAAU1hB,KAAO,SAAc9H,GACxC,IAAIojD,EAAQ,CAAEpmD,KAAMgD,EAAGgkB,KAAM,MACzB3rB,KAAKgB,OAAS,EAAGhB,KAAKunF,KAAK57D,KAAOo/B,EAAW/qD,KAAK8+I,KAAO/zF,EAC7D/qD,KAAKunF,KAAOx8B,IACV/qD,KAAKgB,QAGT23J,EAAWxnI,UAAUN,QAAU,SAAiBlpB,GAC9C,IAAIojD,EAAQ,CAAEpmD,KAAMgD,EAAGgkB,KAAM3rB,KAAK8+I,MACd,IAAhB9+I,KAAKgB,SAAchB,KAAKunF,KAAOx8B,GACnC/qD,KAAK8+I,KAAO/zF,IACV/qD,KAAKgB,QAGT23J,EAAWxnI,UAAU7qB,MAAQ,WAC3B,GAAoB,IAAhBtG,KAAKgB,OAAT,CACA,IAAIguE,EAAMhvE,KAAK8+I,KAAKn6I,KAGpB,OAFoB,IAAhB3E,KAAKgB,OAAchB,KAAK8+I,KAAO9+I,KAAKunF,KAAO,KAAUvnF,KAAK8+I,KAAO9+I,KAAK8+I,KAAKnzH,OAC7E3rB,KAAKgB,OACAguE,IAGT2pF,EAAWxnI,UAAUy8G,MAAQ,WAC3B5tI,KAAK8+I,KAAO9+I,KAAKunF,KAAO,KACxBvnF,KAAKgB,OAAS,GAGhB23J,EAAWxnI,UAAU7kB,KAAO,SAAcyE,GACxC,GAAoB,IAAhB/Q,KAAKgB,OAAc,MAAO,GAG9B,IAFA,IAAIF,EAAId,KAAK8+I,KACT9vE,EAAM,GAAKluE,EAAE6D,KACV7D,EAAIA,EAAE6qB,MACXqjD,GAAOj+D,EAAIjQ,EAAE6D,KACd,OAAOqqE,GAGV2pF,EAAWxnI,UAAUxuB,OAAS,SAAgBvC,GAC5C,GAAoB,IAAhBJ,KAAKgB,OAAc,OAAO2mB,EAAO8C,MAAM,GAC3C,GAAoB,IAAhBzqB,KAAKgB,OAAc,OAAOhB,KAAK8+I,KAAKn6I,KAIxC,IAHA,IApDgBoe,EAAKrH,EAAQ5U,EAoDzBkoE,EAAMrnD,EAAOm7D,YAAY1iF,IAAM,GAC/BU,EAAId,KAAK8+I,KACTv+I,EAAI,EACDO,GAvDSiiB,EAwDHjiB,EAAE6D,KAxDM+W,EAwDAszD,EAxDQloE,EAwDHvG,EAvD5BwiB,EAAI1V,KAAKqO,EAAQ5U,GAwDbvG,GAAKO,EAAE6D,KAAK3D,OACZF,EAAIA,EAAE6qB,KAER,OAAOqjD,GAGF2pF,EA3DQ,GA8Db2d,GAAQA,EAAKvoG,SAAWuoG,EAAKvoG,QAAQr/B,SACvChvC,EAAOD,QAAQ0xB,UAAUmlJ,EAAKvoG,QAAQr/B,QAAU,WAC9C,IAAIrd,EAAMilJ,EAAKvoG,QAAQ,CAAE/sE,OAAQhB,KAAKgB,SACtC,OAAOhB,KAAK2jB,YAAYrZ,KAAO,IAAM+mB,wDC5EzC,aAIA,IAAIglJ,EAAM51K,EAAQ,wBA8DlB,SAASiiK,EAAY3iK,EAAM+rB,GACzB/rB,EAAK8E,KAAK,QAASinB,GAGrBpsB,EAAOD,QAAU,CACfie,QA/DF,SAAiBoO,EAAK7U,GACpB,IAAIjU,EAAQhD,KAER4iK,EAAoB5iK,KAAKk4J,gBAAkBl4J,KAAKk4J,eAAeC,UAC/D0K,EAAoB7iK,KAAK83J,gBAAkB93J,KAAK83J,eAAeK,UAEnE,OAAIyK,GAAqBC,GACnB5rJ,EACFA,EAAG6U,IACMA,GAAS9rB,KAAK83J,gBAAmB93J,KAAK83J,eAAesH,cAC9DiX,EAAIrmJ,SAAS0yI,EAAa1iK,KAAM8rB,GAE3B9rB,OAMLA,KAAKk4J,iBACPl4J,KAAKk4J,eAAeC,WAAY,GAI9Bn4J,KAAK83J,iBACP93J,KAAK83J,eAAeK,WAAY,GAGlCn4J,KAAKi6J,SAASnuI,GAAO,MAAM,SAAUA,IAC9B7U,GAAM6U,GACTuqJ,EAAIrmJ,SAAS0yI,EAAa1/J,EAAO8oB,GAC7B9oB,EAAM80J,iBACR90J,EAAM80J,eAAesH,cAAe,IAE7BnoJ,GACTA,EAAG6U,MAIA9rB,OA0BP66J,UAvBF,WACM76J,KAAKk4J,iBACPl4J,KAAKk4J,eAAeC,WAAY,EAChCn4J,KAAKk4J,eAAesB,SAAU,EAC9Bx5J,KAAKk4J,eAAexgB,OAAQ,EAC5B13I,KAAKk4J,eAAe/gG,YAAa,GAG/Bn3D,KAAK83J,iBACP93J,KAAK83J,eAAeK,WAAY,EAChCn4J,KAAK83J,eAAepgB,OAAQ,EAC5B13I,KAAK83J,eAAe6G,QAAS,EAC7B3+J,KAAK83J,eAAe4D,UAAW,EAC/B17J,KAAK83J,eAAesH,cAAe,0JC9DvC1/J,EAAOD,QAAUgB,EAAQ,cAAcoqB,oECAvCprB,EAAUC,EAAOD,QAAUgB,EAAQ,8BAC3BgtB,OAAShuB,EACjBA,EAAQs7D,SAAWt7D,EACnBA,EAAQu2D,SAAWv1D,EAAQ,6BAC3BhB,EAAQwvB,OAASxuB,EAAQ,2BACzBhB,EAAQ2xD,UAAY3wD,EAAQ,8BAC5BhB,EAAQorB,YAAcpqB,EAAQ,wOCN9Bf,EAAOD,QAAUgB,EAAQ,cAAc2wD,iECAvC1xD,EAAOD,QAAUgB,EAAQ,sFCqBzB,aAIA,IAAIknB,EAASlnB,EAAQ,eAAeknB,OAGhCyuE,EAAazuE,EAAOyuE,YAAc,SAAU3vF,GAE9C,QADAA,EAAW,GAAKA,IACIA,EAASuW,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,SAASy6C,EAAchxD,GAErB,IAAI47J,EACJ,OAFAriK,KAAKyG,SAXP,SAA2BwvD,GACzB,IAAIihH,EA/BN,SAA4BjhH,GAC1B,IAAKA,EAAK,MAAO,OAEjB,IADA,IAAIkhH,IAEF,OAAQlhH,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,GAAIkhH,EAAS,OACblhH,GAAO,GAAKA,GAAKj5C,cACjBm6J,GAAU,GAQLC,CAAmBnhH,GAC9B,GAAoB,iBAATihH,IAAsBvvJ,EAAOyuE,aAAeA,IAAeA,EAAWngC,IAAO,MAAM,IAAIr1D,MAAM,qBAAuBq1D,GAC/H,OAAOihH,GAAQjhH,EAQCohH,CAAkB5wK,GAE1BzG,KAAKyG,UACX,IAAK,UACHzG,KAAKwF,KAAO8xK,EACZt3K,KAAKuG,IAAMgxK,EACXlV,EAAK,EACL,MACF,IAAK,OACHriK,KAAKw3K,SAAWC,EAChBpV,EAAK,EACL,MACF,IAAK,SACHriK,KAAKwF,KAAOkyK,EACZ13K,KAAKuG,IAAMoxK,EACXtV,EAAK,EACL,MACF,QAGE,OAFAriK,KAAKoG,MAAQwxK,OACb53K,KAAKuG,IAAMsxK,GAGf73K,KAAK83K,SAAW,EAChB93K,KAAK+3K,UAAY,EACjB/3K,KAAKg4K,SAAWrwJ,EAAOm7D,YAAYu/E,GAoCrC,SAAS4V,EAAcC,GACrB,OAAIA,GAAQ,IAAa,EAAWA,GAAQ,GAAM,EAAa,EAAWA,GAAQ,GAAM,GAAa,EAAWA,GAAQ,GAAM,GAAa,EACpIA,GAAQ,GAAM,GAAQ,GAAK,EA2DpC,SAAST,EAAajpJ,GACpB,IAAI1tB,EAAId,KAAK+3K,UAAY/3K,KAAK83K,SAC1B53K,EAtBN,SAA6BH,EAAMyuB,EAAK1tB,GACtC,GAAwB,MAAV,IAAT0tB,EAAI,IAEP,OADAzuB,EAAK+3K,SAAW,EACT,SAET,GAAI/3K,EAAK+3K,SAAW,GAAKtpJ,EAAIxtB,OAAS,EAAG,CACvC,GAAwB,MAAV,IAATwtB,EAAI,IAEP,OADAzuB,EAAK+3K,SAAW,EACT,SAET,GAAI/3K,EAAK+3K,SAAW,GAAKtpJ,EAAIxtB,OAAS,GACZ,MAAV,IAATwtB,EAAI,IAEP,OADAzuB,EAAK+3K,SAAW,EACT,UASLK,CAAoBn4K,KAAMwuB,GAClC,YAAUlqB,IAANpE,EAAwBA,EACxBF,KAAK83K,UAAYtpJ,EAAIxtB,QACvBwtB,EAAInhB,KAAKrN,KAAKg4K,SAAUl3K,EAAG,EAAGd,KAAK83K,UAC5B93K,KAAKg4K,SAAS9sK,SAASlL,KAAKyG,SAAU,EAAGzG,KAAK+3K,aAEvDvpJ,EAAInhB,KAAKrN,KAAKg4K,SAAUl3K,EAAG,EAAG0tB,EAAIxtB,aAClChB,KAAK83K,UAAYtpJ,EAAIxtB,SA2BvB,SAASs2K,EAAU9oJ,EAAKjuB,GACtB,IAAKiuB,EAAIxtB,OAAST,GAAK,GAAM,EAAG,CAC9B,IAAIL,EAAIsuB,EAAItjB,SAAS,UAAW3K,GAChC,GAAIL,EAAG,CACL,IAAIM,EAAIN,EAAEmpB,WAAWnpB,EAAEc,OAAS,GAChC,GAAIR,GAAK,OAAUA,GAAK,MAKtB,OAJAR,KAAK83K,SAAW,EAChB93K,KAAK+3K,UAAY,EACjB/3K,KAAKg4K,SAAS,GAAKxpJ,EAAIA,EAAIxtB,OAAS,GACpChB,KAAKg4K,SAAS,GAAKxpJ,EAAIA,EAAIxtB,OAAS,GAC7Bd,EAAE+d,MAAM,GAAI,GAGvB,OAAO/d,EAKT,OAHAF,KAAK83K,SAAW,EAChB93K,KAAK+3K,UAAY,EACjB/3K,KAAKg4K,SAAS,GAAKxpJ,EAAIA,EAAIxtB,OAAS,GAC7BwtB,EAAItjB,SAAS,UAAW3K,EAAGiuB,EAAIxtB,OAAS,GAKjD,SAASu2K,EAAS/oJ,GAChB,IAAItuB,EAAIsuB,GAAOA,EAAIxtB,OAAShB,KAAKoG,MAAMooB,GAAO,GAC9C,GAAIxuB,KAAK83K,SAAU,CACjB,IAAIvxK,EAAMvG,KAAK+3K,UAAY/3K,KAAK83K,SAChC,OAAO53K,EAAIF,KAAKg4K,SAAS9sK,SAAS,UAAW,EAAG3E,GAElD,OAAOrG,EAGT,SAASw3K,EAAWlpJ,EAAKjuB,GACvB,IAAIH,GAAKouB,EAAIxtB,OAAST,GAAK,EAC3B,OAAU,IAANH,EAAgBouB,EAAItjB,SAAS,SAAU3K,IAC3CP,KAAK83K,SAAW,EAAI13K,EACpBJ,KAAK+3K,UAAY,EACP,IAAN33K,EACFJ,KAAKg4K,SAAS,GAAKxpJ,EAAIA,EAAIxtB,OAAS,IAEpChB,KAAKg4K,SAAS,GAAKxpJ,EAAIA,EAAIxtB,OAAS,GACpChB,KAAKg4K,SAAS,GAAKxpJ,EAAIA,EAAIxtB,OAAS,IAE/BwtB,EAAItjB,SAAS,SAAU3K,EAAGiuB,EAAIxtB,OAASZ,IAGhD,SAASu3K,EAAUnpJ,GACjB,IAAItuB,EAAIsuB,GAAOA,EAAIxtB,OAAShB,KAAKoG,MAAMooB,GAAO,GAC9C,OAAIxuB,KAAK83K,SAAiB53K,EAAIF,KAAKg4K,SAAS9sK,SAAS,SAAU,EAAG,EAAIlL,KAAK83K,UACpE53K,EAIT,SAAS03K,EAAYppJ,GACnB,OAAOA,EAAItjB,SAASlL,KAAKyG,UAG3B,SAASoxK,EAAUrpJ,GACjB,OAAOA,GAAOA,EAAIxtB,OAAShB,KAAKoG,MAAMooB,GAAO,GAzN/C/uB,EAAQg4D,cAAgBA,EA6BxBA,EAActmC,UAAU/qB,MAAQ,SAAUooB,GACxC,GAAmB,IAAfA,EAAIxtB,OAAc,MAAO,GAC7B,IAAId,EACAK,EACJ,GAAIP,KAAK83K,SAAU,CAEjB,QAAUxzK,KADVpE,EAAIF,KAAKw3K,SAAShpJ,IACG,MAAO,GAC5BjuB,EAAIP,KAAK83K,SACT93K,KAAK83K,SAAW,OAEhBv3K,EAAI,EAEN,OAAIA,EAAIiuB,EAAIxtB,OAAed,EAAIA,EAAIF,KAAKwF,KAAKgpB,EAAKjuB,GAAKP,KAAKwF,KAAKgpB,EAAKjuB,GAC/DL,GAAK,IAGdu3D,EAActmC,UAAU5qB,IAwGxB,SAAiBioB,GACf,IAAItuB,EAAIsuB,GAAOA,EAAIxtB,OAAShB,KAAKoG,MAAMooB,GAAO,GAC9C,OAAIxuB,KAAK83K,SAAiB53K,EAAI,SACvBA,GAxGTu3D,EAActmC,UAAU3rB,KA0FxB,SAAkBgpB,EAAKjuB,GACrB,IAAIitE,EArEN,SAA6BztE,EAAMyuB,EAAKjuB,GACtC,IAAIqa,EAAI4T,EAAIxtB,OAAS,EACrB,GAAI4Z,EAAIra,EAAG,OAAO,EAClB,IAAI8hK,EAAK4V,EAAczpJ,EAAI5T,IAC3B,GAAIynJ,GAAM,EAER,OADIA,EAAK,IAAGtiK,EAAK+3K,SAAWzV,EAAK,GAC1BA,EAET,KAAMznJ,EAAIra,IAAa,IAAR8hK,EAAW,OAAO,EAEjC,IADAA,EAAK4V,EAAczpJ,EAAI5T,MACb,EAER,OADIynJ,EAAK,IAAGtiK,EAAK+3K,SAAWzV,EAAK,GAC1BA,EAET,KAAMznJ,EAAIra,IAAa,IAAR8hK,EAAW,OAAO,EAEjC,IADAA,EAAK4V,EAAczpJ,EAAI5T,MACb,EAIR,OAHIynJ,EAAK,IACI,IAAPA,EAAUA,EAAK,EAAOtiK,EAAK+3K,SAAWzV,EAAK,GAE1CA,EAET,OAAO,EA+CK+V,CAAoBp4K,KAAMwuB,EAAKjuB,GAC3C,IAAKP,KAAK83K,SAAU,OAAOtpJ,EAAItjB,SAAS,OAAQ3K,GAChDP,KAAK+3K,UAAYvqG,EACjB,IAAIjnE,EAAMioB,EAAIxtB,QAAUwsE,EAAQxtE,KAAK83K,UAErC,OADAtpJ,EAAInhB,KAAKrN,KAAKg4K,SAAU,EAAGzxK,GACpBioB,EAAItjB,SAAS,OAAQ3K,EAAGgG,IA7FjCkxD,EAActmC,UAAUqmJ,SAAW,SAAUhpJ,GAC3C,GAAIxuB,KAAK83K,UAAYtpJ,EAAIxtB,OAEvB,OADAwtB,EAAInhB,KAAKrN,KAAKg4K,SAAUh4K,KAAK+3K,UAAY/3K,KAAK83K,SAAU,EAAG93K,KAAK83K,UACzD93K,KAAKg4K,SAAS9sK,SAASlL,KAAKyG,SAAU,EAAGzG,KAAK+3K,WAEvDvpJ,EAAInhB,KAAKrN,KAAKg4K,SAAUh4K,KAAK+3K,UAAY/3K,KAAK83K,SAAU,EAAGtpJ,EAAIxtB,QAC/DhB,KAAK83K,UAAYtpJ,EAAIxtB,+ECtIvB,IAAIgvB,EAAWvvB,EAAQ,sBAAsBuvB,SACzC3N,EAAQyD,SAASqL,UAAU9O,MAC3BpE,EAAQzN,MAAM2gB,UAAUlT,MACxBo6J,EAAe,GACfC,EAAkB,EAatB,SAASC,EAAQ//J,EAAIggK,GACnBx4K,KAAK4/G,IAAMpnG,EACXxY,KAAKy4K,SAAWD,EAXlB/4K,EAAQozB,WAAa,WACnB,OAAO,IAAI0lJ,EAAQl2J,EAAMthB,KAAK8xB,WAAYhzB,OAAQkH,WAAYwtJ,eAEhE90J,EAAQi5K,YAAc,WACpB,OAAO,IAAIH,EAAQl2J,EAAMthB,KAAK23K,YAAa74K,OAAQkH,WAAY4xK,gBAEjEl5K,EAAQ80J,aACR90J,EAAQk5K,cAAgB,SAAS/jB,GAAWA,EAAQ7xJ,SAMpDw1K,EAAQpnJ,UAAUynJ,MAAQL,EAAQpnJ,UAAUhkB,IAAM,aAClDorK,EAAQpnJ,UAAUpuB,MAAQ,WACxB/C,KAAKy4K,SAAS13K,KAAKlB,OAAQG,KAAK4/G,MAIlCngH,EAAQo5K,OAAS,SAASlgK,EAAMmgK,GAC9BvkB,aAAa57I,EAAKogK,gBAClBpgK,EAAKqgK,aAAeF,GAGtBr5K,EAAQw5K,SAAW,SAAStgK,GAC1B47I,aAAa57I,EAAKogK,gBAClBpgK,EAAKqgK,cAAgB,GAGvBv5K,EAAQy5K,aAAez5K,EAAQ05K,OAAS,SAASxgK,GAC/C47I,aAAa57I,EAAKogK,gBAElB,IAAID,EAAQngK,EAAKqgK,aACbF,GAAS,IACXngK,EAAKogK,eAAiBlmJ,YAAW,WAC3Bla,EAAKygK,YACPzgK,EAAKygK,eACNN,KAKPr5K,EAAQmzB,aAAuC,mBAAjBA,EAA8BA,EAAe,SAASuwF,GAClF,IAAI3qG,EAAK8/J,IACL19G,IAAO7zD,UAAU/F,OAAS,IAAYid,EAAMld,KAAKgG,UAAW,GAkBhE,OAhBAsxK,EAAa7/J,IAAM,EAEnBwX,GAAS,WACHqoJ,EAAa7/J,KAGXoiD,EACFuoD,EAAG9gG,MAAM,KAAMu4C,GAEfuoD,EAAGpiH,KAAK,MAGVtB,EAAQ45K,eAAe7gK,OAIpBA,GAGT/Y,EAAQ45K,eAA2C,mBAAnBA,EAAgCA,EAAiB,SAAS7gK,UACjF6/J,EAAa7/J,4JClBtB,SAASuxE,EAAQz/E,GAEf,IACE,IAAKxK,EAAOw5K,aAAc,OAAO,EACjC,MAAOnxK,GACP,OAAO,EAET,IAAIkqB,EAAMvyB,EAAOw5K,aAAahvK,GAC9B,OAAI,MAAQ+nB,GACyB,SAA9BjoB,OAAOioB,GAAKrV,cA5DrBtd,EAAOD,QAoBP,SAAoB0jH,EAAI/7C,GACtB,GAAI2iB,EAAO,iBACT,OAAOo5B,EAGT,IAAIyB,GAAS,EAeb,OAdA,WACE,IAAKA,EAAQ,CACX,GAAI76B,EAAO,oBACT,MAAM,IAAInpF,MAAMwmE,GACP2iB,EAAO,oBAChBltE,QAAQI,MAAMmqD,GAEdvqD,QAAQC,KAAKsqD,GAEfw9C,GAAS,EAEX,OAAOzB,EAAG9gG,MAAMriB,KAAM+G,sKC1CG,mBAAlBmP,OAAOnN,OAEhBrJ,EAAOD,QAAU,SAAkBwsE,EAAMl5C,GACvCk5C,EAAKh5C,OAASF,EACdk5C,EAAK96C,UAAYjb,OAAOnN,OAAOgqB,EAAU5B,UAAW,CAClDxN,YAAa,CACXpe,MAAO0mE,EACP74C,YAAY,EACZC,UAAU,EACVC,cAAc,MAMpB5zB,EAAOD,QAAU,SAAkBwsE,EAAMl5C,GACvCk5C,EAAKh5C,OAASF,EACd,IAAIm5C,EAAW,aACfA,EAAS/6C,UAAY4B,EAAU5B,UAC/B86C,EAAK96C,UAAY,IAAI+6C,EACrBD,EAAK96C,UAAUxN,YAAcsoD,+QCpBjCvsE,EAAOD,QAAU,SAAkB2kE,GACjC,OAAOA,GAAsB,WAAfx+D,EAAOw+D,IACI,mBAAbA,EAAI/2D,MACS,mBAAb+2D,EAAIz6D,MACc,mBAAlBy6D,EAAI3B,sSCiBlB,IAAI82G,EAAe,WACnB95K,EAAQyF,OAAS,SAAS1F,GACxB,IAAKg/F,EAASh/F,GAAI,CAEhB,IADA,IAAI66C,EAAU,GACL95C,EAAI,EAAGA,EAAIwG,UAAU/F,OAAQT,IACpC85C,EAAQ5qC,KAAKs+D,EAAQhnE,UAAUxG,KAEjC,OAAO85C,EAAQ/tC,KAAK,KAGlB/L,EAAI,EAmBR,IAnBA,IACIq6D,EAAO7zD,UACPy7B,EAAMo4B,EAAK55D,OACX6mB,EAAMzd,OAAO5K,GAAG2M,QAAQotK,GAAc,SAAS7mK,GACjD,GAAU,OAANA,EAAY,MAAO,IACvB,GAAInS,GAAKiiC,EAAK,OAAO9vB,EACrB,OAAQA,GACN,IAAK,KAAM,OAAOtI,OAAOwwD,EAAKr6D,MAC9B,IAAK,KAAM,OAAOmD,OAAOk3D,EAAKr6D,MAC9B,IAAK,KACH,IACE,OAAOsF,KAAKC,UAAU80D,EAAKr6D,MAC3B,MAAO4H,GACP,MAAO,aAEX,QACE,OAAOuK,MAGJA,EAAIkoD,EAAKr6D,GAAIA,EAAIiiC,EAAK9vB,EAAIkoD,IAAOr6D,GACpC89F,EAAO3rF,KAAO4f,EAAS5f,GACzBmV,GAAO,IAAMnV,EAEbmV,GAAO,IAAMkmD,EAAQr7D,GAGzB,OAAOmV,GAOTpoB,EAAQ0+J,UAAY,SAASh7C,EAAI/7C,GAE/B,GAAIh1C,EAAYtyB,EAAOiwB,SACrB,OAAO,WACL,OAAOtwB,EAAQ0+J,UAAUh7C,EAAI/7C,GAAK/kD,MAAMriB,KAAM+G,YAIlD,IAA8B,IAA1BgpB,EAAQypJ,cACV,OAAOr2D,EAGT,IAAIyB,GAAS,EAeb,OAdA,WACE,IAAKA,EAAQ,CACX,GAAI70F,EAAQ0pJ,iBACV,MAAM,IAAI74K,MAAMwmE,GACPr3C,EAAQ2pJ,iBACjB78J,QAAQI,MAAMmqD,GAEdvqD,QAAQ/a,MAAMslE,GAEhBw9C,GAAS,EAEX,OAAOzB,EAAG9gG,MAAMriB,KAAM+G,aAO1B,IACI4yK,EADAC,EAAS,GA6Bb,SAAS7rG,EAAQ18C,EAAKkgC,GAEpB,IAAIysB,EAAM,CACR80D,KAAM,GACN+mC,QAASC,GAkBX,OAfI/yK,UAAU/F,QAAU,IAAGg9E,EAAIujE,MAAQx6I,UAAU,IAC7CA,UAAU/F,QAAU,IAAGg9E,EAAI+7F,OAAShzK,UAAU,IAC9Cq3F,EAAU7sC,GAEZysB,EAAIg8F,WAAazoH,EACRA,GAET9xD,EAAQw6K,QAAQj8F,EAAKzsB,GAGnBn/B,EAAY4rD,EAAIg8F,cAAah8F,EAAIg8F,YAAa,GAC9C5nJ,EAAY4rD,EAAIujE,SAAQvjE,EAAIujE,MAAQ,GACpCnvH,EAAY4rD,EAAI+7F,UAAS/7F,EAAI+7F,QAAS,GACtC3nJ,EAAY4rD,EAAIwkF,iBAAgBxkF,EAAIwkF,eAAgB,GACpDxkF,EAAI+7F,SAAQ/7F,EAAI67F,QAAUK,GACvBC,EAAYn8F,EAAK3sD,EAAK2sD,EAAIujE,OAoCnC,SAAS24B,EAAiBryJ,EAAKuyJ,GAC7B,IAAIlxK,EAAQ6kE,EAAQthC,OAAO2tI,GAE3B,OAAIlxK,EACK,QAAY6kE,EAAQgsG,OAAO7wK,GAAO,GAAK,IAAM2e,EAC7C,QAAYkmD,EAAQgsG,OAAO7wK,GAAO,GAAK,IAEvC2e,EAKX,SAASiyJ,EAAejyJ,EAAKuyJ,GAC3B,OAAOvyJ,EAeT,SAASsyJ,EAAYn8F,EAAKz4E,EAAO80K,GAG/B,GAAIr8F,EAAIwkF,eACJj9J,GACAq5F,EAAWr5F,EAAMwoE,UAEjBxoE,EAAMwoE,UAAYtuE,EAAQsuE,WAExBxoE,EAAMoe,aAAepe,EAAMoe,YAAYwN,YAAc5rB,GAAQ,CACjE,IAAIypE,EAAMzpE,EAAMwoE,QAAQssG,EAAcr8F,GAItC,OAHKwgB,EAASxvB,KACZA,EAAMmrG,EAAYn8F,EAAKhP,EAAKqrG,IAEvBrrG,EAIT,IAAIzI,EA+FN,SAAyByX,EAAKz4E,GAC5B,GAAI6sB,EAAY7sB,GACd,OAAOy4E,EAAI67F,QAAQ,YAAa,aAClC,GAAIr7E,EAASj5F,GAAQ,CACnB,IAAI+0K,EAAS,IAAOz0K,KAAKC,UAAUP,GAAO4G,QAAQ,SAAU,IAClBA,QAAQ,KAAM,OACdA,QAAQ,OAAQ,KAAO,IACjE,OAAO6xE,EAAI67F,QAAQS,EAAQ,UAE7B,GAAI/7E,EAASh5F,GACX,OAAOy4E,EAAI67F,QAAQ,GAAKt0K,EAAO,UACjC,GAAI64F,EAAU74F,GACZ,OAAOy4E,EAAI67F,QAAQ,GAAKt0K,EAAO,WAEjC,GAAI84F,EAAO94F,GACT,OAAOy4E,EAAI67F,QAAQ,OAAQ,QA9GbU,CAAgBv8F,EAAKz4E,GACrC,GAAIghE,EACF,OAAOA,EAIT,IAAIpwD,EAAOD,OAAOC,KAAK5Q,GACnBi1K,EApCN,SAAqB9jF,GACnB,IAAI5sE,EAAO,GAMX,OAJA4sE,EAAMnrF,SAAQ,SAAS8mB,EAAKooJ,GAC1B3wJ,EAAKuI,IAAO,KAGPvI,EA6BW4wJ,CAAYvkK,GAQ9B,GANI6nE,EAAIg8F,aACN7jK,EAAOD,OAAOykK,oBAAoBp1K,IAKhCy/D,EAAQz/D,KACJ4Q,EAAKmU,QAAQ,YAAc,GAAKnU,EAAKmU,QAAQ,gBAAkB,GACrE,OAAOswJ,EAAYr1K,GAIrB,GAAoB,IAAhB4Q,EAAKnV,OAAc,CACrB,GAAI49F,EAAWr5F,GAAQ,CACrB,IAAI+E,EAAO/E,EAAM+E,KAAO,KAAO/E,EAAM+E,KAAO,GAC5C,OAAO0zE,EAAI67F,QAAQ,YAAcvvK,EAAO,IAAK,WAE/C,GAAIo0F,EAASn5F,GACX,OAAOy4E,EAAI67F,QAAQjnH,OAAOzhC,UAAUjmB,SAASnK,KAAKwE,GAAQ,UAE5D,GAAIo5F,EAAOp5F,GACT,OAAOy4E,EAAI67F,QAAQ11K,KAAKgtB,UAAUjmB,SAASnK,KAAKwE,GAAQ,QAE1D,GAAIy/D,EAAQz/D,GACV,OAAOq1K,EAAYr1K,GAIvB,IA2CIq7E,EA3CApqB,EAAO,GAAIkgC,GAAQ,EAAOmkF,EAAS,CAAC,IAAK,MAGzC71J,EAAQzf,KACVmxF,GAAQ,EACRmkF,EAAS,CAAC,IAAK,MAIbj8E,EAAWr5F,MAEbixD,EAAO,cADCjxD,EAAM+E,KAAO,KAAO/E,EAAM+E,KAAO,IACf,KAkB5B,OAdIo0F,EAASn5F,KACXixD,EAAO,IAAM5D,OAAOzhC,UAAUjmB,SAASnK,KAAKwE,IAI1Co5F,EAAOp5F,KACTixD,EAAO,IAAMryD,KAAKgtB,UAAU62E,YAAYjnG,KAAKwE,IAI3Cy/D,EAAQz/D,KACVixD,EAAO,IAAMokH,EAAYr1K,IAGP,IAAhB4Q,EAAKnV,QAAkB01F,GAAyB,GAAhBnxF,EAAMvE,OAItCq5K,EAAe,EACb37E,EAASn5F,GACJy4E,EAAI67F,QAAQjnH,OAAOzhC,UAAUjmB,SAASnK,KAAKwE,GAAQ,UAEnDy4E,EAAI67F,QAAQ,WAAY,YAInC77F,EAAI80D,KAAKrjI,KAAKlK,GAIZq7E,EADE8V,EAsCN,SAAqB1Y,EAAKz4E,EAAO80K,EAAcG,EAAarkK,GAE1D,IADA,IAAIyqE,EAAS,GACJrgF,EAAI,EAAGkW,EAAIlR,EAAMvE,OAAQT,EAAIkW,IAAKlW,EACrCyQ,EAAezL,EAAO6E,OAAO7J,IAC/BqgF,EAAOnxE,KAAKqrK,EAAe98F,EAAKz4E,EAAO80K,EAAcG,EACjDpwK,OAAO7J,IAAI,IAEfqgF,EAAOnxE,KAAK,IAShB,OANA0G,EAAK5K,SAAQ,SAASoE,GACfA,EAAIhC,MAAM,UACbizE,EAAOnxE,KAAKqrK,EAAe98F,EAAKz4E,EAAO80K,EAAcG,EACjD7qK,GAAK,OAGNixE,EArDIm6F,CAAY/8F,EAAKz4E,EAAO80K,EAAcG,EAAarkK,GAEnDA,EAAK5S,KAAI,SAASoM,GACzB,OAAOmrK,EAAe98F,EAAKz4E,EAAO80K,EAAcG,EAAa7qK,EAAK+mF,MAItE1Y,EAAI80D,KAAK3+H,MA6GX,SAA8BysE,EAAQpqB,EAAMqkH,GAQ1C,GANaj6F,EAAO98E,QAAO,SAAS4nB,EAAM4qI,GAGxC,OADIA,EAAIhsI,QAAQ,OAAS,GAAG0wJ,EACrBtvJ,EAAO4qI,EAAInqJ,QAAQ,kBAAmB,IAAInL,OAAS,IACzD,GAEU,GACX,OAAO65K,EAAO,IACG,KAATrkH,EAAc,GAAKA,EAAO,OAC3B,IACAoqB,EAAOt0E,KAAK,SACZ,IACAuuK,EAAO,GAGhB,OAAOA,EAAO,GAAKrkH,EAAO,IAAMoqB,EAAOt0E,KAAK,MAAQ,IAAMuuK,EAAO,GA5H1DI,CAAqBr6F,EAAQpqB,EAAMqkH,IAxBjCA,EAAO,GAAKrkH,EAAOqkH,EAAO,GA+CrC,SAASD,EAAYr1K,GACnB,MAAO,IAAM3E,MAAMuwB,UAAUjmB,SAASnK,KAAKwE,GAAS,IAwBtD,SAASu1K,EAAe98F,EAAKz4E,EAAO80K,EAAcG,EAAa7qK,EAAK+mF,GAClE,IAAIpsF,EAAMud,EAAK8uC,EAsCf,IArCAA,EAAOzgD,OAAOid,yBAAyB5tB,EAAOoK,IAAQ,CAAEpK,MAAOA,EAAMoK,KAC5D43C,IAEL1/B,EADE8uC,EAAKlP,IACDu2B,EAAI67F,QAAQ,kBAAmB,WAE/B77F,EAAI67F,QAAQ,WAAY,WAG5BljH,EAAKlP,MACP5/B,EAAMm2D,EAAI67F,QAAQ,WAAY,YAG7B7oK,EAAewpK,EAAa7qK,KAC/BrF,EAAO,IAAMqF,EAAM,KAEhBkY,IACCm2D,EAAI80D,KAAKxoH,QAAQqsC,EAAKpxD,OAAS,GAE/BsiB,EADEw2E,EAAOg8E,GACHF,EAAYn8F,EAAKrnB,EAAKpxD,MAAO,MAE7B40K,EAAYn8F,EAAKrnB,EAAKpxD,MAAO80K,EAAe,IAE5C/vJ,QAAQ,OAAS,IAErBzC,EADE6uE,EACI7uE,EAAI3T,MAAM,MAAM3Q,KAAI,SAAS+0D,GACjC,MAAO,KAAOA,KACbhsD,KAAK,MAAM2+C,OAAO,GAEf,KAAOpjC,EAAI3T,MAAM,MAAM3Q,KAAI,SAAS+0D,GACxC,MAAO,MAAQA,KACdhsD,KAAK,OAIZub,EAAMm2D,EAAI67F,QAAQ,aAAc,YAGhCznJ,EAAY9nB,GAAO,CACrB,GAAIosF,GAAS/mF,EAAIhC,MAAM,SACrB,OAAOka,GAETvd,EAAOzE,KAAKC,UAAU,GAAK6J,IAClBhC,MAAM,iCACbrD,EAAOA,EAAK2gD,OAAO,EAAG3gD,EAAKtJ,OAAS,GACpCsJ,EAAO0zE,EAAI67F,QAAQvvK,EAAM,UAEzBA,EAAOA,EAAK6B,QAAQ,KAAM,OACdA,QAAQ,OAAQ,KAChBA,QAAQ,WAAY,KAChC7B,EAAO0zE,EAAI67F,QAAQvvK,EAAM,WAI7B,OAAOA,EAAO,KAAOud,EA2BvB,SAAS7C,EAAQ6/I,GACf,OAAOr0J,MAAMwU,QAAQ6/I,GAIvB,SAASzmE,EAAUh6B,GACjB,MAAsB,kBAARA,EAIhB,SAASi6B,EAAOj6B,GACd,OAAe,OAARA,EAST,SAASm6B,EAASn6B,GAChB,MAAsB,iBAARA,EAIhB,SAASo6B,EAASp6B,GAChB,MAAsB,iBAARA,EAShB,SAAShyC,EAAYgyC,GACnB,YAAe,IAARA,EAIT,SAASs6B,EAASp0B,GAChB,OAAOh4C,EAASg4C,IAA8B,oBAAvB6zB,EAAe7zB,GAIxC,SAASh4C,EAAS8xC,GAChB,MAAsB,WAAfx+D,EAAOw+D,IAA4B,OAARA,EAIpC,SAASu6B,EAAOnrE,GACd,OAAOlB,EAASkB,IAA4B,kBAAtB2qE,EAAe3qE,GAIvC,SAASwxC,EAAQ7kE,GACf,OAAOmyB,EAASnyB,KACW,mBAAtBg+F,EAAeh+F,IAA2BA,aAAaS,OAI9D,SAASg+F,EAAWx6B,GAClB,MAAsB,mBAARA,EAgBhB,SAAS+5B,EAAe79F,GACtB,OAAO4V,OAAOib,UAAUjmB,SAASnK,KAAKT,GAIxC,SAAS6qF,EAAI/qF,GACX,OAAOA,EAAI,GAAK,IAAMA,EAAE8K,SAAS,IAAM9K,EAAE8K,SAAS,IApbpDzL,EAAQg5J,SAAW,SAAShxG,GAI1B,GAHIr1B,EAAYunJ,KACdA,EAAe5pJ,EAAQklI,IAAIimB,YAAc,IAC3CzzH,EAAMA,EAAIp6B,eACLusJ,EAAOnyH,GACV,GAAI,IAAImL,OAAO,MAAQnL,EAAM,MAAO,KAAKxzC,KAAK0lK,GAAe,CAC3D,IAAIwB,EAAMprJ,EAAQorJ,IAClBvB,EAAOnyH,GAAO,WACZ,IAAI2f,EAAM3nE,EAAQyF,OAAOmd,MAAM5iB,EAASsH,WACxC8V,QAAQ/a,MAAM,YAAa2lD,EAAK0zH,EAAK/zG,SAGvCwyG,EAAOnyH,GAAO,aAGlB,OAAOmyH,EAAOnyH,IAoChBhoD,EAAQsuE,QAAUA,EAIlBA,EAAQgsG,OAAS,CACfqB,KAAS,CAAC,EAAG,IACbC,OAAW,CAAC,EAAG,IACfC,UAAc,CAAC,EAAG,IAClBC,QAAY,CAAC,EAAG,IAChBC,MAAU,CAAC,GAAI,IACfC,KAAS,CAAC,GAAI,IACdC,MAAU,CAAC,GAAI,IACfC,KAAS,CAAC,GAAI,IACdC,KAAS,CAAC,GAAI,IACdC,MAAU,CAAC,GAAI,IACfC,QAAY,CAAC,GAAI,IACjBtvG,IAAQ,CAAC,GAAI,IACbuvG,OAAW,CAAC,GAAI,KAIlBhuG,EAAQthC,OAAS,CACfpoC,QAAW,OACXuG,OAAU,SACVoxK,QAAW,SACX13K,UAAa,OACb23K,KAAQ,OACRphH,OAAU,QACVoQ,KAAQ,UAERixD,OAAU,OAkRZz8H,EAAQulB,QAAUA,EAKlBvlB,EAAQ2+F,UAAYA,EAKpB3+F,EAAQ4+F,OAASA,EAKjB5+F,EAAQ6+F,kBAHR,SAA2Bl6B,GACzB,OAAc,MAAPA,GAOT3kE,EAAQ8+F,SAAWA,EAKnB9+F,EAAQ++F,SAAWA,EAKnB/+F,EAAQg/F,SAHR,SAAkBr6B,GAChB,MAAsB,WAAfx+D,EAAOw+D,IAOhB3kE,EAAQ2yB,YAAcA,EAKtB3yB,EAAQi/F,SAAWA,EAKnBj/F,EAAQ6yB,SAAWA,EAKnB7yB,EAAQk/F,OAASA,EAMjBl/F,EAAQulE,QAAUA,EAKlBvlE,EAAQm/F,WAAaA,EAUrBn/F,EAAQk0C,YARR,SAAqBywB,GACnB,OAAe,OAARA,GACe,kBAARA,GACQ,iBAARA,GACQ,iBAARA,GACQ,WAAfx+D,EAAOw+D,SACQ,IAARA,GAIhB3kE,EAAQwiE,SAAWxhE,EAAQ,sBAY3B,IAAI6jG,EAAS,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACxD,MAAO,MAAO,OAG5B,SAAS43E,IACP,IAAI1oJ,EAAI,IAAIrvB,KACR6mE,EAAO,CAACmgB,EAAI33D,EAAE+xE,YACNpa,EAAI33D,EAAEiyE,cACNta,EAAI33D,EAAEmyE,eAAer5F,KAAK,KACtC,MAAO,CAACknB,EAAE2xE,UAAWb,EAAO9wE,EAAEyxE,YAAaj6B,GAAM1+D,KAAK,KAqCxD,SAAS0E,EAAeqgB,EAAK1V,GAC3B,OAAOzF,OAAOib,UAAUngB,eAAejQ,KAAKswB,EAAK1V,GAjCnDlc,EAAQo9G,IAAM,WACZhgG,QAAQggG,IAAI,UAAWq/D,IAAaz8K,EAAQyF,OAAOmd,MAAM5iB,EAASsH,aAiBpEtH,EAAQuvB,SAAWvuB,EAAQ,YAE3BhB,EAAQw6K,QAAU,SAASkC,EAAQxwK,GAEjC,IAAKA,IAAQ2mB,EAAS3mB,GAAM,OAAOwwK,EAInC,IAFA,IAAIhmK,EAAOD,OAAOC,KAAKxK,GACnBpL,EAAI4V,EAAKnV,OACNT,KACL47K,EAAOhmK,EAAK5V,IAAMoL,EAAIwK,EAAK5V,IAE7B,OAAO47K,+MCpkBT,aAEAjmK,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET2Q,OAAOgd,eAAezzB,EAAS,KAAM,CACnC2zB,YAAY,EACZm0B,IAAK,WACH,OAAO60H,EAAG/pH,WAGdn8C,OAAOgd,eAAezzB,EAAS,KAAM,CACnC2zB,YAAY,EACZm0B,IAAK,WACH,OAAO80H,EAAIhqH,WAGfn8C,OAAOgd,eAAezzB,EAAS,KAAM,CACnC2zB,YAAY,EACZm0B,IAAK,WACH,OAAO+0H,EAAIjqH,WAGfn8C,OAAOgd,eAAezzB,EAAS,KAAM,CACnC2zB,YAAY,EACZm0B,IAAK,WACH,OAAOg1H,EAAIlqH,WAGfn8C,OAAOgd,eAAezzB,EAAS,MAAO,CACpC2zB,YAAY,EACZm0B,IAAK,WACH,OAAOi1H,EAAKnqH,WAGhBn8C,OAAOgd,eAAezzB,EAAS,UAAW,CACxC2zB,YAAY,EACZm0B,IAAK,WACH,OAAOk1H,EAASpqH,WAGpBn8C,OAAOgd,eAAezzB,EAAS,WAAY,CACzC2zB,YAAY,EACZm0B,IAAK,WACH,OAAOm1H,EAAUrqH,WAGrBn8C,OAAOgd,eAAezzB,EAAS,YAAa,CAC1C2zB,YAAY,EACZm0B,IAAK,WACH,OAAOo1H,EAAWtqH,WAGtBn8C,OAAOgd,eAAezzB,EAAS,QAAS,CACtC2zB,YAAY,EACZm0B,IAAK,WACH,OAAOvI,EAAOqT,WAIlB,IAAI+pH,EAAKQ,EAAuBn8K,EAAQ,YAEpC47K,EAAMO,EAAuBn8K,EAAQ,YAErC67K,EAAMM,EAAuBn8K,EAAQ,YAErC87K,EAAMK,EAAuBn8K,EAAQ,YAErC+7K,EAAOI,EAAuBn8K,EAAQ,aAEtCg8K,EAAWG,EAAuBn8K,EAAQ,iBAE1Ci8K,EAAYE,EAAuBn8K,EAAQ,kBAE3Ck8K,EAAaC,EAAuBn8K,EAAQ,mBAE5Cu+C,EAAS49H,EAAuBn8K,EAAQ,eAE5C,SAASm8K,EAAuBvrJ,GAAO,OAAOA,GAAOA,EAAI+gC,WAAa/gC,EAAM,CAAEghC,QAAShhC,iLC9EvF,aA+DA,SAASwrJ,EAAgBC,GACvB,OAAwC,IAAhCA,EAAe,KAAO,GAAK,GAAU,EAuH/C,SAASC,EAAQrqK,EAAGC,GAClB,IAAMqqK,GAAW,MAAJtqK,IAAmB,MAAJC,GAE5B,OADaD,GAAK,KAAOC,GAAK,KAAOqqK,GAAO,KAC9B,GAAW,MAANA,EAerB,SAASC,EAAO3tG,EAAG3uE,EAAG+V,EAAGhE,EAAG3B,EAAG1Q,GAC7B,OAAO08K,GATcz4G,EASQy4G,EAAQA,EAAQp8K,EAAG2uE,GAAIytG,EAAQrqK,EAAGrS,OATrC68K,EAS0CnsK,GARhDuzD,IAAQ,GAAK44G,EAQuCxmK,GAT1E,IAAuB4tD,EAAK44G,EAY5B,SAASC,EAAMx8K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAG3B,EAAG1Q,GAC/B,OAAO48K,EAAOvmK,EAAIlW,GAAKkW,EAAI8c,EAAG7yB,EAAG+V,EAAGhE,EAAG3B,EAAG1Q,GAG5C,SAAS+8K,EAAMz8K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAG3B,EAAG1Q,GAC/B,OAAO48K,EAAOvmK,EAAI8c,EAAIhzB,GAAKgzB,EAAG7yB,EAAG+V,EAAGhE,EAAG3B,EAAG1Q,GAG5C,SAASg9K,EAAM18K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAG3B,EAAG1Q,GAC/B,OAAO48K,EAAOvmK,EAAIlW,EAAIgzB,EAAG7yB,EAAG+V,EAAGhE,EAAG3B,EAAG1Q,GAGvC,SAASi9K,EAAM38K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAG3B,EAAG1Q,GAC/B,OAAO48K,EAAOz8K,GAAKkW,GAAK8c,GAAI7yB,EAAG+V,EAAGhE,EAAG3B,EAAG1Q,GAxN1C6V,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,aAAU,EAwNlB,IAAIkrH,EAlMJ,SAAa16G,GACX,GAAqB,iBAAVA,EAAoB,CAC7B,IAAMuE,EAAMo2G,SAASC,mBAAmB56G,IAExCA,EAAQ,IAAI4f,WAAWrb,EAAIpmE,QAE3B,IAAK,IAAIT,EAAI,EAAGA,EAAI6mE,EAAIpmE,SAAUT,EAChCsiE,EAAMtiE,GAAK6mE,EAAI/9C,WAAW9oB,GAI9B,OAOF,SAA8BkkE,GAK5B,IAJA,IAAMmc,EAAS,GACT88F,EAA0B,GAAfj5G,EAAMzjE,OAGdT,EAAI,EAAGA,EAAIm9K,EAAUn9K,GAAK,EAAG,CACpC,IAAMmS,EAAI+xD,EAAMlkE,GAAK,KAAOA,EAAI,GAAK,IAC/BisG,EAAMh/E,SAJC,mBAIe0E,OAAOxf,IAAM,EAAI,IAJhC,mBAI+Cwf,OAAW,GAAJxf,GAAW,IAC9EkuE,EAAOnxE,KAAK+8F,GAGd,OAAO5rB,EAlBA+8F,CAiCT,SAAoBjrK,EAAG8vB,GAErB9vB,EAAE8vB,GAAO,IAAM,KAAQA,EAAM,GAC7B9vB,EAAEmqK,EAAgBr6I,GAAO,GAAKA,EAM9B,IALA,IAAI7hC,EAAI,WACJ+V,GAAK,UACLlW,GAAK,WACLgzB,EAAI,UAECjzB,EAAI,EAAGA,EAAImS,EAAE1R,OAAQT,GAAK,GAAI,CACrC,IAAMq9K,EAAOj9K,EACPk9K,EAAOnnK,EACPonK,EAAOt9K,EACPu9K,EAAOvqJ,EACb7yB,EAAIw8K,EAAMx8K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,GAAI,GAAI,WAChCizB,EAAI2pJ,EAAM3pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,GAAI,IAAK,WACrCC,EAAI28K,EAAM38K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,GAAI,GAAI,WACpCmW,EAAIymK,EAAMzmK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,GAAI,IAAK,YACrCI,EAAIw8K,EAAMx8K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,GAAI,GAAI,WACpCizB,EAAI2pJ,EAAM3pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,GAAI,GAAI,YACpCC,EAAI28K,EAAM38K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,GAAI,IAAK,YACrCmW,EAAIymK,EAAMzmK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,GAAI,IAAK,UACrCI,EAAIw8K,EAAMx8K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,GAAI,EAAG,YACnCizB,EAAI2pJ,EAAM3pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,GAAI,IAAK,YACrCC,EAAI28K,EAAM38K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,IAAK,IAAK,OACtCmW,EAAIymK,EAAMzmK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,IAAK,IAAK,YACtCI,EAAIw8K,EAAMx8K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,IAAK,EAAG,YACpCizB,EAAI2pJ,EAAM3pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,IAAK,IAAK,UACtCC,EAAI28K,EAAM38K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,IAAK,IAAK,YACtCmW,EAAIymK,EAAMzmK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,IAAK,GAAI,YACrCI,EAAIy8K,EAAMz8K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,GAAI,GAAI,WACpCizB,EAAI4pJ,EAAM5pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,GAAI,GAAI,YACpCC,EAAI48K,EAAM58K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,IAAK,GAAI,WACrCmW,EAAI0mK,EAAM1mK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,GAAI,IAAK,WACjCI,EAAIy8K,EAAMz8K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,GAAI,GAAI,WACpCizB,EAAI4pJ,EAAM5pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,IAAK,EAAG,UACpCC,EAAI48K,EAAM58K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,IAAK,IAAK,WACtCmW,EAAI0mK,EAAM1mK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,GAAI,IAAK,WACrCI,EAAIy8K,EAAMz8K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,GAAI,EAAG,WACnCizB,EAAI4pJ,EAAM5pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,IAAK,GAAI,YACrCC,EAAI48K,EAAM58K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,GAAI,IAAK,WACrCmW,EAAI0mK,EAAM1mK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,GAAI,GAAI,YACpCI,EAAIy8K,EAAMz8K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,IAAK,GAAI,YACrCizB,EAAI4pJ,EAAM5pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,GAAI,GAAI,UACpCC,EAAI48K,EAAM58K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,GAAI,GAAI,YACpCmW,EAAI0mK,EAAM1mK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,IAAK,IAAK,YACtCI,EAAI08K,EAAM18K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,GAAI,GAAI,QACpCizB,EAAI6pJ,EAAM7pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,GAAI,IAAK,YACrCC,EAAI68K,EAAM78K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,IAAK,GAAI,YACrCmW,EAAI2mK,EAAM3mK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,IAAK,IAAK,UACtCI,EAAI08K,EAAM18K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,GAAI,GAAI,YACpCizB,EAAI6pJ,EAAM7pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,GAAI,GAAI,YACpCC,EAAI68K,EAAM78K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,GAAI,IAAK,WACrCmW,EAAI2mK,EAAM3mK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,IAAK,IAAK,YACtCI,EAAI08K,EAAM18K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,IAAK,EAAG,WACpCizB,EAAI6pJ,EAAM7pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,GAAI,IAAK,WACjCC,EAAI68K,EAAM78K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,GAAI,IAAK,WACrCmW,EAAI2mK,EAAM3mK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,GAAI,GAAI,UACpCI,EAAI08K,EAAM18K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,GAAI,GAAI,WACpCizB,EAAI6pJ,EAAM7pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,IAAK,IAAK,WACtCC,EAAI68K,EAAM78K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,IAAK,GAAI,WACrCmW,EAAI2mK,EAAM3mK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,GAAI,IAAK,WACrCI,EAAI28K,EAAM38K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,GAAI,GAAI,WAChCizB,EAAI8pJ,EAAM9pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,GAAI,GAAI,YACpCC,EAAI88K,EAAM98K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,IAAK,IAAK,YACtCmW,EAAI4mK,EAAM5mK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,GAAI,IAAK,UACrCI,EAAI28K,EAAM38K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,IAAK,EAAG,YACpCizB,EAAI8pJ,EAAM9pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,GAAI,IAAK,YACrCC,EAAI88K,EAAM98K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,IAAK,IAAK,SACtCmW,EAAI4mK,EAAM5mK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,GAAI,IAAK,YACrCI,EAAI28K,EAAM38K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,GAAI,EAAG,YACnCizB,EAAI8pJ,EAAM9pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,IAAK,IAAK,UACtCC,EAAI88K,EAAM98K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,GAAI,IAAK,YACrCmW,EAAI4mK,EAAM5mK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,IAAK,GAAI,YACrCI,EAAI28K,EAAM38K,EAAG+V,EAAGlW,EAAGgzB,EAAG9gB,EAAEnS,EAAI,GAAI,GAAI,WACpCizB,EAAI8pJ,EAAM9pJ,EAAG7yB,EAAG+V,EAAGlW,EAAGkS,EAAEnS,EAAI,IAAK,IAAK,YACtCC,EAAI88K,EAAM98K,EAAGgzB,EAAG7yB,EAAG+V,EAAGhE,EAAEnS,EAAI,GAAI,GAAI,WACpCmW,EAAI4mK,EAAM5mK,EAAGlW,EAAGgzB,EAAG7yB,EAAG+R,EAAEnS,EAAI,GAAI,IAAK,WACrCI,EAAIo8K,EAAQp8K,EAAGi9K,GACflnK,EAAIqmK,EAAQrmK,EAAGmnK,GACfr9K,EAAIu8K,EAAQv8K,EAAGs9K,GACftqJ,EAAIupJ,EAAQvpJ,EAAGuqJ,GAGjB,MAAO,CAACp9K,EAAG+V,EAAGlW,EAAGgzB,GArHWwqJ,CA6H9B,SAAsBv5G,GACpB,GAAqB,IAAjBA,EAAMzjE,OACR,MAAO,GAMT,IAHA,IAAMi9K,EAAyB,EAAfx5G,EAAMzjE,OAChB4/E,EAAS,IAAI0zC,YAAYuoD,EAAgBoB,IAEtC19K,EAAI,EAAGA,EAAI09K,EAAS19K,GAAK,EAChCqgF,EAAOrgF,GAAK,KAAsB,IAAfkkE,EAAMlkE,EAAI,KAAcA,EAAI,GAGjD,OAAOqgF,EAzIgCs9F,CAAar7G,GAAuB,EAAfA,EAAM7hE,UAwLpEvB,EAAQ4yD,QAAUkrH,4BC9NlB,aAEArnK,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,aAAU,EAElB5yD,EAAQ4yD,QADO,iECNf,aAEAn8C,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,aAAU,EAElB,IAEgChhC,EAF5BqrJ,GAE4BrrJ,EAFO5wB,EAAQ,mBAEM4wB,EAAI+gC,WAAa/gC,EAAM,CAAEghC,QAAShhC,GAkCvF,IAAIksJ,EAhCJ,SAAeY,GACb,KAAK,EAAIzB,EAAUrqH,SAAS8rH,GAC1B,MAAM9tH,UAAU,gBAGlB,IAAI1oD,EACEm6E,EAAM,IAAIW,WAAW,IAuB3B,OArBAX,EAAI,IAAMn6E,EAAI6lB,SAAS2wJ,EAAKlgK,MAAM,EAAG,GAAI,OAAS,GAClD6jE,EAAI,GAAKn6E,IAAM,GAAK,IACpBm6E,EAAI,GAAKn6E,IAAM,EAAI,IACnBm6E,EAAI,GAAS,IAAJn6E,EAETm6E,EAAI,IAAMn6E,EAAI6lB,SAAS2wJ,EAAKlgK,MAAM,EAAG,IAAK,OAAS,EACnD6jE,EAAI,GAAS,IAAJn6E,EAETm6E,EAAI,IAAMn6E,EAAI6lB,SAAS2wJ,EAAKlgK,MAAM,GAAI,IAAK,OAAS,EACpD6jE,EAAI,GAAS,IAAJn6E,EAETm6E,EAAI,IAAMn6E,EAAI6lB,SAAS2wJ,EAAKlgK,MAAM,GAAI,IAAK,OAAS,EACpD6jE,EAAI,GAAS,IAAJn6E,EAGTm6E,EAAI,KAAOn6E,EAAI6lB,SAAS2wJ,EAAKlgK,MAAM,GAAI,IAAK,KAAO,cAAgB,IACnE6jE,EAAI,IAAMn6E,EAAI,WAAc,IAC5Bm6E,EAAI,IAAMn6E,IAAM,GAAK,IACrBm6E,EAAI,IAAMn6E,IAAM,GAAK,IACrBm6E,EAAI,IAAMn6E,IAAM,EAAI,IACpBm6E,EAAI,IAAU,IAAJn6E,EACHm6E,GAITriF,EAAQ4yD,QAAUkrH,+CC5ClB,aAEArnK,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,aAAU,EAElB5yD,EAAQ4yD,QADO,gJCNf,aAEAn8C,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,QASR,WACE,IAAKoxB,EACH,MAAM,IAAI7iF,MAAM,4GAGlB,OAAO6iF,EAAgB26F,IARzB,IAAM36F,EAAoC,oBAAX55D,QAA0BA,OAAO45D,iBAAmB55D,OAAO45D,gBAAgBw/B,KAAKp5F,SAA+B,oBAAb65D,UAAgE,mBAA7BA,SAASD,iBAAkCC,SAASD,gBAAgBw/B,KAAKv/B,UACvO06F,EAAQ,IAAI37F,WAAW,8BCZ7B,aASA,SAASjjF,EAAEuR,EAAG2B,EAAGC,EAAGuuE,GAClB,OAAQnwE,GACN,KAAK,EACH,OAAO2B,EAAIC,GAAKD,EAAIwuE,EAEtB,KAAK,EACH,OAAOxuE,EAAIC,EAAIuuE,EAEjB,KAAK,EACH,OAAOxuE,EAAIC,EAAID,EAAIwuE,EAAIvuE,EAAIuuE,EAE7B,KAAK,EACH,OAAOxuE,EAAIC,EAAIuuE,GAIrB,SAASm9F,EAAK3rK,EAAGtS,GACf,OAAOsS,GAAKtS,EAAIsS,IAAM,GAAKtS,EAxB7B8V,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,aAAU,EAiGlB,IAAIkrH,EAzEJ,SAAc16G,GACZ,IAAM4lD,EAAI,CAAC,WAAY,WAAY,WAAY,YACzC5zB,EAAI,CAAC,WAAY,WAAY,WAAY,UAAY,YAE3D,GAAqB,iBAAVhyB,EAAoB,CAC7B,IAAMuE,EAAMo2G,SAASC,mBAAmB56G,IAExCA,EAAQ,GAER,IAAK,IAAItiE,EAAI,EAAGA,EAAI6mE,EAAIpmE,SAAUT,EAChCsiE,EAAMpzD,KAAK23D,EAAI/9C,WAAW9oB,SAElBiQ,MAAMwU,QAAQ69C,KAExBA,EAAQryD,MAAM2gB,UAAUlT,MAAMld,KAAK8hE,IAGrCA,EAAMpzD,KAAK,KAKX,IAJA,IAAMgH,EAAIosD,EAAM7hE,OAAS,EAAI,EACvBs2E,EAAI9vE,KAAK2lE,KAAK12D,EAAI,IAClBstE,EAAI,IAAIvzE,MAAM8mE,GAEXp8D,EAAI,EAAGA,EAAIo8D,IAAKp8D,EAAG,CAG1B,IAFA,IAAM4mE,EAAM,IAAIwyC,YAAY,IAEnB15G,EAAI,EAAGA,EAAI,KAAMA,EACxBknE,EAAIlnE,GAAKioD,EAAU,GAAJ3nD,EAAa,EAAJN,IAAU,GAAKioD,EAAU,GAAJ3nD,EAAa,EAAJN,EAAQ,IAAM,GAAKioD,EAAU,GAAJ3nD,EAAa,EAAJN,EAAQ,IAAM,EAAIioD,EAAU,GAAJ3nD,EAAa,EAAJN,EAAQ,GAGnImpE,EAAE7oE,GAAK4mE,EAGTiC,EAAEzM,EAAI,GAAG,IAA2B,GAApBzU,EAAM7hE,OAAS,GAASwG,KAAKomE,IAAI,EAAG,IACpDmW,EAAEzM,EAAI,GAAG,IAAM9vE,KAAKI,MAAMm8E,EAAEzM,EAAI,GAAG,KACnCyM,EAAEzM,EAAI,GAAG,IAA2B,GAApBzU,EAAM7hE,OAAS,GAAS,WAExC,IAAK,IAAIoa,EAAI,EAAGA,EAAIk8D,IAAKl8D,EAAG,CAG1B,IAFA,IAAMsuG,EAAI,IAAI4K,YAAY,IAEjBj0H,EAAI,EAAGA,EAAI,KAAMA,EACxBqpH,EAAErpH,GAAK0jF,EAAE3oE,GAAG/a,GAGd,IAAK,IAAIi+K,EAAI,GAAIA,EAAI,KAAMA,EACzB50D,EAAE40D,GAAKD,EAAK30D,EAAE40D,EAAI,GAAK50D,EAAE40D,EAAI,GAAK50D,EAAE40D,EAAI,IAAM50D,EAAE40D,EAAI,IAAK,GAS3D,IANA,IAAI39K,EAAIk0F,EAAE,GACNn+E,EAAIm+E,EAAE,GACNr0F,EAAIq0F,EAAE,GACNrhE,EAAIqhE,EAAE,GACN10F,EAAI00F,EAAE,GAED0pF,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAMxtK,EAAIvJ,KAAKI,MAAM22K,EAAI,IACnB5vK,EAAI0vK,EAAK19K,EAAG,GAAKnB,EAAEuR,EAAG2F,EAAGlW,EAAGgzB,GAAKrzB,EAAIsoH,EAAE13G,GAAK24G,EAAE60D,KAAO,EAC3Dp+K,EAAIqzB,EACJA,EAAIhzB,EACJA,EAAI69K,EAAK3nK,EAAG,MAAQ,EACpBA,EAAI/V,EACJA,EAAIgO,EAGNkmF,EAAE,GAAKA,EAAE,GAAKl0F,IAAM,EACpBk0F,EAAE,GAAKA,EAAE,GAAKn+E,IAAM,EACpBm+E,EAAE,GAAKA,EAAE,GAAKr0F,IAAM,EACpBq0F,EAAE,GAAKA,EAAE,GAAKrhE,IAAM,EACpBqhE,EAAE,GAAKA,EAAE,GAAK10F,IAAM,EAGtB,MAAO,CAAC00F,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,EAAI,IAAa,IAAPA,EAAE,GAAWA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,EAAI,IAAa,IAAPA,EAAE,GAAWA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,EAAI,IAAa,IAAPA,EAAE,GAAWA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,EAAI,IAAa,IAAPA,EAAE,GAAWA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,GAAK,IAAMA,EAAE,IAAM,EAAI,IAAa,IAAPA,EAAE,KAIxVp1F,EAAQ4yD,QAAUkrH,4BCvGlB,aAEArnK,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,aAAU,EAElB,IAEgChhC,EAF5BqrJ,GAE4BrrJ,EAFO5wB,EAAQ,mBAEM4wB,EAAI+gC,WAAa/gC,EAAM,CAAEghC,QAAShhC,GAQvF,IAFA,IAAMmtJ,EAAY,GAETj+K,EAAI,EAAGA,EAAI,MAAOA,EACzBi+K,EAAU/uK,MAAMlP,EAAI,KAAO2K,SAAS,IAAI+/C,OAAO,IAmBjD,IAAIsyH,EAhBJ,SAAmBz7F,GAAiB,IAAZh7E,EAAYC,UAAA/F,OAAA,QAAAsD,IAAAyC,UAAA,GAAAA,UAAA,GAAH,EAGzBo3K,GAAQK,EAAU18F,EAAIh7E,EAAS,IAAM03K,EAAU18F,EAAIh7E,EAAS,IAAM03K,EAAU18F,EAAIh7E,EAAS,IAAM03K,EAAU18F,EAAIh7E,EAAS,IAAM,IAAM03K,EAAU18F,EAAIh7E,EAAS,IAAM03K,EAAU18F,EAAIh7E,EAAS,IAAM,IAAM03K,EAAU18F,EAAIh7E,EAAS,IAAM03K,EAAU18F,EAAIh7E,EAAS,IAAM,IAAM03K,EAAU18F,EAAIh7E,EAAS,IAAM03K,EAAU18F,EAAIh7E,EAAS,IAAM,IAAM03K,EAAU18F,EAAIh7E,EAAS,KAAO03K,EAAU18F,EAAIh7E,EAAS,KAAO03K,EAAU18F,EAAIh7E,EAAS,KAAO03K,EAAU18F,EAAIh7E,EAAS,KAAO03K,EAAU18F,EAAIh7E,EAAS,KAAO03K,EAAU18F,EAAIh7E,EAAS,MAAMkW,cAM3f,KAAK,EAAI0/J,EAAUrqH,SAAS8rH,GAC1B,MAAM9tH,UAAU,+BAGlB,OAAO8tH,GAIT1+K,EAAQ4yD,QAAUkrH,+CCtClB,aAEArnK,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,aAAU,EAElB,IAUIosH,EAEAC,EAZAC,EAAO/B,EAAuBn8K,EAAQ,aAEtCk8K,EAAaC,EAAuBn8K,EAAQ,mBAEhD,SAASm8K,EAAuBvrJ,GAAO,OAAOA,GAAOA,EAAI+gC,WAAa/gC,EAAM,CAAEghC,QAAShhC,GAWvF,IAAIutJ,EAAa,EACbC,EAAa,EAkFjB,IAAItB,EAhFJ,SAAY76K,EAAS8rB,EAAK1nB,GACxB,IAAIvG,EAAIiuB,GAAO1nB,GAAU,EACnB4P,EAAI8X,GAAO,IAAIhe,MAAM,IAEvBolB,GADJlzB,EAAUA,GAAW,IACFkzB,MAAQ6oJ,EACvBK,OAAgCx6K,IAArB5B,EAAQo8K,SAAyBp8K,EAAQo8K,SAAWJ,EAInE,GAAY,MAAR9oJ,GAA4B,MAAZkpJ,EAAkB,CACpC,IAAMC,EAAYr8K,EAAQs8K,SAAWt8K,EAAQk/F,KAAO+8E,EAAKtsH,WAE7C,MAARz8B,IAEFA,EAAO6oJ,EAAU,CAAgB,EAAfM,EAAU,GAAWA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,KAG3F,MAAZD,IAEFA,EAAWJ,EAAiD,OAApCK,EAAU,IAAM,EAAIA,EAAU,KAQ1D,IAAIjG,OAA0Bx0K,IAAlB5B,EAAQo2K,MAAsBp2K,EAAQo2K,MAAQ30K,KAAKojE,MAG3D03G,OAA0B36K,IAAlB5B,EAAQu8K,MAAsBv8K,EAAQu8K,MAAQJ,EAAa,EAEjEh7K,EAAKi1K,EAAQ8F,GAAcK,EAAQJ,GAAc,IAavD,GAXIh7K,EAAK,QAA0BS,IAArB5B,EAAQo8K,WACpBA,EAAWA,EAAW,EAAI,QAKvBj7K,EAAK,GAAKi1K,EAAQ8F,SAAiCt6K,IAAlB5B,EAAQu8K,QAC5CA,EAAQ,GAINA,GAAS,IACX,MAAM,IAAIr+K,MAAM,mDAGlBg+K,EAAa9F,EACb+F,EAAaI,EACbP,EAAYI,EAIZ,IAAMrpK,GAA4B,KAAb,WAFrBqjK,GAAS,cAEiCmG,GAAS,WACnDvoK,EAAEnW,KAAOkV,IAAO,GAAK,IACrBiB,EAAEnW,KAAOkV,IAAO,GAAK,IACrBiB,EAAEnW,KAAOkV,IAAO,EAAI,IACpBiB,EAAEnW,KAAY,IAALkV,EAET,IAAMypK,EAAMpG,EAAQ,WAAc,IAAQ,UAC1CpiK,EAAEnW,KAAO2+K,IAAQ,EAAI,IACrBxoK,EAAEnW,KAAa,IAAN2+K,EAETxoK,EAAEnW,KAAO2+K,IAAQ,GAAK,GAAM,GAE5BxoK,EAAEnW,KAAO2+K,IAAQ,GAAK,IAEtBxoK,EAAEnW,KAAOu+K,IAAa,EAAI,IAE1BpoK,EAAEnW,KAAkB,IAAXu+K,EAET,IAAK,IAAI1+K,EAAI,EAAGA,EAAI,IAAKA,EACvBsW,EAAEnW,EAAIH,GAAKw1B,EAAKx1B,GAGlB,OAAOouB,IAAO,EAAImuJ,EAAWtqH,SAAS37C,IAIxCjX,EAAQ4yD,QAAUkrH,+DC1GlB,aAEArnK,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,aAAU,EAElB,IAAI+pH,EAAKQ,EAAuBn8K,EAAQ,aAEpC0+K,EAAMvC,EAAuBn8K,EAAQ,aAEzC,SAASm8K,EAAuBvrJ,GAAO,OAAOA,GAAOA,EAAI+gC,WAAa/gC,EAAM,CAAEghC,QAAShhC,GAEvF,IACIksJ,GADO,EAAInB,EAAG/pH,SAAS,KAAM,GAAM8sH,EAAI9sH,SAE3C5yD,EAAQ4yD,QAAUkrH,yDCflB,aAEArnK,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,QA0BR,SAAkB/nD,EAAM8rB,EAASgpJ,GAC/B,SAASC,EAAa95K,EAAO+5K,EAAW9wJ,EAAK1nB,GAS3C,GARqB,iBAAVvB,IACTA,EApBN,SAAuBsiB,GACrBA,EAAM21J,SAASC,mBAAmB51J,IAIlC,IAFA,IAAMg7C,EAAQ,GAELtiE,EAAI,EAAGA,EAAIsnB,EAAI7mB,SAAUT,EAChCsiE,EAAMpzD,KAAKoY,EAAIwB,WAAW9oB,IAG5B,OAAOsiE,EAWK08G,CAAch6K,IAGC,iBAAd+5K,IACTA,GAAY,EAAItgI,EAAOqT,SAASitH,IAGT,KAArBA,EAAUt+K,OACZ,MAAMqvD,UAAU,oEAMlB,IAAIwS,EAAQ,IAAI4f,WAAW,GAAKl9E,EAAMvE,QAOtC,GANA6hE,EAAMpb,IAAI63H,GACVz8G,EAAMpb,IAAIliD,EAAO+5K,EAAUt+K,SAC3B6hE,EAAQu8G,EAASv8G,IACX,GAAgB,GAAXA,EAAM,GAAYzsC,EAC7BysC,EAAM,GAAgB,GAAXA,EAAM,GAAY,IAEzBr0C,EAAK,CACP1nB,EAASA,GAAU,EAEnB,IAAK,IAAIvG,EAAI,EAAGA,EAAI,KAAMA,EACxBiuB,EAAI1nB,EAASvG,GAAKsiE,EAAMtiE,GAG1B,OAAOiuB,EAGT,OAAO,EAAImuJ,EAAWtqH,SAASwQ,GAIjC,IACEw8G,EAAa/0K,KAAOA,EACpB,MAAOwhB,IAKT,OAFAuzJ,EAAaG,IAAMA,EACnBH,EAAaI,IAAMA,EACZJ,GAtET5/K,EAAQggL,IAAMhgL,EAAQ+/K,SAAM,EAE5B,IAAI7C,EAAaC,EAAuBn8K,EAAQ,mBAE5Cu+C,EAAS49H,EAAuBn8K,EAAQ,eAE5C,SAASm8K,EAAuBvrJ,GAAO,OAAOA,GAAOA,EAAI+gC,WAAa/gC,EAAM,CAAEghC,QAAShhC,GAcvF,IAAMmuJ,EAAM,uCACZ//K,EAAQ+/K,IAAMA,EACd,IAAMC,EAAM,uCACZhgL,EAAQggL,IAAMA,iEC7Bd,aAEAvpK,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,aAAU,EAElB,IAAIssH,EAAO/B,EAAuBn8K,EAAQ,aAEtCk8K,EAAaC,EAAuBn8K,EAAQ,mBAEhD,SAASm8K,EAAuBvrJ,GAAO,OAAOA,GAAOA,EAAI+gC,WAAa/gC,EAAM,CAAEghC,QAAShhC,GAwBvF,IAAIksJ,EAtBJ,SAAY76K,EAAS8rB,EAAK1nB,GAGxB,IAAM44K,GAFNh9K,EAAUA,GAAW,IAEAs8K,SAAWt8K,EAAQk/F,KAAO+8E,EAAKtsH,WAMpD,GAHAqtH,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IAEvBlxJ,EAAK,CACP1nB,EAASA,GAAU,EAEnB,IAAK,IAAIvG,EAAI,EAAGA,EAAI,KAAMA,EACxBiuB,EAAI1nB,EAASvG,GAAKm/K,EAAKn/K,GAGzB,OAAOiuB,EAGT,OAAO,EAAImuJ,EAAWtqH,SAASqtH,IAIjCjgL,EAAQ4yD,QAAUkrH,+DCpClB,aAEArnK,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,aAAU,EAElB,IAAI+pH,EAAKQ,EAAuBn8K,EAAQ,aAEpCk/K,EAAO/C,EAAuBn8K,EAAQ,cAE1C,SAASm8K,EAAuBvrJ,GAAO,OAAOA,GAAOA,EAAI+gC,WAAa/gC,EAAM,CAAEghC,QAAShhC,GAEvF,IACIksJ,GADO,EAAInB,EAAG/pH,SAAS,KAAM,GAAMstH,EAAKttH,SAE5C5yD,EAAQ4yD,QAAUkrH,0DCflB,aAEArnK,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,aAAU,EAElB,IAEgChhC,EAF5BuuJ,GAE4BvuJ,EAFI5wB,EAAQ,gBAES4wB,EAAI+gC,WAAa/gC,EAAM,CAAEghC,QAAShhC,GAMvF,IAAIksJ,EAJJ,SAAkBY,GAChB,MAAuB,iBAATA,GAAqByB,EAAOvtH,QAAQp+C,KAAKkqK,IAIzD1+K,EAAQ4yD,QAAUkrH,4CChBlB,aAEArnK,OAAOgd,eAAezzB,EAAS,aAAc,CAC3C8F,OAAO,IAET9F,EAAQ4yD,aAAU,EAElB,IAEgChhC,EAF5BqrJ,GAE4BrrJ,EAFO5wB,EAAQ,mBAEM4wB,EAAI+gC,WAAa/gC,EAAM,CAAEghC,QAAShhC,GAUvF,IAAIksJ,EARJ,SAAiBY,GACf,KAAK,EAAIzB,EAAUrqH,SAAS8rH,GAC1B,MAAM9tH,UAAU,gBAGlB,OAAO7iC,SAAS2wJ,EAAKlzH,OAAO,GAAI,GAAI,KAItCxrD,EAAQ4yD,QAAUkrH,+CCpBlB;;;;;;;GASArnK,OAAAgd,eAAAzzB,EAAA,aAAA,CACA8F,OAAA,IAKA9F,EAAAogL,KAAA,uDACApgL,EAAA8kG,EAAA,UAEA9kG,EAAAqgL,gBAAA,wKACArgL,EAAAsgL,UAAA,IAAAtgL,EAAAqgL,gBAAA,qCAIArgL,EAAAugL,QAAA,IAAAptH,OAAA,KAAAnzD,EAAAogL,KAAA,KAAA,KACApgL,EAAAwgL,KAAA,IAAArtH,OAAA,KAAAnzD,EAAA8kG,EAAA,MAAA,KACA9kG,EAAAygL,mBAAA,IAAAttH,OAAA,KAAAnzD,EAAAqgL,gBAAA,KAAA,KACArgL,EAAA0gL,aAAA,IAAAvtH,OAAA,KAAAnzD,EAAAsgL,UAAA,KAAA,KACAtgL,EAAAinK,QAAA,IAAA9zG,OAAA,KAAAnzD,EAAAqgL,gBAAA,KAAArgL,EAAAsgL,UAAA,MAAA,KACAtgL,EAAA2gL,WAAA,IAAAxtH,OAAA,KAAAnzD,EAAAsgL,UAAA,MAAA,KA6CA,SAAAxZ,EAAA/lK,GACA,OAAAA,GAAA,IAAAA,GAAA,IAAAA,GAAA,IAAAA,GAAA,KAAA,KAAAA,GAAA,KAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OApCAf,EAAAgnK,OAAA,CANA,GAFA,GACA,GAFA,GAsBAhnK,EAAA6mK,OAJA,SAAA9lK,GACA,OAAAA,GAhBA,IAgBAA,GAAA,OAlBA,KAkBAA,GAjBA,KAiBAA,GAnBA,IAmBAA,GAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,SAgBAf,EAAA2mK,IAJA,SAAA5lK,GACA,OA7BA,KA6BAA,GA/BA,KA+BAA,GA9BA,KA8BAA,GAhCA,IAgCAA,GAgBAf,EAAA8mK,gBAAAA,EAaA9mK,EAAA+mK,WAJA,SAAAhmK,GACA,OAAA+lK,EAAA/lK,IAAAA,GAAA,IAAAA,GAAA,IAAA,KAAAA,GAAA,KAAAA,GAAA,MAAAA,GAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,MAAAA,GAAA,gCCvFA;;;;;;;GASA0V,OAAAgd,eAAAzzB,EAAA,aAAA,CACA8F,OAAA,IAKA9F,EAAAogL,KAAA,oDACApgL,EAAA4gL,gBAAA,yCACA5gL,EAAA8kG,EAAA,UAEA9kG,EAAAqgL,gBAAA,wKACArgL,EAAAsgL,UAAA,IAAAtgL,EAAAqgL,gBAAA,qCAIArgL,EAAAugL,QAAA,IAAAptH,OAAA,KAAAnzD,EAAAogL,KAAA,KAAA,KACApgL,EAAA6gL,mBAAA,IAAA1tH,OAAA,KAAAnzD,EAAA4gL,gBAAA,KAAA,KACA5gL,EAAAwgL,KAAA,IAAArtH,OAAA,KAAAnzD,EAAA8kG,EAAA,MAAA,KACA9kG,EAAAygL,mBAAA,IAAAttH,OAAA,KAAAnzD,EAAAqgL,gBAAA,KAAA,KACArgL,EAAA0gL,aAAA,IAAAvtH,OAAA,KAAAnzD,EAAAsgL,UAAA,KAAA,KACAtgL,EAAAinK,QAAA,IAAA9zG,OAAA,KAAAnzD,EAAAqgL,gBAAA,KAAArgL,EAAAsgL,UAAA,MAAA,KACAtgL,EAAA2gL,WAAA,IAAAxtH,OAAA,KAAAnzD,EAAAsgL,UAAA,MAAA,KA4EA,SAAAxZ,EAAA/lK,GACA,OAAAA,GAAA,IAAAA,GAAA,IAAAA,GAAA,IAAAA,GAAA,KAAA,KAAAA,GAAA,KAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAnEAf,EAAAgnK,OAAA,CANA,GAFA,GACA,GAFA,GAsBAhnK,EAAA6mK,OAJA,SAAA9lK,GACA,OAAAA,GAAA,GAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,SAgBAf,EAAA8gL,iBAJA,SAAA//K,GACA,OAAAA,GAAA,GAAAA,GAAA,GAAA,KAAAA,GAAA,KAAAA,GAAAA,GAAA,IAAAA,GAAA,IAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAoBAf,EAAA+gL,uBAJA,SAAAhgL,GACA,OAAA,IAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAAA,EAAA,IAAAA,EAAA,KAAA,MAAAA,GAAAA,EAAA,KAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,SAgBAf,EAAA2mK,IAJA,SAAA5lK,GACA,OA3DA,KA2DAA,GA7DA,KA6DAA,GA5DA,KA4DAA,GA9DA,IA8DAA,GAiBAf,EAAA8mK,gBAAAA,EAaA9mK,EAAA+mK,WAJA,SAAAhmK,GACA,OAAA+lK,EAAA/lK,IAAAA,GAAA,IAAAA,GAAA,IAAA,KAAAA,GAAA,KAAAA,GAAA,MAAAA,GAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,MAAAA,GAAA,gCCxHA;;;;;;;GAiCA,SAAAomK,EAAApmK,GACA,OAAAA,GAAA,IAAAA,GAAA,IAAA,KAAAA,GAAAA,GAAA,IAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,MAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAAAA,GAAA,OAzBA0V,OAAAgd,eAAAzzB,EAAA,aAAA,CACA8F,OAAA,IAMA9F,EAAAghL,mBAAA,wKACAhhL,EAAAihL,aAAA,IAAAjhL,EAAAghL,mBAAA,qCAIAhhL,EAAAkhL,sBAAA,IAAA/tH,OAAA,KAAAnzD,EAAAghL,mBAAA,KAAA,KACAhhL,EAAAmhL,gBAAA,IAAAhuH,OAAA,KAAAnzD,EAAAihL,aAAA,KAAA,KACAjhL,EAAAqnK,WAAA,IAAAl0G,OAAA,KAAAnzD,EAAAghL,mBAAA,KAAAhhL,EAAAihL,aAAA,MAAA,KAcAjhL,EAAAmnK,kBAAAA,EAaAnnK,EAAAonK,aAJA,SAAArmK,GACA,OAAAomK,EAAApmK,IAAA,KAAAA,GAAA,KAAAA,GAAAA,GAAA,IAAAA,GAAA,IAAA,MAAAA,GAAAA,GAAA,KAAAA,GAAA,KAAAA,GAAA,MAAAA,GAAA,oBva/CA","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i {\r\n const worksheet = this.workbook.addWorksheet(options.sheetName);\r\n\r\n const dateFormats = options.dateFormats || [\r\n 'YYYY-MM-DD[T]HH:mm:ssZ',\r\n 'YYYY-MM-DD[T]HH:mm:ss',\r\n 'MM-DD-YYYY',\r\n 'YYYY-MM-DD',\r\n ];\r\n const map =\r\n options.map ||\r\n function(datum) {\r\n if (datum === '') {\r\n return null;\r\n }\r\n const datumNumber = Number(datum);\r\n if (!Number.isNaN(datumNumber) && datumNumber !== Infinity) {\r\n return datumNumber;\r\n }\r\n const dt = dateFormats.reduce((matchingDate, currentDateFormat) => {\r\n if (matchingDate) {\r\n return matchingDate;\r\n }\r\n const dayjsObj = dayjs(datum, currentDateFormat, true);\r\n if (dayjsObj.isValid()) {\r\n return dayjsObj;\r\n }\r\n return null;\r\n }, null);\r\n if (dt) {\r\n return new Date(dt.valueOf());\r\n }\r\n const special = SpecialValues[datum];\r\n if (special !== undefined) {\r\n return special;\r\n }\r\n return datum;\r\n };\r\n\r\n const csvStream = fastCsv\r\n .parse(options.parserOptions)\r\n .on('data', data => {\r\n worksheet.addRow(data.map(map));\r\n })\r\n .on('end', () => {\r\n csvStream.emit('worksheet', worksheet);\r\n });\r\n\r\n csvStream.on('worksheet', resolve).on('error', reject);\r\n\r\n stream.pipe(csvStream);\r\n });\r\n }\r\n\r\n /**\r\n * @deprecated since version 4.0. You should use `CSV#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\r\n */\r\n createInputStream() {\r\n throw new Error(\r\n '`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'\r\n );\r\n }\r\n\r\n write(stream, options) {\r\n return new Promise((resolve, reject) => {\r\n options = options || {};\r\n // const encoding = options.encoding || 'utf8';\r\n // const separator = options.separator || ',';\r\n // const quoteChar = options.quoteChar || '\\'';\r\n\r\n const worksheet = this.workbook.getWorksheet(options.sheetName || options.sheetId);\r\n\r\n const csvStream = fastCsv.format(options.formatterOptions);\r\n stream.on('finish', () => {\r\n resolve();\r\n });\r\n csvStream.on('error', reject);\r\n csvStream.pipe(stream);\r\n\r\n const {dateFormat, dateUTC} = options;\r\n const map =\r\n options.map ||\r\n (value => {\r\n if (value) {\r\n if (value.text || value.hyperlink) {\r\n return value.hyperlink || value.text || '';\r\n }\r\n if (value.formula || value.result) {\r\n return value.result || '';\r\n }\r\n if (value instanceof Date) {\r\n if (dateFormat) {\r\n return dateUTC\r\n ? dayjs.utc(value).format(dateFormat)\r\n : dayjs(value).format(dateFormat);\r\n }\r\n return dateUTC ? dayjs.utc(value).format() : dayjs(value).format();\r\n }\r\n if (value.error) {\r\n return value.error;\r\n }\r\n if (typeof value === 'object') {\r\n return JSON.stringify(value);\r\n }\r\n }\r\n return value;\r\n });\r\n\r\n const includeEmptyRows = options.includeEmptyRows === undefined || options.includeEmptyRows;\r\n let lastRow = 1;\r\n if (worksheet) {\r\n worksheet.eachRow((row, rowNumber) => {\r\n if (includeEmptyRows) {\r\n while (lastRow++ < rowNumber - 1) {\r\n csvStream.write([]);\r\n }\r\n }\r\n const {values} = row;\r\n values.shift();\r\n csvStream.write(values.map(map));\r\n lastRow = rowNumber;\r\n });\r\n }\r\n csvStream.end();\r\n });\r\n }\r\n\r\n writeFile(filename, options) {\r\n options = options || {};\r\n\r\n const streamOptions = {\r\n encoding: options.encoding || 'utf8',\r\n };\r\n const stream = fs.createWriteStream(filename, streamOptions);\r\n\r\n return this.write(stream, options);\r\n }\r\n\r\n async writeBuffer(options) {\r\n const stream = new StreamBuf();\r\n await this.write(stream, options);\r\n return stream.read();\r\n }\r\n}\r\n\r\nmodule.exports = CSV;\r\n","'use strict';\r\n\r\nconst colCache = require('../utils/col-cache');\r\n\r\nclass Anchor {\r\n constructor(worksheet, address, offset = 0) {\r\n if (!address) {\r\n this.nativeCol = 0;\r\n this.nativeColOff = 0;\r\n this.nativeRow = 0;\r\n this.nativeRowOff = 0;\r\n } else if (typeof address === 'string') {\r\n const decoded = colCache.decodeAddress(address);\r\n this.nativeCol = decoded.col + offset;\r\n this.nativeColOff = 0;\r\n this.nativeRow = decoded.row + offset;\r\n this.nativeRowOff = 0;\r\n } else if (address.nativeCol !== undefined) {\r\n this.nativeCol = address.nativeCol || 0;\r\n this.nativeColOff = address.nativeColOff || 0;\r\n this.nativeRow = address.nativeRow || 0;\r\n this.nativeRowOff = address.nativeRowOff || 0;\r\n } else if (address.col !== undefined) {\r\n this.col = address.col + offset;\r\n this.row = address.row + offset;\r\n } else {\r\n this.nativeCol = 0;\r\n this.nativeColOff = 0;\r\n this.nativeRow = 0;\r\n this.nativeRowOff = 0;\r\n }\r\n\r\n this.worksheet = worksheet;\r\n }\r\n\r\n static asInstance(model) {\r\n return model instanceof Anchor || model == null ? model : new Anchor(model);\r\n }\r\n\r\n get col() {\r\n return this.nativeCol + (Math.min(this.colWidth - 1, this.nativeColOff) / this.colWidth);\r\n }\r\n\r\n set col(v) {\r\n this.nativeCol = Math.floor(v);\r\n this.nativeColOff = Math.floor((v - this.nativeCol) * this.colWidth);\r\n }\r\n\r\n get row() {\r\n return this.nativeRow + (Math.min(this.rowHeight - 1, this.nativeRowOff) / this.rowHeight);\r\n }\r\n\r\n set row(v) {\r\n this.nativeRow = Math.floor(v);\r\n this.nativeRowOff = Math.floor((v - this.nativeRow) * this.rowHeight);\r\n }\r\n\r\n get colWidth() {\r\n return this.worksheet &&\r\n this.worksheet.getColumn(this.nativeCol + 1) &&\r\n this.worksheet.getColumn(this.nativeCol + 1).isCustomWidth\r\n ? Math.floor(this.worksheet.getColumn(this.nativeCol + 1).width * 10000)\r\n : 640000;\r\n }\r\n\r\n get rowHeight() {\r\n return this.worksheet &&\r\n this.worksheet.getRow(this.nativeRow + 1) &&\r\n this.worksheet.getRow(this.nativeRow + 1).height\r\n ? Math.floor(this.worksheet.getRow(this.nativeRow + 1).height * 10000)\r\n : 180000;\r\n }\r\n\r\n get model() {\r\n return {\r\n nativeCol: this.nativeCol,\r\n nativeColOff: this.nativeColOff,\r\n nativeRow: this.nativeRow,\r\n nativeRowOff: this.nativeRowOff,\r\n };\r\n }\r\n\r\n set model(value) {\r\n this.nativeCol = value.nativeCol;\r\n this.nativeColOff = value.nativeColOff;\r\n this.nativeRow = value.nativeRow;\r\n this.nativeRowOff = value.nativeRowOff;\r\n }\r\n}\r\n\r\nmodule.exports = Anchor;\r\n","/* eslint-disable max-classes-per-file */\r\nconst colCache = require('../utils/col-cache');\r\nconst _ = require('../utils/under-dash');\r\nconst Enums = require('./enums');\r\nconst {slideFormula} = require('../utils/shared-formula');\r\nconst Note = require('./note');\r\n// Cell requirements\r\n// Operate inside a worksheet\r\n// Store and retrieve a value with a range of types: text, number, date, hyperlink, reference, formula, etc.\r\n// Manage/use and manipulate cell format either as local to cell or inherited from column or row.\r\n\r\nclass Cell {\r\n constructor(row, column, address) {\r\n if (!row || !column) {\r\n throw new Error('A Cell needs a Row');\r\n }\r\n\r\n this._row = row;\r\n this._column = column;\r\n\r\n colCache.validateAddress(address);\r\n this._address = address;\r\n\r\n // TODO: lazy evaluation of this._value\r\n this._value = Value.create(Cell.Types.Null, this);\r\n\r\n this.style = this._mergeStyle(row.style, column.style, {});\r\n\r\n this._mergeCount = 0;\r\n }\r\n\r\n get worksheet() {\r\n return this._row.worksheet;\r\n }\r\n\r\n get workbook() {\r\n return this._row.worksheet.workbook;\r\n }\r\n\r\n // help GC by removing cyclic (and other) references\r\n destroy() {\r\n delete this.style;\r\n delete this._value;\r\n delete this._row;\r\n delete this._column;\r\n delete this._address;\r\n }\r\n\r\n // =========================================================================\r\n // Styles stuff\r\n get numFmt() {\r\n return this.style.numFmt;\r\n }\r\n\r\n set numFmt(value) {\r\n this.style.numFmt = value;\r\n }\r\n\r\n get font() {\r\n return this.style.font;\r\n }\r\n\r\n set font(value) {\r\n this.style.font = value;\r\n }\r\n\r\n get alignment() {\r\n return this.style.alignment;\r\n }\r\n\r\n set alignment(value) {\r\n this.style.alignment = value;\r\n }\r\n\r\n get border() {\r\n return this.style.border;\r\n }\r\n\r\n set border(value) {\r\n this.style.border = value;\r\n }\r\n\r\n get fill() {\r\n return this.style.fill;\r\n }\r\n\r\n set fill(value) {\r\n this.style.fill = value;\r\n }\r\n\r\n get protection() {\r\n return this.style.protection;\r\n }\r\n\r\n set protection(value) {\r\n this.style.protection = value;\r\n }\r\n\r\n _mergeStyle(rowStyle, colStyle, style) {\r\n const numFmt = (rowStyle && rowStyle.numFmt) || (colStyle && colStyle.numFmt);\r\n if (numFmt) style.numFmt = numFmt;\r\n\r\n const font = (rowStyle && rowStyle.font) || (colStyle && colStyle.font);\r\n if (font) style.font = font;\r\n\r\n const alignment = (rowStyle && rowStyle.alignment) || (colStyle && colStyle.alignment);\r\n if (alignment) style.alignment = alignment;\r\n\r\n const border = (rowStyle && rowStyle.border) || (colStyle && colStyle.border);\r\n if (border) style.border = border;\r\n\r\n const fill = (rowStyle && rowStyle.fill) || (colStyle && colStyle.fill);\r\n if (fill) style.fill = fill;\r\n\r\n const protection = (rowStyle && rowStyle.protection) || (colStyle && colStyle.protection);\r\n if (protection) style.protection = protection;\r\n\r\n return style;\r\n }\r\n\r\n // =========================================================================\r\n // return the address for this cell\r\n get address() {\r\n return this._address;\r\n }\r\n\r\n get row() {\r\n return this._row.number;\r\n }\r\n\r\n get col() {\r\n return this._column.number;\r\n }\r\n\r\n get $col$row() {\r\n return `$${this._column.letter}$${this.row}`;\r\n }\r\n\r\n // =========================================================================\r\n // Value stuff\r\n\r\n get type() {\r\n return this._value.type;\r\n }\r\n\r\n get effectiveType() {\r\n return this._value.effectiveType;\r\n }\r\n\r\n toCsvString() {\r\n return this._value.toCsvString();\r\n }\r\n\r\n // =========================================================================\r\n // Merge stuff\r\n\r\n addMergeRef() {\r\n this._mergeCount++;\r\n }\r\n\r\n releaseMergeRef() {\r\n this._mergeCount--;\r\n }\r\n\r\n get isMerged() {\r\n return this._mergeCount > 0 || this.type === Cell.Types.Merge;\r\n }\r\n\r\n merge(master, ignoreStyle) {\r\n this._value.release();\r\n this._value = Value.create(Cell.Types.Merge, this, master);\r\n if (!ignoreStyle) {\r\n this.style = master.style;\r\n }\r\n }\r\n\r\n unmerge() {\r\n if (this.type === Cell.Types.Merge) {\r\n this._value.release();\r\n this._value = Value.create(Cell.Types.Null, this);\r\n this.style = this._mergeStyle(this._row.style, this._column.style, {});\r\n }\r\n }\r\n\r\n isMergedTo(master) {\r\n if (this._value.type !== Cell.Types.Merge) return false;\r\n return this._value.isMergedTo(master);\r\n }\r\n\r\n get master() {\r\n if (this.type === Cell.Types.Merge) {\r\n return this._value.master;\r\n }\r\n return this; // an unmerged cell is its own master\r\n }\r\n\r\n get isHyperlink() {\r\n return this._value.type === Cell.Types.Hyperlink;\r\n }\r\n\r\n get hyperlink() {\r\n return this._value.hyperlink;\r\n }\r\n\r\n // return the value\r\n get value() {\r\n return this._value.value;\r\n }\r\n\r\n // set the value - can be number, string or raw\r\n set value(v) {\r\n // special case - merge cells set their master's value\r\n if (this.type === Cell.Types.Merge) {\r\n this._value.master.value = v;\r\n return;\r\n }\r\n\r\n this._value.release();\r\n\r\n // assign value\r\n this._value = Value.create(Value.getType(v), this, v);\r\n }\r\n\r\n get note() {\r\n return this._comment && this._comment.note;\r\n }\r\n\r\n set note(note) {\r\n this._comment = new Note(note);\r\n }\r\n\r\n get text() {\r\n return this._value.toString();\r\n }\r\n\r\n get html() {\r\n return _.escapeHtml(this.text);\r\n }\r\n\r\n toString() {\r\n return this.text;\r\n }\r\n\r\n _upgradeToHyperlink(hyperlink) {\r\n // if this cell is a string, turn it into a Hyperlink\r\n if (this.type === Cell.Types.String) {\r\n this._value = Value.create(Cell.Types.Hyperlink, this, {\r\n text: this._value.value,\r\n hyperlink,\r\n });\r\n }\r\n }\r\n\r\n // =========================================================================\r\n // Formula stuff\r\n get formula() {\r\n return this._value.formula;\r\n }\r\n\r\n get result() {\r\n return this._value.result;\r\n }\r\n\r\n get formulaType() {\r\n return this._value.formulaType;\r\n }\r\n\r\n // =========================================================================\r\n // Name stuff\r\n get fullAddress() {\r\n const {worksheet} = this._row;\r\n return {\r\n sheetName: worksheet.name,\r\n address: this.address,\r\n row: this.row,\r\n col: this.col,\r\n };\r\n }\r\n\r\n get name() {\r\n return this.names[0];\r\n }\r\n\r\n set name(value) {\r\n this.names = [value];\r\n }\r\n\r\n get names() {\r\n return this.workbook.definedNames.getNamesEx(this.fullAddress);\r\n }\r\n\r\n set names(value) {\r\n const {definedNames} = this.workbook;\r\n definedNames.removeAllNames(this.fullAddress);\r\n value.forEach(name => {\r\n definedNames.addEx(this.fullAddress, name);\r\n });\r\n }\r\n\r\n addName(name) {\r\n this.workbook.definedNames.addEx(this.fullAddress, name);\r\n }\r\n\r\n removeName(name) {\r\n this.workbook.definedNames.removeEx(this.fullAddress, name);\r\n }\r\n\r\n removeAllNames() {\r\n this.workbook.definedNames.removeAllNames(this.fullAddress);\r\n }\r\n\r\n // =========================================================================\r\n // Data Validation stuff\r\n get _dataValidations() {\r\n return this.worksheet.dataValidations;\r\n }\r\n\r\n get dataValidation() {\r\n return this._dataValidations.find(this.address);\r\n }\r\n\r\n set dataValidation(value) {\r\n this._dataValidations.add(this.address, value);\r\n }\r\n\r\n // =========================================================================\r\n // Model stuff\r\n\r\n get model() {\r\n const {model} = this._value;\r\n model.style = this.style;\r\n if (this._comment) {\r\n model.comment = this._comment.model;\r\n }\r\n return model;\r\n }\r\n\r\n set model(value) {\r\n this._value.release();\r\n this._value = Value.create(value.type, this);\r\n this._value.model = value;\r\n\r\n if (value.comment) {\r\n switch (value.comment.type) {\r\n case 'note':\r\n this._comment = Note.fromModel(value.comment);\r\n break;\r\n }\r\n }\r\n\r\n if (value.style) {\r\n this.style = value.style;\r\n } else {\r\n this.style = {};\r\n }\r\n }\r\n}\r\nCell.Types = Enums.ValueType;\r\n\r\n// =============================================================================\r\n// Internal Value Types\r\n\r\nclass NullValue {\r\n constructor(cell) {\r\n this.model = {\r\n address: cell.address,\r\n type: Cell.Types.Null,\r\n };\r\n }\r\n\r\n get value() {\r\n return null;\r\n }\r\n\r\n set value(value) {\r\n // nothing to do\r\n }\r\n\r\n get type() {\r\n return Cell.Types.Null;\r\n }\r\n\r\n get effectiveType() {\r\n return Cell.Types.Null;\r\n }\r\n\r\n get address() {\r\n return this.model.address;\r\n }\r\n\r\n set address(value) {\r\n this.model.address = value;\r\n }\r\n\r\n toCsvString() {\r\n return '';\r\n }\r\n\r\n release() {}\r\n\r\n toString() {\r\n return '';\r\n }\r\n}\r\n\r\nclass NumberValue {\r\n constructor(cell, value) {\r\n this.model = {\r\n address: cell.address,\r\n type: Cell.Types.Number,\r\n value,\r\n };\r\n }\r\n\r\n get value() {\r\n return this.model.value;\r\n }\r\n\r\n set value(value) {\r\n this.model.value = value;\r\n }\r\n\r\n get type() {\r\n return Cell.Types.Number;\r\n }\r\n\r\n get effectiveType() {\r\n return Cell.Types.Number;\r\n }\r\n\r\n get address() {\r\n return this.model.address;\r\n }\r\n\r\n set address(value) {\r\n this.model.address = value;\r\n }\r\n\r\n toCsvString() {\r\n return this.model.value.toString();\r\n }\r\n\r\n release() {}\r\n\r\n toString() {\r\n return this.model.value.toString();\r\n }\r\n}\r\n\r\nclass StringValue {\r\n constructor(cell, value) {\r\n this.model = {\r\n address: cell.address,\r\n type: Cell.Types.String,\r\n value,\r\n };\r\n }\r\n\r\n get value() {\r\n return this.model.value;\r\n }\r\n\r\n set value(value) {\r\n this.model.value = value;\r\n }\r\n\r\n get type() {\r\n return Cell.Types.String;\r\n }\r\n\r\n get effectiveType() {\r\n return Cell.Types.String;\r\n }\r\n\r\n get address() {\r\n return this.model.address;\r\n }\r\n\r\n set address(value) {\r\n this.model.address = value;\r\n }\r\n\r\n toCsvString() {\r\n return `\"${this.model.value.replace(/\"/g, '\"\"')}\"`;\r\n }\r\n\r\n release() {}\r\n\r\n toString() {\r\n return this.model.value;\r\n }\r\n}\r\n\r\nclass RichTextValue {\r\n constructor(cell, value) {\r\n this.model = {\r\n address: cell.address,\r\n type: Cell.Types.String,\r\n value,\r\n };\r\n }\r\n\r\n get value() {\r\n return this.model.value;\r\n }\r\n\r\n set value(value) {\r\n this.model.value = value;\r\n }\r\n\r\n toString() {\r\n return this.model.value.richText.map(t => t.text).join('');\r\n }\r\n\r\n get type() {\r\n return Cell.Types.RichText;\r\n }\r\n\r\n get effectiveType() {\r\n return Cell.Types.RichText;\r\n }\r\n\r\n get address() {\r\n return this.model.address;\r\n }\r\n\r\n set address(value) {\r\n this.model.address = value;\r\n }\r\n\r\n toCsvString() {\r\n return `\"${this.text.replace(/\"/g, '\"\"')}\"`;\r\n }\r\n\r\n release() {}\r\n}\r\n\r\nclass DateValue {\r\n constructor(cell, value) {\r\n this.model = {\r\n address: cell.address,\r\n type: Cell.Types.Date,\r\n value,\r\n };\r\n }\r\n\r\n get value() {\r\n return this.model.value;\r\n }\r\n\r\n set value(value) {\r\n this.model.value = value;\r\n }\r\n\r\n get type() {\r\n return Cell.Types.Date;\r\n }\r\n\r\n get effectiveType() {\r\n return Cell.Types.Date;\r\n }\r\n\r\n get address() {\r\n return this.model.address;\r\n }\r\n\r\n set address(value) {\r\n this.model.address = value;\r\n }\r\n\r\n toCsvString() {\r\n return this.model.value.toISOString();\r\n }\r\n\r\n release() {}\r\n\r\n toString() {\r\n return this.model.value.toString();\r\n }\r\n}\r\n\r\nclass HyperlinkValue {\r\n constructor(cell, value) {\r\n this.model = {\r\n address: cell.address,\r\n type: Cell.Types.Hyperlink,\r\n text: value ? value.text : undefined,\r\n hyperlink: value ? value.hyperlink : undefined,\r\n };\r\n if (value && value.tooltip) {\r\n this.model.tooltip = value.tooltip;\r\n }\r\n }\r\n\r\n get value() {\r\n const v = {\r\n text: this.model.text,\r\n hyperlink: this.model.hyperlink,\r\n };\r\n if (this.model.tooltip) {\r\n v.tooltip = this.model.tooltip;\r\n }\r\n return v;\r\n }\r\n\r\n set value(value) {\r\n this.model = {\r\n text: value.text,\r\n hyperlink: value.hyperlink,\r\n };\r\n if (value.tooltip) {\r\n this.model.tooltip = value.tooltip;\r\n }\r\n }\r\n\r\n get text() {\r\n return this.model.text;\r\n }\r\n\r\n set text(value) {\r\n this.model.text = value;\r\n }\r\n\r\n /*\r\n get tooltip() {\r\n return this.model.tooltip;\r\n }\r\n\r\n set tooltip(value) {\r\n this.model.tooltip = value;\r\n } */\r\n\r\n get hyperlink() {\r\n return this.model.hyperlink;\r\n }\r\n\r\n set hyperlink(value) {\r\n this.model.hyperlink = value;\r\n }\r\n\r\n get type() {\r\n return Cell.Types.Hyperlink;\r\n }\r\n\r\n get effectiveType() {\r\n return Cell.Types.Hyperlink;\r\n }\r\n\r\n get address() {\r\n return this.model.address;\r\n }\r\n\r\n set address(value) {\r\n this.model.address = value;\r\n }\r\n\r\n toCsvString() {\r\n return this.model.hyperlink;\r\n }\r\n\r\n release() {}\r\n\r\n toString() {\r\n return this.model.text;\r\n }\r\n}\r\n\r\nclass MergeValue {\r\n constructor(cell, master) {\r\n this.model = {\r\n address: cell.address,\r\n type: Cell.Types.Merge,\r\n master: master ? master.address : undefined,\r\n };\r\n this._master = master;\r\n if (master) {\r\n master.addMergeRef();\r\n }\r\n }\r\n\r\n get value() {\r\n return this._master.value;\r\n }\r\n\r\n set value(value) {\r\n if (value instanceof Cell) {\r\n if (this._master) {\r\n this._master.releaseMergeRef();\r\n }\r\n value.addMergeRef();\r\n this._master = value;\r\n } else {\r\n this._master.value = value;\r\n }\r\n }\r\n\r\n isMergedTo(master) {\r\n return master === this._master;\r\n }\r\n\r\n get master() {\r\n return this._master;\r\n }\r\n\r\n get type() {\r\n return Cell.Types.Merge;\r\n }\r\n\r\n get effectiveType() {\r\n return this._master.effectiveType;\r\n }\r\n\r\n get address() {\r\n return this.model.address;\r\n }\r\n\r\n set address(value) {\r\n this.model.address = value;\r\n }\r\n\r\n toCsvString() {\r\n return '';\r\n }\r\n\r\n release() {\r\n this._master.releaseMergeRef();\r\n }\r\n\r\n toString() {\r\n return this.value.toString();\r\n }\r\n}\r\n\r\nclass FormulaValue {\r\n constructor(cell, value) {\r\n this.cell = cell;\r\n\r\n this.model = {\r\n address: cell.address,\r\n type: Cell.Types.Formula,\r\n shareType: value ? value.shareType : undefined,\r\n ref: value ? value.ref : undefined,\r\n formula: value ? value.formula : undefined,\r\n sharedFormula: value ? value.sharedFormula : undefined,\r\n result: value ? value.result : undefined,\r\n };\r\n }\r\n\r\n _copyModel(model) {\r\n const copy = {};\r\n const cp = name => {\r\n const value = model[name];\r\n if (value) {\r\n copy[name] = value;\r\n }\r\n };\r\n cp('formula');\r\n cp('result');\r\n cp('ref');\r\n cp('shareType');\r\n cp('sharedFormula');\r\n return copy;\r\n }\r\n\r\n get value() {\r\n return this._copyModel(this.model);\r\n }\r\n\r\n set value(value) {\r\n this.model = this._copyModel(value);\r\n }\r\n\r\n validate(value) {\r\n switch (Value.getType(value)) {\r\n case Cell.Types.Null:\r\n case Cell.Types.String:\r\n case Cell.Types.Number:\r\n case Cell.Types.Date:\r\n break;\r\n case Cell.Types.Hyperlink:\r\n case Cell.Types.Formula:\r\n default:\r\n throw new Error('Cannot process that type of result value');\r\n }\r\n }\r\n\r\n get dependencies() {\r\n // find all the ranges and cells mentioned in the formula\r\n const ranges = this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g);\r\n const cells = this.formula\r\n .replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g, '')\r\n .match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}/g);\r\n return {\r\n ranges,\r\n cells,\r\n };\r\n }\r\n\r\n get formula() {\r\n return this.model.formula || this._getTranslatedFormula();\r\n }\r\n\r\n set formula(value) {\r\n this.model.formula = value;\r\n }\r\n\r\n get formulaType() {\r\n if (this.model.formula) {\r\n return Enums.FormulaType.Master;\r\n }\r\n if (this.model.sharedFormula) {\r\n return Enums.FormulaType.Shared;\r\n }\r\n return Enums.FormulaType.None;\r\n }\r\n\r\n get result() {\r\n return this.model.result;\r\n }\r\n\r\n set result(value) {\r\n this.model.result = value;\r\n }\r\n\r\n get type() {\r\n return Cell.Types.Formula;\r\n }\r\n\r\n get effectiveType() {\r\n const v = this.model.result;\r\n if (v === null || v === undefined) {\r\n return Enums.ValueType.Null;\r\n }\r\n if (v instanceof String || typeof v === 'string') {\r\n return Enums.ValueType.String;\r\n }\r\n if (typeof v === 'number') {\r\n return Enums.ValueType.Number;\r\n }\r\n if (v instanceof Date) {\r\n return Enums.ValueType.Date;\r\n }\r\n if (v.text && v.hyperlink) {\r\n return Enums.ValueType.Hyperlink;\r\n }\r\n if (v.formula) {\r\n return Enums.ValueType.Formula;\r\n }\r\n\r\n return Enums.ValueType.Null;\r\n }\r\n\r\n get address() {\r\n return this.model.address;\r\n }\r\n\r\n set address(value) {\r\n this.model.address = value;\r\n }\r\n\r\n _getTranslatedFormula() {\r\n if (!this._translatedFormula && this.model.sharedFormula) {\r\n const {worksheet} = this.cell;\r\n const master = worksheet.findCell(this.model.sharedFormula);\r\n this._translatedFormula =\r\n master && slideFormula(master.formula, master.address, this.model.address);\r\n }\r\n return this._translatedFormula;\r\n }\r\n\r\n toCsvString() {\r\n return `${this.model.result || ''}`;\r\n }\r\n\r\n release() {}\r\n\r\n toString() {\r\n return this.model.result ? this.model.result.toString() : '';\r\n }\r\n}\r\n\r\nclass SharedStringValue {\r\n constructor(cell, value) {\r\n this.model = {\r\n address: cell.address,\r\n type: Cell.Types.SharedString,\r\n value,\r\n };\r\n }\r\n\r\n get value() {\r\n return this.model.value;\r\n }\r\n\r\n set value(value) {\r\n this.model.value = value;\r\n }\r\n\r\n get type() {\r\n return Cell.Types.SharedString;\r\n }\r\n\r\n get effectiveType() {\r\n return Cell.Types.SharedString;\r\n }\r\n\r\n get address() {\r\n return this.model.address;\r\n }\r\n\r\n set address(value) {\r\n this.model.address = value;\r\n }\r\n\r\n toCsvString() {\r\n return this.model.value.toString();\r\n }\r\n\r\n release() {}\r\n\r\n toString() {\r\n return this.model.value.toString();\r\n }\r\n}\r\n\r\nclass BooleanValue {\r\n constructor(cell, value) {\r\n this.model = {\r\n address: cell.address,\r\n type: Cell.Types.Boolean,\r\n value,\r\n };\r\n }\r\n\r\n get value() {\r\n return this.model.value;\r\n }\r\n\r\n set value(value) {\r\n this.model.value = value;\r\n }\r\n\r\n get type() {\r\n return Cell.Types.Boolean;\r\n }\r\n\r\n get effectiveType() {\r\n return Cell.Types.Boolean;\r\n }\r\n\r\n get address() {\r\n return this.model.address;\r\n }\r\n\r\n set address(value) {\r\n this.model.address = value;\r\n }\r\n\r\n toCsvString() {\r\n return this.model.value ? 1 : 0;\r\n }\r\n\r\n release() {}\r\n\r\n toString() {\r\n return this.model.value.toString();\r\n }\r\n}\r\n\r\nclass ErrorValue {\r\n constructor(cell, value) {\r\n this.model = {\r\n address: cell.address,\r\n type: Cell.Types.Error,\r\n value,\r\n };\r\n }\r\n\r\n get value() {\r\n return this.model.value;\r\n }\r\n\r\n set value(value) {\r\n this.model.value = value;\r\n }\r\n\r\n get type() {\r\n return Cell.Types.Error;\r\n }\r\n\r\n get effectiveType() {\r\n return Cell.Types.Error;\r\n }\r\n\r\n get address() {\r\n return this.model.address;\r\n }\r\n\r\n set address(value) {\r\n this.model.address = value;\r\n }\r\n\r\n toCsvString() {\r\n return this.toString();\r\n }\r\n\r\n release() {}\r\n\r\n toString() {\r\n return this.model.value.error.toString();\r\n }\r\n}\r\n\r\nclass JSONValue {\r\n constructor(cell, value) {\r\n this.model = {\r\n address: cell.address,\r\n type: Cell.Types.String,\r\n value: JSON.stringify(value),\r\n rawValue: value,\r\n };\r\n }\r\n\r\n get value() {\r\n return this.model.rawValue;\r\n }\r\n\r\n set value(value) {\r\n this.model.rawValue = value;\r\n this.model.value = JSON.stringify(value);\r\n }\r\n\r\n get type() {\r\n return Cell.Types.String;\r\n }\r\n\r\n get effectiveType() {\r\n return Cell.Types.String;\r\n }\r\n\r\n get address() {\r\n return this.model.address;\r\n }\r\n\r\n set address(value) {\r\n this.model.address = value;\r\n }\r\n\r\n toCsvString() {\r\n return this.model.value;\r\n }\r\n\r\n release() {}\r\n\r\n toString() {\r\n return this.model.value;\r\n }\r\n}\r\n\r\n// Value is a place to hold common static Value type functions\r\nconst Value = {\r\n getType(value) {\r\n if (value === null || value === undefined) {\r\n return Cell.Types.Null;\r\n }\r\n if (value instanceof String || typeof value === 'string') {\r\n return Cell.Types.String;\r\n }\r\n if (typeof value === 'number') {\r\n return Cell.Types.Number;\r\n }\r\n if (typeof value === 'boolean') {\r\n return Cell.Types.Boolean;\r\n }\r\n if (value instanceof Date) {\r\n return Cell.Types.Date;\r\n }\r\n if (value.text && value.hyperlink) {\r\n return Cell.Types.Hyperlink;\r\n }\r\n if (value.formula || value.sharedFormula) {\r\n return Cell.Types.Formula;\r\n }\r\n if (value.richText) {\r\n return Cell.Types.RichText;\r\n }\r\n if (value.sharedString) {\r\n return Cell.Types.SharedString;\r\n }\r\n if (value.error) {\r\n return Cell.Types.Error;\r\n }\r\n return Cell.Types.JSON;\r\n },\r\n\r\n // map valueType to constructor\r\n types: [\r\n {t: Cell.Types.Null, f: NullValue},\r\n {t: Cell.Types.Number, f: NumberValue},\r\n {t: Cell.Types.String, f: StringValue},\r\n {t: Cell.Types.Date, f: DateValue},\r\n {t: Cell.Types.Hyperlink, f: HyperlinkValue},\r\n {t: Cell.Types.Formula, f: FormulaValue},\r\n {t: Cell.Types.Merge, f: MergeValue},\r\n {t: Cell.Types.JSON, f: JSONValue},\r\n {t: Cell.Types.SharedString, f: SharedStringValue},\r\n {t: Cell.Types.RichText, f: RichTextValue},\r\n {t: Cell.Types.Boolean, f: BooleanValue},\r\n {t: Cell.Types.Error, f: ErrorValue},\r\n ].reduce((p, t) => {\r\n p[t.t] = t.f;\r\n return p;\r\n }, []),\r\n\r\n create(type, cell, value) {\r\n const T = this.types[type];\r\n if (!T) {\r\n throw new Error(`Could not create Value of type ${type}`);\r\n }\r\n return new T(cell, value);\r\n },\r\n};\r\n\r\nmodule.exports = Cell;\r\n","'use strict';\r\n\r\nconst _ = require('../utils/under-dash');\r\n\r\nconst Enums = require('./enums');\r\nconst colCache = require('../utils/col-cache');\r\n\r\nconst DEFAULT_COLUMN_WIDTH = 9;\r\n\r\n// Column defines the column properties for 1 column.\r\n// This includes header rows, widths, key, (style), etc.\r\n// Worksheet will condense the columns as appropriate during serialization\r\nclass Column {\r\n constructor(worksheet, number, defn) {\r\n this._worksheet = worksheet;\r\n this._number = number;\r\n if (defn !== false) {\r\n // sometimes defn will follow\r\n this.defn = defn;\r\n }\r\n }\r\n\r\n get number() {\r\n return this._number;\r\n }\r\n\r\n get worksheet() {\r\n return this._worksheet;\r\n }\r\n\r\n get letter() {\r\n return colCache.n2l(this._number);\r\n }\r\n\r\n get isCustomWidth() {\r\n return this.width !== undefined && this.width !== DEFAULT_COLUMN_WIDTH;\r\n }\r\n\r\n get defn() {\r\n return {\r\n header: this._header,\r\n key: this.key,\r\n width: this.width,\r\n style: this.style,\r\n hidden: this.hidden,\r\n outlineLevel: this.outlineLevel,\r\n };\r\n }\r\n\r\n set defn(value) {\r\n if (value) {\r\n this.key = value.key;\r\n this.width = value.width !== undefined ? value.width : DEFAULT_COLUMN_WIDTH;\r\n this.outlineLevel = value.outlineLevel;\r\n if (value.style) {\r\n this.style = value.style;\r\n } else {\r\n this.style = {};\r\n }\r\n\r\n // headers must be set after style\r\n this.header = value.header;\r\n this._hidden = !!value.hidden;\r\n } else {\r\n delete this._header;\r\n delete this._key;\r\n delete this.width;\r\n this.style = {};\r\n this.outlineLevel = 0;\r\n }\r\n }\r\n\r\n get headers() {\r\n return this._header && this._header instanceof Array ? this._header : [this._header];\r\n }\r\n\r\n get header() {\r\n return this._header;\r\n }\r\n\r\n set header(value) {\r\n if (value !== undefined) {\r\n this._header = value;\r\n this.headers.forEach((text, index) => {\r\n this._worksheet.getCell(index + 1, this.number).value = text;\r\n });\r\n } else {\r\n this._header = undefined;\r\n }\r\n }\r\n\r\n get key() {\r\n return this._key;\r\n }\r\n\r\n set key(value) {\r\n const column = this._key && this._worksheet.getColumnKey(this._key);\r\n if (column === this) {\r\n this._worksheet.deleteColumnKey(this._key);\r\n }\r\n\r\n this._key = value;\r\n if (value) {\r\n this._worksheet.setColumnKey(this._key, this);\r\n }\r\n }\r\n\r\n get hidden() {\r\n return !!this._hidden;\r\n }\r\n\r\n set hidden(value) {\r\n this._hidden = value;\r\n }\r\n\r\n get outlineLevel() {\r\n return this._outlineLevel || 0;\r\n }\r\n\r\n set outlineLevel(value) {\r\n this._outlineLevel = value;\r\n }\r\n\r\n get collapsed() {\r\n return !!(\r\n this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelCol\r\n );\r\n }\r\n\r\n toString() {\r\n return JSON.stringify({\r\n key: this.key,\r\n width: this.width,\r\n headers: this.headers.length ? this.headers : undefined,\r\n });\r\n }\r\n\r\n equivalentTo(other) {\r\n return (\r\n this.width === other.width &&\r\n this.hidden === other.hidden &&\r\n this.outlineLevel === other.outlineLevel &&\r\n _.isEqual(this.style, other.style)\r\n );\r\n }\r\n\r\n get isDefault() {\r\n if (this.isCustomWidth) {\r\n return false;\r\n }\r\n if (this.hidden) {\r\n return false;\r\n }\r\n if (this.outlineLevel) {\r\n return false;\r\n }\r\n const s = this.style;\r\n if (s && (s.font || s.numFmt || s.alignment || s.border || s.fill || s.protection)) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n get headerCount() {\r\n return this.headers.length;\r\n }\r\n\r\n eachCell(options, iteratee) {\r\n const colNumber = this.number;\r\n if (!iteratee) {\r\n iteratee = options;\r\n options = null;\r\n }\r\n this._worksheet.eachRow(options, (row, rowNumber) => {\r\n iteratee(row.getCell(colNumber), rowNumber);\r\n });\r\n }\r\n\r\n get values() {\r\n const v = [];\r\n this.eachCell((cell, rowNumber) => {\r\n if (cell && cell.type !== Enums.ValueType.Null) {\r\n v[rowNumber] = cell.value;\r\n }\r\n });\r\n return v;\r\n }\r\n\r\n set values(v) {\r\n if (!v) {\r\n return;\r\n }\r\n const colNumber = this.number;\r\n let offset = 0;\r\n if (v.hasOwnProperty('0')) {\r\n // assume contiguous array, start at row 1\r\n offset = 1;\r\n }\r\n v.forEach((value, index) => {\r\n this._worksheet.getCell(index + offset, colNumber).value = value;\r\n });\r\n }\r\n\r\n // =========================================================================\r\n // styles\r\n _applyStyle(name, value) {\r\n this.style[name] = value;\r\n this.eachCell(cell => {\r\n cell[name] = value;\r\n });\r\n return value;\r\n }\r\n\r\n get numFmt() {\r\n return this.style.numFmt;\r\n }\r\n\r\n set numFmt(value) {\r\n this._applyStyle('numFmt', value);\r\n }\r\n\r\n get font() {\r\n return this.style.font;\r\n }\r\n\r\n set font(value) {\r\n this._applyStyle('font', value);\r\n }\r\n\r\n get alignment() {\r\n return this.style.alignment;\r\n }\r\n\r\n set alignment(value) {\r\n this._applyStyle('alignment', value);\r\n }\r\n\r\n get protection() {\r\n return this.style.protection;\r\n }\r\n\r\n set protection(value) {\r\n this._applyStyle('protection', value);\r\n }\r\n\r\n get border() {\r\n return this.style.border;\r\n }\r\n\r\n set border(value) {\r\n this._applyStyle('border', value);\r\n }\r\n\r\n get fill() {\r\n return this.style.fill;\r\n }\r\n\r\n set fill(value) {\r\n this._applyStyle('fill', value);\r\n }\r\n\r\n // =============================================================================\r\n // static functions\r\n\r\n static toModel(columns) {\r\n // Convert array of Column into compressed list cols\r\n const cols = [];\r\n let col = null;\r\n if (columns) {\r\n columns.forEach((column, index) => {\r\n if (column.isDefault) {\r\n if (col) {\r\n col = null;\r\n }\r\n } else if (!col || !column.equivalentTo(col)) {\r\n col = {\r\n min: index + 1,\r\n max: index + 1,\r\n width: column.width !== undefined ? column.width : DEFAULT_COLUMN_WIDTH,\r\n style: column.style,\r\n isCustomWidth: column.isCustomWidth,\r\n hidden: column.hidden,\r\n outlineLevel: column.outlineLevel,\r\n collapsed: column.collapsed,\r\n };\r\n cols.push(col);\r\n } else {\r\n col.max = index + 1;\r\n }\r\n });\r\n }\r\n return cols.length ? cols : undefined;\r\n }\r\n\r\n static fromModel(worksheet, cols) {\r\n cols = cols || [];\r\n const columns = [];\r\n let count = 1;\r\n let index = 0;\r\n while (index < cols.length) {\r\n const col = cols[index++];\r\n while (count < col.min) {\r\n columns.push(new Column(worksheet, count++));\r\n }\r\n while (count <= col.max) {\r\n columns.push(new Column(worksheet, count++, col));\r\n }\r\n }\r\n return columns.length ? columns : null;\r\n }\r\n}\r\n\r\nmodule.exports = Column;\r\n","class DataValidations {\r\n constructor(model) {\r\n this.model = model || {};\r\n }\r\n\r\n add(address, validation) {\r\n return (this.model[address] = validation);\r\n }\r\n\r\n find(address) {\r\n return this.model[address];\r\n }\r\n\r\n remove(address) {\r\n this.model[address] = undefined;\r\n }\r\n}\r\n\r\nmodule.exports = DataValidations;\r\n","'use strict';\r\n\r\nconst _ = require('../utils/under-dash');\r\nconst colCache = require('../utils/col-cache');\r\nconst CellMatrix = require('../utils/cell-matrix');\r\nconst Range = require('./range');\r\n\r\nconst rangeRegexp = /[$](\\w+)[$](\\d+)(:[$](\\w+)[$](\\d+))?/;\r\n\r\nclass DefinedNames {\r\n constructor() {\r\n this.matrixMap = {};\r\n }\r\n\r\n getMatrix(name) {\r\n const matrix = this.matrixMap[name] || (this.matrixMap[name] = new CellMatrix());\r\n return matrix;\r\n }\r\n\r\n // add a name to a cell. locStr in the form SheetName!$col$row or SheetName!$c1$r1:$c2:$r2\r\n add(locStr, name) {\r\n const location = colCache.decodeEx(locStr);\r\n this.addEx(location, name);\r\n }\r\n\r\n addEx(location, name) {\r\n const matrix = this.getMatrix(name);\r\n if (location.top) {\r\n for (let col = location.left; col <= location.right; col++) {\r\n for (let row = location.top; row <= location.bottom; row++) {\r\n const address = {\r\n sheetName: location.sheetName,\r\n address: colCache.n2l(col) + row,\r\n row,\r\n col,\r\n };\r\n\r\n matrix.addCellEx(address);\r\n }\r\n }\r\n } else {\r\n matrix.addCellEx(location);\r\n }\r\n }\r\n\r\n remove(locStr, name) {\r\n const location = colCache.decodeEx(locStr);\r\n this.removeEx(location, name);\r\n }\r\n\r\n removeEx(location, name) {\r\n const matrix = this.getMatrix(name);\r\n matrix.removeCellEx(location);\r\n }\r\n\r\n removeAllNames(location) {\r\n _.each(this.matrixMap, matrix => {\r\n matrix.removeCellEx(location);\r\n });\r\n }\r\n\r\n forEach(callback) {\r\n _.each(this.matrixMap, (matrix, name) => {\r\n matrix.forEach(cell => {\r\n callback(name, cell);\r\n });\r\n });\r\n }\r\n\r\n // get all the names of a cell\r\n getNames(addressStr) {\r\n return this.getNamesEx(colCache.decodeEx(addressStr));\r\n }\r\n\r\n getNamesEx(address) {\r\n return _.map(this.matrixMap, (matrix, name) => matrix.findCellEx(address) && name).filter(\r\n Boolean\r\n );\r\n }\r\n\r\n _explore(matrix, cell) {\r\n cell.mark = false;\r\n const {sheetName} = cell;\r\n\r\n const range = new Range(cell.row, cell.col, cell.row, cell.col, sheetName);\r\n let x;\r\n let y;\r\n\r\n // grow vertical - only one col to worry about\r\n function vGrow(yy, edge) {\r\n const c = matrix.findCellAt(sheetName, yy, cell.col);\r\n if (!c || !c.mark) {\r\n return false;\r\n }\r\n range[edge] = yy;\r\n c.mark = false;\r\n return true;\r\n }\r\n for (y = cell.row - 1; vGrow(y, 'top'); y--);\r\n for (y = cell.row + 1; vGrow(y, 'bottom'); y++);\r\n\r\n // grow horizontal - ensure all rows can grow\r\n function hGrow(xx, edge) {\r\n const cells = [];\r\n for (y = range.top; y <= range.bottom; y++) {\r\n const c = matrix.findCellAt(sheetName, y, xx);\r\n if (c && c.mark) {\r\n cells.push(c);\r\n } else {\r\n return false;\r\n }\r\n }\r\n range[edge] = xx;\r\n for (let i = 0; i < cells.length; i++) {\r\n cells[i].mark = false;\r\n }\r\n return true;\r\n }\r\n for (x = cell.col - 1; hGrow(x, 'left'); x--);\r\n for (x = cell.col + 1; hGrow(x, 'right'); x++);\r\n\r\n return range;\r\n }\r\n\r\n getRanges(name, matrix) {\r\n matrix = matrix || this.matrixMap[name];\r\n\r\n if (!matrix) {\r\n return {name, ranges: []};\r\n }\r\n\r\n // mark and sweep!\r\n matrix.forEach(cell => {\r\n cell.mark = true;\r\n });\r\n const ranges = matrix\r\n .map(cell => cell.mark && this._explore(matrix, cell))\r\n .filter(Boolean)\r\n .map(range => range.$shortRange);\r\n\r\n return {\r\n name,\r\n ranges,\r\n };\r\n }\r\n\r\n normaliseMatrix(matrix, sheetName) {\r\n // some of the cells might have shifted on specified sheet\r\n // need to reassign rows, cols\r\n matrix.forEachInSheet(sheetName, (cell, row, col) => {\r\n if (cell) {\r\n if (cell.row !== row || cell.col !== col) {\r\n cell.row = row;\r\n cell.col = col;\r\n cell.address = colCache.n2l(col) + row;\r\n }\r\n }\r\n });\r\n }\r\n\r\n spliceRows(sheetName, start, numDelete, numInsert) {\r\n _.each(this.matrixMap, matrix => {\r\n matrix.spliceRows(sheetName, start, numDelete, numInsert);\r\n this.normaliseMatrix(matrix, sheetName);\r\n });\r\n }\r\n\r\n spliceColumns(sheetName, start, numDelete, numInsert) {\r\n _.each(this.matrixMap, matrix => {\r\n matrix.spliceColumns(sheetName, start, numDelete, numInsert);\r\n this.normaliseMatrix(matrix, sheetName);\r\n });\r\n }\r\n\r\n get model() {\r\n // To get names per cell - just iterate over all names finding cells if they exist\r\n return _.map(this.matrixMap, (matrix, name) => this.getRanges(name, matrix)).filter(\r\n definedName => definedName.ranges.length\r\n );\r\n }\r\n\r\n set model(value) {\r\n // value is [ { name, ranges }, ... ]\r\n const matrixMap = (this.matrixMap = {});\r\n value.forEach(definedName => {\r\n const matrix = (matrixMap[definedName.name] = new CellMatrix());\r\n definedName.ranges.forEach(rangeStr => {\r\n if (rangeRegexp.test(rangeStr.split('!').pop() || '')) {\r\n matrix.addCell(rangeStr);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\nmodule.exports = DefinedNames;\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n ValueType: {\r\n Null: 0,\r\n Merge: 1,\r\n Number: 2,\r\n String: 3,\r\n Date: 4,\r\n Hyperlink: 5,\r\n Formula: 6,\r\n SharedString: 7,\r\n RichText: 8,\r\n Boolean: 9,\r\n Error: 10,\r\n },\r\n FormulaType: {\r\n None: 0,\r\n Master: 1,\r\n Shared: 2,\r\n },\r\n RelationshipType: {\r\n None: 0,\r\n OfficeDocument: 1,\r\n Worksheet: 2,\r\n CalcChain: 3,\r\n SharedStrings: 4,\r\n Styles: 5,\r\n Theme: 6,\r\n Hyperlink: 7,\r\n },\r\n DocumentType: {\r\n Xlsx: 1,\r\n },\r\n ReadingOrder: {\r\n LeftToRight: 1,\r\n RightToLeft: 2,\r\n },\r\n ErrorValue: {\r\n NotApplicable: '#N/A',\r\n Ref: '#REF!',\r\n Name: '#NAME?',\r\n DivZero: '#DIV/0!',\r\n Null: '#NULL!',\r\n Value: '#VALUE!',\r\n Num: '#NUM!',\r\n },\r\n};\r\n","const colCache = require('../utils/col-cache');\r\nconst Anchor = require('./anchor');\r\n\r\nclass Image {\r\n constructor(worksheet, model) {\r\n this.worksheet = worksheet;\r\n this.model = model;\r\n }\r\n\r\n get model() {\r\n switch (this.type) {\r\n case 'background':\r\n return {\r\n type: this.type,\r\n imageId: this.imageId,\r\n };\r\n case 'image':\r\n return {\r\n type: this.type,\r\n imageId: this.imageId,\r\n hyperlinks: this.range.hyperlinks,\r\n range: {\r\n tl: this.range.tl.model,\r\n br: this.range.br && this.range.br.model,\r\n ext: this.range.ext,\r\n editAs: this.range.editAs,\r\n },\r\n };\r\n default:\r\n throw new Error('Invalid Image Type');\r\n }\r\n }\r\n\r\n set model({type, imageId, range, hyperlinks}) {\r\n this.type = type;\r\n this.imageId = imageId;\r\n\r\n if (type === 'image') {\r\n if (typeof range === 'string') {\r\n const decoded = colCache.decode(range);\r\n this.range = {\r\n tl: new Anchor(this.worksheet, {col: decoded.left, row: decoded.top}, -1),\r\n br: new Anchor(this.worksheet, {col: decoded.right, row: decoded.bottom}, 0),\r\n editAs: 'oneCell',\r\n };\r\n } else {\r\n this.range = {\r\n tl: new Anchor(this.worksheet, range.tl, 0),\r\n br: range.br && new Anchor(this.worksheet, range.br, 0),\r\n ext: range.ext,\r\n editAs: range.editAs,\r\n hyperlinks: hyperlinks || range.hyperlinks,\r\n };\r\n }\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = Image;\r\n","const _ = require('../utils/under-dash');\r\n\r\nclass Note {\r\n constructor(note) {\r\n this.note = note;\r\n }\r\n\r\n get model() {\r\n let value = null;\r\n switch (typeof this.note) {\r\n case 'string':\r\n value = {\r\n type: 'note',\r\n note: {\r\n texts: [\r\n {\r\n text: this.note,\r\n },\r\n ],\r\n },\r\n };\r\n break;\r\n default:\r\n value = {\r\n type: 'note',\r\n note: this.note,\r\n };\r\n break;\r\n }\r\n // Suitable for all cell comments\r\n return _.deepMerge({}, Note.DEFAULT_CONFIGS, value);\r\n }\r\n\r\n set model(value) {\r\n const {note} = value;\r\n const {texts} = note;\r\n if (texts.length === 1 && Object.keys(texts[0]).length === 1) {\r\n this.note = texts[0].text;\r\n } else {\r\n this.note = note;\r\n }\r\n }\r\n\r\n static fromModel(model) {\r\n const note = new Note();\r\n note.model = model;\r\n return note;\r\n }\r\n}\r\n\r\nNote.DEFAULT_CONFIGS = {\r\n note: {\r\n margins: {\r\n insetmode: 'auto',\r\n inset: [0.13, 0.13, 0.25, 0.25],\r\n },\r\n protection: {\r\n locked: 'True',\r\n lockText: 'True',\r\n },\r\n editAs: 'absolute',\r\n },\r\n};\r\n\r\nmodule.exports = Note;\r\n","const colCache = require('../utils/col-cache');\r\n\r\n// used by worksheet to calculate sheet dimensions\r\nclass Range {\r\n constructor() {\r\n this.decode(arguments);\r\n }\r\n\r\n setTLBR(t, l, b, r, s) {\r\n if (arguments.length < 4) {\r\n // setTLBR(tl, br, s)\r\n const tl = colCache.decodeAddress(t);\r\n const br = colCache.decodeAddress(l);\r\n this.model = {\r\n top: Math.min(tl.row, br.row),\r\n left: Math.min(tl.col, br.col),\r\n bottom: Math.max(tl.row, br.row),\r\n right: Math.max(tl.col, br.col),\r\n sheetName: b,\r\n };\r\n\r\n this.setTLBR(tl.row, tl.col, br.row, br.col, s);\r\n } else {\r\n // setTLBR(t, l, b, r, s)\r\n this.model = {\r\n top: Math.min(t, b),\r\n left: Math.min(l, r),\r\n bottom: Math.max(t, b),\r\n right: Math.max(l, r),\r\n sheetName: s,\r\n };\r\n }\r\n }\r\n\r\n decode(argv) {\r\n switch (argv.length) {\r\n case 5: // [t,l,b,r,s]\r\n this.setTLBR(argv[0], argv[1], argv[2], argv[3], argv[4]);\r\n break;\r\n case 4: // [t,l,b,r]\r\n this.setTLBR(argv[0], argv[1], argv[2], argv[3]);\r\n break;\r\n\r\n case 3: // [tl,br,s]\r\n this.setTLBR(argv[0], argv[1], argv[2]);\r\n break;\r\n case 2: // [tl,br]\r\n this.setTLBR(argv[0], argv[1]);\r\n break;\r\n\r\n case 1: {\r\n const value = argv[0];\r\n if (value instanceof Range) {\r\n // copy constructor\r\n this.model = {\r\n top: value.model.top,\r\n left: value.model.left,\r\n bottom: value.model.bottom,\r\n right: value.model.right,\r\n sheetName: value.sheetName,\r\n };\r\n } else if (value instanceof Array) {\r\n // an arguments array\r\n this.decode(value);\r\n } else if (value.top && value.left && value.bottom && value.right) {\r\n // a model\r\n this.model = {\r\n top: value.top,\r\n left: value.left,\r\n bottom: value.bottom,\r\n right: value.right,\r\n sheetName: value.sheetName,\r\n };\r\n } else {\r\n // [sheetName!]tl:br\r\n const tlbr = colCache.decodeEx(value);\r\n if (tlbr.top) {\r\n this.model = {\r\n top: tlbr.top,\r\n left: tlbr.left,\r\n bottom: tlbr.bottom,\r\n right: tlbr.right,\r\n sheetName: tlbr.sheetName,\r\n };\r\n } else {\r\n this.model = {\r\n top: tlbr.row,\r\n left: tlbr.col,\r\n bottom: tlbr.row,\r\n right: tlbr.col,\r\n sheetName: tlbr.sheetName,\r\n };\r\n }\r\n }\r\n break;\r\n }\r\n\r\n case 0:\r\n this.model = {\r\n top: 0,\r\n left: 0,\r\n bottom: 0,\r\n right: 0,\r\n };\r\n break;\r\n\r\n default:\r\n throw new Error(`Invalid number of arguments to _getDimensions() - ${argv.length}`);\r\n }\r\n }\r\n\r\n get top() {\r\n return this.model.top || 1;\r\n }\r\n\r\n set top(value) {\r\n this.model.top = value;\r\n }\r\n\r\n get left() {\r\n return this.model.left || 1;\r\n }\r\n\r\n set left(value) {\r\n this.model.left = value;\r\n }\r\n\r\n get bottom() {\r\n return this.model.bottom || 1;\r\n }\r\n\r\n set bottom(value) {\r\n this.model.bottom = value;\r\n }\r\n\r\n get right() {\r\n return this.model.right || 1;\r\n }\r\n\r\n set right(value) {\r\n this.model.right = value;\r\n }\r\n\r\n get sheetName() {\r\n return this.model.sheetName;\r\n }\r\n\r\n set sheetName(value) {\r\n this.model.sheetName = value;\r\n }\r\n\r\n get _serialisedSheetName() {\r\n const {sheetName} = this.model;\r\n if (sheetName) {\r\n if (/^[a-zA-Z0-9]*$/.test(sheetName)) {\r\n return `${sheetName}!`;\r\n }\r\n return `'${sheetName}'!`;\r\n }\r\n return '';\r\n }\r\n\r\n expand(top, left, bottom, right) {\r\n if (!this.model.top || top < this.top) this.top = top;\r\n if (!this.model.left || left < this.left) this.left = left;\r\n if (!this.model.bottom || bottom > this.bottom) this.bottom = bottom;\r\n if (!this.model.right || right > this.right) this.right = right;\r\n }\r\n\r\n expandRow(row) {\r\n if (row) {\r\n const {dimensions, number} = row;\r\n if (dimensions) {\r\n this.expand(number, dimensions.min, number, dimensions.max);\r\n }\r\n }\r\n }\r\n\r\n expandToAddress(addressStr) {\r\n const address = colCache.decodeEx(addressStr);\r\n this.expand(address.row, address.col, address.row, address.col);\r\n }\r\n\r\n get tl() {\r\n return colCache.n2l(this.left) + this.top;\r\n }\r\n\r\n get $t$l() {\r\n return `$${colCache.n2l(this.left)}$${this.top}`;\r\n }\r\n\r\n get br() {\r\n return colCache.n2l(this.right) + this.bottom;\r\n }\r\n\r\n get $b$r() {\r\n return `$${colCache.n2l(this.right)}$${this.bottom}`;\r\n }\r\n\r\n get range() {\r\n return `${this._serialisedSheetName + this.tl}:${this.br}`;\r\n }\r\n\r\n get $range() {\r\n return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`;\r\n }\r\n\r\n get shortRange() {\r\n return this.count > 1 ? this.range : this._serialisedSheetName + this.tl;\r\n }\r\n\r\n get $shortRange() {\r\n return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l;\r\n }\r\n\r\n get count() {\r\n return (1 + this.bottom - this.top) * (1 + this.right - this.left);\r\n }\r\n\r\n toString() {\r\n return this.range;\r\n }\r\n\r\n intersects(other) {\r\n if (other.sheetName && this.sheetName && other.sheetName !== this.sheetName) return false;\r\n if (other.bottom < this.top) return false;\r\n if (other.top > this.bottom) return false;\r\n if (other.right < this.left) return false;\r\n if (other.left > this.right) return false;\r\n return true;\r\n }\r\n\r\n contains(addressStr) {\r\n const address = colCache.decodeEx(addressStr);\r\n return this.containsEx(address);\r\n }\r\n\r\n containsEx(address) {\r\n if (address.sheetName && this.sheetName && address.sheetName !== this.sheetName) return false;\r\n return (\r\n address.row >= this.top &&\r\n address.row <= this.bottom &&\r\n address.col >= this.left &&\r\n address.col <= this.right\r\n );\r\n }\r\n\r\n forEachAddress(cb) {\r\n for (let col = this.left; col <= this.right; col++) {\r\n for (let row = this.top; row <= this.bottom; row++) {\r\n cb(colCache.encodeAddress(row, col), row, col);\r\n }\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = Range;\r\n","'use strict';\r\n\r\nconst _ = require('../utils/under-dash');\r\n\r\nconst Enums = require('./enums');\r\nconst colCache = require('../utils/col-cache');\r\nconst Cell = require('./cell');\r\n\r\nclass Row {\r\n constructor(worksheet, number) {\r\n this._worksheet = worksheet;\r\n this._number = number;\r\n this._cells = [];\r\n this.style = {};\r\n this.outlineLevel = 0;\r\n }\r\n\r\n // return the row number\r\n get number() {\r\n return this._number;\r\n }\r\n\r\n get worksheet() {\r\n return this._worksheet;\r\n }\r\n\r\n // Inform Streaming Writer that this row (and all rows before it) are complete\r\n // and ready to write. Has no effect on Worksheet document\r\n commit() {\r\n this._worksheet._commitRow(this); // eslint-disable-line no-underscore-dangle\r\n }\r\n\r\n // helps GC by breaking cyclic references\r\n destroy() {\r\n delete this._worksheet;\r\n delete this._cells;\r\n delete this.style;\r\n }\r\n\r\n findCell(colNumber) {\r\n return this._cells[colNumber - 1];\r\n }\r\n\r\n // given {address, row, col}, find or create new cell\r\n getCellEx(address) {\r\n let cell = this._cells[address.col - 1];\r\n if (!cell) {\r\n const column = this._worksheet.getColumn(address.col);\r\n cell = new Cell(this, column, address.address);\r\n this._cells[address.col - 1] = cell;\r\n }\r\n return cell;\r\n }\r\n\r\n // get cell by key, letter or column number\r\n getCell(col) {\r\n if (typeof col === 'string') {\r\n // is it a key?\r\n const column = this._worksheet.getColumnKey(col);\r\n if (column) {\r\n col = column.number;\r\n } else {\r\n col = colCache.l2n(col);\r\n }\r\n }\r\n return (\r\n this._cells[col - 1] ||\r\n this.getCellEx({\r\n address: colCache.encodeAddress(this._number, col),\r\n row: this._number,\r\n col,\r\n })\r\n );\r\n }\r\n\r\n // remove cell(s) and shift all higher cells down by count\r\n splice(start, count, ...inserts) {\r\n const nKeep = start + count;\r\n const nExpand = inserts.length - count;\r\n const nEnd = this._cells.length;\r\n let i;\r\n let cSrc;\r\n let cDst;\r\n\r\n if (nExpand < 0) {\r\n // remove cells\r\n for (i = start + inserts.length; i <= nEnd; i++) {\r\n cDst = this._cells[i - 1];\r\n cSrc = this._cells[i - nExpand - 1];\r\n if (cSrc) {\r\n cDst = this.getCell(i);\r\n cDst.value = cSrc.value;\r\n cDst.style = cSrc.style;\r\n // eslint-disable-next-line no-underscore-dangle\r\n cDst._comment = cSrc._comment;\r\n } else if (cDst) {\r\n cDst.value = null;\r\n cDst.style = {};\r\n // eslint-disable-next-line no-underscore-dangle\r\n cDst._comment = undefined;\r\n }\r\n }\r\n } else if (nExpand > 0) {\r\n // insert new cells\r\n for (i = nEnd; i >= nKeep; i--) {\r\n cSrc = this._cells[i - 1];\r\n if (cSrc) {\r\n cDst = this.getCell(i + nExpand);\r\n cDst.value = cSrc.value;\r\n cDst.style = cSrc.style;\r\n // eslint-disable-next-line no-underscore-dangle\r\n cDst._comment = cSrc._comment;\r\n } else {\r\n this._cells[i + nExpand - 1] = undefined;\r\n }\r\n }\r\n }\r\n\r\n // now add the new values\r\n for (i = 0; i < inserts.length; i++) {\r\n cDst = this.getCell(start + i);\r\n cDst.value = inserts[i];\r\n cDst.style = {};\r\n // eslint-disable-next-line no-underscore-dangle\r\n cDst._comment = undefined;\r\n }\r\n }\r\n\r\n // Iterate over all non-null cells in this row\r\n eachCell(options, iteratee) {\r\n if (!iteratee) {\r\n iteratee = options;\r\n options = null;\r\n }\r\n if (options && options.includeEmpty) {\r\n const n = this._cells.length;\r\n for (let i = 1; i <= n; i++) {\r\n iteratee(this.getCell(i), i);\r\n }\r\n } else {\r\n this._cells.forEach((cell, index) => {\r\n if (cell && cell.type !== Enums.ValueType.Null) {\r\n iteratee(cell, index + 1);\r\n }\r\n });\r\n }\r\n }\r\n\r\n // ===========================================================================\r\n // Page Breaks\r\n addPageBreak(lft, rght) {\r\n const ws = this._worksheet;\r\n const left = Math.max(0, lft - 1) || 0;\r\n const right = Math.max(0, rght - 1) || 16838;\r\n const pb = {\r\n id: this._number,\r\n max: right,\r\n man: 1,\r\n };\r\n if (left) pb.min = left;\r\n\r\n ws.rowBreaks.push(pb);\r\n }\r\n\r\n // return a sparse array of cell values\r\n get values() {\r\n const values = [];\r\n this._cells.forEach(cell => {\r\n if (cell && cell.type !== Enums.ValueType.Null) {\r\n values[cell.col] = cell.value;\r\n }\r\n });\r\n return values;\r\n }\r\n\r\n // set the values by contiguous or sparse array, or by key'd object literal\r\n set values(value) {\r\n // this operation is not additive - any prior cells are removed\r\n this._cells = [];\r\n if (!value) {\r\n // empty row\r\n } else if (value instanceof Array) {\r\n let offset = 0;\r\n if (value.hasOwnProperty('0')) {\r\n // contiguous array - start at column 1\r\n offset = 1;\r\n }\r\n value.forEach((item, index) => {\r\n if (item !== undefined) {\r\n this.getCellEx({\r\n address: colCache.encodeAddress(this._number, index + offset),\r\n row: this._number,\r\n col: index + offset,\r\n }).value = item;\r\n }\r\n });\r\n } else {\r\n // assume object with column keys\r\n this._worksheet.eachColumnKey((column, key) => {\r\n if (value[key] !== undefined) {\r\n this.getCellEx({\r\n address: colCache.encodeAddress(this._number, column.number),\r\n row: this._number,\r\n col: column.number,\r\n }).value = value[key];\r\n }\r\n });\r\n }\r\n }\r\n\r\n // returns true if the row includes at least one cell with a value\r\n get hasValues() {\r\n return _.some(this._cells, cell => cell && cell.type !== Enums.ValueType.Null);\r\n }\r\n\r\n get cellCount() {\r\n return this._cells.length;\r\n }\r\n\r\n get actualCellCount() {\r\n let count = 0;\r\n this.eachCell(() => {\r\n count++;\r\n });\r\n return count;\r\n }\r\n\r\n // get the min and max column number for the non-null cells in this row or null\r\n get dimensions() {\r\n let min = 0;\r\n let max = 0;\r\n this._cells.forEach(cell => {\r\n if (cell && cell.type !== Enums.ValueType.Null) {\r\n if (!min || min > cell.col) {\r\n min = cell.col;\r\n }\r\n if (max < cell.col) {\r\n max = cell.col;\r\n }\r\n }\r\n });\r\n return min > 0\r\n ? {\r\n min,\r\n max,\r\n }\r\n : null;\r\n }\r\n\r\n // =========================================================================\r\n // styles\r\n _applyStyle(name, value) {\r\n this.style[name] = value;\r\n this._cells.forEach(cell => {\r\n if (cell) {\r\n cell[name] = value;\r\n }\r\n });\r\n return value;\r\n }\r\n\r\n get numFmt() {\r\n return this.style.numFmt;\r\n }\r\n\r\n set numFmt(value) {\r\n this._applyStyle('numFmt', value);\r\n }\r\n\r\n get font() {\r\n return this.style.font;\r\n }\r\n\r\n set font(value) {\r\n this._applyStyle('font', value);\r\n }\r\n\r\n get alignment() {\r\n return this.style.alignment;\r\n }\r\n\r\n set alignment(value) {\r\n this._applyStyle('alignment', value);\r\n }\r\n\r\n get protection() {\r\n return this.style.protection;\r\n }\r\n\r\n set protection(value) {\r\n this._applyStyle('protection', value);\r\n }\r\n\r\n get border() {\r\n return this.style.border;\r\n }\r\n\r\n set border(value) {\r\n this._applyStyle('border', value);\r\n }\r\n\r\n get fill() {\r\n return this.style.fill;\r\n }\r\n\r\n set fill(value) {\r\n this._applyStyle('fill', value);\r\n }\r\n\r\n get hidden() {\r\n return !!this._hidden;\r\n }\r\n\r\n set hidden(value) {\r\n this._hidden = value;\r\n }\r\n\r\n get outlineLevel() {\r\n return this._outlineLevel || 0;\r\n }\r\n\r\n set outlineLevel(value) {\r\n this._outlineLevel = value;\r\n }\r\n\r\n get collapsed() {\r\n return !!(\r\n this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelRow\r\n );\r\n }\r\n\r\n // =========================================================================\r\n get model() {\r\n const cells = [];\r\n let min = 0;\r\n let max = 0;\r\n this._cells.forEach(cell => {\r\n if (cell) {\r\n const cellModel = cell.model;\r\n if (cellModel) {\r\n if (!min || min > cell.col) {\r\n min = cell.col;\r\n }\r\n if (max < cell.col) {\r\n max = cell.col;\r\n }\r\n cells.push(cellModel);\r\n }\r\n }\r\n });\r\n\r\n return this.height || cells.length\r\n ? {\r\n cells,\r\n number: this.number,\r\n min,\r\n max,\r\n height: this.height,\r\n style: this.style,\r\n hidden: this.hidden,\r\n outlineLevel: this.outlineLevel,\r\n collapsed: this.collapsed,\r\n }\r\n : null;\r\n }\r\n\r\n set model(value) {\r\n if (value.number !== this._number) {\r\n throw new Error('Invalid row number in model');\r\n }\r\n this._cells = [];\r\n let previousAddress;\r\n value.cells.forEach(cellModel => {\r\n switch (cellModel.type) {\r\n case Cell.Types.Merge:\r\n // special case - don't add this types\r\n break;\r\n default: {\r\n let address;\r\n if (cellModel.address) {\r\n address = colCache.decodeAddress(cellModel.address);\r\n } else if (previousAddress) {\r\n // This is a element without an r attribute\r\n // Assume that it's the cell for the next column\r\n const {row} = previousAddress;\r\n const col = previousAddress.col + 1;\r\n address = {\r\n row,\r\n col,\r\n address: colCache.encodeAddress(row, col),\r\n $col$row: `$${colCache.n2l(col)}$${row}`,\r\n };\r\n }\r\n previousAddress = address;\r\n const cell = this.getCellEx(address);\r\n cell.model = cellModel;\r\n break;\r\n }\r\n }\r\n });\r\n\r\n if (value.height) {\r\n this.height = value.height;\r\n } else {\r\n delete this.height;\r\n }\r\n\r\n this.hidden = value.hidden;\r\n this.outlineLevel = value.outlineLevel || 0;\r\n\r\n this.style = (value.style && JSON.parse(JSON.stringify(value.style))) || {};\r\n }\r\n}\r\n\r\nmodule.exports = Row;\r\n","/* eslint-disable max-classes-per-file */\r\nconst colCache = require('../utils/col-cache');\r\n\r\nclass Column {\r\n // wrapper around column model, allowing access and manipulation\r\n constructor(table, column, index) {\r\n this.table = table;\r\n this.column = column;\r\n this.index = index;\r\n }\r\n\r\n _set(name, value) {\r\n this.table.cacheState();\r\n this.column[name] = value;\r\n }\r\n\r\n /* eslint-disable lines-between-class-members */\r\n get name() {\r\n return this.column.name;\r\n }\r\n set name(value) {\r\n this._set('name', value);\r\n }\r\n\r\n get filterButton() {\r\n return this.column.filterButton;\r\n }\r\n set filterButton(value) {\r\n this.column.filterButton = value;\r\n }\r\n\r\n get style() {\r\n return this.column.style;\r\n }\r\n set style(value) {\r\n this.column.style = value;\r\n }\r\n\r\n get totalsRowLabel() {\r\n return this.column.totalsRowLabel;\r\n }\r\n set totalsRowLabel(value) {\r\n this._set('totalsRowLabel', value);\r\n }\r\n\r\n get totalsRowFunction() {\r\n return this.column.totalsRowFunction;\r\n }\r\n set totalsRowFunction(value) {\r\n this._set('totalsRowFunction', value);\r\n }\r\n\r\n get totalsRowResult() {\r\n return this.column.totalsRowResult;\r\n }\r\n set totalsRowResult(value) {\r\n this._set('totalsRowResult', value);\r\n }\r\n\r\n get totalsRowFormula() {\r\n return this.column.totalsRowFormula;\r\n }\r\n set totalsRowFormula(value) {\r\n this._set('totalsRowFormula', value);\r\n }\r\n /* eslint-enable lines-between-class-members */\r\n}\r\n\r\nclass Table {\r\n constructor(worksheet, table) {\r\n this.worksheet = worksheet;\r\n if (table) {\r\n this.table = table;\r\n // check things are ok first\r\n this.validate();\r\n\r\n this.store();\r\n }\r\n }\r\n\r\n getFormula(column) {\r\n // get the correct formula to apply to the totals row\r\n switch (column.totalsRowFunction) {\r\n case 'none':\r\n return null;\r\n case 'average':\r\n return `SUBTOTAL(101,${this.table.name}[${column.name}])`;\r\n case 'countNums':\r\n return `SUBTOTAL(102,${this.table.name}[${column.name}])`;\r\n case 'count':\r\n return `SUBTOTAL(103,${this.table.name}[${column.name}])`;\r\n case 'max':\r\n return `SUBTOTAL(104,${this.table.name}[${column.name}])`;\r\n case 'min':\r\n return `SUBTOTAL(105,${this.table.name}[${column.name}])`;\r\n case 'stdDev':\r\n return `SUBTOTAL(106,${this.table.name}[${column.name}])`;\r\n case 'var':\r\n return `SUBTOTAL(107,${this.table.name}[${column.name}])`;\r\n case 'sum':\r\n return `SUBTOTAL(109,${this.table.name}[${column.name}])`;\r\n case 'custom':\r\n return column.totalsRowFormula;\r\n default:\r\n throw new Error(`Invalid Totals Row Function: ${column.totalsRowFunction}`);\r\n }\r\n }\r\n\r\n get width() {\r\n // width of the table\r\n return this.table.columns.length;\r\n }\r\n\r\n get height() {\r\n // height of the table data\r\n return this.table.rows.length;\r\n }\r\n\r\n get filterHeight() {\r\n // height of the table data plus optional header row\r\n return this.height + (this.table.headerRow ? 1 : 0);\r\n }\r\n\r\n get tableHeight() {\r\n // full height of the table on the sheet\r\n return this.filterHeight + (this.table.totalsRow ? 1 : 0);\r\n }\r\n\r\n validate() {\r\n const {table} = this;\r\n // set defaults and check is valid\r\n const assign = (o, name, dflt) => {\r\n if (o[name] === undefined) {\r\n o[name] = dflt;\r\n }\r\n };\r\n assign(table, 'headerRow', true);\r\n assign(table, 'totalsRow', false);\r\n\r\n assign(table, 'style', {});\r\n assign(table.style, 'theme', 'TableStyleMedium2');\r\n assign(table.style, 'showFirstColumn', false);\r\n assign(table.style, 'showLastColumn', false);\r\n assign(table.style, 'showRowStripes', false);\r\n assign(table.style, 'showColumnStripes', false);\r\n\r\n const assert = (test, message) => {\r\n if (!test) {\r\n throw new Error(message);\r\n }\r\n };\r\n assert(table.ref, 'Table must have ref');\r\n assert(table.columns, 'Table must have column definitions');\r\n assert(table.rows, 'Table must have row definitions');\r\n\r\n table.tl = colCache.decodeAddress(table.ref);\r\n const {row, col} = table.tl;\r\n assert(row > 0, 'Table must be on valid row');\r\n assert(col > 0, 'Table must be on valid col');\r\n\r\n const {width, filterHeight, tableHeight} = this;\r\n\r\n // autoFilterRef is a range that includes optional headers only\r\n table.autoFilterRef = colCache.encode(row, col, row + filterHeight - 1, col + width - 1);\r\n\r\n // tableRef is a range that includes optional headers and totals\r\n table.tableRef = colCache.encode(row, col, row + tableHeight - 1, col + width - 1);\r\n\r\n table.columns.forEach((column, i) => {\r\n assert(column.name, `Column ${i} must have a name`);\r\n if (i === 0) {\r\n assign(column, 'totalsRowLabel', 'Total');\r\n } else {\r\n assign(column, 'totalsRowFunction', 'none');\r\n column.totalsRowFormula = this.getFormula(column);\r\n }\r\n });\r\n }\r\n\r\n store() {\r\n // where the table needs to store table data, headers, footers in\r\n // the sheet...\r\n const assignStyle = (cell, style) => {\r\n if (style) {\r\n Object.keys(style).forEach(key => {\r\n cell[key] = style[key];\r\n });\r\n }\r\n };\r\n\r\n const {worksheet, table} = this;\r\n const {row, col} = table.tl;\r\n let count = 0;\r\n if (table.headerRow) {\r\n const r = worksheet.getRow(row + count++);\r\n table.columns.forEach((column, j) => {\r\n const {style, name} = column;\r\n const cell = r.getCell(col + j);\r\n cell.value = name;\r\n assignStyle(cell, style);\r\n });\r\n }\r\n table.rows.forEach(data => {\r\n const r = worksheet.getRow(row + count++);\r\n data.forEach((value, j) => {\r\n const cell = r.getCell(col + j);\r\n cell.value = value;\r\n\r\n assignStyle(cell, table.columns[j].style);\r\n });\r\n });\r\n\r\n if (table.totalsRow) {\r\n const r = worksheet.getRow(row + count++);\r\n table.columns.forEach((column, j) => {\r\n const cell = r.getCell(col + j);\r\n if (j === 0) {\r\n cell.value = column.totalsRowLabel;\r\n } else {\r\n const formula = this.getFormula(column);\r\n if (formula) {\r\n cell.value = {\r\n formula: column.totalsRowFormula,\r\n result: column.totalsRowResult,\r\n };\r\n } else {\r\n cell.value = null;\r\n }\r\n }\r\n\r\n assignStyle(cell, column.style);\r\n });\r\n }\r\n }\r\n\r\n load(worksheet) {\r\n // where the table will read necessary features from a loaded sheet\r\n const {table} = this;\r\n const {row, col} = table.tl;\r\n let count = 0;\r\n if (table.headerRow) {\r\n const r = worksheet.getRow(row + count++);\r\n table.columns.forEach((column, j) => {\r\n const cell = r.getCell(col + j);\r\n cell.value = column.name;\r\n });\r\n }\r\n table.rows.forEach(data => {\r\n const r = worksheet.getRow(row + count++);\r\n data.forEach((value, j) => {\r\n const cell = r.getCell(col + j);\r\n cell.value = value;\r\n });\r\n });\r\n\r\n if (table.totalsRow) {\r\n const r = worksheet.getRow(row + count++);\r\n table.columns.forEach((column, j) => {\r\n const cell = r.getCell(col + j);\r\n if (j === 0) {\r\n cell.value = column.totalsRowLabel;\r\n } else {\r\n const formula = this.getFormula(column);\r\n if (formula) {\r\n cell.value = {\r\n formula: column.totalsRowFormula,\r\n result: column.totalsRowResult,\r\n };\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n get model() {\r\n return this.table;\r\n }\r\n\r\n set model(value) {\r\n this.table = value;\r\n }\r\n\r\n // ================================================================\r\n // TODO: Mutating methods\r\n cacheState() {\r\n if (!this._cache) {\r\n this._cache = {\r\n ref: this.ref,\r\n width: this.width,\r\n tableHeight: this.tableHeight,\r\n };\r\n }\r\n }\r\n\r\n commit() {\r\n // changes may have been made that might have on-sheet effects\r\n if (!this._cache) {\r\n return;\r\n }\r\n\r\n // check things are ok first\r\n this.validate();\r\n\r\n const ref = colCache.decodeAddress(this._cache.ref);\r\n if (this.ref !== this._cache.ref) {\r\n // wipe out whole table footprint at previous location\r\n for (let i = 0; i < this._cache.tableHeight; i++) {\r\n const row = this.worksheet.getRow(ref.row + i);\r\n for (let j = 0; j < this._cache.width; j++) {\r\n const cell = row.getCell(ref.col + j);\r\n cell.value = null;\r\n }\r\n }\r\n } else {\r\n // clear out below table if it has shrunk\r\n for (let i = this.tableHeight; i < this._cache.tableHeight; i++) {\r\n const row = this.worksheet.getRow(ref.row + i);\r\n for (let j = 0; j < this._cache.width; j++) {\r\n const cell = row.getCell(ref.col + j);\r\n cell.value = null;\r\n }\r\n }\r\n\r\n // clear out to right of table if it has lost columns\r\n for (let i = 0; i < this.tableHeight; i++) {\r\n const row = this.worksheet.getRow(ref.row + i);\r\n for (let j = this.width; j < this._cache.width; j++) {\r\n const cell = row.getCell(ref.col + j);\r\n cell.value = null;\r\n }\r\n }\r\n }\r\n\r\n this.store();\r\n }\r\n\r\n addRow(values, rowNumber) {\r\n // Add a row of data, either insert at rowNumber or append\r\n this.cacheState();\r\n\r\n if (rowNumber === undefined) {\r\n this.table.rows.push(values);\r\n } else {\r\n this.table.rows.splice(rowNumber, 0, values);\r\n }\r\n }\r\n\r\n removeRows(rowIndex, count = 1) {\r\n // Remove a rows of data\r\n this.cacheState();\r\n this.table.rows.splice(rowIndex, count);\r\n }\r\n\r\n getColumn(colIndex) {\r\n const column = this.table.columns[colIndex];\r\n return new Column(this, column, colIndex);\r\n }\r\n\r\n addColumn(column, values, colIndex) {\r\n // Add a new column, including column defn and values\r\n // Inserts at colNumber or adds to the right\r\n this.cacheState();\r\n\r\n if (colIndex === undefined) {\r\n this.table.columns.push(column);\r\n this.table.rows.forEach((row, i) => {\r\n row.push(values[i]);\r\n });\r\n } else {\r\n this.table.columns.splice(colIndex, 0, column);\r\n this.table.rows.forEach((row, i) => {\r\n row.splice(colIndex, 0, values[i]);\r\n });\r\n }\r\n }\r\n\r\n removeColumns(colIndex, count = 1) {\r\n // Remove a column with data\r\n this.cacheState();\r\n\r\n this.table.columns.splice(colIndex, count);\r\n this.table.rows.forEach(row => {\r\n row.splice(colIndex, count);\r\n });\r\n }\r\n\r\n _assign(target, prop, value) {\r\n this.cacheState();\r\n target[prop] = value;\r\n }\r\n\r\n /* eslint-disable lines-between-class-members */\r\n get ref() {\r\n return this.table.ref;\r\n }\r\n set ref(value) {\r\n this._assign(this.table, 'ref', value);\r\n }\r\n\r\n get name() {\r\n return this.table.name;\r\n }\r\n set name(value) {\r\n this.table.name = value;\r\n }\r\n\r\n get displayName() {\r\n return this.table.displyName || this.table.name;\r\n }\r\n set displayNamename(value) {\r\n this.table.displayName = value;\r\n }\r\n\r\n get headerRow() {\r\n return this.table.headerRow;\r\n }\r\n set headerRow(value) {\r\n this._assign(this.table, 'headerRow', value);\r\n }\r\n\r\n get totalsRow() {\r\n return this.table.totalsRow;\r\n }\r\n set totalsRow(value) {\r\n this._assign(this.table, 'totalsRow', value);\r\n }\r\n\r\n get theme() {\r\n return this.table.style.name;\r\n }\r\n set theme(value) {\r\n this.table.style.name = value;\r\n }\r\n\r\n get showFirstColumn() {\r\n return this.table.style.showFirstColumn;\r\n }\r\n set showFirstColumn(value) {\r\n this.table.style.showFirstColumn = value;\r\n }\r\n\r\n get showLastColumn() {\r\n return this.table.style.showLastColumn;\r\n }\r\n set showLastColumn(value) {\r\n this.table.style.showLastColumn = value;\r\n }\r\n\r\n get showRowStripes() {\r\n return this.table.style.showRowStripes;\r\n }\r\n set showRowStripes(value) {\r\n this.table.style.showRowStripes = value;\r\n }\r\n\r\n get showColumnStripes() {\r\n return this.table.style.showColumnStripes;\r\n }\r\n set showColumnStripes(value) {\r\n this.table.style.showColumnStripes = value;\r\n }\r\n /* eslint-enable lines-between-class-members */\r\n}\r\n\r\nmodule.exports = Table;\r\n","'use strict';\r\n\r\nconst Worksheet = require('./worksheet');\r\nconst DefinedNames = require('./defined-names');\r\nconst XLSX = require('../xlsx/xlsx');\r\nconst CSV = require('../csv/csv');\r\n\r\n// Workbook requirements\r\n// Load and Save from file and stream\r\n// Access/Add/Delete individual worksheets\r\n// Manage String table, Hyperlink table, etc.\r\n// Manage scaffolding for contained objects to write to/read from\r\n\r\nclass Workbook {\r\n constructor() {\r\n this.created = new Date();\r\n this.modified = this.created;\r\n this.properties = {};\r\n this.calcProperties = {};\r\n this._worksheets = [];\r\n this.views = [];\r\n this.media = [];\r\n this._definedNames = new DefinedNames();\r\n }\r\n\r\n get xlsx() {\r\n if (!this._xlsx) this._xlsx = new XLSX(this);\r\n return this._xlsx;\r\n }\r\n\r\n get csv() {\r\n if (!this._csv) this._csv = new CSV(this);\r\n return this._csv;\r\n }\r\n\r\n get nextId() {\r\n // find the next unique spot to add worksheet\r\n for (let i = 1; i < this._worksheets.length; i++) {\r\n if (!this._worksheets[i]) {\r\n return i;\r\n }\r\n }\r\n return this._worksheets.length || 1;\r\n }\r\n\r\n addWorksheet(name, options) {\r\n const id = this.nextId;\r\n\r\n if (name && name.length > 31) {\r\n // eslint-disable-next-line no-console\r\n console.warn(`Worksheet name ${name} exceeds 31 chars. This will be truncated`);\r\n }\r\n\r\n // Illegal character in worksheet name: asterisk (*), question mark (?),\r\n // colon (:), forward slash (/ \\), or bracket ([])\r\n if (/[*?:/\\\\[\\]]/.test(name)) {\r\n throw new Error(\r\n `Worksheet name ${name} cannot include any of the following characters: * ? : \\\\ / [ ]`\r\n );\r\n }\r\n\r\n if (/(^')|('$)/.test(name)) {\r\n throw new Error(\r\n `The first or last character of worksheet name cannot be a single quotation mark: ${name}`\r\n );\r\n }\r\n\r\n name = (name || `sheet${id}`).substring(0, 31);\r\n if (this._worksheets.find(ws => ws && ws.name.toLowerCase() === name.toLowerCase())) {\r\n throw new Error(`Worksheet name already exists: ${name}`);\r\n }\r\n\r\n // if options is a color, call it tabColor (and signal deprecated message)\r\n if (options) {\r\n if (typeof options === 'string') {\r\n // eslint-disable-next-line no-console\r\n console.trace(\r\n 'tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: \"rbg value\" } }'\r\n );\r\n options = {\r\n properties: {\r\n tabColor: {argb: options},\r\n },\r\n };\r\n } else if (options.argb || options.theme || options.indexed) {\r\n // eslint-disable-next-line no-console\r\n console.trace(\r\n 'tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }'\r\n );\r\n options = {\r\n properties: {\r\n tabColor: options,\r\n },\r\n };\r\n }\r\n }\r\n\r\n const lastOrderNo = this._worksheets.reduce(\r\n (acc, ws) => ((ws && ws.orderNo) > acc ? ws.orderNo : acc),\r\n 0\r\n );\r\n const worksheetOptions = Object.assign({}, options, {\r\n id,\r\n name,\r\n orderNo: lastOrderNo + 1,\r\n workbook: this,\r\n });\r\n\r\n const worksheet = new Worksheet(worksheetOptions);\r\n\r\n this._worksheets[id] = worksheet;\r\n return worksheet;\r\n }\r\n\r\n removeWorksheetEx(worksheet) {\r\n delete this._worksheets[worksheet.id];\r\n }\r\n\r\n removeWorksheet(id) {\r\n const worksheet = this.getWorksheet(id);\r\n if (worksheet) {\r\n worksheet.destroy();\r\n }\r\n }\r\n\r\n getWorksheet(id) {\r\n if (id === undefined) {\r\n return this._worksheets.find(Boolean);\r\n }\r\n if (typeof id === 'number') {\r\n return this._worksheets[id];\r\n }\r\n if (typeof id === 'string') {\r\n return this._worksheets.find(worksheet => worksheet && worksheet.name === id);\r\n }\r\n return undefined;\r\n }\r\n\r\n get worksheets() {\r\n // return a clone of _worksheets\r\n return this._worksheets\r\n .slice(1)\r\n .sort((a, b) => a.orderNo - b.orderNo)\r\n .filter(Boolean);\r\n }\r\n\r\n eachSheet(iteratee) {\r\n this.worksheets.forEach(sheet => {\r\n iteratee(sheet, sheet.id);\r\n });\r\n }\r\n\r\n get definedNames() {\r\n return this._definedNames;\r\n }\r\n\r\n clearThemes() {\r\n // Note: themes are not an exposed feature, meddle at your peril!\r\n this._themes = undefined;\r\n }\r\n\r\n addImage(image) {\r\n // TODO: validation?\r\n const id = this.media.length;\r\n this.media.push(Object.assign({}, image, {type: 'image'}));\r\n return id;\r\n }\r\n\r\n getImage(id) {\r\n return this.media[id];\r\n }\r\n\r\n get model() {\r\n return {\r\n creator: this.creator || 'Unknown',\r\n lastModifiedBy: this.lastModifiedBy || 'Unknown',\r\n lastPrinted: this.lastPrinted,\r\n created: this.created,\r\n modified: this.modified,\r\n properties: this.properties,\r\n worksheets: this.worksheets.map(worksheet => worksheet.model),\r\n sheets: this.worksheets.map(ws => ws.model).filter(Boolean),\r\n definedNames: this._definedNames.model,\r\n views: this.views,\r\n company: this.company,\r\n manager: this.manager,\r\n title: this.title,\r\n subject: this.subject,\r\n keywords: this.keywords,\r\n category: this.category,\r\n description: this.description,\r\n language: this.language,\r\n revision: this.revision,\r\n contentStatus: this.contentStatus,\r\n themes: this._themes,\r\n media: this.media,\r\n calcProperties: this.calcProperties,\r\n };\r\n }\r\n\r\n set model(value) {\r\n this.creator = value.creator;\r\n this.lastModifiedBy = value.lastModifiedBy;\r\n this.lastPrinted = value.lastPrinted;\r\n this.created = value.created;\r\n this.modified = value.modified;\r\n this.company = value.company;\r\n this.manager = value.manager;\r\n this.title = value.title;\r\n this.subject = value.subject;\r\n this.keywords = value.keywords;\r\n this.category = value.category;\r\n this.description = value.description;\r\n this.language = value.language;\r\n this.revision = value.revision;\r\n this.contentStatus = value.contentStatus;\r\n\r\n this.properties = value.properties;\r\n this.calcProperties = value.calcProperties;\r\n this._worksheets = [];\r\n value.worksheets.forEach(worksheetModel => {\r\n const {id, name, state} = worksheetModel;\r\n const orderNo = value.sheets && value.sheets.findIndex(ws => ws.id === id);\r\n const worksheet = (this._worksheets[id] = new Worksheet({\r\n id,\r\n name,\r\n orderNo,\r\n state,\r\n workbook: this,\r\n }));\r\n\r\n worksheet.model = worksheetModel;\r\n });\r\n\r\n this._definedNames.model = value.definedNames;\r\n this.views = value.views;\r\n this._themes = value.themes;\r\n this.media = value.media || [];\r\n }\r\n}\r\n\r\nmodule.exports = Workbook;\r\n","const _ = require('../utils/under-dash');\r\n\r\nconst colCache = require('../utils/col-cache');\r\nconst Range = require('./range');\r\nconst Row = require('./row');\r\nconst Column = require('./column');\r\nconst Enums = require('./enums');\r\nconst Image = require('./image');\r\nconst Table = require('./table');\r\nconst DataValidations = require('./data-validations');\r\nconst Encryptor = require('../utils/encryptor');\r\n\r\n// Worksheet requirements\r\n// Operate as sheet inside workbook or standalone\r\n// Load and Save from file and stream\r\n// Access/Add/Delete individual cells\r\n// Manage column widths and row heights\r\n\r\nclass Worksheet {\r\n constructor(options) {\r\n options = options || {};\r\n\r\n // in a workbook, each sheet will have a number\r\n this.id = options.id;\r\n this.orderNo = options.orderNo;\r\n\r\n // and a name\r\n this.name = options.name || `Sheet${this.id}`;\r\n\r\n // add a state\r\n this.state = options.state || 'visible';\r\n\r\n // rows allows access organised by row. Sparse array of arrays indexed by row-1, col\r\n // Note: _rows is zero based. Must subtract 1 to go from cell.row to index\r\n this._rows = [];\r\n\r\n // column definitions\r\n this._columns = null;\r\n\r\n // column keys (addRow convenience): key ==> this._collumns index\r\n this._keys = {};\r\n\r\n // keep record of all merges\r\n this._merges = {};\r\n\r\n // record of all row and column pageBreaks\r\n this.rowBreaks = [];\r\n\r\n this._workbook = options.workbook;\r\n\r\n // for tabColor, default row height, outline levels, etc\r\n this.properties = Object.assign(\r\n {},\r\n {\r\n defaultRowHeight: 15,\r\n dyDescent: 55,\r\n outlineLevelCol: 0,\r\n outlineLevelRow: 0,\r\n },\r\n options.properties\r\n );\r\n\r\n // for all things printing\r\n this.pageSetup = Object.assign(\r\n {},\r\n {\r\n margins: {left: 0.7, right: 0.7, top: 0.75, bottom: 0.75, header: 0.3, footer: 0.3},\r\n orientation: 'portrait',\r\n horizontalDpi: 4294967295,\r\n verticalDpi: 4294967295,\r\n fitToPage: !!(\r\n options.pageSetup &&\r\n (options.pageSetup.fitToWidth || options.pageSetup.fitToHeight) &&\r\n !options.pageSetup.scale\r\n ),\r\n pageOrder: 'downThenOver',\r\n blackAndWhite: false,\r\n draft: false,\r\n cellComments: 'None',\r\n errors: 'displayed',\r\n scale: 100,\r\n fitToWidth: 1,\r\n fitToHeight: 1,\r\n paperSize: undefined,\r\n showRowColHeaders: false,\r\n showGridLines: false,\r\n firstPageNumber: undefined,\r\n horizontalCentered: false,\r\n verticalCentered: false,\r\n rowBreaks: null,\r\n colBreaks: null,\r\n },\r\n options.pageSetup\r\n );\r\n\r\n this.headerFooter = Object.assign(\r\n {},\r\n {\r\n differentFirst: false,\r\n differentOddEven: false,\r\n oddHeader: null,\r\n oddFooter: null,\r\n evenHeader: null,\r\n evenFooter: null,\r\n firstHeader: null,\r\n firstFooter: null,\r\n },\r\n options.headerFooter\r\n );\r\n\r\n this.dataValidations = new DataValidations();\r\n\r\n // for freezepanes, split, zoom, gridlines, etc\r\n this.views = options.views || [];\r\n\r\n this.autoFilter = options.autoFilter || null;\r\n\r\n // for images, etc\r\n this._media = [];\r\n\r\n // worksheet protection\r\n this.sheetProtection = null;\r\n\r\n // for tables\r\n this.tables = {};\r\n\r\n this.conditionalFormattings = [];\r\n }\r\n\r\n get workbook() {\r\n return this._workbook;\r\n }\r\n\r\n // when you're done with this worksheet, call this to remove from workbook\r\n destroy() {\r\n this._workbook.removeWorksheetEx(this);\r\n }\r\n\r\n // Get the bounding range of the cells in this worksheet\r\n get dimensions() {\r\n const dimensions = new Range();\r\n this._rows.forEach(row => {\r\n if (row) {\r\n const rowDims = row.dimensions;\r\n if (rowDims) {\r\n dimensions.expand(row.number, rowDims.min, row.number, rowDims.max);\r\n }\r\n }\r\n });\r\n return dimensions;\r\n }\r\n\r\n // =========================================================================\r\n // Columns\r\n\r\n // get the current columns array.\r\n get columns() {\r\n return this._columns;\r\n }\r\n\r\n // set the columns from an array of column definitions.\r\n // Note: any headers defined will overwrite existing values.\r\n set columns(value) {\r\n // calculate max header row count\r\n this._headerRowCount = value.reduce((pv, cv) => {\r\n const headerCount = (cv.header && 1) || (cv.headers && cv.headers.length) || 0;\r\n return Math.max(pv, headerCount);\r\n }, 0);\r\n\r\n // construct Column objects\r\n let count = 1;\r\n const columns = (this._columns = []);\r\n value.forEach(defn => {\r\n const column = new Column(this, count++, false);\r\n columns.push(column);\r\n column.defn = defn;\r\n });\r\n }\r\n\r\n getColumnKey(key) {\r\n return this._keys[key];\r\n }\r\n\r\n setColumnKey(key, value) {\r\n this._keys[key] = value;\r\n }\r\n\r\n deleteColumnKey(key) {\r\n delete this._keys[key];\r\n }\r\n\r\n eachColumnKey(f) {\r\n _.each(this._keys, f);\r\n }\r\n\r\n // get a single column by col number. If it doesn't exist, create it and any gaps before it\r\n getColumn(c) {\r\n if (typeof c === 'string') {\r\n // if it matches a key'd column, return that\r\n const col = this._keys[c];\r\n if (col) return col;\r\n\r\n // otherwise, assume letter\r\n c = colCache.l2n(c);\r\n }\r\n if (!this._columns) {\r\n this._columns = [];\r\n }\r\n if (c > this._columns.length) {\r\n let n = this._columns.length + 1;\r\n while (n <= c) {\r\n this._columns.push(new Column(this, n++));\r\n }\r\n }\r\n return this._columns[c - 1];\r\n }\r\n\r\n spliceColumns(start, count, ...inserts) {\r\n const rows = this._rows;\r\n const nRows = rows.length;\r\n if (inserts.length > 0) {\r\n // must iterate over all rows whether they exist yet or not\r\n for (let i = 0; i < nRows; i++) {\r\n const rowArguments = [start, count];\r\n // eslint-disable-next-line no-loop-func\r\n inserts.forEach(insert => {\r\n rowArguments.push(insert[i] || null);\r\n });\r\n const row = this.getRow(i + 1);\r\n // eslint-disable-next-line prefer-spread\r\n row.splice.apply(row, rowArguments);\r\n }\r\n } else {\r\n // nothing to insert, so just splice all rows\r\n this._rows.forEach(r => {\r\n if (r) {\r\n r.splice(start, count);\r\n }\r\n });\r\n }\r\n\r\n // splice column definitions\r\n const nExpand = inserts.length - count;\r\n const nKeep = start + count;\r\n const nEnd = this._columns.length;\r\n if (nExpand < 0) {\r\n for (let i = start + inserts.length; i <= nEnd; i++) {\r\n this.getColumn(i).defn = this.getColumn(i - nExpand).defn;\r\n }\r\n } else if (nExpand > 0) {\r\n for (let i = nEnd; i >= nKeep; i--) {\r\n this.getColumn(i + nExpand).defn = this.getColumn(i).defn;\r\n }\r\n }\r\n for (let i = start; i < start + inserts.length; i++) {\r\n this.getColumn(i).defn = null;\r\n }\r\n\r\n // account for defined names\r\n this.workbook.definedNames.spliceColumns(this.name, start, count, inserts.length);\r\n }\r\n\r\n get lastColumn() {\r\n return this.getColumn(this.columnCount);\r\n }\r\n\r\n get columnCount() {\r\n let maxCount = 0;\r\n this.eachRow(row => {\r\n maxCount = Math.max(maxCount, row.cellCount);\r\n });\r\n return maxCount;\r\n }\r\n\r\n get actualColumnCount() {\r\n // performance nightmare - for each row, counts all the columns used\r\n const counts = [];\r\n let count = 0;\r\n this.eachRow(row => {\r\n row.eachCell(({col}) => {\r\n if (!counts[col]) {\r\n counts[col] = true;\r\n count++;\r\n }\r\n });\r\n });\r\n return count;\r\n }\r\n\r\n // =========================================================================\r\n // Rows\r\n\r\n _commitRow() {\r\n // nop - allows streaming reader to fill a document\r\n }\r\n\r\n get _lastRowNumber() {\r\n // need to cope with results of splice\r\n const rows = this._rows;\r\n let n = rows.length;\r\n while (n > 0 && rows[n - 1] === undefined) {\r\n n--;\r\n }\r\n return n;\r\n }\r\n\r\n get _nextRow() {\r\n return this._lastRowNumber + 1;\r\n }\r\n\r\n get lastRow() {\r\n if (this._rows.length) {\r\n return this._rows[this._rows.length - 1];\r\n }\r\n return undefined;\r\n }\r\n\r\n // find a row (if exists) by row number\r\n findRow(r) {\r\n return this._rows[r - 1];\r\n }\r\n\r\n // find multiple rows (if exists) by row number\r\n findRows(start, length) {\r\n return this._rows.slice(start - 1, start - 1 + length);\r\n }\r\n\r\n get rowCount() {\r\n return this._lastRowNumber;\r\n }\r\n\r\n get actualRowCount() {\r\n // counts actual rows that have actual data\r\n let count = 0;\r\n this.eachRow(() => {\r\n count++;\r\n });\r\n return count;\r\n }\r\n\r\n // get a row by row number.\r\n getRow(r) {\r\n let row = this._rows[r - 1];\r\n if (!row) {\r\n row = this._rows[r - 1] = new Row(this, r);\r\n }\r\n return row;\r\n }\r\n\r\n // get multiple rows by row number.\r\n getRows(start, length) {\r\n if (length < 1) return undefined;\r\n const rows = [];\r\n for (let i = start; i < start + length; i++) {\r\n rows.push(this.getRow(i));\r\n }\r\n return rows;\r\n }\r\n\r\n addRow(value, style = 'n') {\r\n const rowNo = this._nextRow;\r\n const row = this.getRow(rowNo);\r\n row.values = value;\r\n this._setStyleOption(rowNo, style[0] === 'i' ? style : 'n');\r\n return row;\r\n }\r\n\r\n addRows(value, style = 'n') {\r\n const rows = [];\r\n value.forEach(row => {\r\n rows.push(this.addRow(row, style));\r\n });\r\n return rows;\r\n }\r\n\r\n insertRow(pos, value, style = 'n') {\r\n this.spliceRows(pos, 0, value);\r\n this._setStyleOption(pos, style);\r\n return this.getRow(pos);\r\n }\r\n\r\n insertRows(pos, values, style = 'n') {\r\n this.spliceRows(pos, 0, ...values);\r\n if (style !== 'n') {\r\n // copy over the styles\r\n for (let i = 0; i < values.length; i++) {\r\n if (style[0] === 'o' && this.findRow(values.length + pos + i) !== undefined) {\r\n this._copyStyle(values.length + pos + i, pos + i, style[1] === '+');\r\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\r\n this._copyStyle(pos - 1, pos + i, style[1] === '+');\r\n }\r\n }\r\n }\r\n return this.getRows(pos, values.length);\r\n }\r\n\r\n // set row at position to same style as of either pervious row (option 'i') or next row (option 'o')\r\n _setStyleOption(pos, style = 'n') {\r\n if (style[0] === 'o' && this.findRow(pos + 1) !== undefined) {\r\n this._copyStyle(pos + 1, pos, style[1] === '+');\r\n } else if (style[0] === 'i' && this.findRow(pos - 1) !== undefined) {\r\n this._copyStyle(pos - 1, pos, style[1] === '+');\r\n }\r\n }\r\n\r\n _copyStyle(src, dest, styleEmpty = false) {\r\n const rSrc = this.getRow(src);\r\n const rDst = this.getRow(dest);\r\n rDst.style = Object.freeze({...rSrc.style});\r\n // eslint-disable-next-line no-loop-func\r\n rSrc.eachCell({includeEmpty: styleEmpty}, (cell, colNumber) => {\r\n rDst.getCell(colNumber).style = Object.freeze({...cell.style});\r\n });\r\n rDst.height = rSrc.height;\r\n }\r\n\r\n duplicateRow(rowNum, count, insert = false) {\r\n // create count duplicates of rowNum\r\n // either inserting new or overwriting existing rows\r\n\r\n const rSrc = this._rows[rowNum - 1];\r\n const inserts = new Array(count).fill(rSrc.values);\r\n this.spliceRows(rowNum + 1, insert ? 0 : count, ...inserts);\r\n\r\n // now copy styles...\r\n for (let i = 0; i < count; i++) {\r\n const rDst = this._rows[rowNum + i];\r\n rDst.style = rSrc.style;\r\n rDst.height = rSrc.height;\r\n // eslint-disable-next-line no-loop-func\r\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\r\n rDst.getCell(colNumber).style = cell.style;\r\n });\r\n }\r\n }\r\n\r\n spliceRows(start, count, ...inserts) {\r\n // same problem as row.splice, except worse.\r\n const nKeep = start + count;\r\n const nInserts = inserts.length;\r\n const nExpand = nInserts - count;\r\n const nEnd = this._rows.length;\r\n let i;\r\n let rSrc;\r\n if (nExpand < 0) {\r\n // remove rows\r\n for (i = nKeep; i <= nEnd; i++) {\r\n rSrc = this._rows[i - 1];\r\n if (rSrc) {\r\n const rDst = this.getRow(i + nExpand);\r\n rDst.values = rSrc.values;\r\n rDst.style = rSrc.style;\r\n rDst.height = rSrc.height;\r\n // eslint-disable-next-line no-loop-func\r\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\r\n rDst.getCell(colNumber).style = cell.style;\r\n });\r\n this._rows[i - 1] = undefined;\r\n } else {\r\n this._rows[i + nExpand - 1] = undefined;\r\n }\r\n }\r\n } else if (nExpand > 0) {\r\n // insert new cells\r\n for (i = nEnd; i >= nKeep; i--) {\r\n rSrc = this._rows[i - 1];\r\n if (rSrc) {\r\n const rDst = this.getRow(i + nExpand);\r\n rDst.values = rSrc.values;\r\n rDst.style = rSrc.style;\r\n rDst.height = rSrc.height;\r\n // eslint-disable-next-line no-loop-func\r\n rSrc.eachCell({includeEmpty: true}, (cell, colNumber) => {\r\n rDst.getCell(colNumber).style = cell.style;\r\n\r\n // remerge cells accounting for insert offset\r\n if (cell._value.constructor.name === 'MergeValue') {\r\n const cellToBeMerged = this.getRow(cell._row._number + nInserts).getCell(colNumber);\r\n const prevMaster = cell._value._master;\r\n const newMaster = this.getRow(prevMaster._row._number + nInserts).getCell(prevMaster._column._number);\r\n cellToBeMerged.merge(newMaster);\r\n }\r\n });\r\n } else {\r\n this._rows[i + nExpand - 1] = undefined;\r\n }\r\n }\r\n }\r\n\r\n // now copy over the new values\r\n for (i = 0; i < nInserts; i++) {\r\n const rDst = this.getRow(start + i);\r\n rDst.style = {};\r\n rDst.values = inserts[i];\r\n }\r\n\r\n // account for defined names\r\n this.workbook.definedNames.spliceRows(this.name, start, count, nInserts);\r\n }\r\n\r\n // iterate over every row in the worksheet, including maybe empty rows\r\n eachRow(options, iteratee) {\r\n if (!iteratee) {\r\n iteratee = options;\r\n options = undefined;\r\n }\r\n if (options && options.includeEmpty) {\r\n const n = this._rows.length;\r\n for (let i = 1; i <= n; i++) {\r\n iteratee(this.getRow(i), i);\r\n }\r\n } else {\r\n this._rows.forEach(row => {\r\n if (row && row.hasValues) {\r\n iteratee(row, row.number);\r\n }\r\n });\r\n }\r\n }\r\n\r\n // return all rows as sparse array\r\n getSheetValues() {\r\n const rows = [];\r\n this._rows.forEach(row => {\r\n if (row) {\r\n rows[row.number] = row.values;\r\n }\r\n });\r\n return rows;\r\n }\r\n\r\n // =========================================================================\r\n // Cells\r\n\r\n // returns the cell at [r,c] or address given by r. If not found, return undefined\r\n findCell(r, c) {\r\n const address = colCache.getAddress(r, c);\r\n const row = this._rows[address.row - 1];\r\n return row ? row.findCell(address.col) : undefined;\r\n }\r\n\r\n // return the cell at [r,c] or address given by r. If not found, create a new one.\r\n getCell(r, c) {\r\n const address = colCache.getAddress(r, c);\r\n const row = this.getRow(address.row);\r\n return row.getCellEx(address);\r\n }\r\n\r\n // =========================================================================\r\n // Merge\r\n\r\n // convert the range defined by ['tl:br'], [tl,br] or [t,l,b,r] into a single 'merged' cell\r\n mergeCells(...cells) {\r\n const dimensions = new Range(cells);\r\n this._mergeCellsInternal(dimensions);\r\n }\r\n\r\n mergeCellsWithoutStyle(...cells) {\r\n const dimensions = new Range(cells);\r\n this._mergeCellsInternal(dimensions, true);\r\n }\r\n\r\n _mergeCellsInternal(dimensions, ignoreStyle) {\r\n // check cells aren't already merged\r\n _.each(this._merges, merge => {\r\n if (merge.intersects(dimensions)) {\r\n throw new Error('Cannot merge already merged cells');\r\n }\r\n });\r\n\r\n // apply merge\r\n const master = this.getCell(dimensions.top, dimensions.left);\r\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\r\n for (let j = dimensions.left; j <= dimensions.right; j++) {\r\n // merge all but the master cell\r\n if (i > dimensions.top || j > dimensions.left) {\r\n this.getCell(i, j).merge(master, ignoreStyle);\r\n }\r\n }\r\n }\r\n\r\n // index merge\r\n this._merges[master.address] = dimensions;\r\n }\r\n\r\n _unMergeMaster(master) {\r\n // master is always top left of a rectangle\r\n const merge = this._merges[master.address];\r\n if (merge) {\r\n for (let i = merge.top; i <= merge.bottom; i++) {\r\n for (let j = merge.left; j <= merge.right; j++) {\r\n this.getCell(i, j).unmerge();\r\n }\r\n }\r\n delete this._merges[master.address];\r\n }\r\n }\r\n\r\n get hasMerges() {\r\n // return true if this._merges has a merge object\r\n return _.some(this._merges, Boolean);\r\n }\r\n\r\n // scan the range defined by ['tl:br'], [tl,br] or [t,l,b,r] and if any cell is part of a merge,\r\n // un-merge the group. Note this function can affect multiple merges and merge-blocks are\r\n // atomic - either they're all merged or all un-merged.\r\n unMergeCells(...cells) {\r\n const dimensions = new Range(cells);\r\n\r\n // find any cells in that range and unmerge them\r\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\r\n for (let j = dimensions.left; j <= dimensions.right; j++) {\r\n const cell = this.findCell(i, j);\r\n if (cell) {\r\n if (cell.type === Enums.ValueType.Merge) {\r\n // this cell merges to another master\r\n this._unMergeMaster(cell.master);\r\n } else if (this._merges[cell.address]) {\r\n // this cell is a master\r\n this._unMergeMaster(cell);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ===========================================================================\r\n // Shared/Array Formula\r\n fillFormula(range, formula, results, shareType = 'shared') {\r\n // Define formula for top-left cell and share to rest\r\n const decoded = colCache.decode(range);\r\n const {top, left, bottom, right} = decoded;\r\n const width = right - left + 1;\r\n const masterAddress = colCache.encodeAddress(top, left);\r\n const isShared = shareType === 'shared';\r\n\r\n // work out result accessor\r\n let getResult;\r\n if (typeof results === 'function') {\r\n getResult = results;\r\n } else if (Array.isArray(results)) {\r\n if (Array.isArray(results[0])) {\r\n getResult = (row, col) => results[row - top][col - left];\r\n } else {\r\n // eslint-disable-next-line no-mixed-operators\r\n getResult = (row, col) => results[(row - top) * width + (col - left)];\r\n }\r\n } else {\r\n getResult = () => undefined;\r\n }\r\n let first = true;\r\n for (let r = top; r <= bottom; r++) {\r\n for (let c = left; c <= right; c++) {\r\n if (first) {\r\n this.getCell(r, c).value = {\r\n shareType,\r\n formula,\r\n ref: range,\r\n result: getResult(r, c),\r\n };\r\n first = false;\r\n } else {\r\n this.getCell(r, c).value = isShared\r\n ? {\r\n sharedFormula: masterAddress,\r\n result: getResult(r, c),\r\n }\r\n : getResult(r, c);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // =========================================================================\r\n // Images\r\n addImage(imageId, range) {\r\n const model = {\r\n type: 'image',\r\n imageId,\r\n range,\r\n };\r\n this._media.push(new Image(this, model));\r\n }\r\n\r\n getImages() {\r\n return this._media.filter(m => m.type === 'image');\r\n }\r\n\r\n addBackgroundImage(imageId) {\r\n const model = {\r\n type: 'background',\r\n imageId,\r\n };\r\n this._media.push(new Image(this, model));\r\n }\r\n\r\n getBackgroundImageId() {\r\n const image = this._media.find(m => m.type === 'background');\r\n return image && image.imageId;\r\n }\r\n\r\n // =========================================================================\r\n // Worksheet Protection\r\n protect(password, options) {\r\n // TODO: make this function truly async\r\n // perhaps marshal to worker thread or something\r\n return new Promise(resolve => {\r\n this.sheetProtection = {\r\n sheet: true,\r\n };\r\n if (options && 'spinCount' in options) {\r\n // force spinCount to be integer >= 0\r\n options.spinCount = Number.isFinite(options.spinCount) ? Math.round(Math.max(0, options.spinCount)) : 100000;\r\n }\r\n if (password) {\r\n this.sheetProtection.algorithmName = 'SHA-512';\r\n this.sheetProtection.saltValue = Encryptor.randomBytes(16).toString('base64');\r\n this.sheetProtection.spinCount = options && 'spinCount' in options ? options.spinCount : 100000; // allow user specified spinCount\r\n this.sheetProtection.hashValue = Encryptor.convertPasswordToHash(\r\n password,\r\n 'SHA512',\r\n this.sheetProtection.saltValue,\r\n this.sheetProtection.spinCount\r\n );\r\n }\r\n if (options) {\r\n this.sheetProtection = Object.assign(this.sheetProtection, options);\r\n if (!password && 'spinCount' in options) {\r\n delete this.sheetProtection.spinCount;\r\n }\r\n }\r\n resolve();\r\n });\r\n }\r\n\r\n unprotect() {\r\n this.sheetProtection = null;\r\n }\r\n\r\n // =========================================================================\r\n // Tables\r\n addTable(model) {\r\n const table = new Table(this, model);\r\n this.tables[model.name] = table;\r\n return table;\r\n }\r\n\r\n getTable(name) {\r\n return this.tables[name];\r\n }\r\n\r\n removeTable(name) {\r\n delete this.tables[name];\r\n }\r\n\r\n getTables() {\r\n return Object.values(this.tables);\r\n }\r\n\r\n // ===========================================================================\r\n // Conditional Formatting\r\n addConditionalFormatting(cf) {\r\n this.conditionalFormattings.push(cf);\r\n }\r\n\r\n removeConditionalFormatting(filter) {\r\n if (typeof filter === 'number') {\r\n this.conditionalFormattings.splice(filter, 1);\r\n } else if (filter instanceof Function) {\r\n this.conditionalFormattings = this.conditionalFormattings.filter(filter);\r\n } else {\r\n this.conditionalFormattings = [];\r\n }\r\n }\r\n\r\n // ===========================================================================\r\n // Deprecated\r\n get tabColor() {\r\n // eslint-disable-next-line no-console\r\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\r\n return this.properties.tabColor;\r\n }\r\n\r\n set tabColor(value) {\r\n // eslint-disable-next-line no-console\r\n console.trace('worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor');\r\n this.properties.tabColor = value;\r\n }\r\n\r\n // ===========================================================================\r\n // Model\r\n\r\n get model() {\r\n const model = {\r\n id: this.id,\r\n name: this.name,\r\n dataValidations: this.dataValidations.model,\r\n properties: this.properties,\r\n state: this.state,\r\n pageSetup: this.pageSetup,\r\n headerFooter: this.headerFooter,\r\n rowBreaks: this.rowBreaks,\r\n views: this.views,\r\n autoFilter: this.autoFilter,\r\n media: this._media.map(medium => medium.model),\r\n sheetProtection: this.sheetProtection,\r\n tables: Object.values(this.tables).map(table => table.model),\r\n conditionalFormattings: this.conditionalFormattings,\r\n };\r\n\r\n // =================================================\r\n // columns\r\n model.cols = Column.toModel(this.columns);\r\n\r\n // ==========================================================\r\n // Rows\r\n const rows = (model.rows = []);\r\n const dimensions = (model.dimensions = new Range());\r\n this._rows.forEach(row => {\r\n const rowModel = row && row.model;\r\n if (rowModel) {\r\n dimensions.expand(rowModel.number, rowModel.min, rowModel.number, rowModel.max);\r\n rows.push(rowModel);\r\n }\r\n });\r\n\r\n // ==========================================================\r\n // Merges\r\n model.merges = [];\r\n _.each(this._merges, merge => {\r\n model.merges.push(merge.range);\r\n });\r\n\r\n return model;\r\n }\r\n\r\n _parseRows(model) {\r\n this._rows = [];\r\n model.rows.forEach(rowModel => {\r\n const row = new Row(this, rowModel.number);\r\n this._rows[row.number - 1] = row;\r\n row.model = rowModel;\r\n });\r\n }\r\n\r\n _parseMergeCells(model) {\r\n _.each(model.mergeCells, merge => {\r\n // Do not merge styles when importing an Excel file\r\n // since each cell may have different styles intentionally.\r\n this.mergeCellsWithoutStyle(merge);\r\n });\r\n }\r\n\r\n set model(value) {\r\n this.name = value.name;\r\n this._columns = Column.fromModel(this, value.cols);\r\n this._parseRows(value);\r\n\r\n this._parseMergeCells(value);\r\n this.dataValidations = new DataValidations(value.dataValidations);\r\n this.properties = value.properties;\r\n this.pageSetup = value.pageSetup;\r\n this.headerFooter = value.headerFooter;\r\n this.views = value.views;\r\n this.autoFilter = value.autoFilter;\r\n this._media = value.media.map(medium => new Image(this, medium));\r\n this.sheetProtection = value.sheetProtection;\r\n this.tables = value.tables.reduce((tables, table) => {\r\n const t = new Table();\r\n t.model = table;\r\n tables[table.name] = t;\r\n return tables;\r\n }, {});\r\n this.conditionalFormattings = value.conditionalFormattings;\r\n }\r\n}\r\n\r\nmodule.exports = Worksheet;\r\n","// this bundle is built without polyfill leaving apps the freedom to add their own\r\nconst ExcelJS = {\r\n Workbook: require('./doc/workbook'),\r\n};\r\n\r\n// Object.assign mono-fill\r\nconst Enums = require('./doc/enums');\r\n\r\nObject.keys(Enums).forEach(key => {\r\n ExcelJS[key] = Enums[key];\r\n});\r\n\r\nmodule.exports = ExcelJS;\r\n","// eslint-disable-next-line node/no-unsupported-features/node-builtins\r\nconst textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8');\r\n\r\nfunction bufferToString(chunk) {\r\n if (typeof chunk === 'string') {\r\n return chunk;\r\n }\r\n if (textDecoder) {\r\n return textDecoder.decode(chunk);\r\n }\r\n return chunk.toString();\r\n}\r\n\r\nexports.bufferToString = bufferToString;\r\n","// eslint-disable-next-line node/no-unsupported-features/node-builtins\r\nconst textEncoder = typeof TextEncoder === 'undefined' ? null : new TextEncoder('utf-8');\r\nconst {Buffer} = require('buffer');\r\n\r\nfunction stringToBuffer(str) {\r\n if (typeof str !== 'string') {\r\n return str;\r\n }\r\n if (textEncoder) {\r\n return Buffer.from(textEncoder.encode(str).buffer);\r\n }\r\n return Buffer.from(str);\r\n}\r\n\r\nexports.stringToBuffer = stringToBuffer;\r\n","const _ = require('./under-dash');\r\nconst colCache = require('./col-cache');\r\n\r\nclass CellMatrix {\r\n constructor(template) {\r\n this.template = template;\r\n this.sheets = {};\r\n }\r\n\r\n addCell(addressStr) {\r\n this.addCellEx(colCache.decodeEx(addressStr));\r\n }\r\n\r\n getCell(addressStr) {\r\n return this.findCellEx(colCache.decodeEx(addressStr), true);\r\n }\r\n\r\n findCell(addressStr) {\r\n return this.findCellEx(colCache.decodeEx(addressStr), false);\r\n }\r\n\r\n findCellAt(sheetName, rowNumber, colNumber) {\r\n const sheet = this.sheets[sheetName];\r\n const row = sheet && sheet[rowNumber];\r\n return row && row[colNumber];\r\n }\r\n\r\n addCellEx(address) {\r\n if (address.top) {\r\n for (let row = address.top; row <= address.bottom; row++) {\r\n for (let col = address.left; col <= address.right; col++) {\r\n this.getCellAt(address.sheetName, row, col);\r\n }\r\n }\r\n } else {\r\n this.findCellEx(address, true);\r\n }\r\n }\r\n\r\n getCellEx(address) {\r\n return this.findCellEx(address, true);\r\n }\r\n\r\n findCellEx(address, create) {\r\n const sheet = this.findSheet(address, create);\r\n const row = this.findSheetRow(sheet, address, create);\r\n return this.findRowCell(row, address, create);\r\n }\r\n\r\n getCellAt(sheetName, rowNumber, colNumber) {\r\n const sheet = this.sheets[sheetName] || (this.sheets[sheetName] = []);\r\n const row = sheet[rowNumber] || (sheet[rowNumber] = []);\r\n const cell =\r\n row[colNumber] ||\r\n (row[colNumber] = {\r\n sheetName,\r\n address: colCache.n2l(colNumber) + rowNumber,\r\n row: rowNumber,\r\n col: colNumber,\r\n });\r\n return cell;\r\n }\r\n\r\n removeCellEx(address) {\r\n const sheet = this.findSheet(address);\r\n if (!sheet) {\r\n return;\r\n }\r\n const row = this.findSheetRow(sheet, address);\r\n if (!row) {\r\n return;\r\n }\r\n delete row[address.col];\r\n }\r\n\r\n forEachInSheet(sheetName, callback) {\r\n const sheet = this.sheets[sheetName];\r\n if (sheet) {\r\n sheet.forEach((row, rowNumber) => {\r\n if (row) {\r\n row.forEach((cell, colNumber) => {\r\n if (cell) {\r\n callback(cell, rowNumber, colNumber);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n forEach(callback) {\r\n _.each(this.sheets, (sheet, sheetName) => {\r\n this.forEachInSheet(sheetName, callback);\r\n });\r\n }\r\n\r\n map(callback) {\r\n const results = [];\r\n this.forEach(cell => {\r\n results.push(callback(cell));\r\n });\r\n return results;\r\n }\r\n\r\n findSheet(address, create) {\r\n const name = address.sheetName;\r\n if (this.sheets[name]) {\r\n return this.sheets[name];\r\n }\r\n if (create) {\r\n return (this.sheets[name] = []);\r\n }\r\n return undefined;\r\n }\r\n\r\n findSheetRow(sheet, address, create) {\r\n const {row} = address;\r\n if (sheet && sheet[row]) {\r\n return sheet[row];\r\n }\r\n if (create) {\r\n return (sheet[row] = []);\r\n }\r\n return undefined;\r\n }\r\n\r\n findRowCell(row, address, create) {\r\n const {col} = address;\r\n if (row && row[col]) {\r\n return row[col];\r\n }\r\n if (create) {\r\n return (row[col] = this.template\r\n ? Object.assign(address, JSON.parse(JSON.stringify(this.template)))\r\n : address);\r\n }\r\n return undefined;\r\n }\r\n\r\n spliceRows(sheetName, start, numDelete, numInsert) {\r\n const sheet = this.sheets[sheetName];\r\n if (sheet) {\r\n const inserts = [];\r\n for (let i = 0; i < numInsert; i++) {\r\n inserts.push([]);\r\n }\r\n sheet.splice(start, numDelete, ...inserts);\r\n }\r\n }\r\n\r\n spliceColumns(sheetName, start, numDelete, numInsert) {\r\n const sheet = this.sheets[sheetName];\r\n if (sheet) {\r\n const inserts = [];\r\n for (let i = 0; i < numInsert; i++) {\r\n inserts.push(null);\r\n }\r\n _.each(sheet, row => {\r\n row.splice(start, numDelete, ...inserts);\r\n });\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = CellMatrix;\r\n","const addressRegex = /^[A-Z]+\\d+$/;\r\n// =========================================================================\r\n// Column Letter to Number conversion\r\nconst colCache = {\r\n _dictionary: [\r\n 'A',\r\n 'B',\r\n 'C',\r\n 'D',\r\n 'E',\r\n 'F',\r\n 'G',\r\n 'H',\r\n 'I',\r\n 'J',\r\n 'K',\r\n 'L',\r\n 'M',\r\n 'N',\r\n 'O',\r\n 'P',\r\n 'Q',\r\n 'R',\r\n 'S',\r\n 'T',\r\n 'U',\r\n 'V',\r\n 'W',\r\n 'X',\r\n 'Y',\r\n 'Z',\r\n ],\r\n _l2nFill: 0,\r\n _l2n: {},\r\n _n2l: [],\r\n _level(n) {\r\n if (n <= 26) {\r\n return 1;\r\n }\r\n if (n <= 26 * 26) {\r\n return 2;\r\n }\r\n return 3;\r\n },\r\n _fill(level) {\r\n let c;\r\n let v;\r\n let l1;\r\n let l2;\r\n let l3;\r\n let n = 1;\r\n if (level >= 4) {\r\n throw new Error('Out of bounds. Excel supports columns from 1 to 16384');\r\n }\r\n if (this._l2nFill < 1 && level >= 1) {\r\n while (n <= 26) {\r\n c = this._dictionary[n - 1];\r\n this._n2l[n] = c;\r\n this._l2n[c] = n;\r\n n++;\r\n }\r\n this._l2nFill = 1;\r\n }\r\n if (this._l2nFill < 2 && level >= 2) {\r\n n = 27;\r\n while (n <= 26 + (26 * 26)) {\r\n v = n - (26 + 1);\r\n l1 = v % 26;\r\n l2 = Math.floor(v / 26);\r\n c = this._dictionary[l2] + this._dictionary[l1];\r\n this._n2l[n] = c;\r\n this._l2n[c] = n;\r\n n++;\r\n }\r\n this._l2nFill = 2;\r\n }\r\n if (this._l2nFill < 3 && level >= 3) {\r\n n = 26 + (26 * 26) + 1;\r\n while (n <= 16384) {\r\n v = n - ((26 * 26) + 26 + 1);\r\n l1 = v % 26;\r\n l2 = Math.floor(v / 26) % 26;\r\n l3 = Math.floor(v / (26 * 26));\r\n c = this._dictionary[l3] + this._dictionary[l2] + this._dictionary[l1];\r\n this._n2l[n] = c;\r\n this._l2n[c] = n;\r\n n++;\r\n }\r\n this._l2nFill = 3;\r\n }\r\n },\r\n l2n(l) {\r\n if (!this._l2n[l]) {\r\n this._fill(l.length);\r\n }\r\n if (!this._l2n[l]) {\r\n throw new Error(`Out of bounds. Invalid column letter: ${l}`);\r\n }\r\n return this._l2n[l];\r\n },\r\n n2l(n) {\r\n if (n < 1 || n > 16384) {\r\n throw new Error(`${n} is out of bounds. Excel supports columns from 1 to 16384`);\r\n }\r\n if (!this._n2l[n]) {\r\n this._fill(this._level(n));\r\n }\r\n return this._n2l[n];\r\n },\r\n\r\n // =========================================================================\r\n // Address processing\r\n _hash: {},\r\n\r\n // check if value looks like an address\r\n validateAddress(value) {\r\n if (!addressRegex.test(value)) {\r\n throw new Error(`Invalid Address: ${value}`);\r\n }\r\n return true;\r\n },\r\n\r\n // convert address string into structure\r\n decodeAddress(value) {\r\n const addr = value.length < 5 && this._hash[value];\r\n if (addr) {\r\n return addr;\r\n }\r\n let hasCol = false;\r\n let col = '';\r\n let colNumber = 0;\r\n let hasRow = false;\r\n let row = '';\r\n let rowNumber = 0;\r\n for (let i = 0, char; i < value.length; i++) {\r\n char = value.charCodeAt(i);\r\n // col should before row\r\n if (!hasRow && char >= 65 && char <= 90) {\r\n // 65 = 'A'.charCodeAt(0)\r\n // 90 = 'Z'.charCodeAt(0)\r\n hasCol = true;\r\n col += value[i];\r\n // colNumber starts from 1\r\n colNumber = (colNumber * 26) + char - 64;\r\n } else if (char >= 48 && char <= 57) {\r\n // 48 = '0'.charCodeAt(0)\r\n // 57 = '9'.charCodeAt(0)\r\n hasRow = true;\r\n row += value[i];\r\n // rowNumber starts from 0\r\n rowNumber = (rowNumber * 10) + char - 48;\r\n } else if (hasRow && hasCol && char !== 36) {\r\n // 36 = '$'.charCodeAt(0)\r\n break;\r\n }\r\n }\r\n if (!hasCol) {\r\n colNumber = undefined;\r\n } else if (colNumber > 16384) {\r\n throw new Error(`Out of bounds. Invalid column letter: ${col}`);\r\n }\r\n if (!hasRow) {\r\n rowNumber = undefined;\r\n }\r\n\r\n // in case $row$col\r\n value = col + row;\r\n\r\n const address = {\r\n address: value,\r\n col: colNumber,\r\n row: rowNumber,\r\n $col$row: `$${col}$${row}`,\r\n };\r\n\r\n // mem fix - cache only the tl 100x100 square\r\n if (colNumber <= 100 && rowNumber <= 100) {\r\n this._hash[value] = address;\r\n this._hash[address.$col$row] = address;\r\n }\r\n\r\n return address;\r\n },\r\n\r\n // convert r,c into structure (if only 1 arg, assume r is address string)\r\n getAddress(r, c) {\r\n if (c) {\r\n const address = this.n2l(c) + r;\r\n return this.decodeAddress(address);\r\n }\r\n return this.decodeAddress(r);\r\n },\r\n\r\n // convert [address], [tl:br] into address structures\r\n decode(value) {\r\n const parts = value.split(':');\r\n if (parts.length === 2) {\r\n const tl = this.decodeAddress(parts[0]);\r\n const br = this.decodeAddress(parts[1]);\r\n const result = {\r\n top: Math.min(tl.row, br.row),\r\n left: Math.min(tl.col, br.col),\r\n bottom: Math.max(tl.row, br.row),\r\n right: Math.max(tl.col, br.col),\r\n };\r\n // reconstruct tl, br and dimensions\r\n result.tl = this.n2l(result.left) + result.top;\r\n result.br = this.n2l(result.right) + result.bottom;\r\n result.dimensions = `${result.tl}:${result.br}`;\r\n return result;\r\n }\r\n return this.decodeAddress(value);\r\n },\r\n\r\n // convert [sheetName!][$]col[$]row[[$]col[$]row] into address or range structures\r\n decodeEx(value) {\r\n const groups = value.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/);\r\n\r\n const sheetName = groups[1] || groups[2]; // Qouted and unqouted groups\r\n const reference = groups[3]; // Remaining address\r\n\r\n const parts = reference.split(':');\r\n if (parts.length > 1) {\r\n let tl = this.decodeAddress(parts[0]);\r\n let br = this.decodeAddress(parts[1]);\r\n const top = Math.min(tl.row, br.row);\r\n const left = Math.min(tl.col, br.col);\r\n const bottom = Math.max(tl.row, br.row);\r\n const right = Math.max(tl.col, br.col);\r\n\r\n tl = this.n2l(left) + top;\r\n br = this.n2l(right) + bottom;\r\n\r\n return {\r\n top,\r\n left,\r\n bottom,\r\n right,\r\n sheetName,\r\n tl: {address: tl, col: left, row: top, $col$row: `$${this.n2l(left)}$${top}`, sheetName},\r\n br: {\r\n address: br,\r\n col: right,\r\n row: bottom,\r\n $col$row: `$${this.n2l(right)}$${bottom}`,\r\n sheetName,\r\n },\r\n dimensions: `${tl}:${br}`,\r\n };\r\n }\r\n if (reference.startsWith('#')) {\r\n return sheetName ? {sheetName, error: reference} : {error: reference};\r\n }\r\n\r\n const address = this.decodeAddress(reference);\r\n return sheetName ? {sheetName, ...address} : address;\r\n },\r\n\r\n // convert row,col into address string\r\n encodeAddress(row, col) {\r\n return colCache.n2l(col) + row;\r\n },\r\n\r\n // convert row,col into string address or t,l,b,r into range\r\n encode() {\r\n switch (arguments.length) {\r\n case 2:\r\n return colCache.encodeAddress(arguments[0], arguments[1]);\r\n case 4:\r\n return `${colCache.encodeAddress(arguments[0], arguments[1])}:${colCache.encodeAddress(\r\n arguments[2],\r\n arguments[3]\r\n )}`;\r\n default:\r\n throw new Error('Can only encode with 2 or 4 arguments');\r\n }\r\n },\r\n\r\n // return true if address is contained within range\r\n inRange(range, address) {\r\n const [left, top, , right, bottom] = range;\r\n const [col, row] = address;\r\n return col >= left && col <= right && row >= top && row <= bottom;\r\n },\r\n};\r\n\r\nmodule.exports = colCache;\r\n","'use strict';\r\n\r\nconst crypto = require('crypto');\r\n\r\nconst Encryptor = {\r\n /**\r\n * Calculate a hash of the concatenated buffers with the given algorithm.\r\n * @param {string} algorithm - The hash algorithm.\r\n * @returns {Buffer} The hash\r\n */\r\n hash(algorithm, ...buffers) {\r\n const hash = crypto.createHash(algorithm);\r\n hash.update(Buffer.concat(buffers));\r\n return hash.digest();\r\n },\r\n /**\r\n * Convert a password into an encryption key\r\n * @param {string} password - The password\r\n * @param {string} hashAlgorithm - The hash algoritm\r\n * @param {string} saltValue - The salt value\r\n * @param {number} spinCount - The spin count\r\n * @param {number} keyBits - The length of the key in bits\r\n * @param {Buffer} blockKey - The block key\r\n * @returns {Buffer} The encryption key\r\n */\r\n convertPasswordToHash(password, hashAlgorithm, saltValue, spinCount) {\r\n hashAlgorithm = hashAlgorithm.toLowerCase();\r\n const hashes = crypto.getHashes();\r\n if (hashes.indexOf(hashAlgorithm) < 0) {\r\n throw new Error(`Hash algorithm '${hashAlgorithm}' not supported!`);\r\n }\r\n\r\n // Password must be in unicode buffer\r\n const passwordBuffer = Buffer.from(password, 'utf16le');\r\n // Generate the initial hash\r\n let key = this.hash(hashAlgorithm, Buffer.from(saltValue, 'base64'), passwordBuffer);\r\n // Now regenerate until spin count\r\n for (let i = 0; i < spinCount; i++) {\r\n const iterator = Buffer.alloc(4);\r\n // this is the 'special' element of Excel password hashing\r\n // that stops us from using crypto.pbkdf2()\r\n iterator.writeUInt32LE(i, 0);\r\n key = this.hash(hashAlgorithm, key, iterator);\r\n }\r\n return key.toString('base64');\r\n },\r\n /**\r\n * Generates cryptographically strong pseudo-random data.\r\n * @param size The size argument is a number indicating the number of bytes to generate.\r\n */\r\n randomBytes(size) {\r\n return crypto.randomBytes(size);\r\n },\r\n};\r\nmodule.exports = Encryptor;\r\n","const {SaxesParser} = require('saxes');\r\nconst {PassThrough} = require('readable-stream');\r\nconst {bufferToString} = require('./browser-buffer-decode');\r\n\r\nmodule.exports = async function* (iterable) {\r\n // TODO: Remove once node v8 is deprecated\r\n // Detect and upgrade old streams\r\n if (iterable.pipe && !iterable[Symbol.asyncIterator]) {\r\n iterable = iterable.pipe(new PassThrough());\r\n }\r\n const saxesParser = new SaxesParser();\r\n let error;\r\n saxesParser.on('error', err => {\r\n error = err;\r\n });\r\n let events = [];\r\n saxesParser.on('opentag', value => events.push({eventType: 'opentag', value}));\r\n saxesParser.on('text', value => events.push({eventType: 'text', value}));\r\n saxesParser.on('closetag', value => events.push({eventType: 'closetag', value}));\r\n for await (const chunk of iterable) {\r\n saxesParser.write(bufferToString(chunk));\r\n // saxesParser.write and saxesParser.on() are synchronous,\r\n // so we can only reach the below line once all events have been emitted\r\n if (error) throw error;\r\n // As a performance optimization, we gather all events instead of passing\r\n // them one by one, which would cause each event to go through the event queue\r\n yield events;\r\n events = [];\r\n }\r\n};\r\n","const colCache = require('./col-cache');\r\n\r\n// const cellRefRegex = /(([a-z_\\-0-9]*)!)?[$]?([a-z]+)[$]?([1-9][0-9]*)/i;\r\nconst replacementCandidateRx = /(([a-z_\\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi;\r\nconst CRrx = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;\r\n\r\nfunction slideFormula(formula, fromCell, toCell) {\r\n const offset = colCache.decode(fromCell);\r\n const to = colCache.decode(toCell);\r\n return formula.replace(\r\n replacementCandidateRx,\r\n (refMatch, sheet, sheetMaybe, addrPart, trailingParen) => {\r\n if (trailingParen) {\r\n return refMatch;\r\n }\r\n const match = CRrx.exec(addrPart);\r\n if (match) {\r\n const colDollar = match[1];\r\n const colStr = match[2].toUpperCase();\r\n const rowDollar = match[3];\r\n const rowStr = match[4];\r\n if (colStr.length > 3 || (colStr.length === 3 && colStr > 'XFD')) {\r\n // > XFD is the highest col number in excel 2007 and beyond, so this is a named range\r\n return refMatch;\r\n }\r\n let col = colCache.l2n(colStr);\r\n let row = parseInt(rowStr, 10);\r\n if (!colDollar) {\r\n col += to.col - offset.col;\r\n }\r\n if (!rowDollar) {\r\n row += to.row - offset.row;\r\n }\r\n const res = (sheet || '') + (colDollar || '') + colCache.n2l(col) + (rowDollar || '') + row;\r\n return res;\r\n }\r\n return refMatch;\r\n }\r\n );\r\n}\r\n\r\nmodule.exports = {\r\n slideFormula,\r\n};\r\n","/* eslint-disable max-classes-per-file */\r\nconst Stream = require('readable-stream');\r\n\r\nconst utils = require('./utils');\r\nconst StringBuf = require('./string-buf');\r\n\r\n// =============================================================================\r\n// data chunks - encapsulating incoming data\r\nclass StringChunk {\r\n constructor(data, encoding) {\r\n this._data = data;\r\n this._encoding = encoding;\r\n }\r\n\r\n get length() {\r\n return this.toBuffer().length;\r\n }\r\n\r\n // copy to target buffer\r\n copy(target, targetOffset, offset, length) {\r\n return this.toBuffer().copy(target, targetOffset, offset, length);\r\n }\r\n\r\n toBuffer() {\r\n if (!this._buffer) {\r\n this._buffer = Buffer.from(this._data, this._encoding);\r\n }\r\n return this._buffer;\r\n }\r\n}\r\n\r\nclass StringBufChunk {\r\n constructor(data) {\r\n this._data = data;\r\n }\r\n\r\n get length() {\r\n return this._data.length;\r\n }\r\n\r\n // copy to target buffer\r\n copy(target, targetOffset, offset, length) {\r\n // eslint-disable-next-line no-underscore-dangle\r\n return this._data._buf.copy(target, targetOffset, offset, length);\r\n }\r\n\r\n toBuffer() {\r\n return this._data.toBuffer();\r\n }\r\n}\r\n\r\nclass BufferChunk {\r\n constructor(data) {\r\n this._data = data;\r\n }\r\n\r\n get length() {\r\n return this._data.length;\r\n }\r\n\r\n // copy to target buffer\r\n copy(target, targetOffset, offset, length) {\r\n this._data.copy(target, targetOffset, offset, length);\r\n }\r\n\r\n toBuffer() {\r\n return this._data;\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// ReadWriteBuf - a single buffer supporting simple read-write\r\nclass ReadWriteBuf {\r\n constructor(size) {\r\n this.size = size;\r\n // the buffer\r\n this.buffer = Buffer.alloc(size);\r\n // read index\r\n this.iRead = 0;\r\n // write index\r\n this.iWrite = 0;\r\n }\r\n\r\n toBuffer() {\r\n if (this.iRead === 0 && this.iWrite === this.size) {\r\n return this.buffer;\r\n }\r\n\r\n const buf = Buffer.alloc(this.iWrite - this.iRead);\r\n this.buffer.copy(buf, 0, this.iRead, this.iWrite);\r\n return buf;\r\n }\r\n\r\n get length() {\r\n return this.iWrite - this.iRead;\r\n }\r\n\r\n get eod() {\r\n return this.iRead === this.iWrite;\r\n }\r\n\r\n get full() {\r\n return this.iWrite === this.size;\r\n }\r\n\r\n read(size) {\r\n let buf;\r\n // read size bytes from buffer and return buffer\r\n if (size === 0) {\r\n // special case - return null if no data requested\r\n return null;\r\n }\r\n\r\n if (size === undefined || size >= this.length) {\r\n // if no size specified or size is at least what we have then return all of the bytes\r\n buf = this.toBuffer();\r\n this.iRead = this.iWrite;\r\n return buf;\r\n }\r\n\r\n // otherwise return a chunk\r\n buf = Buffer.alloc(size);\r\n this.buffer.copy(buf, 0, this.iRead, size);\r\n this.iRead += size;\r\n return buf;\r\n }\r\n\r\n write(chunk, offset, length) {\r\n // write as many bytes from data from optional source offset\r\n // and return number of bytes written\r\n const size = Math.min(length, this.size - this.iWrite);\r\n chunk.copy(this.buffer, this.iWrite, offset, offset + size);\r\n this.iWrite += size;\r\n return size;\r\n }\r\n}\r\n\r\n// =============================================================================\r\n// StreamBuf - a multi-purpose read-write stream\r\n// As MemBuf - write as much data as you like. Then call toBuffer() to consolidate\r\n// As StreamHub - pipe to multiple writables\r\n// As readable stream - feed data into the writable part and have some other code read from it.\r\n\r\n// Note: Not sure why but StreamBuf does not like JS \"class\" sugar. It fails the\r\n// integration tests\r\nconst StreamBuf = function(options) {\r\n options = options || {};\r\n this.bufSize = options.bufSize || 1024 * 1024;\r\n this.buffers = [];\r\n\r\n // batch mode fills a buffer completely before passing the data on\r\n // to pipes or 'readable' event listeners\r\n this.batch = options.batch || false;\r\n\r\n this.corked = false;\r\n // where in the current writable buffer we're up to\r\n this.inPos = 0;\r\n\r\n // where in the current readable buffer we've read up to\r\n this.outPos = 0;\r\n\r\n // consuming pipe streams go here\r\n this.pipes = [];\r\n\r\n // controls emit('data')\r\n this.paused = false;\r\n\r\n this.encoding = null;\r\n};\r\n\r\nutils.inherits(StreamBuf, Stream.Duplex, {\r\n toBuffer() {\r\n switch (this.buffers.length) {\r\n case 0:\r\n return null;\r\n case 1:\r\n return this.buffers[0].toBuffer();\r\n default:\r\n return Buffer.concat(this.buffers.map(rwBuf => rwBuf.toBuffer()));\r\n }\r\n },\r\n\r\n // writable\r\n // event drain - if write returns false (which it won't), indicates when safe to write again.\r\n // finish - end() has been called\r\n // pipe(src) - pipe() has been called on readable\r\n // unpipe(src) - unpipe() has been called on readable\r\n // error - duh\r\n\r\n _getWritableBuffer() {\r\n if (this.buffers.length) {\r\n const last = this.buffers[this.buffers.length - 1];\r\n if (!last.full) {\r\n return last;\r\n }\r\n }\r\n const buf = new ReadWriteBuf(this.bufSize);\r\n this.buffers.push(buf);\r\n return buf;\r\n },\r\n\r\n async _pipe(chunk) {\r\n const write = function(pipe) {\r\n return new Promise(resolve => {\r\n pipe.write(chunk.toBuffer(), () => {\r\n resolve();\r\n });\r\n });\r\n };\r\n await Promise.all(this.pipes.map(write));\r\n },\r\n _writeToBuffers(chunk) {\r\n let inPos = 0;\r\n const inLen = chunk.length;\r\n while (inPos < inLen) {\r\n // find writable buffer\r\n const buffer = this._getWritableBuffer();\r\n\r\n // write some data\r\n inPos += buffer.write(chunk, inPos, inLen - inPos);\r\n }\r\n },\r\n async write(data, encoding, callback) {\r\n if (encoding instanceof Function) {\r\n callback = encoding;\r\n encoding = 'utf8';\r\n }\r\n callback = callback || utils.nop;\r\n\r\n // encapsulate data into a chunk\r\n let chunk;\r\n if (data instanceof StringBuf) {\r\n chunk = new StringBufChunk(data);\r\n } else if (data instanceof Buffer) {\r\n chunk = new BufferChunk(data);\r\n } else if (typeof data === 'string' || data instanceof String || data instanceof ArrayBuffer) {\r\n chunk = new StringChunk(data, encoding);\r\n } else {\r\n throw new Error('Chunk must be one of type String, Buffer or StringBuf.');\r\n }\r\n\r\n // now, do something with the chunk\r\n if (this.pipes.length) {\r\n if (this.batch) {\r\n this._writeToBuffers(chunk);\r\n while (!this.corked && this.buffers.length > 1) {\r\n this._pipe(this.buffers.shift());\r\n }\r\n } else if (!this.corked) {\r\n await this._pipe(chunk);\r\n callback();\r\n } else {\r\n this._writeToBuffers(chunk);\r\n process.nextTick(callback);\r\n }\r\n } else {\r\n if (!this.paused) {\r\n this.emit('data', chunk.toBuffer());\r\n }\r\n\r\n this._writeToBuffers(chunk);\r\n this.emit('readable');\r\n }\r\n\r\n return true;\r\n },\r\n cork() {\r\n this.corked = true;\r\n },\r\n _flush(/* destination */) {\r\n // if we have comsumers...\r\n if (this.pipes.length) {\r\n // and there's stuff not written\r\n while (this.buffers.length) {\r\n this._pipe(this.buffers.shift());\r\n }\r\n }\r\n },\r\n uncork() {\r\n this.corked = false;\r\n this._flush();\r\n },\r\n end(chunk, encoding, callback) {\r\n const writeComplete = error => {\r\n if (error) {\r\n callback(error);\r\n } else {\r\n this._flush();\r\n this.pipes.forEach(pipe => {\r\n pipe.end();\r\n });\r\n this.emit('finish');\r\n }\r\n };\r\n if (chunk) {\r\n this.write(chunk, encoding, writeComplete);\r\n } else {\r\n writeComplete();\r\n }\r\n },\r\n\r\n // readable\r\n // event readable - some data is now available\r\n // event data - switch to flowing mode - feeds chunks to handler\r\n // event end - no more data\r\n // event close - optional, indicates upstream close\r\n // event error - duh\r\n read(size) {\r\n let buffers;\r\n // read min(buffer, size || infinity)\r\n if (size) {\r\n buffers = [];\r\n while (size && this.buffers.length && !this.buffers[0].eod) {\r\n const first = this.buffers[0];\r\n const buffer = first.read(size);\r\n size -= buffer.length;\r\n buffers.push(buffer);\r\n if (first.eod && first.full) {\r\n this.buffers.shift();\r\n }\r\n }\r\n return Buffer.concat(buffers);\r\n }\r\n\r\n buffers = this.buffers.map(buf => buf.toBuffer()).filter(Boolean);\r\n this.buffers = [];\r\n return Buffer.concat(buffers);\r\n },\r\n setEncoding(encoding) {\r\n // causes stream.read or stream.on('data) to return strings of encoding instead of Buffer objects\r\n this.encoding = encoding;\r\n },\r\n pause() {\r\n this.paused = true;\r\n },\r\n resume() {\r\n this.paused = false;\r\n },\r\n isPaused() {\r\n return !!this.paused;\r\n },\r\n pipe(destination) {\r\n // add destination to pipe list & write current buffer\r\n this.pipes.push(destination);\r\n if (!this.paused && this.buffers.length) {\r\n this.end();\r\n }\r\n },\r\n unpipe(destination) {\r\n // remove destination from pipe list\r\n this.pipes = this.pipes.filter(pipe => pipe !== destination);\r\n },\r\n unshift(/* chunk */) {\r\n // some numpty has read some data that's not for them and they want to put it back!\r\n // Might implement this some day\r\n throw new Error('Not Implemented');\r\n },\r\n wrap(/* stream */) {\r\n // not implemented\r\n throw new Error('Not Implemented');\r\n },\r\n});\r\n\r\nmodule.exports = StreamBuf;\r\n","// StringBuf - a way to keep string memory operations to a minimum\r\n// while building the strings for the xml files\r\nclass StringBuf {\r\n constructor(options) {\r\n this._buf = Buffer.alloc((options && options.size) || 16384);\r\n this._encoding = (options && options.encoding) || 'utf8';\r\n\r\n // where in the buffer we are at\r\n this._inPos = 0;\r\n\r\n // for use by toBuffer()\r\n this._buffer = undefined;\r\n }\r\n\r\n get length() {\r\n return this._inPos;\r\n }\r\n\r\n get capacity() {\r\n return this._buf.length;\r\n }\r\n\r\n get buffer() {\r\n return this._buf;\r\n }\r\n\r\n toBuffer() {\r\n // return the current data as a single enclosing buffer\r\n if (!this._buffer) {\r\n this._buffer = Buffer.alloc(this.length);\r\n this._buf.copy(this._buffer, 0, 0, this.length);\r\n }\r\n return this._buffer;\r\n }\r\n\r\n reset(position) {\r\n position = position || 0;\r\n this._buffer = undefined;\r\n this._inPos = position;\r\n }\r\n\r\n _grow(min) {\r\n let size = this._buf.length * 2;\r\n while (size < min) {\r\n size *= 2;\r\n }\r\n const buf = Buffer.alloc(size);\r\n this._buf.copy(buf, 0);\r\n this._buf = buf;\r\n }\r\n\r\n addText(text) {\r\n this._buffer = undefined;\r\n\r\n let inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);\r\n\r\n // if we've hit (or nearing capacity), grow the buf\r\n while (inPos >= this._buf.length - 4) {\r\n this._grow(this._inPos + text.length);\r\n\r\n // keep trying to write until we've completely written the text\r\n inPos = this._inPos + this._buf.write(text, this._inPos, this._encoding);\r\n }\r\n\r\n this._inPos = inPos;\r\n }\r\n\r\n addStringBuf(inBuf) {\r\n if (inBuf.length) {\r\n this._buffer = undefined;\r\n\r\n if (this.length + inBuf.length > this.capacity) {\r\n this._grow(this.length + inBuf.length);\r\n }\r\n // eslint-disable-next-line no-underscore-dangle\r\n inBuf._buf.copy(this._buf, this._inPos, 0, inBuf.length);\r\n this._inPos += inBuf.length;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = StringBuf;\r\n","const {toString} = Object.prototype;\r\nconst escapeHtmlRegex = /[\"&<>]/;\r\nconst _ = {\r\n each: function each(obj, cb) {\r\n if (obj) {\r\n if (Array.isArray(obj)) {\r\n obj.forEach(cb);\r\n } else {\r\n Object.keys(obj).forEach(key => {\r\n cb(obj[key], key);\r\n });\r\n }\r\n }\r\n },\r\n\r\n some: function some(obj, cb) {\r\n if (obj) {\r\n if (Array.isArray(obj)) {\r\n return obj.some(cb);\r\n }\r\n return Object.keys(obj).some(key => cb(obj[key], key));\r\n }\r\n return false;\r\n },\r\n\r\n every: function every(obj, cb) {\r\n if (obj) {\r\n if (Array.isArray(obj)) {\r\n return obj.every(cb);\r\n }\r\n return Object.keys(obj).every(key => cb(obj[key], key));\r\n }\r\n return true;\r\n },\r\n\r\n map: function map(obj, cb) {\r\n if (obj) {\r\n if (Array.isArray(obj)) {\r\n return obj.map(cb);\r\n }\r\n return Object.keys(obj).map(key => cb(obj[key], key));\r\n }\r\n return [];\r\n },\r\n\r\n keyBy(a, p) {\r\n return a.reduce((o, v) => {\r\n o[v[p]] = v;\r\n return o;\r\n }, {});\r\n },\r\n\r\n isEqual: function isEqual(a, b) {\r\n const aType = typeof a;\r\n const bType = typeof b;\r\n const aArray = Array.isArray(a);\r\n const bArray = Array.isArray(b);\r\n\r\n if (aType !== bType) {\r\n return false;\r\n }\r\n switch (typeof a) {\r\n case 'object':\r\n if (aArray || bArray) {\r\n if (aArray && bArray) {\r\n return (\r\n a.length === b.length &&\r\n a.every((aValue, index) => {\r\n const bValue = b[index];\r\n return _.isEqual(aValue, bValue);\r\n })\r\n );\r\n }\r\n return false;\r\n }\r\n return _.every(a, (aValue, key) => {\r\n const bValue = b[key];\r\n return _.isEqual(aValue, bValue);\r\n });\r\n\r\n default:\r\n return a === b;\r\n }\r\n },\r\n\r\n escapeHtml(html) {\r\n const regexResult = escapeHtmlRegex.exec(html);\r\n if (!regexResult) return html;\r\n\r\n let result = '';\r\n let escape = '';\r\n let lastIndex = 0;\r\n let i = regexResult.index;\r\n for (; i < html.length; i++) {\r\n switch (html.charAt(i)) {\r\n case '\"':\r\n escape = '"';\r\n break;\r\n case '&':\r\n escape = '&';\r\n break;\r\n case '\\'':\r\n escape = ''';\r\n break;\r\n case '<':\r\n escape = '<';\r\n break;\r\n case '>':\r\n escape = '>';\r\n break;\r\n default:\r\n continue;\r\n }\r\n if (lastIndex !== i) result += html.substring(lastIndex, i);\r\n lastIndex = i + 1;\r\n result += escape;\r\n }\r\n if (lastIndex !== i) return result + html.substring(lastIndex, i);\r\n return result;\r\n },\r\n\r\n strcmp(a, b) {\r\n if (a < b) return -1;\r\n if (a > b) return 1;\r\n return 0;\r\n },\r\n\r\n isUndefined(val) {\r\n return toString.call(val) === '[object Undefined]';\r\n },\r\n\r\n isObject(val) {\r\n return toString.call(val) === '[object Object]';\r\n },\r\n\r\n deepMerge() {\r\n const target = arguments[0] || {};\r\n const {length} = arguments;\r\n // eslint-disable-next-line one-var\r\n let src, clone, copyIsArray;\r\n\r\n function assignValue(val, key) {\r\n src = target[key];\r\n copyIsArray = Array.isArray(val);\r\n if (_.isObject(val) || copyIsArray) {\r\n if (copyIsArray) {\r\n copyIsArray = false;\r\n clone = src && Array.isArray(src) ? src : [];\r\n } else {\r\n clone = src && _.isObject(src) ? src : {};\r\n }\r\n target[key] = _.deepMerge(clone, val);\r\n } else if (!_.isUndefined(val)) {\r\n target[key] = val;\r\n }\r\n }\r\n\r\n for (let i = 0; i < length; i++) {\r\n _.each(arguments[i], assignValue);\r\n }\r\n return target;\r\n },\r\n};\r\n\r\nmodule.exports = _;\r\n","const fs = require('fs');\r\n\r\n// useful stuff\r\nconst inherits = function(cls, superCtor, statics, prototype) {\r\n // eslint-disable-next-line no-underscore-dangle\r\n cls.super_ = superCtor;\r\n\r\n if (!prototype) {\r\n prototype = statics;\r\n statics = null;\r\n }\r\n\r\n if (statics) {\r\n Object.keys(statics).forEach(i => {\r\n Object.defineProperty(cls, i, Object.getOwnPropertyDescriptor(statics, i));\r\n });\r\n }\r\n\r\n const properties = {\r\n constructor: {\r\n value: cls,\r\n enumerable: false,\r\n writable: false,\r\n configurable: true,\r\n },\r\n };\r\n if (prototype) {\r\n Object.keys(prototype).forEach(i => {\r\n properties[i] = Object.getOwnPropertyDescriptor(prototype, i);\r\n });\r\n }\r\n\r\n cls.prototype = Object.create(superCtor.prototype, properties);\r\n};\r\n\r\n// eslint-disable-next-line no-control-regex\r\nconst xmlDecodeRegex = /[<>&'\"\\x7F\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F]/;\r\nconst utils = {\r\n nop() {},\r\n promiseImmediate(value) {\r\n return new Promise(resolve => {\r\n if (global.setImmediate) {\r\n setImmediate(() => {\r\n resolve(value);\r\n });\r\n } else {\r\n // poorman's setImmediate - must wait at least 1ms\r\n setTimeout(() => {\r\n resolve(value);\r\n }, 1);\r\n }\r\n });\r\n },\r\n inherits,\r\n dateToExcel(d, date1904) {\r\n return 25569 + ( d.getTime() / (24 * 3600 * 1000) ) - (date1904 ? 1462 : 0);\r\n },\r\n excelToDate(v, date1904) {\r\n const millisecondSinceEpoch = Math.round((v - 25569 + (date1904 ? 1462 : 0)) * 24 * 3600 * 1000);\r\n return new Date(millisecondSinceEpoch);\r\n },\r\n parsePath(filepath) {\r\n const last = filepath.lastIndexOf('/');\r\n return {\r\n path: filepath.substring(0, last),\r\n name: filepath.substring(last + 1),\r\n };\r\n },\r\n getRelsPath(filepath) {\r\n const path = utils.parsePath(filepath);\r\n return `${path.path}/_rels/${path.name}.rels`;\r\n },\r\n xmlEncode(text) {\r\n const regexResult = xmlDecodeRegex.exec(text);\r\n if (!regexResult) return text;\r\n\r\n let result = '';\r\n let escape = '';\r\n let lastIndex = 0;\r\n let i = regexResult.index;\r\n for (; i < text.length; i++) {\r\n const charCode = text.charCodeAt(i);\r\n switch (charCode) {\r\n case 34: // \"\r\n escape = '"';\r\n break;\r\n case 38: // &\r\n escape = '&';\r\n break;\r\n case 39: // '\r\n escape = ''';\r\n break;\r\n case 60: // <\r\n escape = '<';\r\n break;\r\n case 62: // >\r\n escape = '>';\r\n break;\r\n case 127:\r\n escape = '';\r\n break;\r\n default: {\r\n if (charCode <= 31 && (charCode <= 8 || (charCode >= 11 && charCode !== 13))) {\r\n escape = '';\r\n break;\r\n }\r\n continue;\r\n }\r\n }\r\n if (lastIndex !== i) result += text.substring(lastIndex, i);\r\n lastIndex = i + 1;\r\n if (escape) result += escape;\r\n }\r\n if (lastIndex !== i) return result + text.substring(lastIndex, i);\r\n return result;\r\n },\r\n xmlDecode(text) {\r\n return text.replace(/&([a-z]*);/g, c => {\r\n switch (c) {\r\n case '<':\r\n return '<';\r\n case '>':\r\n return '>';\r\n case '&':\r\n return '&';\r\n case ''':\r\n return '\\'';\r\n case '"':\r\n return '\"';\r\n default:\r\n return c;\r\n }\r\n });\r\n },\r\n validInt(value) {\r\n const i = parseInt(value, 10);\r\n return !Number.isNaN(i) ? i : 0;\r\n },\r\n\r\n isDateFmt(fmt) {\r\n if (!fmt) {\r\n return false;\r\n }\r\n\r\n // must remove all chars inside quotes and []\r\n fmt = fmt.replace(/\\[[^\\]]*]/g, '');\r\n fmt = fmt.replace(/\"[^\"]*\"/g, '');\r\n // then check for date formatting chars\r\n const result = fmt.match(/[ymdhMsb]+/) !== null;\r\n return result;\r\n },\r\n\r\n fs: {\r\n exists(path) {\r\n return new Promise(resolve => {\r\n fs.access(path, fs.constants.F_OK, err => {\r\n resolve(!err);\r\n });\r\n });\r\n },\r\n },\r\n\r\n toIsoDateString(dt) {\r\n return dt.toIsoString().subsstr(0, 10);\r\n },\r\n};\r\n\r\nmodule.exports = utils;\r\n","const _ = require('./under-dash');\r\n\r\nconst utils = require('./utils');\r\n\r\n// constants\r\nconst OPEN_ANGLE = '<';\r\nconst CLOSE_ANGLE = '>';\r\nconst OPEN_ANGLE_SLASH = '';\r\nconst EQUALS_QUOTE = '=\"';\r\nconst QUOTE = '\"';\r\nconst SPACE = ' ';\r\n\r\nfunction pushAttribute(xml, name, value) {\r\n xml.push(SPACE);\r\n xml.push(name);\r\n xml.push(EQUALS_QUOTE);\r\n xml.push(utils.xmlEncode(value.toString()));\r\n xml.push(QUOTE);\r\n}\r\nfunction pushAttributes(xml, attributes) {\r\n if (attributes) {\r\n _.each(attributes, (value, name) => {\r\n if (value !== undefined) {\r\n pushAttribute(xml, name, value);\r\n }\r\n });\r\n }\r\n}\r\n\r\nclass XmlStream {\r\n constructor() {\r\n this._xml = [];\r\n this._stack = [];\r\n this._rollbacks = [];\r\n }\r\n\r\n get tos() {\r\n return this._stack.length ? this._stack[this._stack.length - 1] : undefined;\r\n }\r\n\r\n get cursor() {\r\n // handy way to track whether anything has been added\r\n return this._xml.length;\r\n }\r\n\r\n openXml(docAttributes) {\r\n const xml = this._xml;\r\n // \r\n xml.push('\\n');\r\n }\r\n\r\n openNode(name, attributes) {\r\n const parent = this.tos;\r\n const xml = this._xml;\r\n if (parent && this.open) {\r\n xml.push(CLOSE_ANGLE);\r\n }\r\n\r\n this._stack.push(name);\r\n\r\n // start streaming node\r\n xml.push(OPEN_ANGLE);\r\n xml.push(name);\r\n pushAttributes(xml, attributes);\r\n this.leaf = true;\r\n this.open = true;\r\n }\r\n\r\n addAttribute(name, value) {\r\n if (!this.open) {\r\n throw new Error('Cannot write attributes to node if it is not open');\r\n }\r\n if (value !== undefined) {\r\n pushAttribute(this._xml, name, value);\r\n }\r\n }\r\n\r\n addAttributes(attrs) {\r\n if (!this.open) {\r\n throw new Error('Cannot write attributes to node if it is not open');\r\n }\r\n pushAttributes(this._xml, attrs);\r\n }\r\n\r\n writeText(text) {\r\n const xml = this._xml;\r\n if (this.open) {\r\n xml.push(CLOSE_ANGLE);\r\n this.open = false;\r\n }\r\n this.leaf = false;\r\n xml.push(utils.xmlEncode(text.toString()));\r\n }\r\n\r\n writeXml(xml) {\r\n if (this.open) {\r\n this._xml.push(CLOSE_ANGLE);\r\n this.open = false;\r\n }\r\n this.leaf = false;\r\n this._xml.push(xml);\r\n }\r\n\r\n closeNode() {\r\n const node = this._stack.pop();\r\n const xml = this._xml;\r\n if (this.leaf) {\r\n xml.push(CLOSE_SLASH_ANGLE);\r\n } else {\r\n xml.push(OPEN_ANGLE_SLASH);\r\n xml.push(node);\r\n xml.push(CLOSE_ANGLE);\r\n }\r\n this.open = false;\r\n this.leaf = false;\r\n }\r\n\r\n leafNode(name, attributes, text) {\r\n this.openNode(name, attributes);\r\n if (text !== undefined) {\r\n // zeros need to be written\r\n this.writeText(text);\r\n }\r\n this.closeNode();\r\n }\r\n\r\n closeAll() {\r\n while (this._stack.length) {\r\n this.closeNode();\r\n }\r\n }\r\n\r\n addRollback() {\r\n this._rollbacks.push({\r\n xml: this._xml.length,\r\n stack: this._stack.length,\r\n leaf: this.leaf,\r\n open: this.open,\r\n });\r\n return this.cursor;\r\n }\r\n\r\n commit() {\r\n this._rollbacks.pop();\r\n }\r\n\r\n rollback() {\r\n const r = this._rollbacks.pop();\r\n if (this._xml.length > r.xml) {\r\n this._xml.splice(r.xml, this._xml.length - r.xml);\r\n }\r\n if (this._stack.length > r.stack) {\r\n this._stack.splice(r.stack, this._stack.length - r.stack);\r\n }\r\n this.leaf = r.leaf;\r\n this.open = r.open;\r\n }\r\n\r\n get xml() {\r\n this.closeAll();\r\n return this._xml.join('');\r\n }\r\n}\r\n\r\nXmlStream.StdDocAttributes = {\r\n version: '1.0',\r\n encoding: 'UTF-8',\r\n standalone: 'yes',\r\n};\r\n\r\nmodule.exports = XmlStream;\r\n","const events = require('events');\r\nconst JSZip = require('jszip');\r\n\r\nconst StreamBuf = require('./stream-buf');\r\nconst {stringToBuffer} = require('./browser-buffer-encode');\r\n\r\n// =============================================================================\r\n// The ZipWriter class\r\n// Packs streamed data into an output zip stream\r\nclass ZipWriter extends events.EventEmitter {\r\n constructor(options) {\r\n super();\r\n this.options = Object.assign(\r\n {\r\n type: 'nodebuffer',\r\n compression: 'DEFLATE',\r\n },\r\n options\r\n );\r\n\r\n this.zip = new JSZip();\r\n this.stream = new StreamBuf();\r\n }\r\n\r\n append(data, options) {\r\n if (options.hasOwnProperty('base64') && options.base64) {\r\n this.zip.file(options.name, data, {base64: true});\r\n } else {\r\n // https://www.npmjs.com/package/process\r\n if (process.browser && typeof data === 'string') {\r\n // use TextEncoder in browser\r\n data = stringToBuffer(data);\r\n }\r\n this.zip.file(options.name, data);\r\n }\r\n }\r\n\r\n async finalize() {\r\n const content = await this.zip.generateAsync(this.options);\r\n this.stream.end(content);\r\n this.emit('finish');\r\n }\r\n\r\n // ==========================================================================\r\n // Stream.Readable interface\r\n read(size) {\r\n return this.stream.read(size);\r\n }\r\n\r\n setEncoding(encoding) {\r\n return this.stream.setEncoding(encoding);\r\n }\r\n\r\n pause() {\r\n return this.stream.pause();\r\n }\r\n\r\n resume() {\r\n return this.stream.resume();\r\n }\r\n\r\n isPaused() {\r\n return this.stream.isPaused();\r\n }\r\n\r\n pipe(destination, options) {\r\n return this.stream.pipe(destination, options);\r\n }\r\n\r\n unpipe(destination) {\r\n return this.stream.unpipe(destination);\r\n }\r\n\r\n unshift(chunk) {\r\n return this.stream.unshift(chunk);\r\n }\r\n\r\n wrap(stream) {\r\n return this.stream.wrap(stream);\r\n }\r\n}\r\n\r\n// =============================================================================\r\n\r\nmodule.exports = {\r\n ZipWriter,\r\n};\r\n","module.exports = {\r\n 0: {f: 'General'},\r\n 1: {f: '0'},\r\n 2: {f: '0.00'},\r\n 3: {f: '#,##0'},\r\n 4: {f: '#,##0.00'},\r\n 9: {f: '0%'},\r\n 10: {f: '0.00%'},\r\n 11: {f: '0.00E+00'},\r\n 12: {f: '# ?/?'},\r\n 13: {f: '# ??/??'},\r\n 14: {f: 'mm-dd-yy'},\r\n 15: {f: 'd-mmm-yy'},\r\n 16: {f: 'd-mmm'},\r\n 17: {f: 'mmm-yy'},\r\n 18: {f: 'h:mm AM/PM'},\r\n 19: {f: 'h:mm:ss AM/PM'},\r\n 20: {f: 'h:mm'},\r\n 21: {f: 'h:mm:ss'},\r\n 22: {f: 'm/d/yy \"h\":mm'},\r\n\r\n 27: {\r\n 'zh-tw': '[$-404]e/m/d',\r\n 'zh-cn': 'yyyy\"年\"m\"月\"',\r\n 'ja-jp': '[$-411]ge.m.d',\r\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\r\n },\r\n 28: {\r\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\r\n 'zh-cn': 'm\"月\"d\"日\"',\r\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\r\n 'ko-kr': 'mm-dd',\r\n },\r\n 29: {\r\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\r\n 'zh-cn': 'm\"月\"d\"日\"',\r\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\r\n 'ko-kr': 'mm-dd',\r\n },\r\n 30: {'zh-tw': 'm/d/yy ', 'zh-cn': 'm-d-yy', 'ja-jp': 'm/d/yy', 'ko-kr': 'mm-dd-yy'},\r\n 31: {\r\n 'zh-tw': 'yyyy\"年\"m\"月\"d\"日\"',\r\n 'zh-cn': 'yyyy\"年\"m\"月\"d\"日\"',\r\n 'ja-jp': 'yyyy\"年\"m\"月\"d\"日\"',\r\n 'ko-kr': 'yyyy\"년\" mm\"월\" dd\"일\"',\r\n },\r\n 32: {\r\n 'zh-tw': 'hh\"時\"mm\"分\"',\r\n 'zh-cn': 'h\"时\"mm\"分\"',\r\n 'ja-jp': 'h\"時\"mm\"分\"',\r\n 'ko-kr': 'h\"시\" mm\"분\"',\r\n },\r\n 33: {\r\n 'zh-tw': 'hh\"時\"mm\"分\"ss\"秒\"',\r\n 'zh-cn': 'h\"时\"mm\"分\"ss\"秒\"',\r\n 'ja-jp': 'h\"時\"mm\"分\"ss\"秒\"',\r\n 'ko-kr': 'h\"시\" mm\"분\" ss\"초\"',\r\n },\r\n 34: {\r\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\r\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"',\r\n 'ja-jp': 'yyyy\"年\"m\"月\"',\r\n 'ko-kr': 'yyyy-mm-dd',\r\n },\r\n 35: {\r\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\r\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"ss\"秒\"',\r\n 'ja-jp': 'm\"月\"d\"日\"',\r\n 'ko-kr': 'yyyy-mm-dd',\r\n },\r\n 36: {\r\n 'zh-tw': '[$-404]e/m/d',\r\n 'zh-cn': 'yyyy\"年\"m\"月\"',\r\n 'ja-jp': '[$-411]ge.m.d',\r\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\r\n },\r\n\r\n 37: {f: '#,##0 ;(#,##0)'},\r\n 38: {f: '#,##0 ;[Red](#,##0)'},\r\n 39: {f: '#,##0.00 ;(#,##0.00)'},\r\n 40: {f: '#,##0.00 ;[Red](#,##0.00)'},\r\n 45: {f: 'mm:ss'},\r\n 46: {f: '[h]:mm:ss'},\r\n 47: {f: 'mmss.0'},\r\n 48: {f: '##0.0E+0'},\r\n 49: {f: '@'},\r\n\r\n 50: {\r\n 'zh-tw': '[$-404]e/m/d',\r\n 'zh-cn': 'yyyy\"年\"m\"月\"',\r\n 'ja-jp': '[$-411]ge.m.d',\r\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\r\n },\r\n 51: {\r\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\r\n 'zh-cn': 'm\"月\"d\"日\"',\r\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\r\n 'ko-kr': 'mm-dd',\r\n },\r\n 52: {\r\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\r\n 'zh-cn': 'yyyy\"年\"m\"月\"',\r\n 'ja-jp': 'yyyy\"年\"m\"月\"',\r\n 'ko-kr': 'yyyy-mm-dd',\r\n },\r\n 53: {\r\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\r\n 'zh-cn': 'm\"月\"d\"日\"',\r\n 'ja-jp': 'm\"月\"d\"日\"',\r\n 'ko-kr': 'yyyy-mm-dd',\r\n },\r\n 54: {\r\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\r\n 'zh-cn': 'm\"月\"d\"日\"',\r\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\r\n 'ko-kr': 'mm-dd',\r\n },\r\n 55: {\r\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"',\r\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"',\r\n 'ja-jp': 'yyyy\"年\"m\"月\"',\r\n 'ko-kr': 'yyyy-mm-dd',\r\n },\r\n 56: {\r\n 'zh-tw': '上午/下午 hh\"時\"mm\"分\"ss\"秒\"',\r\n 'zh-cn': '上午/下午 h\"时\"mm\"分\"ss\"秒\"',\r\n 'ja-jp': 'm\"月\"d\"日\"',\r\n 'ko-kr': 'yyyy-mm-dd',\r\n },\r\n 57: {\r\n 'zh-tw': '[$-404]e/m/d',\r\n 'zh-cn': 'yyyy\"年\"m\"月\"',\r\n 'ja-jp': '[$-411]ge.m.d',\r\n 'ko-kr': 'yyyy\"年\" mm\"月\" dd\"日\"',\r\n },\r\n 58: {\r\n 'zh-tw': '[$-404]e\"年\"m\"月\"d\"日\"',\r\n 'zh-cn': 'm\"月\"d\"日\"',\r\n 'ja-jp': '[$-411]ggge\"年\"m\"月\"d\"日\"',\r\n 'ko-kr': 'mm-dd',\r\n },\r\n\r\n 59: {'th-th': 't0'},\r\n 60: {'th-th': 't0.00'},\r\n 61: {'th-th': 't#,##0'},\r\n 62: {'th-th': 't#,##0.00'},\r\n 67: {'th-th': 't0%'},\r\n 68: {'th-th': 't0.00%'},\r\n 69: {'th-th': 't# ?/?'},\r\n 70: {'th-th': 't# ??/??'},\r\n\r\n 81: {'th-th': 'd/m/bb'},\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n OfficeDocument:\r\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument',\r\n Worksheet: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet',\r\n CalcChain: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain',\r\n SharedStrings:\r\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings',\r\n Styles: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',\r\n Theme: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',\r\n Hyperlink: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink',\r\n Image: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\r\n CoreProperties:\r\n 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties',\r\n ExtenderProperties:\r\n 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\r\n Comments: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments',\r\n VmlDrawing: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing',\r\n Table: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table',\r\n};\r\n","const parseSax = require('../../utils/parse-sax');\r\nconst XmlStream = require('../../utils/xml-stream');\r\n\r\n/* 'virtual' methods used as a form of documentation */\r\n/* eslint-disable class-methods-use-this */\r\n\r\n// Base class for Xforms\r\nclass BaseXform {\r\n // constructor(/* model, name */) {}\r\n\r\n // ============================================================\r\n // Virtual Interface\r\n prepare(/* model, options */) {\r\n // optional preparation (mutation) of model so it is ready for write\r\n }\r\n\r\n render(/* xmlStream, model */) {\r\n // convert model to xml\r\n }\r\n\r\n parseOpen(node) {\r\n // XML node opened\r\n }\r\n\r\n parseText(text) {\r\n // chunk of text encountered for current node\r\n }\r\n\r\n parseClose(name) {\r\n // XML node closed\r\n }\r\n\r\n reconcile(model, options) {\r\n // optional post-parse step (opposite to prepare)\r\n }\r\n\r\n // ============================================================\r\n reset() {\r\n // to make sure parses don't bleed to next iteration\r\n this.model = null;\r\n\r\n // if we have a map - reset them too\r\n if (this.map) {\r\n Object.values(this.map).forEach(xform => {\r\n if (xform instanceof BaseXform) {\r\n xform.reset();\r\n } else if (xform.xform) {\r\n xform.xform.reset();\r\n }\r\n });\r\n }\r\n }\r\n\r\n mergeModel(obj) {\r\n // set obj's props to this.model\r\n this.model = Object.assign(this.model || {}, obj);\r\n }\r\n\r\n async parse(saxParser) {\r\n for await (const events of saxParser) {\r\n for (const {eventType, value} of events) {\r\n if (eventType === 'opentag') {\r\n this.parseOpen(value);\r\n } else if (eventType === 'text') {\r\n this.parseText(value);\r\n } else if (eventType === 'closetag') {\r\n if (!this.parseClose(value.name)) {\r\n return this.model;\r\n }\r\n }\r\n }\r\n }\r\n return this.model;\r\n }\r\n\r\n async parseStream(stream) {\r\n return this.parse(parseSax(stream));\r\n }\r\n\r\n get xml() {\r\n // convenience function to get the xml of this.model\r\n // useful for manager types that are built during the prepare phase\r\n return this.toXml(this.model);\r\n }\r\n\r\n toXml(model) {\r\n const xmlStream = new XmlStream();\r\n this.render(xmlStream, model);\r\n return xmlStream.xml;\r\n }\r\n\r\n // ============================================================\r\n // Useful Utilities\r\n static toAttribute(value, dflt, always = false) {\r\n if (value === undefined) {\r\n if (always) {\r\n return dflt;\r\n }\r\n } else if (always || value !== dflt) {\r\n return value.toString();\r\n }\r\n return undefined;\r\n }\r\n\r\n static toStringAttribute(value, dflt, always = false) {\r\n return BaseXform.toAttribute(value, dflt, always);\r\n }\r\n\r\n static toStringValue(attr, dflt) {\r\n return attr === undefined ? dflt : attr;\r\n }\r\n\r\n static toBoolAttribute(value, dflt, always = false) {\r\n if (value === undefined) {\r\n if (always) {\r\n return dflt;\r\n }\r\n } else if (always || value !== dflt) {\r\n return value ? '1' : '0';\r\n }\r\n return undefined;\r\n }\r\n\r\n static toBoolValue(attr, dflt) {\r\n return attr === undefined ? dflt : attr === '1';\r\n }\r\n\r\n static toIntAttribute(value, dflt, always = false) {\r\n return BaseXform.toAttribute(value, dflt, always);\r\n }\r\n\r\n static toIntValue(attr, dflt) {\r\n return attr === undefined ? dflt : parseInt(attr, 10);\r\n }\r\n\r\n static toFloatAttribute(value, dflt, always = false) {\r\n return BaseXform.toAttribute(value, dflt, always);\r\n }\r\n\r\n static toFloatValue(attr, dflt) {\r\n return attr === undefined ? dflt : parseFloat(attr);\r\n }\r\n}\r\n\r\nmodule.exports = BaseXform;\r\n","const BaseXform = require('../base-xform');\r\nconst colCache = require('../../../utils/col-cache');\r\n\r\nclass DefinedNamesXform extends BaseXform {\r\n render(xmlStream, model) {\r\n // \r\n // name.ranges.join(',')\r\n // name.ranges.join(',')\r\n // \r\n xmlStream.openNode('definedName', {\r\n name: model.name,\r\n localSheetId: model.localSheetId,\r\n });\r\n xmlStream.writeText(model.ranges.join(','));\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case 'definedName':\r\n this._parsedName = node.attributes.name;\r\n this._parsedLocalSheetId = node.attributes.localSheetId;\r\n this._parsedText = [];\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n this._parsedText.push(text);\r\n }\r\n\r\n parseClose() {\r\n this.model = {\r\n name: this._parsedName,\r\n ranges: extractRanges(this._parsedText.join('')),\r\n };\r\n if (this._parsedLocalSheetId !== undefined) {\r\n this.model.localSheetId = parseInt(this._parsedLocalSheetId, 10);\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nfunction isValidRange(range) {\r\n try {\r\n colCache.decodeEx(range);\r\n return true;\r\n } catch (err) {\r\n return false;\r\n }\r\n}\r\n\r\nfunction extractRanges(parsedText) {\r\n const ranges = [];\r\n let quotesOpened = false;\r\n let last = '';\r\n parsedText.split(',').forEach(item => {\r\n if (!item) {\r\n return;\r\n }\r\n const quotes = (item.match(/'/g) || []).length;\r\n\r\n if (!quotes) {\r\n if (quotesOpened) {\r\n last += `${item},`;\r\n } else if (isValidRange(item)) {\r\n ranges.push(item);\r\n }\r\n return;\r\n }\r\n const quotesEven = quotes % 2 === 0;\r\n\r\n if (!quotesOpened && quotesEven && isValidRange(item)) {\r\n ranges.push(item);\r\n } else if (quotesOpened && !quotesEven) {\r\n quotesOpened = false;\r\n if (isValidRange(last + item)) {\r\n ranges.push(last + item);\r\n }\r\n last = '';\r\n } else {\r\n quotesOpened = true;\r\n last += `${item},`;\r\n }\r\n });\r\n return ranges;\r\n}\r\n\r\nmodule.exports = DefinedNamesXform;\r\n","const utils = require('../../../utils/utils');\r\nconst BaseXform = require('../base-xform');\r\n\r\nclass WorksheetXform extends BaseXform {\r\n render(xmlStream, model) {\r\n xmlStream.leafNode('sheet', {\r\n sheetId: model.id,\r\n name: model.name,\r\n state: model.state,\r\n 'r:id': model.rId,\r\n });\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === 'sheet') {\r\n this.model = {\r\n name: utils.xmlDecode(node.attributes.name),\r\n id: parseInt(node.attributes.sheetId, 10),\r\n state: node.attributes.state,\r\n rId: node.attributes['r:id'],\r\n };\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = WorksheetXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass WorkbookCalcPropertiesXform extends BaseXform {\r\n render(xmlStream, model) {\r\n xmlStream.leafNode('calcPr', {\r\n calcId: 171027,\r\n fullCalcOnLoad: model.fullCalcOnLoad ? 1 : undefined,\r\n });\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === 'calcPr') {\r\n this.model = {};\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = WorkbookCalcPropertiesXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass WorksheetPropertiesXform extends BaseXform {\r\n render(xmlStream, model) {\r\n xmlStream.leafNode('workbookPr', {\r\n date1904: model.date1904 ? 1 : undefined,\r\n defaultThemeVersion: 164011,\r\n filterPrivacy: 1,\r\n });\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === 'workbookPr') {\r\n this.model = {\r\n date1904: node.attributes.date1904 === '1',\r\n };\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = WorksheetPropertiesXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass WorkbookViewXform extends BaseXform {\r\n render(xmlStream, model) {\r\n const attributes = {\r\n xWindow: model.x || 0,\r\n yWindow: model.y || 0,\r\n windowWidth: model.width || 12000,\r\n windowHeight: model.height || 24000,\r\n firstSheet: model.firstSheet,\r\n activeTab: model.activeTab,\r\n };\r\n if (model.visibility && model.visibility !== 'visible') {\r\n attributes.visibility = model.visibility;\r\n }\r\n xmlStream.leafNode('workbookView', attributes);\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === 'workbookView') {\r\n const model = (this.model = {});\r\n const addS = function(name, value, dflt) {\r\n const s = value !== undefined ? (model[name] = value) : dflt;\r\n if (s !== undefined) {\r\n model[name] = s;\r\n }\r\n };\r\n const addN = function(name, value, dflt) {\r\n const n = value !== undefined ? (model[name] = parseInt(value, 10)) : dflt;\r\n if (n !== undefined) {\r\n model[name] = n;\r\n }\r\n };\r\n addN('x', node.attributes.xWindow, 0);\r\n addN('y', node.attributes.yWindow, 0);\r\n addN('width', node.attributes.windowWidth, 25000);\r\n addN('height', node.attributes.windowHeight, 10000);\r\n addS('visibility', node.attributes.visibility, 'visible');\r\n addN('activeTab', node.attributes.activeTab, undefined);\r\n addN('firstSheet', node.attributes.firstSheet, undefined);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = WorkbookViewXform;\r\n","const _ = require('../../../utils/under-dash');\r\n\r\nconst colCache = require('../../../utils/col-cache');\r\nconst XmlStream = require('../../../utils/xml-stream');\r\n\r\nconst BaseXform = require('../base-xform');\r\nconst StaticXform = require('../static-xform');\r\nconst ListXform = require('../list-xform');\r\nconst DefinedNameXform = require('./defined-name-xform');\r\nconst SheetXform = require('./sheet-xform');\r\nconst WorkbookViewXform = require('./workbook-view-xform');\r\nconst WorkbookPropertiesXform = require('./workbook-properties-xform');\r\nconst WorkbookCalcPropertiesXform = require('./workbook-calc-properties-xform');\r\n\r\nclass WorkbookXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n fileVersion: WorkbookXform.STATIC_XFORMS.fileVersion,\r\n workbookPr: new WorkbookPropertiesXform(),\r\n bookViews: new ListXform({\r\n tag: 'bookViews',\r\n count: false,\r\n childXform: new WorkbookViewXform(),\r\n }),\r\n sheets: new ListXform({tag: 'sheets', count: false, childXform: new SheetXform()}),\r\n definedNames: new ListXform({\r\n tag: 'definedNames',\r\n count: false,\r\n childXform: new DefinedNameXform(),\r\n }),\r\n calcPr: new WorkbookCalcPropertiesXform(),\r\n };\r\n }\r\n\r\n prepare(model) {\r\n model.sheets = model.worksheets;\r\n\r\n // collate all the print areas from all of the sheets and add them to the defined names\r\n const printAreas = [];\r\n let index = 0; // sheets is sparse array - calc index manually\r\n model.sheets.forEach(sheet => {\r\n if (sheet.pageSetup && sheet.pageSetup.printArea) {\r\n sheet.pageSetup.printArea.split('&&').forEach(printArea => {\r\n const printAreaComponents = printArea.split(':');\r\n const definedName = {\r\n name: '_xlnm.Print_Area',\r\n ranges: [`'${sheet.name}'!$${printAreaComponents[0]}:$${printAreaComponents[1]}`],\r\n localSheetId: index,\r\n };\r\n printAreas.push(definedName);\r\n });\r\n }\r\n\r\n if (\r\n sheet.pageSetup &&\r\n (sheet.pageSetup.printTitlesRow || sheet.pageSetup.printTitlesColumn)\r\n ) {\r\n const ranges = [];\r\n\r\n if (sheet.pageSetup.printTitlesColumn) {\r\n const titlesColumns = sheet.pageSetup.printTitlesColumn.split(':');\r\n ranges.push(`'${sheet.name}'!$${titlesColumns[0]}:$${titlesColumns[1]}`);\r\n }\r\n\r\n if (sheet.pageSetup.printTitlesRow) {\r\n const titlesRows = sheet.pageSetup.printTitlesRow.split(':');\r\n ranges.push(`'${sheet.name}'!$${titlesRows[0]}:$${titlesRows[1]}`);\r\n }\r\n\r\n const definedName = {\r\n name: '_xlnm.Print_Titles',\r\n ranges,\r\n localSheetId: index,\r\n };\r\n\r\n printAreas.push(definedName);\r\n }\r\n index++;\r\n });\r\n if (printAreas.length) {\r\n model.definedNames = model.definedNames.concat(printAreas);\r\n }\r\n\r\n (model.media || []).forEach((medium, i) => {\r\n // assign name\r\n medium.name = medium.type + (i + 1);\r\n });\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n xmlStream.openNode('workbook', WorkbookXform.WORKBOOK_ATTRIBUTES);\r\n\r\n this.map.fileVersion.render(xmlStream);\r\n this.map.workbookPr.render(xmlStream, model.properties);\r\n this.map.bookViews.render(xmlStream, model.views);\r\n this.map.sheets.render(xmlStream, model.sheets);\r\n this.map.definedNames.render(xmlStream, model.definedNames);\r\n this.map.calcPr.render(xmlStream, model.calcProperties);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'workbook':\r\n return true;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case 'workbook':\r\n this.model = {\r\n sheets: this.map.sheets.model,\r\n properties: this.map.workbookPr.model || {},\r\n views: this.map.bookViews.model,\r\n calcProperties: {},\r\n };\r\n if (this.map.definedNames.model) {\r\n this.model.definedNames = this.map.definedNames.model;\r\n }\r\n\r\n return false;\r\n default:\r\n // not quite sure how we get here!\r\n return true;\r\n }\r\n }\r\n\r\n reconcile(model) {\r\n const rels = (model.workbookRels || []).reduce((map, rel) => {\r\n map[rel.Id] = rel;\r\n return map;\r\n }, {});\r\n\r\n // reconcile sheet ids, rIds and names\r\n const worksheets = [];\r\n let worksheet;\r\n let index = 0;\r\n\r\n (model.sheets || []).forEach(sheet => {\r\n const rel = rels[sheet.rId];\r\n if (!rel) {\r\n return;\r\n }\r\n // if rel.Target start with `[space]/xl/` or `/xl/` , then it will be replaced with `''` and spliced behind `xl/`,\r\n // otherwise it will be spliced directly behind `xl/`. i.g.\r\n worksheet = model.worksheetHash[`xl/${rel.Target.replace(/^(\\s|\\/xl\\/)+/, '')}`];\r\n // If there are \"chartsheets\" in the file, rel.Target will\r\n // come out as chartsheets/sheet1.xml or similar here, and\r\n // that won't be in model.worksheetHash.\r\n // As we don't have the infrastructure to support chartsheets,\r\n // we will ignore them for now:\r\n if (worksheet) {\r\n worksheet.name = sheet.name;\r\n worksheet.id = sheet.id;\r\n worksheet.state = sheet.state;\r\n worksheets[index++] = worksheet;\r\n }\r\n });\r\n\r\n // reconcile print areas\r\n const definedNames = [];\r\n _.each(model.definedNames, definedName => {\r\n if (definedName.name === '_xlnm.Print_Area') {\r\n worksheet = worksheets[definedName.localSheetId];\r\n if (worksheet) {\r\n if (!worksheet.pageSetup) {\r\n worksheet.pageSetup = {};\r\n }\r\n const range = colCache.decodeEx(definedName.ranges[0]);\r\n worksheet.pageSetup.printArea = worksheet.pageSetup.printArea\r\n ? `${worksheet.pageSetup.printArea}&&${range.dimensions}`\r\n : range.dimensions;\r\n }\r\n } else if (definedName.name === '_xlnm.Print_Titles') {\r\n worksheet = worksheets[definedName.localSheetId];\r\n if (worksheet) {\r\n if (!worksheet.pageSetup) {\r\n worksheet.pageSetup = {};\r\n }\r\n\r\n const rangeString = definedName.ranges.join(',');\r\n\r\n const dollarRegex = /\\$/g;\r\n\r\n const rowRangeRegex = /\\$\\d+:\\$\\d+/;\r\n const rowRangeMatches = rangeString.match(rowRangeRegex);\r\n\r\n if (rowRangeMatches && rowRangeMatches.length) {\r\n const range = rowRangeMatches[0];\r\n worksheet.pageSetup.printTitlesRow = range.replace(dollarRegex, '');\r\n }\r\n\r\n const columnRangeRegex = /\\$[A-Z]+:\\$[A-Z]+/;\r\n const columnRangeMatches = rangeString.match(columnRangeRegex);\r\n\r\n if (columnRangeMatches && columnRangeMatches.length) {\r\n const range = columnRangeMatches[0];\r\n worksheet.pageSetup.printTitlesColumn = range.replace(dollarRegex, '');\r\n }\r\n }\r\n } else {\r\n definedNames.push(definedName);\r\n }\r\n });\r\n model.definedNames = definedNames;\r\n\r\n // used by sheets to build their image models\r\n model.media.forEach((media, i) => {\r\n media.index = i;\r\n });\r\n }\r\n}\r\n\r\nWorkbookXform.WORKBOOK_ATTRIBUTES = {\r\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\r\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\r\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\r\n 'mc:Ignorable': 'x15',\r\n 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',\r\n};\r\nWorkbookXform.STATIC_XFORMS = {\r\n fileVersion: new StaticXform({\r\n tag: 'fileVersion',\r\n $: {appName: 'xl', lastEdited: 5, lowestEdited: 5, rupBuild: 9303},\r\n }),\r\n};\r\n\r\nmodule.exports = WorkbookXform;\r\n","const RichTextXform = require('../strings/rich-text-xform');\r\nconst utils = require('../../../utils/utils');\r\nconst BaseXform = require('../base-xform');\r\n\r\n/**\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 51422:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n test\r\n \r\n \r\n \r\n */\r\n\r\nconst CommentXform = (module.exports = function(model) {\r\n this.model = model;\r\n});\r\n\r\nutils.inherits(CommentXform, BaseXform, {\r\n get tag() {\r\n return 'r';\r\n },\r\n\r\n get richTextXform() {\r\n if (!this._richTextXform) {\r\n this._richTextXform = new RichTextXform();\r\n }\r\n return this._richTextXform;\r\n },\r\n\r\n render(xmlStream, model) {\r\n model = model || this.model;\r\n\r\n xmlStream.openNode('comment', {\r\n ref: model.ref,\r\n authorId: 0,\r\n });\r\n xmlStream.openNode('text');\r\n if (model && model.note && model.note.texts) {\r\n model.note.texts.forEach(text => {\r\n this.richTextXform.render(xmlStream, text);\r\n });\r\n }\r\n xmlStream.closeNode();\r\n xmlStream.closeNode();\r\n },\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'comment':\r\n this.model = {\r\n type: 'note',\r\n note: {\r\n texts: [],\r\n },\r\n ...node.attributes,\r\n };\r\n return true;\r\n case 'r':\r\n this.parser = this.richTextXform;\r\n this.parser.parseOpen(node);\r\n return true;\r\n default:\r\n return false;\r\n }\r\n },\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n },\r\n parseClose(name) {\r\n switch (name) {\r\n case 'comment':\r\n return false;\r\n case 'r':\r\n this.model.note.texts.push(this.parser.model);\r\n this.parser = undefined;\r\n return true;\r\n default:\r\n if (this.parser) {\r\n this.parser.parseClose(name);\r\n }\r\n return true;\r\n }\r\n },\r\n});\r\n","const XmlStream = require('../../../utils/xml-stream');\r\nconst utils = require('../../../utils/utils');\r\nconst BaseXform = require('../base-xform');\r\n\r\nconst CommentXform = require('./comment-xform');\r\n\r\nconst CommentsXform = (module.exports = function() {\r\n this.map = {\r\n comment: new CommentXform(),\r\n };\r\n});\r\n\r\nutils.inherits(\r\n CommentsXform,\r\n BaseXform,\r\n {\r\n COMMENTS_ATTRIBUTES: {\r\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\r\n },\r\n },\r\n {\r\n render(xmlStream, model) {\r\n model = model || this.model;\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n xmlStream.openNode('comments', CommentsXform.COMMENTS_ATTRIBUTES);\r\n\r\n // authors\r\n // TODO: support authors properly\r\n xmlStream.openNode('authors');\r\n xmlStream.leafNode('author', null, 'Author');\r\n xmlStream.closeNode();\r\n\r\n // comments\r\n xmlStream.openNode('commentList');\r\n model.comments.forEach(comment => {\r\n this.map.comment.render(xmlStream, comment);\r\n });\r\n xmlStream.closeNode();\r\n xmlStream.closeNode();\r\n },\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'commentList':\r\n this.model = {\r\n comments: [],\r\n };\r\n return true;\r\n case 'comment':\r\n this.parser = this.map.comment;\r\n this.parser.parseOpen(node);\r\n return true;\r\n default:\r\n return false;\r\n }\r\n },\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n },\r\n parseClose(name) {\r\n switch (name) {\r\n case 'commentList':\r\n return false;\r\n case 'comment':\r\n this.model.comments.push(this.parser.model);\r\n this.parser = undefined;\r\n return true;\r\n default:\r\n if (this.parser) {\r\n this.parser.parseClose(name);\r\n }\r\n return true;\r\n }\r\n },\r\n }\r\n);\r\n","const BaseXform = require('../../base-xform');\r\n\r\nclass VmlPositionXform extends BaseXform {\r\n constructor(model) {\r\n super();\r\n this._model = model;\r\n }\r\n\r\n get tag() {\r\n return this._model && this._model.tag;\r\n }\r\n\r\n render(xmlStream, model, type) {\r\n if (model === type[2]) {\r\n xmlStream.leafNode(this.tag);\r\n } else if (this.tag === 'x:SizeWithCells' && model === type[1]) {\r\n xmlStream.leafNode(this.tag);\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = {};\r\n this.model[this.tag] = true;\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = VmlPositionXform;\r\n","const BaseXform = require('../../base-xform');\r\n\r\nclass VmlProtectionXform extends BaseXform {\r\n constructor(model) {\r\n super();\r\n this._model = model;\r\n }\r\n\r\n get tag() {\r\n return this._model && this._model.tag;\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, null, model);\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.text = '';\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n this.text = text;\r\n }\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = VmlProtectionXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\n// render the triangle in the cell for the comment\r\nclass VmlAnchorXform extends BaseXform {\r\n get tag() {\r\n return 'x:Anchor';\r\n }\r\n\r\n getAnchorRect(anchor) {\r\n const l = Math.floor(anchor.left);\r\n const lf = Math.floor((anchor.left - l) * 68);\r\n const t = Math.floor(anchor.top);\r\n const tf = Math.floor((anchor.top - t) * 18);\r\n const r = Math.floor(anchor.right);\r\n const rf = Math.floor((anchor.right - r) * 68);\r\n const b = Math.floor(anchor.bottom);\r\n const bf = Math.floor((anchor.bottom - b) * 18);\r\n return [l, lf, t, tf, r, rf, b, bf];\r\n }\r\n\r\n getDefaultRect(ref) {\r\n const l = ref.col;\r\n const lf = 6;\r\n const t = Math.max(ref.row - 2, 0);\r\n const tf = 14;\r\n const r = l + 2;\r\n const rf = 2;\r\n const b = t + 4;\r\n const bf = 16;\r\n return [l, lf, t, tf, r, rf, b, bf];\r\n }\r\n\r\n render(xmlStream, model) {\r\n const rect = model.anchor\r\n ? this.getAnchorRect(model.anchor)\r\n : this.getDefaultRect(model.refAddress);\r\n\r\n xmlStream.leafNode('x:Anchor', null, rect.join(', '));\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.text = '';\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n this.text = text;\r\n }\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = VmlAnchorXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nconst VmlAnchorXform = require('./vml-anchor-xform');\r\nconst VmlProtectionXform = require('./style/vml-protection-xform');\r\nconst VmlPositionXform = require('./style/vml-position-xform');\r\n\r\nconst POSITION_TYPE = ['twoCells', 'oneCells', 'absolute'];\r\n\r\nclass VmlClientDataXform extends BaseXform {\r\n constructor() {\r\n super();\r\n this.map = {\r\n 'x:Anchor': new VmlAnchorXform(),\r\n 'x:Locked': new VmlProtectionXform({tag: 'x:Locked'}),\r\n 'x:LockText': new VmlProtectionXform({tag: 'x:LockText'}),\r\n 'x:SizeWithCells': new VmlPositionXform({tag: 'x:SizeWithCells'}),\r\n 'x:MoveWithCells': new VmlPositionXform({tag: 'x:MoveWithCells'}),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'x:ClientData';\r\n }\r\n\r\n render(xmlStream, model) {\r\n const {protection, editAs} = model.note;\r\n xmlStream.openNode(this.tag, {ObjectType: 'Note'});\r\n this.map['x:MoveWithCells'].render(xmlStream, editAs, POSITION_TYPE);\r\n this.map['x:SizeWithCells'].render(xmlStream, editAs, POSITION_TYPE);\r\n this.map['x:Anchor'].render(xmlStream, model);\r\n this.map['x:Locked'].render(xmlStream, protection.locked);\r\n xmlStream.leafNode('x:AutoFill', null, 'False');\r\n this.map['x:LockText'].render(xmlStream, protection.lockText);\r\n xmlStream.leafNode('x:Row', null, model.refAddress.row - 1);\r\n xmlStream.leafNode('x:Column', null, model.refAddress.col - 1);\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.reset();\r\n this.model = {\r\n anchor: [],\r\n protection: {},\r\n editAs: '',\r\n };\r\n break;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n break;\r\n }\r\n return true;\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n this.normalizeModel();\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n normalizeModel() {\r\n const position = Object.assign(\r\n {},\r\n this.map['x:MoveWithCells'].model,\r\n this.map['x:SizeWithCells'].model\r\n );\r\n const len = Object.keys(position).length;\r\n this.model.editAs = POSITION_TYPE[len];\r\n this.model.anchor = this.map['x:Anchor'].text;\r\n this.model.protection.locked = this.map['x:Locked'].text;\r\n this.model.protection.lockText = this.map['x:LockText'].text;\r\n }\r\n}\r\n\r\nmodule.exports = VmlClientDataXform;\r\n","const XmlStream = require('../../../utils/xml-stream');\r\n\r\nconst BaseXform = require('../base-xform');\r\nconst VmlShapeXform = require('./vml-shape-xform');\r\n\r\n// This class is (currently) single purposed to insert the triangle\r\n// drawing icons on commented cells\r\nclass VmlNotesXform extends BaseXform {\r\n constructor() {\r\n super();\r\n this.map = {\r\n 'v:shape': new VmlShapeXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'xml';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n xmlStream.openNode(this.tag, VmlNotesXform.DRAWING_ATTRIBUTES);\r\n\r\n xmlStream.openNode('o:shapelayout', {'v:ext': 'edit'});\r\n xmlStream.leafNode('o:idmap', {'v:ext': 'edit', data: 1});\r\n xmlStream.closeNode();\r\n\r\n xmlStream.openNode('v:shapetype', {\r\n id: '_x0000_t202',\r\n coordsize: '21600,21600',\r\n 'o:spt': 202,\r\n path: 'm,l,21600r21600,l21600,xe',\r\n });\r\n xmlStream.leafNode('v:stroke', {joinstyle: 'miter'});\r\n xmlStream.leafNode('v:path', {gradientshapeok: 't', 'o:connecttype': 'rect'});\r\n xmlStream.closeNode();\r\n\r\n model.comments.forEach((item, index) => {\r\n this.map['v:shape'].render(xmlStream, item, index);\r\n });\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case this.tag:\r\n this.reset();\r\n this.model = {\r\n comments: [],\r\n };\r\n break;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n break;\r\n }\r\n return true;\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.model.comments.push(this.parser.model);\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n return false;\r\n default:\r\n // could be some unrecognised tags\r\n return true;\r\n }\r\n }\r\n\r\n reconcile(model, options) {\r\n model.anchors.forEach(anchor => {\r\n if (anchor.br) {\r\n this.map['xdr:twoCellAnchor'].reconcile(anchor, options);\r\n } else {\r\n this.map['xdr:oneCellAnchor'].reconcile(anchor, options);\r\n }\r\n });\r\n }\r\n}\r\n\r\nVmlNotesXform.DRAWING_ATTRIBUTES = {\r\n 'xmlns:v': 'urn:schemas-microsoft-com:vml',\r\n 'xmlns:o': 'urn:schemas-microsoft-com:office:office',\r\n 'xmlns:x': 'urn:schemas-microsoft-com:office:excel',\r\n};\r\n\r\nmodule.exports = VmlNotesXform;\r\n","const BaseXform = require('../base-xform');\r\nconst VmlTextboxXform = require('./vml-textbox-xform');\r\nconst VmlClientDataXform = require('./vml-client-data-xform');\r\n\r\nclass VmlShapeXform extends BaseXform {\r\n constructor() {\r\n super();\r\n this.map = {\r\n 'v:textbox': new VmlTextboxXform(),\r\n 'x:ClientData': new VmlClientDataXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'v:shape';\r\n }\r\n\r\n render(xmlStream, model, index) {\r\n xmlStream.openNode('v:shape', VmlShapeXform.V_SHAPE_ATTRIBUTES(model, index));\r\n\r\n xmlStream.leafNode('v:fill', {color2: 'infoBackground [80]'});\r\n xmlStream.leafNode('v:shadow', {color: 'none [81]', obscured: 't'});\r\n xmlStream.leafNode('v:path', {'o:connecttype': 'none'});\r\n this.map['v:textbox'].render(xmlStream, model);\r\n this.map['x:ClientData'].render(xmlStream, model);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n\r\n switch (node.name) {\r\n case this.tag:\r\n this.reset();\r\n this.model = {\r\n margins: {\r\n insetmode: node.attributes['o:insetmode'],\r\n },\r\n anchor: '',\r\n editAs: '',\r\n protection: {},\r\n };\r\n break;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n break;\r\n }\r\n return true;\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n this.model.margins.inset = this.map['v:textbox'].model && this.map['v:textbox'].model.inset;\r\n this.model.protection =\r\n this.map['x:ClientData'].model && this.map['x:ClientData'].model.protection;\r\n this.model.anchor = this.map['x:ClientData'].model && this.map['x:ClientData'].model.anchor;\r\n this.model.editAs = this.map['x:ClientData'].model && this.map['x:ClientData'].model.editAs;\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nVmlShapeXform.V_SHAPE_ATTRIBUTES = (model, index) => ({\r\n id: `_x0000_s${1025 + index}`,\r\n type: '#_x0000_t202',\r\n style:\r\n 'position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden',\r\n fillcolor: 'infoBackground [80]',\r\n strokecolor: 'none [81]',\r\n 'o:insetmode': model.note.margins && model.note.margins.insetmode,\r\n});\r\n\r\nmodule.exports = VmlShapeXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass VmlTextboxXform extends BaseXform {\r\n get tag() {\r\n return 'v:textbox';\r\n }\r\n\r\n conversionUnit(value, multiple, unit) {\r\n return `${parseFloat(value) * multiple.toFixed(2)}${unit}`;\r\n }\r\n\r\n reverseConversionUnit(inset) {\r\n return (inset || '').split(',').map(margin => {\r\n return Number(parseFloat(this.conversionUnit(parseFloat(margin), 0.1, '')).toFixed(2));\r\n });\r\n }\r\n\r\n render(xmlStream, model) {\r\n const attributes = {\r\n style: 'mso-direction-alt:auto',\r\n };\r\n if (model && model.note) {\r\n let {inset} = model.note && model.note.margins;\r\n if (Array.isArray(inset)) {\r\n inset = inset\r\n .map(margin => {\r\n return this.conversionUnit(margin, 10, 'mm');\r\n })\r\n .join(',');\r\n }\r\n if (inset) {\r\n attributes.inset = inset;\r\n }\r\n }\r\n xmlStream.openNode('v:textbox', attributes);\r\n xmlStream.leafNode('div', {style: 'text-align:left'});\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = {\r\n inset: this.reverseConversionUnit(node.attributes.inset),\r\n };\r\n return true;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n switch (name) {\r\n case this.tag:\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = VmlTextboxXform;\r\n","const BaseXform = require('./base-xform');\r\n\r\n/* 'virtual' methods used as a form of documentation */\r\n/* eslint-disable class-methods-use-this */\r\n\r\n// base class for xforms that are composed of other xforms\r\n// offers some default implementations\r\nclass CompositeXform extends BaseXform {\r\n createNewModel(node) {\r\n return {};\r\n }\r\n\r\n parseOpen(node) {\r\n // Typical pattern for composite xform\r\n this.parser = this.parser || this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n\r\n if (node.name === this.tag) {\r\n this.model = this.createNewModel(node);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n parseText(text) {\r\n // Default implementation. Send text to child parser\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n onParserClose(name, parser) {\r\n // parseClose has seen a child parser close\r\n // now need to incorporate into this.model somehow\r\n this.model[name] = parser.model;\r\n }\r\n\r\n parseClose(name) {\r\n // Default implementation\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.onParserClose(name, this.parser);\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n\r\n return name !== this.tag;\r\n }\r\n}\r\n\r\nmodule.exports = CompositeXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass AppHeadingPairsXform extends BaseXform {\r\n render(xmlStream, model) {\r\n xmlStream.openNode('HeadingPairs');\r\n xmlStream.openNode('vt:vector', {size: 2, baseType: 'variant'});\r\n\r\n xmlStream.openNode('vt:variant');\r\n xmlStream.leafNode('vt:lpstr', undefined, 'Worksheets');\r\n xmlStream.closeNode();\r\n\r\n xmlStream.openNode('vt:variant');\r\n xmlStream.leafNode('vt:i4', undefined, model.length);\r\n xmlStream.closeNode();\r\n\r\n xmlStream.closeNode();\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n // no parsing\r\n return node.name === 'HeadingPairs';\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n return name !== 'HeadingPairs';\r\n }\r\n}\r\n\r\nmodule.exports = AppHeadingPairsXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass AppTitlesOfPartsXform extends BaseXform {\r\n render(xmlStream, model) {\r\n xmlStream.openNode('TitlesOfParts');\r\n xmlStream.openNode('vt:vector', {size: model.length, baseType: 'lpstr'});\r\n\r\n model.forEach(sheet => {\r\n xmlStream.leafNode('vt:lpstr', undefined, sheet.name);\r\n });\r\n\r\n xmlStream.closeNode();\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n // no parsing\r\n return node.name === 'TitlesOfParts';\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n return name !== 'TitlesOfParts';\r\n }\r\n}\r\n\r\nmodule.exports = AppTitlesOfPartsXform;\r\n","const XmlStream = require('../../../utils/xml-stream');\r\nconst BaseXform = require('../base-xform');\r\nconst StringXform = require('../simple/string-xform');\r\n\r\nconst AppHeadingPairsXform = require('./app-heading-pairs-xform');\r\nconst AppTitleOfPartsXform = require('./app-titles-of-parts-xform');\r\n\r\nclass AppXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n Company: new StringXform({tag: 'Company'}),\r\n Manager: new StringXform({tag: 'Manager'}),\r\n HeadingPairs: new AppHeadingPairsXform(),\r\n TitleOfParts: new AppTitleOfPartsXform(),\r\n };\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n\r\n xmlStream.openNode('Properties', AppXform.PROPERTY_ATTRIBUTES);\r\n\r\n xmlStream.leafNode('Application', undefined, 'Microsoft Excel');\r\n xmlStream.leafNode('DocSecurity', undefined, '0');\r\n xmlStream.leafNode('ScaleCrop', undefined, 'false');\r\n\r\n this.map.HeadingPairs.render(xmlStream, model.worksheets);\r\n this.map.TitleOfParts.render(xmlStream, model.worksheets);\r\n this.map.Company.render(xmlStream, model.company || '');\r\n this.map.Manager.render(xmlStream, model.manager);\r\n\r\n xmlStream.leafNode('LinksUpToDate', undefined, 'false');\r\n xmlStream.leafNode('SharedDoc', undefined, 'false');\r\n xmlStream.leafNode('HyperlinksChanged', undefined, 'false');\r\n xmlStream.leafNode('AppVersion', undefined, '16.0300');\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'Properties':\r\n return true;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n\r\n // there's a lot we don't bother to parse\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case 'Properties':\r\n this.model = {\r\n worksheets: this.map.TitleOfParts.model,\r\n company: this.map.Company.model,\r\n manager: this.map.Manager.model,\r\n };\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nAppXform.DateFormat = function(dt) {\r\n return dt.toISOString().replace(/[.]\\d{3,6}/, '');\r\n};\r\n\r\nAppXform.DateAttrs = {'xsi:type': 'dcterms:W3CDTF'};\r\n\r\nAppXform.PROPERTY_ATTRIBUTES = {\r\n xmlns: 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties',\r\n 'xmlns:vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\r\n};\r\n\r\nmodule.exports = AppXform;\r\n","const XmlStream = require('../../../utils/xml-stream');\r\n\r\nconst BaseXform = require('../base-xform');\r\n\r\n// used for rendering the [Content_Types].xml file\r\n// not used for parsing\r\nclass ContentTypesXform extends BaseXform {\r\n render(xmlStream, model) {\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n\r\n xmlStream.openNode('Types', ContentTypesXform.PROPERTY_ATTRIBUTES);\r\n\r\n const mediaHash = {};\r\n (model.media || []).forEach(medium => {\r\n if (medium.type === 'image') {\r\n const imageType = medium.extension;\r\n if (!mediaHash[imageType]) {\r\n mediaHash[imageType] = true;\r\n xmlStream.leafNode('Default', {Extension: imageType, ContentType: `image/${imageType}`});\r\n }\r\n }\r\n });\r\n\r\n xmlStream.leafNode('Default', {\r\n Extension: 'rels',\r\n ContentType: 'application/vnd.openxmlformats-package.relationships+xml',\r\n });\r\n xmlStream.leafNode('Default', {Extension: 'xml', ContentType: 'application/xml'});\r\n\r\n xmlStream.leafNode('Override', {\r\n PartName: '/xl/workbook.xml',\r\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml',\r\n });\r\n\r\n model.worksheets.forEach(worksheet => {\r\n const name = `/xl/worksheets/sheet${worksheet.id}.xml`;\r\n xmlStream.leafNode('Override', {\r\n PartName: name,\r\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml',\r\n });\r\n });\r\n\r\n xmlStream.leafNode('Override', {\r\n PartName: '/xl/theme/theme1.xml',\r\n ContentType: 'application/vnd.openxmlformats-officedocument.theme+xml',\r\n });\r\n xmlStream.leafNode('Override', {\r\n PartName: '/xl/styles.xml',\r\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml',\r\n });\r\n\r\n const hasSharedStrings = model.sharedStrings && model.sharedStrings.count;\r\n if (hasSharedStrings) {\r\n xmlStream.leafNode('Override', {\r\n PartName: '/xl/sharedStrings.xml',\r\n ContentType:\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml',\r\n });\r\n }\r\n\r\n if (model.tables) {\r\n model.tables.forEach(table => {\r\n xmlStream.leafNode('Override', {\r\n PartName: `/xl/tables/${table.target}`,\r\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml',\r\n });\r\n });\r\n }\r\n\r\n if (model.drawings) {\r\n model.drawings.forEach(drawing => {\r\n xmlStream.leafNode('Override', {\r\n PartName: `/xl/drawings/${drawing.name}.xml`,\r\n ContentType: 'application/vnd.openxmlformats-officedocument.drawing+xml',\r\n });\r\n });\r\n }\r\n\r\n if (model.commentRefs) {\r\n xmlStream.leafNode('Default', {\r\n Extension: 'vml',\r\n ContentType: 'application/vnd.openxmlformats-officedocument.vmlDrawing',\r\n });\r\n\r\n model.commentRefs.forEach(({commentName}) => {\r\n xmlStream.leafNode('Override', {\r\n PartName: `/xl/${commentName}.xml`,\r\n ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml',\r\n });\r\n });\r\n }\r\n\r\n xmlStream.leafNode('Override', {\r\n PartName: '/docProps/core.xml',\r\n ContentType: 'application/vnd.openxmlformats-package.core-properties+xml',\r\n });\r\n xmlStream.leafNode('Override', {\r\n PartName: '/docProps/app.xml',\r\n ContentType: 'application/vnd.openxmlformats-officedocument.extended-properties+xml',\r\n });\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen() {\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nContentTypesXform.PROPERTY_ATTRIBUTES = {\r\n xmlns: 'http://schemas.openxmlformats.org/package/2006/content-types',\r\n};\r\n\r\nmodule.exports = ContentTypesXform;\r\n","const XmlStream = require('../../../utils/xml-stream');\r\nconst BaseXform = require('../base-xform');\r\nconst DateXform = require('../simple/date-xform');\r\nconst StringXform = require('../simple/string-xform');\r\nconst IntegerXform = require('../simple/integer-xform');\r\n\r\nclass CoreXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'dc:creator': new StringXform({tag: 'dc:creator'}),\r\n 'dc:title': new StringXform({tag: 'dc:title'}),\r\n 'dc:subject': new StringXform({tag: 'dc:subject'}),\r\n 'dc:description': new StringXform({tag: 'dc:description'}),\r\n 'dc:identifier': new StringXform({tag: 'dc:identifier'}),\r\n 'dc:language': new StringXform({tag: 'dc:language'}),\r\n 'cp:keywords': new StringXform({tag: 'cp:keywords'}),\r\n 'cp:category': new StringXform({tag: 'cp:category'}),\r\n 'cp:lastModifiedBy': new StringXform({tag: 'cp:lastModifiedBy'}),\r\n 'cp:lastPrinted': new DateXform({tag: 'cp:lastPrinted', format: CoreXform.DateFormat}),\r\n 'cp:revision': new IntegerXform({tag: 'cp:revision'}),\r\n 'cp:version': new StringXform({tag: 'cp:version'}),\r\n 'cp:contentStatus': new StringXform({tag: 'cp:contentStatus'}),\r\n 'cp:contentType': new StringXform({tag: 'cp:contentType'}),\r\n 'dcterms:created': new DateXform({\r\n tag: 'dcterms:created',\r\n attrs: CoreXform.DateAttrs,\r\n format: CoreXform.DateFormat,\r\n }),\r\n 'dcterms:modified': new DateXform({\r\n tag: 'dcterms:modified',\r\n attrs: CoreXform.DateAttrs,\r\n format: CoreXform.DateFormat,\r\n }),\r\n };\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n\r\n xmlStream.openNode('cp:coreProperties', CoreXform.CORE_PROPERTY_ATTRIBUTES);\r\n\r\n this.map['dc:creator'].render(xmlStream, model.creator);\r\n this.map['dc:title'].render(xmlStream, model.title);\r\n this.map['dc:subject'].render(xmlStream, model.subject);\r\n this.map['dc:description'].render(xmlStream, model.description);\r\n this.map['dc:identifier'].render(xmlStream, model.identifier);\r\n this.map['dc:language'].render(xmlStream, model.language);\r\n this.map['cp:keywords'].render(xmlStream, model.keywords);\r\n this.map['cp:category'].render(xmlStream, model.category);\r\n this.map['cp:lastModifiedBy'].render(xmlStream, model.lastModifiedBy);\r\n this.map['cp:lastPrinted'].render(xmlStream, model.lastPrinted);\r\n this.map['cp:revision'].render(xmlStream, model.revision);\r\n this.map['cp:version'].render(xmlStream, model.version);\r\n this.map['cp:contentStatus'].render(xmlStream, model.contentStatus);\r\n this.map['cp:contentType'].render(xmlStream, model.contentType);\r\n this.map['dcterms:created'].render(xmlStream, model.created);\r\n this.map['dcterms:modified'].render(xmlStream, model.modified);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'cp:coreProperties':\r\n case 'coreProperties':\r\n return true;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case 'cp:coreProperties':\r\n case 'coreProperties':\r\n this.model = {\r\n creator: this.map['dc:creator'].model,\r\n title: this.map['dc:title'].model,\r\n subject: this.map['dc:subject'].model,\r\n description: this.map['dc:description'].model,\r\n identifier: this.map['dc:identifier'].model,\r\n language: this.map['dc:language'].model,\r\n keywords: this.map['cp:keywords'].model,\r\n category: this.map['cp:category'].model,\r\n lastModifiedBy: this.map['cp:lastModifiedBy'].model,\r\n lastPrinted: this.map['cp:lastPrinted'].model,\r\n revision: this.map['cp:revision'].model,\r\n contentStatus: this.map['cp:contentStatus'].model,\r\n contentType: this.map['cp:contentType'].model,\r\n created: this.map['dcterms:created'].model,\r\n modified: this.map['dcterms:modified'].model,\r\n };\r\n return false;\r\n default:\r\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\r\n }\r\n }\r\n}\r\n\r\nCoreXform.DateFormat = function(dt) {\r\n return dt.toISOString().replace(/[.]\\d{3}/, '');\r\n};\r\nCoreXform.DateAttrs = {'xsi:type': 'dcterms:W3CDTF'};\r\n\r\nCoreXform.CORE_PROPERTY_ATTRIBUTES = {\r\n 'xmlns:cp': 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\r\n 'xmlns:dc': 'http://purl.org/dc/elements/1.1/',\r\n 'xmlns:dcterms': 'http://purl.org/dc/terms/',\r\n 'xmlns:dcmitype': 'http://purl.org/dc/dcmitype/',\r\n 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',\r\n};\r\n\r\nmodule.exports = CoreXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass RelationshipXform extends BaseXform {\r\n render(xmlStream, model) {\r\n xmlStream.leafNode('Relationship', model);\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case 'Relationship':\r\n this.model = node.attributes;\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = RelationshipXform;\r\n","const XmlStream = require('../../../utils/xml-stream');\r\nconst BaseXform = require('../base-xform');\r\n\r\nconst RelationshipXform = require('./relationship-xform');\r\n\r\nclass RelationshipsXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n Relationship: new RelationshipXform(),\r\n };\r\n }\r\n\r\n render(xmlStream, model) {\r\n model = model || this._values;\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n xmlStream.openNode('Relationships', RelationshipsXform.RELATIONSHIPS_ATTRIBUTES);\r\n\r\n model.forEach(relationship => {\r\n this.map.Relationship.render(xmlStream, relationship);\r\n });\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'Relationships':\r\n this.model = [];\r\n return true;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.model.push(this.parser.model);\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case 'Relationships':\r\n return false;\r\n default:\r\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\r\n }\r\n }\r\n}\r\n\r\nRelationshipsXform.RELATIONSHIPS_ATTRIBUTES = {\r\n xmlns: 'http://schemas.openxmlformats.org/package/2006/relationships',\r\n};\r\n\r\nmodule.exports = RelationshipsXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass BaseCellAnchorXform extends BaseXform {\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case this.tag:\r\n this.reset();\r\n this.model = {\r\n range: {\r\n editAs: node.attributes.editAs || 'oneCell',\r\n },\r\n };\r\n break;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n break;\r\n }\r\n return true;\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n reconcilePicture(model, options) {\r\n if (model && model.rId) {\r\n const rel = options.rels[model.rId];\r\n const match = rel.Target.match(/.*\\/media\\/(.+[.][a-zA-Z]{3,4})/);\r\n if (match) {\r\n const name = match[1];\r\n const mediaId = options.mediaIndex[name];\r\n return options.media[mediaId];\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\nmodule.exports = BaseCellAnchorXform;\r\n","const BaseXform = require('../base-xform');\r\nconst BlipXform = require('./blip-xform');\r\n\r\nclass BlipFillXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'a:blip': new BlipXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'xdr:blipFill';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag);\r\n\r\n this.map['a:blip'].render(xmlStream, model);\r\n\r\n // TODO: options for this + parsing\r\n xmlStream.openNode('a:stretch');\r\n xmlStream.leafNode('a:fillRect');\r\n xmlStream.closeNode();\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n\r\n switch (node.name) {\r\n case this.tag:\r\n this.reset();\r\n break;\r\n\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n break;\r\n }\r\n return true;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n this.model = this.map['a:blip'].model;\r\n return false;\r\n\r\n default:\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = BlipFillXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass BlipXform extends BaseXform {\r\n get tag() {\r\n return 'a:blip';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, {\r\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\r\n 'r:embed': model.rId,\r\n cstate: 'print',\r\n });\r\n // TODO: handle children (e.g. a:extLst=>a:ext=>a14:useLocalDpi\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = {\r\n rId: node.attributes['r:embed'],\r\n };\r\n return true;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n switch (name) {\r\n case this.tag:\r\n return false;\r\n default:\r\n // unprocessed internal nodes\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = BlipXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass CNvPicPrXform extends BaseXform {\r\n get tag() {\r\n return 'xdr:cNvPicPr';\r\n }\r\n\r\n render(xmlStream) {\r\n xmlStream.openNode(this.tag);\r\n xmlStream.leafNode('a:picLocks', {\r\n noChangeAspect: '1',\r\n });\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n return true;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n switch (name) {\r\n case this.tag:\r\n return false;\r\n default:\r\n // unprocessed internal nodes\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = CNvPicPrXform;\r\n","const BaseXform = require('../base-xform');\r\nconst HlickClickXform = require('./hlink-click-xform');\r\nconst ExtLstXform = require('./ext-lst-xform');\r\n\r\nclass CNvPrXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'a:hlinkClick': new HlickClickXform(),\r\n 'a:extLst': new ExtLstXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'xdr:cNvPr';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n id: model.index,\r\n name: `Picture ${model.index}`,\r\n });\r\n this.map['a:hlinkClick'].render(xmlStream, model);\r\n this.map['a:extLst'].render(xmlStream, model);\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n\r\n switch (node.name) {\r\n case this.tag:\r\n this.reset();\r\n break;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n break;\r\n }\r\n return true;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n this.model = this.map['a:hlinkClick'].model;\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = CNvPrXform;\r\n","const BaseXform = require('../base-xform');\r\nconst IntegerXform = require('../simple/integer-xform');\r\n\r\nclass CellPositionXform extends BaseXform {\r\n constructor(options) {\r\n super();\r\n\r\n this.tag = options.tag;\r\n this.map = {\r\n 'xdr:col': new IntegerXform({tag: 'xdr:col', zero: true}),\r\n 'xdr:colOff': new IntegerXform({tag: 'xdr:colOff', zero: true}),\r\n 'xdr:row': new IntegerXform({tag: 'xdr:row', zero: true}),\r\n 'xdr:rowOff': new IntegerXform({tag: 'xdr:rowOff', zero: true}),\r\n };\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag);\r\n\r\n this.map['xdr:col'].render(xmlStream, model.nativeCol);\r\n this.map['xdr:colOff'].render(xmlStream, model.nativeColOff);\r\n\r\n this.map['xdr:row'].render(xmlStream, model.nativeRow);\r\n this.map['xdr:rowOff'].render(xmlStream, model.nativeRowOff);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case this.tag:\r\n this.reset();\r\n break;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n break;\r\n }\r\n return true;\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n this.model = {\r\n nativeCol: this.map['xdr:col'].model,\r\n nativeColOff: this.map['xdr:colOff'].model,\r\n nativeRow: this.map['xdr:row'].model,\r\n nativeRowOff: this.map['xdr:rowOff'].model,\r\n };\r\n return false;\r\n default:\r\n // not quite sure how we get here!\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = CellPositionXform;\r\n","const colCache = require('../../../utils/col-cache');\r\nconst XmlStream = require('../../../utils/xml-stream');\r\n\r\nconst BaseXform = require('../base-xform');\r\nconst TwoCellAnchorXform = require('./two-cell-anchor-xform');\r\nconst OneCellAnchorXform = require('./one-cell-anchor-xform');\r\n\r\nfunction getAnchorType(model) {\r\n const range = typeof model.range === 'string' ? colCache.decode(model.range) : model.range;\r\n\r\n return range.br ? 'xdr:twoCellAnchor' : 'xdr:oneCellAnchor';\r\n}\r\n\r\nclass DrawingXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'xdr:twoCellAnchor': new TwoCellAnchorXform(),\r\n 'xdr:oneCellAnchor': new OneCellAnchorXform(),\r\n };\r\n }\r\n\r\n prepare(model) {\r\n model.anchors.forEach((item, index) => {\r\n item.anchorType = getAnchorType(item);\r\n const anchor = this.map[item.anchorType];\r\n anchor.prepare(item, {index});\r\n });\r\n }\r\n\r\n get tag() {\r\n return 'xdr:wsDr';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n xmlStream.openNode(this.tag, DrawingXform.DRAWING_ATTRIBUTES);\r\n\r\n model.anchors.forEach(item => {\r\n const anchor = this.map[item.anchorType];\r\n anchor.render(xmlStream, item);\r\n });\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case this.tag:\r\n this.reset();\r\n this.model = {\r\n anchors: [],\r\n };\r\n break;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n break;\r\n }\r\n return true;\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.model.anchors.push(this.parser.model);\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n return false;\r\n default:\r\n // could be some unrecognised tags\r\n return true;\r\n }\r\n }\r\n\r\n reconcile(model, options) {\r\n model.anchors.forEach(anchor => {\r\n if (anchor.br) {\r\n this.map['xdr:twoCellAnchor'].reconcile(anchor, options);\r\n } else {\r\n this.map['xdr:oneCellAnchor'].reconcile(anchor, options);\r\n }\r\n });\r\n }\r\n}\r\n\r\nDrawingXform.DRAWING_ATTRIBUTES = {\r\n 'xmlns:xdr': 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing',\r\n 'xmlns:a': 'http://schemas.openxmlformats.org/drawingml/2006/main',\r\n};\r\n\r\nmodule.exports = DrawingXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass ExtLstXform extends BaseXform {\r\n get tag() {\r\n return 'a:extLst';\r\n }\r\n\r\n render(xmlStream) {\r\n xmlStream.openNode(this.tag);\r\n xmlStream.openNode('a:ext', {\r\n uri: '{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}',\r\n });\r\n xmlStream.leafNode('a16:creationId', {\r\n 'xmlns:a16': 'http://schemas.microsoft.com/office/drawing/2014/main',\r\n id: '{00000000-0008-0000-0000-000002000000}',\r\n });\r\n xmlStream.closeNode();\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n return true;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n switch (name) {\r\n case this.tag:\r\n return false;\r\n default:\r\n // unprocessed internal nodes\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = ExtLstXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\n/** https://en.wikipedia.org/wiki/Office_Open_XML_file_formats#DrawingML */\r\nconst EMU_PER_PIXEL_AT_96_DPI = 9525;\r\n\r\nclass ExtXform extends BaseXform {\r\n constructor(options) {\r\n super();\r\n\r\n this.tag = options.tag;\r\n this.map = {};\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag);\r\n\r\n const width = Math.floor(model.width * EMU_PER_PIXEL_AT_96_DPI);\r\n const height = Math.floor(model.height * EMU_PER_PIXEL_AT_96_DPI);\r\n\r\n xmlStream.addAttribute('cx', width);\r\n xmlStream.addAttribute('cy', height);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === this.tag) {\r\n this.model = {\r\n width: parseInt(node.attributes.cx || '0', 10) / EMU_PER_PIXEL_AT_96_DPI,\r\n height: parseInt(node.attributes.cy || '0', 10) / EMU_PER_PIXEL_AT_96_DPI,\r\n };\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText(/* text */) {}\r\n\r\n parseClose(/* name */) {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = ExtXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass HLinkClickXform extends BaseXform {\r\n get tag() {\r\n return 'a:hlinkClick';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (!(model.hyperlinks && model.hyperlinks.rId)) {\r\n return;\r\n }\r\n xmlStream.leafNode(this.tag, {\r\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\r\n 'r:id': model.hyperlinks.rId,\r\n tooltip: model.hyperlinks.tooltip,\r\n });\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = {\r\n hyperlinks: {\r\n rId: node.attributes['r:id'],\r\n tooltip: node.attributes.tooltip,\r\n },\r\n };\r\n return true;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = HLinkClickXform;\r\n","const BaseXform = require('../base-xform');\r\nconst CNvPrXform = require('./c-nv-pr-xform');\r\nconst CNvPicPrXform = require('./c-nv-pic-pr-xform');\r\n\r\nclass NvPicPrXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'xdr:cNvPr': new CNvPrXform(),\r\n 'xdr:cNvPicPr': new CNvPicPrXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'xdr:nvPicPr';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag);\r\n this.map['xdr:cNvPr'].render(xmlStream, model);\r\n this.map['xdr:cNvPicPr'].render(xmlStream, model);\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n\r\n switch (node.name) {\r\n case this.tag:\r\n this.reset();\r\n break;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n break;\r\n }\r\n return true;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n this.model = this.map['xdr:cNvPr'].model;\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = NvPicPrXform;\r\n","const BaseCellAnchorXform = require('./base-cell-anchor-xform');\r\nconst StaticXform = require('../static-xform');\r\n\r\nconst CellPositionXform = require('./cell-position-xform');\r\nconst ExtXform = require('./ext-xform');\r\nconst PicXform = require('./pic-xform');\r\n\r\nclass OneCellAnchorXform extends BaseCellAnchorXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'xdr:from': new CellPositionXform({tag: 'xdr:from'}),\r\n 'xdr:ext': new ExtXform({tag: 'xdr:ext'}),\r\n 'xdr:pic': new PicXform(),\r\n 'xdr:clientData': new StaticXform({tag: 'xdr:clientData'}),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'xdr:oneCellAnchor';\r\n }\r\n\r\n prepare(model, options) {\r\n this.map['xdr:pic'].prepare(model.picture, options);\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {editAs: model.range.editAs || 'oneCell'});\r\n\r\n this.map['xdr:from'].render(xmlStream, model.range.tl);\r\n this.map['xdr:ext'].render(xmlStream, model.range.ext);\r\n this.map['xdr:pic'].render(xmlStream, model.picture);\r\n this.map['xdr:clientData'].render(xmlStream, {});\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n this.model.range.tl = this.map['xdr:from'].model;\r\n this.model.range.ext = this.map['xdr:ext'].model;\r\n this.model.picture = this.map['xdr:pic'].model;\r\n return false;\r\n default:\r\n // could be some unrecognised tags\r\n return true;\r\n }\r\n }\r\n\r\n reconcile(model, options) {\r\n model.medium = this.reconcilePicture(model.picture, options);\r\n }\r\n}\r\n\r\nmodule.exports = OneCellAnchorXform;\r\n","const BaseXform = require('../base-xform');\r\nconst StaticXform = require('../static-xform');\r\n\r\nconst BlipFillXform = require('./blip-fill-xform');\r\nconst NvPicPrXform = require('./nv-pic-pr-xform');\r\n\r\nconst spPrJSON = require('./sp-pr');\r\n\r\nclass PicXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'xdr:nvPicPr': new NvPicPrXform(),\r\n 'xdr:blipFill': new BlipFillXform(),\r\n 'xdr:spPr': new StaticXform(spPrJSON),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'xdr:pic';\r\n }\r\n\r\n prepare(model, options) {\r\n model.index = options.index + 1;\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag);\r\n\r\n this.map['xdr:nvPicPr'].render(xmlStream, model);\r\n this.map['xdr:blipFill'].render(xmlStream, model);\r\n this.map['xdr:spPr'].render(xmlStream, model);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case this.tag:\r\n this.reset();\r\n break;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n break;\r\n }\r\n return true;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.mergeModel(this.parser.model);\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n return false;\r\n default:\r\n // not quite sure how we get here!\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = PicXform;\r\n","module.exports = {\r\n tag: 'xdr:spPr',\r\n c: [\r\n {\r\n tag: 'a:xfrm',\r\n c: [\r\n {tag: 'a:off', $: {x: '0', y: '0'}},\r\n {tag: 'a:ext', $: {cx: '0', cy: '0'}},\r\n ],\r\n },\r\n {\r\n tag: 'a:prstGeom',\r\n $: {prst: 'rect'},\r\n c: [{tag: 'a:avLst'}],\r\n },\r\n ],\r\n};\r\n","const BaseCellAnchorXform = require('./base-cell-anchor-xform');\r\nconst StaticXform = require('../static-xform');\r\n\r\nconst CellPositionXform = require('./cell-position-xform');\r\nconst PicXform = require('./pic-xform');\r\n\r\nclass TwoCellAnchorXform extends BaseCellAnchorXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'xdr:from': new CellPositionXform({tag: 'xdr:from'}),\r\n 'xdr:to': new CellPositionXform({tag: 'xdr:to'}),\r\n 'xdr:pic': new PicXform(),\r\n 'xdr:clientData': new StaticXform({tag: 'xdr:clientData'}),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'xdr:twoCellAnchor';\r\n }\r\n\r\n prepare(model, options) {\r\n this.map['xdr:pic'].prepare(model.picture, options);\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {editAs: model.range.editAs || 'oneCell'});\r\n\r\n this.map['xdr:from'].render(xmlStream, model.range.tl);\r\n this.map['xdr:to'].render(xmlStream, model.range.br);\r\n this.map['xdr:pic'].render(xmlStream, model.picture);\r\n this.map['xdr:clientData'].render(xmlStream, {});\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n this.model.range.tl = this.map['xdr:from'].model;\r\n this.model.range.br = this.map['xdr:to'].model;\r\n this.model.picture = this.map['xdr:pic'].model;\r\n return false;\r\n default:\r\n // could be some unrecognised tags\r\n return true;\r\n }\r\n }\r\n\r\n reconcile(model, options) {\r\n model.medium = this.reconcilePicture(model.picture, options);\r\n }\r\n}\r\n\r\nmodule.exports = TwoCellAnchorXform;\r\n","const BaseXform = require('./base-xform');\r\n\r\nclass ListXform extends BaseXform {\r\n constructor(options) {\r\n super();\r\n\r\n this.tag = options.tag;\r\n this.always = !!options.always;\r\n this.count = options.count;\r\n this.empty = options.empty;\r\n this.$count = options.$count || 'count';\r\n this.$ = options.$;\r\n this.childXform = options.childXform;\r\n this.maxItems = options.maxItems;\r\n }\r\n\r\n prepare(model, options) {\r\n const {childXform} = this;\r\n if (model) {\r\n model.forEach((childModel, index) => {\r\n options.index = index;\r\n childXform.prepare(childModel, options);\r\n });\r\n }\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (this.always || (model && model.length)) {\r\n xmlStream.openNode(this.tag, this.$);\r\n if (this.count) {\r\n xmlStream.addAttribute(this.$count, (model && model.length) || 0);\r\n }\r\n\r\n const {childXform} = this;\r\n (model || []).forEach((childModel, index) => {\r\n childXform.render(xmlStream, childModel, index);\r\n });\r\n\r\n xmlStream.closeNode();\r\n } else if (this.empty) {\r\n xmlStream.leafNode(this.tag);\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = [];\r\n return true;\r\n default:\r\n if (this.childXform.parseOpen(node)) {\r\n this.parser = this.childXform;\r\n return true;\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.model.push(this.parser.model);\r\n this.parser = undefined;\r\n\r\n if (this.maxItems && this.model.length > this.maxItems) {\r\n throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n reconcile(model, options) {\r\n if (model) {\r\n const {childXform} = this;\r\n model.forEach(childModel => {\r\n childXform.reconcile(childModel, options);\r\n });\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = ListXform;\r\n","const colCache = require('../../../utils/col-cache');\r\nconst BaseXform = require('../base-xform');\r\n\r\nclass AutoFilterXform extends BaseXform {\r\n get tag() {\r\n return 'autoFilter';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n if (typeof model === 'string') {\r\n // assume range\r\n xmlStream.leafNode('autoFilter', {ref: model});\r\n } else {\r\n const getAddress = function(addr) {\r\n if (typeof addr === 'string') {\r\n return addr;\r\n }\r\n return colCache.getAddress(addr.row, addr.column).address;\r\n };\r\n\r\n const firstAddress = getAddress(model.from);\r\n const secondAddress = getAddress(model.to);\r\n if (firstAddress && secondAddress) {\r\n xmlStream.leafNode('autoFilter', {ref: `${firstAddress}:${secondAddress}`});\r\n }\r\n }\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === 'autoFilter') {\r\n this.model = node.attributes.ref;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = AutoFilterXform;\r\n","const utils = require('../../../utils/utils');\r\nconst BaseXform = require('../base-xform');\r\nconst Range = require('../../../doc/range');\r\nconst Enums = require('../../../doc/enums');\r\n\r\nconst RichTextXform = require('../strings/rich-text-xform');\r\n\r\nfunction getValueType(v) {\r\n if (v === null || v === undefined) {\r\n return Enums.ValueType.Null;\r\n }\r\n if (v instanceof String || typeof v === 'string') {\r\n return Enums.ValueType.String;\r\n }\r\n if (typeof v === 'number') {\r\n return Enums.ValueType.Number;\r\n }\r\n if (typeof v === 'boolean') {\r\n return Enums.ValueType.Boolean;\r\n }\r\n if (v instanceof Date) {\r\n return Enums.ValueType.Date;\r\n }\r\n if (v.text && v.hyperlink) {\r\n return Enums.ValueType.Hyperlink;\r\n }\r\n if (v.formula) {\r\n return Enums.ValueType.Formula;\r\n }\r\n if (v.error) {\r\n return Enums.ValueType.Error;\r\n }\r\n throw new Error('I could not understand type of value');\r\n}\r\n\r\nfunction getEffectiveCellType(cell) {\r\n switch (cell.type) {\r\n case Enums.ValueType.Formula:\r\n return getValueType(cell.result);\r\n default:\r\n return cell.type;\r\n }\r\n}\r\n\r\nclass CellXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.richTextXForm = new RichTextXform();\r\n }\r\n\r\n get tag() {\r\n return 'c';\r\n }\r\n\r\n prepare(model, options) {\r\n const styleId = options.styles.addStyleModel(model.style || {}, getEffectiveCellType(model));\r\n if (styleId) {\r\n model.styleId = styleId;\r\n }\r\n\r\n if (model.comment) {\r\n options.comments.push({...model.comment, ref: model.address});\r\n }\r\n\r\n switch (model.type) {\r\n case Enums.ValueType.String:\r\n case Enums.ValueType.RichText:\r\n if (options.sharedStrings) {\r\n model.ssId = options.sharedStrings.add(model.value);\r\n }\r\n break;\r\n\r\n case Enums.ValueType.Date:\r\n if (options.date1904) {\r\n model.date1904 = true;\r\n }\r\n break;\r\n\r\n case Enums.ValueType.Hyperlink:\r\n if (options.sharedStrings && model.text !== undefined && model.text !== null) {\r\n model.ssId = options.sharedStrings.add(model.text);\r\n }\r\n options.hyperlinks.push({\r\n address: model.address,\r\n target: model.hyperlink,\r\n tooltip: model.tooltip,\r\n });\r\n break;\r\n\r\n case Enums.ValueType.Merge:\r\n options.merges.add(model);\r\n break;\r\n\r\n case Enums.ValueType.Formula:\r\n if (options.date1904) {\r\n // in case valueType is date\r\n model.date1904 = true;\r\n }\r\n\r\n if (model.shareType === 'shared') {\r\n model.si = options.siFormulae++;\r\n }\r\n\r\n if (model.formula) {\r\n options.formulae[model.address] = model;\r\n } else if (model.sharedFormula) {\r\n const master = options.formulae[model.sharedFormula];\r\n if (!master) {\r\n throw new Error(\r\n `Shared Formula master must exist above and or left of clone for cell ${model.address}`\r\n );\r\n }\r\n if (master.si === undefined) {\r\n master.shareType = 'shared';\r\n master.si = options.siFormulae++;\r\n master.range = new Range(master.address, model.address);\r\n } else if (master.range) {\r\n master.range.expandToAddress(model.address);\r\n }\r\n model.si = master.si;\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n renderFormula(xmlStream, model) {\r\n let attrs = null;\r\n switch (model.shareType) {\r\n case 'shared':\r\n attrs = {\r\n t: 'shared',\r\n ref: model.ref || model.range.range,\r\n si: model.si,\r\n };\r\n break;\r\n\r\n case 'array':\r\n attrs = {\r\n t: 'array',\r\n ref: model.ref,\r\n };\r\n break;\r\n\r\n default:\r\n if (model.si !== undefined) {\r\n attrs = {\r\n t: 'shared',\r\n si: model.si,\r\n };\r\n }\r\n break;\r\n }\r\n\r\n switch (getValueType(model.result)) {\r\n case Enums.ValueType.Null: // ?\r\n xmlStream.leafNode('f', attrs, model.formula);\r\n break;\r\n\r\n case Enums.ValueType.String:\r\n // oddly, formula results don't ever use shared strings\r\n xmlStream.addAttribute('t', 'str');\r\n xmlStream.leafNode('f', attrs, model.formula);\r\n xmlStream.leafNode('v', null, model.result);\r\n break;\r\n\r\n case Enums.ValueType.Number:\r\n xmlStream.leafNode('f', attrs, model.formula);\r\n xmlStream.leafNode('v', null, model.result);\r\n break;\r\n\r\n case Enums.ValueType.Boolean:\r\n xmlStream.addAttribute('t', 'b');\r\n xmlStream.leafNode('f', attrs, model.formula);\r\n xmlStream.leafNode('v', null, model.result ? 1 : 0);\r\n break;\r\n\r\n case Enums.ValueType.Error:\r\n xmlStream.addAttribute('t', 'e');\r\n xmlStream.leafNode('f', attrs, model.formula);\r\n xmlStream.leafNode('v', null, model.result.error);\r\n break;\r\n\r\n case Enums.ValueType.Date:\r\n xmlStream.leafNode('f', attrs, model.formula);\r\n xmlStream.leafNode('v', null, utils.dateToExcel(model.result, model.date1904));\r\n break;\r\n\r\n // case Enums.ValueType.Hyperlink: // ??\r\n // case Enums.ValueType.Formula:\r\n default:\r\n throw new Error('I could not understand type of value');\r\n }\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model.type === Enums.ValueType.Null && !model.styleId) {\r\n // if null and no style, exit\r\n return;\r\n }\r\n\r\n xmlStream.openNode('c');\r\n xmlStream.addAttribute('r', model.address);\r\n\r\n if (model.styleId) {\r\n xmlStream.addAttribute('s', model.styleId);\r\n }\r\n\r\n switch (model.type) {\r\n case Enums.ValueType.Null:\r\n break;\r\n\r\n case Enums.ValueType.Number:\r\n xmlStream.leafNode('v', null, model.value);\r\n break;\r\n\r\n case Enums.ValueType.Boolean:\r\n xmlStream.addAttribute('t', 'b');\r\n xmlStream.leafNode('v', null, model.value ? '1' : '0');\r\n break;\r\n\r\n case Enums.ValueType.Error:\r\n xmlStream.addAttribute('t', 'e');\r\n xmlStream.leafNode('v', null, model.value.error);\r\n break;\r\n\r\n case Enums.ValueType.String:\r\n case Enums.ValueType.RichText:\r\n if (model.ssId !== undefined) {\r\n xmlStream.addAttribute('t', 's');\r\n xmlStream.leafNode('v', null, model.ssId);\r\n } else if (model.value && model.value.richText) {\r\n xmlStream.addAttribute('t', 'inlineStr');\r\n xmlStream.openNode('is');\r\n model.value.richText.forEach(text => {\r\n this.richTextXForm.render(xmlStream, text);\r\n });\r\n xmlStream.closeNode('is');\r\n } else {\r\n xmlStream.addAttribute('t', 'str');\r\n xmlStream.leafNode('v', null, model.value);\r\n }\r\n break;\r\n\r\n case Enums.ValueType.Date:\r\n xmlStream.leafNode('v', null, utils.dateToExcel(model.value, model.date1904));\r\n break;\r\n\r\n case Enums.ValueType.Hyperlink:\r\n if (model.ssId !== undefined) {\r\n xmlStream.addAttribute('t', 's');\r\n xmlStream.leafNode('v', null, model.ssId);\r\n } else {\r\n xmlStream.addAttribute('t', 'str');\r\n xmlStream.leafNode('v', null, model.text);\r\n }\r\n break;\r\n\r\n case Enums.ValueType.Formula:\r\n this.renderFormula(xmlStream, model);\r\n break;\r\n\r\n case Enums.ValueType.Merge:\r\n // nothing to add\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n xmlStream.closeNode(); // \r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'c':\r\n // const address = colCache.decodeAddress(node.attributes.r);\r\n this.model = {\r\n address: node.attributes.r,\r\n };\r\n this.t = node.attributes.t;\r\n if (node.attributes.s) {\r\n this.model.styleId = parseInt(node.attributes.s, 10);\r\n }\r\n return true;\r\n\r\n case 'f':\r\n this.currentNode = 'f';\r\n this.model.si = node.attributes.si;\r\n this.model.shareType = node.attributes.t;\r\n this.model.ref = node.attributes.ref;\r\n return true;\r\n\r\n case 'v':\r\n this.currentNode = 'v';\r\n return true;\r\n\r\n case 't':\r\n this.currentNode = 't';\r\n return true;\r\n\r\n case 'r':\r\n this.parser = this.richTextXForm;\r\n this.parser.parseOpen(node);\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n return;\r\n }\r\n switch (this.currentNode) {\r\n case 'f':\r\n this.model.formula = this.model.formula ? this.model.formula + text : text;\r\n break;\r\n case 'v':\r\n case 't':\r\n if (this.model.value && this.model.value.richText) {\r\n this.model.value.richText.text = this.model.value.richText.text\r\n ? this.model.value.richText.text + text\r\n : text;\r\n } else {\r\n this.model.value = this.model.value ? this.model.value + text : text;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n switch (name) {\r\n case 'c': {\r\n const {model} = this;\r\n\r\n // first guess on cell type\r\n if (model.formula || model.shareType) {\r\n model.type = Enums.ValueType.Formula;\r\n if (model.value) {\r\n if (this.t === 'str') {\r\n model.result = utils.xmlDecode(model.value);\r\n } else if (this.t === 'b') {\r\n model.result = parseInt(model.value, 10) !== 0;\r\n } else if (this.t === 'e') {\r\n model.result = {error: model.value};\r\n } else {\r\n model.result = parseFloat(model.value);\r\n }\r\n model.value = undefined;\r\n }\r\n } else if (model.value !== undefined) {\r\n switch (this.t) {\r\n case 's':\r\n model.type = Enums.ValueType.String;\r\n model.value = parseInt(model.value, 10);\r\n break;\r\n case 'str':\r\n model.type = Enums.ValueType.String;\r\n model.value = utils.xmlDecode(model.value);\r\n break;\r\n case 'inlineStr':\r\n model.type = Enums.ValueType.String;\r\n break;\r\n case 'b':\r\n model.type = Enums.ValueType.Boolean;\r\n model.value = parseInt(model.value, 10) !== 0;\r\n break;\r\n case 'e':\r\n model.type = Enums.ValueType.Error;\r\n model.value = {error: model.value};\r\n break;\r\n default:\r\n model.type = Enums.ValueType.Number;\r\n model.value = parseFloat(model.value);\r\n break;\r\n }\r\n } else if (model.styleId) {\r\n model.type = Enums.ValueType.Null;\r\n } else {\r\n model.type = Enums.ValueType.Merge;\r\n }\r\n return false;\r\n }\r\n\r\n case 'f':\r\n case 'v':\r\n case 'is':\r\n this.currentNode = undefined;\r\n return true;\r\n\r\n case 't':\r\n if (this.parser) {\r\n this.parser.parseClose(name);\r\n return true;\r\n }\r\n this.currentNode = undefined;\r\n return true;\r\n\r\n case 'r':\r\n this.model.value = this.model.value || {};\r\n this.model.value.richText = this.model.value.richText || [];\r\n this.model.value.richText.push(this.parser.model);\r\n this.parser = undefined;\r\n this.currentNode = undefined;\r\n return true;\r\n\r\n default:\r\n if (this.parser) {\r\n this.parser.parseClose(name);\r\n return true;\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n reconcile(model, options) {\r\n const style = model.styleId && options.styles && options.styles.getStyleModel(model.styleId);\r\n if (style) {\r\n model.style = style;\r\n }\r\n if (model.styleId !== undefined) {\r\n model.styleId = undefined;\r\n }\r\n\r\n switch (model.type) {\r\n case Enums.ValueType.String:\r\n if (typeof model.value === 'number') {\r\n if (options.sharedStrings) {\r\n model.value = options.sharedStrings.getString(model.value);\r\n }\r\n }\r\n if (model.value.richText) {\r\n model.type = Enums.ValueType.RichText;\r\n }\r\n break;\r\n\r\n case Enums.ValueType.Number:\r\n if (style && utils.isDateFmt(style.numFmt)) {\r\n model.type = Enums.ValueType.Date;\r\n model.value = utils.excelToDate(model.value, options.date1904);\r\n }\r\n break;\r\n\r\n case Enums.ValueType.Formula:\r\n if (model.result !== undefined && style && utils.isDateFmt(style.numFmt)) {\r\n model.result = utils.excelToDate(model.result, options.date1904);\r\n }\r\n if (model.shareType === 'shared') {\r\n if (model.ref) {\r\n // master\r\n options.formulae[model.si] = model.address;\r\n } else {\r\n // slave\r\n model.sharedFormula = options.formulae[model.si];\r\n delete model.shareType;\r\n }\r\n delete model.si;\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n // look for hyperlink\r\n const hyperlink = options.hyperlinkMap[model.address];\r\n if (hyperlink) {\r\n if (model.type === Enums.ValueType.Formula) {\r\n model.text = model.result;\r\n model.result = undefined;\r\n } else {\r\n model.text = model.value;\r\n model.value = undefined;\r\n }\r\n model.type = Enums.ValueType.Hyperlink;\r\n model.hyperlink = hyperlink;\r\n }\r\n\r\n const comment = options.commentsMap && options.commentsMap[model.address];\r\n if (comment) {\r\n model.comment = comment;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = CellXform;\r\n","const BaseXform = require('../../base-xform');\r\n\r\nclass CfIconExtXform extends BaseXform {\r\n get tag() {\r\n return 'x14:cfIcon';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, {\r\n iconSet: model.iconSet,\r\n iconId: model.iconId,\r\n });\r\n }\r\n\r\n parseOpen({attributes}) {\r\n this.model = {\r\n iconSet: attributes.iconSet,\r\n iconId: BaseXform.toIntValue(attributes.iconId),\r\n };\r\n }\r\n\r\n parseClose(name) {\r\n return name !== this.tag;\r\n }\r\n}\r\n\r\nmodule.exports = CfIconExtXform;\r\n","const {v4: uuidv4} = require('uuid');\r\nconst BaseXform = require('../../base-xform');\r\nconst CompositeXform = require('../../composite-xform');\r\n\r\nconst DatabarExtXform = require('./databar-ext-xform');\r\nconst IconSetExtXform = require('./icon-set-ext-xform');\r\n\r\nconst extIcons = {\r\n '3Triangles': true,\r\n '3Stars': true,\r\n '5Boxes': true,\r\n};\r\n\r\nclass CfRuleExtXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'x14:dataBar': (this.databarXform = new DatabarExtXform()),\r\n 'x14:iconSet': (this.iconSetXform = new IconSetExtXform()),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'x14:cfRule';\r\n }\r\n\r\n static isExt(rule) {\r\n // is this rule primitive?\r\n if (rule.type === 'dataBar') {\r\n return DatabarExtXform.isExt(rule);\r\n }\r\n if (rule.type === 'iconSet') {\r\n if (rule.custom || extIcons[rule.iconSet]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n prepare(model) {\r\n if (CfRuleExtXform.isExt(model)) {\r\n model.x14Id = `{${uuidv4()}}`.toUpperCase();\r\n }\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (!CfRuleExtXform.isExt(model)) {\r\n return;\r\n }\r\n\r\n switch (model.type) {\r\n case 'dataBar':\r\n this.renderDataBar(xmlStream, model);\r\n break;\r\n case 'iconSet':\r\n this.renderIconSet(xmlStream, model);\r\n break;\r\n }\r\n }\r\n\r\n renderDataBar(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n type: 'dataBar',\r\n id: model.x14Id,\r\n });\r\n\r\n this.databarXform.render(xmlStream, model);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n renderIconSet(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n type: 'iconSet',\r\n priority: model.priority,\r\n id: model.x14Id || `{${uuidv4()}}`,\r\n });\r\n\r\n this.iconSetXform.render(xmlStream, model);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel({attributes}) {\r\n return {\r\n type: attributes.type,\r\n x14Id: attributes.id,\r\n priority: BaseXform.toIntValue(attributes.priority),\r\n };\r\n }\r\n\r\n onParserClose(name, parser) {\r\n Object.assign(this.model, parser.model);\r\n }\r\n}\r\n\r\nmodule.exports = CfRuleExtXform;\r\n","const CompositeXform = require('../../composite-xform');\r\n\r\nconst FExtXform = require('./f-ext-xform');\r\n\r\nclass CfvoExtXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'xm:f': (this.fExtXform = new FExtXform()),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'x14:cfvo';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n type: model.type,\r\n });\r\n if (model.value !== undefined) {\r\n this.fExtXform.render(xmlStream, model.value);\r\n }\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel(node) {\r\n return {\r\n type: node.attributes.type,\r\n };\r\n }\r\n\r\n onParserClose(name, parser) {\r\n switch (name) {\r\n case 'xm:f':\r\n this.model.value = parser.model ? parseFloat(parser.model) : 0;\r\n break;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = CfvoExtXform;\r\n","const CompositeXform = require('../../composite-xform');\r\n\r\nconst SqRefExtXform = require('./sqref-ext-xform');\r\nconst CfRuleExtXform = require('./cf-rule-ext-xform');\r\n\r\nclass ConditionalFormattingExtXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'xm:sqref': (this.sqRef = new SqRefExtXform()),\r\n 'x14:cfRule': (this.cfRule = new CfRuleExtXform()),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'x14:conditionalFormatting';\r\n }\r\n\r\n prepare(model, options) {\r\n model.rules.forEach(rule => {\r\n this.cfRule.prepare(rule, options);\r\n });\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (!model.rules.some(CfRuleExtXform.isExt)) {\r\n return;\r\n }\r\n\r\n xmlStream.openNode(this.tag, {\r\n 'xmlns:xm': 'http://schemas.microsoft.com/office/excel/2006/main',\r\n });\r\n\r\n model.rules.filter(CfRuleExtXform.isExt).forEach(rule => this.cfRule.render(xmlStream, rule));\r\n\r\n // for some odd reason, Excel needs the node to be after the rules\r\n this.sqRef.render(xmlStream, model.ref);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel() {\r\n return {\r\n rules: [],\r\n };\r\n }\r\n\r\n onParserClose(name, parser) {\r\n switch (name) {\r\n case 'xm:sqref':\r\n this.model.ref = parser.model;\r\n break;\r\n\r\n case 'x14:cfRule':\r\n this.model.rules.push(parser.model);\r\n break;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = ConditionalFormattingExtXform;\r\n","const CompositeXform = require('../../composite-xform');\r\n\r\nconst CfRuleExtXform = require('./cf-rule-ext-xform');\r\nconst ConditionalFormattingExtXform = require('./conditional-formatting-ext-xform');\r\n\r\nclass ConditionalFormattingsExtXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'x14:conditionalFormatting': (this.cfXform = new ConditionalFormattingExtXform()),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'x14:conditionalFormattings';\r\n }\r\n\r\n hasContent(model) {\r\n if (model.hasExtContent === undefined) {\r\n model.hasExtContent = model.some(cf => cf.rules.some(CfRuleExtXform.isExt));\r\n }\r\n return model.hasExtContent;\r\n }\r\n\r\n prepare(model, options) {\r\n model.forEach(cf => {\r\n this.cfXform.prepare(cf, options);\r\n });\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (this.hasContent(model)) {\r\n xmlStream.openNode(this.tag);\r\n model.forEach(cf => this.cfXform.render(xmlStream, cf));\r\n xmlStream.closeNode();\r\n }\r\n }\r\n\r\n createNewModel() {\r\n return [];\r\n }\r\n\r\n onParserClose(name, parser) {\r\n // model is array of conditional formatting objects\r\n this.model.push(parser.model);\r\n }\r\n}\r\n\r\nmodule.exports = ConditionalFormattingsExtXform;\r\n","const BaseXform = require('../../base-xform');\r\nconst CompositeXform = require('../../composite-xform');\r\n\r\nconst ColorXform = require('../../style/color-xform');\r\nconst CfvoExtXform = require('./cfvo-ext-xform');\r\n\r\nclass DatabarExtXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'x14:cfvo': (this.cfvoXform = new CfvoExtXform()),\r\n 'x14:borderColor': (this.borderColorXform = new ColorXform('x14:borderColor')),\r\n 'x14:negativeBorderColor': (this.negativeBorderColorXform = new ColorXform(\r\n 'x14:negativeBorderColor'\r\n )),\r\n 'x14:negativeFillColor': (this.negativeFillColorXform = new ColorXform(\r\n 'x14:negativeFillColor'\r\n )),\r\n 'x14:axisColor': (this.axisColorXform = new ColorXform('x14:axisColor')),\r\n };\r\n }\r\n\r\n static isExt(rule) {\r\n // not all databars need ext\r\n // TODO: refine this\r\n return !rule.gradient;\r\n }\r\n\r\n get tag() {\r\n return 'x14:dataBar';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n minLength: BaseXform.toIntAttribute(model.minLength, 0, true),\r\n maxLength: BaseXform.toIntAttribute(model.maxLength, 100, true),\r\n border: BaseXform.toBoolAttribute(model.border, false),\r\n gradient: BaseXform.toBoolAttribute(model.gradient, true),\r\n negativeBarColorSameAsPositive: BaseXform.toBoolAttribute(\r\n model.negativeBarColorSameAsPositive,\r\n true\r\n ),\r\n negativeBarBorderColorSameAsPositive: BaseXform.toBoolAttribute(\r\n model.negativeBarBorderColorSameAsPositive,\r\n true\r\n ),\r\n axisPosition: BaseXform.toAttribute(model.axisPosition, 'auto'),\r\n direction: BaseXform.toAttribute(model.direction, 'leftToRight'),\r\n });\r\n\r\n model.cfvo.forEach(cfvo => {\r\n this.cfvoXform.render(xmlStream, cfvo);\r\n });\r\n\r\n this.borderColorXform.render(xmlStream, model.borderColor);\r\n this.negativeBorderColorXform.render(xmlStream, model.negativeBorderColor);\r\n this.negativeFillColorXform.render(xmlStream, model.negativeFillColor);\r\n this.axisColorXform.render(xmlStream, model.axisColor);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel({attributes}) {\r\n return {\r\n cfvo: [],\r\n minLength: BaseXform.toIntValue(attributes.minLength, 0),\r\n maxLength: BaseXform.toIntValue(attributes.maxLength, 100),\r\n border: BaseXform.toBoolValue(attributes.border, false),\r\n gradient: BaseXform.toBoolValue(attributes.gradient, true),\r\n negativeBarColorSameAsPositive: BaseXform.toBoolValue(\r\n attributes.negativeBarColorSameAsPositive,\r\n true\r\n ),\r\n negativeBarBorderColorSameAsPositive: BaseXform.toBoolValue(\r\n attributes.negativeBarBorderColorSameAsPositive,\r\n true\r\n ),\r\n axisPosition: BaseXform.toStringValue(attributes.axisPosition, 'auto'),\r\n direction: BaseXform.toStringValue(attributes.direction, 'leftToRight'),\r\n };\r\n }\r\n\r\n onParserClose(name, parser) {\r\n const [, prop] = name.split(':');\r\n switch (prop) {\r\n case 'cfvo':\r\n this.model.cfvo.push(parser.model);\r\n break;\r\n\r\n default:\r\n this.model[prop] = parser.model;\r\n break;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = DatabarExtXform;\r\n","const BaseXform = require('../../base-xform');\r\n\r\nclass FExtXform extends BaseXform {\r\n get tag() {\r\n return 'xm:f';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, null, model);\r\n }\r\n\r\n parseOpen() {\r\n this.model = '';\r\n }\r\n\r\n parseText(text) {\r\n this.model += text;\r\n }\r\n\r\n parseClose(name) {\r\n return name !== this.tag;\r\n }\r\n}\r\n\r\nmodule.exports = FExtXform;\r\n","const BaseXform = require('../../base-xform');\r\nconst CompositeXform = require('../../composite-xform');\r\n\r\nconst CfvoExtXform = require('./cfvo-ext-xform');\r\nconst CfIconExtXform = require('./cf-icon-ext-xform');\r\n\r\nclass IconSetExtXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'x14:cfvo': (this.cfvoXform = new CfvoExtXform()),\r\n 'x14:cfIcon': (this.cfIconXform = new CfIconExtXform()),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'x14:iconSet';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n iconSet: BaseXform.toStringAttribute(model.iconSet),\r\n reverse: BaseXform.toBoolAttribute(model.reverse, false),\r\n showValue: BaseXform.toBoolAttribute(model.showValue, true),\r\n custom: BaseXform.toBoolAttribute(model.icons, false),\r\n });\r\n\r\n model.cfvo.forEach(cfvo => {\r\n this.cfvoXform.render(xmlStream, cfvo);\r\n });\r\n\r\n if (model.icons) {\r\n model.icons.forEach((icon, i) => {\r\n icon.iconId = i;\r\n this.cfIconXform.render(xmlStream, icon);\r\n });\r\n }\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel({attributes}) {\r\n return {\r\n cfvo: [],\r\n iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'),\r\n reverse: BaseXform.toBoolValue(attributes.reverse, false),\r\n showValue: BaseXform.toBoolValue(attributes.showValue, true),\r\n };\r\n }\r\n\r\n onParserClose(name, parser) {\r\n const [, prop] = name.split(':');\r\n switch (prop) {\r\n case 'cfvo':\r\n this.model.cfvo.push(parser.model);\r\n break;\r\n\r\n case 'cfIcon':\r\n if (!this.model.icons) {\r\n this.model.icons = [];\r\n }\r\n this.model.icons.push(parser.model);\r\n break;\r\n\r\n default:\r\n this.model[prop] = parser.model;\r\n break;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = IconSetExtXform;\r\n","const BaseXform = require('../../base-xform');\r\n\r\nclass SqrefExtXform extends BaseXform {\r\n get tag() {\r\n return 'xm:sqref';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, null, model);\r\n }\r\n\r\n parseOpen() {\r\n this.model = '';\r\n }\r\n\r\n parseText(text) {\r\n this.model += text;\r\n }\r\n\r\n parseClose(name) {\r\n return name !== this.tag;\r\n }\r\n}\r\n\r\nmodule.exports = SqrefExtXform;\r\n","const BaseXform = require('../../base-xform');\r\nconst CompositeXform = require('../../composite-xform');\r\n\r\nconst Range = require('../../../../doc/range');\r\n\r\nconst DatabarXform = require('./databar-xform');\r\nconst ExtLstRefXform = require('./ext-lst-ref-xform');\r\nconst FormulaXform = require('./formula-xform');\r\nconst ColorScaleXform = require('./color-scale-xform');\r\nconst IconSetXform = require('./icon-set-xform');\r\n\r\nconst extIcons = {\r\n '3Triangles': true,\r\n '3Stars': true,\r\n '5Boxes': true,\r\n};\r\n\r\nconst getTextFormula = model => {\r\n if (model.formulae && model.formulae[0]) {\r\n return model.formulae[0];\r\n }\r\n\r\n const range = new Range(model.ref);\r\n const {tl} = range;\r\n switch (model.operator) {\r\n case 'containsText':\r\n return `NOT(ISERROR(SEARCH(\"${model.text}\",${tl})))`;\r\n case 'containsBlanks':\r\n return `LEN(TRIM(${tl}))=0`;\r\n case 'notContainsBlanks':\r\n return `LEN(TRIM(${tl}))>0`;\r\n case 'containsErrors':\r\n return `ISERROR(${tl})`;\r\n case 'notContainsErrors':\r\n return `NOT(ISERROR(${tl}))`;\r\n default:\r\n return undefined;\r\n }\r\n};\r\n\r\nconst getTimePeriodFormula = model => {\r\n if (model.formulae && model.formulae[0]) {\r\n return model.formulae[0];\r\n }\r\n\r\n const range = new Range(model.ref);\r\n const {tl} = range;\r\n switch (model.timePeriod) {\r\n case 'thisWeek':\r\n return `AND(TODAY()-ROUNDDOWN(${tl},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${tl},0)-TODAY()<=7-WEEKDAY(TODAY()))`;\r\n case 'lastWeek':\r\n return `AND(TODAY()-ROUNDDOWN(${tl},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${tl},0)<(WEEKDAY(TODAY())+7))`;\r\n case 'nextWeek':\r\n return `AND(ROUNDDOWN(${tl},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${tl},0)-TODAY()<(15-WEEKDAY(TODAY())))`;\r\n case 'yesterday':\r\n return `FLOOR(${tl},1)=TODAY()-1`;\r\n case 'today':\r\n return `FLOOR(${tl},1)=TODAY()`;\r\n case 'tomorrow':\r\n return `FLOOR(${tl},1)=TODAY()+1`;\r\n case 'last7Days':\r\n return `AND(TODAY()-FLOOR(${tl},1)<=6,FLOOR(${tl},1)<=TODAY())`;\r\n case 'lastMonth':\r\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0-1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0-1)))`;\r\n case 'thisMonth':\r\n return `AND(MONTH(${tl})=MONTH(TODAY()),YEAR(${tl})=YEAR(TODAY()))`;\r\n case 'nextMonth':\r\n return `AND(MONTH(${tl})=MONTH(EDATE(TODAY(),0+1)),YEAR(${tl})=YEAR(EDATE(TODAY(),0+1)))`;\r\n default:\r\n return undefined;\r\n }\r\n};\r\n\r\nconst opType = attributes => {\r\n const {type, operator} = attributes;\r\n switch (type) {\r\n case 'containsText':\r\n case 'containsBlanks':\r\n case 'notContainsBlanks':\r\n case 'containsErrors':\r\n case 'notContainsErrors':\r\n return {\r\n type: 'containsText',\r\n operator: type,\r\n };\r\n\r\n default:\r\n return {type, operator};\r\n }\r\n};\r\n\r\nclass CfRuleXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n dataBar: (this.databarXform = new DatabarXform()),\r\n extLst: (this.extLstRefXform = new ExtLstRefXform()),\r\n formula: (this.formulaXform = new FormulaXform()),\r\n colorScale: (this.colorScaleXform = new ColorScaleXform()),\r\n iconSet: (this.iconSetXform = new IconSetXform()),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'cfRule';\r\n }\r\n\r\n static isPrimitive(rule) {\r\n // is this rule primitive?\r\n if (rule.type === 'iconSet') {\r\n if (rule.custom || extIcons[rule.iconSet]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n render(xmlStream, model) {\r\n switch (model.type) {\r\n case 'expression':\r\n this.renderExpression(xmlStream, model);\r\n break;\r\n case 'cellIs':\r\n this.renderCellIs(xmlStream, model);\r\n break;\r\n case 'top10':\r\n this.renderTop10(xmlStream, model);\r\n break;\r\n case 'aboveAverage':\r\n this.renderAboveAverage(xmlStream, model);\r\n break;\r\n case 'dataBar':\r\n this.renderDataBar(xmlStream, model);\r\n break;\r\n case 'colorScale':\r\n this.renderColorScale(xmlStream, model);\r\n break;\r\n case 'iconSet':\r\n this.renderIconSet(xmlStream, model);\r\n break;\r\n case 'containsText':\r\n this.renderText(xmlStream, model);\r\n break;\r\n case 'timePeriod':\r\n this.renderTimePeriod(xmlStream, model);\r\n break;\r\n }\r\n }\r\n\r\n renderExpression(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n type: 'expression',\r\n dxfId: model.dxfId,\r\n priority: model.priority,\r\n });\r\n\r\n this.formulaXform.render(xmlStream, model.formulae[0]);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n renderCellIs(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n type: 'cellIs',\r\n dxfId: model.dxfId,\r\n priority: model.priority,\r\n operator: model.operator,\r\n });\r\n\r\n model.formulae.forEach(formula => {\r\n this.formulaXform.render(xmlStream, formula);\r\n });\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n renderTop10(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, {\r\n type: 'top10',\r\n dxfId: model.dxfId,\r\n priority: model.priority,\r\n percent: BaseXform.toBoolAttribute(model.percent, false),\r\n bottom: BaseXform.toBoolAttribute(model.bottom, false),\r\n rank: BaseXform.toIntValue(model.rank, 10, true),\r\n });\r\n }\r\n\r\n renderAboveAverage(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, {\r\n type: 'aboveAverage',\r\n dxfId: model.dxfId,\r\n priority: model.priority,\r\n aboveAverage: BaseXform.toBoolAttribute(model.aboveAverage, true),\r\n });\r\n }\r\n\r\n renderDataBar(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n type: 'dataBar',\r\n priority: model.priority,\r\n });\r\n\r\n this.databarXform.render(xmlStream, model);\r\n this.extLstRefXform.render(xmlStream, model);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n renderColorScale(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n type: 'colorScale',\r\n priority: model.priority,\r\n });\r\n\r\n this.colorScaleXform.render(xmlStream, model);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n renderIconSet(xmlStream, model) {\r\n // iconset is all primitive or all extLst\r\n if (!CfRuleXform.isPrimitive(model)) {\r\n return;\r\n }\r\n\r\n xmlStream.openNode(this.tag, {\r\n type: 'iconSet',\r\n priority: model.priority,\r\n });\r\n\r\n this.iconSetXform.render(xmlStream, model);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n renderText(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n type: model.operator,\r\n dxfId: model.dxfId,\r\n priority: model.priority,\r\n operator: BaseXform.toStringAttribute(model.operator, 'containsText'),\r\n });\r\n\r\n const formula = getTextFormula(model);\r\n if (formula) {\r\n this.formulaXform.render(xmlStream, formula);\r\n }\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n renderTimePeriod(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n type: 'timePeriod',\r\n dxfId: model.dxfId,\r\n priority: model.priority,\r\n timePeriod: model.timePeriod,\r\n });\r\n\r\n const formula = getTimePeriodFormula(model);\r\n if (formula) {\r\n this.formulaXform.render(xmlStream, formula);\r\n }\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel({attributes}) {\r\n return {\r\n ...opType(attributes),\r\n dxfId: BaseXform.toIntValue(attributes.dxfId),\r\n priority: BaseXform.toIntValue(attributes.priority),\r\n timePeriod: attributes.timePeriod,\r\n percent: BaseXform.toBoolValue(attributes.percent),\r\n bottom: BaseXform.toBoolValue(attributes.bottom),\r\n rank: BaseXform.toIntValue(attributes.rank),\r\n aboveAverage: BaseXform.toBoolValue(attributes.aboveAverage),\r\n };\r\n }\r\n\r\n onParserClose(name, parser) {\r\n switch (name) {\r\n case 'dataBar':\r\n case 'extLst':\r\n case 'colorScale':\r\n case 'iconSet':\r\n // merge parser model with ours\r\n Object.assign(this.model, parser.model);\r\n break;\r\n\r\n case 'formula':\r\n // except - formula is a string and appends to formulae\r\n this.model.formulae = this.model.formulae || [];\r\n this.model.formulae.push(parser.model);\r\n break;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = CfRuleXform;\r\n","const BaseXform = require('../../base-xform');\r\n\r\nclass CfvoXform extends BaseXform {\r\n get tag() {\r\n return 'cfvo';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, {\r\n type: model.type,\r\n val: model.value,\r\n });\r\n }\r\n\r\n parseOpen(node) {\r\n this.model = {\r\n type: node.attributes.type,\r\n value: BaseXform.toFloatValue(node.attributes.val),\r\n };\r\n }\r\n\r\n parseClose(name) {\r\n return name !== this.tag;\r\n }\r\n}\r\n\r\nmodule.exports = CfvoXform;\r\n","const CompositeXform = require('../../composite-xform');\r\n\r\nconst ColorXform = require('../../style/color-xform');\r\nconst CfvoXform = require('./cfvo-xform');\r\n\r\nclass ColorScaleXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n cfvo: (this.cfvoXform = new CfvoXform()),\r\n color: (this.colorXform = new ColorXform()),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'colorScale';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag);\r\n\r\n model.cfvo.forEach(cfvo => {\r\n this.cfvoXform.render(xmlStream, cfvo);\r\n });\r\n model.color.forEach(color => {\r\n this.colorXform.render(xmlStream, color);\r\n });\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel(node) {\r\n return {\r\n cfvo: [],\r\n color: [],\r\n };\r\n }\r\n\r\n onParserClose(name, parser) {\r\n this.model[name].push(parser.model);\r\n }\r\n}\r\n\r\nmodule.exports = ColorScaleXform;\r\n","const CompositeXform = require('../../composite-xform');\r\n\r\nconst CfRuleXform = require('./cf-rule-xform');\r\n\r\nclass ConditionalFormattingXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n cfRule: new CfRuleXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'conditionalFormatting';\r\n }\r\n\r\n render(xmlStream, model) {\r\n // if there are no primitive rules, exit now\r\n if (!model.rules.some(CfRuleXform.isPrimitive)) {\r\n return;\r\n }\r\n\r\n xmlStream.openNode(this.tag, {sqref: model.ref});\r\n\r\n model.rules.forEach(rule => {\r\n if (CfRuleXform.isPrimitive(rule)) {\r\n rule.ref = model.ref;\r\n this.map.cfRule.render(xmlStream, rule);\r\n }\r\n });\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel({attributes}) {\r\n return {\r\n ref: attributes.sqref,\r\n rules: [],\r\n };\r\n }\r\n\r\n onParserClose(name, parser) {\r\n this.model.rules.push(parser.model);\r\n }\r\n}\r\n\r\nmodule.exports = ConditionalFormattingXform;\r\n","const BaseXform = require('../../base-xform');\r\n\r\nconst ConditionalFormattingXform = require('./conditional-formatting-xform');\r\n\r\nclass ConditionalFormattingsXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.cfXform = new ConditionalFormattingXform();\r\n }\r\n\r\n get tag() {\r\n return 'conditionalFormatting';\r\n }\r\n\r\n reset() {\r\n this.model = [];\r\n }\r\n\r\n prepare(model, options) {\r\n // ensure each rule has a priority value\r\n let nextPriority = model.reduce(\r\n (p, cf) => Math.max(p, ...cf.rules.map(rule => rule.priority || 0)),\r\n 1\r\n );\r\n model.forEach(cf => {\r\n cf.rules.forEach(rule => {\r\n if (!rule.priority) {\r\n rule.priority = nextPriority++;\r\n }\r\n\r\n if (rule.style) {\r\n rule.dxfId = options.styles.addDxfStyle(rule.style);\r\n }\r\n });\r\n });\r\n }\r\n\r\n render(xmlStream, model) {\r\n model.forEach(cf => {\r\n this.cfXform.render(xmlStream, cf);\r\n });\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n\r\n switch (node.name) {\r\n case 'conditionalFormatting':\r\n this.parser = this.cfXform;\r\n this.parser.parseOpen(node);\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.model.push(this.parser.model);\r\n this.parser = undefined;\r\n return false;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n reconcile(model, options) {\r\n model.forEach(cf => {\r\n cf.rules.forEach(rule => {\r\n if (rule.dxfId !== undefined) {\r\n rule.style = options.styles.getDxfStyle(rule.dxfId);\r\n delete rule.dxfId;\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\nmodule.exports = ConditionalFormattingsXform;\r\n","const CompositeXform = require('../../composite-xform');\r\n\r\nconst ColorXform = require('../../style/color-xform');\r\nconst CfvoXform = require('./cfvo-xform');\r\n\r\nclass DatabarXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n cfvo: (this.cfvoXform = new CfvoXform()),\r\n color: (this.colorXform = new ColorXform()),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'dataBar';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag);\r\n\r\n model.cfvo.forEach(cfvo => {\r\n this.cfvoXform.render(xmlStream, cfvo);\r\n });\r\n this.colorXform.render(xmlStream, model.color);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel() {\r\n return {\r\n cfvo: [],\r\n };\r\n }\r\n\r\n onParserClose(name, parser) {\r\n switch (name) {\r\n case 'cfvo':\r\n this.model.cfvo.push(parser.model);\r\n break;\r\n case 'color':\r\n this.model.color = parser.model;\r\n break;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = DatabarXform;\r\n","/* eslint-disable max-classes-per-file */\r\nconst BaseXform = require('../../base-xform');\r\nconst CompositeXform = require('../../composite-xform');\r\n\r\nclass X14IdXform extends BaseXform {\r\n get tag() {\r\n return 'x14:id';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, null, model);\r\n }\r\n\r\n parseOpen() {\r\n this.model = '';\r\n }\r\n\r\n parseText(text) {\r\n this.model += text;\r\n }\r\n\r\n parseClose(name) {\r\n return name !== this.tag;\r\n }\r\n}\r\n\r\nclass ExtXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n 'x14:id': (this.idXform = new X14IdXform()),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'ext';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n uri: '{B025F937-C7B1-47D3-B67F-A62EFF666E3E}',\r\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\r\n });\r\n\r\n this.idXform.render(xmlStream, model.x14Id);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel() {\r\n return {};\r\n }\r\n\r\n onParserClose(name, parser) {\r\n this.model.x14Id = parser.model;\r\n }\r\n}\r\n\r\nclass ExtLstRefXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n this.map = {\r\n ext: new ExtXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'extLst';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag);\r\n this.map.ext.render(xmlStream, model);\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel() {\r\n return {};\r\n }\r\n\r\n onParserClose(name, parser) {\r\n Object.assign(this.model, parser.model);\r\n }\r\n}\r\n\r\nmodule.exports = ExtLstRefXform;\r\n","const BaseXform = require('../../base-xform');\r\n\r\nclass FormulaXform extends BaseXform {\r\n get tag() {\r\n return 'formula';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, null, model);\r\n }\r\n\r\n parseOpen() {\r\n this.model = '';\r\n }\r\n\r\n parseText(text) {\r\n this.model += text;\r\n }\r\n\r\n parseClose(name) {\r\n return name !== this.tag;\r\n }\r\n}\r\n\r\nmodule.exports = FormulaXform;\r\n","const BaseXform = require('../../base-xform');\r\nconst CompositeXform = require('../../composite-xform');\r\n\r\nconst CfvoXform = require('./cfvo-xform');\r\n\r\nclass IconSetXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n cfvo: (this.cfvoXform = new CfvoXform()),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'iconSet';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n iconSet: BaseXform.toStringAttribute(model.iconSet, '3TrafficLights'),\r\n reverse: BaseXform.toBoolAttribute(model.reverse, false),\r\n showValue: BaseXform.toBoolAttribute(model.showValue, true),\r\n });\r\n\r\n model.cfvo.forEach(cfvo => {\r\n this.cfvoXform.render(xmlStream, cfvo);\r\n });\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel({attributes}) {\r\n return {\r\n iconSet: BaseXform.toStringValue(attributes.iconSet, '3TrafficLights'),\r\n reverse: BaseXform.toBoolValue(attributes.reverse),\r\n showValue: BaseXform.toBoolValue(attributes.showValue),\r\n cfvo: [],\r\n };\r\n }\r\n\r\n onParserClose(name, parser) {\r\n this.model[name].push(parser.model);\r\n }\r\n}\r\n\r\nmodule.exports = IconSetXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass ColXform extends BaseXform {\r\n get tag() {\r\n return 'col';\r\n }\r\n\r\n prepare(model, options) {\r\n const styleId = options.styles.addStyleModel(model.style || {});\r\n if (styleId) {\r\n model.styleId = styleId;\r\n }\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode('col');\r\n xmlStream.addAttribute('min', model.min);\r\n xmlStream.addAttribute('max', model.max);\r\n if (model.width) {\r\n xmlStream.addAttribute('width', model.width);\r\n }\r\n if (model.styleId) {\r\n xmlStream.addAttribute('style', model.styleId);\r\n }\r\n if (model.hidden) {\r\n xmlStream.addAttribute('hidden', '1');\r\n }\r\n if (model.bestFit) {\r\n xmlStream.addAttribute('bestFit', '1');\r\n }\r\n if (model.outlineLevel) {\r\n xmlStream.addAttribute('outlineLevel', model.outlineLevel);\r\n }\r\n if (model.collapsed) {\r\n xmlStream.addAttribute('collapsed', '1');\r\n }\r\n xmlStream.addAttribute('customWidth', '1');\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === 'col') {\r\n const model = (this.model = {\r\n min: parseInt(node.attributes.min || '0', 10),\r\n max: parseInt(node.attributes.max || '0', 10),\r\n width:\r\n node.attributes.width === undefined\r\n ? undefined\r\n : parseFloat(node.attributes.width || '0'),\r\n });\r\n if (node.attributes.style) {\r\n model.styleId = parseInt(node.attributes.style, 10);\r\n }\r\n if (\r\n node.attributes.hidden === true ||\r\n node.attributes.hidden === 'true' ||\r\n node.attributes.hidden === 1 ||\r\n node.attributes.hidden === '1'\r\n ) {\r\n model.hidden = true;\r\n }\r\n if (node.attributes.bestFit) {\r\n model.bestFit = true;\r\n }\r\n if (node.attributes.outlineLevel) {\r\n model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);\r\n }\r\n if (node.attributes.collapsed) {\r\n model.collapsed = true;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n\r\n reconcile(model, options) {\r\n // reconcile column styles\r\n if (model.styleId) {\r\n model.style = options.styles.getStyleModel(model.styleId);\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = ColXform;\r\n","const _ = require('../../../utils/under-dash');\r\nconst utils = require('../../../utils/utils');\r\nconst colCache = require('../../../utils/col-cache');\r\nconst BaseXform = require('../base-xform');\r\nconst Range = require('../../../doc/range');\r\n\r\nfunction assign(definedName, attributes, name, defaultValue) {\r\n const value = attributes[name];\r\n if (value !== undefined) {\r\n definedName[name] = value;\r\n } else if (defaultValue !== undefined) {\r\n definedName[name] = defaultValue;\r\n }\r\n}\r\nfunction parseBool(value) {\r\n switch (value) {\r\n case '1':\r\n case 'true':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\nfunction assignBool(definedName, attributes, name, defaultValue) {\r\n const value = attributes[name];\r\n if (value !== undefined) {\r\n definedName[name] = parseBool(value);\r\n } else if (defaultValue !== undefined) {\r\n definedName[name] = defaultValue;\r\n }\r\n}\r\n\r\nfunction optimiseDataValidations(model) {\r\n // Squeeze alike data validations together into rectangular ranges\r\n // to reduce file size and speed up Excel load time\r\n const dvList = _.map(model, (dataValidation, address) => ({\r\n address,\r\n dataValidation,\r\n marked: false,\r\n })).sort((a, b) => _.strcmp(a.address, b.address));\r\n const dvMap = _.keyBy(dvList, 'address');\r\n const matchCol = (addr, height, col) => {\r\n for (let i = 0; i < height; i++) {\r\n const otherAddress = colCache.encodeAddress(addr.row + i, col);\r\n if (!model[otherAddress] || !_.isEqual(model[addr.address], model[otherAddress])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n return dvList\r\n .map(dv => {\r\n if (!dv.marked) {\r\n const addr = colCache.decodeEx(dv.address);\r\n if (addr.dimensions) {\r\n dvMap[addr.dimensions].marked = true;\r\n return {\r\n ...dv.dataValidation,\r\n sqref: dv.address,\r\n };\r\n }\r\n\r\n // iterate downwards - finding matching cells\r\n let height = 1;\r\n let otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\r\n while (model[otherAddress] && _.isEqual(dv.dataValidation, model[otherAddress])) {\r\n height++;\r\n otherAddress = colCache.encodeAddress(addr.row + height, addr.col);\r\n }\r\n\r\n // iterate rightwards...\r\n\r\n let width = 1;\r\n while (matchCol(addr, height, addr.col + width)) {\r\n width++;\r\n }\r\n\r\n // mark all included addresses\r\n for (let i = 0; i < height; i++) {\r\n for (let j = 0; j < width; j++) {\r\n otherAddress = colCache.encodeAddress(addr.row + i, addr.col + j);\r\n dvMap[otherAddress].marked = true;\r\n }\r\n }\r\n\r\n if (height > 1 || width > 1) {\r\n const bottom = addr.row + (height - 1);\r\n const right = addr.col + (width - 1);\r\n return {\r\n ...dv.dataValidation,\r\n sqref: `${dv.address}:${colCache.encodeAddress(bottom, right)}`,\r\n };\r\n }\r\n return {\r\n ...dv.dataValidation,\r\n sqref: dv.address,\r\n };\r\n }\r\n return null;\r\n })\r\n .filter(Boolean);\r\n}\r\n\r\nclass DataValidationsXform extends BaseXform {\r\n get tag() {\r\n return 'dataValidations';\r\n }\r\n\r\n render(xmlStream, model) {\r\n const optimizedModel = optimiseDataValidations(model);\r\n if (optimizedModel.length) {\r\n xmlStream.openNode('dataValidations', {count: optimizedModel.length});\r\n\r\n optimizedModel.forEach(value => {\r\n xmlStream.openNode('dataValidation');\r\n\r\n if (value.type !== 'any') {\r\n xmlStream.addAttribute('type', value.type);\r\n\r\n if (value.operator && value.type !== 'list' && value.operator !== 'between') {\r\n xmlStream.addAttribute('operator', value.operator);\r\n }\r\n if (value.allowBlank) {\r\n xmlStream.addAttribute('allowBlank', '1');\r\n }\r\n }\r\n if (value.showInputMessage) {\r\n xmlStream.addAttribute('showInputMessage', '1');\r\n }\r\n if (value.promptTitle) {\r\n xmlStream.addAttribute('promptTitle', value.promptTitle);\r\n }\r\n if (value.prompt) {\r\n xmlStream.addAttribute('prompt', value.prompt);\r\n }\r\n if (value.showErrorMessage) {\r\n xmlStream.addAttribute('showErrorMessage', '1');\r\n }\r\n if (value.errorStyle) {\r\n xmlStream.addAttribute('errorStyle', value.errorStyle);\r\n }\r\n if (value.errorTitle) {\r\n xmlStream.addAttribute('errorTitle', value.errorTitle);\r\n }\r\n if (value.error) {\r\n xmlStream.addAttribute('error', value.error);\r\n }\r\n xmlStream.addAttribute('sqref', value.sqref);\r\n (value.formulae || []).forEach((formula, index) => {\r\n xmlStream.openNode(`formula${index + 1}`);\r\n if (value.type === 'date') {\r\n xmlStream.writeText(utils.dateToExcel(new Date(formula)));\r\n } else {\r\n xmlStream.writeText(formula);\r\n }\r\n xmlStream.closeNode();\r\n });\r\n xmlStream.closeNode();\r\n });\r\n xmlStream.closeNode();\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case 'dataValidations':\r\n this.model = {};\r\n return true;\r\n\r\n case 'dataValidation': {\r\n this._address = node.attributes.sqref;\r\n const dataValidation = {type: node.attributes.type || 'any', formulae: []};\r\n\r\n if (node.attributes.type) {\r\n assignBool(dataValidation, node.attributes, 'allowBlank');\r\n }\r\n assignBool(dataValidation, node.attributes, 'showInputMessage');\r\n assignBool(dataValidation, node.attributes, 'showErrorMessage');\r\n\r\n switch (dataValidation.type) {\r\n case 'any':\r\n case 'list':\r\n case 'custom':\r\n break;\r\n default:\r\n assign(dataValidation, node.attributes, 'operator', 'between');\r\n break;\r\n }\r\n assign(dataValidation, node.attributes, 'promptTitle');\r\n assign(dataValidation, node.attributes, 'prompt');\r\n assign(dataValidation, node.attributes, 'errorStyle');\r\n assign(dataValidation, node.attributes, 'errorTitle');\r\n assign(dataValidation, node.attributes, 'error');\r\n\r\n this._dataValidation = dataValidation;\r\n return true;\r\n }\r\n\r\n case 'formula1':\r\n case 'formula2':\r\n this._formula = [];\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this._formula) {\r\n this._formula.push(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n switch (name) {\r\n case 'dataValidations':\r\n return false;\r\n case 'dataValidation': {\r\n if (!this._dataValidation.formulae || !this._dataValidation.formulae.length) {\r\n delete this._dataValidation.formulae;\r\n delete this._dataValidation.operator;\r\n }\r\n // The four known cases: 1. E4:L9 N4:U9 2.E4 L9 3. N4:U9 4. E4\r\n const list = this._address.split(/\\s+/g) || [];\r\n list.forEach(addr => {\r\n if (addr.includes(':')) {\r\n const range = new Range(addr);\r\n range.forEachAddress(address => {\r\n this.model[address] = this._dataValidation;\r\n });\r\n } else {\r\n this.model[addr] = this._dataValidation;\r\n }\r\n });\r\n return true;\r\n }\r\n case 'formula1':\r\n case 'formula2': {\r\n let formula = this._formula.join('');\r\n switch (this._dataValidation.type) {\r\n case 'whole':\r\n case 'textLength':\r\n formula = parseInt(formula, 10);\r\n break;\r\n case 'decimal':\r\n formula = parseFloat(formula);\r\n break;\r\n case 'date':\r\n formula = utils.excelToDate(parseFloat(formula));\r\n break;\r\n default:\r\n break;\r\n }\r\n this._dataValidation.formulae.push(formula);\r\n this._formula = undefined;\r\n return true;\r\n }\r\n default:\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = DataValidationsXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass DimensionXform extends BaseXform {\r\n get tag() {\r\n return 'dimension';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n xmlStream.leafNode('dimension', {ref: model});\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === 'dimension') {\r\n this.model = node.attributes.ref;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = DimensionXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass DrawingXform extends BaseXform {\r\n get tag() {\r\n return 'drawing';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = {\r\n rId: node.attributes['r:id'],\r\n };\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = DrawingXform;\r\n","/* eslint-disable max-classes-per-file */\r\nconst CompositeXform = require('../composite-xform');\r\n\r\nconst ConditionalFormattingsExt = require('./cf-ext/conditional-formattings-ext-xform');\r\n\r\nclass ExtXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n this.map = {\r\n 'x14:conditionalFormattings': (this.conditionalFormattings = new ConditionalFormattingsExt()),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'ext';\r\n }\r\n\r\n hasContent(model) {\r\n return this.conditionalFormattings.hasContent(model.conditionalFormattings);\r\n }\r\n\r\n prepare(model, options) {\r\n this.conditionalFormattings.prepare(model.conditionalFormattings, options);\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode('ext', {\r\n uri: '{78C0D931-6437-407d-A8EE-F0AAD7539E65}',\r\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\r\n });\r\n\r\n this.conditionalFormattings.render(xmlStream, model.conditionalFormattings);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel() {\r\n return {};\r\n }\r\n\r\n onParserClose(name, parser) {\r\n this.model[name] = parser.model;\r\n }\r\n}\r\n\r\nclass ExtLstXform extends CompositeXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n ext: (this.ext = new ExtXform()),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'extLst';\r\n }\r\n\r\n prepare(model, options) {\r\n this.ext.prepare(model, options);\r\n }\r\n\r\n hasContent(model) {\r\n return this.ext.hasContent(model);\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (!this.hasContent(model)) {\r\n return;\r\n }\r\n\r\n xmlStream.openNode('extLst');\r\n this.ext.render(xmlStream, model);\r\n xmlStream.closeNode();\r\n }\r\n\r\n createNewModel() {\r\n return {};\r\n }\r\n\r\n onParserClose(name, parser) {\r\n Object.assign(this.model, parser.model);\r\n }\r\n}\r\n\r\nmodule.exports = ExtLstXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass HeaderFooterXform extends BaseXform {\r\n get tag() {\r\n return 'headerFooter';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n xmlStream.addRollback();\r\n\r\n let createTag = false;\r\n\r\n xmlStream.openNode('headerFooter');\r\n if (model.differentFirst) {\r\n xmlStream.addAttribute('differentFirst', '1');\r\n createTag = true;\r\n }\r\n if (model.differentOddEven) {\r\n xmlStream.addAttribute('differentOddEven', '1');\r\n createTag = true;\r\n }\r\n if (model.oddHeader && typeof model.oddHeader === 'string') {\r\n xmlStream.leafNode('oddHeader', null, model.oddHeader);\r\n createTag = true;\r\n }\r\n if (model.oddFooter && typeof model.oddFooter === 'string') {\r\n xmlStream.leafNode('oddFooter', null, model.oddFooter);\r\n createTag = true;\r\n }\r\n if (model.evenHeader && typeof model.evenHeader === 'string') {\r\n xmlStream.leafNode('evenHeader', null, model.evenHeader);\r\n createTag = true;\r\n }\r\n if (model.evenFooter && typeof model.evenFooter === 'string') {\r\n xmlStream.leafNode('evenFooter', null, model.evenFooter);\r\n createTag = true;\r\n }\r\n if (model.firstHeader && typeof model.firstHeader === 'string') {\r\n xmlStream.leafNode('firstHeader', null, model.firstHeader);\r\n createTag = true;\r\n }\r\n if (model.firstFooter && typeof model.firstFooter === 'string') {\r\n xmlStream.leafNode('firstFooter', null, model.firstFooter);\r\n createTag = true;\r\n }\r\n\r\n if (createTag) {\r\n xmlStream.closeNode();\r\n xmlStream.commit();\r\n } else {\r\n xmlStream.rollback();\r\n }\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case 'headerFooter':\r\n this.model = {};\r\n if (node.attributes.differentFirst) {\r\n this.model.differentFirst = parseInt(node.attributes.differentFirst, 0) === 1;\r\n }\r\n if (node.attributes.differentOddEven) {\r\n this.model.differentOddEven = parseInt(node.attributes.differentOddEven, 0) === 1;\r\n }\r\n return true;\r\n\r\n case 'oddHeader':\r\n this.currentNode = 'oddHeader';\r\n return true;\r\n\r\n case 'oddFooter':\r\n this.currentNode = 'oddFooter';\r\n return true;\r\n\r\n case 'evenHeader':\r\n this.currentNode = 'evenHeader';\r\n return true;\r\n\r\n case 'evenFooter':\r\n this.currentNode = 'evenFooter';\r\n return true;\r\n\r\n case 'firstHeader':\r\n this.currentNode = 'firstHeader';\r\n return true;\r\n\r\n case 'firstFooter':\r\n this.currentNode = 'firstFooter';\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n switch (this.currentNode) {\r\n case 'oddHeader':\r\n this.model.oddHeader = text;\r\n break;\r\n\r\n case 'oddFooter':\r\n this.model.oddFooter = text;\r\n break;\r\n\r\n case 'evenHeader':\r\n this.model.evenHeader = text;\r\n break;\r\n\r\n case 'evenFooter':\r\n this.model.evenFooter = text;\r\n break;\r\n\r\n case 'firstHeader':\r\n this.model.firstHeader = text;\r\n break;\r\n\r\n case 'firstFooter':\r\n this.model.firstFooter = text;\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n parseClose() {\r\n switch (this.currentNode) {\r\n case 'oddHeader':\r\n case 'oddFooter':\r\n case 'evenHeader':\r\n case 'evenFooter':\r\n case 'firstHeader':\r\n case 'firstFooter':\r\n this.currentNode = undefined;\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = HeaderFooterXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass HyperlinkXform extends BaseXform {\r\n get tag() {\r\n return 'hyperlink';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode('hyperlink', {\r\n ref: model.address,\r\n 'r:id': model.rId,\r\n tooltip: model.tooltip,\r\n });\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === 'hyperlink') {\r\n this.model = {\r\n address: node.attributes.ref,\r\n rId: node.attributes['r:id'],\r\n tooltip: node.attributes.tooltip,\r\n };\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = HyperlinkXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass MergeCellXform extends BaseXform {\r\n get tag() {\r\n return 'mergeCell';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode('mergeCell', {ref: model});\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === 'mergeCell') {\r\n this.model = node.attributes.ref;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = MergeCellXform;\r\n","const _ = require('../../../utils/under-dash');\r\n\r\nconst Range = require('../../../doc/range');\r\nconst colCache = require('../../../utils/col-cache');\r\nconst Enums = require('../../../doc/enums');\r\n\r\nclass Merges {\r\n constructor() {\r\n // optional mergeCells is array of ranges (like the xml)\r\n this.merges = {};\r\n }\r\n\r\n add(merge) {\r\n // merge is {address, master}\r\n if (this.merges[merge.master]) {\r\n this.merges[merge.master].expandToAddress(merge.address);\r\n } else {\r\n const range = `${merge.master}:${merge.address}`;\r\n this.merges[merge.master] = new Range(range);\r\n }\r\n }\r\n\r\n get mergeCells() {\r\n return _.map(this.merges, merge => merge.range);\r\n }\r\n\r\n reconcile(mergeCells, rows) {\r\n // reconcile merge list with merge cells\r\n _.each(mergeCells, merge => {\r\n const dimensions = colCache.decode(merge);\r\n for (let i = dimensions.top; i <= dimensions.bottom; i++) {\r\n const row = rows[i - 1];\r\n for (let j = dimensions.left; j <= dimensions.right; j++) {\r\n const cell = row.cells[j - 1];\r\n if (!cell) {\r\n // nulls are not included in document - so if master cell has no value - add a null one here\r\n row.cells[j] = {\r\n type: Enums.ValueType.Null,\r\n address: colCache.encodeAddress(i, j),\r\n };\r\n } else if (cell.type === Enums.ValueType.Merge) {\r\n cell.master = dimensions.tl;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n getMasterAddress(address) {\r\n // if address has been merged, return its master's address. Assumes reconcile has been called\r\n const range = this.hash[address];\r\n return range && range.tl;\r\n }\r\n}\r\n\r\nmodule.exports = Merges;\r\n","const BaseXform = require('../base-xform');\r\n\r\nconst isDefined = attr => typeof attr !== 'undefined';\r\n\r\nclass OutlinePropertiesXform extends BaseXform {\r\n get tag() {\r\n return 'outlinePr';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model && (isDefined(model.summaryBelow) || isDefined(model.summaryRight))) {\r\n xmlStream.leafNode(this.tag, {\r\n summaryBelow: isDefined(model.summaryBelow) ? Number(model.summaryBelow) : undefined,\r\n summaryRight: isDefined(model.summaryRight) ? Number(model.summaryRight) : undefined,\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === this.tag) {\r\n this.model = {\r\n summaryBelow: isDefined(node.attributes.summaryBelow)\r\n ? Boolean(Number(node.attributes.summaryBelow))\r\n : undefined,\r\n summaryRight: isDefined(node.attributes.summaryRight)\r\n ? Boolean(Number(node.attributes.summaryRight))\r\n : undefined,\r\n };\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = OutlinePropertiesXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass PageBreaksXform extends BaseXform {\r\n get tag() {\r\n return 'brk';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode('brk', model);\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === 'brk') {\r\n this.model = node.attributes.ref;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = PageBreaksXform;\r\n","const _ = require('../../../utils/under-dash');\r\nconst BaseXform = require('../base-xform');\r\n\r\nclass PageMarginsXform extends BaseXform {\r\n get tag() {\r\n return 'pageMargins';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n const attributes = {\r\n left: model.left,\r\n right: model.right,\r\n top: model.top,\r\n bottom: model.bottom,\r\n header: model.header,\r\n footer: model.footer,\r\n };\r\n if (_.some(attributes, value => value !== undefined)) {\r\n xmlStream.leafNode(this.tag, attributes);\r\n }\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = {\r\n left: parseFloat(node.attributes.left || 0.7),\r\n right: parseFloat(node.attributes.right || 0.7),\r\n top: parseFloat(node.attributes.top || 0.75),\r\n bottom: parseFloat(node.attributes.bottom || 0.75),\r\n header: parseFloat(node.attributes.header || 0.3),\r\n footer: parseFloat(node.attributes.footer || 0.3),\r\n };\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = PageMarginsXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass PageSetupPropertiesXform extends BaseXform {\r\n get tag() {\r\n return 'pageSetUpPr';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model && model.fitToPage) {\r\n xmlStream.leafNode(this.tag, {\r\n fitToPage: model.fitToPage ? '1' : undefined,\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === this.tag) {\r\n this.model = {\r\n fitToPage: node.attributes.fitToPage === '1',\r\n };\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = PageSetupPropertiesXform;\r\n","const _ = require('../../../utils/under-dash');\r\nconst BaseXform = require('../base-xform');\r\n\r\nfunction booleanToXml(model) {\r\n return model ? '1' : undefined;\r\n}\r\nfunction pageOrderToXml(model) {\r\n switch (model) {\r\n case 'overThenDown':\r\n return model;\r\n default:\r\n return undefined;\r\n }\r\n}\r\nfunction cellCommentsToXml(model) {\r\n switch (model) {\r\n case 'atEnd':\r\n case 'asDisplyed':\r\n return model;\r\n default:\r\n return undefined;\r\n }\r\n}\r\nfunction errorsToXml(model) {\r\n switch (model) {\r\n case 'dash':\r\n case 'blank':\r\n case 'NA':\r\n return model;\r\n default:\r\n return undefined;\r\n }\r\n}\r\nfunction pageSizeToModel(value) {\r\n return value !== undefined ? parseInt(value, 10) : undefined;\r\n}\r\n\r\nclass PageSetupXform extends BaseXform {\r\n get tag() {\r\n return 'pageSetup';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n const attributes = {\r\n paperSize: model.paperSize,\r\n orientation: model.orientation,\r\n horizontalDpi: model.horizontalDpi,\r\n verticalDpi: model.verticalDpi,\r\n pageOrder: pageOrderToXml(model.pageOrder),\r\n blackAndWhite: booleanToXml(model.blackAndWhite),\r\n draft: booleanToXml(model.draft),\r\n cellComments: cellCommentsToXml(model.cellComments),\r\n errors: errorsToXml(model.errors),\r\n scale: model.scale,\r\n fitToWidth: model.fitToWidth,\r\n fitToHeight: model.fitToHeight,\r\n firstPageNumber: model.firstPageNumber,\r\n useFirstPageNumber: booleanToXml(model.firstPageNumber),\r\n usePrinterDefaults: booleanToXml(model.usePrinterDefaults),\r\n copies: model.copies,\r\n };\r\n if (_.some(attributes, value => value !== undefined)) {\r\n xmlStream.leafNode(this.tag, attributes);\r\n }\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = {\r\n paperSize: pageSizeToModel(node.attributes.paperSize),\r\n orientation: node.attributes.orientation || 'portrait',\r\n horizontalDpi: parseInt(node.attributes.horizontalDpi || '4294967295', 10),\r\n verticalDpi: parseInt(node.attributes.verticalDpi || '4294967295', 10),\r\n pageOrder: node.attributes.pageOrder || 'downThenOver',\r\n blackAndWhite: node.attributes.blackAndWhite === '1',\r\n draft: node.attributes.draft === '1',\r\n cellComments: node.attributes.cellComments || 'None',\r\n errors: node.attributes.errors || 'displayed',\r\n scale: parseInt(node.attributes.scale || '100', 10),\r\n fitToWidth: parseInt(node.attributes.fitToWidth || '1', 10),\r\n fitToHeight: parseInt(node.attributes.fitToHeight || '1', 10),\r\n firstPageNumber: parseInt(node.attributes.firstPageNumber || '1', 10),\r\n useFirstPageNumber: node.attributes.useFirstPageNumber === '1',\r\n usePrinterDefaults: node.attributes.usePrinterDefaults === '1',\r\n copies: parseInt(node.attributes.copies || '1', 10),\r\n };\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = PageSetupXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass PictureXform extends BaseXform {\r\n get tag() {\r\n return 'picture';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = {\r\n rId: node.attributes['r:id'],\r\n };\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = PictureXform;\r\n","const _ = require('../../../utils/under-dash');\r\nconst BaseXform = require('../base-xform');\r\n\r\nfunction booleanToXml(model) {\r\n return model ? '1' : undefined;\r\n}\r\n\r\nclass PrintOptionsXform extends BaseXform {\r\n get tag() {\r\n return 'printOptions';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n const attributes = {\r\n headings: booleanToXml(model.showRowColHeaders),\r\n gridLines: booleanToXml(model.showGridLines),\r\n horizontalCentered: booleanToXml(model.horizontalCentered),\r\n verticalCentered: booleanToXml(model.verticalCentered),\r\n };\r\n if (_.some(attributes, value => value !== undefined)) {\r\n xmlStream.leafNode(this.tag, attributes);\r\n }\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = {\r\n showRowColHeaders: node.attributes.headings === '1',\r\n showGridLines: node.attributes.gridLines === '1',\r\n horizontalCentered: node.attributes.horizontalCentered === '1',\r\n verticalCentered: node.attributes.verticalCentered === '1',\r\n };\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = PrintOptionsXform;\r\n","'use strict';\r\n\r\nconst PageBreaksXform = require('./page-breaks-xform');\r\n\r\nconst ListXform = require('../list-xform');\r\n\r\nclass RowBreaksXform extends ListXform {\r\n constructor() {\r\n const options = {\r\n tag: 'rowBreaks',\r\n count: true,\r\n childXform: new PageBreaksXform(),\r\n };\r\n super(options);\r\n }\r\n\r\n // get tag() { return 'rowBreaks'; }\r\n\r\n render(xmlStream, model) {\r\n if (model && model.length) {\r\n xmlStream.openNode(this.tag, this.$);\r\n if (this.count) {\r\n xmlStream.addAttribute(this.$count, model.length);\r\n xmlStream.addAttribute('manualBreakCount', model.length);\r\n }\r\n\r\n const {childXform} = this;\r\n model.forEach(childModel => {\r\n childXform.render(xmlStream, childModel);\r\n });\r\n\r\n xmlStream.closeNode();\r\n } else if (this.empty) {\r\n xmlStream.leafNode(this.tag);\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = RowBreaksXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nconst CellXform = require('./cell-xform');\r\n\r\nclass RowXform extends BaseXform {\r\n constructor(options) {\r\n super();\r\n\r\n this.maxItems = options && options.maxItems;\r\n this.map = {\r\n c: new CellXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'row';\r\n }\r\n\r\n prepare(model, options) {\r\n const styleId = options.styles.addStyleModel(model.style);\r\n if (styleId) {\r\n model.styleId = styleId;\r\n }\r\n const cellXform = this.map.c;\r\n model.cells.forEach(cellModel => {\r\n cellXform.prepare(cellModel, options);\r\n });\r\n }\r\n\r\n render(xmlStream, model, options) {\r\n xmlStream.openNode('row');\r\n xmlStream.addAttribute('r', model.number);\r\n if (model.height) {\r\n xmlStream.addAttribute('ht', model.height);\r\n xmlStream.addAttribute('customHeight', '1');\r\n }\r\n if (model.hidden) {\r\n xmlStream.addAttribute('hidden', '1');\r\n }\r\n if (model.min > 0 && model.max > 0 && model.min <= model.max) {\r\n xmlStream.addAttribute('spans', `${model.min}:${model.max}`);\r\n }\r\n if (model.styleId) {\r\n xmlStream.addAttribute('s', model.styleId);\r\n xmlStream.addAttribute('customFormat', '1');\r\n }\r\n xmlStream.addAttribute('x14ac:dyDescent', '0.25');\r\n if (model.outlineLevel) {\r\n xmlStream.addAttribute('outlineLevel', model.outlineLevel);\r\n }\r\n if (model.collapsed) {\r\n xmlStream.addAttribute('collapsed', '1');\r\n }\r\n\r\n const cellXform = this.map.c;\r\n model.cells.forEach(cellModel => {\r\n cellXform.render(xmlStream, cellModel, options);\r\n });\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n if (node.name === 'row') {\r\n this.numRowsSeen += 1;\r\n const spans = node.attributes.spans\r\n ? node.attributes.spans.split(':').map(span => parseInt(span, 10))\r\n : [undefined, undefined];\r\n const model = (this.model = {\r\n number: parseInt(node.attributes.r, 10),\r\n min: spans[0],\r\n max: spans[1],\r\n cells: [],\r\n });\r\n if (node.attributes.s) {\r\n model.styleId = parseInt(node.attributes.s, 10);\r\n }\r\n if (\r\n node.attributes.hidden === true ||\r\n node.attributes.hidden === 'true' ||\r\n node.attributes.hidden === 1 ||\r\n node.attributes.hidden === '1'\r\n ) {\r\n model.hidden = true;\r\n }\r\n if (node.attributes.bestFit) {\r\n model.bestFit = true;\r\n }\r\n if (node.attributes.ht) {\r\n model.height = parseFloat(node.attributes.ht);\r\n }\r\n if (node.attributes.outlineLevel) {\r\n model.outlineLevel = parseInt(node.attributes.outlineLevel, 10);\r\n }\r\n if (node.attributes.collapsed) {\r\n model.collapsed = true;\r\n }\r\n return true;\r\n }\r\n\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.model.cells.push(this.parser.model);\r\n if (this.maxItems && this.model.cells.length > this.maxItems) {\r\n throw new Error(`Max column count (${this.maxItems}) exceeded`);\r\n }\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n reconcile(model, options) {\r\n model.style = model.styleId ? options.styles.getStyleModel(model.styleId) : {};\r\n if (model.styleId !== undefined) {\r\n model.styleId = undefined;\r\n }\r\n\r\n const cellXform = this.map.c;\r\n model.cells.forEach(cellModel => {\r\n cellXform.reconcile(cellModel, options);\r\n });\r\n }\r\n}\r\n\r\nmodule.exports = RowXform;\r\n","const _ = require('../../../utils/under-dash');\r\nconst BaseXform = require('../base-xform');\r\n\r\nclass SheetFormatPropertiesXform extends BaseXform {\r\n get tag() {\r\n return 'sheetFormatPr';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n const attributes = {\r\n defaultRowHeight: model.defaultRowHeight,\r\n outlineLevelRow: model.outlineLevelRow,\r\n outlineLevelCol: model.outlineLevelCol,\r\n 'x14ac:dyDescent': model.dyDescent,\r\n };\r\n if (model.defaultColWidth) {\r\n attributes.defaultColWidth = model.defaultColWidth;\r\n }\r\n\r\n // default value for 'defaultRowHeight' is 15, this should not be 'custom'\r\n if (!model.defaultRowHeight || model.defaultRowHeight !== 15) {\r\n attributes.customHeight = '1';\r\n }\r\n\r\n if (_.some(attributes, value => value !== undefined)) {\r\n xmlStream.leafNode('sheetFormatPr', attributes);\r\n }\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === 'sheetFormatPr') {\r\n this.model = {\r\n defaultRowHeight: parseFloat(node.attributes.defaultRowHeight || '0'),\r\n dyDescent: parseFloat(node.attributes['x14ac:dyDescent'] || '0'),\r\n outlineLevelRow: parseInt(node.attributes.outlineLevelRow || '0', 10),\r\n outlineLevelCol: parseInt(node.attributes.outlineLevelCol || '0', 10),\r\n };\r\n if (node.attributes.defaultColWidth) {\r\n this.model.defaultColWidth = parseFloat(node.attributes.defaultColWidth);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = SheetFormatPropertiesXform;\r\n","const BaseXform = require('../base-xform');\r\nconst ColorXform = require('../style/color-xform');\r\nconst PageSetupPropertiesXform = require('./page-setup-properties-xform');\r\nconst OutlinePropertiesXform = require('./outline-properties-xform');\r\n\r\nclass SheetPropertiesXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n tabColor: new ColorXform('tabColor'),\r\n pageSetUpPr: new PageSetupPropertiesXform(),\r\n outlinePr: new OutlinePropertiesXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'sheetPr';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n xmlStream.addRollback();\r\n xmlStream.openNode('sheetPr');\r\n\r\n let inner = false;\r\n inner = this.map.tabColor.render(xmlStream, model.tabColor) || inner;\r\n inner = this.map.pageSetUpPr.render(xmlStream, model.pageSetup) || inner;\r\n inner = this.map.outlinePr.render(xmlStream, model.outlineProperties) || inner;\r\n\r\n if (inner) {\r\n xmlStream.closeNode();\r\n xmlStream.commit();\r\n } else {\r\n xmlStream.rollback();\r\n }\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n if (node.name === this.tag) {\r\n this.reset();\r\n return true;\r\n }\r\n if (this.map[node.name]) {\r\n this.parser = this.map[node.name];\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n if (this.map.tabColor.model || this.map.pageSetUpPr.model || this.map.outlinePr.model) {\r\n this.model = {};\r\n if (this.map.tabColor.model) {\r\n this.model.tabColor = this.map.tabColor.model;\r\n }\r\n if (this.map.pageSetUpPr.model) {\r\n this.model.pageSetup = this.map.pageSetUpPr.model;\r\n }\r\n if (this.map.outlinePr.model) {\r\n this.model.outlineProperties = this.map.outlinePr.model;\r\n }\r\n } else {\r\n this.model = null;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = SheetPropertiesXform;\r\n","const _ = require('../../../utils/under-dash');\r\nconst BaseXform = require('../base-xform');\r\n\r\nfunction booleanToXml(model, value) {\r\n return model ? value : undefined;\r\n}\r\n\r\nfunction xmlToBoolean(value, equals) {\r\n return value === equals ? true : undefined;\r\n}\r\n\r\nclass SheetProtectionXform extends BaseXform {\r\n get tag() {\r\n return 'sheetProtection';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n const attributes = {\r\n sheet: booleanToXml(model.sheet, '1'),\r\n selectLockedCells: model.selectLockedCells === false ? '1' : undefined,\r\n selectUnlockedCells: model.selectUnlockedCells === false ? '1' : undefined,\r\n formatCells: booleanToXml(model.formatCells, '0'),\r\n formatColumns: booleanToXml(model.formatColumns, '0'),\r\n formatRows: booleanToXml(model.formatRows, '0'),\r\n insertColumns: booleanToXml(model.insertColumns, '0'),\r\n insertRows: booleanToXml(model.insertRows, '0'),\r\n insertHyperlinks: booleanToXml(model.insertHyperlinks, '0'),\r\n deleteColumns: booleanToXml(model.deleteColumns, '0'),\r\n deleteRows: booleanToXml(model.deleteRows, '0'),\r\n sort: booleanToXml(model.sort, '0'),\r\n autoFilter: booleanToXml(model.autoFilter, '0'),\r\n pivotTables: booleanToXml(model.pivotTables, '0'),\r\n };\r\n if (model.sheet) {\r\n attributes.algorithmName = model.algorithmName;\r\n attributes.hashValue = model.hashValue;\r\n attributes.saltValue = model.saltValue;\r\n attributes.spinCount = model.spinCount;\r\n attributes.objects = booleanToXml(model.objects === false, '1');\r\n attributes.scenarios = booleanToXml(model.scenarios === false, '1');\r\n }\r\n if (_.some(attributes, value => value !== undefined)) {\r\n xmlStream.leafNode(this.tag, attributes);\r\n }\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = {\r\n sheet: xmlToBoolean(node.attributes.sheet, '1'),\r\n objects: node.attributes.objects === '1' ? false : undefined,\r\n scenarios: node.attributes.scenarios === '1' ? false : undefined,\r\n selectLockedCells: node.attributes.selectLockedCells === '1' ? false : undefined,\r\n selectUnlockedCells: node.attributes.selectUnlockedCells === '1' ? false : undefined,\r\n formatCells: xmlToBoolean(node.attributes.formatCells, '0'),\r\n formatColumns: xmlToBoolean(node.attributes.formatColumns, '0'),\r\n formatRows: xmlToBoolean(node.attributes.formatRows, '0'),\r\n insertColumns: xmlToBoolean(node.attributes.insertColumns, '0'),\r\n insertRows: xmlToBoolean(node.attributes.insertRows, '0'),\r\n insertHyperlinks: xmlToBoolean(node.attributes.insertHyperlinks, '0'),\r\n deleteColumns: xmlToBoolean(node.attributes.deleteColumns, '0'),\r\n deleteRows: xmlToBoolean(node.attributes.deleteRows, '0'),\r\n sort: xmlToBoolean(node.attributes.sort, '0'),\r\n autoFilter: xmlToBoolean(node.attributes.autoFilter, '0'),\r\n pivotTables: xmlToBoolean(node.attributes.pivotTables, '0'),\r\n };\r\n if (node.attributes.algorithmName) {\r\n this.model.algorithmName = node.attributes.algorithmName;\r\n this.model.hashValue = node.attributes.hashValue;\r\n this.model.saltValue = node.attributes.saltValue;\r\n this.model.spinCount = parseInt(node.attributes.spinCount, 10);\r\n }\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = SheetProtectionXform;\r\n","const colCache = require('../../../utils/col-cache');\r\nconst BaseXform = require('../base-xform');\r\n\r\nconst VIEW_STATES = {\r\n frozen: 'frozen',\r\n frozenSplit: 'frozen',\r\n split: 'split',\r\n};\r\n\r\nclass SheetViewXform extends BaseXform {\r\n get tag() {\r\n return 'sheetView';\r\n }\r\n\r\n prepare(model) {\r\n switch (model.state) {\r\n case 'frozen':\r\n case 'split':\r\n break;\r\n default:\r\n model.state = 'normal';\r\n break;\r\n }\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode('sheetView', {\r\n workbookViewId: model.workbookViewId || 0,\r\n });\r\n const add = function(name, value, included) {\r\n if (included) {\r\n xmlStream.addAttribute(name, value);\r\n }\r\n };\r\n add('rightToLeft', '1', model.rightToLeft === true);\r\n add('tabSelected', '1', model.tabSelected);\r\n add('showRuler', '0', model.showRuler === false);\r\n add('showRowColHeaders', '0', model.showRowColHeaders === false);\r\n add('showGridLines', '0', model.showGridLines === false);\r\n add('zoomScale', model.zoomScale, model.zoomScale);\r\n add('zoomScaleNormal', model.zoomScaleNormal, model.zoomScaleNormal);\r\n add('view', model.style, model.style);\r\n\r\n let topLeftCell;\r\n let xSplit;\r\n let ySplit;\r\n let activePane;\r\n switch (model.state) {\r\n case 'frozen':\r\n xSplit = model.xSplit || 0;\r\n ySplit = model.ySplit || 0;\r\n topLeftCell = model.topLeftCell || colCache.getAddress(ySplit + 1, xSplit + 1).address;\r\n activePane =\r\n (model.xSplit && model.ySplit && 'bottomRight') ||\r\n (model.xSplit && 'topRight') ||\r\n 'bottomLeft';\r\n\r\n xmlStream.leafNode('pane', {\r\n xSplit: model.xSplit || undefined,\r\n ySplit: model.ySplit || undefined,\r\n topLeftCell,\r\n activePane,\r\n state: 'frozen',\r\n });\r\n xmlStream.leafNode('selection', {\r\n pane: activePane,\r\n activeCell: model.activeCell,\r\n sqref: model.activeCell,\r\n });\r\n break;\r\n case 'split':\r\n if (model.activePane === 'topLeft') {\r\n model.activePane = undefined;\r\n }\r\n xmlStream.leafNode('pane', {\r\n xSplit: model.xSplit || undefined,\r\n ySplit: model.ySplit || undefined,\r\n topLeftCell: model.topLeftCell,\r\n activePane: model.activePane,\r\n });\r\n xmlStream.leafNode('selection', {\r\n pane: model.activePane,\r\n activeCell: model.activeCell,\r\n sqref: model.activeCell,\r\n });\r\n break;\r\n case 'normal':\r\n if (model.activeCell) {\r\n xmlStream.leafNode('selection', {\r\n activeCell: model.activeCell,\r\n sqref: model.activeCell,\r\n });\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case 'sheetView':\r\n this.sheetView = {\r\n workbookViewId: parseInt(node.attributes.workbookViewId, 10),\r\n rightToLeft: node.attributes.rightToLeft === '1',\r\n tabSelected: node.attributes.tabSelected === '1',\r\n showRuler: !(node.attributes.showRuler === '0'),\r\n showRowColHeaders: !(node.attributes.showRowColHeaders === '0'),\r\n showGridLines: !(node.attributes.showGridLines === '0'),\r\n zoomScale: parseInt(node.attributes.zoomScale || '100', 10),\r\n zoomScaleNormal: parseInt(node.attributes.zoomScaleNormal || '100', 10),\r\n style: node.attributes.view,\r\n };\r\n this.pane = undefined;\r\n this.selections = {};\r\n return true;\r\n\r\n case 'pane':\r\n this.pane = {\r\n xSplit: parseInt(node.attributes.xSplit || '0', 10),\r\n ySplit: parseInt(node.attributes.ySplit || '0', 10),\r\n topLeftCell: node.attributes.topLeftCell,\r\n activePane: node.attributes.activePane || 'topLeft',\r\n state: node.attributes.state,\r\n };\r\n return true;\r\n\r\n case 'selection': {\r\n const name = node.attributes.pane || 'topLeft';\r\n this.selections[name] = {\r\n pane: name,\r\n activeCell: node.attributes.activeCell,\r\n };\r\n return true;\r\n }\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n let model;\r\n let selection;\r\n switch (name) {\r\n case 'sheetView':\r\n if (this.sheetView && this.pane) {\r\n model = this.model = {\r\n workbookViewId: this.sheetView.workbookViewId,\r\n rightToLeft: this.sheetView.rightToLeft,\r\n state: VIEW_STATES[this.pane.state] || 'split', // split is default\r\n xSplit: this.pane.xSplit,\r\n ySplit: this.pane.ySplit,\r\n topLeftCell: this.pane.topLeftCell,\r\n showRuler: this.sheetView.showRuler,\r\n showRowColHeaders: this.sheetView.showRowColHeaders,\r\n showGridLines: this.sheetView.showGridLines,\r\n zoomScale: this.sheetView.zoomScale,\r\n zoomScaleNormal: this.sheetView.zoomScaleNormal,\r\n };\r\n if (this.model.state === 'split') {\r\n model.activePane = this.pane.activePane;\r\n }\r\n selection = this.selections[this.pane.activePane];\r\n if (selection && selection.activeCell) {\r\n model.activeCell = selection.activeCell;\r\n }\r\n if (this.sheetView.style) {\r\n model.style = this.sheetView.style;\r\n }\r\n } else {\r\n model = this.model = {\r\n workbookViewId: this.sheetView.workbookViewId,\r\n rightToLeft: this.sheetView.rightToLeft,\r\n state: 'normal',\r\n showRuler: this.sheetView.showRuler,\r\n showRowColHeaders: this.sheetView.showRowColHeaders,\r\n showGridLines: this.sheetView.showGridLines,\r\n zoomScale: this.sheetView.zoomScale,\r\n zoomScaleNormal: this.sheetView.zoomScaleNormal,\r\n };\r\n selection = this.selections.topLeft;\r\n if (selection && selection.activeCell) {\r\n model.activeCell = selection.activeCell;\r\n }\r\n if (this.sheetView.style) {\r\n model.style = this.sheetView.style;\r\n }\r\n }\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n reconcile() {}\r\n}\r\n\r\nmodule.exports = SheetViewXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass TablePartXform extends BaseXform {\r\n get tag() {\r\n return 'tablePart';\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n xmlStream.leafNode(this.tag, {'r:id': model.rId});\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = {\r\n rId: node.attributes['r:id'],\r\n };\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = TablePartXform;\r\n","const _ = require('../../../utils/under-dash');\r\n\r\nconst colCache = require('../../../utils/col-cache');\r\nconst XmlStream = require('../../../utils/xml-stream');\r\n\r\nconst RelType = require('../../rel-type');\r\n\r\nconst Merges = require('./merges');\r\n\r\nconst BaseXform = require('../base-xform');\r\nconst ListXform = require('../list-xform');\r\nconst RowXform = require('./row-xform');\r\nconst ColXform = require('./col-xform');\r\nconst DimensionXform = require('./dimension-xform');\r\nconst HyperlinkXform = require('./hyperlink-xform');\r\nconst MergeCellXform = require('./merge-cell-xform');\r\nconst DataValidationsXform = require('./data-validations-xform');\r\nconst SheetPropertiesXform = require('./sheet-properties-xform');\r\nconst SheetFormatPropertiesXform = require('./sheet-format-properties-xform');\r\nconst SheetViewXform = require('./sheet-view-xform');\r\nconst SheetProtectionXform = require('./sheet-protection-xform');\r\nconst PageMarginsXform = require('./page-margins-xform');\r\nconst PageSetupXform = require('./page-setup-xform');\r\nconst PrintOptionsXform = require('./print-options-xform');\r\nconst AutoFilterXform = require('./auto-filter-xform');\r\nconst PictureXform = require('./picture-xform');\r\nconst DrawingXform = require('./drawing-xform');\r\nconst TablePartXform = require('./table-part-xform');\r\nconst RowBreaksXform = require('./row-breaks-xform');\r\nconst HeaderFooterXform = require('./header-footer-xform');\r\nconst ConditionalFormattingsXform = require('./cf/conditional-formattings-xform');\r\nconst ExtListXform = require('./ext-lst-xform');\r\n\r\nconst mergeRule = (rule, extRule) => {\r\n Object.keys(extRule).forEach(key => {\r\n const value = rule[key];\r\n const extValue = extRule[key];\r\n if (value === undefined && extValue !== undefined) {\r\n rule[key] = extValue;\r\n }\r\n });\r\n};\r\n\r\nconst mergeConditionalFormattings = (model, extModel) => {\r\n // conditional formattings are rendered in worksheet.conditionalFormatting and also in\r\n // worksheet.extLst.ext.x14:conditionalFormattings\r\n // some (e.g. dataBar) are even spread across both!\r\n if (!extModel || !extModel.length) {\r\n return model;\r\n }\r\n if (!model || !model.length) {\r\n return extModel;\r\n }\r\n\r\n // index model rules by x14Id\r\n const cfMap = {};\r\n const ruleMap = {};\r\n model.forEach(cf => {\r\n cfMap[cf.ref] = cf;\r\n cf.rules.forEach(rule => {\r\n const {x14Id} = rule;\r\n if (x14Id) {\r\n ruleMap[x14Id] = rule;\r\n }\r\n });\r\n });\r\n\r\n extModel.forEach(extCf => {\r\n extCf.rules.forEach(extRule => {\r\n const rule = ruleMap[extRule.x14Id];\r\n if (rule) {\r\n // merge with matching rule\r\n mergeRule(rule, extRule);\r\n } else if (cfMap[extCf.ref]) {\r\n // reuse existing cf ref\r\n cfMap[extCf.ref].rules.push(extRule);\r\n } else {\r\n // create new cf\r\n model.push({\r\n ref: extCf.ref,\r\n rules: [extRule],\r\n });\r\n }\r\n });\r\n });\r\n\r\n // need to cope with rules in extModel that don't exist in model\r\n return model;\r\n};\r\n\r\nclass WorkSheetXform extends BaseXform {\r\n constructor(options) {\r\n super();\r\n\r\n const {maxRows, maxCols} = options || {};\r\n this.map = {\r\n sheetPr: new SheetPropertiesXform(),\r\n dimension: new DimensionXform(),\r\n sheetViews: new ListXform({\r\n tag: 'sheetViews',\r\n count: false,\r\n childXform: new SheetViewXform(),\r\n }),\r\n sheetFormatPr: new SheetFormatPropertiesXform(),\r\n cols: new ListXform({tag: 'cols', count: false, childXform: new ColXform()}),\r\n sheetData: new ListXform({\r\n tag: 'sheetData',\r\n count: false,\r\n empty: true,\r\n childXform: new RowXform({maxItems: maxCols}),\r\n maxItems: maxRows,\r\n }),\r\n autoFilter: new AutoFilterXform(),\r\n mergeCells: new ListXform({tag: 'mergeCells', count: true, childXform: new MergeCellXform()}),\r\n rowBreaks: new RowBreaksXform(),\r\n hyperlinks: new ListXform({\r\n tag: 'hyperlinks',\r\n count: false,\r\n childXform: new HyperlinkXform(),\r\n }),\r\n pageMargins: new PageMarginsXform(),\r\n dataValidations: new DataValidationsXform(),\r\n pageSetup: new PageSetupXform(),\r\n headerFooter: new HeaderFooterXform(),\r\n printOptions: new PrintOptionsXform(),\r\n picture: new PictureXform(),\r\n drawing: new DrawingXform(),\r\n sheetProtection: new SheetProtectionXform(),\r\n tableParts: new ListXform({tag: 'tableParts', count: true, childXform: new TablePartXform()}),\r\n conditionalFormatting: new ConditionalFormattingsXform(),\r\n extLst: new ExtListXform(),\r\n };\r\n }\r\n\r\n prepare(model, options) {\r\n options.merges = new Merges();\r\n model.hyperlinks = options.hyperlinks = [];\r\n model.comments = options.comments = [];\r\n\r\n options.formulae = {};\r\n options.siFormulae = 0;\r\n this.map.cols.prepare(model.cols, options);\r\n this.map.sheetData.prepare(model.rows, options);\r\n this.map.conditionalFormatting.prepare(model.conditionalFormattings, options);\r\n\r\n model.mergeCells = options.merges.mergeCells;\r\n\r\n // prepare relationships\r\n const rels = (model.rels = []);\r\n\r\n function nextRid(r) {\r\n return `rId${r.length + 1}`;\r\n }\r\n\r\n model.hyperlinks.forEach(hyperlink => {\r\n const rId = nextRid(rels);\r\n hyperlink.rId = rId;\r\n rels.push({\r\n Id: rId,\r\n Type: RelType.Hyperlink,\r\n Target: hyperlink.target,\r\n TargetMode: 'External',\r\n });\r\n });\r\n\r\n // prepare comment relationships\r\n if (model.comments.length > 0) {\r\n const comment = {\r\n Id: nextRid(rels),\r\n Type: RelType.Comments,\r\n Target: `../comments${model.id}.xml`,\r\n };\r\n rels.push(comment);\r\n const vmlDrawing = {\r\n Id: nextRid(rels),\r\n Type: RelType.VmlDrawing,\r\n Target: `../drawings/vmlDrawing${model.id}.vml`,\r\n };\r\n rels.push(vmlDrawing);\r\n\r\n model.comments.forEach(item => {\r\n item.refAddress = colCache.decodeAddress(item.ref);\r\n });\r\n\r\n options.commentRefs.push({\r\n commentName: `comments${model.id}`,\r\n vmlDrawing: `vmlDrawing${model.id}`,\r\n });\r\n }\r\n\r\n const drawingRelsHash = [];\r\n let bookImage;\r\n model.media.forEach(medium => {\r\n if (medium.type === 'background') {\r\n const rId = nextRid(rels);\r\n bookImage = options.media[medium.imageId];\r\n rels.push({\r\n Id: rId,\r\n Type: RelType.Image,\r\n Target: `../media/${bookImage.name}.${bookImage.extension}`,\r\n });\r\n model.background = {\r\n rId,\r\n };\r\n model.image = options.media[medium.imageId];\r\n } else if (medium.type === 'image') {\r\n let {drawing} = model;\r\n bookImage = options.media[medium.imageId];\r\n if (!drawing) {\r\n drawing = model.drawing = {\r\n rId: nextRid(rels),\r\n name: `drawing${++options.drawingsCount}`,\r\n anchors: [],\r\n rels: [],\r\n };\r\n options.drawings.push(drawing);\r\n rels.push({\r\n Id: drawing.rId,\r\n Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing',\r\n Target: `../drawings/${drawing.name}.xml`,\r\n });\r\n }\r\n let rIdImage =\r\n this.preImageId === medium.imageId\r\n ? drawingRelsHash[medium.imageId]\r\n : drawingRelsHash[drawing.rels.length];\r\n if (!rIdImage) {\r\n rIdImage = nextRid(drawing.rels);\r\n drawingRelsHash[drawing.rels.length] = rIdImage;\r\n drawing.rels.push({\r\n Id: rIdImage,\r\n Type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image',\r\n Target: `../media/${bookImage.name}.${bookImage.extension}`,\r\n });\r\n }\r\n\r\n const anchor = {\r\n picture: {\r\n rId: rIdImage,\r\n },\r\n range: medium.range,\r\n };\r\n if (medium.hyperlinks && medium.hyperlinks.hyperlink) {\r\n const rIdHyperLink = nextRid(drawing.rels);\r\n drawingRelsHash[drawing.rels.length] = rIdHyperLink;\r\n anchor.picture.hyperlinks = {\r\n tooltip: medium.hyperlinks.tooltip,\r\n rId: rIdHyperLink,\r\n };\r\n drawing.rels.push({\r\n Id: rIdHyperLink,\r\n Type: RelType.Hyperlink,\r\n Target: medium.hyperlinks.hyperlink,\r\n TargetMode: 'External',\r\n });\r\n }\r\n this.preImageId = medium.imageId;\r\n drawing.anchors.push(anchor);\r\n }\r\n });\r\n\r\n // prepare tables\r\n model.tables.forEach(table => {\r\n // relationships\r\n const rId = nextRid(rels);\r\n table.rId = rId;\r\n rels.push({\r\n Id: rId,\r\n Type: RelType.Table,\r\n Target: `../tables/${table.target}`,\r\n });\r\n\r\n // dynamic styles\r\n table.columns.forEach(column => {\r\n const {style} = column;\r\n if (style) {\r\n column.dxfId = options.styles.addDxfStyle(style);\r\n }\r\n });\r\n });\r\n\r\n // prepare ext items\r\n this.map.extLst.prepare(model, options);\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n xmlStream.openNode('worksheet', WorkSheetXform.WORKSHEET_ATTRIBUTES);\r\n\r\n const sheetFormatPropertiesModel = model.properties\r\n ? {\r\n defaultRowHeight: model.properties.defaultRowHeight,\r\n dyDescent: model.properties.dyDescent,\r\n outlineLevelCol: model.properties.outlineLevelCol,\r\n outlineLevelRow: model.properties.outlineLevelRow,\r\n }\r\n : undefined;\r\n if (model.properties && model.properties.defaultColWidth) {\r\n sheetFormatPropertiesModel.defaultColWidth = model.properties.defaultColWidth;\r\n }\r\n const sheetPropertiesModel = {\r\n outlineProperties: model.properties && model.properties.outlineProperties,\r\n tabColor: model.properties && model.properties.tabColor,\r\n pageSetup:\r\n model.pageSetup && model.pageSetup.fitToPage\r\n ? {\r\n fitToPage: model.pageSetup.fitToPage,\r\n }\r\n : undefined,\r\n };\r\n const pageMarginsModel = model.pageSetup && model.pageSetup.margins;\r\n const printOptionsModel = {\r\n showRowColHeaders: model.pageSetup && model.pageSetup.showRowColHeaders,\r\n showGridLines: model.pageSetup && model.pageSetup.showGridLines,\r\n horizontalCentered: model.pageSetup && model.pageSetup.horizontalCentered,\r\n verticalCentered: model.pageSetup && model.pageSetup.verticalCentered,\r\n };\r\n const sheetProtectionModel = model.sheetProtection;\r\n\r\n this.map.sheetPr.render(xmlStream, sheetPropertiesModel);\r\n this.map.dimension.render(xmlStream, model.dimensions);\r\n this.map.sheetViews.render(xmlStream, model.views);\r\n this.map.sheetFormatPr.render(xmlStream, sheetFormatPropertiesModel);\r\n this.map.cols.render(xmlStream, model.cols);\r\n this.map.sheetData.render(xmlStream, model.rows);\r\n this.map.sheetProtection.render(xmlStream, sheetProtectionModel); // Note: must be after sheetData and before autoFilter\r\n this.map.autoFilter.render(xmlStream, model.autoFilter);\r\n this.map.mergeCells.render(xmlStream, model.mergeCells);\r\n this.map.conditionalFormatting.render(xmlStream, model.conditionalFormattings); // Note: must be before dataValidations\r\n this.map.dataValidations.render(xmlStream, model.dataValidations);\r\n\r\n // For some reason hyperlinks have to be after the data validations\r\n this.map.hyperlinks.render(xmlStream, model.hyperlinks);\r\n\r\n this.map.printOptions.render(xmlStream, printOptionsModel); // Note: must be before pageMargins\r\n this.map.pageMargins.render(xmlStream, pageMarginsModel);\r\n this.map.pageSetup.render(xmlStream, model.pageSetup);\r\n this.map.headerFooter.render(xmlStream, model.headerFooter);\r\n this.map.rowBreaks.render(xmlStream, model.rowBreaks);\r\n this.map.drawing.render(xmlStream, model.drawing); // Note: must be after rowBreaks\r\n this.map.picture.render(xmlStream, model.background); // Note: must be after drawing\r\n this.map.tableParts.render(xmlStream, model.tables);\r\n\r\n this.map.extLst.render(xmlStream, model);\r\n\r\n if (model.rels) {\r\n // add a node for each comment\r\n model.rels.forEach(rel => {\r\n if (rel.Type === RelType.VmlDrawing) {\r\n xmlStream.leafNode('legacyDrawing', {'r:id': rel.Id});\r\n }\r\n });\r\n }\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n\r\n if (node.name === 'worksheet') {\r\n _.each(this.map, xform => {\r\n xform.reset();\r\n });\r\n return true;\r\n }\r\n\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n return true;\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case 'worksheet': {\r\n const properties = this.map.sheetFormatPr.model || {};\r\n if (this.map.sheetPr.model && this.map.sheetPr.model.tabColor) {\r\n properties.tabColor = this.map.sheetPr.model.tabColor;\r\n }\r\n if (this.map.sheetPr.model && this.map.sheetPr.model.outlineProperties) {\r\n properties.outlineProperties = this.map.sheetPr.model.outlineProperties;\r\n }\r\n const sheetProperties = {\r\n fitToPage:\r\n (this.map.sheetPr.model &&\r\n this.map.sheetPr.model.pageSetup &&\r\n this.map.sheetPr.model.pageSetup.fitToPage) ||\r\n false,\r\n margins: this.map.pageMargins.model,\r\n };\r\n const pageSetup = Object.assign(\r\n sheetProperties,\r\n this.map.pageSetup.model,\r\n this.map.printOptions.model\r\n );\r\n const conditionalFormattings = mergeConditionalFormattings(\r\n this.map.conditionalFormatting.model,\r\n this.map.extLst.model && this.map.extLst.model['x14:conditionalFormattings']\r\n );\r\n this.model = {\r\n dimensions: this.map.dimension.model,\r\n cols: this.map.cols.model,\r\n rows: this.map.sheetData.model,\r\n mergeCells: this.map.mergeCells.model,\r\n hyperlinks: this.map.hyperlinks.model,\r\n dataValidations: this.map.dataValidations.model,\r\n properties,\r\n views: this.map.sheetViews.model,\r\n pageSetup,\r\n headerFooter: this.map.headerFooter.model,\r\n background: this.map.picture.model,\r\n drawing: this.map.drawing.model,\r\n tables: this.map.tableParts.model,\r\n conditionalFormattings,\r\n };\r\n\r\n if (this.map.autoFilter.model) {\r\n this.model.autoFilter = this.map.autoFilter.model;\r\n }\r\n if (this.map.sheetProtection.model) {\r\n this.model.sheetProtection = this.map.sheetProtection.model;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n default:\r\n // not quite sure how we get here!\r\n return true;\r\n }\r\n }\r\n\r\n reconcile(model, options) {\r\n // options.merges = new Merges();\r\n // options.merges.reconcile(model.mergeCells, model.rows);\r\n const rels = (model.relationships || []).reduce((h, rel) => {\r\n h[rel.Id] = rel;\r\n if (rel.Type === RelType.Comments) {\r\n model.comments = options.comments[rel.Target].comments;\r\n }\r\n if (rel.Type === RelType.VmlDrawing && model.comments && model.comments.length) {\r\n const vmlComment = options.vmlDrawings[rel.Target].comments;\r\n model.comments.forEach((comment, index) => {\r\n comment.note = Object.assign({}, comment.note, vmlComment[index]);\r\n });\r\n }\r\n return h;\r\n }, {});\r\n options.commentsMap = (model.comments || []).reduce((h, comment) => {\r\n if (comment.ref) {\r\n h[comment.ref] = comment;\r\n }\r\n return h;\r\n }, {});\r\n options.hyperlinkMap = (model.hyperlinks || []).reduce((h, hyperlink) => {\r\n if (hyperlink.rId) {\r\n h[hyperlink.address] = rels[hyperlink.rId].Target;\r\n }\r\n return h;\r\n }, {});\r\n options.formulae = {};\r\n\r\n // compact the rows and cells\r\n model.rows = (model.rows && model.rows.filter(Boolean)) || [];\r\n model.rows.forEach(row => {\r\n row.cells = (row.cells && row.cells.filter(Boolean)) || [];\r\n });\r\n\r\n this.map.cols.reconcile(model.cols, options);\r\n this.map.sheetData.reconcile(model.rows, options);\r\n this.map.conditionalFormatting.reconcile(model.conditionalFormattings, options);\r\n\r\n model.media = [];\r\n if (model.drawing) {\r\n const drawingRel = rels[model.drawing.rId];\r\n const match = drawingRel.Target.match(/\\/drawings\\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);\r\n if (match) {\r\n const drawingName = match[1];\r\n const drawing = options.drawings[drawingName];\r\n drawing.anchors.forEach(anchor => {\r\n if (anchor.medium) {\r\n const image = {\r\n type: 'image',\r\n imageId: anchor.medium.index,\r\n range: anchor.range,\r\n hyperlinks: anchor.picture.hyperlinks,\r\n };\r\n model.media.push(image);\r\n }\r\n });\r\n }\r\n }\r\n\r\n const backgroundRel = model.background && rels[model.background.rId];\r\n if (backgroundRel) {\r\n const target = backgroundRel.Target.split('/media/')[1];\r\n const imageId = options.mediaIndex && options.mediaIndex[target];\r\n if (imageId !== undefined) {\r\n model.media.push({\r\n type: 'background',\r\n imageId,\r\n });\r\n }\r\n }\r\n\r\n model.tables = (model.tables || []).map(tablePart => {\r\n const rel = rels[tablePart.rId];\r\n return options.tables[rel.Target];\r\n });\r\n\r\n delete model.relationships;\r\n delete model.hyperlinks;\r\n delete model.comments;\r\n }\r\n}\r\n\r\nWorkSheetXform.WORKSHEET_ATTRIBUTES = {\r\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\r\n 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\r\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\r\n 'mc:Ignorable': 'x14ac',\r\n 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',\r\n};\r\n\r\nmodule.exports = WorkSheetXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass BooleanXform extends BaseXform {\r\n constructor(options) {\r\n super();\r\n\r\n this.tag = options.tag;\r\n this.attr = options.attr;\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n xmlStream.openNode(this.tag);\r\n xmlStream.closeNode();\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === this.tag) {\r\n this.model = true;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = BooleanXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass DateXform extends BaseXform {\r\n constructor(options) {\r\n super();\r\n\r\n this.tag = options.tag;\r\n this.attr = options.attr;\r\n this.attrs = options.attrs;\r\n this._format =\r\n options.format ||\r\n function(dt) {\r\n try {\r\n if (Number.isNaN(dt.getTime())) return '';\r\n return dt.toISOString();\r\n } catch (e) {\r\n return '';\r\n }\r\n };\r\n this._parse =\r\n options.parse ||\r\n function(str) {\r\n return new Date(str);\r\n };\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n xmlStream.openNode(this.tag);\r\n if (this.attrs) {\r\n xmlStream.addAttributes(this.attrs);\r\n }\r\n if (this.attr) {\r\n xmlStream.addAttribute(this.attr, this._format(model));\r\n } else {\r\n xmlStream.writeText(this._format(model));\r\n }\r\n xmlStream.closeNode();\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === this.tag) {\r\n if (this.attr) {\r\n this.model = this._parse(node.attributes[this.attr]);\r\n } else {\r\n this.text = [];\r\n }\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (!this.attr) {\r\n this.text.push(text);\r\n }\r\n }\r\n\r\n parseClose() {\r\n if (!this.attr) {\r\n this.model = this._parse(this.text.join(''));\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = DateXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass IntegerXform extends BaseXform {\r\n constructor(options) {\r\n super();\r\n\r\n this.tag = options.tag;\r\n this.attr = options.attr;\r\n this.attrs = options.attrs;\r\n\r\n // option to render zero\r\n this.zero = options.zero;\r\n }\r\n\r\n render(xmlStream, model) {\r\n // int is different to float in that zero is not rendered\r\n if (model || this.zero) {\r\n xmlStream.openNode(this.tag);\r\n if (this.attrs) {\r\n xmlStream.addAttributes(this.attrs);\r\n }\r\n if (this.attr) {\r\n xmlStream.addAttribute(this.attr, model);\r\n } else {\r\n xmlStream.writeText(model);\r\n }\r\n xmlStream.closeNode();\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === this.tag) {\r\n if (this.attr) {\r\n this.model = parseInt(node.attributes[this.attr], 10);\r\n } else {\r\n this.text = [];\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText(text) {\r\n if (!this.attr) {\r\n this.text.push(text);\r\n }\r\n }\r\n\r\n parseClose() {\r\n if (!this.attr) {\r\n this.model = parseInt(this.text.join('') || 0, 10);\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = IntegerXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass StringXform extends BaseXform {\r\n constructor(options) {\r\n super();\r\n\r\n this.tag = options.tag;\r\n this.attr = options.attr;\r\n this.attrs = options.attrs;\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model !== undefined) {\r\n xmlStream.openNode(this.tag);\r\n if (this.attrs) {\r\n xmlStream.addAttributes(this.attrs);\r\n }\r\n if (this.attr) {\r\n xmlStream.addAttribute(this.attr, model);\r\n } else {\r\n xmlStream.writeText(model);\r\n }\r\n xmlStream.closeNode();\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === this.tag) {\r\n if (this.attr) {\r\n this.model = node.attributes[this.attr];\r\n } else {\r\n this.text = [];\r\n }\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (!this.attr) {\r\n this.text.push(text);\r\n }\r\n }\r\n\r\n parseClose() {\r\n if (!this.attr) {\r\n this.model = this.text.join('');\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = StringXform;\r\n","const BaseXform = require('./base-xform');\r\nconst XmlStream = require('../../utils/xml-stream');\r\n\r\n// const model = {\r\n// tag: 'name',\r\n// $: {attr: 'value'},\r\n// c: [\r\n// { tag: 'child' }\r\n// ],\r\n// t: 'some text'\r\n// };\r\n\r\nfunction build(xmlStream, model) {\r\n xmlStream.openNode(model.tag, model.$);\r\n if (model.c) {\r\n model.c.forEach(child => {\r\n build(xmlStream, child);\r\n });\r\n }\r\n if (model.t) {\r\n xmlStream.writeText(model.t);\r\n }\r\n xmlStream.closeNode();\r\n}\r\n\r\nclass StaticXform extends BaseXform {\r\n constructor(model) {\r\n super();\r\n\r\n // This class is an optimisation for static (unimportant and unchanging) xml\r\n // It is stateless - apart from its static model and so can be used as a singleton\r\n // Being stateless - it will only track entry to and exit from it's root xml tag during parsing and nothing else\r\n // Known issues:\r\n // since stateless - parseOpen always returns true. Parent xform must know when to start using this xform\r\n // if the root tag is recursive, the parsing will behave unpredictably\r\n this._model = model;\r\n }\r\n\r\n render(xmlStream) {\r\n if (!this._xml) {\r\n const stream = new XmlStream();\r\n build(stream, this._model);\r\n this._xml = stream.xml;\r\n }\r\n xmlStream.writeXml(this._xml);\r\n }\r\n\r\n parseOpen() {\r\n return true;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n switch (name) {\r\n case this._model.tag:\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = StaticXform;\r\n","const TextXform = require('./text-xform');\r\nconst RichTextXform = require('./rich-text-xform');\r\n\r\nconst BaseXform = require('../base-xform');\r\n\r\n// \r\n// (its pronounciation in KATAKANA)\r\n// \r\n\r\nclass PhoneticTextXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n r: new RichTextXform(),\r\n t: new TextXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'rPh';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {\r\n sb: model.sb || 0,\r\n eb: model.eb || 0,\r\n });\r\n if (model && model.hasOwnProperty('richText') && model.richText) {\r\n const {r} = this.map;\r\n model.richText.forEach(text => {\r\n r.render(xmlStream, text);\r\n });\r\n } else if (model) {\r\n this.map.t.render(xmlStream, model.text);\r\n }\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n const {name} = node;\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n if (name === this.tag) {\r\n this.model = {\r\n sb: parseInt(node.attributes.sb, 10),\r\n eb: parseInt(node.attributes.eb, 10),\r\n };\r\n return true;\r\n }\r\n this.parser = this.map[name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n switch (name) {\r\n case 'r': {\r\n let rt = this.model.richText;\r\n if (!rt) {\r\n rt = this.model.richText = [];\r\n }\r\n rt.push(this.parser.model);\r\n break;\r\n }\r\n case 't':\r\n this.model.text = this.parser.model;\r\n break;\r\n default:\r\n break;\r\n }\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = PhoneticTextXform;\r\n","const TextXform = require('./text-xform');\r\nconst FontXform = require('../style/font-xform');\r\n\r\nconst BaseXform = require('../base-xform');\r\n\r\n// \r\n// \r\n// \r\n// \r\n// \r\n// \r\n// \r\n// \r\n// is \r\n// \r\n\r\nclass RichTextXform extends BaseXform {\r\n constructor(model) {\r\n super();\r\n\r\n this.model = model;\r\n }\r\n\r\n get tag() {\r\n return 'r';\r\n }\r\n\r\n get textXform() {\r\n return this._textXform || (this._textXform = new TextXform());\r\n }\r\n\r\n get fontXform() {\r\n return this._fontXform || (this._fontXform = new FontXform(RichTextXform.FONT_OPTIONS));\r\n }\r\n\r\n render(xmlStream, model) {\r\n model = model || this.model;\r\n\r\n xmlStream.openNode('r');\r\n if (model.font) {\r\n this.fontXform.render(xmlStream, model.font);\r\n }\r\n this.textXform.render(xmlStream, model.text);\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'r':\r\n this.model = {};\r\n return true;\r\n case 't':\r\n this.parser = this.textXform;\r\n this.parser.parseOpen(node);\r\n return true;\r\n case 'rPr':\r\n this.parser = this.fontXform;\r\n this.parser.parseOpen(node);\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n switch (name) {\r\n case 'r':\r\n return false;\r\n case 't':\r\n this.model.text = this.parser.model;\r\n this.parser = undefined;\r\n return true;\r\n case 'rPr':\r\n this.model.font = this.parser.model;\r\n this.parser = undefined;\r\n return true;\r\n default:\r\n if (this.parser) {\r\n this.parser.parseClose(name);\r\n }\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nRichTextXform.FONT_OPTIONS = {\r\n tagName: 'rPr',\r\n fontNameTag: 'rFont',\r\n};\r\n\r\nmodule.exports = RichTextXform;\r\n","const TextXform = require('./text-xform');\r\nconst RichTextXform = require('./rich-text-xform');\r\nconst PhoneticTextXform = require('./phonetic-text-xform');\r\n\r\nconst BaseXform = require('../base-xform');\r\n\r\n// \r\n// ...\r\n// \r\n// \r\n// \r\n// \r\n\r\nclass SharedStringXform extends BaseXform {\r\n constructor(model) {\r\n super();\r\n\r\n this.model = model;\r\n\r\n this.map = {\r\n r: new RichTextXform(),\r\n t: new TextXform(),\r\n rPh: new PhoneticTextXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'si';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag);\r\n if (model && model.hasOwnProperty('richText') && model.richText) {\r\n if (model.richText.length) {\r\n model.richText.forEach(text => {\r\n this.map.r.render(xmlStream, text);\r\n });\r\n } else {\r\n this.map.t.render(xmlStream, '');\r\n }\r\n } else if (model !== undefined && model !== null) {\r\n this.map.t.render(xmlStream, model);\r\n }\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n const {name} = node;\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n if (name === this.tag) {\r\n this.model = {};\r\n return true;\r\n }\r\n this.parser = this.map[name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n switch (name) {\r\n case 'r': {\r\n let rt = this.model.richText;\r\n if (!rt) {\r\n rt = this.model.richText = [];\r\n }\r\n rt.push(this.parser.model);\r\n break;\r\n }\r\n case 't':\r\n this.model = this.parser.model;\r\n break;\r\n default:\r\n break;\r\n }\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = SharedStringXform;\r\n","const XmlStream = require('../../../utils/xml-stream');\r\nconst BaseXform = require('../base-xform');\r\nconst SharedStringXform = require('./shared-string-xform');\r\n\r\nclass SharedStringsXform extends BaseXform {\r\n constructor(model) {\r\n super();\r\n\r\n this.model = model || {\r\n values: [],\r\n count: 0,\r\n };\r\n this.hash = Object.create(null);\r\n this.rich = Object.create(null);\r\n }\r\n\r\n get sharedStringXform() {\r\n return this._sharedStringXform || (this._sharedStringXform = new SharedStringXform());\r\n }\r\n\r\n get values() {\r\n return this.model.values;\r\n }\r\n\r\n get uniqueCount() {\r\n return this.model.values.length;\r\n }\r\n\r\n get count() {\r\n return this.model.count;\r\n }\r\n\r\n getString(index) {\r\n return this.model.values[index];\r\n }\r\n\r\n add(value) {\r\n return value.richText ? this.addRichText(value) : this.addText(value);\r\n }\r\n\r\n addText(value) {\r\n let index = this.hash[value];\r\n if (index === undefined) {\r\n index = this.hash[value] = this.model.values.length;\r\n this.model.values.push(value);\r\n }\r\n this.model.count++;\r\n return index;\r\n }\r\n\r\n addRichText(value) {\r\n // TODO: add WeakMap here\r\n const xml = this.sharedStringXform.toXml(value);\r\n let index = this.rich[xml];\r\n if (index === undefined) {\r\n index = this.rich[xml] = this.model.values.length;\r\n this.model.values.push(value);\r\n }\r\n this.model.count++;\r\n return index;\r\n }\r\n\r\n // \r\n // \" uniqueCount=\"<%=count%>\">\r\n // <%=text%>\r\n // \r\n // \r\n\r\n render(xmlStream, model) {\r\n model = model || this._values;\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n\r\n xmlStream.openNode('sst', {\r\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\r\n count: model.count,\r\n uniqueCount: model.values.length,\r\n });\r\n\r\n const sx = this.sharedStringXform;\r\n model.values.forEach(sharedString => {\r\n sx.render(xmlStream, sharedString);\r\n });\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'sst':\r\n return true;\r\n case 'si':\r\n this.parser = this.sharedStringXform;\r\n this.parser.parseOpen(node);\r\n return true;\r\n default:\r\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.model.values.push(this.parser.model);\r\n this.model.count++;\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case 'sst':\r\n return false;\r\n default:\r\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = SharedStringsXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\n// is \r\n\r\nclass TextXform extends BaseXform {\r\n get tag() {\r\n return 't';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode('t');\r\n if (/^\\s|\\n|\\s$/.test(model)) {\r\n xmlStream.addAttribute('xml:space', 'preserve');\r\n }\r\n xmlStream.writeText(model);\r\n xmlStream.closeNode();\r\n }\r\n\r\n get model() {\r\n return this._text\r\n .join('')\r\n .replace(/_x([0-9A-F]{4})_/g, ($0, $1) => String.fromCharCode(parseInt($1, 16)));\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case 't':\r\n this._text = [];\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n this._text.push(text);\r\n }\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = TextXform;\r\n","const Enums = require('../../../doc/enums');\r\n\r\nconst utils = require('../../../utils/utils');\r\nconst BaseXform = require('../base-xform');\r\n\r\nconst validation = {\r\n horizontalValues: [\r\n 'left',\r\n 'center',\r\n 'right',\r\n 'fill',\r\n 'centerContinuous',\r\n 'distributed',\r\n 'justify',\r\n ].reduce((p, v) => {\r\n p[v] = true;\r\n return p;\r\n }, {}),\r\n horizontal(value) {\r\n return this.horizontalValues[value] ? value : undefined;\r\n },\r\n\r\n verticalValues: ['top', 'middle', 'bottom', 'distributed', 'justify'].reduce((p, v) => {\r\n p[v] = true;\r\n return p;\r\n }, {}),\r\n vertical(value) {\r\n if (value === 'middle') return 'center';\r\n return this.verticalValues[value] ? value : undefined;\r\n },\r\n wrapText(value) {\r\n return value ? true : undefined;\r\n },\r\n shrinkToFit(value) {\r\n return value ? true : undefined;\r\n },\r\n textRotation(value) {\r\n switch (value) {\r\n case 'vertical':\r\n return value;\r\n default:\r\n value = utils.validInt(value);\r\n return value >= -90 && value <= 90 ? value : undefined;\r\n }\r\n },\r\n indent(value) {\r\n value = utils.validInt(value);\r\n return Math.max(0, value);\r\n },\r\n readingOrder(value) {\r\n switch (value) {\r\n case 'ltr':\r\n return Enums.ReadingOrder.LeftToRight;\r\n case 'rtl':\r\n return Enums.ReadingOrder.RightToLeft;\r\n default:\r\n return undefined;\r\n }\r\n },\r\n};\r\n\r\nconst textRotationXform = {\r\n toXml(textRotation) {\r\n textRotation = validation.textRotation(textRotation);\r\n if (textRotation) {\r\n if (textRotation === 'vertical') {\r\n return 255;\r\n }\r\n\r\n const tr = Math.round(textRotation);\r\n if (tr >= 0 && tr <= 90) {\r\n return tr;\r\n }\r\n\r\n if (tr < 0 && tr >= -90) {\r\n return 90 - tr;\r\n }\r\n }\r\n return undefined;\r\n },\r\n toModel(textRotation) {\r\n const tr = utils.validInt(textRotation);\r\n if (tr !== undefined) {\r\n if (tr === 255) {\r\n return 'vertical';\r\n }\r\n if (tr >= 0 && tr <= 90) {\r\n return tr;\r\n }\r\n if (tr > 90 && tr <= 180) {\r\n return 90 - tr;\r\n }\r\n }\r\n return undefined;\r\n },\r\n};\r\n\r\n// Alignment encapsulates translation from style.alignment model to/from xlsx\r\nclass AlignmentXform extends BaseXform {\r\n get tag() {\r\n return 'alignment';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.addRollback();\r\n xmlStream.openNode('alignment');\r\n\r\n let isValid = false;\r\n function add(name, value) {\r\n if (value) {\r\n xmlStream.addAttribute(name, value);\r\n isValid = true;\r\n }\r\n }\r\n add('horizontal', validation.horizontal(model.horizontal));\r\n add('vertical', validation.vertical(model.vertical));\r\n add('wrapText', validation.wrapText(model.wrapText) ? '1' : false);\r\n add('shrinkToFit', validation.shrinkToFit(model.shrinkToFit) ? '1' : false);\r\n add('indent', validation.indent(model.indent));\r\n add('textRotation', textRotationXform.toXml(model.textRotation));\r\n add('readingOrder', validation.readingOrder(model.readingOrder));\r\n\r\n xmlStream.closeNode();\r\n\r\n if (isValid) {\r\n xmlStream.commit();\r\n } else {\r\n xmlStream.rollback();\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n const model = {};\r\n\r\n let valid = false;\r\n function add(truthy, name, value) {\r\n if (truthy) {\r\n model[name] = value;\r\n valid = true;\r\n }\r\n }\r\n add(node.attributes.horizontal, 'horizontal', node.attributes.horizontal);\r\n add(\r\n node.attributes.vertical,\r\n 'vertical',\r\n node.attributes.vertical === 'center' ? 'middle' : node.attributes.vertical\r\n );\r\n add(node.attributes.wrapText, 'wrapText', !!node.attributes.wrapText);\r\n add(node.attributes.shrinkToFit, 'shrinkToFit', !!node.attributes.shrinkToFit);\r\n add(node.attributes.indent, 'indent', parseInt(node.attributes.indent, 10));\r\n add(\r\n node.attributes.textRotation,\r\n 'textRotation',\r\n textRotationXform.toModel(node.attributes.textRotation)\r\n );\r\n add(\r\n node.attributes.readingOrder,\r\n 'readingOrder',\r\n node.attributes.readingOrder === '2' ? 'rtl' : 'ltr'\r\n );\r\n\r\n this.model = valid ? model : null;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = AlignmentXform;\r\n","/* eslint-disable max-classes-per-file */\r\nconst BaseXform = require('../base-xform');\r\n\r\nconst ColorXform = require('./color-xform');\r\n\r\nclass EdgeXform extends BaseXform {\r\n constructor(name) {\r\n super();\r\n\r\n this.name = name;\r\n this.map = {\r\n color: new ColorXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return this.name;\r\n }\r\n\r\n render(xmlStream, model, defaultColor) {\r\n const color = (model && model.color) || defaultColor || this.defaultColor;\r\n xmlStream.openNode(this.name);\r\n if (model && model.style) {\r\n xmlStream.addAttribute('style', model.style);\r\n if (color) {\r\n this.map.color.render(xmlStream, color);\r\n }\r\n }\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case this.name: {\r\n const {style} = node.attributes;\r\n if (style) {\r\n this.model = {\r\n style,\r\n };\r\n } else {\r\n this.model = undefined;\r\n }\r\n return true;\r\n }\r\n case 'color':\r\n this.parser = this.map.color;\r\n this.parser.parseOpen(node);\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n\r\n if (name === this.name) {\r\n if (this.map.color.model) {\r\n if (!this.model) {\r\n this.model = {};\r\n }\r\n this.model.color = this.map.color.model;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n validStyle(value) {\r\n return EdgeXform.validStyleValues[value];\r\n }\r\n}\r\n\r\nEdgeXform.validStyleValues = [\r\n 'thin',\r\n 'dotted',\r\n 'dashDot',\r\n 'hair',\r\n 'dashDotDot',\r\n 'slantDashDot',\r\n 'mediumDashed',\r\n 'mediumDashDotDot',\r\n 'mediumDashDot',\r\n 'medium',\r\n 'double',\r\n 'thick',\r\n].reduce((p, v) => {\r\n p[v] = true;\r\n return p;\r\n}, {});\r\n\r\n// Border encapsulates translation from border model to/from xlsx\r\nclass BorderXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n top: new EdgeXform('top'),\r\n left: new EdgeXform('left'),\r\n bottom: new EdgeXform('bottom'),\r\n right: new EdgeXform('right'),\r\n diagonal: new EdgeXform('diagonal'),\r\n };\r\n }\r\n\r\n render(xmlStream, model) {\r\n const {color} = model;\r\n xmlStream.openNode('border');\r\n if (model.diagonal && model.diagonal.style) {\r\n if (model.diagonal.up) {\r\n xmlStream.addAttribute('diagonalUp', '1');\r\n }\r\n if (model.diagonal.down) {\r\n xmlStream.addAttribute('diagonalDown', '1');\r\n }\r\n }\r\n function add(edgeModel, edgeXform) {\r\n if (edgeModel && !edgeModel.color && model.color) {\r\n // don't mess with incoming models\r\n edgeModel = {\r\n ...edgeModel,\r\n color: model.color,\r\n };\r\n }\r\n edgeXform.render(xmlStream, edgeModel, color);\r\n }\r\n add(model.left, this.map.left);\r\n add(model.right, this.map.right);\r\n add(model.top, this.map.top);\r\n add(model.bottom, this.map.bottom);\r\n add(model.diagonal, this.map.diagonal);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'border':\r\n this.reset();\r\n this.diagonalUp = !!node.attributes.diagonalUp;\r\n this.diagonalDown = !!node.attributes.diagonalDown;\r\n return true;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n if (name === 'border') {\r\n const model = (this.model = {});\r\n const add = function(key, edgeModel, extensions) {\r\n if (edgeModel) {\r\n if (extensions) {\r\n Object.assign(edgeModel, extensions);\r\n }\r\n model[key] = edgeModel;\r\n }\r\n };\r\n add('left', this.map.left.model);\r\n add('right', this.map.right.model);\r\n add('top', this.map.top.model);\r\n add('bottom', this.map.bottom.model);\r\n add('diagonal', this.map.diagonal.model, {up: this.diagonalUp, down: this.diagonalDown});\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = BorderXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\n// Color encapsulates translation from color model to/from xlsx\r\nclass ColorXform extends BaseXform {\r\n constructor(name) {\r\n super();\r\n\r\n // this.name controls the xm node name\r\n this.name = name || 'color';\r\n }\r\n\r\n get tag() {\r\n return this.name;\r\n }\r\n\r\n render(xmlStream, model) {\r\n if (model) {\r\n xmlStream.openNode(this.name);\r\n if (model.argb) {\r\n xmlStream.addAttribute('rgb', model.argb);\r\n } else if (model.theme !== undefined) {\r\n xmlStream.addAttribute('theme', model.theme);\r\n if (model.tint !== undefined) {\r\n xmlStream.addAttribute('tint', model.tint);\r\n }\r\n } else if (model.indexed !== undefined) {\r\n xmlStream.addAttribute('indexed', model.indexed);\r\n } else {\r\n xmlStream.addAttribute('auto', '1');\r\n }\r\n xmlStream.closeNode();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === this.name) {\r\n if (node.attributes.rgb) {\r\n this.model = {argb: node.attributes.rgb};\r\n } else if (node.attributes.theme) {\r\n this.model = {theme: parseInt(node.attributes.theme, 10)};\r\n if (node.attributes.tint) {\r\n this.model.tint = parseFloat(node.attributes.tint);\r\n }\r\n } else if (node.attributes.indexed) {\r\n this.model = {indexed: parseInt(node.attributes.indexed, 10)};\r\n } else {\r\n this.model = undefined;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = ColorXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nconst AlignmentXform = require('./alignment-xform');\r\nconst BorderXform = require('./border-xform');\r\nconst FillXform = require('./fill-xform');\r\nconst FontXform = require('./font-xform');\r\nconst NumFmtXform = require('./numfmt-xform');\r\nconst ProtectionXform = require('./protection-xform');\r\n\r\n// \r\n// Optional \r\n// Optional \r\n// \r\n\r\n// Style assists translation from style model to/from xlsx\r\nclass DxfXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n alignment: new AlignmentXform(),\r\n border: new BorderXform(),\r\n fill: new FillXform(),\r\n font: new FontXform(),\r\n numFmt: new NumFmtXform(),\r\n protection: new ProtectionXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'dxf';\r\n }\r\n\r\n // how do we generate dxfid?\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag);\r\n\r\n if (model.alignment) {\r\n this.map.alignment.render(xmlStream, model.alignment);\r\n }\r\n if (model.border) {\r\n this.map.border.render(xmlStream, model.border);\r\n }\r\n if (model.fill) {\r\n this.map.fill.render(xmlStream, model.fill);\r\n }\r\n if (model.font) {\r\n this.map.font.render(xmlStream, model.font);\r\n }\r\n if (model.numFmt) {\r\n this.map.numFmt.render(xmlStream, model.numFmt);\r\n }\r\n if (model.protection) {\r\n this.map.protection.render(xmlStream, model.protection);\r\n }\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n\r\n switch (node.name) {\r\n case this.tag:\r\n // this node is often repeated. Need to reset children\r\n this.reset();\r\n return true;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n if (name === this.tag) {\r\n this.model = {\r\n alignment: this.map.alignment.model,\r\n border: this.map.border.model,\r\n fill: this.map.fill.model,\r\n font: this.map.font.model,\r\n numFmt: this.map.numFmt.model,\r\n protection: this.map.protection.model,\r\n };\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nmodule.exports = DxfXform;\r\n","/* eslint-disable max-classes-per-file */\r\nconst BaseXform = require('../base-xform');\r\n\r\nconst ColorXform = require('./color-xform');\r\n\r\nclass StopXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n color: new ColorXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'stop';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode('stop');\r\n xmlStream.addAttribute('position', model.position);\r\n this.map.color.render(xmlStream, model.color);\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'stop':\r\n this.model = {\r\n position: parseFloat(node.attributes.position),\r\n };\r\n return true;\r\n case 'color':\r\n this.parser = this.map.color;\r\n this.parser.parseOpen(node);\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.model.color = this.parser.model;\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nclass PatternFillXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n fgColor: new ColorXform('fgColor'),\r\n bgColor: new ColorXform('bgColor'),\r\n };\r\n }\r\n\r\n get name() {\r\n return 'pattern';\r\n }\r\n\r\n get tag() {\r\n return 'patternFill';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode('patternFill');\r\n xmlStream.addAttribute('patternType', model.pattern);\r\n if (model.fgColor) {\r\n this.map.fgColor.render(xmlStream, model.fgColor);\r\n }\r\n if (model.bgColor) {\r\n this.map.bgColor.render(xmlStream, model.bgColor);\r\n }\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'patternFill':\r\n this.model = {\r\n type: 'pattern',\r\n pattern: node.attributes.patternType,\r\n };\r\n return true;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n if (this.parser.model) {\r\n this.model[name] = this.parser.model;\r\n }\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nclass GradientFillXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n stop: new StopXform(),\r\n };\r\n // if (model) {\r\n // this.gradient = model.gradient;\r\n // if (model.center) {\r\n // this.center = model.center;\r\n // }\r\n // if (model.degree !== undefined) {\r\n // this.degree = model.degree;\r\n // }\r\n // this.stops = model.stops.map(function(stop) { return new StopXform(stop); });\r\n // } else {\r\n // this.stops = [];\r\n // }\r\n }\r\n\r\n get name() {\r\n return 'gradient';\r\n }\r\n\r\n get tag() {\r\n return 'gradientFill';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode('gradientFill');\r\n switch (model.gradient) {\r\n case 'angle':\r\n xmlStream.addAttribute('degree', model.degree);\r\n break;\r\n case 'path':\r\n xmlStream.addAttribute('type', 'path');\r\n if (model.center.left) {\r\n xmlStream.addAttribute('left', model.center.left);\r\n if (model.center.right === undefined) {\r\n xmlStream.addAttribute('right', model.center.left);\r\n }\r\n }\r\n if (model.center.right) {\r\n xmlStream.addAttribute('right', model.center.right);\r\n }\r\n if (model.center.top) {\r\n xmlStream.addAttribute('top', model.center.top);\r\n if (model.center.bottom === undefined) {\r\n xmlStream.addAttribute('bottom', model.center.top);\r\n }\r\n }\r\n if (model.center.bottom) {\r\n xmlStream.addAttribute('bottom', model.center.bottom);\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n\r\n const stopXform = this.map.stop;\r\n model.stops.forEach(stopModel => {\r\n stopXform.render(xmlStream, stopModel);\r\n });\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'gradientFill': {\r\n const model = (this.model = {\r\n stops: [],\r\n });\r\n if (node.attributes.degree) {\r\n model.gradient = 'angle';\r\n model.degree = parseInt(node.attributes.degree, 10);\r\n } else if (node.attributes.type === 'path') {\r\n model.gradient = 'path';\r\n model.center = {\r\n left: node.attributes.left ? parseFloat(node.attributes.left) : 0,\r\n top: node.attributes.top ? parseFloat(node.attributes.top) : 0,\r\n };\r\n if (node.attributes.right !== node.attributes.left) {\r\n model.center.right = node.attributes.right ? parseFloat(node.attributes.right) : 0;\r\n }\r\n if (node.attributes.bottom !== node.attributes.top) {\r\n model.center.bottom = node.attributes.bottom ? parseFloat(node.attributes.bottom) : 0;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n case 'stop':\r\n this.parser = this.map.stop;\r\n this.parser.parseOpen(node);\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.model.stops.push(this.parser.model);\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n// Fill encapsulates translation from fill model to/from xlsx\r\nclass FillXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n patternFill: new PatternFillXform(),\r\n gradientFill: new GradientFillXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'fill';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.addRollback();\r\n xmlStream.openNode('fill');\r\n switch (model.type) {\r\n case 'pattern':\r\n this.map.patternFill.render(xmlStream, model);\r\n break;\r\n case 'gradient':\r\n this.map.gradientFill.render(xmlStream, model);\r\n break;\r\n default:\r\n xmlStream.rollback();\r\n return;\r\n }\r\n xmlStream.closeNode();\r\n xmlStream.commit();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'fill':\r\n this.model = {};\r\n return true;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.model = this.parser.model;\r\n this.model.type = this.parser.name;\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n validStyle(value) {\r\n return FillXform.validPatternValues[value];\r\n }\r\n}\r\n\r\nFillXform.validPatternValues = [\r\n 'none',\r\n 'solid',\r\n 'darkVertical',\r\n 'darkGray',\r\n 'mediumGray',\r\n 'lightGray',\r\n 'gray125',\r\n 'gray0625',\r\n 'darkHorizontal',\r\n 'darkVertical',\r\n 'darkDown',\r\n 'darkUp',\r\n 'darkGrid',\r\n 'darkTrellis',\r\n 'lightHorizontal',\r\n 'lightVertical',\r\n 'lightDown',\r\n 'lightUp',\r\n 'lightGrid',\r\n 'lightTrellis',\r\n 'lightGrid',\r\n].reduce((p, v) => {\r\n p[v] = true;\r\n return p;\r\n}, {});\r\n\r\nFillXform.StopXform = StopXform;\r\nFillXform.PatternFillXform = PatternFillXform;\r\nFillXform.GradientFillXform = GradientFillXform;\r\n\r\nmodule.exports = FillXform;\r\n","'use strict';\r\n\r\nconst ColorXform = require('./color-xform');\r\nconst BooleanXform = require('../simple/boolean-xform');\r\nconst IntegerXform = require('../simple/integer-xform');\r\nconst StringXform = require('../simple/string-xform');\r\nconst UnderlineXform = require('./underline-xform');\r\n\r\nconst _ = require('../../../utils/under-dash');\r\nconst BaseXform = require('../base-xform');\r\n\r\n// Font encapsulates translation from font model to xlsx\r\nclass FontXform extends BaseXform {\r\n constructor(options) {\r\n super();\r\n\r\n this.options = options || FontXform.OPTIONS;\r\n\r\n this.map = {\r\n b: {prop: 'bold', xform: new BooleanXform({tag: 'b', attr: 'val'})},\r\n i: {prop: 'italic', xform: new BooleanXform({tag: 'i', attr: 'val'})},\r\n u: {prop: 'underline', xform: new UnderlineXform()},\r\n charset: {prop: 'charset', xform: new IntegerXform({tag: 'charset', attr: 'val'})},\r\n color: {prop: 'color', xform: new ColorXform()},\r\n condense: {prop: 'condense', xform: new BooleanXform({tag: 'condense', attr: 'val'})},\r\n extend: {prop: 'extend', xform: new BooleanXform({tag: 'extend', attr: 'val'})},\r\n family: {prop: 'family', xform: new IntegerXform({tag: 'family', attr: 'val'})},\r\n outline: {prop: 'outline', xform: new BooleanXform({tag: 'outline', attr: 'val'})},\r\n vertAlign: {prop: 'vertAlign', xform: new StringXform({tag: 'vertAlign', attr: 'val'})},\r\n scheme: {prop: 'scheme', xform: new StringXform({tag: 'scheme', attr: 'val'})},\r\n shadow: {prop: 'shadow', xform: new BooleanXform({tag: 'shadow', attr: 'val'})},\r\n strike: {prop: 'strike', xform: new BooleanXform({tag: 'strike', attr: 'val'})},\r\n sz: {prop: 'size', xform: new IntegerXform({tag: 'sz', attr: 'val'})},\r\n };\r\n this.map[this.options.fontNameTag] = {\r\n prop: 'name',\r\n xform: new StringXform({tag: this.options.fontNameTag, attr: 'val'}),\r\n };\r\n }\r\n\r\n get tag() {\r\n return this.options.tagName;\r\n }\r\n\r\n render(xmlStream, model) {\r\n const {map} = this;\r\n\r\n xmlStream.openNode(this.options.tagName);\r\n _.each(this.map, (defn, tag) => {\r\n map[tag].xform.render(xmlStream, model[defn.prop]);\r\n });\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n if (this.map[node.name]) {\r\n this.parser = this.map[node.name].xform;\r\n return this.parser.parseOpen(node);\r\n }\r\n switch (node.name) {\r\n case this.options.tagName:\r\n this.model = {};\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser && !this.parser.parseClose(name)) {\r\n const item = this.map[name];\r\n if (this.parser.model) {\r\n this.model[item.prop] = this.parser.model;\r\n }\r\n this.parser = undefined;\r\n return true;\r\n }\r\n switch (name) {\r\n case this.options.tagName:\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nFontXform.OPTIONS = {\r\n tagName: 'font',\r\n fontNameTag: 'name',\r\n};\r\n\r\nmodule.exports = FontXform;\r\n","const _ = require('../../../utils/under-dash');\r\nconst defaultNumFormats = require('../../defaultnumformats');\r\n\r\nconst BaseXform = require('../base-xform');\r\n\r\nfunction hashDefaultFormats() {\r\n const hash = {};\r\n _.each(defaultNumFormats, (dnf, id) => {\r\n if (dnf.f) {\r\n hash[dnf.f] = parseInt(id, 10);\r\n }\r\n // at some point, add the other cultures here...\r\n });\r\n return hash;\r\n}\r\nconst defaultFmtHash = hashDefaultFormats();\r\n\r\n// NumFmt encapsulates translation between number format and xlsx\r\nclass NumFmtXform extends BaseXform {\r\n constructor(id, formatCode) {\r\n super();\r\n\r\n this.id = id;\r\n this.formatCode = formatCode;\r\n }\r\n\r\n get tag() {\r\n return 'numFmt';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode('numFmt', {numFmtId: model.id, formatCode: model.formatCode});\r\n }\r\n\r\n parseOpen(node) {\r\n switch (node.name) {\r\n case 'numFmt':\r\n this.model = {\r\n id: parseInt(node.attributes.numFmtId, 10),\r\n formatCode: node.attributes.formatCode.replace(/[\\\\](.)/g, '$1'),\r\n };\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nNumFmtXform.getDefaultFmtId = function getDefaultFmtId(formatCode) {\r\n return defaultFmtHash[formatCode];\r\n};\r\n\r\nNumFmtXform.getDefaultFmtCode = function getDefaultFmtCode(numFmtId) {\r\n return defaultNumFormats[numFmtId] && defaultNumFormats[numFmtId].f;\r\n};\r\n\r\nmodule.exports = NumFmtXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nconst validation = {\r\n boolean(value, dflt) {\r\n if (value === undefined) {\r\n return dflt;\r\n }\r\n return value;\r\n },\r\n};\r\n\r\n// Protection encapsulates translation from style.protection model to/from xlsx\r\nclass ProtectionXform extends BaseXform {\r\n get tag() {\r\n return 'protection';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.addRollback();\r\n xmlStream.openNode('protection');\r\n\r\n let isValid = false;\r\n function add(name, value) {\r\n if (value !== undefined) {\r\n xmlStream.addAttribute(name, value);\r\n isValid = true;\r\n }\r\n }\r\n add('locked', validation.boolean(model.locked, true) ? undefined : '0');\r\n add('hidden', validation.boolean(model.hidden, false) ? '1' : undefined);\r\n\r\n xmlStream.closeNode();\r\n\r\n if (isValid) {\r\n xmlStream.commit();\r\n } else {\r\n xmlStream.rollback();\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n const model = {\r\n locked: !(node.attributes.locked === '0'),\r\n hidden: node.attributes.hidden === '1',\r\n };\r\n\r\n // only want to record models that differ from defaults\r\n const isSignificant = !model.locked || model.hidden;\r\n\r\n this.model = isSignificant ? model : null;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = ProtectionXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nconst AlignmentXform = require('./alignment-xform');\r\nconst ProtectionXform = require('./protection-xform');\r\n\r\n// \r\n// Optional \r\n// Optional \r\n// \r\n\r\n// Style assists translation from style model to/from xlsx\r\nclass StyleXform extends BaseXform {\r\n constructor(options) {\r\n super();\r\n\r\n this.xfId = !!(options && options.xfId);\r\n this.map = {\r\n alignment: new AlignmentXform(),\r\n protection: new ProtectionXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'xf';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode('xf', {\r\n numFmtId: model.numFmtId || 0,\r\n fontId: model.fontId || 0,\r\n fillId: model.fillId || 0,\r\n borderId: model.borderId || 0,\r\n });\r\n if (this.xfId) {\r\n xmlStream.addAttribute('xfId', model.xfId || 0);\r\n }\r\n\r\n if (model.numFmtId) {\r\n xmlStream.addAttribute('applyNumberFormat', '1');\r\n }\r\n if (model.fontId) {\r\n xmlStream.addAttribute('applyFont', '1');\r\n }\r\n if (model.fillId) {\r\n xmlStream.addAttribute('applyFill', '1');\r\n }\r\n if (model.borderId) {\r\n xmlStream.addAttribute('applyBorder', '1');\r\n }\r\n if (model.alignment) {\r\n xmlStream.addAttribute('applyAlignment', '1');\r\n }\r\n if (model.protection) {\r\n xmlStream.addAttribute('applyProtection', '1');\r\n }\r\n\r\n /**\r\n * Rendering tags causes close of XML stream.\r\n * Therefore adding attributes must be done before rendering tags.\r\n */\r\n\r\n if (model.alignment) {\r\n this.map.alignment.render(xmlStream, model.alignment);\r\n }\r\n if (model.protection) {\r\n this.map.protection.render(xmlStream, model.protection);\r\n }\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n // used during sax parsing of xml to build font object\r\n switch (node.name) {\r\n case 'xf':\r\n this.model = {\r\n numFmtId: parseInt(node.attributes.numFmtId, 10),\r\n fontId: parseInt(node.attributes.fontId, 10),\r\n fillId: parseInt(node.attributes.fillId, 10),\r\n borderId: parseInt(node.attributes.borderId, 10),\r\n };\r\n if (this.xfId) {\r\n this.model.xfId = parseInt(node.attributes.xfId, 10);\r\n }\r\n return true;\r\n case 'alignment':\r\n this.parser = this.map.alignment;\r\n this.parser.parseOpen(node);\r\n return true;\r\n case 'protection':\r\n this.parser = this.map.protection;\r\n this.parser.parseOpen(node);\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n if (this.map.protection === this.parser) {\r\n this.model.protection = this.parser.model;\r\n } else {\r\n this.model.alignment = this.parser.model;\r\n }\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n return name !== 'xf';\r\n }\r\n}\r\n\r\nmodule.exports = StyleXform;\r\n","/* eslint-disable max-classes-per-file */\r\nconst Enums = require('../../../doc/enums');\r\nconst XmlStream = require('../../../utils/xml-stream');\r\n\r\nconst BaseXform = require('../base-xform');\r\nconst StaticXform = require('../static-xform');\r\nconst ListXform = require('../list-xform');\r\nconst FontXform = require('./font-xform');\r\nconst FillXform = require('./fill-xform');\r\nconst BorderXform = require('./border-xform');\r\nconst NumFmtXform = require('./numfmt-xform');\r\nconst StyleXform = require('./style-xform');\r\nconst DxfXform = require('./dxf-xform');\r\n\r\n// custom numfmt ids start here\r\nconst NUMFMT_BASE = 164;\r\n\r\n// =============================================================================\r\n// StylesXform is used to generate and parse the styles.xml file\r\n// it manages the collections of fonts, number formats, alignments, etc\r\nclass StylesXform extends BaseXform {\r\n constructor(initialise) {\r\n super();\r\n\r\n this.map = {\r\n numFmts: new ListXform({tag: 'numFmts', count: true, childXform: new NumFmtXform()}),\r\n fonts: new ListXform({\r\n tag: 'fonts',\r\n count: true,\r\n childXform: new FontXform(),\r\n $: {'x14ac:knownFonts': 1},\r\n }),\r\n fills: new ListXform({tag: 'fills', count: true, childXform: new FillXform()}),\r\n borders: new ListXform({tag: 'borders', count: true, childXform: new BorderXform()}),\r\n cellStyleXfs: new ListXform({tag: 'cellStyleXfs', count: true, childXform: new StyleXform()}),\r\n cellXfs: new ListXform({\r\n tag: 'cellXfs',\r\n count: true,\r\n childXform: new StyleXform({xfId: true}),\r\n }),\r\n dxfs: new ListXform({tag: 'dxfs', always: true, count: true, childXform: new DxfXform()}),\r\n\r\n // for style manager\r\n numFmt: new NumFmtXform(),\r\n font: new FontXform(),\r\n fill: new FillXform(),\r\n border: new BorderXform(),\r\n style: new StyleXform({xfId: true}),\r\n\r\n cellStyles: StylesXform.STATIC_XFORMS.cellStyles,\r\n tableStyles: StylesXform.STATIC_XFORMS.tableStyles,\r\n extLst: StylesXform.STATIC_XFORMS.extLst,\r\n };\r\n\r\n if (initialise) {\r\n // StylesXform also acts as style manager and is used to build up styles-model during worksheet processing\r\n this.init();\r\n }\r\n }\r\n\r\n initIndex() {\r\n this.index = {\r\n style: {},\r\n numFmt: {},\r\n numFmtNextId: 164, // start custom format ids here\r\n font: {},\r\n border: {},\r\n fill: {},\r\n };\r\n }\r\n\r\n init() {\r\n // Prepare for Style Manager role\r\n this.model = {\r\n styles: [],\r\n numFmts: [],\r\n fonts: [],\r\n borders: [],\r\n fills: [],\r\n dxfs: [],\r\n };\r\n\r\n this.initIndex();\r\n\r\n // default (zero) border\r\n this._addBorder({});\r\n\r\n // add default (all zero) style\r\n this._addStyle({numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0});\r\n\r\n // add default fills\r\n this._addFill({type: 'pattern', pattern: 'none'});\r\n this._addFill({type: 'pattern', pattern: 'gray125'});\r\n\r\n this.weakMap = new WeakMap();\r\n }\r\n\r\n render(xmlStream, model) {\r\n model = model || this.model;\r\n //\r\n // \r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n\r\n xmlStream.openNode('styleSheet', StylesXform.STYLESHEET_ATTRIBUTES);\r\n\r\n if (this.index) {\r\n // model has been built by style manager role (contains xml)\r\n if (model.numFmts && model.numFmts.length) {\r\n xmlStream.openNode('numFmts', {count: model.numFmts.length});\r\n model.numFmts.forEach(numFmtXml => {\r\n xmlStream.writeXml(numFmtXml);\r\n });\r\n xmlStream.closeNode();\r\n }\r\n\r\n if (!model.fonts.length) {\r\n // default (zero) font\r\n this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});\r\n }\r\n xmlStream.openNode('fonts', {count: model.fonts.length, 'x14ac:knownFonts': 1});\r\n model.fonts.forEach(fontXml => {\r\n xmlStream.writeXml(fontXml);\r\n });\r\n xmlStream.closeNode();\r\n\r\n xmlStream.openNode('fills', {count: model.fills.length});\r\n model.fills.forEach(fillXml => {\r\n xmlStream.writeXml(fillXml);\r\n });\r\n xmlStream.closeNode();\r\n\r\n xmlStream.openNode('borders', {count: model.borders.length});\r\n model.borders.forEach(borderXml => {\r\n xmlStream.writeXml(borderXml);\r\n });\r\n xmlStream.closeNode();\r\n\r\n this.map.cellStyleXfs.render(xmlStream, [\r\n {numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0},\r\n ]);\r\n\r\n xmlStream.openNode('cellXfs', {count: model.styles.length});\r\n model.styles.forEach(styleXml => {\r\n xmlStream.writeXml(styleXml);\r\n });\r\n xmlStream.closeNode();\r\n } else {\r\n // model is plain JSON and needs to be xformed\r\n this.map.numFmts.render(xmlStream, model.numFmts);\r\n this.map.fonts.render(xmlStream, model.fonts);\r\n this.map.fills.render(xmlStream, model.fills);\r\n this.map.borders.render(xmlStream, model.borders);\r\n this.map.cellStyleXfs.render(xmlStream, [\r\n {numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0},\r\n ]);\r\n this.map.cellXfs.render(xmlStream, model.styles);\r\n }\r\n\r\n StylesXform.STATIC_XFORMS.cellStyles.render(xmlStream);\r\n\r\n this.map.dxfs.render(xmlStream, model.dxfs);\r\n\r\n StylesXform.STATIC_XFORMS.tableStyles.render(xmlStream);\r\n StylesXform.STATIC_XFORMS.extLst.render(xmlStream);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case 'styleSheet':\r\n this.initIndex();\r\n return true;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case 'styleSheet': {\r\n this.model = {};\r\n const add = (propName, xform) => {\r\n if (xform.model && xform.model.length) {\r\n this.model[propName] = xform.model;\r\n }\r\n };\r\n add('numFmts', this.map.numFmts);\r\n add('fonts', this.map.fonts);\r\n add('fills', this.map.fills);\r\n add('borders', this.map.borders);\r\n add('styles', this.map.cellXfs);\r\n add('dxfs', this.map.dxfs);\r\n\r\n // index numFmts\r\n this.index = {\r\n model: [],\r\n numFmt: [],\r\n };\r\n if (this.model.numFmts) {\r\n const numFmtIndex = this.index.numFmt;\r\n this.model.numFmts.forEach(numFmt => {\r\n numFmtIndex[numFmt.id] = numFmt.formatCode;\r\n });\r\n }\r\n\r\n return false;\r\n }\r\n default:\r\n // not quite sure how we get here!\r\n return true;\r\n }\r\n }\r\n\r\n // add a cell's style model to the collection\r\n // each style property is processed and cross-referenced, etc.\r\n // the styleId is returned. Note: cellType is used when numFmt not defined\r\n addStyleModel(model, cellType) {\r\n if (!model) {\r\n return 0;\r\n }\r\n\r\n // if we have no default font, add it here now\r\n if (!this.model.fonts.length) {\r\n // default (zero) font\r\n this._addFont({size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'});\r\n }\r\n\r\n // if we have seen this style object before, assume it has the same styleId\r\n if (this.weakMap && this.weakMap.has(model)) {\r\n return this.weakMap.get(model);\r\n }\r\n\r\n const style = {};\r\n cellType = cellType || Enums.ValueType.Number;\r\n\r\n if (model.numFmt) {\r\n style.numFmtId = this._addNumFmtStr(model.numFmt);\r\n } else {\r\n switch (cellType) {\r\n case Enums.ValueType.Number:\r\n style.numFmtId = this._addNumFmtStr('General');\r\n break;\r\n case Enums.ValueType.Date:\r\n style.numFmtId = this._addNumFmtStr('mm-dd-yy');\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (model.font) {\r\n style.fontId = this._addFont(model.font);\r\n }\r\n\r\n if (model.border) {\r\n style.borderId = this._addBorder(model.border);\r\n }\r\n\r\n if (model.fill) {\r\n style.fillId = this._addFill(model.fill);\r\n }\r\n\r\n if (model.alignment) {\r\n style.alignment = model.alignment;\r\n }\r\n\r\n if (model.protection) {\r\n style.protection = model.protection;\r\n }\r\n\r\n const styleId = this._addStyle(style);\r\n if (this.weakMap) {\r\n this.weakMap.set(model, styleId);\r\n }\r\n return styleId;\r\n }\r\n\r\n // given a styleId (i.e. s=\"n\"), get the cell's style model\r\n // objects are shared where possible.\r\n getStyleModel(id) {\r\n // if the style doesn't exist return null\r\n const style = this.model.styles[id];\r\n if (!style) return null;\r\n\r\n // have we built this model before?\r\n let model = this.index.model[id];\r\n if (model) return model;\r\n\r\n // build a new model\r\n model = this.index.model[id] = {};\r\n\r\n // -------------------------------------------------------\r\n // number format\r\n if (style.numFmtId) {\r\n const numFmt =\r\n this.index.numFmt[style.numFmtId] || NumFmtXform.getDefaultFmtCode(style.numFmtId);\r\n if (numFmt) {\r\n model.numFmt = numFmt;\r\n }\r\n }\r\n\r\n function addStyle(name, group, styleId) {\r\n if (styleId || styleId === 0) {\r\n const part = group[styleId];\r\n if (part) {\r\n model[name] = part;\r\n }\r\n }\r\n }\r\n\r\n addStyle('font', this.model.fonts, style.fontId);\r\n addStyle('border', this.model.borders, style.borderId);\r\n addStyle('fill', this.model.fills, style.fillId);\r\n\r\n // -------------------------------------------------------\r\n // alignment\r\n if (style.alignment) {\r\n model.alignment = style.alignment;\r\n }\r\n\r\n // -------------------------------------------------------\r\n // protection\r\n if (style.protection) {\r\n model.protection = style.protection;\r\n }\r\n\r\n return model;\r\n }\r\n\r\n addDxfStyle(style) {\r\n this.model.dxfs.push(style);\r\n return this.model.dxfs.length - 1;\r\n }\r\n\r\n getDxfStyle(id) {\r\n return this.model.dxfs[id];\r\n }\r\n\r\n // =========================================================================\r\n // Private Interface\r\n _addStyle(style) {\r\n const xml = this.map.style.toXml(style);\r\n let index = this.index.style[xml];\r\n if (index === undefined) {\r\n index = this.index.style[xml] = this.model.styles.length;\r\n this.model.styles.push(xml);\r\n }\r\n return index;\r\n }\r\n\r\n // =========================================================================\r\n // Number Formats\r\n _addNumFmtStr(formatCode) {\r\n // check if default format\r\n let index = NumFmtXform.getDefaultFmtId(formatCode);\r\n if (index !== undefined) return index;\r\n\r\n // check if already in\r\n index = this.index.numFmt[formatCode];\r\n if (index !== undefined) return index;\r\n\r\n index = this.index.numFmt[formatCode] = NUMFMT_BASE + this.model.numFmts.length;\r\n const xml = this.map.numFmt.toXml({id: index, formatCode});\r\n this.model.numFmts.push(xml);\r\n return index;\r\n }\r\n\r\n // =========================================================================\r\n // Fonts\r\n _addFont(font) {\r\n const xml = this.map.font.toXml(font);\r\n let index = this.index.font[xml];\r\n if (index === undefined) {\r\n index = this.index.font[xml] = this.model.fonts.length;\r\n this.model.fonts.push(xml);\r\n }\r\n return index;\r\n }\r\n\r\n // =========================================================================\r\n // Borders\r\n _addBorder(border) {\r\n const xml = this.map.border.toXml(border);\r\n let index = this.index.border[xml];\r\n if (index === undefined) {\r\n index = this.index.border[xml] = this.model.borders.length;\r\n this.model.borders.push(xml);\r\n }\r\n return index;\r\n }\r\n\r\n // =========================================================================\r\n // Fills\r\n _addFill(fill) {\r\n const xml = this.map.fill.toXml(fill);\r\n let index = this.index.fill[xml];\r\n if (index === undefined) {\r\n index = this.index.fill[xml] = this.model.fills.length;\r\n this.model.fills.push(xml);\r\n }\r\n return index;\r\n }\r\n\r\n // =========================================================================\r\n}\r\n\r\nStylesXform.STYLESHEET_ATTRIBUTES = {\r\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\r\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\r\n 'mc:Ignorable': 'x14ac x16r2',\r\n 'xmlns:x14ac': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',\r\n 'xmlns:x16r2': 'http://schemas.microsoft.com/office/spreadsheetml/2015/02/main',\r\n};\r\nStylesXform.STATIC_XFORMS = {\r\n cellStyles: new StaticXform({\r\n tag: 'cellStyles',\r\n $: {count: 1},\r\n c: [{tag: 'cellStyle', $: {name: 'Normal', xfId: 0, builtinId: 0}}],\r\n }),\r\n dxfs: new StaticXform({tag: 'dxfs', $: {count: 0}}),\r\n tableStyles: new StaticXform({\r\n tag: 'tableStyles',\r\n $: {count: 0, defaultTableStyle: 'TableStyleMedium2', defaultPivotStyle: 'PivotStyleLight16'},\r\n }),\r\n extLst: new StaticXform({\r\n tag: 'extLst',\r\n c: [\r\n {\r\n tag: 'ext',\r\n $: {\r\n uri: '{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}',\r\n 'xmlns:x14': 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main',\r\n },\r\n c: [{tag: 'x14:slicerStyles', $: {defaultSlicerStyle: 'SlicerStyleLight1'}}],\r\n },\r\n {\r\n tag: 'ext',\r\n $: {\r\n uri: '{9260A510-F301-46a8-8635-F512D64BE5F5}',\r\n 'xmlns:x15': 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main',\r\n },\r\n c: [{tag: 'x15:timelineStyles', $: {defaultTimelineStyle: 'TimeSlicerStyleLight1'}}],\r\n },\r\n ],\r\n }),\r\n};\r\n\r\n// the stylemanager mock acts like StyleManager except that it always returns 0 or {}\r\nclass StylesXformMock extends StylesXform {\r\n constructor() {\r\n super();\r\n\r\n this.model = {\r\n styles: [{numFmtId: 0, fontId: 0, fillId: 0, borderId: 0, xfId: 0}],\r\n numFmts: [],\r\n fonts: [{size: 11, color: {theme: 1}, name: 'Calibri', family: 2, scheme: 'minor'}],\r\n borders: [{}],\r\n fills: [\r\n {type: 'pattern', pattern: 'none'},\r\n {type: 'pattern', pattern: 'gray125'},\r\n ],\r\n };\r\n }\r\n\r\n // =========================================================================\r\n // Style Manager Interface\r\n\r\n // override normal behaviour - consume and dispose\r\n parseStream(stream) {\r\n stream.autodrain();\r\n return Promise.resolve();\r\n }\r\n\r\n // add a cell's style model to the collection\r\n // each style property is processed and cross-referenced, etc.\r\n // the styleId is returned. Note: cellType is used when numFmt not defined\r\n addStyleModel(model, cellType) {\r\n switch (cellType) {\r\n case Enums.ValueType.Date:\r\n return this.dateStyleId;\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n get dateStyleId() {\r\n if (!this._dateStyleId) {\r\n const dateStyle = {\r\n numFmtId: NumFmtXform.getDefaultFmtId('mm-dd-yy'),\r\n };\r\n this._dateStyleId = this.model.styles.length;\r\n this.model.styles.push(dateStyle);\r\n }\r\n return this._dateStyleId;\r\n }\r\n\r\n // given a styleId (i.e. s=\"n\"), get the cell's style model\r\n // objects are shared where possible.\r\n getStyleModel(/* id */) {\r\n return {};\r\n }\r\n}\r\n\r\nStylesXform.Mock = StylesXformMock;\r\n\r\nmodule.exports = StylesXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass UnderlineXform extends BaseXform {\r\n constructor(model) {\r\n super();\r\n\r\n this.model = model;\r\n }\r\n\r\n get tag() {\r\n return 'u';\r\n }\r\n\r\n render(xmlStream, model) {\r\n model = model || this.model;\r\n\r\n if (model === true) {\r\n xmlStream.leafNode('u');\r\n } else {\r\n const attr = UnderlineXform.Attributes[model];\r\n if (attr) {\r\n xmlStream.leafNode('u', attr);\r\n }\r\n }\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === 'u') {\r\n this.model = node.attributes.val || true;\r\n }\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nUnderlineXform.Attributes = {\r\n single: {},\r\n double: {val: 'double'},\r\n singleAccounting: {val: 'singleAccounting'},\r\n doubleAccounting: {val: 'doubleAccounting'},\r\n};\r\n\r\nmodule.exports = UnderlineXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nconst FilterColumnXform = require('./filter-column-xform');\r\n\r\nclass AutoFilterXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n filterColumn: new FilterColumnXform(),\r\n };\r\n }\r\n\r\n get tag() {\r\n return 'autoFilter';\r\n }\r\n\r\n prepare(model) {\r\n model.columns.forEach((column, index) => {\r\n this.map.filterColumn.prepare(column, {index});\r\n });\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openNode(this.tag, {ref: model.autoFilterRef});\r\n\r\n model.columns.forEach(column => {\r\n this.map.filterColumn.render(xmlStream, column);\r\n });\r\n\r\n xmlStream.closeNode();\r\n return true;\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n switch (node.name) {\r\n case this.tag:\r\n this.model = {\r\n autoFilterRef: node.attributes.ref,\r\n columns: [],\r\n };\r\n return true;\r\n\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parseOpen(node);\r\n return true;\r\n }\r\n throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(node)}`);\r\n }\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.model.columns.push(this.parser.model);\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n return false;\r\n default:\r\n throw new Error(`Unexpected xml node in parseClose: ${name}`);\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = AutoFilterXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass FilterColumnXform extends BaseXform {\r\n get tag() {\r\n return 'filterColumn';\r\n }\r\n\r\n prepare(model, options) {\r\n model.colId = options.index.toString();\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, {\r\n colId: model.colId,\r\n hiddenButton: model.filterButton ? '0' : '1',\r\n });\r\n return true;\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === this.tag) {\r\n const {attributes} = node;\r\n this.model = {\r\n filterButton: attributes.hiddenButton === '0',\r\n };\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = FilterColumnXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass TableColumnXform extends BaseXform {\r\n get tag() {\r\n return 'tableColumn';\r\n }\r\n\r\n prepare(model, options) {\r\n model.id = options.index + 1;\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, {\r\n id: model.id.toString(),\r\n name: model.name,\r\n totalsRowLabel: model.totalsRowLabel,\r\n totalsRowFunction: model.totalsRowFunction,\r\n dxfId: model.dxfId,\r\n });\r\n return true;\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === this.tag) {\r\n const {attributes} = node;\r\n this.model = {\r\n name: attributes.name,\r\n totalsRowLabel: attributes.totalsRowLabel,\r\n totalsRowFunction: attributes.totalsRowFunction,\r\n dxfId: attributes.dxfId,\r\n };\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = TableColumnXform;\r\n","const BaseXform = require('../base-xform');\r\n\r\nclass TableStyleInfoXform extends BaseXform {\r\n get tag() {\r\n return 'tableStyleInfo';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.leafNode(this.tag, {\r\n name: model.theme ? model.theme : undefined,\r\n showFirstColumn: model.showFirstColumn ? '1' : '0',\r\n showLastColumn: model.showLastColumn ? '1' : '0',\r\n showRowStripes: model.showRowStripes ? '1' : '0',\r\n showColumnStripes: model.showColumnStripes ? '1' : '0',\r\n });\r\n return true;\r\n }\r\n\r\n parseOpen(node) {\r\n if (node.name === this.tag) {\r\n const {attributes} = node;\r\n this.model = {\r\n theme: attributes.name ? attributes.name : null,\r\n showFirstColumn: attributes.showFirstColumn === '1',\r\n showLastColumn: attributes.showLastColumn === '1',\r\n showRowStripes: attributes.showRowStripes === '1',\r\n showColumnStripes: attributes.showColumnStripes === '1',\r\n };\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n parseText() {}\r\n\r\n parseClose() {\r\n return false;\r\n }\r\n}\r\n\r\nmodule.exports = TableStyleInfoXform;\r\n","const XmlStream = require('../../../utils/xml-stream');\r\n\r\nconst BaseXform = require('../base-xform');\r\nconst ListXform = require('../list-xform');\r\n\r\nconst AutoFilterXform = require('./auto-filter-xform');\r\nconst TableColumnXform = require('./table-column-xform');\r\nconst TableStyleInfoXform = require('./table-style-info-xform');\r\n\r\nclass TableXform extends BaseXform {\r\n constructor() {\r\n super();\r\n\r\n this.map = {\r\n autoFilter: new AutoFilterXform(),\r\n tableColumns: new ListXform({\r\n tag: 'tableColumns',\r\n count: true,\r\n empty: true,\r\n childXform: new TableColumnXform(),\r\n }),\r\n tableStyleInfo: new TableStyleInfoXform(),\r\n };\r\n }\r\n\r\n prepare(model, options) {\r\n this.map.autoFilter.prepare(model);\r\n this.map.tableColumns.prepare(model.columns, options);\r\n }\r\n\r\n get tag() {\r\n return 'table';\r\n }\r\n\r\n render(xmlStream, model) {\r\n xmlStream.openXml(XmlStream.StdDocAttributes);\r\n xmlStream.openNode(this.tag, {\r\n ...TableXform.TABLE_ATTRIBUTES,\r\n id: model.id,\r\n name: model.name,\r\n displayName: model.displayName || model.name,\r\n ref: model.tableRef,\r\n totalsRowCount: model.totalsRow ? '1' : undefined,\r\n totalsRowShown: model.totalsRow ? undefined : '1',\r\n headerRowCount: model.headerRow ? '1' : '0',\r\n });\r\n\r\n this.map.autoFilter.render(xmlStream, model);\r\n this.map.tableColumns.render(xmlStream, model.columns);\r\n this.map.tableStyleInfo.render(xmlStream, model.style);\r\n\r\n xmlStream.closeNode();\r\n }\r\n\r\n parseOpen(node) {\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n return true;\r\n }\r\n const {name, attributes} = node;\r\n switch (name) {\r\n case this.tag:\r\n this.reset();\r\n this.model = {\r\n name: attributes.name,\r\n displayName: attributes.displayName || attributes.name,\r\n tableRef: attributes.ref,\r\n totalsRow: attributes.totalsRowCount === '1',\r\n headerRow: attributes.headerRowCount === '1',\r\n };\r\n break;\r\n default:\r\n this.parser = this.map[node.name];\r\n if (this.parser) {\r\n this.parser.parseOpen(node);\r\n }\r\n break;\r\n }\r\n return true;\r\n }\r\n\r\n parseText(text) {\r\n if (this.parser) {\r\n this.parser.parseText(text);\r\n }\r\n }\r\n\r\n parseClose(name) {\r\n if (this.parser) {\r\n if (!this.parser.parseClose(name)) {\r\n this.parser = undefined;\r\n }\r\n return true;\r\n }\r\n switch (name) {\r\n case this.tag:\r\n this.model.columns = this.map.tableColumns.model;\r\n if (this.map.autoFilter.model) {\r\n this.model.autoFilterRef = this.map.autoFilter.model.autoFilterRef;\r\n this.map.autoFilter.model.columns.forEach((column, index) => {\r\n this.model.columns[index].filterButton = column.filterButton;\r\n });\r\n }\r\n this.model.style = this.map.tableStyleInfo.model;\r\n return false;\r\n default:\r\n // could be some unrecognised tags\r\n return true;\r\n }\r\n }\r\n\r\n reconcile(model, options) {\r\n // fetch the dfxs from styles\r\n model.columns.forEach(column => {\r\n if (column.dxfId !== undefined) {\r\n column.style = options.styles.getDxfStyle(column.dxfId);\r\n }\r\n });\r\n }\r\n}\r\n\r\nTableXform.TABLE_ATTRIBUTES = {\r\n xmlns: 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\r\n 'xmlns:mc': 'http://schemas.openxmlformats.org/markup-compatibility/2006',\r\n 'mc:Ignorable': 'xr xr3',\r\n 'xmlns:xr': 'http://schemas.microsoft.com/office/spreadsheetml/2014/revision',\r\n 'xmlns:xr3': 'http://schemas.microsoft.com/office/spreadsheetml/2016/revision3',\r\n // 'xr:uid': '{00000000-000C-0000-FFFF-FFFF00000000}',\r\n};\r\n\r\nmodule.exports = TableXform;\r\n","const fs = require('fs');\r\nconst JSZip = require('jszip');\r\nconst {PassThrough} = require('readable-stream');\r\nconst ZipStream = require('../utils/zip-stream');\r\nconst StreamBuf = require('../utils/stream-buf');\r\n\r\nconst utils = require('../utils/utils');\r\nconst XmlStream = require('../utils/xml-stream');\r\nconst {bufferToString} = require('../utils/browser-buffer-decode');\r\n\r\nconst StylesXform = require('./xform/style/styles-xform');\r\n\r\nconst CoreXform = require('./xform/core/core-xform');\r\nconst SharedStringsXform = require('./xform/strings/shared-strings-xform');\r\nconst RelationshipsXform = require('./xform/core/relationships-xform');\r\nconst ContentTypesXform = require('./xform/core/content-types-xform');\r\nconst AppXform = require('./xform/core/app-xform');\r\nconst WorkbookXform = require('./xform/book/workbook-xform');\r\nconst WorksheetXform = require('./xform/sheet/worksheet-xform');\r\nconst DrawingXform = require('./xform/drawing/drawing-xform');\r\nconst TableXform = require('./xform/table/table-xform');\r\nconst CommentsXform = require('./xform/comment/comments-xform');\r\nconst VmlNotesXform = require('./xform/comment/vml-notes-xform');\r\n\r\nconst theme1Xml = require('./xml/theme1.js');\r\n\r\nfunction fsReadFileAsync(filename, options) {\r\n return new Promise((resolve, reject) => {\r\n fs.readFile(filename, options, (error, data) => {\r\n if (error) {\r\n reject(error);\r\n } else {\r\n resolve(data);\r\n }\r\n });\r\n });\r\n}\r\n\r\nclass XLSX {\r\n constructor(workbook) {\r\n this.workbook = workbook;\r\n }\r\n\r\n // ===============================================================================\r\n // Workbook\r\n // =========================================================================\r\n // Read\r\n\r\n async readFile(filename, options) {\r\n if (!(await utils.fs.exists(filename))) {\r\n throw new Error(`File not found: ${filename}`);\r\n }\r\n const stream = fs.createReadStream(filename);\r\n try {\r\n const workbook = await this.read(stream, options);\r\n stream.close();\r\n return workbook;\r\n } catch (error) {\r\n stream.close();\r\n throw error;\r\n }\r\n }\r\n\r\n parseRels(stream) {\r\n const xform = new RelationshipsXform();\r\n return xform.parseStream(stream);\r\n }\r\n\r\n parseWorkbook(stream) {\r\n const xform = new WorkbookXform();\r\n return xform.parseStream(stream);\r\n }\r\n\r\n parseSharedStrings(stream) {\r\n const xform = new SharedStringsXform();\r\n return xform.parseStream(stream);\r\n }\r\n\r\n reconcile(model, options) {\r\n const workbookXform = new WorkbookXform();\r\n const worksheetXform = new WorksheetXform(options);\r\n const drawingXform = new DrawingXform();\r\n const tableXform = new TableXform();\r\n\r\n workbookXform.reconcile(model);\r\n\r\n // reconcile drawings with their rels\r\n const drawingOptions = {\r\n media: model.media,\r\n mediaIndex: model.mediaIndex,\r\n };\r\n Object.keys(model.drawings).forEach(name => {\r\n const drawing = model.drawings[name];\r\n const drawingRel = model.drawingRels[name];\r\n if (drawingRel) {\r\n drawingOptions.rels = drawingRel.reduce((o, rel) => {\r\n o[rel.Id] = rel;\r\n return o;\r\n }, {});\r\n (drawing.anchors || []).forEach(anchor => {\r\n const hyperlinks = anchor.picture && anchor.picture.hyperlinks;\r\n if (hyperlinks && drawingOptions.rels[hyperlinks.rId]) {\r\n hyperlinks.hyperlink = drawingOptions.rels[hyperlinks.rId].Target;\r\n delete hyperlinks.rId;\r\n }\r\n });\r\n drawingXform.reconcile(drawing, drawingOptions);\r\n }\r\n });\r\n\r\n // reconcile tables with the default styles\r\n const tableOptions = {\r\n styles: model.styles,\r\n };\r\n Object.values(model.tables).forEach(table => {\r\n tableXform.reconcile(table, tableOptions);\r\n });\r\n\r\n const sheetOptions = {\r\n styles: model.styles,\r\n sharedStrings: model.sharedStrings,\r\n media: model.media,\r\n mediaIndex: model.mediaIndex,\r\n date1904: model.properties && model.properties.date1904,\r\n drawings: model.drawings,\r\n comments: model.comments,\r\n tables: model.tables,\r\n vmlDrawings: model.vmlDrawings,\r\n };\r\n model.worksheets.forEach(worksheet => {\r\n worksheet.relationships = model.worksheetRels[worksheet.sheetNo];\r\n worksheetXform.reconcile(worksheet, sheetOptions);\r\n });\r\n\r\n // delete unnecessary parts\r\n delete model.worksheetHash;\r\n delete model.worksheetRels;\r\n delete model.globalRels;\r\n delete model.sharedStrings;\r\n delete model.workbookRels;\r\n delete model.sheetDefs;\r\n delete model.styles;\r\n delete model.mediaIndex;\r\n delete model.drawings;\r\n delete model.drawingRels;\r\n delete model.vmlDrawings;\r\n }\r\n\r\n async _processWorksheetEntry(stream, model, sheetNo, options, path) {\r\n const xform = new WorksheetXform(options);\r\n const worksheet = await xform.parseStream(stream);\r\n worksheet.sheetNo = sheetNo;\r\n model.worksheetHash[path] = worksheet;\r\n model.worksheets.push(worksheet);\r\n }\r\n\r\n async _processCommentEntry(stream, model, name) {\r\n const xform = new CommentsXform();\r\n const comments = await xform.parseStream(stream);\r\n model.comments[`../${name}.xml`] = comments;\r\n }\r\n\r\n async _processTableEntry(stream, model, name) {\r\n const xform = new TableXform();\r\n const table = await xform.parseStream(stream);\r\n model.tables[`../tables/${name}.xml`] = table;\r\n }\r\n\r\n async _processWorksheetRelsEntry(stream, model, sheetNo) {\r\n const xform = new RelationshipsXform();\r\n const relationships = await xform.parseStream(stream);\r\n model.worksheetRels[sheetNo] = relationships;\r\n }\r\n\r\n async _processMediaEntry(entry, model, filename) {\r\n const lastDot = filename.lastIndexOf('.');\r\n // if we can't determine extension, ignore it\r\n if (lastDot >= 1) {\r\n const extension = filename.substr(lastDot + 1);\r\n const name = filename.substr(0, lastDot);\r\n await new Promise((resolve, reject) => {\r\n const streamBuf = new StreamBuf();\r\n streamBuf.on('finish', () => {\r\n model.mediaIndex[filename] = model.media.length;\r\n model.mediaIndex[name] = model.media.length;\r\n const medium = {\r\n type: 'image',\r\n name,\r\n extension,\r\n buffer: streamBuf.toBuffer(),\r\n };\r\n model.media.push(medium);\r\n resolve();\r\n });\r\n entry.on('error', error => {\r\n reject(error);\r\n });\r\n entry.pipe(streamBuf);\r\n });\r\n }\r\n }\r\n\r\n async _processDrawingEntry(entry, model, name) {\r\n const xform = new DrawingXform();\r\n const drawing = await xform.parseStream(entry);\r\n model.drawings[name] = drawing;\r\n }\r\n\r\n async _processDrawingRelsEntry(entry, model, name) {\r\n const xform = new RelationshipsXform();\r\n const relationships = await xform.parseStream(entry);\r\n model.drawingRels[name] = relationships;\r\n }\r\n\r\n async _processVmlDrawingEntry(entry, model, name) {\r\n const xform = new VmlNotesXform();\r\n const vmlDrawing = await xform.parseStream(entry);\r\n model.vmlDrawings[`../drawings/${name}.vml`] = vmlDrawing;\r\n }\r\n\r\n async _processThemeEntry(entry, model, name) {\r\n await new Promise((resolve, reject) => {\r\n // TODO: stream entry into buffer and store the xml in the model.themes[]\r\n const stream = new StreamBuf();\r\n entry.on('error', reject);\r\n stream.on('error', reject);\r\n stream.on('finish', () => {\r\n model.themes[name] = stream.read().toString();\r\n resolve();\r\n });\r\n entry.pipe(stream);\r\n });\r\n }\r\n\r\n /**\r\n * @deprecated since version 4.0. You should use `#read` instead. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\r\n */\r\n createInputStream() {\r\n throw new Error(\r\n '`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md'\r\n );\r\n }\r\n\r\n async read(stream, options) {\r\n // TODO: Remove once node v8 is deprecated\r\n // Detect and upgrade old streams\r\n if (!stream[Symbol.asyncIterator] && stream.pipe) {\r\n stream = stream.pipe(new PassThrough());\r\n }\r\n const chunks = [];\r\n for await (const chunk of stream) {\r\n chunks.push(chunk);\r\n }\r\n return this.load(Buffer.concat(chunks), options);\r\n }\r\n\r\n async load(data, options) {\r\n let buffer;\r\n if (options && options.base64) {\r\n buffer = Buffer.from(data.toString(), 'base64');\r\n } else {\r\n buffer = data;\r\n }\r\n\r\n const model = {\r\n worksheets: [],\r\n worksheetHash: {},\r\n worksheetRels: [],\r\n themes: {},\r\n media: [],\r\n mediaIndex: {},\r\n drawings: {},\r\n drawingRels: {},\r\n comments: {},\r\n tables: {},\r\n vmlDrawings: {},\r\n };\r\n\r\n const zip = await JSZip.loadAsync(buffer);\r\n for (const entry of Object.values(zip.files)) {\r\n /* eslint-disable no-await-in-loop */\r\n if (!entry.dir) {\r\n let entryName = entry.name;\r\n if (entryName[0] === '/') {\r\n entryName = entryName.substr(1);\r\n }\r\n let stream;\r\n if (entryName.match(/xl\\/media\\//) ||\r\n // themes are not parsed as stream\r\n entryName.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/)) {\r\n stream = new PassThrough();\r\n stream.write(await entry.async('nodebuffer'));\r\n } else {\r\n // use object mode to avoid buffer-string convention\r\n stream = new PassThrough({\r\n writableObjectMode: true,\r\n readableObjectMode: true,\r\n });\r\n let content;\r\n // https://www.npmjs.com/package/process\r\n if (process.browser) {\r\n // running in browser, use TextDecoder if possible\r\n content = bufferToString(await entry.async('nodebuffer'));\r\n } else {\r\n // running in node.js\r\n content = await entry.async('string');\r\n }\r\n const chunkSize = 16 * 1024;\r\n for (let i = 0; i < content.length; i += chunkSize) {\r\n stream.write(content.substring(i, i + chunkSize));\r\n }\r\n }\r\n stream.end();\r\n switch (entryName) {\r\n case '_rels/.rels':\r\n model.globalRels = await this.parseRels(stream);\r\n break;\r\n\r\n case 'xl/workbook.xml': {\r\n const workbook = await this.parseWorkbook(stream);\r\n model.sheets = workbook.sheets;\r\n model.definedNames = workbook.definedNames;\r\n model.views = workbook.views;\r\n model.properties = workbook.properties;\r\n model.calcProperties = workbook.calcProperties;\r\n break;\r\n }\r\n\r\n case 'xl/_rels/workbook.xml.rels':\r\n model.workbookRels = await this.parseRels(stream);\r\n break;\r\n\r\n case 'xl/sharedStrings.xml':\r\n model.sharedStrings = new SharedStringsXform();\r\n await model.sharedStrings.parseStream(stream);\r\n break;\r\n\r\n case 'xl/styles.xml':\r\n model.styles = new StylesXform();\r\n await model.styles.parseStream(stream);\r\n break;\r\n\r\n case 'docProps/app.xml': {\r\n const appXform = new AppXform();\r\n const appProperties = await appXform.parseStream(stream);\r\n model.company = appProperties.company;\r\n model.manager = appProperties.manager;\r\n break;\r\n }\r\n\r\n case 'docProps/core.xml': {\r\n const coreXform = new CoreXform();\r\n const coreProperties = await coreXform.parseStream(stream);\r\n Object.assign(model, coreProperties);\r\n break;\r\n }\r\n\r\n default: {\r\n let match = entryName.match(/xl\\/worksheets\\/sheet(\\d+)[.]xml/);\r\n if (match) {\r\n await this._processWorksheetEntry(stream, model, match[1], options, entryName);\r\n break;\r\n }\r\n match = entryName.match(/xl\\/worksheets\\/_rels\\/sheet(\\d+)[.]xml.rels/);\r\n if (match) {\r\n await this._processWorksheetRelsEntry(stream, model, match[1]);\r\n break;\r\n }\r\n match = entryName.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/);\r\n if (match) {\r\n await this._processThemeEntry(stream, model, match[1]);\r\n break;\r\n }\r\n match = entryName.match(/xl\\/media\\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/);\r\n if (match) {\r\n await this._processMediaEntry(stream, model, match[1]);\r\n break;\r\n }\r\n match = entryName.match(/xl\\/drawings\\/([a-zA-Z0-9]+)[.]xml/);\r\n if (match) {\r\n await this._processDrawingEntry(stream, model, match[1]);\r\n break;\r\n }\r\n match = entryName.match(/xl\\/(comments\\d+)[.]xml/);\r\n if (match) {\r\n await this._processCommentEntry(stream, model, match[1]);\r\n break;\r\n }\r\n match = entryName.match(/xl\\/tables\\/(table\\d+)[.]xml/);\r\n if (match) {\r\n await this._processTableEntry(stream, model, match[1]);\r\n break;\r\n }\r\n match = entryName.match(/xl\\/drawings\\/_rels\\/([a-zA-Z0-9]+)[.]xml[.]rels/);\r\n if (match) {\r\n await this._processDrawingRelsEntry(stream, model, match[1]);\r\n break;\r\n }\r\n match = entryName.match(/xl\\/drawings\\/(vmlDrawing\\d+)[.]vml/);\r\n if (match) {\r\n await this._processVmlDrawingEntry(stream, model, match[1]);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.reconcile(model, options);\r\n\r\n // apply model\r\n this.workbook.model = model;\r\n return this.workbook;\r\n }\r\n\r\n // =========================================================================\r\n // Write\r\n\r\n async addMedia(zip, model) {\r\n await Promise.all(\r\n model.media.map(async medium => {\r\n if (medium.type === 'image') {\r\n const filename = `xl/media/${medium.name}.${medium.extension}`;\r\n if (medium.filename) {\r\n const data = await fsReadFileAsync(medium.filename);\r\n return zip.append(data, {name: filename});\r\n }\r\n if (medium.buffer) {\r\n return zip.append(medium.buffer, {name: filename});\r\n }\r\n if (medium.base64) {\r\n const dataimg64 = medium.base64;\r\n const content = dataimg64.substring(dataimg64.indexOf(',') + 1);\r\n return zip.append(content, {name: filename, base64: true});\r\n }\r\n }\r\n throw new Error('Unsupported media');\r\n })\r\n );\r\n }\r\n\r\n addDrawings(zip, model) {\r\n const drawingXform = new DrawingXform();\r\n const relsXform = new RelationshipsXform();\r\n\r\n model.worksheets.forEach(worksheet => {\r\n const {drawing} = worksheet;\r\n if (drawing) {\r\n drawingXform.prepare(drawing, {});\r\n let xml = drawingXform.toXml(drawing);\r\n zip.append(xml, {name: `xl/drawings/${drawing.name}.xml`});\r\n\r\n xml = relsXform.toXml(drawing.rels);\r\n zip.append(xml, {name: `xl/drawings/_rels/${drawing.name}.xml.rels`});\r\n }\r\n });\r\n }\r\n\r\n addTables(zip, model) {\r\n const tableXform = new TableXform();\r\n\r\n model.worksheets.forEach(worksheet => {\r\n const {tables} = worksheet;\r\n tables.forEach(table => {\r\n tableXform.prepare(table, {});\r\n const tableXml = tableXform.toXml(table);\r\n zip.append(tableXml, {name: `xl/tables/${table.target}`});\r\n });\r\n });\r\n }\r\n\r\n async addContentTypes(zip, model) {\r\n const xform = new ContentTypesXform();\r\n const xml = xform.toXml(model);\r\n zip.append(xml, {name: '[Content_Types].xml'});\r\n }\r\n\r\n async addApp(zip, model) {\r\n const xform = new AppXform();\r\n const xml = xform.toXml(model);\r\n zip.append(xml, {name: 'docProps/app.xml'});\r\n }\r\n\r\n async addCore(zip, model) {\r\n const coreXform = new CoreXform();\r\n zip.append(coreXform.toXml(model), {name: 'docProps/core.xml'});\r\n }\r\n\r\n async addThemes(zip, model) {\r\n const themes = model.themes || {theme1: theme1Xml};\r\n Object.keys(themes).forEach(name => {\r\n const xml = themes[name];\r\n const path = `xl/theme/${name}.xml`;\r\n zip.append(xml, {name: path});\r\n });\r\n }\r\n\r\n async addOfficeRels(zip) {\r\n const xform = new RelationshipsXform();\r\n const xml = xform.toXml([\r\n {Id: 'rId1', Type: XLSX.RelType.OfficeDocument, Target: 'xl/workbook.xml'},\r\n {Id: 'rId2', Type: XLSX.RelType.CoreProperties, Target: 'docProps/core.xml'},\r\n {Id: 'rId3', Type: XLSX.RelType.ExtenderProperties, Target: 'docProps/app.xml'},\r\n ]);\r\n zip.append(xml, {name: '_rels/.rels'});\r\n }\r\n\r\n async addWorkbookRels(zip, model) {\r\n let count = 1;\r\n const relationships = [\r\n {Id: `rId${count++}`, Type: XLSX.RelType.Styles, Target: 'styles.xml'},\r\n {Id: `rId${count++}`, Type: XLSX.RelType.Theme, Target: 'theme/theme1.xml'},\r\n ];\r\n if (model.sharedStrings.count) {\r\n relationships.push({\r\n Id: `rId${count++}`,\r\n Type: XLSX.RelType.SharedStrings,\r\n Target: 'sharedStrings.xml',\r\n });\r\n }\r\n model.worksheets.forEach(worksheet => {\r\n worksheet.rId = `rId${count++}`;\r\n relationships.push({\r\n Id: worksheet.rId,\r\n Type: XLSX.RelType.Worksheet,\r\n Target: `worksheets/sheet${worksheet.id}.xml`,\r\n });\r\n });\r\n const xform = new RelationshipsXform();\r\n const xml = xform.toXml(relationships);\r\n zip.append(xml, {name: 'xl/_rels/workbook.xml.rels'});\r\n }\r\n\r\n async addSharedStrings(zip, model) {\r\n if (model.sharedStrings && model.sharedStrings.count) {\r\n zip.append(model.sharedStrings.xml, {name: 'xl/sharedStrings.xml'});\r\n }\r\n }\r\n\r\n async addStyles(zip, model) {\r\n const {xml} = model.styles;\r\n if (xml) {\r\n zip.append(xml, {name: 'xl/styles.xml'});\r\n }\r\n }\r\n\r\n async addWorkbook(zip, model) {\r\n const xform = new WorkbookXform();\r\n zip.append(xform.toXml(model), {name: 'xl/workbook.xml'});\r\n }\r\n\r\n async addWorksheets(zip, model) {\r\n // preparation phase\r\n const worksheetXform = new WorksheetXform();\r\n const relationshipsXform = new RelationshipsXform();\r\n const commentsXform = new CommentsXform();\r\n const vmlNotesXform = new VmlNotesXform();\r\n\r\n // write sheets\r\n model.worksheets.forEach(worksheet => {\r\n let xmlStream = new XmlStream();\r\n worksheetXform.render(xmlStream, worksheet);\r\n zip.append(xmlStream.xml, {name: `xl/worksheets/sheet${worksheet.id}.xml`});\r\n\r\n if (worksheet.rels && worksheet.rels.length) {\r\n xmlStream = new XmlStream();\r\n relationshipsXform.render(xmlStream, worksheet.rels);\r\n zip.append(xmlStream.xml, {name: `xl/worksheets/_rels/sheet${worksheet.id}.xml.rels`});\r\n }\r\n\r\n if (worksheet.comments.length > 0) {\r\n xmlStream = new XmlStream();\r\n commentsXform.render(xmlStream, worksheet);\r\n zip.append(xmlStream.xml, {name: `xl/comments${worksheet.id}.xml`});\r\n\r\n xmlStream = new XmlStream();\r\n vmlNotesXform.render(xmlStream, worksheet);\r\n zip.append(xmlStream.xml, {name: `xl/drawings/vmlDrawing${worksheet.id}.vml`});\r\n }\r\n });\r\n }\r\n\r\n _finalize(zip) {\r\n return new Promise((resolve, reject) => {\r\n zip.on('finish', () => {\r\n resolve(this);\r\n });\r\n zip.on('error', reject);\r\n zip.finalize();\r\n });\r\n }\r\n\r\n prepareModel(model, options) {\r\n // ensure following properties have sane values\r\n model.creator = model.creator || 'ExcelJS';\r\n model.lastModifiedBy = model.lastModifiedBy || 'ExcelJS';\r\n model.created = model.created || new Date();\r\n model.modified = model.modified || new Date();\r\n\r\n model.useSharedStrings =\r\n options.useSharedStrings !== undefined ? options.useSharedStrings : true;\r\n model.useStyles = options.useStyles !== undefined ? options.useStyles : true;\r\n\r\n // Manage the shared strings\r\n model.sharedStrings = new SharedStringsXform();\r\n\r\n // add a style manager to handle cell formats, fonts, etc.\r\n model.styles = model.useStyles ? new StylesXform(true) : new StylesXform.Mock();\r\n\r\n // prepare all of the things before the render\r\n const workbookXform = new WorkbookXform();\r\n const worksheetXform = new WorksheetXform();\r\n\r\n workbookXform.prepare(model);\r\n\r\n const worksheetOptions = {\r\n sharedStrings: model.sharedStrings,\r\n styles: model.styles,\r\n date1904: model.properties.date1904,\r\n drawingsCount: 0,\r\n media: model.media,\r\n };\r\n worksheetOptions.drawings = model.drawings = [];\r\n worksheetOptions.commentRefs = model.commentRefs = [];\r\n let tableCount = 0;\r\n model.tables = [];\r\n model.worksheets.forEach(worksheet => {\r\n // assign unique filenames to tables\r\n worksheet.tables.forEach(table => {\r\n tableCount++;\r\n table.target = `table${tableCount}.xml`;\r\n table.id = tableCount;\r\n model.tables.push(table);\r\n });\r\n\r\n worksheetXform.prepare(worksheet, worksheetOptions);\r\n });\r\n\r\n // TODO: workbook drawing list\r\n }\r\n\r\n async write(stream, options) {\r\n options = options || {};\r\n const {model} = this.workbook;\r\n const zip = new ZipStream.ZipWriter(options.zip);\r\n zip.pipe(stream);\r\n\r\n this.prepareModel(model, options);\r\n\r\n // render\r\n await this.addContentTypes(zip, model);\r\n await this.addOfficeRels(zip, model);\r\n await this.addWorkbookRels(zip, model);\r\n await this.addWorksheets(zip, model);\r\n await this.addSharedStrings(zip, model); // always after worksheets\r\n await this.addDrawings(zip, model);\r\n await this.addTables(zip, model);\r\n await Promise.all([this.addThemes(zip, model), this.addStyles(zip, model)]);\r\n await this.addMedia(zip, model);\r\n await Promise.all([this.addApp(zip, model), this.addCore(zip, model)]);\r\n await this.addWorkbook(zip, model);\r\n return this._finalize(zip);\r\n }\r\n\r\n writeFile(filename, options) {\r\n const stream = fs.createWriteStream(filename);\r\n\r\n return new Promise((resolve, reject) => {\r\n stream.on('finish', () => {\r\n resolve();\r\n });\r\n stream.on('error', error => {\r\n reject(error);\r\n });\r\n\r\n this.write(stream, options).then(() => {\r\n stream.end();\r\n });\r\n });\r\n }\r\n\r\n async writeBuffer(options) {\r\n const stream = new StreamBuf();\r\n await this.write(stream, options);\r\n return stream.read();\r\n }\r\n}\r\n\r\nXLSX.RelType = require('./rel-type');\r\n\r\nmodule.exports = XLSX;\r\n","/* eslint-disable */\r\nmodule.exports =\r\n '\\n ';\r\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 _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\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 _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\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 _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 _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CsvFormatterStream = void 0;\n\nvar stream_1 = require(\"stream\");\n\nvar formatter_1 = require(\"./formatter\");\n\nvar CsvFormatterStream = /*#__PURE__*/function (_stream_1$Transform) {\n _inherits(CsvFormatterStream, _stream_1$Transform);\n\n var _super = _createSuper(CsvFormatterStream);\n\n function CsvFormatterStream(formatterOptions) {\n var _this;\n\n _classCallCheck(this, CsvFormatterStream);\n\n _this = _super.call(this, {\n writableObjectMode: formatterOptions.objectMode\n });\n _this.hasWrittenBOM = false;\n _this.formatterOptions = formatterOptions;\n _this.rowFormatter = new formatter_1.RowFormatter(formatterOptions); // if writeBOM is false then set to true\n // if writeBOM is true then set to false by default so it is written out\n\n _this.hasWrittenBOM = !formatterOptions.writeBOM;\n return _this;\n }\n\n _createClass(CsvFormatterStream, [{\n key: \"transform\",\n value: function transform(transformFunction) {\n this.rowFormatter.rowTransform = transformFunction;\n return this;\n }\n }, {\n key: \"_transform\",\n value: function _transform(row, encoding, cb) {\n var _this2 = this;\n\n var cbCalled = false;\n\n try {\n if (!this.hasWrittenBOM) {\n this.push(this.formatterOptions.BOM);\n this.hasWrittenBOM = true;\n }\n\n this.rowFormatter.format(row, function (err, rows) {\n if (err) {\n cbCalled = true;\n return cb(err);\n }\n\n if (rows) {\n rows.forEach(function (r) {\n _this2.push(Buffer.from(r, 'utf8'));\n });\n }\n\n cbCalled = true;\n return cb();\n });\n } catch (e) {\n if (cbCalled) {\n throw e;\n }\n\n cb(e);\n }\n }\n }, {\n key: \"_flush\",\n value: function _flush(cb) {\n var _this3 = this;\n\n this.rowFormatter.finish(function (err, rows) {\n if (err) {\n return cb(err);\n }\n\n if (rows) {\n rows.forEach(function (r) {\n _this3.push(Buffer.from(r, 'utf8'));\n });\n }\n\n return cb();\n });\n }\n }]);\n\n return CsvFormatterStream;\n}(stream_1.Transform);\n\nexports.CsvFormatterStream = CsvFormatterStream;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Dc3ZGb3JtYXR0ZXJTdHJlYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBLFFBQUEsR0FBQSxPQUFBLENBQUEsUUFBQSxDQUFBOztBQUdBLElBQUEsV0FBQSxHQUFBLE9BQUEsQ0FBQSxhQUFBLENBQUE7O0lBRWEsa0I7Ozs7O0FBT1QsOEJBQW1CLGdCQUFuQixFQUEyRDtBQUFBOztBQUFBOztBQUN2RCw4QkFBTTtBQUFFLE1BQUEsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUM7QUFBdkMsS0FBTjtBQUhJLFVBQUEsYUFBQSxHQUFnQixLQUFoQjtBQUlKLFVBQUssZ0JBQUwsR0FBd0IsZ0JBQXhCO0FBQ0EsVUFBSyxZQUFMLEdBQW9CLElBQUksV0FBQSxDQUFBLFlBQUosQ0FBaUIsZ0JBQWpCLENBQXBCLENBSHVELENBSXZEO0FBQ0E7O0FBQ0EsVUFBSyxhQUFMLEdBQXFCLENBQUMsZ0JBQWdCLENBQUMsUUFBdkM7QUFOdUQ7QUFPMUQ7Ozs7OEJBRWdCLGlCLEVBQTZDO0FBQzFELFdBQUssWUFBTCxDQUFrQixZQUFsQixHQUFpQyxpQkFBakM7QUFDQSxhQUFPLElBQVA7QUFDSDs7OytCQUVpQixHLEVBQVEsUSxFQUFrQixFLEVBQXFCO0FBQUE7O0FBQzdELFVBQUksUUFBUSxHQUFHLEtBQWY7O0FBQ0EsVUFBSTtBQUNBLFlBQUksQ0FBQyxLQUFLLGFBQVYsRUFBeUI7QUFDckIsZUFBSyxJQUFMLENBQVUsS0FBSyxnQkFBTCxDQUFzQixHQUFoQztBQUNBLGVBQUssYUFBTCxHQUFxQixJQUFyQjtBQUNIOztBQUNELGFBQUssWUFBTCxDQUFrQixNQUFsQixDQUF5QixHQUF6QixFQUE4QixVQUFDLEdBQUQsRUFBTSxJQUFOLEVBQW9CO0FBQzlDLGNBQUksR0FBSixFQUFTO0FBQ0wsWUFBQSxRQUFRLEdBQUcsSUFBWDtBQUNBLG1CQUFPLEVBQUUsQ0FBQyxHQUFELENBQVQ7QUFDSDs7QUFDRCxjQUFJLElBQUosRUFBVTtBQUNOLFlBQUEsSUFBSSxDQUFDLE9BQUwsQ0FBYSxVQUFDLENBQUQsRUFBWTtBQUNyQixjQUFBLE1BQUksQ0FBQyxJQUFMLENBQVUsTUFBTSxDQUFDLElBQVAsQ0FBWSxDQUFaLEVBQWUsTUFBZixDQUFWO0FBQ0gsYUFGRDtBQUdIOztBQUNELFVBQUEsUUFBUSxHQUFHLElBQVg7QUFDQSxpQkFBTyxFQUFFLEVBQVQ7QUFDSCxTQVpEO0FBYUgsT0FsQkQsQ0FrQkUsT0FBTyxDQUFQLEVBQVU7QUFDUixZQUFJLFFBQUosRUFBYztBQUNWLGdCQUFNLENBQU47QUFDSDs7QUFDRCxRQUFBLEVBQUUsQ0FBQyxDQUFELENBQUY7QUFDSDtBQUNKOzs7MkJBRWEsRSxFQUFxQjtBQUFBOztBQUMvQixXQUFLLFlBQUwsQ0FBa0IsTUFBbEIsQ0FBeUIsVUFBQyxHQUFELEVBQU0sSUFBTixFQUFvQjtBQUN6QyxZQUFJLEdBQUosRUFBUztBQUNMLGlCQUFPLEVBQUUsQ0FBQyxHQUFELENBQVQ7QUFDSDs7QUFDRCxZQUFJLElBQUosRUFBVTtBQUNOLFVBQUEsSUFBSSxDQUFDLE9BQUwsQ0FBYSxVQUFDLENBQUQsRUFBWTtBQUNyQixZQUFBLE1BQUksQ0FBQyxJQUFMLENBQVUsTUFBTSxDQUFDLElBQVAsQ0FBWSxDQUFaLEVBQWUsTUFBZixDQUFWO0FBQ0gsV0FGRDtBQUdIOztBQUNELGVBQU8sRUFBRSxFQUFUO0FBQ0gsT0FWRDtBQVdIOzs7O0VBN0RpRSxRQUFBLENBQUEsUzs7QUFBdEUsT0FBQSxDQUFBLGtCQUFBLEdBQUEsa0JBQUEiLCJzb3VyY2VSb290IjoiIn0=","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FormatterOptions = void 0;\n\nvar FormatterOptions = function FormatterOptions() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, FormatterOptions);\n\n var _a;\n\n this.objectMode = true;\n this.delimiter = ',';\n this.rowDelimiter = '\\n';\n this.quote = '\"';\n this.escape = this.quote;\n this.quoteColumns = false;\n this.quoteHeaders = this.quoteColumns;\n this.headers = null;\n this.includeEndRowDelimiter = false;\n this.writeBOM = false;\n this.BOM = \"\\uFEFF\";\n this.alwaysWriteHeaders = false;\n Object.assign(this, opts || {});\n\n if (typeof (opts === null || opts === void 0 ? void 0 : opts.quoteHeaders) === 'undefined') {\n this.quoteHeaders = this.quoteColumns;\n }\n\n if ((opts === null || opts === void 0 ? void 0 : opts.quote) === true) {\n this.quote = '\"';\n } else if ((opts === null || opts === void 0 ? void 0 : opts.quote) === false) {\n this.quote = '';\n }\n\n if (typeof (opts === null || opts === void 0 ? void 0 : opts.escape) !== 'string') {\n this.escape = this.quote;\n }\n\n this.shouldWriteHeaders = !!this.headers && ((_a = opts.writeHeaders) !== null && _a !== void 0 ? _a : true);\n this.headers = Array.isArray(this.headers) ? this.headers : null;\n this.escapedQuote = \"\".concat(this.escape).concat(this.quote);\n};\n\nexports.FormatterOptions = FormatterOptions;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Gb3JtYXR0ZXJPcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztJQXdCYSxnQixHQStCVCw0QkFBd0Q7QUFBQSxNQUFyQyxJQUFxQyx1RUFBRixFQUFFOztBQUFBOzs7O0FBOUJ4QyxPQUFBLFVBQUEsR0FBc0IsSUFBdEI7QUFFQSxPQUFBLFNBQUEsR0FBb0IsR0FBcEI7QUFFQSxPQUFBLFlBQUEsR0FBdUIsSUFBdkI7QUFFQSxPQUFBLEtBQUEsR0FBZ0IsR0FBaEI7QUFFQSxPQUFBLE1BQUEsR0FBaUIsS0FBSyxLQUF0QjtBQUVBLE9BQUEsWUFBQSxHQUE2QixLQUE3QjtBQUVBLE9BQUEsWUFBQSxHQUE2QixLQUFLLFlBQWxDO0FBRUEsT0FBQSxPQUFBLEdBQTJCLElBQTNCO0FBRUEsT0FBQSxzQkFBQSxHQUFrQyxLQUFsQztBQU1BLE9BQUEsUUFBQSxHQUFvQixLQUFwQjtBQUlBLE9BQUEsR0FBQSxHQUFjLFFBQWQ7QUFFQSxPQUFBLGtCQUFBLEdBQThCLEtBQTlCO0FBR1osRUFBQSxNQUFNLENBQUMsTUFBUCxDQUFjLElBQWQsRUFBb0IsSUFBSSxJQUFJLEVBQTVCOztBQUVBLE1BQUksUUFBTyxJQUFJLEtBQUEsSUFBSixJQUFBLElBQUksS0FBQSxLQUFBLENBQUosR0FBSSxLQUFBLENBQUosR0FBQSxJQUFJLENBQUUsWUFBYixNQUE4QixXQUFsQyxFQUErQztBQUMzQyxTQUFLLFlBQUwsR0FBb0IsS0FBSyxZQUF6QjtBQUNIOztBQUNELE1BQUksQ0FBQSxJQUFJLEtBQUEsSUFBSixJQUFBLElBQUksS0FBQSxLQUFBLENBQUosR0FBSSxLQUFBLENBQUosR0FBQSxJQUFJLENBQUUsS0FBTixNQUFnQixJQUFwQixFQUEwQjtBQUN0QixTQUFLLEtBQUwsR0FBYSxHQUFiO0FBQ0gsR0FGRCxNQUVPLElBQUksQ0FBQSxJQUFJLEtBQUEsSUFBSixJQUFBLElBQUksS0FBQSxLQUFBLENBQUosR0FBSSxLQUFBLENBQUosR0FBQSxJQUFJLENBQUUsS0FBTixNQUFnQixLQUFwQixFQUEyQjtBQUM5QixTQUFLLEtBQUwsR0FBYSxFQUFiO0FBQ0g7O0FBQ0QsTUFBSSxRQUFPLElBQUksS0FBQSxJQUFKLElBQUEsSUFBSSxLQUFBLEtBQUEsQ0FBSixHQUFJLEtBQUEsQ0FBSixHQUFBLElBQUksQ0FBRSxNQUFiLE1BQXdCLFFBQTVCLEVBQXNDO0FBQ2xDLFNBQUssTUFBTCxHQUFjLEtBQUssS0FBbkI7QUFDSDs7QUFDRCxPQUFLLGtCQUFMLEdBQTBCLENBQUMsQ0FBQyxLQUFLLE9BQVAsS0FBa0IsQ0FBQSxFQUFBLEdBQUMsSUFBSSxDQUFDLFlBQU4sTUFBa0IsSUFBbEIsSUFBa0IsRUFBQSxLQUFBLEtBQUEsQ0FBbEIsR0FBa0IsRUFBbEIsR0FBc0IsSUFBeEMsQ0FBMUI7QUFDQSxPQUFLLE9BQUwsR0FBZSxLQUFLLENBQUMsT0FBTixDQUFjLEtBQUssT0FBbkIsSUFBOEIsS0FBSyxPQUFuQyxHQUE2QyxJQUE1RDtBQUNBLE9BQUssWUFBTCxhQUF1QixLQUFLLE1BQTVCLFNBQXFDLEtBQUssS0FBMUM7QUFDSCxDOztBQWhETCxPQUFBLENBQUEsZ0JBQUEsR0FBQSxnQkFBQSIsInNvdXJjZVJvb3QiOiIifQ==","\"use strict\";\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 __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldFormatter = void 0;\n\nvar lodash_isboolean_1 = __importDefault(require(\"lodash.isboolean\"));\n\nvar lodash_isnil_1 = __importDefault(require(\"lodash.isnil\"));\n\nvar lodash_escaperegexp_1 = __importDefault(require(\"lodash.escaperegexp\"));\n\nvar FieldFormatter = /*#__PURE__*/function () {\n function FieldFormatter(formatterOptions) {\n _classCallCheck(this, FieldFormatter);\n\n this._headers = null;\n this.formatterOptions = formatterOptions;\n\n if (formatterOptions.headers !== null) {\n this.headers = formatterOptions.headers;\n }\n\n this.REPLACE_REGEXP = new RegExp(formatterOptions.quote, 'g');\n var escapePattern = \"[\".concat(formatterOptions.delimiter).concat(lodash_escaperegexp_1.default(formatterOptions.rowDelimiter), \"|\\r|\\n']\");\n this.ESCAPE_REGEXP = new RegExp(escapePattern);\n }\n\n _createClass(FieldFormatter, [{\n key: \"shouldQuote\",\n value: function shouldQuote(fieldIndex, isHeader) {\n var quoteConfig = isHeader ? this.formatterOptions.quoteHeaders : this.formatterOptions.quoteColumns;\n\n if (lodash_isboolean_1.default(quoteConfig)) {\n return quoteConfig;\n }\n\n if (Array.isArray(quoteConfig)) {\n return quoteConfig[fieldIndex];\n }\n\n if (this._headers !== null) {\n return quoteConfig[this._headers[fieldIndex]];\n }\n\n return false;\n }\n }, {\n key: \"format\",\n value: function format(field, fieldIndex, isHeader) {\n var preparedField = \"\".concat(lodash_isnil_1.default(field) ? '' : field).replace(/\\0/g, '');\n var formatterOptions = this.formatterOptions;\n\n if (formatterOptions.quote !== '') {\n var shouldEscape = preparedField.indexOf(formatterOptions.quote) !== -1;\n\n if (shouldEscape) {\n return this.quoteField(preparedField.replace(this.REPLACE_REGEXP, formatterOptions.escapedQuote));\n }\n }\n\n var hasEscapeCharacters = preparedField.search(this.ESCAPE_REGEXP) !== -1;\n\n if (hasEscapeCharacters || this.shouldQuote(fieldIndex, isHeader)) {\n return this.quoteField(preparedField);\n }\n\n return preparedField;\n }\n }, {\n key: \"quoteField\",\n value: function quoteField(field) {\n var quote = this.formatterOptions.quote;\n return \"\".concat(quote).concat(field).concat(quote);\n }\n }, {\n key: \"headers\",\n set: function set(headers) {\n this._headers = headers;\n }\n }]);\n\n return FieldFormatter;\n}();\n\nexports.FieldFormatter = FieldFormatter;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb3JtYXR0ZXIvRmllbGRGb3JtYXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUEsa0JBQUEsR0FBQSxlQUFBLENBQUEsT0FBQSxDQUFBLGtCQUFBLENBQUEsQ0FBQTs7QUFDQSxJQUFBLGNBQUEsR0FBQSxlQUFBLENBQUEsT0FBQSxDQUFBLGNBQUEsQ0FBQSxDQUFBOztBQUNBLElBQUEscUJBQUEsR0FBQSxlQUFBLENBQUEsT0FBQSxDQUFBLHFCQUFBLENBQUEsQ0FBQTs7SUFJYSxjO0FBU1QsMEJBQW1CLGdCQUFuQixFQUEyRDtBQUFBOztBQU5uRCxTQUFBLFFBQUEsR0FBNEIsSUFBNUI7QUFPSixTQUFLLGdCQUFMLEdBQXdCLGdCQUF4Qjs7QUFDQSxRQUFJLGdCQUFnQixDQUFDLE9BQWpCLEtBQTZCLElBQWpDLEVBQXVDO0FBQ25DLFdBQUssT0FBTCxHQUFlLGdCQUFnQixDQUFDLE9BQWhDO0FBQ0g7O0FBQ0QsU0FBSyxjQUFMLEdBQXNCLElBQUksTUFBSixDQUFXLGdCQUFnQixDQUFDLEtBQTVCLEVBQW1DLEdBQW5DLENBQXRCO0FBQ0EsUUFBTSxhQUFhLGNBQU8sZ0JBQWdCLENBQUMsU0FBeEIsU0FBb0MscUJBQUEsQ0FBQSxPQUFBLENBQWEsZ0JBQWdCLENBQUMsWUFBOUIsQ0FBcEMsYUFBbkI7QUFDQSxTQUFLLGFBQUwsR0FBcUIsSUFBSSxNQUFKLENBQVcsYUFBWCxDQUFyQjtBQUNIOzs7O2dDQU1tQixVLEVBQW9CLFEsRUFBaUI7QUFDckQsVUFBTSxXQUFXLEdBQUcsUUFBUSxHQUFHLEtBQUssZ0JBQUwsQ0FBc0IsWUFBekIsR0FBd0MsS0FBSyxnQkFBTCxDQUFzQixZQUExRjs7QUFDQSxVQUFJLGtCQUFBLENBQUEsT0FBQSxDQUFVLFdBQVYsQ0FBSixFQUE0QjtBQUN4QixlQUFPLFdBQVA7QUFDSDs7QUFDRCxVQUFJLEtBQUssQ0FBQyxPQUFOLENBQWMsV0FBZCxDQUFKLEVBQWdDO0FBQzVCLGVBQU8sV0FBVyxDQUFDLFVBQUQsQ0FBbEI7QUFDSDs7QUFDRCxVQUFJLEtBQUssUUFBTCxLQUFrQixJQUF0QixFQUE0QjtBQUN4QixlQUFPLFdBQVcsQ0FBQyxLQUFLLFFBQUwsQ0FBYyxVQUFkLENBQUQsQ0FBbEI7QUFDSDs7QUFDRCxhQUFPLEtBQVA7QUFDSDs7OzJCQUVhLEssRUFBZSxVLEVBQW9CLFEsRUFBaUI7QUFDOUQsVUFBTSxhQUFhLEdBQUcsVUFBRyxjQUFBLENBQUEsT0FBQSxDQUFNLEtBQU4sSUFBZSxFQUFmLEdBQW9CLEtBQXZCLEVBQStCLE9BQS9CLENBQXVDLEtBQXZDLEVBQThDLEVBQTlDLENBQXRCO0FBRDhELFVBRXRELGdCQUZzRCxHQUVqQyxJQUZpQyxDQUV0RCxnQkFGc0Q7O0FBRzlELFVBQUksZ0JBQWdCLENBQUMsS0FBakIsS0FBMkIsRUFBL0IsRUFBbUM7QUFDL0IsWUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLE9BQWQsQ0FBc0IsZ0JBQWdCLENBQUMsS0FBdkMsTUFBa0QsQ0FBQyxDQUF4RTs7QUFDQSxZQUFJLFlBQUosRUFBa0I7QUFDZCxpQkFBTyxLQUFLLFVBQUwsQ0FBZ0IsYUFBYSxDQUFDLE9BQWQsQ0FBc0IsS0FBSyxjQUEzQixFQUEyQyxnQkFBZ0IsQ0FBQyxZQUE1RCxDQUFoQixDQUFQO0FBQ0g7QUFDSjs7QUFDRCxVQUFNLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxNQUFkLENBQXFCLEtBQUssYUFBMUIsTUFBNkMsQ0FBQyxDQUExRTs7QUFDQSxVQUFJLG1CQUFtQixJQUFJLEtBQUssV0FBTCxDQUFpQixVQUFqQixFQUE2QixRQUE3QixDQUEzQixFQUFtRTtBQUMvRCxlQUFPLEtBQUssVUFBTCxDQUFnQixhQUFoQixDQUFQO0FBQ0g7O0FBQ0QsYUFBTyxhQUFQO0FBQ0g7OzsrQkFFa0IsSyxFQUFhO0FBQUEsVUFDcEIsS0FEb0IsR0FDVixLQUFLLGdCQURLLENBQ3BCLEtBRG9CO0FBRTVCLHVCQUFVLEtBQVYsU0FBa0IsS0FBbEIsU0FBMEIsS0FBMUI7QUFDSDs7O3NCQXJDa0IsTyxFQUFpQjtBQUNoQyxXQUFLLFFBQUwsR0FBZ0IsT0FBaEI7QUFDSDs7Ozs7O0FBckJMLE9BQUEsQ0FBQSxjQUFBLEdBQUEsY0FBQSIsInNvdXJjZVJvb3QiOiIifQ==","\"use strict\";\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 __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RowFormatter = void 0;\n\nvar lodash_isfunction_1 = __importDefault(require(\"lodash.isfunction\"));\n\nvar lodash_isequal_1 = __importDefault(require(\"lodash.isequal\"));\n\nvar FieldFormatter_1 = require(\"./FieldFormatter\");\n\nvar types_1 = require(\"../types\");\n\nvar RowFormatter = /*#__PURE__*/function () {\n function RowFormatter(formatterOptions) {\n _classCallCheck(this, RowFormatter);\n\n this.rowCount = 0;\n this.formatterOptions = formatterOptions;\n this.fieldFormatter = new FieldFormatter_1.FieldFormatter(formatterOptions);\n this.headers = formatterOptions.headers;\n this.shouldWriteHeaders = formatterOptions.shouldWriteHeaders;\n this.hasWrittenHeaders = false;\n\n if (this.headers !== null) {\n this.fieldFormatter.headers = this.headers;\n }\n\n if (formatterOptions.transform) {\n this.rowTransform = formatterOptions.transform;\n }\n }\n\n _createClass(RowFormatter, [{\n key: \"format\",\n value: function format(row, cb) {\n var _this = this;\n\n this.callTransformer(row, function (err, transformedRow) {\n if (err) {\n return cb(err);\n }\n\n if (!row) {\n return cb(null);\n }\n\n var rows = [];\n\n if (transformedRow) {\n var _this$checkHeaders = _this.checkHeaders(transformedRow),\n shouldFormatColumns = _this$checkHeaders.shouldFormatColumns,\n headers = _this$checkHeaders.headers;\n\n if (_this.shouldWriteHeaders && headers && !_this.hasWrittenHeaders) {\n rows.push(_this.formatColumns(headers, true));\n _this.hasWrittenHeaders = true;\n }\n\n if (shouldFormatColumns) {\n var columns = _this.gatherColumns(transformedRow);\n\n rows.push(_this.formatColumns(columns, false));\n }\n }\n\n return cb(null, rows);\n });\n }\n }, {\n key: \"finish\",\n value: function finish(cb) {\n var rows = []; // check if we should write headers and we didnt get any rows\n\n if (this.formatterOptions.alwaysWriteHeaders && this.rowCount === 0) {\n if (!this.headers) {\n return cb(new Error('`alwaysWriteHeaders` option is set to true but `headers` option not provided.'));\n }\n\n rows.push(this.formatColumns(this.headers, true));\n }\n\n if (this.formatterOptions.includeEndRowDelimiter) {\n rows.push(this.formatterOptions.rowDelimiter);\n }\n\n return cb(null, rows);\n } // check if we need to write header return true if we should also write a row\n // could be false if headers is true and the header row(first item) is passed in\n\n }, {\n key: \"checkHeaders\",\n value: function checkHeaders(row) {\n if (this.headers) {\n // either the headers were provided by the user or we have already gathered them.\n return {\n shouldFormatColumns: true,\n headers: this.headers\n };\n }\n\n var headers = RowFormatter.gatherHeaders(row);\n this.headers = headers;\n this.fieldFormatter.headers = headers;\n\n if (!this.shouldWriteHeaders) {\n // if we are not supposed to write the headers then\n // always format the columns\n return {\n shouldFormatColumns: true,\n headers: null\n };\n } // if the row is equal to headers dont format\n\n\n return {\n shouldFormatColumns: !lodash_isequal_1.default(headers, row),\n headers: headers\n };\n } // todo change this method to unknown[]\n\n }, {\n key: \"gatherColumns\",\n value: function gatherColumns(row) {\n if (this.headers === null) {\n throw new Error('Headers is currently null');\n }\n\n if (!Array.isArray(row)) {\n return this.headers.map(function (header) {\n return row[header];\n });\n }\n\n if (RowFormatter.isHashArray(row)) {\n return this.headers.map(function (header, i) {\n var col = row[i];\n\n if (col) {\n return col[1];\n }\n\n return '';\n });\n }\n\n return this.headers.map(function (header, i) {\n return row[i];\n });\n }\n }, {\n key: \"callTransformer\",\n value: function callTransformer(row, cb) {\n if (!this._rowTransform) {\n return cb(null, row);\n }\n\n return this._rowTransform(row, cb);\n }\n }, {\n key: \"formatColumns\",\n value: function formatColumns(columns, isHeadersRow) {\n var _this2 = this;\n\n var formattedCols = columns.map(function (field, i) {\n return _this2.fieldFormatter.format(field, i, isHeadersRow);\n }).join(this.formatterOptions.delimiter);\n var rowCount = this.rowCount;\n this.rowCount += 1;\n\n if (rowCount) {\n return [this.formatterOptions.rowDelimiter, formattedCols].join('');\n }\n\n return formattedCols;\n }\n }, {\n key: \"rowTransform\",\n set: function set(transformFunction) {\n if (!lodash_isfunction_1.default(transformFunction)) {\n throw new TypeError('The transform should be a function');\n }\n\n this._rowTransform = RowFormatter.createTransform(transformFunction);\n }\n }], [{\n key: \"isHashArray\",\n value: function isHashArray(row) {\n if (Array.isArray(row)) {\n return Array.isArray(row[0]) && row[0].length === 2;\n }\n\n return false;\n } // get headers from a row item\n\n }, {\n key: \"gatherHeaders\",\n value: function gatherHeaders(row) {\n if (RowFormatter.isHashArray(row)) {\n // lets assume a multi-dimesional array with item 0 being the header\n return row.map(function (it) {\n return it[0];\n });\n }\n\n if (Array.isArray(row)) {\n return row;\n }\n\n return Object.keys(row);\n }\n }, {\n key: \"createTransform\",\n value: function createTransform(transformFunction) {\n if (types_1.isSyncTransform(transformFunction)) {\n return function (row, cb) {\n var transformedRow = null;\n\n try {\n transformedRow = transformFunction(row);\n } catch (e) {\n return cb(e);\n }\n\n return cb(null, transformedRow);\n };\n }\n\n return function (row, cb) {\n transformFunction(row, cb);\n };\n }\n }]);\n\n return RowFormatter;\n}();\n\nexports.RowFormatter = RowFormatter;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb3JtYXR0ZXIvUm93Rm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBLG1CQUFBLEdBQUEsZUFBQSxDQUFBLE9BQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUE7O0FBQ0EsSUFBQSxnQkFBQSxHQUFBLGVBQUEsQ0FBQSxPQUFBLENBQUEsZ0JBQUEsQ0FBQSxDQUFBOztBQUVBLElBQUEsZ0JBQUEsR0FBQSxPQUFBLENBQUEsa0JBQUEsQ0FBQTs7QUFDQSxJQUFBLE9BQUEsR0FBQSxPQUFBLENBQUEsVUFBQSxDQUFBOztJQU1hLFk7QUFxRFQsd0JBQW1CLGdCQUFuQixFQUEyRDtBQUFBOztBQUZuRCxTQUFBLFFBQUEsR0FBVyxDQUFYO0FBR0osU0FBSyxnQkFBTCxHQUF3QixnQkFBeEI7QUFDQSxTQUFLLGNBQUwsR0FBc0IsSUFBSSxnQkFBQSxDQUFBLGNBQUosQ0FBbUIsZ0JBQW5CLENBQXRCO0FBRUEsU0FBSyxPQUFMLEdBQWUsZ0JBQWdCLENBQUMsT0FBaEM7QUFDQSxTQUFLLGtCQUFMLEdBQTBCLGdCQUFnQixDQUFDLGtCQUEzQztBQUNBLFNBQUssaUJBQUwsR0FBeUIsS0FBekI7O0FBQ0EsUUFBSSxLQUFLLE9BQUwsS0FBaUIsSUFBckIsRUFBMkI7QUFDdkIsV0FBSyxjQUFMLENBQW9CLE9BQXBCLEdBQThCLEtBQUssT0FBbkM7QUFDSDs7QUFDRCxRQUFJLGdCQUFnQixDQUFDLFNBQXJCLEVBQWdDO0FBQzVCLFdBQUssWUFBTCxHQUFvQixnQkFBZ0IsQ0FBQyxTQUFyQztBQUNIO0FBQ0o7Ozs7MkJBU2EsRyxFQUFRLEUsRUFBd0I7QUFBQTs7QUFDMUMsV0FBSyxlQUFMLENBQXFCLEdBQXJCLEVBQTBCLFVBQUMsR0FBRCxFQUFNLGNBQU4sRUFBb0M7QUFDMUQsWUFBSSxHQUFKLEVBQVM7QUFDTCxpQkFBTyxFQUFFLENBQUMsR0FBRCxDQUFUO0FBQ0g7O0FBQ0QsWUFBSSxDQUFDLEdBQUwsRUFBVTtBQUNOLGlCQUFPLEVBQUUsQ0FBQyxJQUFELENBQVQ7QUFDSDs7QUFDRCxZQUFNLElBQUksR0FBRyxFQUFiOztBQUNBLFlBQUksY0FBSixFQUFvQjtBQUFBLG1DQUN5QixLQUFJLENBQUMsWUFBTCxDQUFrQixjQUFsQixDQUR6QjtBQUFBLGNBQ1IsbUJBRFEsc0JBQ1IsbUJBRFE7QUFBQSxjQUNhLE9BRGIsc0JBQ2EsT0FEYjs7QUFFaEIsY0FBSSxLQUFJLENBQUMsa0JBQUwsSUFBMkIsT0FBM0IsSUFBc0MsQ0FBQyxLQUFJLENBQUMsaUJBQWhELEVBQW1FO0FBQy9ELFlBQUEsSUFBSSxDQUFDLElBQUwsQ0FBVSxLQUFJLENBQUMsYUFBTCxDQUFtQixPQUFuQixFQUE0QixJQUE1QixDQUFWO0FBQ0EsWUFBQSxLQUFJLENBQUMsaUJBQUwsR0FBeUIsSUFBekI7QUFDSDs7QUFDRCxjQUFJLG1CQUFKLEVBQXlCO0FBQ3JCLGdCQUFNLE9BQU8sR0FBRyxLQUFJLENBQUMsYUFBTCxDQUFtQixjQUFuQixDQUFoQjs7QUFDQSxZQUFBLElBQUksQ0FBQyxJQUFMLENBQVUsS0FBSSxDQUFDLGFBQUwsQ0FBbUIsT0FBbkIsRUFBNEIsS0FBNUIsQ0FBVjtBQUNIO0FBQ0o7O0FBQ0QsZUFBTyxFQUFFLENBQUMsSUFBRCxFQUFPLElBQVAsQ0FBVDtBQUNILE9BcEJEO0FBcUJIOzs7MkJBRWEsRSxFQUF3QjtBQUNsQyxVQUFNLElBQUksR0FBRyxFQUFiLENBRGtDLENBRWxDOztBQUNBLFVBQUksS0FBSyxnQkFBTCxDQUFzQixrQkFBdEIsSUFBNEMsS0FBSyxRQUFMLEtBQWtCLENBQWxFLEVBQXFFO0FBQ2pFLFlBQUksQ0FBQyxLQUFLLE9BQVYsRUFBbUI7QUFDZixpQkFBTyxFQUFFLENBQUMsSUFBSSxLQUFKLENBQVUsK0VBQVYsQ0FBRCxDQUFUO0FBQ0g7O0FBQ0QsUUFBQSxJQUFJLENBQUMsSUFBTCxDQUFVLEtBQUssYUFBTCxDQUFtQixLQUFLLE9BQXhCLEVBQWlDLElBQWpDLENBQVY7QUFDSDs7QUFDRCxVQUFJLEtBQUssZ0JBQUwsQ0FBc0Isc0JBQTFCLEVBQWtEO0FBQzlDLFFBQUEsSUFBSSxDQUFDLElBQUwsQ0FBVSxLQUFLLGdCQUFMLENBQXNCLFlBQWhDO0FBQ0g7O0FBQ0QsYUFBTyxFQUFFLENBQUMsSUFBRCxFQUFPLElBQVAsQ0FBVDtBQUNILEssQ0FFRDtBQUNBOzs7O2lDQUNxQixHLEVBQVE7QUFDekIsVUFBSSxLQUFLLE9BQVQsRUFBa0I7QUFDZDtBQUNBLGVBQU87QUFBRSxVQUFBLG1CQUFtQixFQUFFLElBQXZCO0FBQTZCLFVBQUEsT0FBTyxFQUFFLEtBQUs7QUFBM0MsU0FBUDtBQUNIOztBQUVELFVBQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxhQUFiLENBQTJCLEdBQTNCLENBQWhCO0FBQ0EsV0FBSyxPQUFMLEdBQWUsT0FBZjtBQUNBLFdBQUssY0FBTCxDQUFvQixPQUFwQixHQUE4QixPQUE5Qjs7QUFDQSxVQUFJLENBQUMsS0FBSyxrQkFBVixFQUE4QjtBQUMxQjtBQUNBO0FBQ0EsZUFBTztBQUFFLFVBQUEsbUJBQW1CLEVBQUUsSUFBdkI7QUFBNkIsVUFBQSxPQUFPLEVBQUU7QUFBdEMsU0FBUDtBQUNILE9BYndCLENBY3pCOzs7QUFDQSxhQUFPO0FBQUUsUUFBQSxtQkFBbUIsRUFBRSxDQUFDLGdCQUFBLENBQUEsT0FBQSxDQUFRLE9BQVIsRUFBaUIsR0FBakIsQ0FBeEI7QUFBK0MsUUFBQSxPQUFPLEVBQVA7QUFBL0MsT0FBUDtBQUNILEssQ0FFRDs7OztrQ0FDc0IsRyxFQUFRO0FBQzFCLFVBQUksS0FBSyxPQUFMLEtBQWlCLElBQXJCLEVBQTJCO0FBQ3ZCLGNBQU0sSUFBSSxLQUFKLENBQVUsMkJBQVYsQ0FBTjtBQUNIOztBQUNELFVBQUksQ0FBQyxLQUFLLENBQUMsT0FBTixDQUFjLEdBQWQsQ0FBTCxFQUF5QjtBQUNyQixlQUFPLEtBQUssT0FBTCxDQUFhLEdBQWIsQ0FBaUIsVUFBQyxNQUFEO0FBQUEsaUJBQW9CLEdBQUcsQ0FBQyxNQUFELENBQXZCO0FBQUEsU0FBakIsQ0FBUDtBQUNIOztBQUNELFVBQUksWUFBWSxDQUFDLFdBQWIsQ0FBeUIsR0FBekIsQ0FBSixFQUFtQztBQUMvQixlQUFPLEtBQUssT0FBTCxDQUFhLEdBQWIsQ0FBaUIsVUFBQyxNQUFELEVBQVMsQ0FBVCxFQUFzQjtBQUMxQyxjQUFNLEdBQUcsR0FBSSxHQUFHLENBQUMsQ0FBRCxDQUFoQjs7QUFDQSxjQUFJLEdBQUosRUFBUztBQUNMLG1CQUFPLEdBQUcsQ0FBQyxDQUFELENBQVY7QUFDSDs7QUFDRCxpQkFBTyxFQUFQO0FBQ0gsU0FOTSxDQUFQO0FBT0g7O0FBQ0QsYUFBTyxLQUFLLE9BQUwsQ0FBYSxHQUFiLENBQWlCLFVBQUMsTUFBRCxFQUFTLENBQVQ7QUFBQSxlQUF1QixHQUFHLENBQUMsQ0FBRCxDQUExQjtBQUFBLE9BQWpCLENBQVA7QUFDSDs7O29DQUV1QixHLEVBQVEsRSxFQUEyQjtBQUN2RCxVQUFJLENBQUMsS0FBSyxhQUFWLEVBQXlCO0FBQ3JCLGVBQU8sRUFBRSxDQUFDLElBQUQsRUFBUSxHQUFSLENBQVQ7QUFDSDs7QUFDRCxhQUFPLEtBQUssYUFBTCxDQUFtQixHQUFuQixFQUF3QixFQUF4QixDQUFQO0FBQ0g7OztrQ0FFcUIsTyxFQUFtQixZLEVBQXFCO0FBQUE7O0FBQzFELFVBQU0sYUFBYSxHQUFHLE9BQU8sQ0FDeEIsR0FEaUIsQ0FDYixVQUFDLEtBQUQsRUFBUSxDQUFSO0FBQUEsZUFBc0IsTUFBSSxDQUFDLGNBQUwsQ0FBb0IsTUFBcEIsQ0FBMkIsS0FBM0IsRUFBa0MsQ0FBbEMsRUFBcUMsWUFBckMsQ0FBdEI7QUFBQSxPQURhLEVBRWpCLElBRmlCLENBRVosS0FBSyxnQkFBTCxDQUFzQixTQUZWLENBQXRCO0FBRDBELFVBSWxELFFBSmtELEdBSXJDLElBSnFDLENBSWxELFFBSmtEO0FBSzFELFdBQUssUUFBTCxJQUFpQixDQUFqQjs7QUFDQSxVQUFJLFFBQUosRUFBYztBQUNWLGVBQU8sQ0FBQyxLQUFLLGdCQUFMLENBQXNCLFlBQXZCLEVBQXFDLGFBQXJDLEVBQW9ELElBQXBELENBQXlELEVBQXpELENBQVA7QUFDSDs7QUFDRCxhQUFPLGFBQVA7QUFDSDs7O3NCQXZHdUIsaUIsRUFBNkM7QUFDakUsVUFBSSxDQUFDLG1CQUFBLENBQUEsT0FBQSxDQUFXLGlCQUFYLENBQUwsRUFBb0M7QUFDaEMsY0FBTSxJQUFJLFNBQUosQ0FBYyxvQ0FBZCxDQUFOO0FBQ0g7O0FBQ0QsV0FBSyxhQUFMLEdBQXFCLFlBQVksQ0FBQyxlQUFiLENBQTZCLGlCQUE3QixDQUFyQjtBQUNIOzs7Z0NBeEUwQixHLEVBQVE7QUFDL0IsVUFBSSxLQUFLLENBQUMsT0FBTixDQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUNwQixlQUFPLEtBQUssQ0FBQyxPQUFOLENBQWMsR0FBRyxDQUFDLENBQUQsQ0FBakIsS0FBeUIsR0FBRyxDQUFDLENBQUQsQ0FBSCxDQUFPLE1BQVAsS0FBa0IsQ0FBbEQ7QUFDSDs7QUFDRCxhQUFPLEtBQVA7QUFDSCxLLENBRUQ7Ozs7a0NBQzZCLEcsRUFBUTtBQUNqQyxVQUFJLFlBQVksQ0FBQyxXQUFiLENBQXlCLEdBQXpCLENBQUosRUFBbUM7QUFDL0I7QUFDQSxlQUFPLEdBQUcsQ0FBQyxHQUFKLENBQVEsVUFBQyxFQUFEO0FBQUEsaUJBQWdCLEVBQUUsQ0FBQyxDQUFELENBQWxCO0FBQUEsU0FBUixDQUFQO0FBQ0g7O0FBQ0QsVUFBSSxLQUFLLENBQUMsT0FBTixDQUFjLEdBQWQsQ0FBSixFQUF3QjtBQUNwQixlQUFPLEdBQVA7QUFDSDs7QUFDRCxhQUFPLE1BQU0sQ0FBQyxJQUFQLENBQVksR0FBWixDQUFQO0FBQ0g7OztvQ0FHRyxpQixFQUE2QztBQUU3QyxVQUFJLE9BQUEsQ0FBQSxlQUFBLENBQWdCLGlCQUFoQixDQUFKLEVBQXdDO0FBQ3BDLGVBQU8sVUFBQyxHQUFELEVBQVMsRUFBVCxFQUE4QztBQUNqRCxjQUFJLGNBQWMsR0FBRyxJQUFyQjs7QUFDQSxjQUFJO0FBQ0EsWUFBQSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsR0FBRCxDQUFsQztBQUNILFdBRkQsQ0FFRSxPQUFPLENBQVAsRUFBVTtBQUNSLG1CQUFPLEVBQUUsQ0FBQyxDQUFELENBQVQ7QUFDSDs7QUFDRCxpQkFBTyxFQUFFLENBQUMsSUFBRCxFQUFPLGNBQVAsQ0FBVDtBQUNILFNBUkQ7QUFTSDs7QUFDRCxhQUFPLFVBQUMsR0FBRCxFQUFTLEVBQVQsRUFBOEM7QUFDakQsUUFBQSxpQkFBaUIsQ0FBQyxHQUFELEVBQU0sRUFBTixDQUFqQjtBQUNILE9BRkQ7QUFHSDs7Ozs7O0FBckNMLE9BQUEsQ0FBQSxZQUFBLEdBQUEsWUFBQSIsInNvdXJjZVJvb3QiOiIifQ==","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar RowFormatter_1 = require(\"./RowFormatter\");\n\nObject.defineProperty(exports, \"RowFormatter\", {\n enumerable: true,\n get: function get() {\n return RowFormatter_1.RowFormatter;\n }\n});\n\nvar FieldFormatter_1 = require(\"./FieldFormatter\");\n\nObject.defineProperty(exports, \"FieldFormatter\", {\n enumerable: true,\n get: function get() {\n return FieldFormatter_1.FieldFormatter;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb3JtYXR0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQSxjQUFBLEdBQUEsT0FBQSxDQUFBLGdCQUFBLENBQUE7O0FBQVMsTUFBQSxDQUFBLGNBQUEsQ0FBQSxPQUFBLEVBQUEsY0FBQSxFQUFBO0FBQUEsRUFBQSxVQUFBLEVBQUEsSUFBQTtBQUFBLEVBQUEsR0FBQSxFQUFBLGVBQUE7QUFBQSxXQUFBLGNBQUEsQ0FBQSxZQUFBO0FBQVk7QUFBWixDQUFBOztBQUNULElBQUEsZ0JBQUEsR0FBQSxPQUFBLENBQUEsa0JBQUEsQ0FBQTs7QUFBUyxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxnQkFBQSxFQUFBO0FBQUEsRUFBQSxVQUFBLEVBQUEsSUFBQTtBQUFBLEVBQUEsR0FBQSxFQUFBLGVBQUE7QUFBQSxXQUFBLGdCQUFBLENBQUEsY0FBQTtBQUFjO0FBQWQsQ0FBQSIsInNvdXJjZVJvb3QiOiIifQ==","\"use strict\";\n\nvar __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function get() {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nvar __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n});\n\nvar __importStar = void 0 && (void 0).__importStar || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n }\n\n __setModuleDefault(result, mod);\n\n return result;\n};\n\nvar __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {\n for (var p in m) {\n if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n }\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.writeToPath = exports.writeToString = exports.writeToBuffer = exports.writeToStream = exports.write = exports.format = void 0;\n\nvar util_1 = require(\"util\");\n\nvar stream_1 = require(\"stream\");\n\nvar fs = __importStar(require(\"fs\"));\n\nvar FormatterOptions_1 = require(\"./FormatterOptions\");\n\nvar CsvFormatterStream_1 = require(\"./CsvFormatterStream\");\n\n__exportStar(require(\"./types\"), exports);\n\nvar CsvFormatterStream_2 = require(\"./CsvFormatterStream\");\n\nObject.defineProperty(exports, \"CsvFormatterStream\", {\n enumerable: true,\n get: function get() {\n return CsvFormatterStream_2.CsvFormatterStream;\n }\n});\n\nvar FormatterOptions_2 = require(\"./FormatterOptions\");\n\nObject.defineProperty(exports, \"FormatterOptions\", {\n enumerable: true,\n get: function get() {\n return FormatterOptions_2.FormatterOptions;\n }\n});\n\nexports.format = function (options) {\n return new CsvFormatterStream_1.CsvFormatterStream(new FormatterOptions_1.FormatterOptions(options));\n};\n\nexports.write = function (rows, options) {\n var csvStream = exports.format(options);\n var promiseWrite = util_1.promisify(function (row, cb) {\n csvStream.write(row, undefined, cb);\n });\n rows.reduce(function (prev, row) {\n return prev.then(function () {\n return promiseWrite(row);\n });\n }, Promise.resolve()).then(function () {\n return csvStream.end();\n }).catch(function (err) {\n csvStream.emit('error', err);\n });\n return csvStream;\n};\n\nexports.writeToStream = function (ws, rows, options) {\n return exports.write(rows, options).pipe(ws);\n};\n\nexports.writeToBuffer = function (rows) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var buffers = [];\n var ws = new stream_1.Writable({\n write: function write(data, enc, writeCb) {\n buffers.push(data);\n writeCb();\n }\n });\n return new Promise(function (res, rej) {\n ws.on('error', rej).on('finish', function () {\n return res(Buffer.concat(buffers));\n });\n exports.write(rows, opts).pipe(ws);\n });\n};\n\nexports.writeToString = function (rows, options) {\n return exports.writeToBuffer(rows, options).then(function (buffer) {\n return buffer.toString();\n });\n};\n\nexports.writeToPath = function (path, rows, options) {\n var stream = fs.createWriteStream(path, {\n encoding: 'utf8'\n });\n return exports.write(rows, options).pipe(stream);\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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","\"use strict\";\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isSyncTransform = void 0;\n\nexports.isSyncTransform = function (transform) {\n return transform.length === 1;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7QUFZYSxPQUFBLENBQUEsZUFBQSxHQUFrQixVQUMzQixTQUQyQjtBQUFBLFNBRVcsU0FBUyxDQUFDLE1BQVYsS0FBcUIsQ0FGaEM7QUFBQSxDQUFsQiIsInNvdXJjZVJvb3QiOiIifQ==","\"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 _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\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\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 _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\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 _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 _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.CsvParserStream = void 0;\n\nvar string_decoder_1 = require(\"string_decoder\");\n\nvar stream_1 = require(\"stream\");\n\nvar transforms_1 = require(\"./transforms\");\n\nvar parser_1 = require(\"./parser\");\n\nvar CsvParserStream = /*#__PURE__*/function (_stream_1$Transform) {\n _inherits(CsvParserStream, _stream_1$Transform);\n\n var _super = _createSuper(CsvParserStream);\n\n function CsvParserStream(parserOptions) {\n var _this;\n\n _classCallCheck(this, CsvParserStream);\n\n _this = _super.call(this, {\n objectMode: parserOptions.objectMode\n });\n _this.lines = '';\n _this.rowCount = 0;\n _this.parsedRowCount = 0;\n _this.parsedLineCount = 0;\n _this.endEmitted = false;\n _this.headersEmitted = false;\n _this.parserOptions = parserOptions;\n _this.parser = new parser_1.Parser(parserOptions);\n _this.headerTransformer = new transforms_1.HeaderTransformer(parserOptions);\n _this.decoder = new string_decoder_1.StringDecoder(parserOptions.encoding);\n _this.rowTransformerValidator = new transforms_1.RowTransformerValidator();\n return _this;\n }\n\n _createClass(CsvParserStream, [{\n key: \"transform\",\n value: function transform(transformFunction) {\n this.rowTransformerValidator.rowTransform = transformFunction;\n return this;\n }\n }, {\n key: \"validate\",\n value: function validate(validateFunction) {\n this.rowTransformerValidator.rowValidator = validateFunction;\n return this;\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n }, {\n key: \"emit\",\n value: function emit(event) {\n var _get2;\n\n if (event === 'end') {\n if (!this.endEmitted) {\n this.endEmitted = true;\n\n _get(_getPrototypeOf(CsvParserStream.prototype), \"emit\", this).call(this, 'end', this.rowCount);\n }\n\n return false;\n }\n\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n\n return (_get2 = _get(_getPrototypeOf(CsvParserStream.prototype), \"emit\", this)).call.apply(_get2, [this, event].concat(rest));\n }\n }, {\n key: \"_transform\",\n value: function _transform(data, encoding, done) {\n // if we have hit our maxRows parsing limit then skip parsing\n if (this.hasHitRowLimit) {\n return done();\n }\n\n try {\n var lines = this.lines;\n var newLine = lines + this.decoder.write(data);\n var rows = this.parse(newLine, true);\n return this.processRows(rows, done);\n } catch (e) {\n return done(e);\n }\n }\n }, {\n key: \"_flush\",\n value: function _flush(done) {\n // if we have hit our maxRows parsing limit then skip parsing\n if (this.hasHitRowLimit) {\n return done();\n }\n\n try {\n var newLine = this.lines + this.decoder.end();\n var rows = this.parse(newLine, false);\n return this.processRows(rows, done);\n } catch (e) {\n return done(e);\n }\n }\n }, {\n key: \"parse\",\n value: function parse(data, hasMoreData) {\n if (!data) {\n return [];\n }\n\n var _this$parser$parse = this.parser.parse(data, hasMoreData),\n line = _this$parser$parse.line,\n rows = _this$parser$parse.rows;\n\n this.lines = line;\n return rows;\n }\n }, {\n key: \"processRows\",\n value: function processRows(rows, cb) {\n var _this2 = this;\n\n var rowsLength = rows.length;\n\n var iterate = function iterate(i) {\n var callNext = function callNext(err) {\n if (err) {\n return cb(err);\n }\n\n if (i % 100 === 0) {\n // incase the transform are sync insert a next tick to prevent stack overflow\n setImmediate(function () {\n return iterate(i + 1);\n });\n return undefined;\n }\n\n return iterate(i + 1);\n };\n\n _this2.checkAndEmitHeaders(); // if we have emitted all rows or we have hit the maxRows limit option\n // then end\n\n\n if (i >= rowsLength || _this2.hasHitRowLimit) {\n return cb();\n }\n\n _this2.parsedLineCount += 1;\n\n if (_this2.shouldSkipLine) {\n return callNext();\n }\n\n var row = rows[i];\n _this2.rowCount += 1;\n _this2.parsedRowCount += 1;\n var nextRowCount = _this2.rowCount;\n return _this2.transformRow(row, function (err, transformResult) {\n if (err) {\n _this2.rowCount -= 1;\n return callNext(err);\n }\n\n if (!transformResult) {\n return callNext(new Error('expected transform result'));\n }\n\n if (!transformResult.isValid) {\n _this2.emit('data-invalid', transformResult.row, nextRowCount, transformResult.reason);\n } else if (transformResult.row) {\n return _this2.pushRow(transformResult.row, callNext);\n }\n\n return callNext();\n });\n };\n\n iterate(0);\n }\n }, {\n key: \"transformRow\",\n value: function transformRow(parsedRow, cb) {\n var _this3 = this;\n\n try {\n this.headerTransformer.transform(parsedRow, function (err, withHeaders) {\n if (err) {\n return cb(err);\n }\n\n if (!withHeaders) {\n return cb(new Error('Expected result from header transform'));\n }\n\n if (!withHeaders.isValid) {\n if (_this3.shouldEmitRows) {\n return cb(null, {\n isValid: false,\n row: parsedRow\n });\n } // skipped because of skipRows option remove from total row count\n\n\n return _this3.skipRow(cb);\n }\n\n if (withHeaders.row) {\n if (_this3.shouldEmitRows) {\n return _this3.rowTransformerValidator.transformAndValidate(withHeaders.row, cb);\n } // skipped because of skipRows option remove from total row count\n\n\n return _this3.skipRow(cb);\n } // this is a header row dont include in the rowCount or parsedRowCount\n\n\n _this3.rowCount -= 1;\n _this3.parsedRowCount -= 1;\n return cb(null, {\n row: null,\n isValid: true\n });\n });\n } catch (e) {\n cb(e);\n }\n }\n }, {\n key: \"checkAndEmitHeaders\",\n value: function checkAndEmitHeaders() {\n if (!this.headersEmitted && this.headerTransformer.headers) {\n this.headersEmitted = true;\n this.emit('headers', this.headerTransformer.headers);\n }\n }\n }, {\n key: \"skipRow\",\n value: function skipRow(cb) {\n // skipped because of skipRows option remove from total row count\n this.rowCount -= 1;\n return cb(null, {\n row: null,\n isValid: true\n });\n }\n }, {\n key: \"pushRow\",\n value: function pushRow(row, cb) {\n try {\n if (!this.parserOptions.objectMode) {\n this.push(JSON.stringify(row));\n } else {\n this.push(row);\n }\n\n cb();\n } catch (e) {\n cb(e);\n }\n }\n }, {\n key: \"hasHitRowLimit\",\n get: function get() {\n return this.parserOptions.limitRows && this.rowCount >= this.parserOptions.maxRows;\n }\n }, {\n key: \"shouldEmitRows\",\n get: function get() {\n return this.parsedRowCount > this.parserOptions.skipRows;\n }\n }, {\n key: \"shouldSkipLine\",\n get: function get() {\n return this.parsedLineCount <= this.parserOptions.skipLines;\n }\n }]);\n\n return CsvParserStream;\n}(stream_1.Transform);\n\nexports.CsvParserStream = CsvParserStream;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Dc3ZQYXJzZXJTdHJlYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQSxnQkFBQSxHQUFBLE9BQUEsQ0FBQSxnQkFBQSxDQUFBOztBQUNBLElBQUEsUUFBQSxHQUFBLE9BQUEsQ0FBQSxRQUFBLENBQUE7O0FBRUEsSUFBQSxZQUFBLEdBQUEsT0FBQSxDQUFBLGNBQUEsQ0FBQTs7QUFDQSxJQUFBLFFBQUEsR0FBQSxPQUFBLENBQUEsVUFBQSxDQUFBOztJQUdhLGU7Ozs7O0FBdUJULDJCQUFtQixhQUFuQixFQUErQztBQUFBOztBQUFBOztBQUMzQyw4QkFBTTtBQUFFLE1BQUEsVUFBVSxFQUFFLGFBQWEsQ0FBQztBQUE1QixLQUFOO0FBYkksVUFBQSxLQUFBLEdBQVEsRUFBUjtBQUVBLFVBQUEsUUFBQSxHQUFXLENBQVg7QUFFQSxVQUFBLGNBQUEsR0FBaUIsQ0FBakI7QUFFQSxVQUFBLGVBQUEsR0FBa0IsQ0FBbEI7QUFFQSxVQUFBLFVBQUEsR0FBYSxLQUFiO0FBRUEsVUFBQSxjQUFBLEdBQWlCLEtBQWpCO0FBSUosVUFBSyxhQUFMLEdBQXFCLGFBQXJCO0FBQ0EsVUFBSyxNQUFMLEdBQWMsSUFBSSxRQUFBLENBQUEsTUFBSixDQUFXLGFBQVgsQ0FBZDtBQUNBLFVBQUssaUJBQUwsR0FBeUIsSUFBSSxZQUFBLENBQUEsaUJBQUosQ0FBc0IsYUFBdEIsQ0FBekI7QUFDQSxVQUFLLE9BQUwsR0FBZSxJQUFJLGdCQUFBLENBQUEsYUFBSixDQUFrQixhQUFhLENBQUMsUUFBaEMsQ0FBZjtBQUNBLFVBQUssdUJBQUwsR0FBK0IsSUFBSSxZQUFBLENBQUEsdUJBQUosRUFBL0I7QUFOMkM7QUFPOUM7Ozs7OEJBY2dCLGlCLEVBQTZDO0FBQzFELFdBQUssdUJBQUwsQ0FBNkIsWUFBN0IsR0FBNEMsaUJBQTVDO0FBQ0EsYUFBTyxJQUFQO0FBQ0g7Ozs2QkFFZSxnQixF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","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ParserOptions = void 0;\n\nvar lodash_escaperegexp_1 = __importDefault(require(\"lodash.escaperegexp\"));\n\nvar lodash_isnil_1 = __importDefault(require(\"lodash.isnil\"));\n\nvar ParserOptions = function ParserOptions(opts) {\n _classCallCheck(this, ParserOptions);\n\n var _a;\n\n this.objectMode = true;\n this.delimiter = ',';\n this.ignoreEmpty = false;\n this.quote = '\"';\n this.escape = null;\n this.escapeChar = this.quote;\n this.comment = null;\n this.supportsComments = false;\n this.ltrim = false;\n this.rtrim = false;\n this.trim = false;\n this.headers = null;\n this.renameHeaders = false;\n this.strictColumnHandling = false;\n this.discardUnmappedColumns = false;\n this.carriageReturn = '\\r';\n this.encoding = 'utf8';\n this.limitRows = false;\n this.maxRows = 0;\n this.skipLines = 0;\n this.skipRows = 0;\n Object.assign(this, opts || {});\n\n if (this.delimiter.length > 1) {\n throw new Error('delimiter option must be one character long');\n }\n\n this.escapedDelimiter = lodash_escaperegexp_1.default(this.delimiter);\n this.escapeChar = (_a = this.escape) !== null && _a !== void 0 ? _a : this.quote;\n this.supportsComments = !lodash_isnil_1.default(this.comment);\n this.NEXT_TOKEN_REGEXP = new RegExp(\"([^\\\\s]|\\\\r\\\\n|\\\\n|\\\\r|\".concat(this.escapedDelimiter, \")\"));\n\n if (this.maxRows > 0) {\n this.limitRows = true;\n }\n};\n\nexports.ParserOptions = ParserOptions;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9QYXJzZXJPcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUEscUJBQUEsR0FBQSxlQUFBLENBQUEsT0FBQSxDQUFBLHFCQUFBLENBQUEsQ0FBQTs7QUFDQSxJQUFBLGNBQUEsR0FBQSxlQUFBLENBQUEsT0FBQSxDQUFBLGNBQUEsQ0FBQSxDQUFBOztJQXVCYSxhLEdBK0NULHVCQUFtQixJQUFuQixFQUEyQztBQUFBOzs7O0FBNUMzQixPQUFBLFVBQUEsR0FBc0IsSUFBdEI7QUFFQSxPQUFBLFNBQUEsR0FBb0IsR0FBcEI7QUFFQSxPQUFBLFdBQUEsR0FBdUIsS0FBdkI7QUFFQSxPQUFBLEtBQUEsR0FBdUIsR0FBdkI7QUFFQSxPQUFBLE1BQUEsR0FBd0IsSUFBeEI7QUFFQSxPQUFBLFVBQUEsR0FBNEIsS0FBSyxLQUFqQztBQUVBLE9BQUEsT0FBQSxHQUF5QixJQUF6QjtBQUVBLE9BQUEsZ0JBQUEsR0FBNEIsS0FBNUI7QUFFQSxPQUFBLEtBQUEsR0FBaUIsS0FBakI7QUFFQSxPQUFBLEtBQUEsR0FBaUIsS0FBakI7QUFFQSxPQUFBLElBQUEsR0FBZ0IsS0FBaEI7QUFFQSxPQUFBLE9BQUEsR0FBa0UsSUFBbEU7QUFFQSxPQUFBLGFBQUEsR0FBeUIsS0FBekI7QUFFQSxPQUFBLG9CQUFBLEdBQWdDLEtBQWhDO0FBRUEsT0FBQSxzQkFBQSxHQUFrQyxLQUFsQztBQUVBLE9BQUEsY0FBQSxHQUF5QixJQUF6QjtBQUlBLE9BQUEsUUFBQSxHQUEyQixNQUEzQjtBQUVBLE9BQUEsU0FBQSxHQUFxQixLQUFyQjtBQUVBLE9BQUEsT0FBQSxHQUFrQixDQUFsQjtBQUVBLE9BQUEsU0FBQSxHQUFvQixDQUFwQjtBQUVBLE9BQUEsUUFBQSxHQUFtQixDQUFuQjtBQUdaLEVBQUEsTUFBTSxDQUFDLE1BQVAsQ0FBYyxJQUFkLEVBQW9CLElBQUksSUFBSSxFQUE1Qjs7QUFDQSxNQUFJLEtBQUssU0FBTCxDQUFlLE1BQWYsR0FBd0IsQ0FBNUIsRUFBK0I7QUFDM0IsVUFBTSxJQUFJLEtBQUosQ0FBVSw2Q0FBVixDQUFOO0FBQ0g7O0FBQ0QsT0FBSyxnQkFBTCxHQUF3QixxQkFBQSxDQUFBLE9BQUEsQ0FBYSxLQUFLLFNBQWxCLENBQXhCO0FBQ0EsT0FBSyxVQUFMLEdBQWUsQ0FBQSxFQUFBLEdBQUcsS0FBSyxNQUFSLE1BQWMsSUFBZCxJQUFjLEVBQUEsS0FBQSxLQUFBLENBQWQsR0FBYyxFQUFkLEdBQWtCLEtBQUssS0FBdEM7QUFDQSxPQUFLLGdCQUFMLEdBQXdCLENBQUMsY0FBQSxDQUFBLE9BQUEsQ0FBTSxLQUFLLE9BQVgsQ0FBekI7QUFDQSxPQUFLLGlCQUFMLEdBQXlCLElBQUksTUFBSixrQ0FBcUMsS0FBSyxnQkFBMUMsT0FBekI7O0FBRUEsTUFBSSxLQUFLLE9BQUwsR0FBZSxDQUFuQixFQUFzQjtBQUNsQixTQUFLLFNBQUwsR0FBaUIsSUFBakI7QUFDSDtBQUNKLEM7O0FBNURMLE9BQUEsQ0FBQSxhQUFBLEdBQUEsYUFBQSIsInNvdXJjZVJvb3QiOiIifQ==","\"use strict\";\n\nvar __createBinding = void 0 && (void 0).__createBinding || (Object.create ? function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, {\n enumerable: true,\n get: function get() {\n return m[k];\n }\n });\n} : function (o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nvar __setModuleDefault = void 0 && (void 0).__setModuleDefault || (Object.create ? function (o, v) {\n Object.defineProperty(o, \"default\", {\n enumerable: true,\n value: v\n });\n} : function (o, v) {\n o[\"default\"] = v;\n});\n\nvar __importStar = void 0 && (void 0).__importStar || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) {\n if (k !== \"default\" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n }\n\n __setModuleDefault(result, mod);\n\n return result;\n};\n\nvar __exportStar = void 0 && (void 0).__exportStar || function (m, exports) {\n for (var p in m) {\n if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\n }\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.parseString = exports.parseFile = exports.parseStream = exports.parse = void 0;\n\nvar fs = __importStar(require(\"fs\"));\n\nvar stream_1 = require(\"stream\");\n\nvar ParserOptions_1 = require(\"./ParserOptions\");\n\nvar CsvParserStream_1 = require(\"./CsvParserStream\");\n\n__exportStar(require(\"./types\"), exports);\n\nvar CsvParserStream_2 = require(\"./CsvParserStream\");\n\nObject.defineProperty(exports, \"CsvParserStream\", {\n enumerable: true,\n get: function get() {\n return CsvParserStream_2.CsvParserStream;\n }\n});\n\nvar ParserOptions_2 = require(\"./ParserOptions\");\n\nObject.defineProperty(exports, \"ParserOptions\", {\n enumerable: true,\n get: function get() {\n return ParserOptions_2.ParserOptions;\n }\n});\n\nexports.parse = function (args) {\n return new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(args));\n};\n\nexports.parseStream = function (stream, options) {\n return stream.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));\n};\n\nexports.parseFile = function (location) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return fs.createReadStream(location).pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));\n};\n\nexports.parseString = function (string, options) {\n var rs = new stream_1.Readable();\n rs.push(string);\n rs.push(null);\n return rs.pipe(new CsvParserStream_1.CsvParserStream(new ParserOptions_1.ParserOptions(options)));\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUEsRUFBQSxHQUFBLFlBQUEsQ0FBQSxPQUFBLENBQUEsSUFBQSxDQUFBLENBQUE7O0FBQ0EsSUFBQSxRQUFBLEdBQUEsT0FBQSxDQUFBLFFBQUEsQ0FBQTs7QUFDQSxJQUFBLGVBQUEsR0FBQSxPQUFBLENBQUEsaUJBQUEsQ0FBQTs7QUFDQSxJQUFBLGlCQUFBLEdBQUEsT0FBQSxDQUFBLG1CQUFBLENBQUE7O0FBR0EsWUFBQSxDQUFBLE9BQUEsQ0FBQSxTQUFBLENBQUEsRUFBQSxPQUFBLENBQUE7O0FBQ0EsSUFBQSxpQkFBQSxHQUFBLE9BQUEsQ0FBQSxtQkFBQSxDQUFBOztBQUFTLE1BQUEsQ0FBQSxjQUFBLENBQUEsT0FBQSxFQUFBLGlCQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsaUJBQUEsQ0FBQSxlQUFBO0FBQWU7QUFBZixDQUFBOztBQUNULElBQUEsZUFBQSxHQUFBLE9BQUEsQ0FBQSxpQkFBQSxDQUFBOztBQUFTLE1BQUEsQ0FBQSxjQUFBLENBQUEsT0FBQSxFQUFBLGVBQUEsRUFBQTtBQUFBLEVBQUEsVUFBQSxFQUFBLElBQUE7QUFBQSxFQUFBLEdBQUEsRUFBQSxlQUFBO0FBQUEsV0FBQSxlQUFBLENBQUEsYUFBQTtBQUFhO0FBQWIsQ0FBQTs7QUFFSSxPQUFBLENBQUEsS0FBQSxHQUFRLFVBQStCLElBQS9CO0FBQUEsU0FDakIsSUFBSSxpQkFBQSxDQUFBLGVBQUosQ0FBb0IsSUFBSSxlQUFBLENBQUEsYUFBSixDQUFrQixJQUFsQixDQUFwQixDQURpQjtBQUFBLENBQVI7O0FBR0EsT0FBQSxDQUFBLFdBQUEsR0FBYyxVQUN2QixNQUR1QixFQUV2QixPQUZ1QjtBQUFBLFNBR0MsTUFBTSxDQUFDLElBQVAsQ0FBWSxJQUFJLGlCQUFBLENBQUEsZUFBSixDQUFvQixJQUFJLGVBQUEsQ0FBQSxhQUFKLENBQWtCLE9BQWxCLENBQXBCLENBQVosQ0FIRDtBQUFBLENBQWQ7O0FBS0EsT0FBQSxDQUFBLFNBQUEsR0FBWSxVQUNyQixRQURxQjtBQUFBLE1BRXJCLE9BRnFCLHVFQUVRLEVBRlI7QUFBQSxTQUdHLEVBQUUsQ0FBQyxnQkFBSCxDQUFvQixRQUFwQixFQUE4QixJQUE5QixDQUFtQyxJQUFJLGlCQUFBLENBQUEsZUFBSixDQUFvQixJQUFJLGVBQUEsQ0FBQSxhQUFKLENBQWtCLE9BQWxCLENBQXBCLENBQW5DLENBSEg7QUFBQSxDQUFaOztBQUtBLE9BQUEsQ0FBQSxXQUFBLEdBQWMsVUFDdkIsTUFEdUIsRUFFdkIsT0FGdUIsRUFHQTtBQUN2QixNQUFNLEVBQUUsR0FBRyxJQUFJLFFBQUEsQ0FBQSxRQUFKLEVBQVg7QUFDQSxFQUFBLEVBQUUsQ0FBQyxJQUFILENBQVEsTUFBUjtBQUNBLEVBQUEsRUFBRSxDQUFDLElBQUgsQ0FBUSxJQUFSO0FBQ0EsU0FBTyxFQUFFLENBQUMsSUFBSCxDQUFRLElBQUksaUJBQUEsQ0FBQSxlQUFKLENBQW9CLElBQUksZUFBQSxDQUFBLGFBQUosQ0FBa0IsT0FBbEIsQ0FBcEIsQ0FBUixDQUFQO0FBQ0gsQ0FSWSIsInNvdXJjZVJvb3QiOiIifQ==","\"use strict\";\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\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Parser = void 0;\n\nvar Scanner_1 = require(\"./Scanner\");\n\nvar RowParser_1 = require(\"./RowParser\");\n\nvar Token_1 = require(\"./Token\");\n\nvar EMPTY_ROW_REGEXP = /^\\s*(?:''|\"\")?\\s*(?:,\\s*(?:''|\"\")?\\s*)*$/;\n\nvar Parser = /*#__PURE__*/function () {\n function Parser(parserOptions) {\n _classCallCheck(this, Parser);\n\n this.parserOptions = parserOptions;\n this.rowParser = new RowParser_1.RowParser(this.parserOptions);\n }\n\n _createClass(Parser, [{\n key: \"parse\",\n value: function parse(line, hasMoreData) {\n var scanner = new Scanner_1.Scanner({\n line: Parser.removeBOM(line),\n parserOptions: this.parserOptions,\n hasMoreData: hasMoreData\n });\n\n if (this.parserOptions.supportsComments) {\n return this.parseWithComments(scanner);\n }\n\n return this.parseWithoutComments(scanner);\n }\n }, {\n key: \"parseWithoutComments\",\n value: function parseWithoutComments(scanner) {\n var rows = [];\n var shouldContinue = true;\n\n while (shouldContinue) {\n shouldContinue = this.parseRow(scanner, rows);\n }\n\n return {\n line: scanner.line,\n rows: rows\n };\n }\n }, {\n key: \"parseWithComments\",\n value: function parseWithComments(scanner) {\n var parserOptions = this.parserOptions;\n var rows = [];\n\n for (var nextToken = scanner.nextCharacterToken; nextToken !== null; nextToken = scanner.nextCharacterToken) {\n if (Token_1.Token.isTokenComment(nextToken, parserOptions)) {\n var cursor = scanner.advancePastLine();\n\n if (cursor === null) {\n return {\n line: scanner.lineFromCursor,\n rows: rows\n };\n }\n\n if (!scanner.hasMoreCharacters) {\n return {\n line: scanner.lineFromCursor,\n rows: rows\n };\n }\n\n scanner.truncateToCursor();\n } else if (!this.parseRow(scanner, rows)) {\n break;\n }\n }\n\n return {\n line: scanner.line,\n rows: rows\n };\n }\n }, {\n key: \"parseRow\",\n value: function parseRow(scanner, rows) {\n var nextToken = scanner.nextNonSpaceToken;\n\n if (!nextToken) {\n return false;\n }\n\n var row = this.rowParser.parse(scanner);\n\n if (row === null) {\n return false;\n }\n\n if (this.parserOptions.ignoreEmpty && EMPTY_ROW_REGEXP.test(row.join(''))) {\n return true;\n }\n\n rows.push(row);\n return true;\n }\n }], [{\n key: \"removeBOM\",\n value: function removeBOM(line) {\n // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string\n // conversion translates it to FEFF (UTF-16 BOM)\n if (line && line.charCodeAt(0) === 0xfeff) {\n return line.slice(1);\n }\n\n return line;\n }\n }]);\n\n return Parser;\n}();\n\nexports.Parser = Parser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBLFNBQUEsR0FBQSxPQUFBLENBQUEsV0FBQSxDQUFBOztBQUNBLElBQUEsV0FBQSxHQUFBLE9BQUEsQ0FBQSxhQUFBLENBQUE7O0FBR0EsSUFBQSxPQUFBLEdBQUEsT0FBQSxDQUFBLFNBQUEsQ0FBQTs7QUFFQSxJQUFNLGdCQUFnQixHQUFHLDBDQUF6Qjs7SUFNYSxNO0FBY1Qsa0JBQW1CLGFBQW5CLEVBQStDO0FBQUE7O0FBQzNDLFNBQUssYUFBTCxHQUFxQixhQUFyQjtBQUNBLFNBQUssU0FBTCxHQUFpQixJQUFJLFdBQUEsQ0FBQSxTQUFKLENBQWMsS0FBSyxhQUFuQixDQUFqQjtBQUNIOzs7OzBCQUVZLEksRUFBYyxXLEVBQW9CO0FBQzNDLFVBQU0sT0FBTyxHQUFHLElBQUksU0FBQSxDQUFBLE9BQUosQ0FBWTtBQUN4QixRQUFBLElBQUksRUFBRSxNQUFNLENBQUMsU0FBUCxDQUFpQixJQUFqQixDQURrQjtBQUV4QixRQUFBLGFBQWEsRUFBRSxLQUFLLGFBRkk7QUFHeEIsUUFBQSxXQUFXLEVBQVg7QUFId0IsT0FBWixDQUFoQjs7QUFLQSxVQUFJLEtBQUssYUFBTCxDQUFtQixnQkFBdkIsRUFBeUM7QUFDckMsZUFBTyxLQUFLLGlCQUFMLENBQXVCLE9BQXZCLENBQVA7QUFDSDs7QUFDRCxhQUFPLEtBQUssb0JBQUwsQ0FBMEIsT0FBMUIsQ0FBUDtBQUNIOzs7eUNBRTRCLE8sRUFBZ0I7QUFDekMsVUFBTSxJQUFJLEdBQWUsRUFBekI7QUFDQSxVQUFJLGNBQWMsR0FBRyxJQUFyQjs7QUFDQSxhQUFPLGNBQVAsRUFBdUI7QUFDbkIsUUFBQSxjQUFjLEdBQUcsS0FBSyxRQUFMLENBQWMsT0FBZCxFQUF1QixJQUF2QixDQUFqQjtBQUNIOztBQUNELGFBQU87QUFBRSxRQUFBLElBQUksRUFBRSxPQUFPLENBQUMsSUFBaEI7QUFBc0IsUUFBQSxJQUFJLEVBQUo7QUFBdEIsT0FBUDtBQUNIOzs7c0NBRXlCLE8sRUFBZ0I7QUFBQSxVQUM5QixhQUQ4QixHQUNaLElBRFksQ0FDOUIsYUFEOEI7QUFFdEMsVUFBTSxJQUFJLEdBQWUsRUFBekI7O0FBQ0EsV0FBSyxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQTdCLEVBQWlELFNBQVMsS0FBSyxJQUEvRCxFQUFxRSxTQUFTLEdBQUcsT0FBTyxDQUFDLGtCQUF6RixFQUE2RztBQUN6RyxZQUFJLE9BQUEsQ0FBQSxLQUFBLENBQU0sY0FBTixDQUFxQixTQUFyQixFQUFnQyxhQUFoQyxDQUFKLEVBQW9EO0FBQ2hELGNBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxlQUFSLEVBQWY7O0FBQ0EsY0FBSSxNQUFNLEtBQUssSUFBZixFQUFxQjtBQUNqQixtQkFBTztBQUFFLGNBQUEsSUFBSSxFQUFFLE9BQU8sQ0FBQyxjQUFoQjtBQUFnQyxjQUFBLElBQUksRUFBSjtBQUFoQyxhQUFQO0FBQ0g7O0FBQ0QsY0FBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBYixFQUFnQztBQUM1QixtQkFBTztBQUFFLGNBQUEsSUFBSSxFQUFFLE9BQU8sQ0FBQyxjQUFoQjtBQUFnQyxjQUFBLElBQUksRUFBSjtBQUFoQyxhQUFQO0FBQ0g7O0FBQ0QsVUFBQSxPQUFPLENBQUMsZ0JBQVI7QUFDSCxTQVRELE1BU08sSUFBSSxDQUFDLEtBQUssUUFBTCxDQUFjLE9BQWQsRUFBdUIsSUFBdkIsQ0FBTCxFQUFtQztBQUN0QztBQUNIO0FBQ0o7O0FBQ0QsYUFBTztBQUFFLFFBQUEsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFoQjtBQUFzQixRQUFBLElBQUksRUFBSjtBQUF0QixPQUFQO0FBQ0g7Ozs2QkFFZ0IsTyxFQUFrQixJLEVBQWdCO0FBQy9DLFVBQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxpQkFBMUI7O0FBQ0EsVUFBSSxDQUFDLFNBQUwsRUFBZ0I7QUFDWixlQUFPLEtBQVA7QUFDSDs7QUFDRCxVQUFNLEdBQUcsR0FBRyxLQUFLLFNBQUwsQ0FBZSxLQUFmLENBQXFCLE9BQXJCLENBQVo7O0FBQ0EsVUFBSSxHQUFHLEtBQUssSUFBWixFQUFrQjtBQUNkLGVBQU8sS0FBUDtBQUNIOztBQUNELFVBQUksS0FBSyxhQUFMLENBQW1CLFdBQW5CLElBQWtDLGdCQUFnQixDQUFDLElBQWpCLENBQXNCLEdBQUcsQ0FBQyxJQUFKLENBQVMsRUFBVCxDQUF0QixDQUF0QyxFQUEyRTtBQUN2RSxlQUFPLElBQVA7QUFDSDs7QUFDRCxNQUFBLElBQUksQ0FBQyxJQUFMLENBQVUsR0FBVjtBQUNBLGFBQU8sSUFBUDtBQUNIOzs7OEJBekV3QixJLEVBQVk7QUFDakM7QUFDQTtBQUNBLFVBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFMLENBQWdCLENBQWhCLE1BQXVCLE1BQW5DLEVBQTJDO0FBQ3ZDLGVBQU8sSUFBSSxDQUFDLEtBQUwsQ0FBVyxDQUFYLENBQVA7QUFDSDs7QUFDRCxhQUFPLElBQVA7QUFDSDs7Ozs7O0FBUkwsT0FBQSxDQUFBLE1BQUEsR0FBQSxNQUFBIiwic291cmNlUm9vdCI6IiJ9","\"use strict\";\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\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RowParser = void 0;\n\nvar column_1 = require(\"./column\");\n\nvar Token_1 = require(\"./Token\");\n\nvar _Token_1$Token = Token_1.Token,\n isTokenRowDelimiter = _Token_1$Token.isTokenRowDelimiter,\n isTokenCarriageReturn = _Token_1$Token.isTokenCarriageReturn,\n isTokenDelimiter = _Token_1$Token.isTokenDelimiter;\n\nvar RowParser = /*#__PURE__*/function () {\n function RowParser(parserOptions) {\n _classCallCheck(this, RowParser);\n\n this.parserOptions = parserOptions;\n this.columnParser = new column_1.ColumnParser(parserOptions);\n }\n\n _createClass(RowParser, [{\n key: \"parse\",\n value: function parse(scanner) {\n var parserOptions = this.parserOptions;\n var hasMoreData = scanner.hasMoreData;\n var currentScanner = scanner;\n var columns = [];\n var currentToken = this.getStartToken(currentScanner, columns);\n\n while (currentToken) {\n if (isTokenRowDelimiter(currentToken)) {\n currentScanner.advancePastToken(currentToken); // if ends with CR and there is more data, keep unparsed due to possible\n // coming LF in CRLF\n\n if (!currentScanner.hasMoreCharacters && isTokenCarriageReturn(currentToken, parserOptions) && hasMoreData) {\n return null;\n }\n\n currentScanner.truncateToCursor();\n return columns;\n }\n\n if (!this.shouldSkipColumnParse(currentScanner, currentToken, columns)) {\n var item = this.columnParser.parse(currentScanner);\n\n if (item === null) {\n return null;\n }\n\n columns.push(item);\n }\n\n currentToken = currentScanner.nextNonSpaceToken;\n }\n\n if (!hasMoreData) {\n currentScanner.truncateToCursor();\n return columns;\n }\n\n return null;\n }\n }, {\n key: \"getStartToken\",\n value: function getStartToken(scanner, columns) {\n var currentToken = scanner.nextNonSpaceToken;\n\n if (currentToken !== null && isTokenDelimiter(currentToken, this.parserOptions)) {\n columns.push('');\n return scanner.nextNonSpaceToken;\n }\n\n return currentToken;\n }\n }, {\n key: \"shouldSkipColumnParse\",\n value: function shouldSkipColumnParse(scanner, currentToken, columns) {\n var parserOptions = this.parserOptions;\n\n if (isTokenDelimiter(currentToken, parserOptions)) {\n scanner.advancePastToken(currentToken); // if the delimiter is at the end of a line\n\n var nextToken = scanner.nextCharacterToken;\n\n if (!scanner.hasMoreCharacters || nextToken !== null && isTokenRowDelimiter(nextToken)) {\n columns.push('');\n return true;\n }\n\n if (nextToken !== null && isTokenDelimiter(nextToken, parserOptions)) {\n columns.push('');\n return true;\n }\n }\n\n return false;\n }\n }]);\n\n return RowParser;\n}();\n\nexports.RowParser = RowParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvUm93UGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFBLFFBQUEsR0FBQSxPQUFBLENBQUEsVUFBQSxDQUFBOztBQUdBLElBQUEsT0FBQSxHQUFBLE9BQUEsQ0FBQSxTQUFBLENBQUE7O3FCQUV5RSxPQUFBLENBQUEsSztJQUFqRSxtQixrQkFBQSxtQjtJQUFxQixxQixrQkFBQSxxQjtJQUF1QixnQixrQkFBQSxnQjs7SUFFdkMsUztBQUtULHFCQUFtQixhQUFuQixFQUErQztBQUFBOztBQUMzQyxTQUFLLGFBQUwsR0FBcUIsYUFBckI7QUFDQSxTQUFLLFlBQUwsR0FBb0IsSUFBSSxRQUFBLENBQUEsWUFBSixDQUFpQixhQUFqQixDQUFwQjtBQUNIOzs7OzBCQUVZLE8sRUFBZ0I7QUFBQSxVQUNqQixhQURpQixHQUNDLElBREQsQ0FDakIsYUFEaUI7QUFBQSxVQUVqQixXQUZpQixHQUVELE9BRkMsQ0FFakIsV0FGaUI7QUFHekIsVUFBTSxjQUFjLEdBQUcsT0FBdkI7QUFDQSxVQUFNLE9BQU8sR0FBcUIsRUFBbEM7QUFDQSxVQUFJLFlBQVksR0FBRyxLQUFLLGFBQUwsQ0FBbUIsY0FBbkIsRUFBbUMsT0FBbkMsQ0FBbkI7O0FBQ0EsYUFBTyxZQUFQLEVBQXFCO0FBQ2pCLFlBQUksbUJBQW1CLENBQUMsWUFBRCxDQUF2QixFQUF1QztBQUNuQyxVQUFBLGNBQWMsQ0FBQyxnQkFBZixDQUFnQyxZQUFoQyxFQURtQyxDQUVuQztBQUNBOztBQUNBLGNBQ0ksQ0FBQyxjQUFjLENBQUMsaUJBQWhCLElBQ0EscUJBQXFCLENBQUMsWUFBRCxFQUFlLGFBQWYsQ0FEckIsSUFFQSxXQUhKLEVBSUU7QUFDRSxtQkFBTyxJQUFQO0FBQ0g7O0FBQ0QsVUFBQSxjQUFjLENBQUMsZ0JBQWY7QUFDQSxpQkFBTyxPQUFQO0FBQ0g7O0FBQ0QsWUFBSSxDQUFDLEtBQUsscUJBQUwsQ0FBMkIsY0FBM0IsRUFBMkMsWUFBM0MsRUFBeUQsT0FBekQsQ0FBTCxFQUF3RTtBQUNwRSxjQUFNLElBQUksR0FBRyxLQUFLLFlBQUwsQ0FBa0IsS0FBbEIsQ0FBd0IsY0FBeEIsQ0FBYjs7QUFDQSxjQUFJLElBQUksS0FBSyxJQUFiLEVBQW1CO0FBQ2YsbUJBQU8sSUFBUDtBQUNIOztBQUNELFVBQUEsT0FBTyxDQUFDLElBQVIsQ0FBYSxJQUFiO0FBQ0g7O0FBQ0QsUUFBQSxZQUFZLEdBQUcsY0FBYyxDQUFDLGlCQUE5QjtBQUNIOztBQUNELFVBQUksQ0FBQyxXQUFMLEVBQWtCO0FBQ2QsUUFBQSxjQUFjLENBQUMsZ0JBQWY7QUFDQSxlQUFPLE9BQVA7QUFDSDs7QUFDRCxhQUFPLElBQVA7QUFDSDs7O2tDQUVxQixPLEVBQWtCLE8sRUFBaUI7QUFDckQsVUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLGlCQUE3Qjs7QUFDQSxVQUFJLFlBQVksS0FBSyxJQUFqQixJQUF5QixnQkFBZ0IsQ0FBQyxZQUFELEVBQWUsS0FBSyxhQUFwQixDQUE3QyxFQUFpRjtBQUM3RSxRQUFBLE9BQU8sQ0FBQyxJQUFSLENBQWEsRUFBYjtBQUNBLGVBQU8sT0FBTyxDQUFDLGlCQUFmO0FBQ0g7O0FBQ0QsYUFBTyxZQUFQO0FBQ0g7OzswQ0FFNkIsTyxFQUFrQixZLEVBQXFCLE8sRUFBaUI7QUFBQSxVQUMxRSxhQUQwRSxHQUN4RCxJQUR3RCxDQUMxRSxhQUQwRTs7QUFFbEYsVUFBSSxnQkFBZ0IsQ0FBQyxZQUFELEVBQWUsYUFBZixDQUFwQixFQUFtRDtBQUMvQyxRQUFBLE9BQU8sQ0FBQyxnQkFBUixDQUF5QixZQUF6QixFQUQrQyxDQUUvQzs7QUFDQSxZQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQTFCOztBQUNBLFlBQUksQ0FBQyxPQUFPLENBQUMsaUJBQVQsSUFBK0IsU0FBUyxLQUFLLElBQWQsSUFBc0IsbUJBQW1CLENBQUMsU0FBRCxDQUE1RSxFQUEwRjtBQUN0RixVQUFBLE9BQU8sQ0FBQyxJQUFSLENBQWEsRUFBYjtBQUNBLGlCQUFPLElBQVA7QUFDSDs7QUFDRCxZQUFJLFNBQVMsS0FBSyxJQUFkLElBQXNCLGdCQUFnQixDQUFDLFNBQUQsRUFBWSxhQUFaLENBQTFDLEVBQXNFO0FBQ2xFLFVBQUEsT0FBTyxDQUFDLElBQVIsQ0FBYSxFQUFiO0FBQ0EsaUJBQU8sSUFBUDtBQUNIO0FBQ0o7O0FBQ0QsYUFBTyxLQUFQO0FBQ0g7Ozs7OztBQXhFTCxPQUFBLENBQUEsU0FBQSxHQUFBLFNBQUEiLCJzb3VyY2VSb290IjoiIn0=","\"use strict\";\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\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Scanner = void 0;\n\nvar Token_1 = require(\"./Token\");\n\nvar ROW_DELIMITER = /((?:\\r\\n)|\\n|\\r)/;\n\nvar Scanner = /*#__PURE__*/function () {\n function Scanner(args) {\n _classCallCheck(this, Scanner);\n\n this.cursor = 0;\n this.line = args.line;\n this.lineLength = this.line.length;\n this.parserOptions = args.parserOptions;\n this.hasMoreData = args.hasMoreData;\n this.cursor = args.cursor || 0;\n }\n\n _createClass(Scanner, [{\n key: \"advancePastLine\",\n value: function advancePastLine() {\n var match = ROW_DELIMITER.exec(this.lineFromCursor);\n\n if (!match) {\n if (this.hasMoreData) {\n return null;\n }\n\n this.cursor = this.lineLength;\n return this;\n }\n\n this.cursor += (match.index || 0) + match[0].length;\n return this;\n }\n }, {\n key: \"advanceTo\",\n value: function advanceTo(cursor) {\n this.cursor = cursor;\n return this;\n }\n }, {\n key: \"advanceToToken\",\n value: function advanceToToken(token) {\n this.cursor = token.startCursor;\n return this;\n }\n }, {\n key: \"advancePastToken\",\n value: function advancePastToken(token) {\n this.cursor = token.endCursor + 1;\n return this;\n }\n }, {\n key: \"truncateToCursor\",\n value: function truncateToCursor() {\n this.line = this.lineFromCursor;\n this.lineLength = this.line.length;\n this.cursor = 0;\n return this;\n }\n }, {\n key: \"hasMoreCharacters\",\n get: function get() {\n return this.lineLength > this.cursor;\n }\n }, {\n key: \"nextNonSpaceToken\",\n get: function get() {\n var lineFromCursor = this.lineFromCursor;\n var regex = this.parserOptions.NEXT_TOKEN_REGEXP;\n\n if (lineFromCursor.search(regex) === -1) {\n return null;\n }\n\n var match = regex.exec(lineFromCursor);\n\n if (match == null) {\n return null;\n }\n\n var token = match[1];\n var startCursor = this.cursor + (match.index || 0);\n return new Token_1.Token({\n token: token,\n startCursor: startCursor,\n endCursor: startCursor + token.length - 1\n });\n }\n }, {\n key: \"nextCharacterToken\",\n get: function get() {\n var cursor = this.cursor,\n lineLength = this.lineLength;\n\n if (lineLength <= cursor) {\n return null;\n }\n\n return new Token_1.Token({\n token: this.line[cursor],\n startCursor: cursor,\n endCursor: cursor\n });\n }\n }, {\n key: \"lineFromCursor\",\n get: function get() {\n return this.line.substr(this.cursor);\n }\n }]);\n\n return Scanner;\n}();\n\nexports.Scanner = Scanner;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvU2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQ0EsSUFBQSxPQUFBLEdBQUEsT0FBQSxDQUFBLFNBQUEsQ0FBQTs7QUFFQSxJQUFNLGFBQWEsR0FBRyxrQkFBdEI7O0lBU2EsTztBQVdULG1CQUFtQixJQUFuQixFQUFvQztBQUFBOztBQUY3QixTQUFBLE1BQUEsR0FBUyxDQUFUO0FBR0gsU0FBSyxJQUFMLEdBQVksSUFBSSxDQUFDLElBQWpCO0FBQ0EsU0FBSyxVQUFMLEdBQWtCLEtBQUssSUFBTCxDQUFVLE1BQTVCO0FBQ0EsU0FBSyxhQUFMLEdBQXFCLElBQUksQ0FBQyxhQUExQjtBQUNBLFNBQUssV0FBTCxHQUFtQixJQUFJLENBQUMsV0FBeEI7QUFDQSxTQUFLLE1BQUwsR0FBYyxJQUFJLENBQUMsTUFBTCxJQUFlLENBQTdCO0FBQ0g7Ozs7c0NBeUNxQjtBQUNsQixVQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsSUFBZCxDQUFtQixLQUFLLGNBQXhCLENBQWQ7O0FBQ0EsVUFBSSxDQUFDLEtBQUwsRUFBWTtBQUNSLFlBQUksS0FBSyxXQUFULEVBQXNCO0FBQ2xCLGlCQUFPLElBQVA7QUFDSDs7QUFDRCxhQUFLLE1BQUwsR0FBYyxLQUFLLFVBQW5CO0FBQ0EsZUFBTyxJQUFQO0FBQ0g7O0FBQ0QsV0FBSyxNQUFMLElBQWUsQ0FBQyxLQUFLLENBQUMsS0FBTixJQUFlLENBQWhCLElBQXFCLEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBUyxNQUE3QztBQUNBLGFBQU8sSUFBUDtBQUNIOzs7OEJBRWdCLE0sRUFBYztBQUMzQixXQUFLLE1BQUwsR0FBYyxNQUFkO0FBQ0EsYUFBTyxJQUFQO0FBQ0g7OzttQ0FFcUIsSyxFQUFZO0FBQzlCLFdBQUssTUFBTCxHQUFjLEtBQUssQ0FBQyxXQUFwQjtBQUNBLGFBQU8sSUFBUDtBQUNIOzs7cUNBRXVCLEssRUFBWTtBQUNoQyxXQUFLLE1BQUwsR0FBYyxLQUFLLENBQUMsU0FBTixHQUFrQixDQUFoQztBQUNBLGFBQU8sSUFBUDtBQUNIOzs7dUNBRXNCO0FBQ25CLFdBQUssSUFBTCxHQUFZLEtBQUssY0FBakI7QUFDQSxXQUFLLFVBQUwsR0FBa0IsS0FBSyxJQUFMLENBQVUsTUFBNUI7QUFDQSxXQUFLLE1BQUwsR0FBYyxDQUFkO0FBQ0EsYUFBTyxJQUFQO0FBQ0g7Ozt3QkF4RTJCO0FBQ3hCLGFBQU8sS0FBSyxVQUFMLEdBQWtCLEtBQUssTUFBOUI7QUFDSDs7O3dCQUUyQjtBQUFBLFVBQ2hCLGNBRGdCLEdBQ0csSUFESCxDQUNoQixjQURnQjtBQUV4QixVQUFNLEtBQUssR0FBRyxLQUFLLGFBQUwsQ0FBbUIsaUJBQWpDOztBQUNBLFVBQUksY0FBYyxDQUFDLE1BQWYsQ0FBc0IsS0FBdEIsTUFBaUMsQ0FBQyxDQUF0QyxFQUF5QztBQUNyQyxlQUFPLElBQVA7QUFDSDs7QUFDRCxVQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBTixDQUFXLGNBQVgsQ0FBZDs7QUFDQSxVQUFJLEtBQUssSUFBSSxJQUFiLEVBQW1CO0FBQ2YsZUFBTyxJQUFQO0FBQ0g7O0FBQ0QsVUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUQsQ0FBbkI7QUFDQSxVQUFNLFdBQVcsR0FBRyxLQUFLLE1BQUwsSUFBZSxLQUFLLENBQUMsS0FBTixJQUFlLENBQTlCLENBQXBCO0FBQ0EsYUFBTyxJQUFJLE9BQUEsQ0FBQSxLQUFKLENBQVU7QUFDYixRQUFBLEtBQUssRUFBTCxLQURhO0FBRWIsUUFBQSxXQUFXLEVBQVgsV0FGYTtBQUdiLFFBQUEsU0FBUyxFQUFFLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBcEIsR0FBNkI7QUFIM0IsT0FBVixDQUFQO0FBS0g7Ozt3QkFFNEI7QUFBQSxVQUNqQixNQURpQixHQUNNLElBRE4sQ0FDakIsTUFEaUI7QUFBQSxVQUNULFVBRFMsR0FDTSxJQUROLENBQ1QsVUFEUzs7QUFFekIsVUFBSSxVQUFVLElBQUksTUFBbEIsRUFBMEI7QUFDdEIsZUFBTyxJQUFQO0FBQ0g7O0FBQ0QsYUFBTyxJQUFJLE9BQUEsQ0FBQSxLQUFKLENBQVU7QUFDYixRQUFBLEtBQUssRUFBRSxLQUFLLElBQUwsQ0FBVSxNQUFWLENBRE07QUFFYixRQUFBLFdBQVcsRUFBRSxNQUZBO0FBR2IsUUFBQSxTQUFTLEVBQUU7QUFIRSxPQUFWLENBQVA7QUFLSDs7O3dCQUV3QjtBQUNyQixhQUFPLEtBQUssSUFBTCxDQUFVLE1BQVYsQ0FBaUIsS0FBSyxNQUF0QixDQUFQO0FBQ0g7Ozs7OztBQXhETCxPQUFBLENBQUEsT0FBQSxHQUFBLE9BQUEiLCJzb3VyY2VSb290IjoiIn0=","\"use strict\";\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\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Token = void 0;\n\nvar Token = /*#__PURE__*/function () {\n function Token(tokenArgs) {\n _classCallCheck(this, Token);\n\n this.token = tokenArgs.token;\n this.startCursor = tokenArgs.startCursor;\n this.endCursor = tokenArgs.endCursor;\n }\n\n _createClass(Token, null, [{\n key: \"isTokenRowDelimiter\",\n value: function isTokenRowDelimiter(token) {\n var content = token.token;\n return content === '\\r' || content === '\\n' || content === '\\r\\n';\n }\n }, {\n key: \"isTokenCarriageReturn\",\n value: function isTokenCarriageReturn(token, parserOptions) {\n return token.token === parserOptions.carriageReturn;\n }\n }, {\n key: \"isTokenComment\",\n value: function isTokenComment(token, parserOptions) {\n return parserOptions.supportsComments && !!token && token.token === parserOptions.comment;\n }\n }, {\n key: \"isTokenEscapeCharacter\",\n value: function isTokenEscapeCharacter(token, parserOptions) {\n return token.token === parserOptions.escapeChar;\n }\n }, {\n key: \"isTokenQuote\",\n value: function isTokenQuote(token, parserOptions) {\n return token.token === parserOptions.quote;\n }\n }, {\n key: \"isTokenDelimiter\",\n value: function isTokenDelimiter(token, parserOptions) {\n return token.token === parserOptions.delimiter;\n }\n }]);\n\n return Token;\n}();\n\nexports.Token = Token;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztJQVVhLEs7QUFnQ1QsaUJBQW1CLFNBQW5CLEVBQXVDO0FBQUE7O0FBQ25DLFNBQUssS0FBTCxHQUFhLFNBQVMsQ0FBQyxLQUF2QjtBQUNBLFNBQUssV0FBTCxHQUFtQixTQUFTLENBQUMsV0FBN0I7QUFDQSxTQUFLLFNBQUwsR0FBaUIsU0FBUyxDQUFDLFNBQTNCO0FBQ0g7Ozs7d0NBbkNpQyxLLEVBQVk7QUFDMUMsVUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQXRCO0FBQ0EsYUFBTyxPQUFPLEtBQUssSUFBWixJQUFvQixPQUFPLEtBQUssSUFBaEMsSUFBd0MsT0FBTyxLQUFLLE1BQTNEO0FBQ0g7OzswQ0FFbUMsSyxFQUFjLGEsRUFBNEI7QUFDMUUsYUFBTyxLQUFLLENBQUMsS0FBTixLQUFnQixhQUFhLENBQUMsY0FBckM7QUFDSDs7O21DQUU0QixLLEVBQWMsYSxFQUE0QjtBQUNuRSxhQUFPLGFBQWEsQ0FBQyxnQkFBZCxJQUFrQyxDQUFDLENBQUMsS0FBcEMsSUFBNkMsS0FBSyxDQUFDLEtBQU4sS0FBZ0IsYUFBYSxDQUFDLE9BQWxGO0FBQ0g7OzsyQ0FFb0MsSyxFQUFjLGEsRUFBNEI7QUFDM0UsYUFBTyxLQUFLLENBQUMsS0FBTixLQUFnQixhQUFhLENBQUMsVUFBckM7QUFDSDs7O2lDQUUwQixLLEVBQWMsYSxFQUE0QjtBQUNqRSxhQUFPLEtBQUssQ0FBQyxLQUFOLEtBQWdCLGFBQWEsQ0FBQyxLQUFyQztBQUNIOzs7cUNBRThCLEssRUFBYyxhLEVBQTRCO0FBQ3JFLGFBQU8sS0FBSyxDQUFDLEtBQU4sS0FBZ0IsYUFBYSxDQUFDLFNBQXJDO0FBQ0g7Ozs7OztBQXhCTCxPQUFBLENBQUEsS0FBQSxHQUFBLEtBQUEiLCJzb3VyY2VSb290IjoiIn0=","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColumnFormatter = void 0;\n\nvar ColumnFormatter = function ColumnFormatter(parserOptions) {\n _classCallCheck(this, ColumnFormatter);\n\n if (parserOptions.trim) {\n this.format = function (col) {\n return col.trim();\n };\n } else if (parserOptions.ltrim) {\n this.format = function (col) {\n return col.trimLeft();\n };\n } else if (parserOptions.rtrim) {\n this.format = function (col) {\n return col.trimRight();\n };\n } else {\n this.format = function (col) {\n return col;\n };\n }\n};\n\nexports.ColumnFormatter = ColumnFormatter;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXJzZXIvY29sdW1uL0NvbHVtbkZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7SUFFYSxlLEdBR1QseUJBQW1CLGFBQW5CLEVBQStDO0FBQUE7O0FBQzNDLE1BQUksYUFBYSxDQUFDLElBQWxCLEVBQXdCO0FBQ3BCLFNBQUssTUFBTCxHQUFjLFVBQUMsR0FBRDtBQUFBLGFBQXlCLEdBQUcsQ0FBQyxJQUFKLEVBQXpCO0FBQUEsS0FBZDtBQUNILEdBRkQsTUFFTyxJQUFJLGFBQWEsQ0FBQyxLQUFsQixFQUF5QjtBQUM1QixTQUFLLE1BQUwsR0FBYyxVQUFDLEdBQUQ7QUFBQSxhQUF5QixHQUFHLENBQUMsUUFBSixFQUF6QjtBQUFBLEtBQWQ7QUFDSCxHQUZNLE1BRUEsSUFBSSxhQUFhLENBQUMsS0FBbEIsRUFBeUI7QUFDNUIsU0FBSyxNQUFMLEdBQWMsVUFBQyxHQUFEO0FBQUEsYUFBeUIsR0FBRyxDQUFDLFNBQUosRUFBekI7QUFBQSxLQUFkO0FBQ0gsR0FGTSxNQUVBO0FBQ0gsU0FBSyxNQUFMLEdBQWMsVUFBQyxHQUFEO0FBQUEsYUFBeUIsR0FBekI7QUFBQSxLQUFkO0FBQ0g7QUFDSixDOztBQWJMLE9BQUEsQ0FBQSxlQUFBLEdBQUEsZUFBQSIsInNvdXJjZVJvb3QiOiIifQ==","\"use strict\";\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\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.ColumnParser = void 0;\n\nvar NonQuotedColumnParser_1 = require(\"./NonQuotedColumnParser\");\n\nvar QuotedColumnParser_1 = require(\"./QuotedColumnParser\");\n\nvar Token_1 = require(\"../Token\");\n\nvar ColumnParser = /*#__PURE__*/function () {\n function ColumnParser(parserOptions) {\n _classCallCheck(this, ColumnParser);\n\n this.parserOptions = parserOptions;\n this.quotedColumnParser = new QuotedColumnParser_1.QuotedColumnParser(parserOptions);\n this.nonQuotedColumnParser = new NonQuotedColumnParser_1.NonQuotedColumnParser(parserOptions);\n }\n\n _createClass(ColumnParser, [{\n key: \"parse\",\n value: function parse(scanner) {\n var nextNonSpaceToken = scanner.nextNonSpaceToken;\n\n if (nextNonSpaceToken !== null && Token_1.Token.isTokenQuote(nextNonSpaceToken, this.parserOptions)) {\n scanner.advanceToToken(nextNonSpaceToken);\n return this.quotedColumnParser.parse(scanner);\n }\n\n return this.nonQuotedColumnParser.parse(scanner);\n }\n }]);\n\n return ColumnParser;\n}();\n\nexports.ColumnParser = ColumnParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXJzZXIvY29sdW1uL0NvbHVtblBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQ0EsSUFBQSx1QkFBQSxHQUFBLE9BQUEsQ0FBQSx5QkFBQSxDQUFBOztBQUNBLElBQUEsb0JBQUEsR0FBQSxPQUFBLENBQUEsc0JBQUEsQ0FBQTs7QUFFQSxJQUFBLE9BQUEsR0FBQSxPQUFBLENBQUEsVUFBQSxDQUFBOztJQUVhLFk7QUFPVCx3QkFBbUIsYUFBbkIsRUFBK0M7QUFBQTs7QUFDM0MsU0FBSyxhQUFMLEdBQXFCLGFBQXJCO0FBQ0EsU0FBSyxrQkFBTCxHQUEwQixJQUFJLG9CQUFBLENBQUEsa0JBQUosQ0FBdUIsYUFBdkIsQ0FBMUI7QUFDQSxTQUFLLHFCQUFMLEdBQTZCLElBQUksdUJBQUEsQ0FBQSxxQkFBSixDQUEwQixhQUExQixDQUE3QjtBQUNIOzs7OzBCQUVZLE8sRUFBZ0I7QUFBQSxVQUNqQixpQkFEaUIsR0FDSyxPQURMLENBQ2pCLGlCQURpQjs7QUFFekIsVUFBSSxpQkFBaUIsS0FBSyxJQUF0QixJQUE4QixPQUFBLENBQUEsS0FBQSxDQUFNLFlBQU4sQ0FBbUIsaUJBQW5CLEVBQXNDLEtBQUssYUFBM0MsQ0FBbEMsRUFBNkY7QUFDekYsUUFBQSxPQUFPLENBQUMsY0FBUixDQUF1QixpQkFBdkI7QUFDQSxlQUFPLEtBQUssa0JBQUwsQ0FBd0IsS0FBeEIsQ0FBOEIsT0FBOUIsQ0FBUDtBQUNIOztBQUNELGFBQU8sS0FBSyxxQkFBTCxDQUEyQixLQUEzQixDQUFpQyxPQUFqQyxDQUFQO0FBQ0g7Ozs7OztBQXBCTCxPQUFBLENBQUEsWUFBQSxHQUFBLFlBQUEiLCJzb3VyY2VSb290IjoiIn0=","\"use strict\";\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\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.NonQuotedColumnParser = void 0;\n\nvar ColumnFormatter_1 = require(\"./ColumnFormatter\");\n\nvar Token_1 = require(\"../Token\");\n\nvar _Token_1$Token = Token_1.Token,\n isTokenDelimiter = _Token_1$Token.isTokenDelimiter,\n isTokenRowDelimiter = _Token_1$Token.isTokenRowDelimiter;\n\nvar NonQuotedColumnParser = /*#__PURE__*/function () {\n function NonQuotedColumnParser(parserOptions) {\n _classCallCheck(this, NonQuotedColumnParser);\n\n this.parserOptions = parserOptions;\n this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions);\n }\n\n _createClass(NonQuotedColumnParser, [{\n key: \"parse\",\n value: function parse(scanner) {\n if (!scanner.hasMoreCharacters) {\n return null;\n }\n\n var parserOptions = this.parserOptions;\n var characters = [];\n var nextToken = scanner.nextCharacterToken;\n\n for (; nextToken; nextToken = scanner.nextCharacterToken) {\n if (isTokenDelimiter(nextToken, parserOptions) || isTokenRowDelimiter(nextToken)) {\n break;\n }\n\n characters.push(nextToken.token);\n scanner.advancePastToken(nextToken);\n }\n\n return this.columnFormatter.format(characters.join(''));\n }\n }]);\n\n return NonQuotedColumnParser;\n}();\n\nexports.NonQuotedColumnParser = NonQuotedColumnParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXJzZXIvY29sdW1uL05vblF1b3RlZENvbHVtblBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQ0EsSUFBQSxpQkFBQSxHQUFBLE9BQUEsQ0FBQSxtQkFBQSxDQUFBOztBQUVBLElBQUEsT0FBQSxHQUFBLE9BQUEsQ0FBQSxVQUFBLENBQUE7O3FCQUVrRCxPQUFBLENBQUEsSztJQUExQyxnQixrQkFBQSxnQjtJQUFrQixtQixrQkFBQSxtQjs7SUFFYixxQjtBQUtULGlDQUFtQixhQUFuQixFQUErQztBQUFBOztBQUMzQyxTQUFLLGFBQUwsR0FBcUIsYUFBckI7QUFDQSxTQUFLLGVBQUwsR0FBdUIsSUFBSSxpQkFBQSxDQUFBLGVBQUosQ0FBb0IsYUFBcEIsQ0FBdkI7QUFDSDs7OzswQkFFWSxPLEVBQWdCO0FBQ3pCLFVBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWIsRUFBZ0M7QUFDNUIsZUFBTyxJQUFQO0FBQ0g7O0FBSHdCLFVBSWpCLGFBSmlCLEdBSUMsSUFKRCxDQUlqQixhQUppQjtBQUt6QixVQUFNLFVBQVUsR0FBRyxFQUFuQjtBQUNBLFVBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxrQkFBeEI7O0FBQ0EsYUFBTyxTQUFQLEVBQWtCLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQXRDLEVBQTBEO0FBQ3RELFlBQUksZ0JBQWdCLENBQUMsU0FBRCxFQUFZLGFBQVosQ0FBaEIsSUFBOEMsbUJBQW1CLENBQUMsU0FBRCxDQUFyRSxFQUFrRjtBQUM5RTtBQUNIOztBQUNELFFBQUEsVUFBVSxDQUFDLElBQVgsQ0FBZ0IsU0FBUyxDQUFDLEtBQTFCO0FBQ0EsUUFBQSxPQUFPLENBQUMsZ0JBQVIsQ0FBeUIsU0FBekI7QUFDSDs7QUFDRCxhQUFPLEtBQUssZUFBTCxDQUFxQixNQUFyQixDQUE0QixVQUFVLENBQUMsSUFBWCxDQUFnQixFQUFoQixDQUE1QixDQUFQO0FBQ0g7Ozs7OztBQXpCTCxPQUFBLENBQUEscUJBQUEsR0FBQSxxQkFBQSIsInNvdXJjZVJvb3QiOiIifQ==","\"use strict\";\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\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.QuotedColumnParser = void 0;\n\nvar ColumnFormatter_1 = require(\"./ColumnFormatter\");\n\nvar Token_1 = require(\"../Token\");\n\nvar _Token_1$Token = Token_1.Token,\n isTokenDelimiter = _Token_1$Token.isTokenDelimiter,\n isTokenRowDelimiter = _Token_1$Token.isTokenRowDelimiter,\n isTokenEscapeCharacter = _Token_1$Token.isTokenEscapeCharacter,\n isTokenQuote = _Token_1$Token.isTokenQuote;\n\nvar QuotedColumnParser = /*#__PURE__*/function () {\n function QuotedColumnParser(parserOptions) {\n _classCallCheck(this, QuotedColumnParser);\n\n this.parserOptions = parserOptions;\n this.columnFormatter = new ColumnFormatter_1.ColumnFormatter(parserOptions);\n }\n\n _createClass(QuotedColumnParser, [{\n key: \"parse\",\n value: function parse(scanner) {\n if (!scanner.hasMoreCharacters) {\n return null;\n }\n\n var originalCursor = scanner.cursor;\n\n var _this$gatherDataBetwe = this.gatherDataBetweenQuotes(scanner),\n foundClosingQuote = _this$gatherDataBetwe.foundClosingQuote,\n col = _this$gatherDataBetwe.col;\n\n if (!foundClosingQuote) {\n // reset the cursor to the original\n scanner.advanceTo(originalCursor); // if we didnt find a closing quote but we potentially have more data then skip the parsing\n // and return the original scanner.\n\n if (!scanner.hasMoreData) {\n throw new Error(\"Parse Error: missing closing: '\".concat(this.parserOptions.quote || '', \"' in line: at '\").concat(scanner.lineFromCursor.replace(/[\\r\\n]/g, \"\\\\n'\"), \"'\"));\n }\n\n return null;\n }\n\n this.checkForMalformedColumn(scanner);\n return col;\n }\n }, {\n key: \"gatherDataBetweenQuotes\",\n value: function gatherDataBetweenQuotes(scanner) {\n var parserOptions = this.parserOptions;\n var foundStartingQuote = false;\n var foundClosingQuote = false;\n var characters = [];\n var nextToken = scanner.nextCharacterToken;\n\n for (; !foundClosingQuote && nextToken !== null; nextToken = scanner.nextCharacterToken) {\n var isQuote = isTokenQuote(nextToken, parserOptions); // ignore first quote\n\n if (!foundStartingQuote && isQuote) {\n foundStartingQuote = true;\n } else if (foundStartingQuote) {\n if (isTokenEscapeCharacter(nextToken, parserOptions)) {\n // advance past the escape character so we can get the next one in line\n scanner.advancePastToken(nextToken);\n var tokenFollowingEscape = scanner.nextCharacterToken; // if the character following the escape is a quote character then just add\n // the quote and advance to that character\n\n if (tokenFollowingEscape !== null && (isTokenQuote(tokenFollowingEscape, parserOptions) || isTokenEscapeCharacter(tokenFollowingEscape, parserOptions))) {\n characters.push(tokenFollowingEscape.token);\n nextToken = tokenFollowingEscape;\n } else if (isQuote) {\n // if the escape is also a quote then we found our closing quote and finish early\n foundClosingQuote = true;\n } else {\n // other wise add the escape token to the characters since it wast escaping anything\n characters.push(nextToken.token);\n }\n } else if (isQuote) {\n // we found our closing quote!\n foundClosingQuote = true;\n } else {\n // add the token to the characters\n characters.push(nextToken.token);\n }\n }\n\n scanner.advancePastToken(nextToken);\n }\n\n return {\n col: this.columnFormatter.format(characters.join('')),\n foundClosingQuote: foundClosingQuote\n };\n }\n }, {\n key: \"checkForMalformedColumn\",\n value: function checkForMalformedColumn(scanner) {\n var parserOptions = this.parserOptions;\n var nextNonSpaceToken = scanner.nextNonSpaceToken;\n\n if (nextNonSpaceToken) {\n var isNextTokenADelimiter = isTokenDelimiter(nextNonSpaceToken, parserOptions);\n var isNextTokenARowDelimiter = isTokenRowDelimiter(nextNonSpaceToken);\n\n if (!(isNextTokenADelimiter || isNextTokenARowDelimiter)) {\n // if the final quote was NOT followed by a column (,) or row(\\n) delimiter then its a bad column\n // tldr: only part of the column was quoted\n var linePreview = scanner.lineFromCursor.substr(0, 10).replace(/[\\r\\n]/g, \"\\\\n'\");\n throw new Error(\"Parse Error: expected: '\".concat(parserOptions.escapedDelimiter, \"' OR new line got: '\").concat(nextNonSpaceToken.token, \"'. at '\").concat(linePreview));\n }\n\n scanner.advanceToToken(nextNonSpaceToken);\n } else if (!scanner.hasMoreData) {\n scanner.advancePastLine();\n }\n }\n }]);\n\n return QuotedColumnParser;\n}();\n\nexports.QuotedColumnParser = QuotedColumnParser;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXJzZXIvY29sdW1uL1F1b3RlZENvbHVtblBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQSxpQkFBQSxHQUFBLE9BQUEsQ0FBQSxtQkFBQSxDQUFBOztBQUdBLElBQUEsT0FBQSxHQUFBLE9BQUEsQ0FBQSxVQUFBLENBQUE7O3FCQUV3RixPQUFBLENBQUEsSztJQUFoRixnQixrQkFBQSxnQjtJQUFrQixtQixrQkFBQSxtQjtJQUFxQixzQixrQkFBQSxzQjtJQUF3QixZLGtCQUFBLFk7O0lBTzFELGtCO0FBS1QsOEJBQW1CLGFBQW5CLEVBQStDO0FBQUE7O0FBQzNDLFNBQUssYUFBTCxHQUFxQixhQUFyQjtBQUNBLFNBQUssZUFBTCxHQUF1QixJQUFJLGlCQUFBLENBQUEsZUFBSixDQUFvQixhQUFwQixDQUF2QjtBQUNIOzs7OzBCQUVZLE8sRUFBZ0I7QUFDekIsVUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBYixFQUFnQztBQUM1QixlQUFPLElBQVA7QUFDSDs7QUFDRCxVQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsTUFBL0I7O0FBSnlCLGtDQUtVLEtBQUssdUJBQUwsQ0FBNkIsT0FBN0IsQ0FMVjtBQUFBLFVBS2pCLGlCQUxpQix5QkFLakIsaUJBTGlCO0FBQUEsVUFLRSxHQUxGLHlCQUtFLEdBTEY7O0FBTXpCLFVBQUksQ0FBQyxpQkFBTCxFQUF3QjtBQUNwQjtBQUNBLFFBQUEsT0FBTyxDQUFDLFNBQVIsQ0FBa0IsY0FBbEIsRUFGb0IsQ0FHcEI7QUFDQTs7QUFDQSxZQUFJLENBQUMsT0FBTyxDQUFDLFdBQWIsRUFBMEI7QUFDdEIsZ0JBQU0sSUFBSSxLQUFKLDBDQUVFLEtBQUssYUFBTCxDQUFtQixLQUFuQixJQUE0QixFQUY5Qiw0QkFHZ0IsT0FBTyxDQUFDLGNBQVIsQ0FBdUIsT0FBdkIsQ0FBK0IsU0FBL0IsRUFBMEMsTUFBMUMsQ0FIaEIsT0FBTjtBQUtIOztBQUNELGVBQU8sSUFBUDtBQUNIOztBQUNELFdBQUssdUJBQUwsQ0FBNkIsT0FBN0I7QUFDQSxhQUFPLEdBQVA7QUFDSDs7OzRDQUUrQixPLEVBQWdCO0FBQUEsVUFDcEMsYUFEb0MsR0FDbEIsSUFEa0IsQ0FDcEMsYUFEb0M7QUFFNUMsVUFBSSxrQkFBa0IsR0FBRyxLQUF6QjtBQUNBLFVBQUksaUJBQWlCLEdBQUcsS0FBeEI7QUFDQSxVQUFNLFVBQVUsR0FBRyxFQUFuQjtBQUNBLFVBQUksU0FBUyxHQUFpQixPQUFPLENBQUMsa0JBQXRDOztBQUNBLGFBQU8sQ0FBQyxpQkFBRCxJQUFzQixTQUFTLEtBQUssSUFBM0MsRUFBaUQsU0FBUyxHQUFHLE9BQU8sQ0FBQyxrQkFBckUsRUFBeUY7QUFDckYsWUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLFNBQUQsRUFBWSxhQUFaLENBQTVCLENBRHFGLENBRXJGOztBQUNBLFlBQUksQ0FBQyxrQkFBRCxJQUF1QixPQUEzQixFQUFvQztBQUNoQyxVQUFBLGtCQUFrQixHQUFHLElBQXJCO0FBQ0gsU0FGRCxNQUVPLElBQUksa0JBQUosRUFBd0I7QUFDM0IsY0FBSSxzQkFBc0IsQ0FBQyxTQUFELEVBQVksYUFBWixDQUExQixFQUFzRDtBQUNsRDtBQUNBLFlBQUEsT0FBTyxDQUFDLGdCQUFSLENBQXlCLFNBQXpCO0FBQ0EsZ0JBQU0sb0JBQW9CLEdBQUcsT0FBTyxDQUFDLGtCQUFyQyxDQUhrRCxDQUlsRDtBQUNBOztBQUNBLGdCQUNJLG9CQUFvQixLQUFLLElBQXpCLEtBQ0MsWUFBWSxDQUFDLG9CQUFELEVBQXVCLGFBQXZCLENBQVosSUFDRyxzQkFBc0IsQ0FBQyxvQkFBRCxFQUF1QixhQUF2QixDQUYxQixDQURKLEVBSUU7QUFDRSxjQUFBLFVBQVUsQ0FBQyxJQUFYLENBQWdCLG9CQUFvQixDQUFDLEtBQXJDO0FBQ0EsY0FBQSxTQUFTLEdBQUcsb0JBQVo7QUFDSCxhQVBELE1BT08sSUFBSSxPQUFKLEVBQWE7QUFDaEI7QUFDQSxjQUFBLGlCQUFpQixHQUFHLElBQXBCO0FBQ0gsYUFITSxNQUdBO0FBQ0g7QUFDQSxjQUFBLFVBQVUsQ0FBQyxJQUFYLENBQWdCLFNBQVMsQ0FBQyxLQUExQjtBQUNIO0FBQ0osV0FwQkQsTUFvQk8sSUFBSSxPQUFKLEVBQWE7QUFDaEI7QUFDQSxZQUFBLGlCQUFpQixHQUFHLElBQXBCO0FBQ0gsV0FITSxNQUdBO0FBQ0g7QUFDQSxZQUFBLFVBQVUsQ0FBQyxJQUFYLENBQWdCLFNBQVMsQ0FBQyxLQUExQjtBQUNIO0FBQ0o7O0FBQ0QsUUFBQSxPQUFPLENBQUMsZ0JBQVIsQ0FBeUIsU0FBekI7QUFDSDs7QUFDRCxhQUFPO0FBQUUsUUFBQSxHQUFHLEVBQUUsS0FBSyxlQUFMLENBQXFCLE1BQXJCLENBQTRCLFVBQVUsQ0FBQyxJQUFYLENBQWdCLEVBQWhCLENBQTVCLENBQVA7QUFBeUQsUUFBQSxpQkFBaUIsRUFBakI7QUFBekQsT0FBUDtBQUNIOzs7NENBRStCLE8sRUFBZ0I7QUFBQSxVQUNwQyxhQURvQyxHQUNsQixJQURrQixDQUNwQyxhQURvQztBQUFBLFVBRXBDLGlCQUZvQyxHQUVkLE9BRmMsQ0FFcEMsaUJBRm9DOztBQUc1QyxVQUFJLGlCQUFKLEVBQXVCO0FBQ25CLFlBQU0scUJBQXFCLEdBQUcsZ0JBQWdCLENBQUMsaUJBQUQsRUFBb0IsYUFBcEIsQ0FBOUM7QUFDQSxZQUFNLHdCQUF3QixHQUFHLG1CQUFtQixDQUFDLGlCQUFELENBQXBEOztBQUNBLFlBQUksRUFBRSxxQkFBcUIsSUFBSSx3QkFBM0IsQ0FBSixFQUEwRDtBQUN0RDtBQUNBO0FBQ0EsY0FBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQVIsQ0FBdUIsTUFBdkIsQ0FBOEIsQ0FBOUIsRUFBaUMsRUFBakMsRUFBcUMsT0FBckMsQ0FBNkMsU0FBN0MsRUFBd0QsTUFBeEQsQ0FBcEI7QUFDQSxnQkFBTSxJQUFJLEtBQUosbUNBQ3lCLGFBQWEsQ0FBQyxnQkFEdkMsaUNBQzhFLGlCQUFpQixDQUFDLEtBRGhHLG9CQUMrRyxXQUQvRyxFQUFOO0FBR0g7O0FBQ0QsUUFBQSxPQUFPLENBQUMsY0FBUixDQUF1QixpQkFBdkI7QUFDSCxPQVpELE1BWU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFiLEVBQTBCO0FBQzdCLFFBQUEsT0FBTyxDQUFDLGVBQVI7QUFDSDtBQUNKOzs7Ozs7QUFqR0wsT0FBQSxDQUFBLGtCQUFBLEdBQUEsa0JBQUEiLCJzb3VyY2VSb290IjoiIn0=","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar ColumnParser_1 = require(\"./ColumnParser\");\n\nObject.defineProperty(exports, \"ColumnParser\", {\n enumerable: true,\n get: function get() {\n return ColumnParser_1.ColumnParser;\n }\n});\n\nvar NonQuotedColumnParser_1 = require(\"./NonQuotedColumnParser\");\n\nObject.defineProperty(exports, \"NonQuotedColumnParser\", {\n enumerable: true,\n get: function get() {\n return NonQuotedColumnParser_1.NonQuotedColumnParser;\n }\n});\n\nvar QuotedColumnParser_1 = require(\"./QuotedColumnParser\");\n\nObject.defineProperty(exports, \"QuotedColumnParser\", {\n enumerable: true,\n get: function get() {\n return QuotedColumnParser_1.QuotedColumnParser;\n }\n});\n\nvar ColumnFormatter_1 = require(\"./ColumnFormatter\");\n\nObject.defineProperty(exports, \"ColumnFormatter\", {\n enumerable: true,\n get: function get() {\n return ColumnFormatter_1.ColumnFormatter;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXJzZXIvY29sdW1uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUEsY0FBQSxHQUFBLE9BQUEsQ0FBQSxnQkFBQSxDQUFBOztBQUFTLE1BQUEsQ0FBQSxjQUFBLENBQUEsT0FBQSxFQUFBLGNBQUEsRUFBQTtBQUFBLEVBQUEsVUFBQSxFQUFBLElBQUE7QUFBQSxFQUFBLEdBQUEsRUFBQSxlQUFBO0FBQUEsV0FBQSxjQUFBLENBQUEsWUFBQTtBQUFZO0FBQVosQ0FBQTs7QUFDVCxJQUFBLHVCQUFBLEdBQUEsT0FBQSxDQUFBLHlCQUFBLENBQUE7O0FBQVMsTUFBQSxDQUFBLGNBQUEsQ0FBQSxPQUFBLEVBQUEsdUJBQUEsRUFBQTtBQUFBLEVBQUEsVUFBQSxFQUFBLElBQUE7QUFBQSxFQUFBLEdBQUEsRUFBQSxlQUFBO0FBQUEsV0FBQSx1QkFBQSxDQUFBLHFCQUFBO0FBQXFCO0FBQXJCLENBQUE7O0FBQ1QsSUFBQSxvQkFBQSxHQUFBLE9BQUEsQ0FBQSxzQkFBQSxDQUFBOztBQUFTLE1BQUEsQ0FBQSxjQUFBLENBQUEsT0FBQSxFQUFBLG9CQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsb0JBQUEsQ0FBQSxrQkFBQTtBQUFrQjtBQUFsQixDQUFBOztBQUNULElBQUEsaUJBQUEsR0FBQSxPQUFBLENBQUEsbUJBQUEsQ0FBQTs7QUFBUyxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxpQkFBQSxFQUFBO0FBQUEsRUFBQSxVQUFBLEVBQUEsSUFBQTtBQUFBLEVBQUEsR0FBQSxFQUFBLGVBQUE7QUFBQSxXQUFBLGlCQUFBLENBQUEsZUFBQTtBQUFlO0FBQWYsQ0FBQSIsInNvdXJjZVJvb3QiOiIifQ==","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar Parser_1 = require(\"./Parser\");\n\nObject.defineProperty(exports, \"Parser\", {\n enumerable: true,\n get: function get() {\n return Parser_1.Parser;\n }\n});\n\nvar RowParser_1 = require(\"./RowParser\");\n\nObject.defineProperty(exports, \"RowParser\", {\n enumerable: true,\n get: function get() {\n return RowParser_1.RowParser;\n }\n});\n\nvar Scanner_1 = require(\"./Scanner\");\n\nObject.defineProperty(exports, \"Scanner\", {\n enumerable: true,\n get: function get() {\n return Scanner_1.Scanner;\n }\n});\n\nvar Token_1 = require(\"./Token\");\n\nObject.defineProperty(exports, \"Token\", {\n enumerable: true,\n get: function get() {\n return Token_1.Token;\n }\n});\n\nvar column_1 = require(\"./column\");\n\nObject.defineProperty(exports, \"ColumnParser\", {\n enumerable: true,\n get: function get() {\n return column_1.ColumnParser;\n }\n});\nObject.defineProperty(exports, \"NonQuotedColumnParser\", {\n enumerable: true,\n get: function get() {\n return column_1.NonQuotedColumnParser;\n }\n});\nObject.defineProperty(exports, \"QuotedColumnParser\", {\n enumerable: true,\n get: function get() {\n return column_1.QuotedColumnParser;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYXJzZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQSxRQUFBLEdBQUEsT0FBQSxDQUFBLFVBQUEsQ0FBQTs7QUFBUyxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxRQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsUUFBQSxDQUFBLE1BQUE7QUFBTTtBQUFOLENBQUE7O0FBQ1QsSUFBQSxXQUFBLEdBQUEsT0FBQSxDQUFBLGFBQUEsQ0FBQTs7QUFBUyxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxXQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsV0FBQSxDQUFBLFNBQUE7QUFBUztBQUFULENBQUE7O0FBQ1QsSUFBQSxTQUFBLEdBQUEsT0FBQSxDQUFBLFdBQUEsQ0FBQTs7QUFBUyxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxTQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsU0FBQSxDQUFBLE9BQUE7QUFBTztBQUFQLENBQUE7O0FBQ1QsSUFBQSxPQUFBLEdBQUEsT0FBQSxDQUFBLFNBQUEsQ0FBQTs7QUFBUyxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxPQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsT0FBQSxDQUFBLEtBQUE7QUFBSztBQUFMLENBQUE7O0FBQ1QsSUFBQSxRQUFBLEdBQUEsT0FBQSxDQUFBLFVBQUEsQ0FBQTs7QUFBUyxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxjQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsUUFBQSxDQUFBLFlBQUE7QUFBWTtBQUFaLENBQUE7QUFBYyxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSx1QkFBQSxFQUFBO0FBQUEsRUFBQSxVQUFBLEVBQUEsSUFBQTtBQUFBLEVBQUEsR0FBQSxFQUFBLGVBQUE7QUFBQSxXQUFBLFFBQUEsQ0FBQSxxQkFBQTtBQUFxQjtBQUFyQixDQUFBO0FBQXVCLE1BQUEsQ0FBQSxjQUFBLENBQUEsT0FBQSxFQUFBLG9CQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsUUFBQSxDQUFBLGtCQUFBO0FBQWtCO0FBQWxCLENBQUEiLCJzb3VyY2VSb290IjoiIn0=","\"use strict\";\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 __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.HeaderTransformer = void 0;\n\nvar lodash_isundefined_1 = __importDefault(require(\"lodash.isundefined\"));\n\nvar lodash_isfunction_1 = __importDefault(require(\"lodash.isfunction\"));\n\nvar lodash_uniq_1 = __importDefault(require(\"lodash.uniq\"));\n\nvar lodash_groupby_1 = __importDefault(require(\"lodash.groupby\"));\n\nvar HeaderTransformer = /*#__PURE__*/function () {\n function HeaderTransformer(parserOptions) {\n _classCallCheck(this, HeaderTransformer);\n\n this.headers = null;\n this.receivedHeaders = false;\n this.shouldUseFirstRow = false;\n this.processedFirstRow = false;\n this.headersLength = 0;\n this.parserOptions = parserOptions;\n\n if (parserOptions.headers === true) {\n this.shouldUseFirstRow = true;\n } else if (Array.isArray(parserOptions.headers)) {\n this.setHeaders(parserOptions.headers);\n } else if (lodash_isfunction_1.default(parserOptions.headers)) {\n this.headersTransform = parserOptions.headers;\n }\n }\n\n _createClass(HeaderTransformer, [{\n key: \"transform\",\n value: function transform(row, cb) {\n if (!this.shouldMapRow(row)) {\n return cb(null, {\n row: null,\n isValid: true\n });\n }\n\n return cb(null, this.processRow(row));\n }\n }, {\n key: \"shouldMapRow\",\n value: function shouldMapRow(row) {\n var parserOptions = this.parserOptions;\n\n if (!this.headersTransform && parserOptions.renameHeaders && !this.processedFirstRow) {\n if (!this.receivedHeaders) {\n throw new Error('Error renaming headers: new headers must be provided in an array');\n }\n\n this.processedFirstRow = true;\n return false;\n }\n\n if (!this.receivedHeaders && Array.isArray(row)) {\n if (this.headersTransform) {\n this.setHeaders(this.headersTransform(row));\n } else if (this.shouldUseFirstRow) {\n this.setHeaders(row);\n } else {\n // dont do anything with the headers if we didnt receive a transform or shouldnt use the first row.\n return true;\n }\n\n return false;\n }\n\n return true;\n }\n }, {\n key: \"processRow\",\n value: function processRow(row) {\n if (!this.headers) {\n return {\n row: row,\n isValid: true\n };\n }\n\n var parserOptions = this.parserOptions;\n\n if (!parserOptions.discardUnmappedColumns && row.length > this.headersLength) {\n if (!parserOptions.strictColumnHandling) {\n throw new Error(\"Unexpected Error: column header mismatch expected: \".concat(this.headersLength, \" columns got: \").concat(row.length));\n }\n\n return {\n row: row,\n isValid: false,\n reason: \"Column header mismatch expected: \".concat(this.headersLength, \" columns got: \").concat(row.length)\n };\n }\n\n if (parserOptions.strictColumnHandling && row.length < this.headersLength) {\n return {\n row: row,\n isValid: false,\n reason: \"Column header mismatch expected: \".concat(this.headersLength, \" columns got: \").concat(row.length)\n };\n }\n\n return {\n row: this.mapHeaders(row),\n isValid: true\n };\n }\n }, {\n key: \"mapHeaders\",\n value: function mapHeaders(row) {\n var rowMap = {};\n var headers = this.headers,\n headersLength = this.headersLength;\n\n for (var i = 0; i < headersLength; i += 1) {\n var header = headers[i];\n\n if (!lodash_isundefined_1.default(header)) {\n var val = row[i]; // eslint-disable-next-line no-param-reassign\n\n if (lodash_isundefined_1.default(val)) {\n rowMap[header] = '';\n } else {\n rowMap[header] = val;\n }\n }\n }\n\n return rowMap;\n }\n }, {\n key: \"setHeaders\",\n value: function setHeaders(headers) {\n var _a;\n\n var filteredHeaders = headers.filter(function (h) {\n return !!h;\n });\n\n if (lodash_uniq_1.default(filteredHeaders).length !== filteredHeaders.length) {\n var grouped = lodash_groupby_1.default(filteredHeaders);\n var duplicates = Object.keys(grouped).filter(function (dup) {\n return grouped[dup].length > 1;\n });\n throw new Error(\"Duplicate headers found \".concat(JSON.stringify(duplicates)));\n }\n\n this.headers = headers;\n this.receivedHeaders = true;\n this.headersLength = ((_a = this.headers) === null || _a === void 0 ? void 0 : _a.length) || 0;\n }\n }]);\n\n return HeaderTransformer;\n}();\n\nexports.HeaderTransformer = HeaderTransformer;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2Zvcm1zL0hlYWRlclRyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBLG9CQUFBLEdBQUEsZUFBQSxDQUFBLE9BQUEsQ0FBQSxvQkFBQSxDQUFBLENBQUE7O0FBQ0EsSUFBQSxtQkFBQSxHQUFBLGVBQUEsQ0FBQSxPQUFBLENBQUEsbUJBQUEsQ0FBQSxDQUFBOztBQUNBLElBQUEsYUFBQSxHQUFBLGVBQUEsQ0FBQSxPQUFBLENBQUEsYUFBQSxDQUFBLENBQUE7O0FBQ0EsSUFBQSxnQkFBQSxHQUFBLGVBQUEsQ0FBQSxPQUFBLENBQUEsZ0JBQUEsQ0FBQSxDQUFBOztJQVlhLGlCO0FBZVQsNkJBQW1CLGFBQW5CLEVBQStDO0FBQUE7O0FBWi9DLFNBQUEsT0FBQSxHQUE4QixJQUE5QjtBQUVRLFNBQUEsZUFBQSxHQUFrQixLQUFsQjtBQUVTLFNBQUEsaUJBQUEsR0FBNkIsS0FBN0I7QUFFVCxTQUFBLGlCQUFBLEdBQW9CLEtBQXBCO0FBRUEsU0FBQSxhQUFBLEdBQWdCLENBQWhCO0FBS0osU0FBSyxhQUFMLEdBQXFCLGFBQXJCOztBQUNBLFFBQUksYUFBYSxDQUFDLE9BQWQsS0FBMEIsSUFBOUIsRUFBb0M7QUFDaEMsV0FBSyxpQkFBTCxHQUF5QixJQUF6QjtBQUNILEtBRkQsTUFFTyxJQUFJLEtBQUssQ0FBQyxPQUFOLENBQWMsYUFBYSxDQUFDLE9BQTVCLENBQUosRUFBMEM7QUFDN0MsV0FBSyxVQUFMLENBQWdCLGFBQWEsQ0FBQyxPQUE5QjtBQUNILEtBRk0sTUFFQSxJQUFJLG1CQUFBLENBQUEsT0FBQSxDQUFXLGFBQWEsQ0FBQyxPQUF6QixDQUFKLEVBQXVDO0FBQzFDLFdBQUssZ0JBQUwsR0FBd0IsYUFBYSxDQUFDLE9BQXRDO0FBQ0g7QUFDSjs7Ozs4QkFFZ0IsRyxFQUFlLEUsRUFBMkI7QUFDdkQsVUFBSSxDQUFDLEtBQUssWUFBTCxDQUFrQixH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","\"use strict\";\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 __importDefault = void 0 && (void 0).__importDefault || function (mod) {\n return mod && mod.__esModule ? mod : {\n \"default\": mod\n };\n};\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.RowTransformerValidator = void 0;\n\nvar lodash_isfunction_1 = __importDefault(require(\"lodash.isfunction\"));\n\nvar types_1 = require(\"../types\");\n\nvar RowTransformerValidator = /*#__PURE__*/function () {\n function RowTransformerValidator() {\n _classCallCheck(this, RowTransformerValidator);\n\n this._rowTransform = null;\n this._rowValidator = null;\n }\n\n _createClass(RowTransformerValidator, [{\n key: \"transformAndValidate\",\n value: function transformAndValidate(row, cb) {\n var _this = this;\n\n return this.callTransformer(row, function (transformErr, transformedRow) {\n if (transformErr) {\n return cb(transformErr);\n }\n\n if (!transformedRow) {\n return cb(null, {\n row: null,\n isValid: true\n });\n }\n\n return _this.callValidator(transformedRow, function (validateErr, validationResult) {\n if (validateErr) {\n return cb(validateErr);\n }\n\n if (validationResult && !validationResult.isValid) {\n return cb(null, {\n row: transformedRow,\n isValid: false,\n reason: validationResult.reason\n });\n }\n\n return cb(null, {\n row: transformedRow,\n isValid: true\n });\n });\n });\n }\n }, {\n key: \"callTransformer\",\n value: function callTransformer(row, cb) {\n if (!this._rowTransform) {\n return cb(null, row);\n }\n\n return this._rowTransform(row, cb);\n }\n }, {\n key: \"callValidator\",\n value: function callValidator(row, cb) {\n if (!this._rowValidator) {\n return cb(null, {\n row: row,\n isValid: true\n });\n }\n\n return this._rowValidator(row, cb);\n }\n }, {\n key: \"rowTransform\",\n set: function set(transformFunction) {\n if (!lodash_isfunction_1.default(transformFunction)) {\n throw new TypeError('The transform should be a function');\n }\n\n this._rowTransform = RowTransformerValidator.createTransform(transformFunction);\n }\n }, {\n key: \"rowValidator\",\n set: function set(validateFunction) {\n if (!lodash_isfunction_1.default(validateFunction)) {\n throw new TypeError('The validate should be a function');\n }\n\n this._rowValidator = RowTransformerValidator.createValidator(validateFunction);\n }\n }], [{\n key: \"createTransform\",\n value: function createTransform(transformFunction) {\n if (types_1.isSyncTransform(transformFunction)) {\n return function (row, cb) {\n var transformed = null;\n\n try {\n transformed = transformFunction(row);\n } catch (e) {\n return cb(e);\n }\n\n return cb(null, transformed);\n };\n }\n\n return transformFunction;\n }\n }, {\n key: \"createValidator\",\n value: function createValidator(validateFunction) {\n if (types_1.isSyncValidate(validateFunction)) {\n return function (row, cb) {\n cb(null, {\n row: row,\n isValid: validateFunction(row)\n });\n };\n }\n\n return function (row, cb) {\n validateFunction(row, function (err, isValid, reason) {\n if (err) {\n return cb(err);\n }\n\n if (isValid) {\n return cb(null, {\n row: row,\n isValid: isValid,\n reason: reason\n });\n }\n\n return cb(null, {\n row: row,\n isValid: false,\n reason: reason\n });\n });\n };\n }\n }]);\n\n return RowTransformerValidator;\n}();\n\nexports.RowTransformerValidator = RowTransformerValidator;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2Zvcm1zL1Jvd1RyYW5zZm9ybWVyVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBLG1CQUFBLEdBQUEsZUFBQSxDQUFBLE9BQUEsQ0FBQSxtQkFBQSxDQUFBLENBQUE7O0FBQ0EsSUFBQSxPQUFBLEdBQUEsT0FBQSxDQUFBLFVBQUEsQ0FBQTs7SUFhYSx1QjtBQUFiLHFDQUFBO0FBQUE7O0FBcUNZLFNBQUEsYUFBQSxHQUFnRCxJQUFoRDtBQUVBLFNBQUEsYUFBQSxHQUF3QyxJQUF4QztBQWlEWDs7Ozt5Q0FqQytCLEcsRUFBUSxFLEVBQTJCO0FBQUE7O0FBQzNELGFBQU8sS0FBSyxlQUFMLENBQXFCLEdBQXJCLEVBQTBCLFVBQUMsWUFBRCxFQUFlLGNBQWYsRUFBdUM7QUFDcEUsWUFBSSxZQUFKLEVBQWtCO0FBQ2QsaUJBQU8sRUFBRSxDQUFDLFlBQUQsQ0FBVDtBQUNIOztBQUNELFlBQUksQ0FBQyxjQUFMLEVBQXFCO0FBQ2pCLGlCQUFPLEVBQUUsQ0FBQyxJQUFELEVBQU87QUFBRSxZQUFBLEdBQUcsRUFBRSxJQUFQO0FBQWEsWUFBQSxPQUFPLEVBQUU7QUFBdEIsV0FBUCxDQUFUO0FBQ0g7O0FBQ0QsZUFBTyxLQUFJLENBQUMsYUFBTCxDQUFtQixjQUFuQixFQUFtQyxVQUFDLFdBQUQsRUFBYyxnQkFBZCxFQUF3QztBQUM5RSxjQUFJLFdBQUosRUFBaUI7QUFDYixtQkFBTyxFQUFFLENBQUMsV0FBRCxDQUFUO0FBQ0g7O0FBQ0QsY0FBSSxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQTFDLEVBQW1EO0FBQy9DLG1CQUFPLEVBQUUsQ0FBQyxJQUFELEVBQU87QUFBRSxjQUFBLEdBQUcsRUFBRSxjQUFQO0FBQXVCLGNBQUEsT0FBTyxFQUFFLEtBQWhDO0FBQXVDLGNBQUEsTUFBTSxFQUFFLGdCQUFnQixDQUFDO0FBQWhFLGFBQVAsQ0FBVDtBQUNIOztBQUNELGlCQUFPLEVBQUUsQ0FBQyxJQUFELEVBQU87QUFBRSxZQUFBLEdBQUcsRUFBRSxjQUFQO0FBQXVCLFlBQUEsT0FBTyxFQUFFO0FBQWhDLFdBQVAsQ0FBVDtBQUNILFNBUk0sQ0FBUDtBQVNILE9BaEJNLENBQVA7QUFpQkg7OztvQ0FFdUIsRyxFQUFRLEUsRUFBMkI7QUFDdkQsVUFBSSxDQUFDLEtBQUssYUFBVixFQUF5QjtBQUNyQixlQUFPLEVBQUUsQ0FBQyxJQUFELEVBQVEsR0FBUixDQUFUO0FBQ0g7O0FBQ0QsYUFBTyxLQUFLLGFBQUwsQ0FBbUIsR0FBbkIsRUFBd0IsRUFBeEIsQ0FBUDtBQUNIOzs7a0NBRXFCLEcsRUFBUSxFLEVBQTJCO0FBQ3JELFVBQUksQ0FBQyxLQUFLLGFBQVYsRUFBeUI7QUFDckIsZUFBTyxFQUFFLENBQUMsSUFBRCxFQUFPO0FBQUUsVUFBQSxHQUFHLEVBQUgsR0FBRjtBQUFPLFVBQUEsT0FBTyxFQUFFO0FBQWhCLFNBQVAsQ0FBVDtBQUNIOztBQUNELGFBQU8sS0FBSyxhQUFMLENBQW1CLEdBQW5CLEVBQXdCLEVBQXhCLENBQVA7QUFDSDs7O3NCQTlDdUIsaUIsRUFBNkM7QUFDakUsVUFBSSxDQUFDLG1CQUFBLENBQUEsT0FBQSxDQUFXLGlCQUFYLENBQUwsRUFBb0M7QUFDaEMsY0FBTSxJQUFJLFNBQUosQ0FBYyxvQ0FBZCxDQUFOO0FBQ0g7O0FBQ0QsV0FBSyxhQUFMLEdBQXFCLHVCQUF1QixDQUFDLGVBQXhCLENBQXdDLGlCQUF4QyxDQUFyQjtBQUNIOzs7c0JBRXVCLGdCLEVBQWdDO0FBQ3BELFVBQUksQ0FBQyxtQkFBQSxDQUFBLE9BQUEsQ0FBVyxnQkFBWCxDQUFMLEVBQW1DO0FBQy9CLGNBQU0sSUFBSSxTQUFKLENBQWMsbUNBQWQsQ0FBTjtBQUNIOztBQUNELFdBQUssYUFBTCxHQUFxQix1QkFBdUIsQ0FBQyxlQUF4QixDQUF3QyxnQkFBeEMsQ0FBckI7QUFDSDs7O29DQW5ERyxpQixFQUE2QztBQUU3QyxVQUFJLE9BQUEsQ0FBQSxlQUFBLENBQWdCLGlCQUFoQixDQUFKLEVBQXdDO0FBQ3BDLGVBQU8sVUFBQyxHQUFELEVBQVMsRUFBVCxFQUE4QztBQUNqRCxjQUFJLFdBQVcsR0FBYSxJQUE1Qjs7QUFDQSxjQUFJO0FBQ0EsWUFBQSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsR0FBRCxDQUEvQjtBQUNILFdBRkQsQ0FFRSxPQUFPLENBQVAsRUFBVTtBQUNSLG1CQUFPLEVBQUUsQ0FBQyxDQUFELENBQVQ7QUFDSDs7QUFDRCxpQkFBTyxFQUFFLENBQUMsSUFBRCxFQUFPLFdBQVAsQ0FBVDtBQUNILFNBUkQ7QUFTSDs7QUFDRCxhQUFPLGlCQUFQO0FBQ0g7OztvQ0FFNkMsZ0IsRUFBZ0M7QUFDMUUsVUFBSSxPQUFBLENBQUEsY0FBQSxDQUFlLGdCQUFmLENBQUosRUFBc0M7QUFDbEMsZUFBTyxVQUFDLEdBQUQsRUFBUyxFQUFULEVBQThDO0FBQ2pELFVBQUEsRUFBRSxDQUFDLElBQUQsRUFBTztBQUFFLFlBQUEsR0FBRyxFQUFILEdBQUY7QUFBTyxZQUFBLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxHQUFEO0FBQWhDLFdBQVAsQ0FBRjtBQUNILFNBRkQ7QUFHSDs7QUFDRCxhQUFPLFVBQUMsR0FBRCxFQUFTLEVBQVQsRUFBOEM7QUFDakQsUUFBQSxnQkFBZ0IsQ0FBQyxHQUFELEVBQU0sVUFBQyxHQUFELEVBQU0sT0FBTixFQUFlLE1BQWYsRUFBK0I7QUFDakQsY0FBSSxHQUFKLEVBQVM7QUFDTCxtQkFBTyxFQUFFLENBQUMsR0FBRCxDQUFUO0FBQ0g7O0FBQ0QsY0FBSSxPQUFKLEVBQWE7QUFDVCxtQkFBTyxFQUFFLENBQUMsSUFBRCxFQUFPO0FBQUUsY0FBQSxHQUFHLEVBQUgsR0FBRjtBQUFPLGNBQUEsT0FBTyxFQUFQLE9BQVA7QUFBZ0IsY0FBQSxNQUFNLEVBQU47QUFBaEIsYUFBUCxDQUFUO0FBQ0g7O0FBQ0QsaUJBQU8sRUFBRSxDQUFDLElBQUQsRUFBTztBQUFFLFlBQUEsR0FBRyxFQUFILEdBQUY7QUFBTyxZQUFBLE9BQU8sRUFBRSxLQUFoQjtBQUF1QixZQUFBLE1BQU0sRUFBTjtBQUF2QixXQUFQLENBQVQ7QUFDSCxTQVJlLENBQWhCO0FBU0gsT0FWRDtBQVdIOzs7Ozs7QUFuQ0wsT0FBQSxDQUFBLHVCQUFBLEdBQUEsdUJBQUEiLCJzb3VyY2VSb290IjoiIn0=","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar RowTransformerValidator_1 = require(\"./RowTransformerValidator\");\n\nObject.defineProperty(exports, \"RowTransformerValidator\", {\n enumerable: true,\n get: function get() {\n return RowTransformerValidator_1.RowTransformerValidator;\n }\n});\n\nvar HeaderTransformer_1 = require(\"./HeaderTransformer\");\n\nObject.defineProperty(exports, \"HeaderTransformer\", {\n enumerable: true,\n get: function get() {\n return HeaderTransformer_1.HeaderTransformer;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90cmFuc2Zvcm1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUEseUJBQUEsR0FBQSxPQUFBLENBQUEsMkJBQUEsQ0FBQTs7QUFBUyxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSx5QkFBQSxFQUFBO0FBQUEsRUFBQSxVQUFBLEVBQUEsSUFBQTtBQUFBLEVBQUEsR0FBQSxFQUFBLGVBQUE7QUFBQSxXQUFBLHlCQUFBLENBQUEsdUJBQUE7QUFBdUI7QUFBdkIsQ0FBQTs7QUFDVCxJQUFBLG1CQUFBLEdBQUEsT0FBQSxDQUFBLHFCQUFBLENBQUE7O0FBQVMsTUFBQSxDQUFBLGNBQUEsQ0FBQSxPQUFBLEVBQUEsbUJBQUEsRUFBQTtBQUFBLEVBQUEsVUFBQSxFQUFBLElBQUE7QUFBQSxFQUFBLEdBQUEsRUFBQSxlQUFBO0FBQUEsV0FBQSxtQkFBQSxDQUFBLGlCQUFBO0FBQWlCO0FBQWpCLENBQUEiLCJzb3VyY2VSb290IjoiIn0=","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.isSyncValidate = exports.isSyncTransform = void 0;\n\nexports.isSyncTransform = function (transform) {\n return transform.length === 1;\n};\n\nexports.isSyncValidate = function (validate) {\n return validate.length === 1;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBb0JhLE9BQUEsQ0FBQSxlQUFBLEdBQWtCLFVBQzNCLFNBRDJCO0FBQUEsU0FFVyxTQUFTLENBQUMsTUFBVixLQUFxQixDQUZoQztBQUFBLENBQWxCOztBQVVBLE9BQUEsQ0FBQSxjQUFBLEdBQWlCLFVBQWdCLFFBQWhCO0FBQUEsU0FDMUIsUUFBUSxDQUFDLE1BQVQsS0FBb0IsQ0FETTtBQUFBLENBQWpCIiwic291cmNlUm9vdCI6IiJ9","'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","'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');\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 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 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","'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","'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","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\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 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 encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this.strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n }\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n 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\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n Buffer = require('buffer').Buffer;\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this._strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n 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 ? '';\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","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","module.exports={\n \"aes-128-ecb\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 0,\n \"mode\": \"ECB\",\n \"type\": \"block\"\n },\n \"aes-192-ecb\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 0,\n \"mode\": \"ECB\",\n \"type\": \"block\"\n },\n \"aes-256-ecb\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 0,\n \"mode\": \"ECB\",\n \"type\": \"block\"\n },\n \"aes-128-cbc\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes-192-cbc\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes-256-cbc\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes128\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes192\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes256\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CBC\",\n \"type\": \"block\"\n },\n \"aes-128-cfb\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CFB\",\n \"type\": \"stream\"\n },\n \"aes-192-cfb\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CFB\",\n \"type\": \"stream\"\n },\n \"aes-256-cfb\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CFB\",\n \"type\": \"stream\"\n },\n \"aes-128-cfb8\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CFB8\",\n \"type\": \"stream\"\n },\n \"aes-192-cfb8\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CFB8\",\n \"type\": \"stream\"\n },\n \"aes-256-cfb8\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CFB8\",\n \"type\": \"stream\"\n },\n \"aes-128-cfb1\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CFB1\",\n \"type\": \"stream\"\n },\n \"aes-192-cfb1\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CFB1\",\n \"type\": \"stream\"\n },\n \"aes-256-cfb1\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CFB1\",\n \"type\": \"stream\"\n },\n \"aes-128-ofb\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"OFB\",\n \"type\": \"stream\"\n },\n \"aes-192-ofb\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"OFB\",\n \"type\": \"stream\"\n },\n \"aes-256-ofb\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"OFB\",\n \"type\": \"stream\"\n },\n \"aes-128-ctr\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 16,\n \"mode\": \"CTR\",\n \"type\": \"stream\"\n },\n \"aes-192-ctr\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 16,\n \"mode\": \"CTR\",\n \"type\": \"stream\"\n },\n \"aes-256-ctr\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 16,\n \"mode\": \"CTR\",\n \"type\": \"stream\"\n },\n \"aes-128-gcm\": {\n \"cipher\": \"AES\",\n \"key\": 128,\n \"iv\": 12,\n \"mode\": \"GCM\",\n \"type\": \"auth\"\n },\n \"aes-192-gcm\": {\n \"cipher\": \"AES\",\n \"key\": 192,\n \"iv\": 12,\n \"mode\": \"GCM\",\n \"type\": \"auth\"\n },\n \"aes-256-gcm\": {\n \"cipher\": \"AES\",\n \"key\": 256,\n \"iv\": 12,\n \"mode\": \"GCM\",\n \"type\": \"auth\"\n }\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 aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var bn = require('bn.js');\nvar randomBytes = require('randombytes');\nmodule.exports = crt;\nfunction blind(priv) {\n var r = getr(priv);\n var blinder = r.toRed(bn.mont(priv.modulus))\n .redPow(new bn(priv.publicExponent)).fromRed();\n return {\n blinder: blinder,\n unblinder:r.invm(priv.modulus)\n };\n}\nfunction crt(msg, priv) {\n var blinds = blind(priv);\n var len = priv.modulus.byteLength();\n var mod = bn.mont(priv.modulus);\n var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);\n var c1 = blinded.toRed(bn.mont(priv.prime1));\n var c2 = blinded.toRed(bn.mont(priv.prime2));\n var qinv = priv.coefficient;\n var p = priv.prime1;\n var q = priv.prime2;\n var m1 = c1.redPow(priv.exponent1);\n var m2 = c2.redPow(priv.exponent2);\n m1 = m1.fromRed();\n m2 = m2.fromRed();\n var h = m1.isub(m2).imul(qinv).umod(p);\n h.imul(q);\n m2.iadd(h);\n return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));\n}\ncrt.getr = getr;\nfunction getr(priv) {\n var len = priv.modulus.byteLength();\n var r = new bn(randomBytes(len));\n while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {\n r = new bn(randomBytes(len));\n }\n return r;\n}\n","module.exports = require('./browser/algorithms.json')\n","module.exports={\n \"sha224WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha224\",\n \"id\": \"302d300d06096086480165030402040500041c\"\n },\n \"RSA-SHA224\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha224\",\n \"id\": \"302d300d06096086480165030402040500041c\"\n },\n \"sha256WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha256\",\n \"id\": \"3031300d060960864801650304020105000420\"\n },\n \"RSA-SHA256\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha256\",\n \"id\": \"3031300d060960864801650304020105000420\"\n },\n \"sha384WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha384\",\n \"id\": \"3041300d060960864801650304020205000430\"\n },\n \"RSA-SHA384\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha384\",\n \"id\": \"3041300d060960864801650304020205000430\"\n },\n \"sha512WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha512\",\n \"id\": \"3051300d060960864801650304020305000440\"\n },\n \"RSA-SHA512\": {\n \"sign\": \"ecdsa/rsa\",\n \"hash\": \"sha512\",\n \"id\": \"3051300d060960864801650304020305000440\"\n },\n \"RSA-SHA1\": {\n \"sign\": \"rsa\",\n \"hash\": \"sha1\",\n \"id\": \"3021300906052b0e03021a05000414\"\n },\n \"ecdsa-with-SHA1\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"sha256\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha256\",\n \"id\": \"\"\n },\n \"sha224\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha224\",\n \"id\": \"\"\n },\n \"sha384\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha384\",\n \"id\": \"\"\n },\n \"sha512\": {\n \"sign\": \"ecdsa\",\n \"hash\": \"sha512\",\n \"id\": \"\"\n },\n \"DSA-SHA\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"DSA-SHA1\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"DSA\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha1\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA224\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha224\",\n \"id\": \"\"\n },\n \"DSA-SHA224\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha224\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA256\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha256\",\n \"id\": \"\"\n },\n \"DSA-SHA256\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha256\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA384\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha384\",\n \"id\": \"\"\n },\n \"DSA-SHA384\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha384\",\n \"id\": \"\"\n },\n \"DSA-WITH-SHA512\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha512\",\n \"id\": \"\"\n },\n \"DSA-SHA512\": {\n \"sign\": \"dsa\",\n \"hash\": \"sha512\",\n \"id\": \"\"\n },\n \"DSA-RIPEMD160\": {\n \"sign\": \"dsa\",\n \"hash\": \"rmd160\",\n \"id\": \"\"\n },\n \"ripemd160WithRSA\": {\n \"sign\": \"rsa\",\n \"hash\": \"rmd160\",\n \"id\": \"3021300906052b2403020105000414\"\n },\n \"RSA-RIPEMD160\": {\n \"sign\": \"rsa\",\n \"hash\": \"rmd160\",\n \"id\": \"3021300906052b2403020105000414\"\n },\n \"md5WithRSAEncryption\": {\n \"sign\": \"rsa\",\n \"hash\": \"md5\",\n \"id\": \"3020300c06082a864886f70d020505000410\"\n },\n \"RSA-MD5\": {\n \"sign\": \"rsa\",\n \"hash\": \"md5\",\n \"id\": \"3020300c06082a864886f70d020505000410\"\n }\n}\n","module.exports={\n \"1.3.132.0.10\": \"secp256k1\",\n \"1.3.132.0.33\": \"p224\",\n \"1.2.840.10045.3.1.1\": \"p192\",\n \"1.2.840.10045.3.1.7\": \"p256\",\n \"1.3.132.0.34\": \"p384\",\n \"1.3.132.0.35\": \"p521\"\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","// 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","// 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","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\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","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * 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 * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n buf.__proto__ = Buffer.prototype\n return buf\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 // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species != null &&\n Buffer[Symbol.species] === Buffer) {\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true,\n enumerable: false,\n writable: false\n })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayLike(value)\n }\n\n if (value == null) {\n throw TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\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(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nBuffer.prototype.__proto__ = Uint8Array.prototype\nBuffer.__proto__ = Uint8Array\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(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(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(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(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\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(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(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.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 buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.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 === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\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 (!Array.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 (isInstance(buf, Uint8Array)) {\n buf = Buffer.from(buf)\n }\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 (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && 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 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) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\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// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\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\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.toLocaleString = Buffer.prototype.toString\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 str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\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 (numberIsNaN(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 (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 var strLen = string.length\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 (numberIsNaN(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 } 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 = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n newBuf.__proto__ = Buffer.prototype\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 offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\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 offset = offset >>> 0\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 offset = offset >>> 0\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 offset = offset >>> 0\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 offset = offset >>> 0\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 offset = offset >>> 0\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 offset = offset >>> 0\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 offset = offset >>> 0\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 offset = offset >>> 0\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 offset = offset >>> 0\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 offset = offset >>> 0\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 offset = offset >>> 0\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 offset = offset >>> 0\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 this[offset] = (value & 0xff)\n return offset + 1\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 this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\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 this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\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 this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\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 this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\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 (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 this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\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 this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\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 this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\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 this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\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 value = +value\n offset = offset >>> 0\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 value = +value\n offset = offset >>> 0\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 (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\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('Index out of range')\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\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (var i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\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 (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 if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\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 : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\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 takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().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 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\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\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","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// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):t.dayjs=e()}(this,function(){\"use strict\";var t=\"millisecond\",e=\"second\",n=\"minute\",r=\"hour\",i=\"day\",s=\"week\",u=\"month\",a=\"quarter\",o=\"year\",f=\"date\",h=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[^0-9]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?.?(\\d+)?$/,c=/\\[([^\\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,d=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},$={s:d,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+d(r,2,\"0\")+\":\"+d(i,2,\"0\")},m:function t(e,n){if(e.date()68?1900:2e3)}],YYYY:[/\\d{4}/,i(\"year\")],Z:s,ZZ:s};var f=function(t,n,r){try{var o=function(t){for(var n=t.match(e),r=n.length,o=0;o0?s-1:m.getMonth());var D=f||0,M=u||0,g=d||0,Y=c||0;return l?new Date(Date.UTC(p,y,v,D,M,g,Y+60*l.offset*1e3)):r?new Date(Date.UTC(p,y,v,D,M,g,Y)):new Date(p,y,v,D,M,g,Y)}catch(t){return new Date(\"\")}};return function(e,n,r){var o=n.prototype,i=o.parse;o.parse=function(e){var n=e.date,o=e.utc,s=e.args;this.$u=o;var a=s[1];if(\"string\"==typeof a){var h=!0===s[2],u=!0===s[3],d=h||u,c=s[2];u&&(c=s[2]),h||(t=c?r.Ls[c]:this.$locale()),this.$d=f(n,a,o),this.init(),c&&!0!==c&&(this.$L=this.locale(c).$L),d&&n!==this.format(a)&&(this.$d=new Date(\"\"))}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var v=r.apply(this,s);if(v.isValid()){this.$d=v.$d,this.$L=v.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}});\n","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):t.dayjs_plugin_utc=i()}(this,function(){\"use strict\";return function(t,i,e){var s=(new Date).getTimezoneOffset(),n=i.prototype;e.utc=function(t){return new i({date:t,utc:!0,args:arguments})},n.utc=function(){return e(this.toDate(),{locale:this.$L,utc:!0})},n.local=function(){return e(this.toDate(),{locale:this.$L,utc:!1})};var u=n.parse;n.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),u.call(this,t)};var o=n.init;n.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else o.call(this)};var f=n.utcOffset;n.utcOffset=function(t,i){var e=this.$utils().u;if(e(t))return this.$u?0:e(this.$offset)?f.call(this):this.$offset;var n=Math.abs(t)<=16?60*t:t,u=this;return i?(u.$offset=n,u.$u=0===t,u):(0!==t?(u=this.local().add(n+s,\"minute\")).$offset=n:u=this.utc(),u)};var r=n.format;n.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return r.call(this,i)},n.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+s;return this.$d.valueOf()-6e4*t},n.isUTC=function(){return!!this.$u},n.toISOString=function(){return this.toDate().toISOString()},n.toString=function(){return this.toDate().toUTCString()};var a=n.toDate;n.toDate=function(t){return\"s\"===t&&this.$offset?e(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():a.call(this)};var c=n.diff;n.diff=function(t,i,s){var n=this.local(),u=e(t).local();return c.call(n,u,i,s)}}});\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar 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","'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","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","module.exports={\n \"modp1\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"\n },\n \"modp2\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"\n },\n \"modp5\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"\n },\n \"modp14\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"\n },\n \"modp15\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"\n },\n \"modp16\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"\n },\n \"modp17\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"\n },\n \"modp18\": {\n \"gen\": \"02\",\n \"prime\": \"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"\n }\n}","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n 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","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n if (this.curve.twisted) {\n // E = a * C\n var e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n var h = this.z.redSqr();\n // J = F - 2 * H\n var j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n var e = c.redAdd(d);\n // H = (c * Z1)^2\n var h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n var j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16)\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 }\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul)\n }\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1)\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1)\n }\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point))\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point))\n }\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate)\n }\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (var i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (var i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve\n });\n return curve;\n }\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\n ]\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\n ]\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\n ]\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\n ]\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\n ]\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9'\n ]\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658'\n ]\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre\n ]\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray()\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n do {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8'\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; true; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n\n if (!this.curve._maxwellTrick) {\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\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} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength)\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n ]\n ]\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n ]\n ]\n }\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, 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","module.exports={\n \"_from\": \"elliptic@^6.5.3\",\n \"_id\": \"elliptic@6.5.3\",\n \"_inBundle\": false,\n \"_integrity\": \"sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==\",\n \"_location\": \"/elliptic\",\n \"_phantomChildren\": {},\n \"_requested\": {\n \"type\": \"range\",\n \"registry\": true,\n \"raw\": \"elliptic@^6.5.3\",\n \"name\": \"elliptic\",\n \"escapedName\": \"elliptic\",\n \"rawSpec\": \"^6.5.3\",\n \"saveSpec\": null,\n \"fetchSpec\": \"^6.5.3\"\n },\n \"_requiredBy\": [\n \"/browserify-sign\",\n \"/create-ecdh\"\n ],\n \"_resolved\": \"https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz\",\n \"_shasum\": \"cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6\",\n \"_spec\": \"elliptic@^6.5.3\",\n \"_where\": \"/mnt/d/dev/git/exceljs/node_modules/browserify-sign\",\n \"author\": {\n \"name\": \"Fedor Indutny\",\n \"email\": \"fedor@indutny.com\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/indutny/elliptic/issues\"\n },\n \"bundleDependencies\": false,\n \"dependencies\": {\n \"bn.js\": \"^4.4.0\",\n \"brorand\": \"^1.0.1\",\n \"hash.js\": \"^1.0.0\",\n \"hmac-drbg\": \"^1.0.0\",\n \"inherits\": \"^2.0.1\",\n \"minimalistic-assert\": \"^1.0.0\",\n \"minimalistic-crypto-utils\": \"^1.0.0\"\n },\n \"deprecated\": false,\n \"description\": \"EC cryptography\",\n \"devDependencies\": {\n \"brfs\": \"^1.4.3\",\n \"coveralls\": \"^3.0.8\",\n \"grunt\": \"^1.0.4\",\n \"grunt-browserify\": \"^5.0.0\",\n \"grunt-cli\": \"^1.2.0\",\n \"grunt-contrib-connect\": \"^1.0.0\",\n \"grunt-contrib-copy\": \"^1.0.0\",\n \"grunt-contrib-uglify\": \"^1.0.1\",\n \"grunt-mocha-istanbul\": \"^3.0.1\",\n \"grunt-saucelabs\": \"^9.0.1\",\n \"istanbul\": \"^0.4.2\",\n \"jscs\": \"^3.0.7\",\n \"jshint\": \"^2.10.3\",\n \"mocha\": \"^6.2.2\"\n },\n \"files\": [\n \"lib\"\n ],\n \"homepage\": \"https://github.com/indutny/elliptic\",\n \"keywords\": [\n \"EC\",\n \"Elliptic\",\n \"curve\",\n \"Cryptography\"\n ],\n \"license\": \"MIT\",\n \"main\": \"lib/elliptic.js\",\n \"name\": \"elliptic\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+ssh://git@github.com/indutny/elliptic.git\"\n },\n \"scripts\": {\n \"jscs\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n \"jshint\": \"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",\n \"lint\": \"npm run jscs && npm run jshint\",\n \"test\": \"npm run lint && npm run unit\",\n \"unit\": \"istanbul test _mocha --reporter=spec test/index.js\",\n \"version\": \"grunt dist && git add dist/\"\n },\n \"version\": \"6.5.3\"\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\nvar objectCreate = Object.create || objectCreatePolyfill\nvar objectKeys = Object.keys || objectKeysPolyfill\nvar bind = Function.prototype.bind || functionBindPolyfill\n\nfunction EventEmitter() {\n if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {\n this._events = objectCreate(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\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\nvar hasDefineProperty;\ntry {\n var o = {};\n if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });\n hasDefineProperty = o.x === 0;\n} catch (err) { hasDefineProperty = false }\nif (hasDefineProperty) {\n Object.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n // check whether the input is a positive number (whose value is zero or\n // greater and not a NaN).\n if (typeof arg !== 'number' || arg < 0 || arg !== arg)\n throw new TypeError('\"defaultMaxListeners\" must be a positive number');\n defaultMaxListeners = arg;\n }\n });\n} else {\n EventEmitter.defaultMaxListeners = defaultMaxListeners;\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 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\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\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n if (arguments.length > 1)\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Unhandled \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = objectCreate(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) {\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) {\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 } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\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 if (typeof console === 'object' && console.warn) {\n console.warn('%s: %s', w.name, w.message);\n }\n }\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 switch (arguments.length) {\n case 0:\n return this.listener.call(this.target);\n case 1:\n return this.listener.call(this.target, arguments[0]);\n case 2:\n return this.listener.call(this.target, arguments[0], arguments[1]);\n case 3:\n return this.listener.call(this.target, arguments[0], arguments[1],\n arguments[2]);\n default:\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; ++i)\n args[i] = arguments[i];\n this.listener.apply(this.target, args);\n }\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = bind.call(onceWrapper, state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = objectCreate(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 if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = objectCreate(null);\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = objectCreate(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 = objectKeys(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 = objectCreate(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) {\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)\n return [];\n\n var evlistener = events[type];\n if (!evlistener)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ? 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) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\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 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 objectCreatePolyfill(proto) {\n var F = function() {};\n F.prototype = proto;\n return new F;\n}\nfunction objectKeysPolyfill(obj) {\n var keys = [];\n for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) {\n keys.push(k);\n }\n return k;\n}\nfunction functionBindPolyfill(context) {\n var fn = this;\n return function () {\n return fn.apply(context, arguments);\n };\n}\n","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar format_1 = require(\"@fast-csv/format\");\n\nObject.defineProperty(exports, \"format\", {\n enumerable: true,\n get: function get() {\n return format_1.format;\n }\n});\nObject.defineProperty(exports, \"write\", {\n enumerable: true,\n get: function get() {\n return format_1.write;\n }\n});\nObject.defineProperty(exports, \"writeToStream\", {\n enumerable: true,\n get: function get() {\n return format_1.writeToStream;\n }\n});\nObject.defineProperty(exports, \"writeToBuffer\", {\n enumerable: true,\n get: function get() {\n return format_1.writeToBuffer;\n }\n});\nObject.defineProperty(exports, \"writeToString\", {\n enumerable: true,\n get: function get() {\n return format_1.writeToString;\n }\n});\nObject.defineProperty(exports, \"writeToPath\", {\n enumerable: true,\n get: function get() {\n return format_1.writeToPath;\n }\n});\nObject.defineProperty(exports, \"CsvFormatterStream\", {\n enumerable: true,\n get: function get() {\n return format_1.CsvFormatterStream;\n }\n});\nObject.defineProperty(exports, \"FormatterOptions\", {\n enumerable: true,\n get: function get() {\n return format_1.FormatterOptions;\n }\n});\n\nvar parse_1 = require(\"@fast-csv/parse\");\n\nObject.defineProperty(exports, \"parse\", {\n enumerable: true,\n get: function get() {\n return parse_1.parse;\n }\n});\nObject.defineProperty(exports, \"parseString\", {\n enumerable: true,\n get: function get() {\n return parse_1.parseString;\n }\n});\nObject.defineProperty(exports, \"parseStream\", {\n enumerable: true,\n get: function get() {\n return parse_1.parseStream;\n }\n});\nObject.defineProperty(exports, \"parseFile\", {\n enumerable: true,\n get: function get() {\n return parse_1.parseFile;\n }\n});\nObject.defineProperty(exports, \"ParserOptions\", {\n enumerable: true,\n get: function get() {\n return parse_1.ParserOptions;\n }\n});\nObject.defineProperty(exports, \"CsvParserStream\", {\n enumerable: true,\n get: function get() {\n return parse_1.CsvParserStream;\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBLFFBQUEsR0FBQSxPQUFBLENBQUEsa0JBQUEsQ0FBQTs7QUFDSSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxRQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsUUFBQSxDQUFBLE1BQUE7QUFBTTtBQUFOLENBQUE7QUFDQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxPQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsUUFBQSxDQUFBLEtBQUE7QUFBSztBQUFMLENBQUE7QUFDQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxlQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsUUFBQSxDQUFBLGFBQUE7QUFBYTtBQUFiLENBQUE7QUFDQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxlQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsUUFBQSxDQUFBLGFBQUE7QUFBYTtBQUFiLENBQUE7QUFDQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxlQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsUUFBQSxDQUFBLGFBQUE7QUFBYTtBQUFiLENBQUE7QUFDQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxhQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsUUFBQSxDQUFBLFdBQUE7QUFBVztBQUFYLENBQUE7QUFDQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxvQkFBQSxFQUFBO0FBQUEsRUFBQSxVQUFBLEVBQUEsSUFBQTtBQUFBLEVBQUEsR0FBQSxFQUFBLGVBQUE7QUFBQSxXQUFBLFFBQUEsQ0FBQSxrQkFBQTtBQUFrQjtBQUFsQixDQUFBO0FBQ0EsTUFBQSxDQUFBLGNBQUEsQ0FBQSxPQUFBLEVBQUEsa0JBQUEsRUFBQTtBQUFBLEVBQUEsVUFBQSxFQUFBLElBQUE7QUFBQSxFQUFBLEdBQUEsRUFBQSxlQUFBO0FBQUEsV0FBQSxRQUFBLENBQUEsZ0JBQUE7QUFBZ0I7QUFBaEIsQ0FBQTs7QUFVSixJQUFBLE9BQUEsR0FBQSxPQUFBLENBQUEsaUJBQUEsQ0FBQTs7QUFDSSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxPQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsT0FBQSxDQUFBLEtBQUE7QUFBSztBQUFMLENBQUE7QUFDQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxhQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsT0FBQSxDQUFBLFdBQUE7QUFBVztBQUFYLENBQUE7QUFDQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxhQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsT0FBQSxDQUFBLFdBQUE7QUFBVztBQUFYLENBQUE7QUFDQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxXQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsT0FBQSxDQUFBLFNBQUE7QUFBUztBQUFULENBQUE7QUFDQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxlQUFBLEVBQUE7QUFBQSxFQUFBLFVBQUEsRUFBQSxJQUFBO0FBQUEsRUFBQSxHQUFBLEVBQUEsZUFBQTtBQUFBLFdBQUEsT0FBQSxDQUFBLGFBQUE7QUFBYTtBQUFiLENBQUE7QUFDQSxNQUFBLENBQUEsY0FBQSxDQUFBLE9BQUEsRUFBQSxpQkFBQSxFQUFBO0FBQUEsRUFBQSxVQUFBLEVBQUEsSUFBQTtBQUFBLEVBQUEsR0FBQSxFQUFBLGVBQUE7QUFBQSxXQUFBLE9BQUEsQ0FBQSxlQUFBO0FBQWU7QUFBZixDQUFBIiwic291cmNlUm9vdCI6IiJ9","'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","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","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","'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n if (Mutation) {\n var called = 0;\n var observer = new Mutation(nextTick);\n var element = global.document.createTextNode('');\n observer.observe(element, {\n characterData: true\n });\n scheduleDrain = function () {\n element.data = (called = ++called % 2);\n };\n } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n var channel = new global.MessageChannel();\n channel.port1.onmessage = nextTick;\n scheduleDrain = function () {\n channel.port2.postMessage(0);\n };\n } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n scheduleDrain = function () {\n\n // Create a