{"version":3,"sources":["webpack:///./node_modules/qrcode/lib/core/byte-data.js","webpack:///./node_modules/core-js/internals/function-bind-context.js","webpack:///./node_modules/qrcode/lib/core/regex.js","webpack:///./node_modules/dijkstrajs/dijkstra.js","webpack:///./node_modules/core-js/internals/to-offset.js","webpack:///./node_modules/core-js/modules/es.typed-array.find-last-index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/xlsx/xlsx.mjs","webpack:///./node_modules/qrcode/lib/core/polynomial.js","webpack:///./node_modules/qrcode/lib/core/version-check.js","webpack:///./node_modules/qrcode/lib/core/kanji-data.js","webpack:///./node_modules/qrcode/lib/core/error-correction-code.js","webpack:///./node_modules/core-js/modules/es.typed-array.set.js","webpack:///./node_modules/qrcode/lib/renderer/svg-tag.js","webpack:///./node_modules/qrcode/lib/renderer/canvas.js","webpack:///./node_modules/qrcode/lib/renderer/utils.js","webpack:///./node_modules/core-js/internals/array-buffer-basic-detection.js","webpack:///./src/components/Barcode.vue","webpack:///./node_modules/vue-qrcode/node_modules/tslib/tslib.es6.js","webpack:///./node_modules/vue-qrcode/lib/index.js","webpack:///src/components/Barcode.vue","webpack:///./src/components/Barcode.vue?9adc","webpack:///./src/components/Barcode.vue?21a0","webpack:///./node_modules/qrcode/lib/core/bit-matrix.js","webpack:///./node_modules/encode-utf8/index.js","webpack:///./node_modules/qrcode/lib/can-promise.js","webpack:///./node_modules/qrcode/lib/core/galois-field.js","webpack:///./node_modules/qrcode/lib/core/mask-pattern.js","webpack:///./node_modules/qrcode/lib/core/error-correction-level.js","webpack:///./node_modules/qrcode/lib/core/bit-buffer.js","webpack:///./node_modules/qrcode/lib/core/utils.js","webpack:///./node_modules/qrcode/lib/core/reed-solomon-encoder.js","webpack:///./node_modules/core-js/modules/es.typed-array.at.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/qrcode/lib/core/finder-pattern.js","webpack:///./node_modules/qrcode/lib/core/format-info.js","webpack:///./node_modules/core-js/modules/es.typed-array.find-last.js","webpack:///./node_modules/qrcode/lib/core/alphanumeric-data.js","webpack:///./node_modules/core-js/internals/array-iteration-from-last.js","webpack:///./node_modules/qrcode/lib/core/qrcode.js","webpack:///./node_modules/buffer/index.js","webpack:///./src/components/Barcode.vue?b3ca","webpack:///./node_modules/qrcode/lib/core/mode.js","webpack:///./node_modules/qrcode/lib/core/segments.js","webpack:///./node_modules/qrcode/lib/core/version.js","webpack:///./node_modules/qrcode/lib/browser.js","webpack:///./node_modules/qrcode/lib/core/alignment-pattern.js","webpack:///./node_modules/qrcode/lib/core/numeric-data.js","webpack:///./node_modules/core-js/internals/object-get-prototype-of.js","webpack:///./node_modules/core-js/internals/correct-prototype-getter.js","webpack:///./node_modules/isarray/index.js","webpack:///./src/components/chart.vue","webpack:///./node_modules/chart.js/dist/chunks/helpers.segment.mjs","webpack:///./node_modules/chart.js/dist/chart.mjs","webpack:///./node_modules/vue-chartjs/dist/index.js","webpack:///src/components/chart.vue","webpack:///./src/components/chart.vue?0c3a","webpack:///./src/components/chart.vue?3b8c","webpack:///./src/assets/xicon.png","webpack:///./node_modules/core-js/internals/array-buffer-view-core.js","webpack:///./node_modules/core-js/internals/to-positive-integer.js"],"names":["encodeUtf8","Mode","ByteData","data","this","mode","BYTE","Uint8Array","getBitsLength","length","prototype","getLength","write","bitBuffer","i","l","put","module","exports","uncurryThis","aCallable","NATIVE_BIND","bind","fn","that","undefined","apply","arguments","numeric","alphanumeric","kanji","replace","byte","KANJI","RegExp","BYTE_KANJI","NUMERIC","ALPHANUMERIC","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","testKanji","str","test","testNumeric","testAlphanumeric","dijkstra","single_source_shortest_paths","graph","s","d","predecessors","costs","closest","u","v","cost_of_s_to_u","adjacent_nodes","cost_of_e","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","first_visit","open","PriorityQueue","make","push","empty","pop","value","cost","hasOwnProperty","msg","join","Error","extract_shortest_path_from_predecessor_list","nodes","reverse","find_path","opts","key","T","t","queue","sorter","default_sorter","a","b","item","sort","shift","toPositiveInteger","$RangeError","RangeError","it","BYTES","offset","ArrayBufferViewCore","$findLastIndex","findLastIndex","aTypedArray","exportTypedArrayMethod","predicate","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","Array","code","len","charCodeAt","getLens","b64","validLen","indexOf","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","extraBytes","parts","maxChunkLength","len2","$cptable","XLSX","current_codepage","current_ansi","VALID_ANSI","CS2CP","0","1","2","77","128","129","130","134","136","161","162","163","177","178","186","204","222","238","255","69","set_ansi","cp","reset_ansi","set_cp","reset_cp","char_codes","o","utf16leread","String","fromCharCode","utf16beread","debom","c1","c2","slice","_getchar","x","_getansi","set_cptable","cptable","utils","decode","cpdoit","DENSE","DIF_XL","Base64_map","Base64_encode","input","c3","e1","e2","e3","e4","isNaN","charAt","Base64_encode_pass","Base64_decode","has_buf","Buffer","process","versions","node","Buffer_from","nbfs","from","e","buf","enc","buf_utf16le","toString","new_raw_buf","alloc","new_unsafe_buf","allocUnsafe","s2a","split","map","s2ab","ArrayBuffer","view","a2s","isArray","c","a2u","ab2a","bconcat","bufs","concat","isBuffer","maxlen","set","call","utf8decode","content","out","widx","L","ridx","chr0","chr1","_strrev","pad0","fill","pad_","rpad_","pad0r1","Math","round","pad0r2","p2_32","pow","pad0r","SSF_isgeneral","days","months","SSF_init_table","table_fmt","3","4","9","10","11","12","13","14","15","16","17","18","19","20","21","22","37","38","39","40","45","46","47","48","49","56","SSF_default_map","5","6","7","8","23","24","25","26","27","28","29","30","31","50","51","52","53","54","55","57","58","59","60","61","62","67","68","70","71","72","73","74","75","76","78","79","80","81","82","SSF_default_str","63","64","65","66","41","42","43","44","SSF_frac","D","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","floor","q","SSF_parse_date_code","b2","date","time","dow","dout","y","m","H","M","S","abs","date1904","Date","setDate","getDate","getFullYear","getMonth","getDay","SSF_fix_hijri","SSFbasedate","SSFdnthresh","getTime","SSFbase1904","datenum_local","epoch","getTimezoneOffset","SSF_strip_decimal","SSF_normalize_exp","SSF_small_exp","w","toFixed","toPrecision","toExponential","SSF_large_exp","SSF_general_num","V","log","LOG10E","substr","toUpperCase","SSF_general","SSF_format","SSF_write_date","type","fmt","val","ss0","ss","tt","outl","outstr","commaify","j","pct1","write_num_pct","sfmt","mul","write_num","write_num_cm","idx","write_num_exp","match","period","ee","fakee","$$","$1","$2","$3","frac1","write_num_f1","r","aval","sign","den","parseInt","rr","base","myn","myd","write_num_f2","dec1","closeparen","phone","hashq","cc","rnd","dd","dec","_frac","carry","flr","write_num_flt","ffmt","ri","ff","oa","min","max","lres","rres","write_num_cm2","write_num_pct2","write_num_exp2","write_num_int","lastIndexOf","SSF_split_fmt","in_str","SSF_abstime","fmt_is_date","eval_fmt","flen","dt","lst","hr","toLowerCase","ssm","bt","jj","nstr","myv","ostr","vv","decpt","lasti","retval","cfregex2","chkcond","thresh","parseFloat","choose_fmt","f","lat","m1","m2","dateNF","table","SSF_load","SSF_load_table","tbl","make_ssf","SSF","format","load","_table","load_table","parse_date_code","is_date","get_table","SSFImplicit","dateNFregex","dateNF_regex","dateNF_fix","Y","forEach","n","datestr","timestr","bad_formats","SSF__load","_fs","CRC32","signed_crc_table","Int32Array","version","T0","slice_by_16_tables","subarray","TT","T1","T2","T3","T4","T5","T6","T7","T8","T9","Ta","Tb","Tc","Td","Te","Tf","crc32_bstr","bstr","seed","C","crc32_buf","crc32_str","CFB","fs","namecmp","R","Z","dirname","p","filename","write_dos_date","hms","getHours","getMinutes","getSeconds","write_shift","ymd","parse_dos_date","read_shift","setMilliseconds","setFullYear","setMonth","setHours","setMinutes","setSeconds","parse_extra_field","blob","prep_blob","flags","sz","tgt","mtime","atime","ctime","mt","sz1","sz2","usz","csz","get_fs","parse","file","options","parse_zip","parse_mad","mver","ssz","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","fat_addrs","mv","check_get_mver","header","check_shifts","dir_cnt","chk","sectors","sectorify","sleuth_fat","sector_list","make_sector_list","name","ENDOFCHAIN","files","Paths","FileIndex","FullPaths","read_directory","build_full_paths","raw","HEADER_SIGNATURE","nsectors","ceil","FI","FP","pl","dad","get_mfat_entry","entry","payload","mini","size","MSSZ","__readInt32LE","new_buf","cnt","sector","get_sector_list","chkd","buf_chain","modulus","addr","__toBuffer","sl","k","seen","minifat_store","namelen","__utf16le","color","clsid","state","ct","read_date","storage","__readUInt32LE","read_file","readFileSync","read","init_cfb","cfb","root","CLSID","seed_cfb","nm","find","rebuild_cfb","gc","_file","now","fullPaths","Object","create","HEADER_CLSID","elt","_write","_opts","fileType","write_mad","write_zip","mini_size","fat_size","mini_cnt","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","console","error","copy","path","UCFullPaths","UCPaths","UCPath","_zlib","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","write_file","writeFileSync","use_zlib","zlib","InflateRaw","InflRaw","_processChunk","_finishFlushFlag","bytesRead","message","_inflateRawSync","_inflate","_deflateRawSync","deflateRawSync","_deflate","CLEN_ORDER","LEN_LN","DST_LN","bit_swap_8","use_typed_arrays","bitswap8","bit_swap_n","rev","read_bits_2","bl","h","read_bits_3","read_bits_4","read_bits_5","read_bits_7","read_bits_n","write_bits_3","write_bits_1","write_bits_8","write_bits_16","realloc","zero_fill_array","build_tree","clens","cmap","MAX","ccode","bl_count","Uint16Array","ctree","cleni","fix_lmap","fix_dmap","dlens","_deflateRaw","DST_LN_RE","LEN_LN_RE","write_stored","boff","write_huff_fixed","addrs","hash","mlen","len_eb","dst_eb","off","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","next_code","hcodes","h1","h2","inflate","outbuf","woff","OL","max_len_1","max_len_2","bits","dst","warn_or_throw","wrn","fcnt","start_cd","efsz","fcsz","EF","parse_local_file","meth","crc32","_csz","_usz","ef","cfb_add","unsafe","cdirs","method","compression","desc","fp","fi","crcs","sz_cd","namebuf","ContentTypeMap","get_content_type","ctype","ext","write_base64_76","write_quoted_printable","text","encoded","si","parse_quoted_printable","di","line","oi","parse_mime","fdata","fname","cte","trim","row","mboundary","boundary","start_di","ca","cstr","dispcnt","csl","qp","cfb_new","fpath","cfb_gc","cfb_del","splice","cfb_mov","old_name","new_name","writeFile","ReadShift","CheckField","_inflateRaw","set_fs","blobify","write_dl","Deno","TextEncoder","encode","utf8write","IE_SaveFile","Blob","navigator","msSaveBlob","saveAs","URL","document","createElement","createObjectURL","url","chrome","downloads","download","revokeObjectURL","setTimeout","href","body","appendChild","click","removeChild","$","File","Folder","encoding","close","read_binary","infile","keys","ks","o2","evert_key","obj","K","evert","evert_num","evert_arr","basedate","datenum","dnthresh","refdate","refoffset","numdate","setTime","parse_isodur","sec","good_pd_date_1","good_pd_date","good_pd","parseDate","fixdate","cc2str","debomit","TextDecoder","dup","JSON","stringify","fuzzynum","Number","isFinite","NaN","wt","FDRE1","fuzzytime1","lower_months","fuzzydate","lower","lnos","getYear","split_regex","safe_split_regex","re","def","getdatastr","asNodeBuffer","asBinary","_data","getContent","getdatabin","getdata","safegetzipfile","zip","g","getzipfile","getzipdata","safe","getzipstr","getzipbin","zipentries","zip_add_file","res","zip_new","zip_read","resolve_path","result","target","step","XML_HEADER","attregexg","tagregex1","tagregex2","tagregex","nsregex","nsregex2","parsexmltag","tag","skip_root","skip_LC","z","eq","quot","strip_ns","encodings","rencoding","unescapexml","encregex","coderegex","raw_unescapexml","xlsx","decregex","charegex","escapexml","escapexmltag","htmlcharegex","escapehtml","escapexlml","xlml_fixstr","entregex","entrepl","xlml_unfixstr","parsexmlbool","utf8reada","orig","utf8readb","ww","utf8readc","utf8corpus","utf8read","matchtag","mtcache","htmldecode","entities","vtregex","vt_cache","vtvregex","vtmregex","parseVector","matches","baseType","WTF","wtregex","writetag","wxt_helper","writextag","write_w3cdtf","toISOString","write_vt","xlml_normalize","xlmlregex","XMLNS","CORE_PROPS","CUST_PROPS","EXT_PROPS","CT","RELS","TCMNT","XMLNS_main","XLMLNS","read_double_le","Infinity","write_double_le","bs","av","LN2","___toBuffer","___utf16le","__readUInt16LE","___hexlify","__hexlify","___utf8","__readUInt8","__utf8","___lpstr","__lpstr","___cpstr","__cpstr","___lpwstr","__lpwstr","___lpp4","__lpp4","___8lpp4","__8lpp4","___double","__double","is_buf","readUInt32LE","readDoubleLE","__readInt16LE","__readInt32BE","oI","oR","loc","oo","__writeUInt32LE","__writeInt32LE","__writeUInt16LE","WriteShift","cpp","hexstr","fld","pos","parsenoop","recordhopper","cb","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","curbuf","endbuf","next","_bufs","write_record","ba","shift_cell_xls","cell","cRel","rRel","biff","shift_range_xls","range","encode_cell_xls","encode_cell","fix_col","fix_row","encode_range_xls","encode_row","encode_col","decode_row","rowstr","unfix_row","decode_col","colstr","unfix_col","col","split_cell","decode_cell","decode_range","encode_range","cs","ce","fix_range","a1","formula_quote_sheet_name","sname","safe_decode_range","safe_format_cell","XF","numFmtId","format_cell","BErr","sheet_to_workbook","sheet","sheets","SheetNames","Sheets","sheet_add_aoa","_ws","dense","ws","_R","_C","origin","_origin","_range","__R","__Rstr","__C","nullError","sheetStubs","cellDates","cell_ref","aoa_to_sheet","parse_Int32LE","write_UInt32LE","parse_XLWideString","cchCharacters","write_XLWideString","_null","parse_StrRun","ich","ifnt","write_StrRun","run","parse_RichStr","rgsStrRun","dwSizeStrRun","write_RichStr","parse_BrtCommentText","write_BrtCommentText","parse_XLSBCell","iStyleRef","write_XLSBCell","parse_XLSBShortCell","write_XLSBShortCell","parse_XLSBCodeName","write_XLSBCodeName","parse_XLNullableWideString","write_XLNullableWideString","parse_XLNameWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","write_RkNumber","d100","parse_RfX","write_RfX","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","parse_BrtColor","xColorType","index","nTS","bR","bG","bB","auto","icv","XLSIcv","rgb","rgb2Hex","theme","tint","write_BrtColor","parse_FontFlags","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","write_FontFlags","font","grbit","italic","strike","outline","shadow","condense","extend","parse_ClipboardFormatOrString","ClipFmt","parse_ClipboardFormatOrAnsiString","parse_ClipboardFormatOrUnicodeString","VT_I2","VT_I4","VT_BOOL","VT_VARIANT","VT_UI4","VT_FILETIME","VT_BLOB","VT_CF","VT_VECTOR_VARIANT","VT_VECTOR_LPSTR","VT_STRING","VT_USTR","VT_CUSTOM","DocSummaryPIDDSI","SummaryPIDSI","CountryEnum","XLSFillPattern","rgbify","_XLSIcv","RBErr","XLSLblBuiltIn","ct2type","CT_LIST","workbooks","xlsm","xlsb","xlam","xltx","strs","comments","charts","dialogs","macros","metadata","styles","new_ct","rels","threadedcomments","links","coreprops","extprops","custprops","themes","calcchains","vba","drawings","people","TODO","xmlns","parse_ct","ctext","Extension","ContentType","PartName","calcchain","sst","style","defaults","write_ct","type2ct","xsd","xsi","f1","bookType","f2","f3","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","CMNT","SST","STY","THEME","CHART","CHARTEX","CS","WS","DS","MS","IMG","DRAW","XLMETA","PEOPLE","CONN","VBA","get_rels_path","parse_rels","currentFilePath","rel","Type","Target","Id","TargetMode","canonictarget","write_rels","rid","add_rels","rId","relobj","targetmode","CT_ODS","parse_manifest","Rn","FEtag","exec","write_manifest","manifest","write_rdf_type","write_rdf_has","write_rdf","rdf","write_meta_ods","CORE_PROPS_REGEX","parse_core_props","cur","cp_doit","write_core_props","dc","dcterms","dcmitype","Props","CreatedDate","ModifiedDate","PseudoPropsPairs","load_props_pairs","HP","TOP","props","hp","Worksheets","NamedRanges","DefinedNames","Chartsheets","ChartNames","parse_ext_props","xml","HeadingPairs","TitlesOfParts","write_ext_props","W","Application","vt","custregex","parse_cust_props","toks","warn","write_cust_props","pid","evert_XLMLDPM","XLMLDocPropsMap","Title","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","LastPrinted","Category","Manager","Company","AppVersion","ContentStatus","Identifier","Language","xlml_set_prop","xlml_write_docprops","xlml_write_custprops","Custprops","BLACKLIST","parse_FILETIME","dwLowDateTime","dwHighDateTime","write_FILETIME","parse_lpstr","pad","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtUnalignedString","parse_VtVecLpwstrValue","ret","parse_VtVecUnalignedLpstrValue","parse_VtHeadingPair","headingString","parse_TypedPropertyValue","headerParts","parse_VtVecHeadingPairValue","cElements","parse_dictionary","CodePage","dict","parse_BLOB","bytes","parse_ClipboardData","Size","write_TypedPropertyValue","parse_PropertySet","PIDSI","start_addr","NumProps","Dictionary","DictObj","PropID","Offset","PropH","fail","piddsi","oldpos","parsebool","XLSPSSkip","guess_property_type","write_PropertySet","entries","RE","hdr","piao","prop","pr","pio","unshift","pinfo","parse_PropertySetStream","NumSets","FMTID0","FMTID1","Offset0","Offset1","SystemIdentifier","PSet1","PSet0","rval","FMTID","write_PropertySetStream","entries2","clsid2","ps0","ps1","parsenoop2","writezeroes","parslurp","writebool","parseuint16","writeuint16","parseuint16a","parse_Bes","write_Bes","parse_ShortXLUnicodeString","cch","fHighByte","parse_XLUnicodeRichExtendedString","cbExtRst","fExtSt","fRichSt","width","cRun","write_XLUnicodeRichExtendedString","xlstr","nfmts","otext","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","write_XLUnicodeString","parse_ControlInfo","accel","parse_URLMoniker","extra","parse_FileMoniker","cAnti","preamble","ansiPath","unicodePath","parse_HyperlinkMoniker","parse_HyperlinkString","write_HyperlinkString","parse_Hyperlink","sVer","displayName","targetFrameName","moniker","oleMoniker","guid","fileTime","Loc","Tooltip","write_Hyperlink","hl","hashidx","F","Pretarget","parse_LongRGBA","parse_LongRGB","parse_XLSCell","rw","ixfe","write_XLSCell","parse_frtHeader","rt","parse_OptXLUnicodeString","parse_XTI","iSupBook","itabFirst","itabLast","parse_RkRec","parse_AddinUdf","udfName","parse_Ref8U","rwFirst","rwLast","colFirst","colLast","write_Ref8U","parse_RefU","parse_Ref","parse_FtCmo","ot","id","parse_FtNts","fSharedNote","parse_FtCf","cf","parse_FtSkip","FtTab","parse_FtArray","fts","ft","parse_BOF","BIFFVer","write_BOF","wb","parse_InterfaceHdr","parse_WriteAccess","UserName","write_WriteAccess","b8","parse_WsBool","fDialog","fBelow","fRight","parse_BoundSheet8","hidden","hs","write_BoundSheet8","parse_SST","ucnt","Count","Unique","write_SST","parse_ExtSST","extsst","dsst","parse_Row","miyRw","level","hpt","parse_ForceFullCalculation","fullcalc","parse_RecalcId","parse_DefaultRowHeight","fl","Unsynced","DyZero","ExAsc","ExDsc","parse_Window1","xWn","yWn","dxWn","dyWn","iTabCur","iTabFirst","ctabSel","wTabRatio","Pos","Dim","Flags","CurTab","FirstTab","Selected","TabRatio","write_Window1","parse_Window2","RTL","write_Window2","parse_Pane","parse_Font","dyHeight","write_Font","b5","parse_LabelSst","isst","write_LabelSst","os","parse_Label","biffguess","write_Label","parse_Format","fmtstr","write_Format","parse_BIFF2Format","parse_Dimensions","write_Dimensions","parse_RK","rkrec","rknum","parse_MulRk","rkrecs","lastcol","parse_MulBlank","ixfes","parse_CellStyleXF","patternType","cellStyles","alc","fWrap","alcV","fJustLast","trot","cIndent","fShrinkToFit","iReadOrder","fAtrNum","fAtrFnt","fAtrAlc","fAtrBdr","fAtrPat","fAtrProt","dgLeft","dgRight","dgTop","dgBottom","icvLeft","icvRight","grbitDiag","icvTop","icvBottom","icvDiag","dgDiag","icvFore","icvBack","fsxButton","parse_XF","fStyle","write_XF","ixfeP","parse_Guts","write_Guts","guts","parse_BoolErr","write_BoolErr","parse_Number","xnum","write_Number","parse_XLHeaderFooter","parse_SupBook","ctab","sbcch","virtPath","rgst","parse_ExternName","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","Name","parse_Lbl","chKey","cce","itab","npflen","rgce","parse_NameParsedFormula","parse_ExternSheet","parse_BIFF5ExternSheet","parse_NameCmt","cchName","cchComment","comment","parse_ShrFmla","ref","cUse","parse_SharedParsedFormula","parse_Array","parse_ArrayParsedFormula","parse_MTRSettings","fMTREnabled","fUserSetThreadCount","cUserThreadCount","parse_NoteSh","idObj","stAuthor","parse_Note","parse_MergeCells","merges","cmcs","write_MergeCells","parse_Obj","parse_BIFF5Obj","cmo","parse_BIFF5OT","parse_TxO","texts","lastobj","cchText","parse_HLink","hlink","write_HLink","O","parse_HLinkTooltip","wzTooltip","write_HLinkTooltip","parse_Country","write_Country","parse_ClrtClient","ccv","parse_Palette","parse_XFCRC","cxfs","crc","parse_ColInfo","coldx","write_ColInfo","parse_Setup","footer","parse_ShtProps","area","write_RRTabId","parse_Blank","parse_Scl","parse_String","parse_ImData","env","lcb","parse_BIFF2STR","parse_BIFF2NUM","write_BIFF2NUM","write_BIFF2Cell","parse_BIFF2INT","write_BIFF2INT","parse_BIFF2STRING","parse_BIFF2FONTXTRA","parse_RString","DBF_SUPPORTED_VERSIONS","DBF","dbf_codepage_map","dbf_reverse_map","dbf_to_aoa","memo","vfp","l7","nrow","fpos","rlen","current_cp","codepage","fields","field","hend","sheetRows","dbf_to_sheet","wch","dbf_to_workbook","_RLEN","sheet_to_dbf","old_cp","aoa","sheet_to_json","headers","cols","hcnt","coltypes","colwidths","coldecimals","guess","_guess","hf","_f","hb","rout","_n","_l","_s","to_workbook","to_sheet","from_sheet","SYLK","sylk_escapes","AA","BA","CA","DA","HA","JA","AE","BE","CE","HE","AI","BI","CI","HI","AO","BO","CO","DO","HO","AU","BU","CU","HU","Aa","Ba","Ca","Da","Ha","Ja","Ae","Be","Ce","He","Ai","Bi","Ci","Hi","Ao","Bo","Co","Do","Ho","Au","Bu","Cu","Hu","KC","Kc","DN","Dn","Hy","sylk_char_regex","sylk_char_fn","_","decode_sylk_char","newcc","sylk_to_aoa","sylk_to_aoa_str","records","rj","formats","next_cell_format","sht","rowinfo","colinfo","cw","Mval","Workbook","WBProps","Names","rstr","record","d1904","nn","Sheet","Ref","rc_to_a1","C_seen_K","C_seen_X","C_seen_S","C_seen_E","formula","cell_t","cellText","shrbase","shift_formula_str","F_seen","hpx","pt2px","process_col","sylk_to_workbook","aoasht","outwb","write_ws_cell_sylk","a1_to_rc","write_ws_cols_sylk","rec","wpx","width2px","px2char","write_ws_rows_sylk","rows","px2pt","sheet_to_sylk","RS","DIF","dif_to_aoa","dif_to_aoa_str","dif_to_sheet","dif_to_workbook","make_value","make_value_str","sheet_to_dif","_DIF_XL","ETH","eth_to_aoa","eth_to_sheet","eth_to_workbook","sep","meta","sheet_to_eth_data","coord","sheet_to_eth","PRN","set_text_arr","prn_to_aoa_str","lines","guess_seps","guess_sep_weights","guess_sep","instr","dsv_to_sheet_str","FS","sepcc","startcc","_re","finish_cell","fuzzyfmla","cellNF","outer","prn_to_sheet_str","prn_to_sheet","firstbyte","prn_to_workbook","sheet_to_prn","read_wb_ID","OLD_WTF","WK_","lotushopper","Enum","WK1Enum","lotus_to_workbook","lotus_to_workbook_buf","next_n","sidx","snames","realnames","sdata","refguess","qpw_to_workbook_buf","vers","qpro","works","works2","tmpcell","WK3Enum","osheets","rnames","sheet_to_wk1","write_biff_rec","write_BOF_WK1","write_RANGE","max_R","write_INTEGER","write_NUMBER","write_LABEL","book_to_wk3","write_BOF_WK3","write_XFORMAT_SHEETNAME","wsidx","write_NUMBER_17","write_LABEL_16","wscnt","parse_RANGE","parse_cell","parse_LABEL","parse_STRING","parse_INTEGER","parse_NUMBER","parse_FORMULA","wk1_fmla_to_csf","wk1_parse_rc","FuncTab","BinOpTab","argc","argL","argR","args","parse_cell_3","parse_LABEL_16","parse_NUMBER_18","parse_NUMBER_17","v1","v2","log2","parse_FORMULA_19","parse_NUMBER_25","parse_NUMBER_27","parse_FORMULA_28","parse_SHEETNAMECS","parse_SHEETNAMELP","parse_SHEETINFOQP","parse_XFORMAT","book_append_sheet","CC","delta","parse_rpr","rpr","pass","uval","family","valign","parse_rs","tregex","rpregex","parse_r","rregex","rend","rs","filter","rs_to_html","nlregex","parse_rpr2","intro","outro","align","r_to_html","terms","sitregex","sirregex","sirphregex","parse_si","html","cellHTML","sstr0","sstr1","sstr2","parse_sst_xml","count","uniqueCount","straywsregex","write_sst_xml","bookSST","sitag","parse_BrtBeginSst","parse_sst_bin","write_BrtBeginSst","write_BrtSSTItem","write_sst_bin","_JS2ANSI","parse_CRYPTOVersion","Major","Minor","parse_DataSpaceVersionInfo","U","parse_DataSpaceMapEntry","comps","parse_DataSpaceMap","parse_DataSpaceDefinition","parse_TransformInfoHeader","parse_Primary","ename","cmode","parse_EncryptionHeader","AlgID","valid","AlgIDHash","KeySize","ProviderType","CSPName","parse_EncryptionVerifier","Salt","Verifier","VerifierHash","parse_EncryptionInfo","parse_EncInfoStd","parse_EncInfoExt","parse_EncInfoAgl","verifier","KeyData","encryptedHmacKey","encryptedHmacValue","encs","uri","parse_RC4CryptoHeader","EncryptionVersionInfo","EncryptionHeader","EncryptionVerifier","parse_RC4Header","EncryptedVerifier","EncryptedVerifierHash","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","PasswordByte","Intermediate1","Intermediate2","Intermediate3","PasswordDecoded","crypto_CreateXorArray_Method1","PadArray","InitialCode","XorMatrix","Ror","Byte","XorRor","byte1","byte2","CreateXorKey_Method1","XorKey","CurrentElement","Char","password","Temp","PasswordLastChar","PadIndex","Index","ObfuscationArray","crypto_DecryptData_Method1","Data","XorArrayIndex","XorArray","Value","crypto_MakeXorDecryptor","parse_XORObfuscation","verificationBytes","insitu","parse_FilePassHeader","Info","parse_FilePass","rtf_to_sheet","rtf_to_sheet_str","rowtf","rtfre","last_index","lastIndex","rtf_to_workbook","sheet_to_rtf","hex2RGB","rgb2HSL","G","H6","L2","hsl2RGB","hsl","X","h6","rgb_tint","hex","DEF_MDW","MAX_MDW","MIN_MDW","MDW","px","char2width","chr","cycle_width","collw","find_mdw_colw","_MDW","coll","customWidth","DEF_PPI","PPI","pt","XLMLPatternTypeMap","parse_borders","Borders","border","diagonalUp","diagonalDown","parse_fills","Fills","bgColor","indexed","fgColor","parse_fonts","Fonts","bold","underline","vertAlign","scheme","themeElements","clrScheme","parse_numFmts","NumberFmt","formatCode","write_numFmts","NF","cellXF_uint","cellXF_bool","parse_cellXfs","xf","CellXf","alignment","vertical","horizontal","textRotation","indent","wrapText","write_cellXfs","cellXfs","parse_sty_xml","numFmtRegex","cellXfRegex","fillsRegex","fontsRegex","bordersRegex","write_sty_xml","parse_BrtFmt","stFmtCode","write_BrtFmt","parse_BrtFont","bls","bCharSet","charset","write_BrtFont","sss","rev_XLSBFillPTNames","XLSBFillPTNames","parse_BrtFill","write_BrtFill","fls","parse_BrtXF","ixfeParent","ifmt","write_BrtXF","flow","write_Blxf","parse_BrtBorder","write_BrtBorder","write_BrtStyle","xfId","builtinId","write_BrtBeginTableStyles","defTableStyle","defPivotStyle","parse_sty_bin","write_FMTS_bin","write_FONTS_bin","write_FILLS_bin","write_BORDERS_bin","write_CELLSTYLEXFS_bin","fontId","fillId","borderId","write_CELLXFS_bin","write_STYLES_bin","write_DXFS_bin","write_TABLESTYLES_bin","write_COLORPALETTE_bin","write_sty_bin","XLSXThemeClrScheme","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","parse_themeElements","themeltregex","parse_theme_xml","write_theme","Themes","themeXLSX","parse_Theme","dwThemeVersion","themeXML","parse_ColorTheme","parse_FullColorExt","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_XFExtGradient","parse_ExtProp","extType","parse_XFExt","cexts","update_xfext","xfext","xfe","parse_BrtMdtinfo","write_BrtMdtinfo","parse_BrtMdb","write_BrtMdb","mdb","write_BrtBeginEsfmd","parse_BrtBeginEsmdb","write_BrtBeginEsmdb","cm","parse_xlmeta_bin","Types","Cell","metatype","write_xlmeta_bin","parse_xlmeta_xml","lastmeta","offsets","write_xlmeta_xml","parse_cc_xml","parse_BrtCalcChainItem$","parse_cc_bin","parse_xlink_xml","parse_xlink_bin","parse_drawing","write_vml","csize","bbox","_shapeid","_comments","joinstyle","gradientshapeok","coordsize","write_vml_comment","fillopts","angle","fillparm","fillxml","shadata","on","fillcolor","strokecolor","sheet_insert_comments","threaded","author","parse_comments_xml","authors","commentList","authtag","cmnttag","authorId","textMatch","write_comments_xml","iauthor","ID","lastauthor","ts","tcnt","parse_tcmnt_xml","tidx","personId","write_tcmnt_xml","carr","rootid","tcopts","tcid","parentId","parse_people_xml","displayname","write_people_xml","person","userId","providerId","parse_BrtBeginComment","rfx","write_BrtBeginComment","parse_BrtCommentAuthor","write_BrtCommentAuthor","parse_comments_bin","write_comments_bin","CT_VBA","make_vba_xls","newcfb","newpath","fill_vba_xls","VBAFMTS","parse_ds_bin","parse_ds_xml","parse_ms_bin","parse_ms_xml","rcregex","rcbase","rcfunc","fstr","crefregex","$0","$4","$5","shift_formula_xlsx","_xlfn","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceAreaRel","parse_RgceLoc","parse_RgceLoc_BIFF2","parse_RgceElfLoc","fQuoted","parse_RgceLocRel","parse_RgceLocRel_BIFF2","cl","rl","parse_PtgArea","parse_PtgArea3d","ixti","parse_PtgAreaErr","parse_PtgAreaErr3d","parse_PtgAreaN","parse_PtgArray","parse_PtgAttrBaxcel","bitSemi","bitBaxcel","parse_PtgAttrChoose","parse_PtgAttrGoto","bitGoto","parse_PtgAttrIf","bitIf","parse_PtgAttrIfError","parse_PtgAttrSemi","parse_PtgAttrSpaceType","parse_PtgAttrSpace","parse_PtgAttrSpaceSemi","parse_PtgRef","parse_PtgRefN","parse_PtgRef3d","parse_PtgFunc","iftab","FtabArgc","Ftab","parse_PtgFuncVar","cparams","tab","parsetab","Cetab","parse_PtgAttrSum","parse_PtgExp","parse_PtgErr","parse_PtgInt","parse_PtgBool","parse_PtgNum","parse_PtgStr","parse_SerAr","parse_PtgExtraMem","parse_PtgExtraArray","parse_PtgName","nameindex","parse_PtgNameX","parse_PtgNameX_BIFF5","parse_PtgMemArea","parse_PtgMemFunc","parse_PtgRefErr","parse_PtgRefErr3d","parse_PtgMemErr","parse_PtgMemNoMem","parse_PtgTbl","parse_PtgElfLoc","parse_PtgElfNoop","parse_PtgElfCol","parse_PtgElfColS","parse_PtgElfColSV","parse_PtgElfColV","parse_PtgElfLel","parse_PtgElfRadical","parse_PtgElfRadicalLel","parse_PtgElfRadicalS","parse_PtgElfRw","parse_PtgElfRwV","PtgListRT","parse_PtgList","coltype","parse_PtgSxName","parse_PtgSheet","parse_PtgEndSheet","parse_PtgMemAreaN","parse_PtgMemNoMemN","parse_PtgAttrNoop","PtgTypes","PtgDupes","Ptg18","Ptg19","parse_RgbExtra","parse_Rgce","ptgs","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","make_3d_range","get_ixti_raw","supbooks","XTI","SID","get_ixti","ixtiraw","stringify_formula","stack","nameidx","last_sp","sp","fflen","func","lbl","names","xlfn","externbook","bookidx","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","PtgNonDisp","_left","rgcb","parse_XLSCellParsedFormula","parse_FormulaValue","write_FormulaValue","parse_Formula","cbf","shared","write_Formula","o1","o3","bf","parse_XLSBParsedFormula","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","write_XLSBFormulaNum","oint","write_XLSBFormulaErr","write_XLSBFormulaBool","write_XLSBFormulaStr","postamble","write_XLSBFormulaRef","write_XLSBFormulaRef3D","lastbang","write_XLSBFormulaRefErr3D","write_XLSBFormulaRange","_str","write_XLSBFormulaRangeWS","write_XLSBFormulaArea3D","write_XLSBFormula","write_XLSBNameParsedFormula","32","34","35","36","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119","120","121","122","124","125","126","127","131","132","133","135","137","138","139","140","142","143","144","145","146","147","148","149","150","151","152","153","155","159","164","166","167","168","169","170","171","172","173","174","175","185","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","223","224","225","226","227","228","229","240","243","249","250","251","252","253","254","256","259","260","265","266","267","268","269","272","273","274","276","277","278","279","280","281","282","283","284","285","288","289","290","291","292","293","295","296","297","298","302","305","306","307","308","309","310","311","312","313","314","315","316","318","319","320","321","322","323","324","325","328","330","336","338","339","342","343","344","350","352","354","355","356","370","373","374","375","376","377","378","379","380","381","382","383","384","385","386","388","390","391","392","393","394","395","396","397","398","399","400","412","413","414","415","416","417","420","421","422","423","424","425","430","431","432","433","434","435","436","437","438","439","440","441","442","443","444","445","446","447","448","449","450","451","452","453","454","455","456","458","459","460","461","462","463","464","465","466","467","468","469","470","471","472","473","474","475","476","477","478","480","481","482","485","489","491","493","494","495","509","510","511","517","518","519","520","521","522","523","545","546","547","548","549","620","621","647","653","667","673","753","755","808","33","123","141","154","156","157","158","160","165","176","179","180","181","182","183","184","205","221","230","231","232","233","234","235","236","237","239","241","242","244","245","246","247","248","257","258","261","262","263","264","270","271","275","286","287","294","299","300","301","303","304","317","326","327","329","331","332","334","335","337","340","341","345","346","347","348","349","351","353","357","358","359","360","361","362","363","364","365","366","367","368","369","371","372","387","389","401","402","403","404","405","406","407","408","409","410","411","418","419","426","427","428","429","457","724","479","483","484","65535","ods_to_csf_formula","csf_to_ods_formula","ods_to_csf_3D","csf_to_ods_3D","_ssfopts","browser_has_Map","Map","get_sst_id","has","revarr","get","col_obj_w","outlineLevel","default_margins","margins","defs","left","right","top","bottom","get_cell_style","revssf","ssf","applyNumberFormat","safe_format","fmtid","fillid","raw_rgb","check_ws","parse_ws_xml_dim","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","afregex","marginregex","sheetprregex","sheetprregex2","svsregex","parse_ws_xml","data1","data2","mtch","sheetPr","parse_ws_xml_sheetpr","parse_ws_xml_sheetpr2","svs","parse_ws_xml_sheetviews","columns","parse_ws_xml_cols","parse_ws_xml_data","afilter","parse_ws_xml_autofilter","_merge","parse_ws_xml_hlinks","parse_ws_xml_margins","tmpref","write_ws_xml_merges","codeName","CodeName","write_ws_xml_sheetpr","needed","vbaraw","cname","outlineprops","summaryBelow","summaryRight","above","sheetprot_deffalse","sheetprot_deftrue","write_ws_xml_protection","location","Rel","tooltip","rng","margin","write_ws_xml_margins","seencol","coli","colm","colM","write_ws_xml_cols","write_ws_xml_autofilter","sviewregex","Views","zoomScale","zoom","rightToLeft","write_ws_xml_sheetviews","sview","workbookViewId","write_ws_xml_cell","oldt","oldv","Strings","revStrings","display","cellregex","rowregex","isregex","refregex","match_v","match_f","sstr","ftag","cells","cref","tagr","tagc","do_format","rowobj","rowrite","marr","marrlen","xlen","rstarti","outa","ht","rslice","cellFormula","___f","_tag","xlmeta","_r","write_ws_xml_data","params","height","_cell","customHeight","write_ws_xml","rdata","_drawing","sheetFormat","defaultRowHeight","baseColWidth","outlineLevelRow","relc","ignoreEC","numberStoredAsText","sqref","parse_BrtRowHdr","write_BrtRowHdr","ncolspan","lcs","caddr","first","last","write_row_header","parse_BrtWsDim","write_BrtWsDim","parse_BrtWsFmtInfo","parse_BrtWsProp","write_BrtWsProp","parse_BrtCellBlank","write_BrtCellBlank","ncell","parse_BrtShortBlank","write_BrtShortBlank","parse_BrtCellBool","fBool","write_BrtCellBool","parse_BrtShortBool","write_BrtShortBool","parse_BrtCellError","bError","write_BrtCellError","parse_BrtShortError","write_BrtShortError","parse_BrtCellIsst","write_BrtCellIsst","parse_BrtShortIsst","write_BrtShortIsst","parse_BrtCellReal","write_BrtCellReal","parse_BrtShortReal","write_BrtShortReal","parse_BrtCellRk","write_BrtCellRk","parse_BrtShortRk","write_BrtShortRk","parse_BrtCellRString","parse_BrtCellSt","write_BrtCellSt","parse_BrtShortSt","write_BrtShortSt","parse_BrtFmlaBool","parse_BrtFmlaError","parse_BrtFmlaNum","parse_BrtFmlaString","parse_BrtMergeCell","write_BrtMergeCell","write_BrtBeginMergeCells","parse_BrtHLink","relId","write_BrtHLink","locidx","parse_BrtPane","parse_BrtArrFmla","fAlwaysCalc","parse_BrtShrFmla","write_BrtColInfo","BrtMarginKeys","parse_BrtMargins","write_BrtMargins","parse_BrtBeginWsView","write_BrtBeginWsView","write_BrtCellIgnoreEC","write_BrtSheetProtection","parse_BrtDVal","parse_BrtDVal14","parse_ws_bin","ai","af","vm","RR","aii","_d","write_ws_bin_cell","last_seen","write_CELLTABLE","cap","write_MERGECELLS","write_COLINFOS","write_IGNOREECS","write_HLINKS","write_LEGACYDRAWING","write_AUTOFILTER","write_WSVIEWS2","write_WSFMTINFO","write_SHEETPROTECT","write_ws_bin","parse_Cache","nf","parse_chart","csheet","nc","cache","parse_cs_xml","parse_BrtCsProp","parse_cs_bin","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","push_defaults_array","push_defaults","parse_wb_defaults","CalcPr","WBView","safe1904","badchars","check_ws_name","_good","check_wb_names","N","codes","cn","check_wb","dn","wbnsregex","parse_wb_xml","dname","dnstart","Hidden","Comment","localSheetId","write_wb_xml","write_names","workbookPr","sheetId","parse_BrtBundleSh","iTabID","strRelID","write_BrtBundleSh","parse_BrtWbProp","defaultThemeVersion","strName","autoCompressPictures","backupFile","checkCompatibility","filterPrivacy","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","write_BrtWbProp","parse_BrtFRTArchID$","ArchID","parse_BrtName","Ptg","write_BrtName","parse_wb_bin","write_BUNDLESHS","viz","write_BrtFileVersion","write_BrtBookView","write_BOOKVIEWS","vistab","write_BRTNAMES","write_SELF_EXTERNS_xlsb","write_EXTERNALS_xlsb","write_wb_bin","parse_wb","parse_ws","parse_cs","parse_ms","parse_ds","parse_sty","parse_sst","parse_cmnt","parse_cc","parse_xlink","parse_xlmeta","XLMLFormatMap","attregexg2","attregex2","xlml_parsexmltag","words","xlml_parsexmltagobj","xlml_format","xlml_set_custprop","oval","safe_format_xlml","process_style_xlml","stag","Interior","I","Pattern","parse_xlml_data","csty","sid","StyleID","interiors","Parent","UTC","Formula","ArrayRange","xlml_prefix_dname","xlml_clean_comment","parse_xlml_xml","opening","ishtml","_o","html_to_workbook","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","wsprops","raw_Rn3","HRef","HRefScreenTip","MergeAcross","MergeDown","cma","cmd","AutoFitHeight","Height","Format","ssfidx","Width","_col","Span","_NamedRange","_DefinedName","RefersTo","AutoFilter","Range","parse_fods","Margin","pagemargins","Top","Left","Right","Bottom","bookSheets","bookProps","parse_xlml","fix_read_opts","write_props_xlml","write_wb_xlml","write_sty_xlml","write_name_xlml","write_names_xlml","write_ws_xlml_names","write_ws_xlml_wsopts","objects","scenarios","selectLockedCells","selectUnlockedCells","write_ws_xlml_comment","write_ws_xlml_cell","attr","mi","_v","write_ws_xlml_row","write_ws_xlml_table","skip","write_ws_xlml","write_xlml","parse_compobj","AnsiUserType","AnsiClipboardFormat","Reserved1","UnicodeClipboardFormat","Reserved2","CONTINUE_RT","slurp","RecordType","nextrt","XLSRecordEnum","ll","safe_format_xf","make_cell","parse_workbook","lastcell","cmnt","rngC","rngR","temp_val","country","Directory","last_formula","cur_sheet","Preamble","last_cell","XFs","palette","get_rgb","process_cell_style","xfd","addcell","file_depth","afi","rrtabid","lastuser","winlocked","wtf","last_lbl","last_RT","BIFF2Fmt","BIFF2FmtTable","FilterDatabases","seen_codepage","Date1904","WriteProtect","cpval","CalcRefMode","FullCalc","ExternCount","tmpri","fakebs8","_fr","_fc","_fe","_arraystart","_j","_ixfe","b4idx","b2idx","TxO","ImData","noteobj","Encryption","Metadata","Country","PSCLSID","SI","DSI","UDI","parse_xls_props","DocSummary","Summary","write_xls_props","Keys","DSEntries","SEntries","CEntries","DocSummaryRE","SummaryRE","CEntries2","parse_xlscfb","CompObj","WorkbookP","bookVBA","bookFiles","write_xlscfb","wbpath","write_biff_buf","write_biff_continue","write_BIFF2BERR","write_BIFF2LABEL","write_ws_biff2_cell","write_ws_biff2","write_biff2_buf","write_FONTS_biff8","write_FMTS_biff8","write_FEAT","write_CELLXFS_biff8","write_ws_biff8_hlinks","HL","write_ws_cols_biff8","write_ws_biff8_cell","write_ws_biff8","_WB","_sheet","MAX_ROWS","write_biff8_global","_sheets","_wb","blen","write_biff8_buf","fix_write_opts","html_to_sheet","mtch2","hd","midx","colspan","rowspan","_t","make_html_row","editable","HTML_BEGIN","HTML_END","book_new","make_html_preamble","sheet_to_html","sheet_add_dom","tagName","or_R","or_C","is_dom_element_hidden","elts","hasAttribute","getAttribute","innerHTML","Aelts","getElementsByTagName","Aelti","parse_dom_table","table_to_book","element","get_computed_style","get_get_computed_style_function","getPropertyValue","ownerDocument","defaultView","getComputedStyle","parse_text_p","fixed","parse_ods_styles","_nfm","number_format_map","NFtag","tNF","etpos","parse_content_xml","nfidx","sheetag","rowtag","textptag","ctag","textp","textpidx","textR","row_ol","mrange","mR","mC","rowpeat","colpeat","atag","_Ref","creator","creatoridx","isstub","intable","baddate","rptR","rpt","xlmlidx","styletag","nrange","ptp","parse_ods","Styles","write_styles_ods","master_styles","write_number_format_ods","nopts","has_time","np","write_names_ods","scoped","odsref","write_content_ods","write_text_p","null_cell_xml","covered_cell_xml","write_ws","nfs","ods","ROWS","_Fref","text_p","_tgt","write_automatic_styles_ods","cidx","colobj","nfi","fods","write_ods","u8_to_dataview","array","DataView","buffer","byteOffset","u8str","u8","stru8","u8concat","u8a","popcnt","readDecimal128LE","exp","mantissa","writeDecimal128LE","parse_varint49","ptr","varint","write_varint49","parse_packed_varints","write_packed_varints","nums","varint_to_i32","i32","parse_shallow","write_shallow","proto","mappa","parse_iwa_file","_a","messages","merge","write_iwa_file","ias","ia","midata","aipayload","mid","parse_snappy_chunk","chunks","clen","u8i","decompress_iwa_file","compress_iwa_file","frame","numbers_lut_new","rsst","ofmt","nfmt","numbers_format_cell","_b","_c","ver","dur","dstyle","dmin","dmax","autodur","dstr","zstr","parse_old_storage","lut","dv","getUint32","zidx","ieee","doff","getFloat64","parse_new_storage","d128","write_new_storage","setFloat64","setUint32","write_old_storage","parse_cell_storage","parse_TSP_Reference","pb","write_TSP_Reference","numbers_add_oref","iwa","orefs","orefidx","numbers_del_oref","parse_TST_TableDataList","le","rtp","rtpref","mtype","tswpsa","parse_TST_TileRowInfo","_e","_g","_h","_i","_k","_m","used_storage_u8","used_storage","wide_offsets","used_storage_offsets","getUint16","parse_TST_Tile","nrows","reduce","acc","parse_TST_TableModelArchive","dws","store","tile","tl","ref2","mtype2","_tile","pi","parse_TST_TableInfoArchive","tableref","parse_TN_SheetArchive","shapeoffs","parse_TN_DocumentArchive","sheetoffs","root2","parse_numbers_iwa","indices","packets","packet","docroot","iwam","write_TST_TileRowInfo","wide","tri","new_7","new_4","last_offset","cell_storage","_dv","_last_offset","_cell_storage","celload","_celload","setUint16","write_iwam","get_unique_msgid","dep","dependents","build_numbers_deps","deps","mess","write_numbers_iwa","numbers","numbers_iwa_find","sheetrefs","numbers_add_ws","write_numbers_ws","numbers_iwa_doit","ainfo","sheetref","newsheetref","remap","arch","doc","tiaref","sheetroot","sa","drawables","tia","loc2","mlist","parentidx","findIndex","mm","parent","tmaref","tiaroot","da","dap","oldtmaref","tma","tmaroot","uuid","new_uuid","padStart","srrta","hsoa","hsa","hseadata","hsea","_a2","oldref","newref","newloc","_a3","_b2","row_headers","tspref","tiles","tst","oldtileref","newtileref","oldtile","wsname","sheetidx","rootref","write_numbers_tma","USE_WIDE_ROWS","tmafile","trunc","row_header_ref","rowhead","_x","base_bucket","R2","_bucket","col_header_ref","colhead","rbtree","tilestore","tstride","tileref","save_token","mlst","ntiles","newtileid","tiledata","tilerow","newtile","tilecontent","mergeid","sstref","sstroot","sstdata","fix_opts_func","get_sheet_type","safe_parse_wbrels","wbrels","safe_parse_sheet","relsPath","sheetRels","stype","dfile","drelsp","draw","chartp","crelsp","tcomments","strip_front_slash","_zip","index_zip","Bun","readSync","binname","dir","link","propdata","bookDeps","wbsheets","wbext","wbrelsi","wbrelsfile","nmode","wsloop","snjseen","snj","Deps","bin","parse_xlsxcfb","dsm","seds","einfo","decrypt_agile","decrypt_std76","write_zip_xlsb","foo","vbafmt","_sn","wsrels","_type","need_vml","rId1","write_zip_xlsx","needtc","read_cfb","read_zip","read_plaintext","main","read_plaintext_raw","read_utf16","bstrify","read_prn","ab","vu","write_cfb_ctr","write_zip_type","write_zip_denouement","write_zip_typeXLSX","oopts","ftype","generate","encrypt_agile","write_cfb_type","write_string_type","bom","write_stxt_type","write_binary_type","writeSyncXLSX","writeSync","sheet_to_txt","sheet_to_csv","resolve_book_type","_BT","writeFileSyncXLSX","writeFileAsync","_cb","Function","make_json_row","defval","isempty","defineProperty","enumerable","__rowNum__","rawNumbers","outi","counter","header_cnt","skipHidden","blankrows","qreg","make_csv_row","txt","datarow","forceQuotes","endregex","strip","sheet_to_formulae","cmds","sheet_add_json","js","skipHeader","ROW","JS","json_to_sheet","ws_get_cell_stub","RC","wb_sheet_idx","sh","roll","book_set_sheet_visibility","vis","cell_set_number_format","cell_set_hyperlink","cell_set_internal_link","cell_add_comment","sheet_set_array_formula","dynamic","rngstr","wsr","_Readable","table_to_sheet","sheet_to_row_object_array","sheet_get_cell","SHEET_VISIBLE","SHEET_HIDDEN","SHEET_VERY_HIDDEN","set_readable","write_csv_stream","stream","BOM","_read","write_html_stream","write_json_stream","objectMode","__stream","to_json","to_html","to_csv","readFile","writeXLSX","writeFileXLSX","GF","p1","p2","coeff","mod","divident","divisor","generateECPolynomial","degree","poly","isValid","Utils","KanjiData","toSJIS","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","getBlocksCount","errorCorrectionLevel","getTotalCodewordsCount","global","lengthOfArrayLike","toOffset","toIndexedObject","fails","Int8Array","Int8ArrayPrototype","$set","WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS","Uint8ClampedArray","TO_OBJECT_BUG","NATIVE_ARRAY_BUFFER_VIEWS","arrayLike","src","getColorAttrib","attrib","alpha","svgCmd","qrToPath","moveBy","newRow","lineLength","render","qrData","getOptions","modules","qrcodesize","bg","light","dark","viewBox","svgTag","clearCanvas","ctx","canvas","clearRect","getCanvasElement","canvasEl","getContext","getImageWidth","image","createImageData","qrToImageData","putImageData","renderToDataURL","rendererOpts","toDataURL","quality","hex2rgba","hexCode","hexValue","scale","getScale","qrSize","imgData","qr","symbolSize","scaledMargin","posDst","pxColor","iSrc","jSrc","_self","staticClass","attrs","_vm","dataUrl","require","staticRenderFns","__rest","getOwnPropertySymbols","propertyIsEnumerable","LEVELS","MASK_PATTERNS","MODES","TYPES","MAX_QR_VERSION","validator","includes","maskPattern","toSJISFunc","every","required","emit","dataUrlRef","rest","assign","renderOptions","then","catch","err","immediate","components","qrcode","methods","onDataUrlChange","component","BitMatrix","reservedBit","reserved","xor","isReserved","point","second","Promise","EXP_TABLE","LOG_TABLE","Patterns","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","PenaltyScores","N1","N2","N3","N4","getMaskAt","mask","getPenaltyN1","points","sameCountCol","sameCountRow","lastCol","lastRow","getPenaltyN2","getPenaltyN3","bitsCol","bitsRow","getPenaltyN4","darkCount","modulesCount","applyMask","pattern","getBestMask","setupFormatFunc","numPatterns","bestPattern","lowerPenalty","penalty","fromString","string","lcStr","bit","defaultValue","BitBuffer","bufIndex","putBit","getLengthInBits","toSJISFunction","CODEWORDS_COUNT","getSymbolSize","getSymbolTotalCodewords","getBCHDigit","digit","setToSJISFunction","isKanjiModeEnabled","Polynomial","ReedSolomonEncoder","genPoly","initialize","paddedData","remainder","buff","toIntegerOrInfinity","relativeIndex","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","FINDER_PATTERN_SIZE","getPositions","G15","G15_MASK","G15_BCH","getEncodedBits","$findLast","findLast","ALPHA_NUM_CHARS","AlphanumericData","IndexedObject","toObject","createMethod","TYPE","IS_FIND_LAST_INDEX","$this","callbackfn","self","boundFunction","AlignmentPattern","FinderPattern","MaskPattern","ECCode","Version","FormatInfo","Segments","setupFinderPattern","matrix","setupTimingPattern","setupAlignmentPattern","setupVersionInfo","setupFormatInfo","setupData","inc","bitIndex","byteIndex","createData","segments","getCharCountIndicator","totalCodewords","ecTotalCodewords","dataTotalCodewordsBits","remainingByte","createCodewords","dataTotalCodewords","ecTotalBlocks","blocksInGroup2","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","dcData","ecData","maxDataSize","dataSize","createSymbol","fromArray","estimatedVersion","rawSegments","rawSplit","getBestVersionForData","bestVersion","dataBits","moduleCount","base64","ieee754","typedArraySupport","__proto__","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","arg","encodingOrOffset","TypeError","fromArrayBuffer","fromObject","assertSize","checked","isEncoding","actual","fromArrayLike","isnan","SlowBuffer","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","decodeCodePointsArray","INSPECT_MAX_BYTES","poolSize","_augment","Symbol","species","configurable","allocUnsafeSlow","_isBuffer","compare","list","swap16","swap32","swap64","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","toJSON","_arr","MAX_ARGUMENTS_LENGTH","codePoints","toHex","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleBE","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","base64clean","stringtrim","units","leadSurrogate","byteArray","hi","lo","VersionCheck","Regex","ccBits","MIXED","getBestModeForData","dataStr","NumericData","getStringByteLength","unescape","encodeURIComponent","getSegments","regex","getSegmentsFromString","numSegs","alphaNumSegs","byteSegs","kanjiSegs","segs","s1","s2","getSegmentBitsLength","mergeSegments","curr","prevSeg","buildNodes","seg","buildGraph","prevNodeIds","nodeGroup","currentNodeIds","lastCount","prevNodeId","buildSingleSegment","modesHint","bestMode","optimizedSegs","G18","G18_BCH","getBestVersionForDataLength","currentVersion","getCapacity","getReservedBitsCount","getTotalBitsFromDataArray","totalBits","reservedBits","getBestVersionForMixedData","usableBits","ecl","canPromise","QRCode","CanvasRenderer","SvgRenderer","renderCanvas","renderFunc","argsNum","isLastArgCb","resolve","reject","toCanvas","getRowColCoords","posCount","intervals","positions","coords","posLength","group","remainingNum","hasOwn","isCallable","sharedKey","CORRECT_PROTOTYPE_GETTER","IE_PROTO","$Object","ObjectPrototype","getPrototypeOf","object","constructor","chartData","noop","uid","isNullOrUndef","isObject","isNumberFinite","finiteOrDefault","valueOrDefault","toPercentage","dimension","endsWith","toDimension","callback","thisArg","each","loopable","_elementsEqual","a0","ilen","v0","datasetIndex","clone$1","source","klen","isValidKey","_merger","tval","sval","sources","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","resolver","_getKeyResolver","_splitKey","part","_capitalize","defined","isFunction","setsEqual","_isClickEvent","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","niceNum","roundedRange","almostEquals","niceRange","fraction","niceFraction","_factorize","sqrt","isNumber","epsilon","almostWhole","rounded","_setMinAndMaxByKey","property","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","cmp","_lookupByKey","_rlookupByKey","_filterBetween","values","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","unlistenArrayEvents","stub","_arrayUnique","items","Set","add","requestAnimFrame","window","requestAnimationFrame","throttled","updateFn","updateArgs","ticking","debounce","delay","timeout","clearTimeout","_toLeftRightCenter","_alignStartEnd","_textX","rtl","check","_getStartAndCountOfVisiblePoints","animationsDisabled","pointCount","_sorted","iScale","_parsed","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInBounce","easeOutBounce","easeInOutBounce","lim","p2b","n2b","b2n","n2p","map$1","E","isShort","hexParse","hexString","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","hueValue","rgb2hsl","calln","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","rotate","deg","hslString","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","unpack","unpacked","tkeys","ok","nk","nameParse","transparent","RGB_RE","rgbParse","rgbString","interpolate","rgb1","rgb2","modHSL","ratio","clone","functionParse","Color","_rgb","_valid","weight","w2","w1","index_esm","isPatternOrGradient","getHoverColor","saturate","darken","overrides","getScope$1","scope","Defaults","_descriptors","animation","backgroundColor","borderColor","datasets","devicePixelRatio","context","chart","platform","getDevicePixelRatio","elements","events","lineHeight","hover","hoverBackgroundColor","hoverBorderColor","hoverColor","indexAxis","interaction","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scales","showLine","drawActiveElementsOnTop","describe","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","local","_scriptable","startsWith","_indexable","_fallback","toFontString","_measureText","longest","textWidth","measureText","_longestText","arrayOfThings","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","resetTransform","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","borderWidth","stroke","_isPointInArea","clipArea","clip","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","strokeWidth","strokeColor","setRenderOpts","strokeStyle","lineWidth","strokeText","maxWidth","fillText","decorateText","translation","fillStyle","textAlign","textBaseline","strikethrough","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","objProps","toTRBL","toTRBLCorners","toPadding","toFont","fallback","inputs","info","cacheable","_addGrace","minmax","grace","beginAtZero","change","keepZero","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","override","Proxy","_keys","_cached","_resolveWithPrefixes","Reflect","getOwnPropertyDescriptor","getKeysFromAllScopes","_storage","_attachContext","proxy","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","_resolveWithContext","allKeys","ownKeys","scriptable","indexable","_allKeys","isScriptable","isIndexable","readKey","prefix","needsSubResolver","descriptors","_resolveScriptable","_resolveArray","delete","createSubResolver","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","EPSILON","getPoint","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","current","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","spanGaps","cubicInterpolationMode","prev","tension","_isDomSupported","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getStyle","el","getPositionedStyle","suffix","useOffsetPos","shadowRoot","getCanvasPosition","touches","offsetX","offsetY","box","getBoundingClientRect","clientX","clientY","getRelativePosition","evt","borderBox","boxSizing","paddings","borders","getContainerSize","maxHeight","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","addEventListener","removeEventListener","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","getNumberFormat","locale","cacheKey","formatter","Intl","NumberFormat","formatNumber","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","normalize","normalizeSegment","getSegment","segment","bounds","startBound","endBound","_boundSegment","prevValue","inside","subStart","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","findStartAndEnd","solidSegments","stop","_computeSegments","segmentOptions","_loop","splitByStyles","completeLoop","_fullLoop","doSplitByStyles","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","p0","p0DataIndex","p1DataIndex","styleChanged","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","_request","_charts","_running","_lastDate","anims","callbacks","numSteps","duration","initial","currentStep","_update","_refresh","running","_active","_total","tick","_notify","complete","progress","event","_getAnims","_duration","cancel","animator","interpolators","to","factor","c0","mix","cfg","currentValue","_fn","_easing","easing","_start","_target","_prop","_from","_to","_promises","elapsed","remain","promises","rej","resolved","colors","properties","active","resize","show","animations","visible","hide","config","_properties","configure","animatedProps","getOwnPropertyNames","option","newOptions","resolveTargetOptions","_createAnimations","$shared","awaitAll","$animations","_animateOptions","update","anim","wait","all","scaleClip","allowedOverflow","defaultClip","toClip","disabled","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","dsIndex","singleMode","otherValue","convertObjectDataToArray","adata","isStacked","stacked","getStackKey","indexScale","valueScale","NEGATIVE_INFINITY","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iAxis","vAxis","itemStacks","_top","_bottom","getFirstScaleId","createDatasetContext","dataset","createDataContext","dataIndex","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","createStack","canStack","_stacked","_ctx","_cachedDataOpts","getMeta","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","linkScales","addElements","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","isExtensible","_dataCheck","datasetElementType","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","parsedValue","otherScale","_getOtherScale","otherMin","otherMax","_skip","updateRangeFromParsed","getParsed","label","getLabelForValue","_clip","getMaxOverflow","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","_resolveElementOptions","dataElementType","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","transition","datasetAnimationScopeKeys","sharedOptions","_animationsDisabled","firstOpts","previouslySharedOptions","getSharedOptions","includeOptions","updateSharedOptions","_resolveAnimations","_setStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_dataChanges","_sync","newCount","getAllScaleValues","_cache","$bar","visibleMetas","getAllParsedValues","computeMinSampleSize","_length","updateMinAndPrev","ticks","getPixelForTick","computeFitCategoryTraits","ruler","stackCount","thickness","barThickness","categoryPercentage","barPercentage","chunk","pixels","computeFlexCategoryTraits","percent","parseFloatBar","startValue","endValue","barStart","barEnd","_custom","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","isHorizontal","borderProps","setBorderSkipped","edge","borderSkipped","enableBorderRadius","parseEdge","startEnd","setInflateAmount","inflateAmount","iAxisKey","vAxisKey","super","bars","reset","getBasePixel","_getRuler","_getSharedOptions","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","updateElement","grouped","skipNull","_getStacks","_startPixel","_endPixel","_getStackCount","baseValue","minBarLength","floating","getDataVisibility","startPixel","getPixelForDecimal","endPixel","halfGrid","getLineWidthForValue","maxBarThickness","stackIndex","_getStackIndex","rects","_index_","grid","_value_","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","innerRadius","outerRadius","getter","isDatasetVisible","_getRotation","_getCircumference","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","_getRotationExtents","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","_circumference","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","_dataset","_decimated","animated","maxGapLength","directUpdate","prevParsed","nullData","lastPoint","updateControlPoints","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","pointPosition","getPointPositionForValue","useFinalPosition","getProps","final","defaultRoutes","formatters","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","Ticks","autoSkip","tickOpts","ticksLimit","maxTicksLimit","determineMaxTicks","majorIndices","major","enabled","getMajorIndices","numMajorIndices","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","tickLength","_tickSize","maxScale","maxChart","_maxLength","evenMajorSpacing","getEvenSpacing","factors","majorStart","majorEnd","diff","drawBorder","drawOnChartArea","drawTicks","tickWidth","tickColor","title","padding","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","minor","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","reverseAlign","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","titleAlign","position","titleArgs","titleX","titleY","positionAxisID","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_reversePixels","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getMinMax","xLabels","yLabels","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","notifyPlugins","_callHooks","beforeTickToLabelConversion","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","fullSize","generateTickLabels","_computeLabelSizes","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","decimal","getBaseValue","optionTicks","rot","ticksLength","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","backdrop","tickTextAlign","labelPadding","fillRect","_computeGridLineItems","drawLine","setLineDash","lineDashOffset","lastLineWidth","_computeLabelArea","_computeLabelItems","drawBackground","drawGrid","drawTitle","drawLabels","tz","gz","getSortedVisibleDatasetMetas","axisID","fontSize","isPrototypeOf","parentScope","isIChartComponent","register","registerDefaults","itemDefaults","routeDefaults","routes","propertyParts","sourceName","sourceScope","controllers","_typedRegistries","_each","_get","typedRegistry","reg","_getRegistryForType","isForType","_exec","itemReg","registry","camelMethod","getElement","DateAdapter","chartOptions","timestamp","amount","unit","weekday","members","adapters","_date","binarySearch","metaset","lookupMethod","getRange","evaluateInteractionItems","handler","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","isPointInArea","evaluationFunc","inRange","getNearestRadialItems","getNearestCartesianItems","distanceMetric","minDistance","getCenterPoint","pointInArea","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","placed","setLayoutDims","vBoxMaxWidth","hBoxMaxHeight","layout","availableWidth","availableHeight","buildLayoutBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","autoPadding","_layers","layoutItem","minPadding","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","initCanvas","renderHeight","renderWidth","displayWidth","displayHeight","eventListenerOptions","passive","addListener","removeListener","fromNativeEvent","native","nodeListContains","nodeList","contains","createAttachObserver","observer","MutationObserver","trigger","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","ResizeObserver","contentRect","releaseObserver","disconnect","createProxyAndListen","removeAttribute","setAttribute","proxies","$proxies","handlers","attach","detach","isConnected","_detectPlatform","OffscreenCanvas","_init","hook","_createDescriptors","descriptor","plugin","cancelable","_oldCache","_notifyStateChanges","allPlugins","createDescriptors","previousDescriptors","some","localIds","getPlugin","getOpts","pluginOpts","pluginScopeKeys","getIndexAxis","datasetDefaults","datasetOptions","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","axisFromPosition","determineAxis","scaleOptions","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","addIfFound","_config","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","mainScope","resetCache","keyLists","_cachedScopes","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","animationOptions","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","userConfig","initialCanvas","existingChart","chartOptionScopes","updateConfig","acquireContext","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","listen","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","scalesOptions","axisOptions","scaleOpts","updated","isRadial","dposition","dtype","scaleType","scaleClass","init","hasUpdated","addBox","_destroyDatasetMeta","newControllers","_removeUnreferencedMetasets","order","updateIndex","ControllerClass","getController","_updateMetasets","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","invalidate","buildOrUpdateControllers","buildOrUpdateElements","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","removeBox","ensureScalesHaveIDs","buildOrUpdateScales","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","setDatasetVisibility","_updateVisibility","_destroy","remove","_stop","releaseContext","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","isAttached","activeElements","lastActive","notify","replay","hoverOptions","deactivated","activated","updateHoverStyle","eventFilter","_handleEvent","_getActiveElements","getElementsAtEventForMode","invalidatePlugins","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","drawFullCircleBorders","inner","lineJoin","unregister","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","setStyle","lineCap","getLineMethod","stepped","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","useFastPath","_getInterpolationMethod","strokePathWithCache","_path","Path2D","strokePathDirect","segmentMethod","usePath2D","_points","_segments","_pointsUpdated","_interpolate","interpolated","inRange$1","hitRadius","mouseX","mouseY","hoverRadius","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","maxR","enableBorder","boundingRects","skipX","skipY","skipBoth","hasRadius","addNormalRectPath","inflateRect","refRect","addRectPath","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","itemsEqual","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","generateLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","rtlHelper","hitbox","leftForLtr","_draw","defaultColor","fontColor","halfFontSize","cursor","drawLegendBox","lineDash","drawOptions","SQRT2","xPlus","yBoxTop","xBoxLeft","textDirection","setWidth","realX","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","isListened","hoveredItem","_getLegendItemAt","sameItem","onLeave","plugin_legend","_element","_args","adjustHitBoxes","handleEvent","ci","_padding","textSize","fontOpts","_drawArgs","createTitle","titleBlock","plugin_title","WeakMap","positioners","hasValue","tooltipPosition","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","getLabelAndValue","getTooltipSize","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","bodyLineHeight","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","caretSize","caretPadding","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","beforeTitle","afterTitle","bodyItems","beforeLabel","afterLabel","beforeFooter","afterFooter","itemSort","labelColor","labelPointStyle","labelTextColor","_createItems","getTitle","getBeforeBody","getBody","getAfterBody","getFooter","positionAndSize","backgroundPoint","external","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","bodyAlign","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","bodyColor","_drawColorBox","footerAlign","footerColor","tooltipSize","drawCaret","quadraticCurveTo","animX","animY","_updateAnimationTarget","hasTooltipContent","globalAlpha","drawBody","drawFooter","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","_willRender","labelCount","addIfString","addedLabels","findOrAddLabel","_startValue","_valueRange","_addedLabels","added","getDecimalForPixel","generateTicks$1","generationOptions","dataRange","MIN_SPACING","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","_endValue","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","stepSize","computeTickLimit","getTickLimit","numericGeneratorOptions","_maxDigits","handleTickRangeOptions","isMajor","tickVal","generateTicks","endExp","endSignificand","significand","lastTick","_zero","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","hLimits","vLimits","updateLimits","setCenterPoint","_pointLabelItems","buildPointLabelItems","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabels","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","logarithmic","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","distanceFromCenter","animate","INTERVALS","millisecond","common","steps","minute","hour","day","week","month","quarter","year","UNITS","adapter","_adapter","parser","isoWeekday","_parseOpts","startOf","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","timestamps","setMajorTicks","majorUnit","ticksFromTimestamps","_unit","_majorUnit","_offsets","_normalized","displayFormats","normalized","_applyBounds","_getLabelBounds","endOf","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","minorFormat","majorFormat","_tickFormatFunction","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","_getLabelSize","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","ChartEmits","chartCreate","createChartFunction","ChartRendered","chartUpdate","ChartUpdated","chartDestroy","destroy","ChartDestroyed","getChartData","datasetIdKey","nextData","setChartDatasets","oldData","newData","addedDatasets","nextDataset","currentDataset","setChartLabels","LabelsUpdated","setChartOptions","compareData","newDatasetLabels","oldDatasetLabels","templateError","chartUpdateError","generateChart","chartId","chartType","chartController","default","cssClasses","renderChart","canvasEl2DContext","chartDataHandler","newValue","oldValue","isEqualLabelsAndDatasetsLength","updateChart","chartOptionsHandler","deep","expose","class","Bar","Doughnut","ChartJS","Legend","BarElement","CategoryScale","ArcElement","LinearScale","NAME","Constructor","Prototype","NATIVE_ARRAY_BUFFER","DESCRIPTORS","classof","tryToString","createNonEnumerableProperty","defineBuiltIn","setPrototypeOf","wellKnownSymbol","InternalStateModule","enforceInternalState","enforce","getInternalState","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","TO_STRING_TAG","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","opera","TYPED_ARRAY_TAG_REQUIRED","TypedArrayConstructorsList","Int16Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","klass","getTypedArrayConstructor","isTypedArray","aTypedArrayConstructor","KEY","forced","ARRAY","TypedArrayConstructor","error2","exportTypedArrayStaticMethod"],"mappings":"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EAAG,WAAYpa,EAAG4mC,IACvC,WAAmB,IAIvBW,GAAc,CACV,EAAe,KACf,EAAe,KACf,EAAe,GACf,EAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,MAAe,MAInBC,GAAiB,CACpB,KACA,QACA,aACA,WACA,YACA,iBACA,eACA,WACA,SACA,WACA,cACA,kBACA,gBACA,YACA,UACA,YACA,eACA,UACA,YAGD,SAASC,GAAOllC,GAA6D,OAAOA,EAAI+F,KAAI,SAASxC,GAAK,MAAO,CAAEA,GAAG,GAAI,IAAKA,GAAG,EAAG,IAAM,IAAFA,MAIzI,IAAI4hC,GAAwBD,GAAO,CAElC,EACA,SACA,SACA,MACA,IACA,SACA,SACA,MAGA,EACA,SACA,SACA,MACA,IACA,SACA,SACA,MAEA,QACA,MACA,IACA,QACA,QACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,QACA,SACA,MACA,SAEA,IACA,SACA,SACA,MACA,QACA,QACA,MACA,IACA,MACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,QACA,QACA,SACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,QACA,SACA,SACA,QACA,QAGA,EACA,SACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAEG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EA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,cAAexB,EAAEkgD,GACpC,IAAe,CAAE1+C,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAAe,CAAEA,EAAE,MACnB,IAA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","file":"js/chunk-3c867596.5ed7b0b8.js","sourcesContent":["const encodeUtf8 = require('encode-utf8')\nconst Mode = require('./mode')\n\nfunction ByteData (data) {\n this.mode = Mode.BYTE\n if (typeof (data) === 'string') {\n data = encodeUtf8(data)\n }\n this.data = new Uint8Array(data)\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n for (let i = 0, l = this.data.length; i < l; i++) {\n bitBuffer.put(this.data[i], 8)\n }\n}\n\nmodule.exports = ByteData\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n return TEST_ALPHANUMERIC.test(str)\n}\n","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin \n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n single_source_shortest_paths: function(graph, s, d) {\n // Predecessor map for each node that has been encountered.\n // node ID => predecessor node ID\n var predecessors = {};\n\n // Costs of shortest paths from s to all nodes encountered.\n // node ID => cost\n var costs = {};\n costs[s] = 0;\n\n // Costs of shortest paths from s to all nodes encountered; differs from\n // `costs` in that it provides easy access to the node that currently has\n // the known shortest path from s.\n // XXX: Do we actually need both `costs` and `open`?\n var open = dijkstra.PriorityQueue.make();\n open.push(s, 0);\n\n var closest,\n u, v,\n cost_of_s_to_u,\n adjacent_nodes,\n cost_of_e,\n cost_of_s_to_u_plus_cost_of_e,\n cost_of_s_to_v,\n first_visit;\n while (!open.empty()) {\n // In the nodes remaining in graph that have a known cost from s,\n // find the node, u, that currently has the shortest path from s.\n closest = open.pop();\n u = closest.value;\n cost_of_s_to_u = closest.cost;\n\n // Get nodes adjacent to u...\n adjacent_nodes = graph[u] || {};\n\n // ...and explore the edges that connect u to those nodes, updating\n // the cost of the shortest paths to any or all of those nodes as\n // necessary. v is the node across the current edge from u.\n for (v in adjacent_nodes) {\n if (adjacent_nodes.hasOwnProperty(v)) {\n // Get the cost of the edge running from u to v.\n cost_of_e = adjacent_nodes[v];\n\n // Cost of s to u plus the cost of u to v across e--this is *a*\n // cost from s to v that may or may not be less than the current\n // known cost to v.\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n // If we haven't visited v yet OR if the current known cost from s to\n // v is greater than the new cost we just found (cost of s to u plus\n // cost of u to v across e), update v's cost in the cost list and\n // update v's predecessor in the predecessor list (it's now u).\n cost_of_s_to_v = costs[v];\n first_visit = (typeof costs[v] === 'undefined');\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\n predecessors[v] = u;\n }\n }\n }\n }\n\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n throw new Error(msg);\n }\n\n return predecessors;\n },\n\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n var nodes = [];\n var u = d;\n var predecessor;\n while (u) {\n nodes.push(u);\n predecessor = predecessors[u];\n u = predecessors[u];\n }\n nodes.reverse();\n return nodes;\n },\n\n find_path: function(graph, s, d) {\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n return dijkstra.extract_shortest_path_from_predecessor_list(\n predecessors, d);\n },\n\n /**\n * A very naive priority queue implementation.\n */\n PriorityQueue: {\n make: function (opts) {\n var T = dijkstra.PriorityQueue,\n t = {},\n key;\n opts = opts || {};\n for (key in T) {\n if (T.hasOwnProperty(key)) {\n t[key] = T[key];\n }\n }\n t.queue = [];\n t.sorter = opts.sorter || T.default_sorter;\n return t;\n },\n\n default_sorter: function (a, b) {\n return a.cost - b.cost;\n },\n\n /**\n * Add a new item to the queue and ensure the highest priority element\n * is at the front of the queue.\n */\n push: function (value, cost) {\n var item = {value: value, cost: cost};\n this.queue.push(item);\n this.queue.sort(this.sorter);\n },\n\n /**\n * Return the highest priority element in the queue.\n */\n pop: function () {\n return this.queue.shift();\n },\n\n empty: function () {\n return this.queue.length === 0;\n }\n }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n module.exports = dijkstra;\n}\n","var toPositiveInteger = require('../internals/to-positive-integer');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw $RangeError('Wrong offset');\n return offset;\n};\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findLastIndex = require('../internals/array-iteration-from-last').findLastIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findLastIndex` method\n// https://github.com/tc39/proposal-array-find-from-last\nexportTypedArrayMethod('findLastIndex', function findLastIndex(predicate /* , thisArg */) {\n return $findLastIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\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","/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported XLSX */\n/*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */\nvar XLSX = {};\nXLSX.version = '0.19.0';\nvar current_codepage = 1200, current_ansi = 1252;\n/*:: declare var cptable:any; */\n/*global cptable:true, window */\nvar $cptable;\n\nvar VALID_ANSI = [ 874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 10000 ];\n/* ECMA-376 Part I 18.4.1 charset to codepage mapping */\nvar CS2CP = ({\n\t/*::[*/0/*::]*/: 1252, /* ANSI */\n\t/*::[*/1/*::]*/: 65001, /* DEFAULT */\n\t/*::[*/2/*::]*/: 65001, /* SYMBOL */\n\t/*::[*/77/*::]*/: 10000, /* MAC */\n\t/*::[*/128/*::]*/: 932, /* SHIFTJIS */\n\t/*::[*/129/*::]*/: 949, /* HANGUL */\n\t/*::[*/130/*::]*/: 1361, /* JOHAB */\n\t/*::[*/134/*::]*/: 936, /* GB2312 */\n\t/*::[*/136/*::]*/: 950, /* CHINESEBIG5 */\n\t/*::[*/161/*::]*/: 1253, /* GREEK */\n\t/*::[*/162/*::]*/: 1254, /* TURKISH */\n\t/*::[*/163/*::]*/: 1258, /* VIETNAMESE */\n\t/*::[*/177/*::]*/: 1255, /* HEBREW */\n\t/*::[*/178/*::]*/: 1256, /* ARABIC */\n\t/*::[*/186/*::]*/: 1257, /* BALTIC */\n\t/*::[*/204/*::]*/: 1251, /* RUSSIAN */\n\t/*::[*/222/*::]*/: 874, /* THAI */\n\t/*::[*/238/*::]*/: 1250, /* EASTEUROPE */\n\t/*::[*/255/*::]*/: 1252, /* OEM */\n\t/*::[*/69/*::]*/: 6969 /* MISC */\n}/*:any*/);\n\nvar set_ansi = function(cp/*:number*/) { if(VALID_ANSI.indexOf(cp) == -1) return; current_ansi = CS2CP[0] = cp; };\nfunction reset_ansi() { set_ansi(1252); }\n\nvar set_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\nfunction reset_cp() { set_cp(1200); reset_ansi(); }\n\nfunction char_codes(data/*:string*/)/*:Array*/ { var o/*:Array*/ = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\n\nfunction utf16leread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8));\n\treturn o.join(\"\");\n}\nfunction utf16beread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8));\n\treturn o.join(\"\");\n}\n\nvar debom = function(data/*:string*/)/*:string*/ {\n\tvar c1 = data.charCodeAt(0), c2 = data.charCodeAt(1);\n\tif(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n\tif(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n\tif(c1 == 0xFEFF) return data.slice(1);\n\treturn data;\n};\n\nvar _getchar = function _gc1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\nvar _getansi = function _ga1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\n\nfunction set_cptable(cptable) {\n\t$cptable = cptable;\n\tset_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\n\tdebom = function(data/*:string*/) {\n\t\tif(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return $cptable.utils.decode(1200, char_codes(data.slice(2))); }\n\t\treturn data;\n\t};\n\t_getchar = function _gc2(x/*:number*/)/*:string*/ {\n\t\tif(current_codepage === 1200) return String.fromCharCode(x);\n\t\treturn $cptable.utils.decode(current_codepage, [x&255,x>>8])[0];\n\t};\n\t_getansi = function _ga2(x/*:number*/)/*:string*/ {\n\t\treturn $cptable.utils.decode(current_ansi, [x])[0];\n\t};\n\tcpdoit();\n}\nvar DENSE = null;\nvar DIF_XL = true;\nvar Base64_map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nfunction Base64_encode(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n for (var i = 0; i < input.length; ) {\n c1 = input.charCodeAt(i++);\n e1 = c1 >> 2;\n c2 = input.charCodeAt(i++);\n e2 = (c1 & 3) << 4 | c2 >> 4;\n c3 = input.charCodeAt(i++);\n e3 = (c2 & 15) << 2 | c3 >> 6;\n e4 = c3 & 63;\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n }\n return o;\n}\nfunction Base64_encode_pass(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n for (var i = 0; i < input.length; ) {\n c1 = input.charCodeAt(i++);\n if (c1 > 255)\n c1 = 95;\n e1 = c1 >> 2;\n c2 = input.charCodeAt(i++);\n if (c2 > 255)\n c2 = 95;\n e2 = (c1 & 3) << 4 | c2 >> 4;\n c3 = input.charCodeAt(i++);\n if (c3 > 255)\n c3 = 95;\n e3 = (c2 & 15) << 2 | c3 >> 6;\n e4 = c3 & 63;\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n }\n return o;\n}\nfunction Base64_decode(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n input = input.replace(/^data:([^\\/]+\\/[^\\/]+)?;base64\\,/, \"\").replace(/[^\\w\\+\\/\\=]/g, \"\");\n for (var i = 0; i < input.length; ) {\n e1 = Base64_map.indexOf(input.charAt(i++));\n e2 = Base64_map.indexOf(input.charAt(i++));\n c1 = e1 << 2 | e2 >> 4;\n o += String.fromCharCode(c1);\n e3 = Base64_map.indexOf(input.charAt(i++));\n c2 = (e2 & 15) << 4 | e3 >> 2;\n if (e3 !== 64) {\n o += String.fromCharCode(c2);\n }\n e4 = Base64_map.indexOf(input.charAt(i++));\n c3 = (e3 & 3) << 6 | e4;\n if (e4 !== 64) {\n o += String.fromCharCode(c3);\n }\n }\n return o;\n}\nvar has_buf = /*#__PURE__*/(function() { return typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node; })();\n\nvar Buffer_from = /*#__PURE__*/(function() {\n\tif(typeof Buffer !== 'undefined') {\n\t\tvar nbfs = !Buffer.from;\n\t\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\t\treturn nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t}\n\treturn function() {};\n})();\nvar buf_utf16le = /*#__PURE__*/(function() {\n\tif(typeof Buffer === 'undefined') return false;\n\tvar x = Buffer_from([65,0]);\n\tif(!x) return false;\n\tvar o = x.toString(\"utf16le\");\n\treturn o.length == 1;\n})();\n\n\nfunction new_raw_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nvar s2a = function s2a(s/*:string*/)/*:any*/ {\n\tif(has_buf) return Buffer_from(s, \"binary\");\n\treturn s.split(\"\").map(function(x/*:string*/)/*:number*/{ return x.charCodeAt(0) & 0xff; });\n};\n\nfunction s2ab(s/*:string*/)/*:any*/ {\n\tif(typeof ArrayBuffer === 'undefined') return s2a(s);\n\tvar buf = new ArrayBuffer(s.length), view = new Uint8Array(buf);\n\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\treturn buf;\n}\n\nfunction a2s(data/*:any*/)/*:string*/ {\n\tif(Array.isArray(data)) return data.map(function(c) { return String.fromCharCode(c); }).join(\"\");\n\tvar o/*:Array*/ = []; for(var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]); return o.join(\"\");\n}\n\nfunction a2u(data/*:Array*/)/*:Uint8Array*/ {\n\tif(typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n\treturn new Uint8Array(data);\n}\n\nfunction ab2a(data/*:ArrayBuffer|Uint8Array*/)/*:Array*/ {\n\tif(typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n\tif(data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\n\t/*:: if(data instanceof ArrayBuffer) throw new Error(\"unreachable\"); */\n\tvar o = new Array(data.length);\n\tfor(var i = 0; i < data.length; ++i) o[i] = data[i];\n\treturn o;\n}\n\nvar bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(buf) { return Buffer.isBuffer(buf) ? buf : Buffer_from(buf); })); } : function(bufs) {\n\tif(typeof Uint8Array !== \"undefined\") {\n\t\tvar i = 0, maxlen = 0;\n\t\tfor(i = 0; i < bufs.length; ++i) maxlen += bufs[i].length;\n\t\tvar o = new Uint8Array(maxlen);\n\t\tvar len = 0;\n\t\tfor(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {\n\t\t\tlen = bufs[i].length;\n\t\t\tif(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);\n\t\t\telse if(typeof bufs[i] == \"string\") o.set(new Uint8Array(s2a(bufs[i])), maxlen);\n\t\t\telse o.set(new Uint8Array(bufs[i]), maxlen);\n\t\t}\n\t\treturn o;\n\t}\n\treturn [].concat.apply([], bufs.map(function(buf) { return Array.isArray(buf) ? buf : [].slice.call(buf); }));\n};\n\nfunction utf8decode(content/*:string*/) {\n\tvar out = [], widx = 0, L = content.length + 250;\n\tvar o = new_raw_buf(content.length + 255);\n\tfor(var ridx = 0; ridx < content.length; ++ridx) {\n\t\tvar c = content.charCodeAt(ridx);\n\t\tif(c < 0x80) o[widx++] = c;\n\t\telse if(c < 0x800) {\n\t\t\to[widx++] = (192|((c>>6)&31));\n\t\t\to[widx++] = (128|(c&63));\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64;\n\t\t\tvar d = content.charCodeAt(++ridx)&1023;\n\t\t\to[widx++] = (240|((c>>8)&7));\n\t\t\to[widx++] = (128|((c>>2)&63));\n\t\t\to[widx++] = (128|((d>>6)&15)|((c&3)<<4));\n\t\t\to[widx++] = (128|(d&63));\n\t\t} else {\n\t\t\to[widx++] = (224|((c>>12)&15));\n\t\t\to[widx++] = (128|((c>>6)&63));\n\t\t\to[widx++] = (128|(c&63));\n\t\t}\n\t\tif(widx > L) {\n\t\t\tout.push(o.slice(0, widx));\n\t\t\twidx = 0;\n\t\t\to = new_raw_buf(65535);\n\t\t\tL = 65530;\n\t\t}\n\t}\n\tout.push(o.slice(0, widx));\n\treturn bconcat(out);\n}\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/g;\n/*::\ndeclare type Block = any;\ndeclare type BufArray = {\n\tnewblk(sz:number):Block;\n\tnext(sz:number):Block;\n\tend():any;\n\tpush(buf:Block):void;\n};\n\ntype RecordHopperCB = {(d:any, Rn:string, RT:number):?boolean;};\n\ntype EvertType = {[string]:string};\ntype EvertNumType = {[string]:number};\ntype EvertArrType = {[string]:Array};\n\ntype StringConv = {(string):string};\n\n*/\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W041 */\nfunction _strrev(x/*:string*/)/*:string*/ { var o = \"\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\nfunction pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\nfunction rpad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\nfunction pad0r1(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad0r2(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nvar p2_32 = /*#__PURE__*/Math.pow(2,32);\nfunction pad0r(v/*:any*/,d/*:number*/)/*:string*/{if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\n/* yes, in 2022 this is still faster than string compare */\nfunction SSF_isgeneral(s/*:string*/, i/*:?number*/)/*:boolean*/ { i = i || 0; return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\nvar days/*:Array >*/ = [\n\t['Sun', 'Sunday'],\n\t['Mon', 'Monday'],\n\t['Tue', 'Tuesday'],\n\t['Wed', 'Wednesday'],\n\t['Thu', 'Thursday'],\n\t['Fri', 'Friday'],\n\t['Sat', 'Saturday']\n];\nvar months/*:Array >*/ = [\n\t['J', 'Jan', 'January'],\n\t['F', 'Feb', 'February'],\n\t['M', 'Mar', 'March'],\n\t['A', 'Apr', 'April'],\n\t['M', 'May', 'May'],\n\t['J', 'Jun', 'June'],\n\t['J', 'Jul', 'July'],\n\t['A', 'Aug', 'August'],\n\t['S', 'Sep', 'September'],\n\t['O', 'Oct', 'October'],\n\t['N', 'Nov', 'November'],\n\t['D', 'Dec', 'December']\n];\nfunction SSF_init_table(t/*:any*/) {\n\tif(!t) t = {};\n\tt[0]= 'General';\n\tt[1]= '0';\n\tt[2]= '0.00';\n\tt[3]= '#,##0';\n\tt[4]= '#,##0.00';\n\tt[9]= '0%';\n\tt[10]= '0.00%';\n\tt[11]= '0.00E+00';\n\tt[12]= '# ?/?';\n\tt[13]= '# ??/??';\n\tt[14]= 'm/d/yy';\n\tt[15]= 'd-mmm-yy';\n\tt[16]= 'd-mmm';\n\tt[17]= 'mmm-yy';\n\tt[18]= 'h:mm AM/PM';\n\tt[19]= 'h:mm:ss AM/PM';\n\tt[20]= 'h:mm';\n\tt[21]= 'h:mm:ss';\n\tt[22]= 'm/d/yy h:mm';\n\tt[37]= '#,##0 ;(#,##0)';\n\tt[38]= '#,##0 ;[Red](#,##0)';\n\tt[39]= '#,##0.00;(#,##0.00)';\n\tt[40]= '#,##0.00;[Red](#,##0.00)';\n\tt[45]= 'mm:ss';\n\tt[46]= '[h]:mm:ss';\n\tt[47]= 'mmss.0';\n\tt[48]= '##0.0E+0';\n\tt[49]= '@';\n\tt[56]= '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n\treturn t;\n}\n/* repeated to satiate webpack */\nvar table_fmt = {\n\t0: 'General',\n\t1: '0',\n\t2: '0.00',\n\t3: '#,##0',\n\t4: '#,##0.00',\n\t9: '0%',\n\t10: '0.00%',\n\t11: '0.00E+00',\n\t12: '# ?/?',\n\t13: '# ??/??',\n\t14: 'm/d/yy',\n\t15: 'd-mmm-yy',\n\t16: 'd-mmm',\n\t17: 'mmm-yy',\n\t18: 'h:mm AM/PM',\n\t19: 'h:mm:ss AM/PM',\n\t20: 'h:mm',\n\t21: 'h:mm:ss',\n\t22: 'm/d/yy h:mm',\n\t37: '#,##0 ;(#,##0)',\n\t38: '#,##0 ;[Red](#,##0)',\n\t39: '#,##0.00;(#,##0.00)',\n\t40: '#,##0.00;[Red](#,##0.00)',\n\t45: 'mm:ss',\n\t46: '[h]:mm:ss',\n\t47: 'mmss.0',\n\t48: '##0.0E+0',\n\t49: '@',\n\t56: '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"'\n};\n\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\nvar SSF_default_map = {\n\t5: 37, 6: 38, 7: 39, 8: 40, // 5 -> 37 ... 8 -> 40\n\n\t23: 0, 24: 0, 25: 0, 26: 0, // 23 -> 0 ... 26 -> 0\n\n\t27: 14, 28: 14, 29: 14, 30: 14, 31: 14, // 27 -> 14 ... 31 -> 14\n\n\t50: 14, 51: 14, 52: 14, 53: 14, 54: 14, // 50 -> 14 ... 58 -> 14\n\t55: 14, 56: 14, 57: 14, 58: 14,\n\t59: 1, 60: 2, 61: 3, 62: 4, // 59 -> 1 ... 62 -> 4\n\n\t67: 9, 68: 10, // 67 -> 9 ... 68 -> 10\n\t69: 12, 70: 13, 71: 14, // 69 -> 12 ... 71 -> 14\n\t72: 14, 73: 15, 74: 16, 75: 17, // 72 -> 14 ... 75 -> 17\n\t76: 20, 77: 21, 78: 22, // 76 -> 20 ... 78 -> 22\n\t79: 45, 80: 46, 81: 47, // 79 -> 45 ... 81 -> 47\n\t82: 0 // 82 -> 0 ... 65536 -> 0 (omitted)\n};\n\n\n/* These formats technically refer to Accounting formats with no equivalent */\nvar SSF_default_str = {\n\t// 5 -- Currency, 0 decimal, black negative\n\t5: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t63: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\n\t// 6 -- Currency, 0 decimal, red negative\n\t6: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t64: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\n\t// 7 -- Currency, 2 decimal, black negative\n\t7: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t65: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 8 -- Currency, 2 decimal, red negative\n\t8: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t66: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 41 -- Accounting, 0 decimal, No Symbol\n\t41: '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)',\n\n\t// 42 -- Accounting, 0 decimal, $ Symbol\n\t42: '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)',\n\n\t// 43 -- Accounting, 2 decimal, No Symbol\n\t43: '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)',\n\n\t// 44 -- Accounting, 2 decimal, $ Symbol\n\t44: '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)'\n};\n\nfunction SSF_frac(x/*:number*/, D/*:number*/, mixed/*:?boolean*/)/*:Array*/ {\n\tvar sgn = x < 0 ? -1 : 1;\n\tvar B = x * sgn;\n\tvar P_2 = 0, P_1 = 1, P = 0;\n\tvar Q_2 = 1, Q_1 = 0, Q = 0;\n\tvar A = Math.floor(B);\n\twhile(Q_1 < D) {\n\t\tA = Math.floor(B);\n\t\tP = A * P_1 + P_2;\n\t\tQ = A * Q_1 + Q_2;\n\t\tif((B - A) < 0.00000005) break;\n\t\tB = 1 / (B - A);\n\t\tP_2 = P_1; P_1 = P;\n\t\tQ_2 = Q_1; Q_1 = Q;\n\t}\n\tif(Q > D) { if(Q_1 > D) { Q = Q_2; P = P_2; } else { Q = Q_1; P = P_1; } }\n\tif(!mixed) return [0, sgn * P, Q];\n\tvar q = Math.floor(sgn * P/Q);\n\treturn [q, sgn*P - q*Q, Q];\n}\nfunction SSF_parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) {\n\tif(v > 2958465 || v < 0) return null;\n\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\n\tvar dout=[];\n\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\n\tif(Math.abs(out.u) < 1e-6) out.u = 0;\n\tif(opts && opts.date1904) date += 1462;\n\tif(out.u > 0.9999) {\n\t\tout.u = 0;\n\t\tif(++time == 86400) { out.T = time = 0; ++date; ++out.D; }\n\t}\n\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\n\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\n\telse {\n\t\tif(date > 60) --date;\n\t\t/* 1 = Jan 1 1900 in Gregorian */\n\t\tvar d = new Date(1900, 0, 1);\n\t\td.setDate(d.getDate() + date - 1);\n\t\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\n\t\tdow = d.getDay();\n\t\tif(date < 60) dow = (dow + 6) % 7;\n\t\tif(b2) dow = SSF_fix_hijri(d, dout);\n\t}\n\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\n\tout.S = time % 60; time = Math.floor(time / 60);\n\tout.M = time % 60; time = Math.floor(time / 60);\n\tout.H = time;\n\tout.q = dow;\n\treturn out;\n}\nvar SSFbasedate = /*#__PURE__*/new Date(1899, 11, 31, 0, 0, 0);\nvar SSFdnthresh = /*#__PURE__*/SSFbasedate.getTime();\nvar SSFbase1904 = /*#__PURE__*/new Date(1900, 2, 1, 0, 0, 0);\nfunction datenum_local(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = /*#__PURE__*/v.getTime();\n\tif(date1904) epoch -= 1461*24*60*60*1000;\n\telse if(v >= SSFbase1904) epoch += 24*60*60*1000;\n\treturn (epoch - (SSFdnthresh + (/*#__PURE__*/v.getTimezoneOffset() - /*#__PURE__*/SSFbasedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n}\n/* ECMA-376 18.8.30 numFmt*/\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\n/* exponent >= -9 and <= 9 */\nfunction SSF_strip_decimal(o/*:string*/)/*:string*/ {\n\treturn (o.indexOf(\".\") == -1) ? o : o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)$/, \"$1\");\n}\n\n/* General Exponential always shows 2 digits exp and trims the mantissa */\nfunction SSF_normalize_exp(o/*:string*/)/*:string*/ {\n\tif(o.indexOf(\"E\") == -1) return o;\n\treturn o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/,\"$1E\").replace(/(E[+-])(\\d)$/,\"$10$2\");\n}\n\n/* exponent >= -9 and <= 9 */\nfunction SSF_small_exp(v/*:number*/)/*:string*/ {\n\tvar w = (v<0?12:11);\n\tvar o = SSF_strip_decimal(v.toFixed(12)); if(o.length <= w) return o;\n\to = v.toPrecision(10); if(o.length <= w) return o;\n\treturn v.toExponential(5);\n}\n\n/* exponent >= 11 or <= -10 likely exponential */\nfunction SSF_large_exp(v/*:number*/)/*:string*/ {\n\tvar o = SSF_strip_decimal(v.toFixed(11));\n\treturn (o.length > (v<0?12:11) || o === \"0\" || o === \"-0\") ? v.toPrecision(6) : o;\n}\n\nfunction SSF_general_num(v/*:number*/)/*:string*/ {\n\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\n\n\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\n\telse if(Math.abs(V) <= 9) o = SSF_small_exp(v);\n\telse if(V === 10) o = v.toFixed(10).substr(0,12);\n\telse o = SSF_large_exp(v);\n\n\treturn SSF_strip_decimal(SSF_normalize_exp(o.toUpperCase()));\n}\n\n\n/*\n\t\"General\" rules:\n\t- text is passed through (\"@\")\n\t- booleans are rendered as TRUE/FALSE\n\t- \"up to 11 characters\" displayed for numbers\n\t- Default date format (code 14) used for Dates\n\n\tThe longest 32-bit integer text is \"-2147483648\", exactly 11 chars\n\tTODO: technically the display depends on the width of the cell\n*/\nfunction SSF_general(v/*:any*/, opts/*:any*/) {\n\tswitch(typeof v) {\n\t\tcase 'string': return v;\n\t\tcase 'boolean': return v ? \"TRUE\" : \"FALSE\";\n\t\tcase 'number': return (v|0) === v ? v.toString(10) : SSF_general_num(v);\n\t\tcase 'undefined': return \"\";\n\t\tcase 'object':\n\t\t\tif(v == null) return \"\";\n\t\t\tif(v instanceof Date) return SSF_format(14, datenum_local(v, opts && opts.date1904), opts);\n\t}\n\tthrow new Error(\"unsupported value in General format: \" + v);\n}\n\nfunction SSF_fix_hijri(date/*:Date*/, o/*:[number, number, number]*/) {\n /* TODO: properly adjust y/m/d and */\n o[0] -= 581;\n var dow = date.getDay();\n if(date < 60) dow = (dow + 6) % 7;\n return dow;\n}\n//var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\nfunction SSF_write_date(type/*:number*/, fmt/*:string*/, val, ss0/*:?number*/)/*:string*/ {\n\tvar o=\"\", ss=0, tt=0, y = val.y, out, outl = 0;\n\tswitch(type) {\n\t\tcase 98: /* 'b' buddhist year */\n\t\t\ty = val.y + 543;\n\t\t\t/* falls through */\n\t\tcase 121: /* 'y' year */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = y % 100; outl = 2; break;\n\t\t\tdefault: out = y % 10000; outl = 4; break;\n\t\t} break;\n\t\tcase 109: /* 'm' month */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.m; outl = fmt.length; break;\n\t\t\tcase 3: return months[val.m-1][1];\n\t\t\tcase 5: return months[val.m-1][0];\n\t\t\tdefault: return months[val.m-1][2];\n\t\t} break;\n\t\tcase 100: /* 'd' day */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.d; outl = fmt.length; break;\n\t\t\tcase 3: return days[val.q][0];\n\t\t\tdefault: return days[val.q][1];\n\t\t} break;\n\t\tcase 104: /* 'h' 12-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 72: /* 'H' 24-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.H; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 77: /* 'M' minutes */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.M; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad minute format: ' + fmt;\n\t\t} break;\n\t\tcase 115: /* 's' seconds */\n\t\t\tif(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n\t\t\tif(val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\n\t\t\t/*::if(!ss0) ss0 = 0; */\n\t\t\tif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n\t\t\telse tt = ss0 === 1 ? 10 : 1;\n\t\t\tss = Math.round((tt)*(val.S + val.u));\n\t\t\tif(ss >= 60*tt) ss = 0;\n\t\t\tif(fmt === 's') return ss === 0 ? \"0\" : \"\"+ss/tt;\n\t\t\to = pad0(ss,2 + ss0);\n\t\t\tif(fmt === 'ss') return o.substr(0,2);\n\t\t\treturn \".\" + o.substr(2,fmt.length-1);\n\t\tcase 90: /* 'Z' absolute time */\n\t\tswitch(fmt) {\n\t\t\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\n\t\t\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\n\t\t\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;\n\t\t\tdefault: throw 'bad abstime format: ' + fmt;\n\t\t} outl = fmt.length === 3 ? 1 : 2; break;\n\t\tcase 101: /* 'e' era */\n\t\t\tout = y; outl = 1; break;\n\t}\n\tvar outstr = outl > 0 ? pad0(out, outl) : \"\";\n\treturn outstr;\n}\n\n\n/*jshint -W086 */\n/*jshint +W086 */\nfunction commaify(s/*:string*/)/*:string*/ {\n\tvar w = 3;\n\tif(s.length <= w) return s;\n\tvar j = (s.length % w), o = s.substr(0,j);\n\tfor(; j!=s.length; j+=w) o+=(o.length > 0 ? \",\" : \"\") + s.substr(j,w);\n\treturn o;\n}\nvar pct1 = /%/g;\nfunction write_num_pct(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\n\nfunction write_num_cm(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\n\nfunction write_num_exp(fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar o/*:string*/;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(o.indexOf(\"e\") === -1) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\twhile(o.substr(0,2) === \"0.\") {\n\t\t\t\to = o.charAt(0) + o.substr(2,period) + \".\" + o.substr(2+period);\n\t\t\t\to = o.replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");\n\t\t\t}\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\nfunction write_num_f1(r/*:Array*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\tvar den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);\n\tvar myn = (rr - base*den), myd = den;\n\treturn sign + (base === 0 ? \"\" : \"\"+base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \"/\" + r[3] + pad0(myd,r[4].length));\n}\nfunction write_num_f2(r/*:Array*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\treturn sign + (aval === 0 ? \"\" : \"\"+aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\).*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\nfunction hashq(str/*:string*/)/*:string*/ {\n\tvar o = \"\", cc;\n\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\n\t\tcase 35: break;\n\t\tcase 63: o+= \" \"; break;\n\t\tcase 48: o+= \"0\"; break;\n\t\tdefault: o+= String.fromCharCode(cc);\n\t}\n\treturn o;\n}\nfunction rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.pow(10,d); return \"\"+(Math.round(val * dd)/dd); }\nfunction dec(val/*:number*/, d/*:number*/)/*:number*/ {\n\tvar _frac = val - Math.floor(val), dd = Math.pow(10,d);\n\tif (d < ('' + Math.round(_frac * dd)).length) return 0;\n\treturn Math.round(_frac * dd);\n}\nfunction carry(val/*:number*/, d/*:number*/)/*:number*/ {\n\tif (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\nfunction flr(val/*:number*/)/*:string*/ {\n\tif(val < 2147483647 && val > -2147483648) return \"\"+(val >= 0 ? (val|0) : (val-1|0));\n\treturn \"\"+Math.floor(val);\n}\nfunction write_num_flt(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_flt('n', ffmt, val);\n\t\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_flt(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = pad0r(val,0); if(o === \"0\") o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0r(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\to = rnd(val, r[1].length).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1])).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", hashq(/*::(*/r/*::||[\"\"])*/[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval,0));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\"+(Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length),r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri= 0) return write_num_int('n', ffmt, val);\n\t\treturn '(' + write_num_int('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_int(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = (\"\"+val); if(val === 0) o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\to = (\"\"+val).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1]));\n\t\to = o.replace(/\\.(\\d*)$/,function($$, $1) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\t\treturn \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + (\"\"+aval).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\"+aval));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\"+val)) + \".\" + fill('0',r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_int(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri*/ {\n\tvar out/*:Array*/ = [];\n\tvar in_str = false/*, cc*/;\n\tfor(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {\n\t\tcase 34: /* '\"' */\n\t\t\tin_str = !in_str; break;\n\t\tcase 95: case 42: case 92: /* '_' '*' '\\\\' */\n\t\t\t++i; break;\n\t\tcase 59: /* ';' */\n\t\t\tout[out.length] = fmt.substr(j,i-j);\n\t\t\tj = i+1;\n\t}\n\tout[out.length] = fmt.substr(j);\n\tif(in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n\treturn out;\n}\n\nvar SSF_abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\nfunction fmt_is_date(fmt/*:string*/)/*:boolean*/ {\n\tvar i = 0, /*cc = 0,*/ c = \"\", o = \"\";\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': if(SSF_isgeneral(fmt, i)) i+= 6; i++; break;\n\t\t\tcase '\"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;){/*empty*/} ++i; break;\n\t\t\tcase '\\\\': i+=2; break;\n\t\t\tcase '_': i+=2; break;\n\t\t\tcase '@': ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") return true;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g': return true;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n\t\t\t\t++i; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.match(SSF_abstime)) return true;\n\t\t\t\tbreak;\n\t\t\tcase '.':\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\twhile(i < fmt.length && (\"0#?.,E+-%\".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\\\' && fmt.charAt(i+1) == \"-\" && \"0#\".indexOf(fmt.charAt(i+2))>-1))){/* empty */}\n\t\t\t\tbreak;\n\t\t\tcase '?': while(fmt.charAt(++i) === c){/* empty */} break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;\n\t\t\tcase '(': case ')': ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\twhile(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;\n\t\t\tcase ' ': ++i; break;\n\t\t\tdefault: ++i; break;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {\n\tvar out = [], o = \"\", i = 0, c = \"\", lst='t', dt, j, cc;\n\tvar hr='H';\n\t/* Tokenize */\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': /* General */\n\t\t\t\tif(!SSF_isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\n\t\t\t\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\n\t\t\tcase '\"': /* Literal text */\n\t\t\t\tfor(o=\"\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n\t\t\t\tout[out.length] = {t:'t', v:o}; ++i; break;\n\t\t\tcase '\\\\': var w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n\t\t\t\tout[out.length] = {t:t, v:w}; ++i; break;\n\t\t\tcase '_': out[out.length] = {t:'t', v:\" \"}; i+=2; break;\n\t\t\tcase '@': /* Text Placeholder */\n\t\t\t\tout[out.length] = {t:'T', v:v}; ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts, fmt.charAt(i+1) === \"2\"); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\tc = c.toLowerCase();\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\n\t\t\t\tif(v < 0) return \"\";\n\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\to = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;\n\t\t\t\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n\t\t\t\tif(c === 'h') c = hr;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tvar q={t:c, v:c};\n\t\t\t\tif(dt==null) dt=SSF_parse_date_code(v, opts);\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") { if(dt!=null) q.v = dt.H >= 12 ? fmt.charAt(i+2) : c; q.t = 'T'; hr='h';i+=3;}\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"AM/PM\") { if(dt!=null) q.v = dt.H >= 12 ? \"PM\" : \"AM\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"上午/下午\") { if(dt!=null) q.v = dt.H >= 12 ? \"下午\" : \"上午\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse { q.t = \"t\"; ++i; }\n\t\t\t\tif(dt==null && q.t === 'T') return \"\";\n\t\t\t\tout[out.length] = q; lst = c; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\t\t\t\tif(o.match(SSF_abstime)) {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'Z', v:o.toLowerCase()};\n\t\t\t\t\tlst = o.charAt(1);\n\t\t\t\t} else if(o.indexOf(\"$\") > -1) {\n\t\t\t\t\to = (o.match(/\\$([^-\\[\\]]*)/)||[])[1]||\"$\";\n\t\t\t\t\tif(!fmt_is_date(fmt)) out[out.length] = {t:'t',v:o};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t/* Numbers */\n\t\t\tcase '.':\n\t\t\t\tif(dt != null) {\n\t\t\t\t\to = c; while(++i < fmt.length && (c=fmt.charAt(i)) === \"0\") o += c;\n\t\t\t\t\tout[out.length] = {t:'s', v:o}; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\to = c; while(++i < fmt.length && \"0#?.,E+-%\".indexOf(c=fmt.charAt(i)) > -1) o += c;\n\t\t\t\tout[out.length] = {t:'n', v:o}; break;\n\t\t\tcase '?':\n\t\t\t\to = c; while(fmt.charAt(++i) === c) o+=c;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break; // **\n\t\t\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\to = c; while(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i);\n\t\t\t\tout[out.length] = {t:'D', v:o}; break;\n\t\t\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\n\t\t\tcase '$': out[out.length] = {t:'t', v:'$'}; ++i; break;\n\t\t\tdefault:\n\t\t\t\tif(\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n\t\t\t\tout[out.length] = {t:'t', v:c}; ++i; break;\n\t\t}\n\t}\n\n\t/* Scan for date/time parts */\n\tvar bt = 0, ss0 = 0, ssm;\n\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\n\t\t\tcase 's':\n\t\t\t\tif((ssm=out[i].v.match(/\\.0+$/))) ss0=Math.max(ss0,ssm[0].length-1);\n\t\t\t\tif(bt < 3) bt = 3;\n\t\t\t/* falls through */\n\t\t\tcase 'd': case 'y': case 'M': case 'e': lst=out[i].t; break;\n\t\t\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\n\t\t\tcase 'X': /*if(out[i].v === \"B2\");*/\n\t\t\t\tbreak;\n\t\t\tcase 'Z':\n\t\t\t\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n\t\t\t\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n\t\t\t\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n\t\t}\n\t}\n\t/* time rounding depends on presence of minute / second / usec fields */\n\tswitch(bt) {\n\t\tcase 0: break;\n\t\tcase 1:\n\t\t\t/*::if(!dt) break;*/\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/*::if(!dt) break;*/\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tbreak;\n\t}\n\n\t/* replace fields */\n\tvar nstr = \"\", jj;\n\tfor(i=0; i < out.length; ++i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 't': case 'T': case ' ': case 'D': break;\n\t\t\tcase 'X': out[i].v = \"\"; out[i].t = \";\"; break;\n\t\t\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\n\t\t\t\t/*::if(!dt) throw \"unreachable\"; */\n\t\t\t\tout[i].v = SSF_write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n\t\t\t\tout[i].t = 't'; break;\n\t\t\tcase 'n': case '?':\n\t\t\t\tjj = i+1;\n\t\t\t\twhile(out[jj] != null && (\n\t\t\t\t\t(c=out[jj].t) === \"?\" || c === \"D\" ||\n\t\t\t\t\t((c === \" \" || c === \"t\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \"t\" && out[jj+1].v === '/')) ||\n\t\t\t\t\t(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n\t\t\t\t\t(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))\n\t\t\t\t)) {\n\t\t\t\t\tout[i].v += out[jj].v;\n\t\t\t\t\tout[jj] = {v:\"\", t:\";\"}; ++jj;\n\t\t\t\t}\n\t\t\t\tnstr += out[i].v;\n\t\t\t\ti = jj-1; break;\n\t\t\tcase 'G': out[i].t = 't'; out[i].v = SSF_general(v,opts); break;\n\t\t}\n\t}\n\tvar vv = \"\", myv, ostr;\n\tif(nstr.length > 0) {\n\t\tif(nstr.charCodeAt(0) == 40) /* '(' */ {\n\t\t\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t} else {\n\t\t\tmyv = (v<0 && flen > 1 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t\tif(myv < 0 && out[0] && out[0].t == 't') {\n\t\t\t\tostr = ostr.substr(1);\n\t\t\t\tout[0].v = \"-\" + out[0].v;\n\t\t\t}\n\t\t}\n\t\tjj=ostr.length-1;\n\t\tvar decpt = out.length;\n\t\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) { decpt = i; break; }\n\t\tvar lasti=out.length;\n\t\tif(decpt === out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tfor(i=out.length-1; i>= 0;--i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\n\t\t\t\telse if(jj < 0) out[i].v = \"\";\n\t\t\t\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti= 0; --i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")-1:out[i].v.length-1;\n\t\t\t\tvv = out[i].v.substr(j+1);\n\t\t\t\tfor(; j>=0; --j) {\n\t\t\t\t\tif(jj>=0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti-1&&i===decpt?out[i].v.indexOf(\".\")+1:0;\n\t\t\t\tvv = out[i].v.substr(0,j);\n\t\t\t\tfor(; j-1) {\n\t\tmyv = (flen >1 && v < 0 && i>0 && out[i-1].v === \"-\" ? -v:v);\n\t\tout[i].v = write_num(out[i].t, out[i].v, myv);\n\t\tout[i].t = 't';\n\t}\n\tvar retval = \"\";\n\tfor(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;\n\treturn retval;\n}\n\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\nfunction chkcond(v, rr) {\n\tif(rr == null) return false;\n\tvar thresh = parseFloat(rr[2]);\n\tswitch(rr[1]) {\n\t\tcase \"=\": if(v == thresh) return true; break;\n\t\tcase \">\": if(v > thresh) return true; break;\n\t\tcase \"<\": if(v < thresh) return true; break;\n\t\tcase \"<>\": if(v != thresh) return true; break;\n\t\tcase \">=\": if(v >= thresh) return true; break;\n\t\tcase \"<=\": if(v <= thresh) return true; break;\n\t}\n\treturn false;\n}\nfunction choose_fmt(f/*:string*/, v/*:any*/) {\n\tvar fmt = SSF_split_fmt(f);\n\tvar l = fmt.length, lat = fmt[l-1].indexOf(\"@\");\n\tif(l<4 && lat>-1) --l;\n\tif(fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n\tif(typeof v !== \"number\") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:\"@\"];\n\tswitch(fmt.length) {\n\t\tcase 1: fmt = lat>-1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"]; break;\n\t\tcase 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"]; break;\n\t\tcase 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"]; break;\n\t\tcase 4: break;\n\t}\n\tvar ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n\tif(fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\tif(fmt[0].match(/\\[[=<>]/) != null || fmt[1].match(/\\[[=<>]/) != null) {\n\t\tvar m1 = fmt[0].match(cfregex2);\n\t\tvar m2 = fmt[1].match(cfregex2);\n\t\treturn chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n\t}\n\treturn [l, ff];\n}\nfunction SSF_format(fmt/*:string|number*/,v/*:any*/,o/*:?any*/) {\n\tif(o == null) o = {};\n\tvar sfmt = \"\";\n\tswitch(typeof fmt) {\n\t\tcase \"string\":\n\t\t\tif(fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = fmt;\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\tif(fmt == 14 && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = (o.table != null ? (o.table/*:any*/) : table_fmt)[fmt];\n\t\t\tif(sfmt == null) sfmt = (o.table && o.table[SSF_default_map[fmt]]) || table_fmt[SSF_default_map[fmt]];\n\t\t\tif(sfmt == null) sfmt = SSF_default_str[fmt] || \"General\";\n\t\t\tbreak;\n\t}\n\tif(SSF_isgeneral(sfmt,0)) return SSF_general(v, o);\n\tif(v instanceof Date) v = datenum_local(v, o.date1904);\n\tvar f = choose_fmt(sfmt, v);\n\tif(SSF_isgeneral(f[1])) return SSF_general(v, o);\n\tif(v === true) v = \"TRUE\"; else if(v === false) v = \"FALSE\";\n\telse if(v === \"\" || v == null) return \"\";\n\treturn eval_fmt(f[1], v, o, f[0]);\n}\nfunction SSF_load(fmt/*:string*/, idx/*:?number*/)/*:number*/ {\n\tif(typeof idx != 'number') {\n\t\tidx = +idx || -1;\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tfor(var i = 0; i < 0x0188; ++i) {\n/*::if(typeof idx != 'number') return 0x188; */\n\t\t\tif(table_fmt[i] == undefined) { if(idx < 0) idx = i; continue; }\n\t\t\tif(table_fmt[i] == fmt) { idx = i; break; }\n\t\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tif(idx < 0) idx = 0x187;\n\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\ttable_fmt[idx] = fmt;\n\treturn idx;\n}\nfunction SSF_load_table(tbl/*:SSFTable*/)/*:void*/ {\n\tfor(var i=0; i!=0x0188; ++i)\n\t\tif(tbl[i] !== undefined) SSF_load(tbl[i], i);\n}\n\nfunction make_ssf() {\n\ttable_fmt = SSF_init_table();\n}\n\nvar SSF = {\n\tformat: SSF_format,\n\tload: SSF_load,\n\t_table: table_fmt,\n\tload_table: SSF_load_table,\n\tparse_date_code: SSF_parse_date_code,\n\tis_date: fmt_is_date,\n\tget_table: function get_table() { return SSF._table = table_fmt; }\n};\n\nvar SSFImplicit/*{[number]:string}*/ = ({\n\t\"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"23\": 'General', \"24\": 'General', \"25\": 'General', \"26\": 'General',\n\t\"27\": 'm/d/yy', \"28\": 'm/d/yy', \"29\": 'm/d/yy', \"30\": 'm/d/yy', \"31\": 'm/d/yy',\n\t\"32\": 'h:mm:ss', \"33\": 'h:mm:ss', \"34\": 'h:mm:ss', \"35\": 'h:mm:ss',\n\t\"36\": 'm/d/yy',\n\t\"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n\t\"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n\t\"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n\t\"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n\t\"50\": 'm/d/yy', \"51\": 'm/d/yy', \"52\": 'm/d/yy', \"53\": 'm/d/yy', \"54\": 'm/d/yy',\n\t\"55\": 'm/d/yy', \"56\": 'm/d/yy', \"57\": 'm/d/yy', \"58\": 'm/d/yy',\n\t\"59\": '0',\n\t\"60\": '0.00',\n\t\"61\": '#,##0',\n\t\"62\": '#,##0.00',\n\t\"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"67\": '0%',\n\t\"68\": '0.00%',\n\t\"69\": '# ?/?',\n\t\"70\": '# ??/??',\n\t\"71\": 'm/d/yy',\n\t\"72\": 'm/d/yy',\n\t\"73\": 'd-mmm-yy',\n\t\"74\": 'd-mmm',\n\t\"75\": 'mmm-yy',\n\t\"76\": 'h:mm',\n\t\"77\": 'h:mm:ss',\n\t\"78\": 'm/d/yy h:mm',\n\t\"79\": 'mm:ss',\n\t\"80\": '[h]:mm:ss',\n\t\"81\": 'mmss.0'\n}/*:any*/);\n\n/* dateNF parse TODO: move to SSF */\nvar dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\nfunction dateNF_regex(dateNF/*:string|number*/)/*:RegExp*/ {\n\tvar fmt = typeof dateNF == \"number\" ? table_fmt[dateNF] : dateNF;\n\tfmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n\treturn new RegExp(\"^\" + fmt + \"$\");\n}\nfunction dateNF_fix(str/*:string*/, dateNF/*:string*/, match/*:Array*/)/*:string*/ {\n\tvar Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;\n\t(dateNF.match(dateNFregex)||[]).forEach(function(n, i) {\n\t\tvar v = parseInt(match[i+1], 10);\n\t\tswitch(n.toLowerCase().charAt(0)) {\n\t\t\tcase 'y': Y = v; break; case 'd': d = v; break;\n\t\t\tcase 'h': H = v; break; case 's': S = v; break;\n\t\t\tcase 'm': if(H >= 0) M = v; else m = v; break;\n\t\t}\n\t});\n\tif(S >= 0 && M == -1 && m >= 0) { M = m; m = -1; }\n\tvar datestr = ((\"\" + (Y>=0?Y: new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m>=1?m:1)).slice(-2) + \"-\" + (\"00\" + (d>=1?d:1)).slice(-2));\n\tif(datestr.length == 7) datestr = \"0\" + datestr;\n\tif(datestr.length == 8) datestr = \"20\" + datestr;\n\tvar timestr = ((\"00\" + (H>=0?H:0)).slice(-2) + \":\" + (\"00\" + (M>=0?M:0)).slice(-2) + \":\" + (\"00\" + (S>=0?S:0)).slice(-2));\n\tif(H == -1 && M == -1 && S == -1) return datestr;\n\tif(Y == -1 && m == -1 && d == -1) return timestr;\n\treturn datestr + \"T\" + timestr;\n}\n\n/* table of bad formats written by third-party tools */\nvar bad_formats = {\n\t\"d.m\": \"d\\\\.m\" // Issue #2571 Google Sheets writes invalid format 'd.m', correct format is 'd\".\"m' or 'd\\\\.m'\n};\n\nfunction SSF__load(fmt, idx) {\n\treturn SSF_load(bad_formats[fmt] || fmt, idx);\n}\n\n/*::\ndeclare var ReadShift:any;\ndeclare var CheckField:any;\ndeclare var prep_blob:any;\ndeclare var __readUInt32LE:any;\ndeclare var __readInt32LE:any;\ndeclare var __toBuffer:any;\ndeclare var __utf16le:any;\ndeclare var bconcat:any;\ndeclare var s2a:any;\ndeclare var chr0:any;\ndeclare var chr1:any;\ndeclare var has_buf:boolean;\ndeclare var new_buf:any;\ndeclare var new_raw_buf:any;\ndeclare var new_unsafe_buf:any;\ndeclare var Buffer_from:any;\n*/\n/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint eqnull:true */\n/*exported CFB */\n/*global Uint8Array:false, Uint16Array:false */\n\n/*::\ntype SectorEntry = {\n\tname?:string;\n\tnodes?:Array;\n\tdata:RawBytes;\n};\ntype SectorList = {\n\t[k:string|number]:SectorEntry;\n\tname:?string;\n\tfat_addrs:Array;\n\tssz:number;\n}\ntype CFBFiles = {[n:string]:CFBEntry};\n*/\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32 = /*#__PURE__*/(function() {\nvar CRC32 = {};\nCRC32.version = '1.2.0';\n/* see perf/crc32table.js */\n/*global Int32Array */\nfunction signed_crc_table()/*:any*/ {\n\tvar c = 0, table/*:Array*/ = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T0 = signed_crc_table();\nfunction slice_by_16_tables(T) {\n\tvar c = 0, v = 0, n = 0, table/*:Array*/ = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ;\n\n\tfor(n = 0; n != 256; ++n) table[n] = T[n];\n\tfor(n = 0; n != 256; ++n) {\n\t\tv = T[n];\n\t\tfor(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF];\n\t}\n\tvar out = [];\n\tfor(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n\treturn out;\n}\nvar TT = slice_by_16_tables(T0);\nvar T1 = TT[0], T2 = TT[1], T3 = TT[2], T4 = TT[3], T5 = TT[4];\nvar T6 = TT[5], T7 = TT[6], T8 = TT[7], T9 = TT[8], Ta = TT[9];\nvar Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];\nfunction crc32_bstr(bstr/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1;\n\tfor(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_buf(B/*:Uint8Array|Array*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1, L = B.length - 15, i = 0;\n\tfor(; i < L;) C =\n\t\tTf[B[i++] ^ (C & 255)] ^\n\t\tTe[B[i++] ^ ((C >> 8) & 255)] ^\n\t\tTd[B[i++] ^ ((C >> 16) & 255)] ^\n\t\tTc[B[i++] ^ (C >>> 24)] ^\n\t\tTb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^\n\t\tT7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^\n\t\tT3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n\tL += 15;\n\twhile(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_str(str/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T0[(C^c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn ~C;\n}\nCRC32.table = T0;\nCRC32.bstr = crc32_bstr;\nCRC32.buf = crc32_buf;\nCRC32.str = crc32_str;\nreturn CRC32;\n})();\n/* [MS-CFB] v20171201 */\nvar CFB = /*#__PURE__*/(function _CFB(){\nvar exports/*:CFBModule*/ = /*::(*/{}/*:: :any)*/;\nexports.version = '1.2.2';\n/* [MS-CFB] 2.6.4 */\nfunction namecmp(l/*:string*/, r/*:string*/)/*:number*/ {\n\tvar L = l.split(\"/\"), R = r.split(\"/\");\n\tfor(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n\t\tif((c = L[i].length - R[i].length)) return c;\n\t\tif(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n\t}\n\treturn L.length - R.length;\n}\nfunction dirname(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return (p.slice(0,-1).indexOf(\"/\") === -1) ? p : dirname(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(0, c+1);\n}\n\nfunction filename(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(c+1);\n}\n/* -------------------------------------------------------------------------- */\n/* DOS Date format:\n high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n add 1980 to stored year\n stored second should be doubled\n*/\n\n/* write JS date to buf as a DOS date */\nfunction write_dos_date(buf/*:CFBlob*/, date/*:Date|string*/) {\n\tif(typeof date === \"string\") date = new Date(date);\n\tvar hms/*:number*/ = date.getHours();\n\thms = hms << 6 | date.getMinutes();\n\thms = hms << 5 | (date.getSeconds()>>>1);\n\tbuf.write_shift(2, hms);\n\tvar ymd/*:number*/ = (date.getFullYear() - 1980);\n\tymd = ymd << 4 | (date.getMonth()+1);\n\tymd = ymd << 5 | date.getDate();\n\tbuf.write_shift(2, ymd);\n}\n\n/* read four bytes from buf and interpret as a DOS date */\nfunction parse_dos_date(buf/*:CFBlob*/)/*:Date*/ {\n\tvar hms = buf.read_shift(2) & 0xFFFF;\n\tvar ymd = buf.read_shift(2) & 0xFFFF;\n\tvar val = new Date();\n\tvar d = ymd & 0x1F; ymd >>>= 5;\n\tvar m = ymd & 0x0F; ymd >>>= 4;\n\tval.setMilliseconds(0);\n\tval.setFullYear(ymd + 1980);\n\tval.setMonth(m-1);\n\tval.setDate(d);\n\tvar S = hms & 0x1F; hms >>>= 5;\n\tvar M = hms & 0x3F; hms >>>= 6;\n\tval.setHours(hms);\n\tval.setMinutes(M);\n\tval.setSeconds(S<<1);\n\treturn val;\n}\nfunction parse_extra_field(blob/*:CFBlob*/)/*:any*/ {\n\tprep_blob(blob, 0);\n\tvar o = /*::(*/{}/*:: :any)*/;\n\tvar flags = 0;\n\twhile(blob.l <= blob.length - 4) {\n\t\tvar type = blob.read_shift(2);\n\t\tvar sz = blob.read_shift(2), tgt = blob.l + sz;\n\t\tvar p = {};\n\t\tswitch(type) {\n\t\t\t/* UNIX-style Timestamps */\n\t\t\tcase 0x5455: {\n\t\t\t\tflags = blob.read_shift(1);\n\t\t\t\tif(flags & 1) p.mtime = blob.read_shift(4);\n\t\t\t\t/* for some reason, CD flag corresponds to LFH */\n\t\t\t\tif(sz > 5) {\n\t\t\t\t\tif(flags & 2) p.atime = blob.read_shift(4);\n\t\t\t\t\tif(flags & 4) p.ctime = blob.read_shift(4);\n\t\t\t\t}\n\t\t\t\tif(p.mtime) p.mt = new Date(p.mtime*1000);\n\t\t\t} break;\n\t\t\t/* ZIP64 Extended Information Field */\n\t\t\tcase 0x0001: {\n\t\t\t\tvar sz1 = blob.read_shift(4), sz2 = blob.read_shift(4);\n\t\t\t\tp.usz = (sz2 * Math.pow(2,32) + sz1);\n\t\t\t\tsz1 = blob.read_shift(4); sz2 = blob.read_shift(4);\n\t\t\t\tp.csz = (sz2 * Math.pow(2,32) + sz1);\n\t\t\t\t// NOTE: volume fields are skipped\n\t\t\t} break;\n\t\t}\n\t\tblob.l = tgt;\n\t\to[type] = p;\n\t}\n\treturn o;\n}\nvar fs/*:: = require('fs'); */;\nfunction get_fs() { return fs || (fs = _fs); }\nfunction parse(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\nif(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\nif((file[0] | 0x20) == 0x6d && (file[1]|0x20) == 0x69) return parse_mad(file, options);\nif(file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\nvar mver = 3;\nvar ssz = 512;\nvar nmfs = 0; // number of mini FAT sectors\nvar difat_sec_cnt = 0;\nvar dir_start = 0;\nvar minifat_start = 0;\nvar difat_start = 0;\n\nvar fat_addrs/*:Array*/ = []; // locations of FAT sectors\n\n/* [MS-CFB] 2.2 Compound File Header */\nvar blob/*:CFBlob*/ = /*::(*/file.slice(0,512)/*:: :any)*/;\nprep_blob(blob, 0);\n\n/* major version */\nvar mv = check_get_mver(blob);\nmver = mv[0];\nswitch(mver) {\n\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\n\tcase 0: if(mv[1] == 0) return parse_zip(file, options);\n\t/* falls through */\n\tdefault: throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n}\n\n/* reprocess header */\nif(ssz !== 512) { blob = /*::(*/file.slice(0,ssz)/*:: :any)*/; prep_blob(blob, 28 /* blob.l */); }\n/* Save header for final object */\nvar header/*:RawBytes*/ = file.slice(0,ssz);\n\ncheck_shifts(blob, mver);\n\n// Number of Directory Sectors\nvar dir_cnt/*:number*/ = blob.read_shift(4, 'i');\nif(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);\n\n// Number of FAT Sectors\nblob.l += 4;\n\n// First Directory Sector Location\ndir_start = blob.read_shift(4, 'i');\n\n// Transaction Signature\nblob.l += 4;\n\n// Mini Stream Cutoff Size\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\n\n// First Mini FAT Sector Location\nminifat_start = blob.read_shift(4, 'i');\n\n// Number of Mini FAT Sectors\nnmfs = blob.read_shift(4, 'i');\n\n// First DIFAT sector location\ndifat_start = blob.read_shift(4, 'i');\n\n// Number of DIFAT Sectors\ndifat_sec_cnt = blob.read_shift(4, 'i');\n\n// Grab FAT Sector Locations\nfor(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\n\tq = blob.read_shift(4, 'i');\n\tif(q<0) break;\n\tfat_addrs[j] = q;\n}\n\n/** Break the file up into sectors */\nvar sectors/*:Array*/ = sectorify(file, ssz);\n\nsleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n\n/** Chains */\nvar sector_list/*:SectorList*/ = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n\nif(dir_start < sector_list.length) sector_list[dir_start].name = \"!Directory\";\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\nsector_list[fat_addrs[0]].name = \"!FAT\";\nsector_list.fat_addrs = fat_addrs;\nsector_list.ssz = ssz;\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nvar files/*:CFBFiles*/ = {}, Paths/*:Array*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n\nbuild_full_paths(FileIndex, FullPaths, Paths);\nPaths.shift();\n\nvar o = {\n\tFileIndex: FileIndex,\n\tFullPaths: FullPaths\n};\n\n// $FlowIgnore\nif(options && options.raw) o.raw = {header: header, sectors: sectors};\nreturn o;\n} // parse\n\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\nfunction check_get_mver(blob/*:CFBlob*/)/*:[number, number]*/ {\n\tif(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];\n\t// header signature 8\n\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\n\n\t// clsid 16\n\t//blob.chk(HEADER_CLSID, 'CLSID: ');\n\tblob.l += 16;\n\n\t// minor version 2\n\tvar mver/*:number*/ = blob.read_shift(2, 'u');\n\n\treturn [blob.read_shift(2,'u'), mver];\n}\nfunction check_shifts(blob/*:CFBlob*/, mver/*:number*/)/*:void*/ {\n\tvar shift = 0x09;\n\n\t// Byte Order\n\t//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\tblob.l += 2;\n\n\t// Sector Shift\n\tswitch((shift = blob.read_shift(2))) {\n\t\tcase 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;\n\t\tcase 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;\n\t\tdefault: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n\t}\n\n\t// Mini Sector Shift\n\tblob.chk('0600', 'Mini Sector Shift: ');\n\n\t// Reserved\n\tblob.chk('000000000000', 'Reserved: ');\n}\n\n/** Break the file up into sectors */\nfunction sectorify(file/*:RawBytes*/, ssz/*:number*/)/*:Array*/ {\n\tvar nsectors = Math.ceil(file.length/ssz)-1;\n\tvar sectors/*:Array*/ = [];\n\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\n\tsectors[nsectors-1] = file.slice(nsectors*ssz);\n\treturn sectors;\n}\n\n/* [MS-CFB] 2.6.4 Red-Black Tree */\nfunction build_full_paths(FI/*:CFBFileIndex*/, FP/*:Array*/, Paths/*:Array*/)/*:void*/ {\n\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\n\tvar dad/*:Array*/ = [], q/*:Array*/ = [];\n\n\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\n\n\tfor(; j < q.length; ++j) {\n\t\ti = q[j];\n\t\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\n\t\tif(dad[i] === i) {\n\t\t\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\n\t\t\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\n\t\t}\n\t\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\n\t\tif(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }\n\t\tif(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }\n\t}\n\tfor(i=1; i < pl; ++i) if(dad[i] === i) {\n\t\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\n\t\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\n\t}\n\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type === 0 /* unknown */) continue;\n\t\tj = i;\n\t\tif(j != dad[j]) do {\n\t\t\tj = dad[j];\n\t\t\tFP[i] = FP[j] + \"/\" + FP[i];\n\t\t} while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n\t\tdad[i] = -1;\n\t}\n\n\tFP[0] += \"/\";\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type !== 2 /* stream */) FP[i] += \"/\";\n\t}\n}\n\nfunction get_mfat_entry(entry/*:CFBEntry*/, payload/*:RawBytes*/, mini/*:?RawBytes*/)/*:CFBlob*/ {\n\tvar start = entry.start, size = entry.size;\n\t//return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/);\n\tvar o = [];\n\tvar idx = start;\n\twhile(mini && size > 0 && idx >= 0) {\n\t\to.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n\t\tsize -= MSSZ;\n\t\tidx = __readInt32LE(mini, idx * 4);\n\t}\n\tif(o.length === 0) return (new_buf(0)/*:any*/);\n\treturn (bconcat(o).slice(0, entry.size)/*:any*/);\n}\n\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\n DIFAT chains by storing the next sector number as the last 32 bits */\nfunction sleuth_fat(idx/*:number*/, cnt/*:number*/, sectors/*:Array*/, ssz/*:number*/, fat_addrs)/*:void*/ {\n\tvar q/*:number*/ = ENDOFCHAIN;\n\tif(idx === ENDOFCHAIN) {\n\t\tif(cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n\t} else if(idx !== -1 /*FREESECT*/) {\n\t\tvar sector = sectors[idx], m = (ssz>>>2)-1;\n\t\tif(!sector) return;\n\t\tfor(var i = 0; i < m; ++i) {\n\t\t\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\n\t\t\tfat_addrs.push(q);\n\t\t}\n\t\tif(cnt >= 1) sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\n\t}\n}\n\n/** Follow the linked list of sectors for a given starting point */\nfunction get_sector_list(sectors/*:Array*/, start/*:number*/, fat_addrs/*:Array*/, ssz/*:number*/, chkd/*:?Array*/)/*:SectorEntry*/ {\n\tvar buf/*:Array*/ = [], buf_chain/*:Array*/ = [];\n\tif(!chkd) chkd = [];\n\tvar modulus = ssz - 1, j = 0, jj = 0;\n\tfor(j=start; j>=0;) {\n\t\tchkd[j] = true;\n\t\tbuf[buf.length] = j;\n\t\tbuf_chain.push(sectors[j]);\n\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\tjj = ((j*4) & modulus);\n\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\tif(!sectors[addr]) break;\n\t\tj = __readInt32LE(sectors[addr], jj);\n\t}\n\treturn {nodes: buf, data:__toBuffer([buf_chain])};\n}\n\n/** Chase down the sector linked lists */\nfunction make_sector_list(sectors/*:Array*/, dir_start/*:number*/, fat_addrs/*:Array*/, ssz/*:number*/)/*:SectorList*/ {\n\tvar sl = sectors.length, sector_list/*:SectorList*/ = ([]/*:any*/);\n\tvar chkd/*:Array*/ = [], buf/*:Array*/ = [], buf_chain/*:Array*/ = [];\n\tvar modulus = ssz - 1, i=0, j=0, k=0, jj=0;\n\tfor(i=0; i < sl; ++i) {\n\t\tbuf = ([]/*:Array*/);\n\t\tk = (i + dir_start); if(k >= sl) k-=sl;\n\t\tif(chkd[k]) continue;\n\t\tbuf_chain = [];\n\t\tvar seen = [];\n\t\tfor(j=k; j>=0;) {\n\t\t\tseen[j] = true;\n\t\t\tchkd[j] = true;\n\t\t\tbuf[buf.length] = j;\n\t\t\tbuf_chain.push(sectors[j]);\n\t\t\tvar addr/*:number*/ = fat_addrs[Math.floor(j*4/ssz)];\n\t\t\tjj = ((j*4) & modulus);\n\t\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\t\tif(!sectors[addr]) break;\n\t\t\tj = __readInt32LE(sectors[addr], jj);\n\t\t\tif(seen[j]) break;\n\t\t}\n\t\tsector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])}/*:SectorEntry*/);\n\t}\n\treturn sector_list;\n}\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nfunction read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array*/, Paths/*:Array*/, nmfs, files, FileIndex, mini) {\n\tvar minifat_store = 0, pl = (Paths.length?2:0);\n\tvar sector = sector_list[dir_start].data;\n\tvar i = 0, namelen = 0, name;\n\tfor(; i < sector.length; i+= 128) {\n\t\tvar blob/*:CFBlob*/ = /*::(*/sector.slice(i, i+128)/*:: :any)*/;\n\t\tprep_blob(blob, 64);\n\t\tnamelen = blob.read_shift(2);\n\t\tname = __utf16le(blob,0,namelen-pl);\n\t\tPaths.push(name);\n\t\tvar o/*:CFBEntry*/ = ({\n\t\t\tname: name,\n\t\t\ttype: blob.read_shift(1),\n\t\t\tcolor: blob.read_shift(1),\n\t\t\tL: blob.read_shift(4, 'i'),\n\t\t\tR: blob.read_shift(4, 'i'),\n\t\t\tC: blob.read_shift(4, 'i'),\n\t\t\tclsid: blob.read_shift(16),\n\t\t\tstate: blob.read_shift(4, 'i'),\n\t\t\tstart: 0,\n\t\t\tsize: 0\n\t\t});\n\t\tvar ctime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(ctime !== 0) o.ct = read_date(blob, blob.l-8);\n\t\tvar mtime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(mtime !== 0) o.mt = read_date(blob, blob.l-8);\n\t\to.start = blob.read_shift(4, 'i');\n\t\to.size = blob.read_shift(4, 'i');\n\t\tif(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = \"\"; }\n\t\tif(o.type === 5) { /* root */\n\t\t\tminifat_store = o.start;\n\t\t\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n\t\t\t/*minifat_size = o.size;*/\n\t\t} else if(o.size >= 4096 /* MSCSZ */) {\n\t\t\to.storage = 'fat';\n\t\t\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n\t\t\tsector_list[o.start].name = o.name;\n\t\t\to.content = (sector_list[o.start].data.slice(0,o.size)/*:any*/);\n\t\t} else {\n\t\t\to.storage = 'minifat';\n\t\t\tif(o.size < 0) o.size = 0;\n\t\t\telse if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n\t\t\t\to.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);\n\t\t\t}\n\t\t}\n\t\tif(o.content) prep_blob(o.content, 0);\n\t\tfiles[name] = o;\n\t\tFileIndex.push(o);\n\t}\n}\n\nfunction read_date(blob/*:RawBytes|CFBlob*/, offset/*:number*/)/*:Date*/ {\n\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\n}\n\nfunction read_file(filename/*:string*/, options/*:CFBReadOpts*/) {\n\tget_fs();\n\treturn parse(fs.readFileSync(filename), options);\n}\n\nfunction read(blob/*:RawBytes|string*/, options/*:CFBReadOpts*/) {\n\tvar type = options && options.type;\n\tif(!type) {\n\t\tif(has_buf && Buffer.isBuffer(blob)) type = \"buffer\";\n\t}\n\tswitch(type || \"base64\") {\n\t\tcase \"file\": /*:: if(typeof blob !== 'string') throw \"Must pass a filename when type='file'\"; */return read_file(blob, options);\n\t\tcase \"base64\": /*:: if(typeof blob !== 'string') throw \"Must pass a base64-encoded binary string when type='file'\"; */return parse(s2a(Base64_decode(blob)), options);\n\t\tcase \"binary\": /*:: if(typeof blob !== 'string') throw \"Must pass a binary string when type='file'\"; */return parse(s2a(blob), options);\n\t}\n\treturn parse(/*::typeof blob == 'string' ? new Buffer(blob, 'utf-8') : */blob, options);\n}\n\nfunction init_cfb(cfb/*:CFBContainer*/, opts/*:?any*/)/*:void*/ {\n\tvar o = opts || {}, root = o.root || \"Root Entry\";\n\tif(!cfb.FullPaths) cfb.FullPaths = [];\n\tif(!cfb.FileIndex) cfb.FileIndex = [];\n\tif(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\tif(cfb.FullPaths.length === 0) {\n\t\tcfb.FullPaths[0] = root + \"/\";\n\t\tcfb.FileIndex[0] = ({ name: root, type: 5 }/*:any*/);\n\t}\n\tif(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n\tseed_cfb(cfb);\n}\nfunction seed_cfb(cfb/*:CFBContainer*/)/*:void*/ {\n\tvar nm = \"\\u0001Sh33tJ5\";\n\tif(CFB.find(cfb, \"/\" + nm)) return;\n\tvar p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;\n\tcfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }/*:any*/));\n\tcfb.FullPaths.push(cfb.FullPaths[0] + nm);\n\trebuild_cfb(cfb);\n}\nfunction rebuild_cfb(cfb/*:CFBContainer*/, f/*:?boolean*/)/*:void*/ {\n\tinit_cfb(cfb);\n\tvar gc = false, s = false;\n\tfor(var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n\t\tvar _file = cfb.FileIndex[i];\n\t\tswitch(_file.type) {\n\t\t\tcase 0:\n\t\t\t\tif(s) gc = true;\n\t\t\t\telse { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }\n\t\t\t\tbreak;\n\t\t\tcase 1: case 2: case 5:\n\t\t\t\ts = true;\n\t\t\t\tif(isNaN(_file.R * _file.L * _file.C)) gc = true;\n\t\t\t\tif(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n\t\t\t\tbreak;\n\t\t\tdefault: gc = true; break;\n\t\t}\n\t}\n\tif(!gc && !f) return;\n\n\tvar now = new Date(1987, 1, 19), j = 0;\n\t// Track which names exist\n\tvar fullPaths = Object.create ? Object.create(null) : {};\n\tvar data/*:Array<[string, CFBEntry]>*/ = [];\n\tfor(i = 0; i < cfb.FullPaths.length; ++i) {\n\t\tfullPaths[cfb.FullPaths[i]] = true;\n\t\tif(cfb.FileIndex[i].type === 0) continue;\n\t\tdata.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n\t}\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar dad = dirname(data[i][0]);\n\t\ts = fullPaths[dad];\n\t\twhile(!s) {\n\t\t\twhile(dirname(dad) && !fullPaths[dirname(dad)]) dad = dirname(dad);\n\n\t\t\tdata.push([dad, ({\n\t\t\t\tname: filename(dad).replace(\"/\",\"\"),\n\t\t\t\ttype: 1,\n\t\t\t\tclsid: HEADER_CLSID,\n\t\t\t\tct: now, mt: now,\n\t\t\t\tcontent: null\n\t\t\t}/*:any*/)]);\n\n\t\t\t// Add name to set\n\t\t\tfullPaths[dad] = true;\n\n\t\t\tdad = dirname(data[i][0]);\n\t\t\ts = fullPaths[dad];\n\t\t}\n\t}\n\n\tdata.sort(function(x,y) { return namecmp(x[0], y[0]); });\n\tcfb.FullPaths = []; cfb.FileIndex = [];\n\tfor(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar elt = cfb.FileIndex[i];\n\t\tvar nm = cfb.FullPaths[i];\n\n\t\telt.name = filename(nm).replace(\"/\",\"\");\n\t\telt.L = elt.R = elt.C = -(elt.color = 1);\n\t\telt.size = elt.content ? elt.content.length : 0;\n\t\telt.start = 0;\n\t\telt.clsid = (elt.clsid || HEADER_CLSID);\n\t\tif(i === 0) {\n\t\t\telt.C = data.length > 1 ? 1 : -1;\n\t\t\telt.size = 0;\n\t\t\telt.type = 5;\n\t\t} else if(nm.slice(-1) == \"/\") {\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;\n\t\t\telt.C = j >= data.length ? -1 : j;\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;\n\t\t\telt.R = j >= data.length ? -1 : j;\n\t\t\telt.type = 1;\n\t\t} else {\n\t\t\tif(dirname(cfb.FullPaths[i+1]||\"\") == dirname(nm)) elt.R = i + 1;\n\t\t\telt.type = 2;\n\t\t}\n\t}\n\n}\n\nfunction _write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar _opts = options || {};\n\t/* MAD is order-sensitive, skip rebuild and sort */\n\tif(_opts.fileType == 'mad') return write_mad(cfb, _opts);\n\trebuild_cfb(cfb);\n\tswitch(_opts.fileType) {\n\t\tcase 'zip': return write_zip(cfb, _opts);\n\t\t//case 'mad': return write_mad(cfb, _opts);\n\t}\n\tvar L = (function(cfb/*:CFBContainer*/)/*:Array*/{\n\t\tvar mini_size = 0, fat_size = 0;\n\t\tfor(var i = 0; i < cfb.FileIndex.length; ++i) {\n\t\t\tvar file = cfb.FileIndex[i];\n\t\t\tif(!file.content) continue;\n\t\t\tvar flen = file.content.length;\n\t\t\tif(flen > 0){\n\t\t\t\tif(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;\n\t\t\t\telse fat_size += (flen + 0x01FF) >> 9;\n\t\t\t}\n\t\t}\n\t\tvar dir_cnt = (cfb.FullPaths.length +3) >> 2;\n\t\tvar mini_cnt = (mini_size + 7) >> 3;\n\t\tvar mfat_cnt = (mini_size + 0x7F) >> 7;\n\t\tvar fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n\t\tvar fat_cnt = (fat_base + 0x7F) >> 7;\n\t\tvar difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\twhile(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\tvar L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n\t\tcfb.FileIndex[0].size = mini_size << 6;\n\t\tL[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);\n\t\treturn L;\n\t})(cfb);\n\tvar o = new_buf(L[7] << 9);\n\tvar i = 0, T = 0;\n\t{\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(2, 0);\n\t\to.write_shift(2, 0x003E);\n\t\to.write_shift(2, 0x0003);\n\t\to.write_shift(2, 0xFFFE);\n\t\to.write_shift(2, 0x0009);\n\t\to.write_shift(2, 0x0006);\n\t\tfor(i = 0; i < 3; ++i) o.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, L[2]);\n\t\to.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, 1<<12);\n\t\to.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[3]);\n\t\to.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[1]);\n\t\tfor(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t}\n\tif(L[1]) {\n\t\tfor(T = 0; T < L[1]; ++T) {\n\t\t\tfor(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t\t\to.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n\t\t}\n\t}\n\tvar chainit = function(w/*:number*/)/*:void*/ {\n\t\tfor(T += w; i> 9);\n\t}\n\tchainit((L[6] + 7) >> 3);\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tT = i = 0;\n\tfor(j = 0; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\n\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\tflen = file.content.length;\n\t\tif(!flen || flen >= 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x3F) >> 6);\n\t}\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tfor(i = 0; i < L[4]<<2; ++i) {\n\t\tvar nm = cfb.FullPaths[i];\n\t\tif(!nm || nm.length === 0) {\n\t\t\tfor(j = 0; j < 17; ++j) o.write_shift(4, 0);\n\t\t\tfor(j = 0; j < 3; ++j) o.write_shift(4, -1);\n\t\t\tfor(j = 0; j < 12; ++j) o.write_shift(4, 0);\n\t\t\tcontinue;\n\t\t}\n\t\tfile = cfb.FileIndex[i];\n\t\tif(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\t\tvar _nm/*:string*/ = (i === 0 && _opts.root) || file.name;\n\t\tif(_nm.length > 32) {\n\t\t\tconsole.error(\"Name \" + _nm + \" will be truncated to \" + _nm.slice(0,32));\n\t\t\t_nm = _nm.slice(0, 32);\n\t\t}\n\t\tflen = 2*(_nm.length+1);\n\t\to.write_shift(64, _nm, \"utf16le\");\n\t\to.write_shift(2, flen);\n\t\to.write_shift(1, file.type);\n\t\to.write_shift(1, file.color);\n\t\to.write_shift(-4, file.L);\n\t\to.write_shift(-4, file.R);\n\t\to.write_shift(-4, file.C);\n\t\tif(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);\n\t\telse o.write_shift(16, file.clsid, \"hex\");\n\t\to.write_shift(4, file.state || 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, file.start);\n\t\to.write_shift(4, file.size); o.write_shift(4, 0);\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size >= 0x1000) {\n\t\t\to.l = (file.start+1) << 9;\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 511) & -512;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x1FF; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size > 0 && file.size < 0x1000) {\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 63) & -64;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x3F; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tif (has_buf) {\n\t\to.l = o.length;\n\t} else {\n\t\t// When using Buffer, already 0-filled\n\t\twhile(o.l < o.length) o.write_shift(1, 0);\n\t}\n\treturn o;\n}\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\nfunction find(cfb/*:CFBContainer*/, path/*:string*/)/*:?CFBEntry*/ {\n\tvar UCFullPaths/*:Array*/ = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });\n\tvar UCPaths/*:Array*/ = UCFullPaths.map(function(x) { var y = x.split(\"/\"); return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)]; });\n\tvar k/*:boolean*/ = false;\n\tif(path.charCodeAt(0) === 47 /* \"/\" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }\n\telse k = path.indexOf(\"/\") !== -1;\n\tvar UCPath/*:string*/ = path.toUpperCase();\n\tvar w/*:number*/ = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n\tif(w !== -1) return cfb.FileIndex[w];\n\n\tvar m = !UCPath.match(chr1);\n\tUCPath = UCPath.replace(chr0,'');\n\tif(m) UCPath = UCPath.replace(chr1,'!');\n\tfor(w = 0; w < UCFullPaths.length; ++w) {\n\t\tif((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t\tif((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t}\n\treturn null;\n}\n/** CFB Constants */\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n/* 2.1 Compound File Sector Numbers and Types */\nvar ENDOFCHAIN = -2;\n/* 2.2 Compound File Header */\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\nvar HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\nvar HEADER_CLSID = '00000000000000000000000000000000';\nvar consts = {\n\t/* 2.1 Compund File Sector Numbers and Types */\n\tMAXREGSECT: -6,\n\tDIFSECT: -4,\n\tFATSECT: -3,\n\tENDOFCHAIN: ENDOFCHAIN,\n\tFREESECT: -1,\n\t/* 2.2 Compound File Header */\n\tHEADER_SIGNATURE: HEADER_SIGNATURE,\n\tHEADER_MINOR_VERSION: '3e00',\n\tMAXREGSID: -6,\n\tNOSTREAM: -1,\n\tHEADER_CLSID: HEADER_CLSID,\n\t/* 2.6.1 Compound File Directory Entry */\n\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\n};\n\nfunction write_file(cfb/*:CFBContainer*/, filename/*:string*/, options/*:CFBWriteOpts*/)/*:void*/ {\n\tget_fs();\n\tvar o = _write(cfb, options);\n\t/*:: if(typeof Buffer == 'undefined' || !Buffer.isBuffer(o) || !(o instanceof Buffer)) throw new Error(\"unreachable\"); */\n\tfs.writeFileSync(filename, o);\n}\n\nfunction a2s(o/*:RawBytes*/)/*:string*/ {\n\tvar out = new Array(o.length);\n\tfor(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);\n\treturn out.join(\"\");\n}\n\nfunction write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar o = _write(cfb, options);\n\tswitch(options && options.type || \"buffer\") {\n\t\tcase \"file\": get_fs(); fs.writeFileSync(options.filename, (o/*:any*/)); return o;\n\t\tcase \"binary\": return typeof o == \"string\" ? o : a2s(o);\n\t\tcase \"base64\": return Base64_encode(typeof o == \"string\" ? o : a2s(o));\n\t\tcase \"buffer\": if(has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);\n\t\t\t/* falls through */\n\t\tcase \"array\": return typeof o == \"string\" ? s2a(o) : o;\n\t}\n\treturn o;\n}\n/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\nvar _zlib;\nfunction use_zlib(zlib) { try {\n\tvar InflateRaw = zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tInflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\tif(InflRaw.bytesRead) _zlib = zlib;\n\telse throw new Error(\"zlib does not expose bytesRead\");\n} catch(e) {console.error(\"cannot use native zlib: \" + (e.message || e)); } }\n\nfunction _inflateRawSync(payload, usz) {\n\tif(!_zlib) return _inflate(payload, usz);\n\tvar InflateRaw = _zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tvar out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\tpayload.l += InflRaw.bytesRead;\n\treturn out;\n}\n\nfunction _deflateRawSync(payload) {\n\treturn _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n}\nvar CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n/* LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\nvar LEN_LN = [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13 , 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 ];\n\n/* DST_ID = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 ]; */\nvar DST_LN = [ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];\n\nfunction bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }\n\nvar use_typed_arrays = typeof Uint8Array !== 'undefined';\n\nvar bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];\nfor(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);\n\nfunction bit_swap_n(n, b) {\n\tvar rev = bitswap8[n & 0xFF];\n\tif(b <= 8) return rev >>> (8-b);\n\trev = (rev << 8) | bitswap8[(n>>8)&0xFF];\n\tif(b <= 16) return rev >>> (16-b);\n\trev = (rev << 8) | bitswap8[(n>>16)&0xFF];\n\treturn rev >>> (24-b);\n}\n\n/* helpers for unaligned bit reads */\nfunction read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }\nfunction read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }\nfunction read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }\nfunction read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }\nfunction read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }\n\n/* works up to n = 3 * 8 + 1 = 25 */\nfunction read_bits_n(buf, bl, n) {\n\tvar w = (bl&7), h = (bl>>>3), f = ((1<>> w;\n\tif(n < 8 - w) return v & f;\n\tv |= buf[h+1]<<(8-w);\n\tif(n < 16 - w) return v & f;\n\tv |= buf[h+2]<<(16-w);\n\tif(n < 24 - w) return v & f;\n\tv |= buf[h+3]<<(24-w);\n\treturn v & f;\n}\n\n/* helpers for unaligned bit writes */\nfunction write_bits_3(buf, bl, v) { var w = bl & 7, h = bl >>> 3;\n\tif(w <= 5) buf[h] |= (v & 7) << w;\n\telse {\n\t\tbuf[h] |= (v << w) & 0xFF;\n\t\tbuf[h+1] = (v&7) >> (8-w);\n\t}\n\treturn bl + 3;\n}\n\nfunction write_bits_1(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv = (v&1) << w;\n\tbuf[h] |= v;\n\treturn bl + 1;\n}\nfunction write_bits_8(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |= v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v;\n\treturn bl + 8;\n}\nfunction write_bits_16(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |= v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v & 0xFF;\n\tbuf[h+2] = v >>> 8;\n\treturn bl + 16;\n}\n\n/* until ArrayBuffer#realloc is a thing, fake a realloc */\nfunction realloc(b, sz/*:number*/) {\n\tvar L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;\n\tif(L >= sz) return b;\n\tif(has_buf) {\n\t\tvar o = new_unsafe_buf(M);\n\t\t// $FlowIgnore\n\t\tif(b.copy) b.copy(o);\n\t\telse for(; i < b.length; ++i) o[i] = b[i];\n\t\treturn o;\n\t} else if(use_typed_arrays) {\n\t\tvar a = new Uint8Array(M);\n\t\tif(a.set) a.set(b);\n\t\telse for(; i < L; ++i) a[i] = b[i];\n\t\treturn a;\n\t}\n\tb.length = M;\n\treturn b;\n}\n\n/* zero-filled arrays for older browsers */\nfunction zero_fill_array(n) {\n\tvar o = new Array(n);\n\tfor(var i = 0; i < n; ++i) o[i] = 0;\n\treturn o;\n}\n\n/* build tree (used for literals and lengths) */\nfunction build_tree(clens, cmap, MAX/*:number*/)/*:number*/ {\n\tvar maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;\n\n\tvar bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\tfor(i = 0; i < 32; ++i) bl_count[i] = 0;\n\n\tfor(i = L; i < MAX; ++i) clens[i] = 0;\n\tL = clens.length;\n\n\tvar ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n\t/* build code tree */\n\tfor(i = 0; i < L; ++i) {\n\t\tbl_count[(w = clens[i])]++;\n\t\tif(maxlen < w) maxlen = w;\n\t\tctree[i] = 0;\n\t}\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);\n\tfor(i = 0; i < L; ++i) {\n\t\tccode = clens[i];\n\t\tif(ccode != 0) ctree[i] = bl_count[ccode+16]++;\n\t}\n\n\t/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);\n\t\t\tfor(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)\n\t\t\t\tcmap[ccode|(j<*/ = [];\n\tvar i = 0;\n\tfor(;i<32; i++) dlens.push(5);\n\tbuild_tree(dlens, fix_dmap, 32);\n\n\tvar clens/*:Array*/ = [];\n\ti = 0;\n\tfor(; i<=143; i++) clens.push(8);\n\tfor(; i<=255; i++) clens.push(9);\n\tfor(; i<=279; i++) clens.push(7);\n\tfor(; i<=287; i++) clens.push(8);\n\tbuild_tree(clens, fix_lmap, 288);\n})();var _deflateRaw = /*#__PURE__*/(function _deflateRawIIFE() {\n\tvar DST_LN_RE = use_typed_arrays ? new Uint8Array(0x8000) : [];\n\tvar j = 0, k = 0;\n\tfor(; j < DST_LN.length - 1; ++j) {\n\t\tfor(; k < DST_LN[j+1]; ++k) DST_LN_RE[k] = j;\n\t}\n\tfor(;k < 32768; ++k) DST_LN_RE[k] = 29;\n\n\tvar LEN_LN_RE = use_typed_arrays ? new Uint8Array(0x103) : [];\n\tfor(j = 0, k = 0; j < LEN_LN.length - 1; ++j) {\n\t\tfor(; k < LEN_LN[j+1]; ++k) LEN_LN_RE[k] = j;\n\t}\n\n\tfunction write_stored(data, out) {\n\t\tvar boff = 0;\n\t\twhile(boff < data.length) {\n\t\t\tvar L = Math.min(0xFFFF, data.length - boff);\n\t\t\tvar h = boff + L == data.length;\n\t\t\tout.write_shift(1, +h);\n\t\t\tout.write_shift(2, L);\n\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t}\n\t\treturn out.l;\n\t}\n\n\t/* Fixed Huffman */\n\tfunction write_huff_fixed(data, out) {\n\t\tvar bl = 0;\n\t\tvar boff = 0;\n\t\tvar addrs = use_typed_arrays ? new Uint16Array(0x8000) : [];\n\t\twhile(boff < data.length) {\n\t\t\tvar L = /* data.length - boff; */ Math.min(0xFFFF, data.length - boff);\n\n\t\t\t/* write a stored block for short data */\n\t\t\tif(L < 10) {\n\t\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length)); // jshint ignore:line\n\t\t\t\tif(bl & 7) bl += 8 - (bl & 7);\n\t\t\t\tout.l = (bl / 8) | 0;\n\t\t\t\tout.write_shift(2, L);\n\t\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t\t\tbl = out.l * 8;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2); // jshint ignore:line\n\t\t\tvar hash = 0;\n\t\t\twhile(L-- > 0) {\n\t\t\t\tvar d = data[boff];\n\t\t\t\thash = ((hash << 5) ^ d) & 0x7FFF;\n\n\t\t\t\tvar match = -1, mlen = 0;\n\n\t\t\t\tif((match = addrs[hash])) {\n\t\t\t\t\tmatch |= boff & ~0x7FFF;\n\t\t\t\t\tif(match > boff) match -= 0x8000;\n\t\t\t\t\tif(match < boff) while(data[match + mlen] == data[boff + mlen] && mlen < 250) ++mlen;\n\t\t\t\t}\n\n\t\t\t\tif(mlen > 2) {\n\t\t\t\t\t/* Copy Token */\n\t\t\t\t\td = LEN_LN_RE[mlen];\n\t\t\t\t\tif(d <= 22) bl = write_bits_8(out, bl, bitswap8[d+1]>>1) - 1;\n\t\t\t\t\telse {\n\t\t\t\t\t\twrite_bits_8(out, bl, 3);\n\t\t\t\t\t\tbl += 5;\n\t\t\t\t\t\twrite_bits_8(out, bl, bitswap8[d-23]>>5);\n\t\t\t\t\t\tbl += 3;\n\t\t\t\t\t}\n\t\t\t\t\tvar len_eb = (d < 8) ? 0 : ((d - 4)>>2);\n\t\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, mlen - LEN_LN[d]);\n\t\t\t\t\t\tbl += len_eb;\n\t\t\t\t\t}\n\n\t\t\t\t\td = DST_LN_RE[boff - match];\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]>>3);\n\t\t\t\t\tbl -= 3;\n\n\t\t\t\t\tvar dst_eb = d < 4 ? 0 : (d-2)>>1;\n\t\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, boff - match - DST_LN[d]);\n\t\t\t\t\t\tbl += dst_eb;\n\t\t\t\t\t}\n\t\t\t\t\tfor(var q = 0; q < mlen; ++q) {\n\t\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t\thash = ((hash << 5) ^ data[boff]) & 0x7FFF;\n\t\t\t\t\t\t++boff;\n\t\t\t\t\t}\n\t\t\t\t\tL-= mlen - 1;\n\t\t\t\t} else {\n\t\t\t\t\t/* Literal Token */\n\t\t\t\t\tif(d <= 143) d = d + 48;\n\t\t\t\t\telse bl = write_bits_1(out, bl, 1);\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]);\n\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t++boff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbl = write_bits_8(out, bl, 0) - 1;\n\t\t}\n\t\tout.l = ((bl + 7)/8)|0;\n\t\treturn out.l;\n\t}\n\treturn function _deflateRaw(data, out) {\n\t\tif(data.length < 8) return write_stored(data, out);\n\t\treturn write_huff_fixed(data, out);\n\t};\n})();\n\nfunction _deflate(data) {\n\tvar buf = new_buf(50+Math.floor(data.length*1.1));\n\tvar off = _deflateRaw(data, buf);\n\treturn buf.slice(0, off);\n}\n/* modified inflate function also moves original read head */\n\nvar dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);\nvar dyn_len_1 = 1, dyn_len_2 = 1;\n\n/* 5.5.3 Expanding Huffman Codes */\nfunction dyn(data, boff/*:number*/) {\n\t/* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n\tvar _HLIT = read_bits_5(data, boff) + 257; boff += 5;\n\tvar _HDIST = read_bits_5(data, boff) + 1; boff += 5;\n\tvar _HCLEN = read_bits_4(data, boff) + 4; boff += 4;\n\tvar w = 0;\n\n\t/* grab and store code lengths */\n\tvar clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n\tvar ctree = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\tvar maxlen = 1;\n\tvar bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar L = clens.length; /* 19 */\n\tfor(var i = 0; i < _HCLEN; ++i) {\n\t\tclens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n\t\tif(maxlen < w) maxlen = w;\n\t\tbl_count[w]++;\n\t\tboff += 3;\n\t}\n\n\t/* build code tree */\n\tvar ccode = 0;\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) next_code[i] = ccode = (ccode + bl_count[i-1])<<1;\n\tfor(i = 0; i < L; ++i) if((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n\t/* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bitswap8[ctree[i]]>>(8-cleni);\n\t\t\tfor(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<*/ = [];\n\tmaxlen = 1;\n\tfor(; hcodes.length < _HLIT + _HDIST;) {\n\t\tccode = dyn_cmap[read_bits_7(data, boff)];\n\t\tboff += ccode & 7;\n\t\tswitch((ccode >>>= 3)) {\n\t\t\tcase 16:\n\t\t\t\tw = 3 + read_bits_2(data, boff); boff += 2;\n\t\t\t\tccode = hcodes[hcodes.length - 1];\n\t\t\t\twhile(w-- > 0) hcodes.push(ccode);\n\t\t\t\tbreak;\n\t\t\tcase 17:\n\t\t\t\tw = 3 + read_bits_3(data, boff); boff += 3;\n\t\t\t\twhile(w-- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tcase 18:\n\t\t\t\tw = 11 + read_bits_7(data, boff); boff += 7;\n\t\t\t\twhile(w -- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thcodes.push(ccode);\n\t\t\t\tif(maxlen < ccode) maxlen = ccode;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* build literal / length trees */\n\tvar h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);\n\tfor(i = _HLIT; i < 286; ++i) h1[i] = 0;\n\tfor(i = _HDIST; i < 30; ++i) h2[i] = 0;\n\tdyn_len_1 = build_tree(h1, dyn_lmap, 286);\n\tdyn_len_2 = build_tree(h2, dyn_dmap, 30);\n\treturn boff;\n}\n\n/* return [ data, bytesRead ] */\nfunction inflate(data, usz/*:number*/) {\n\t/* shortcircuit for empty buffer [0x03, 0x00] */\n\tif(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }\n\n\t/* bit offset */\n\tvar boff = 0;\n\n\t/* header includes final bit and type bits */\n\tvar header = 0;\n\n\tvar outbuf = new_unsafe_buf(usz ? usz : (1<<18));\n\tvar woff = 0;\n\tvar OL = outbuf.length>>>0;\n\tvar max_len_1 = 0, max_len_2 = 0;\n\n\twhile((header&1) == 0) {\n\t\theader = read_bits_3(data, boff); boff += 3;\n\t\tif((header >>> 1) == 0) {\n\t\t\t/* Stored block */\n\t\t\tif(boff & 7) boff += 8 - (boff&7);\n\t\t\t/* 2 bytes sz, 2 bytes bit inverse */\n\t\t\tvar sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;\n\t\t\tboff += 32;\n\t\t\t/* push sz bytes */\n\t\t\tif(sz > 0) {\n\t\t\t\tif(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }\n\t\t\t\twhile(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }\n\t\t\t}\n\t\t\tcontinue;\n\t\t} else if((header >> 1) == 1) {\n\t\t\t/* Fixed Huffman */\n\t\t\tmax_len_1 = 9; max_len_2 = 5;\n\t\t} else {\n\t\t\t/* Dynamic Huffman */\n\t\t\tboff = dyn(data, boff);\n\t\t\tmax_len_1 = dyn_len_1; max_len_2 = dyn_len_2;\n\t\t}\n\t\tfor(;;) { // while(true) is apparently out of vogue in modern JS circles\n\t\t\tif(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }\n\t\t\t/* ingest code and move read head */\n\t\t\tvar bits = read_bits_n(data, boff, max_len_1);\n\t\t\tvar code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\t\t\tif(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;\n\t\t\telse if(code == 256) break;\n\t\t\telse {\n\t\t\t\tcode -= 257;\n\t\t\t\tvar len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;\n\t\t\t\tvar tgt = woff + LEN_LN[code];\n\t\t\t\t/* length extra bits */\n\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\ttgt += read_bits_n(data, boff, len_eb);\n\t\t\t\t\tboff += len_eb;\n\t\t\t\t}\n\n\t\t\t\t/* dist code */\n\t\t\t\tbits = read_bits_n(data, boff, max_len_2);\n\t\t\t\tcode = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n\t\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t\tvar dst_eb = (code < 4 ? 0 : (code-2)>>1);\n\t\t\t\tvar dst = DST_LN[code];\n\t\t\t\t/* dist extra bits */\n\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\tdst += read_bits_n(data, boff, dst_eb);\n\t\t\t\t\tboff += dst_eb;\n\t\t\t\t}\n\n\t\t\t\t/* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\t\t\t\tif(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt + 100); OL = outbuf.length; }\n\t\t\t\twhile(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }\n\t\t\t}\n\t\t}\n\t}\n\tif(usz) return [outbuf, (boff+7)>>>3];\n\treturn [outbuf.slice(0, woff), (boff+7)>>>3];\n}\n\nfunction _inflate(payload, usz) {\n\tvar data = payload.slice(payload.l||0);\n\tvar out = inflate(data, usz);\n\tpayload.l += out[1];\n\treturn out[0];\n}\n\nfunction warn_or_throw(wrn, msg) {\n\tif(wrn) { if(typeof console !== 'undefined') console.error(msg); }\n\telse throw new Error(msg);\n}\n\nfunction parse_zip(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tvar blob/*:CFBlob*/ = /*::(*/file/*:: :any)*/;\n\tprep_blob(blob, 0);\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o, { root: options.root });\n\n\t/* find end of central directory, start just after signature */\n\tvar i = blob.length - 4;\n\twhile((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;\n\tblob.l = i + 4;\n\n\t/* parse end of central directory */\n\tblob.l += 4;\n\tvar fcnt = blob.read_shift(2);\n\tblob.l += 6;\n\tvar start_cd = blob.read_shift(4);\n\n\t/* parse central directory */\n\tblob.l = start_cd;\n\n\tfor(i = 0; i < fcnt; ++i) {\n\t\t/* trust local file header instead of CD entry */\n\t\tblob.l += 20;\n\t\tvar csz = blob.read_shift(4);\n\t\tvar usz = blob.read_shift(4);\n\t\tvar namelen = blob.read_shift(2);\n\t\tvar efsz = blob.read_shift(2);\n\t\tvar fcsz = blob.read_shift(2);\n\t\tblob.l += 8;\n\t\tvar offset = blob.read_shift(4);\n\t\tvar EF = parse_extra_field(/*::(*/blob.slice(blob.l+namelen, blob.l+namelen+efsz)/*:: :any)*/);\n\t\tblob.l += namelen + efsz + fcsz;\n\n\t\tvar L = blob.l;\n\t\tblob.l = offset + 4;\n\t\t/* ZIP64 lengths */\n\t\tif(EF && EF[0x0001]) {\n\t\t\tif((EF[0x0001]||{}).usz) usz = EF[0x0001].usz;\n\t\t\tif((EF[0x0001]||{}).csz) csz = EF[0x0001].csz;\n\t\t}\n\t\tparse_local_file(blob, csz, usz, o, EF);\n\t\tblob.l = L;\n\t}\n\n\treturn o;\n}\n\n\n/* head starts just after local file header signature */\nfunction parse_local_file(blob/*:CFBlob*/, csz/*:number*/, usz/*:number*/, o/*:CFBContainer*/, EF) {\n\t/* [local file header] */\n\tblob.l += 2;\n\tvar flags = blob.read_shift(2);\n\tvar meth = blob.read_shift(2);\n\tvar date = parse_dos_date(blob);\n\n\tif(flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n\tvar crc32 = blob.read_shift(4);\n\tvar _csz = blob.read_shift(4);\n\tvar _usz = blob.read_shift(4);\n\n\tvar namelen = blob.read_shift(2);\n\tvar efsz = blob.read_shift(2);\n\n\t// TODO: flags & (1<<11) // UTF8\n\tvar name = \"\"; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);\n\tif(efsz) {\n\t\tvar ef = parse_extra_field(/*::(*/blob.slice(blob.l, blob.l + efsz)/*:: :any)*/);\n\t\tif((ef[0x5455]||{}).mt) date = ef[0x5455].mt;\n\t\tif((ef[0x0001]||{}).usz) _usz = ef[0x0001].usz;\n\t\tif((ef[0x0001]||{}).csz) _csz = ef[0x0001].csz;\n\t\tif(EF) {\n\t\t\tif((EF[0x5455]||{}).mt) date = EF[0x5455].mt;\n\t\t\tif((EF[0x0001]||{}).usz) _usz = ef[0x0001].usz;\n\t\t\tif((EF[0x0001]||{}).csz) _csz = ef[0x0001].csz;\n\t\t}\n\t}\n\tblob.l += efsz;\n\n\t/* [encryption header] */\n\n\t/* [file data] */\n\tvar data = blob.slice(blob.l, blob.l + _csz);\n\tswitch(meth) {\n\t\tcase 8: data = _inflateRawSync(blob, _usz); break;\n\t\tcase 0: break; // TODO: scan for magic number\n\t\tdefault: throw new Error(\"Unsupported ZIP Compression method \" + meth);\n\t}\n\n\t/* [data descriptor] */\n\tvar wrn = false;\n\tif(flags & 8) {\n\t\tcrc32 = blob.read_shift(4);\n\t\tif(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }\n\t\t_csz = blob.read_shift(4);\n\t\t_usz = blob.read_shift(4);\n\t}\n\n\tif(_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n\tif(_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\t//var _crc32 = CRC32.buf(data, 0);\n\t//if((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\tcfb_add(o, name, data, {unsafe: true, mt: date});\n}\nfunction write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/ {\n\tvar _opts = options || {};\n\tvar out = [], cdirs = [];\n\tvar o/*:CFBlob*/ = new_buf(1);\n\tvar method = (_opts.compression ? 8 : 0), flags = 0;\n\tvar desc = false;\n\tif(desc) flags |= 8;\n\tvar i = 0, j = 0;\n\n\tvar start_cd = 0, fcnt = 0;\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tvar crcs = [];\n\tvar sz_cd = 0;\n\n\tfor(i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\t\tvar start = start_cd;\n\n\t\t/* TODO: CP437 filename */\n\t\tvar namebuf = new_buf(fp.length);\n\t\tfor(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n\t\tnamebuf = namebuf.slice(0, namebuf.l);\n\t\tcrcs[fcnt] = typeof fi.content == \"string\" ? CRC32.bstr(fi.content, 0) : CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);\n\n\t\tvar outbuf = typeof fi.content == \"string\" ? s2a(fi.content) : fi.content/*::||[]*/;\n\t\tif(method == 8) outbuf = _deflateRawSync(outbuf);\n\n\t\t/* local file header */\n\t\to = new_buf(30);\n\t\to.write_shift(4, 0x04034b50);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\t/* TODO: last mod file time/date */\n\t\tif(fi.mt) write_dos_date(o, fi.mt);\n\t\telse o.write_shift(4, 0);\n\t\to.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);\n\t\to.write_shift(4, (flags & 8) ? 0 : outbuf.length);\n\t\to.write_shift(4, (flags & 8) ? 0 : /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\n\t\tstart_cd += o.length;\n\t\tout.push(o);\n\t\tstart_cd += namebuf.length;\n\t\tout.push(namebuf);\n\n\t\t/* TODO: extra fields? */\n\n\t\t/* TODO: encryption header ? */\n\n\t\tstart_cd += outbuf.length;\n\t\tout.push(outbuf);\n\n\t\t/* data descriptor */\n\t\tif(flags & 8) {\n\t\t\to = new_buf(12);\n\t\t\to.write_shift(-4, crcs[fcnt]);\n\t\t\to.write_shift(4, outbuf.length);\n\t\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\t\tstart_cd += o.l;\n\t\t\tout.push(o);\n\t\t}\n\n\t\t/* central directory */\n\t\to = new_buf(46);\n\t\to.write_shift(4, 0x02014b50);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\to.write_shift(4, 0); /* TODO: last mod file time/date */\n\t\to.write_shift(-4, crcs[fcnt]);\n\n\t\to.write_shift(4, outbuf.length);\n\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, start);\n\n\t\tsz_cd += o.l;\n\t\tcdirs.push(o);\n\t\tsz_cd += namebuf.length;\n\t\tcdirs.push(namebuf);\n\t\t++fcnt;\n\t}\n\n\t/* end of central directory */\n\to = new_buf(22);\n\to.write_shift(4, 0x06054b50);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, fcnt);\n\to.write_shift(2, fcnt);\n\to.write_shift(4, sz_cd);\n\to.write_shift(4, start_cd);\n\to.write_shift(2, 0);\n\n\treturn bconcat(([bconcat((out/*:any*/)), bconcat(cdirs), o]/*:any*/));\n}\nvar ContentTypeMap = ({\n\t\"htm\": \"text/html\",\n\t\"xml\": \"text/xml\",\n\n\t\"gif\": \"image/gif\",\n\t\"jpg\": \"image/jpeg\",\n\t\"png\": \"image/png\",\n\n\t\"mso\": \"application/x-mso\",\n\t\"thmx\": \"application/vnd.ms-officetheme\",\n\t\"sh33tj5\": \"application/octet-stream\"\n}/*:any*/);\n\nfunction get_content_type(fi/*:CFBEntry*/, fp/*:string*/)/*:string*/ {\n\tif(fi.ctype) return fi.ctype;\n\n\tvar ext = fi.name || \"\", m = ext.match(/\\.([^\\.]+)$/);\n\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\n\tif(fp) {\n\t\tm = (ext = fp).match(/[\\.\\\\]([^\\.\\\\])+$/);\n\t\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\t}\n\n\treturn \"application/octet-stream\";\n}\n\n/* 76 character chunks TODO: intertwine encoding */\nfunction write_base64_76(bstr/*:string*/)/*:string*/ {\n\tvar data = Base64_encode(bstr);\n\tvar o = [];\n\tfor(var i = 0; i < data.length; i+= 76) o.push(data.slice(i, i+76));\n\treturn o.join(\"\\r\\n\") + \"\\r\\n\";\n}\n\n/*\nRules for QP:\n\t- escape =## applies for all non-display characters and literal \"=\"\n\t- space or tab at end of line must be encoded\n\t- \\r\\n newlines can be preserved, but bare \\r and \\n must be escaped\n\t- lines must not exceed 76 characters, use soft breaks =\\r\\n\n\nTODO: Some files from word appear to write line extensions with bare equals:\n\n```\n*/ = [], split = encoded.split(\"\\r\\n\");\n\tfor(var si = 0; si < split.length; ++si) {\n\t\tvar str = split[si];\n\t\tif(str.length == 0) { o.push(\"\"); continue; }\n\t\tfor(var i = 0; i < str.length;) {\n\t\t\tvar end = 76;\n\t\t\tvar tmp = str.slice(i, i + end);\n\t\t\tif(tmp.charAt(end - 1) == \"=\") end --;\n\t\t\telse if(tmp.charAt(end - 2) == \"=\") end -= 2;\n\t\t\telse if(tmp.charAt(end - 3) == \"=\") end -= 3;\n\t\t\ttmp = str.slice(i, i + end);\n\t\t\ti += end;\n\t\t\tif(i < str.length) tmp += \"=\";\n\t\t\to.push(tmp);\n\t\t}\n\t}\n\n\treturn o.join(\"\\r\\n\");\n}\nfunction parse_quoted_printable(data/*:Array*/)/*:RawBytes*/ {\n\tvar o = [];\n\n\t/* unify long lines */\n\tfor(var di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\twhile(di <= data.length && line.charAt(line.length - 1) == \"=\") line = line.slice(0, line.length - 1) + data[++di];\n\t\to.push(line);\n\t}\n\n\t/* decode */\n\tfor(var oi = 0; oi < o.length; ++oi) o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function($$) { return String.fromCharCode(parseInt($$.slice(1), 16)); });\n\treturn s2a(o.join(\"\\r\\n\"));\n}\n\n\nfunction parse_mime(cfb/*:CFBContainer*/, data/*:Array*/, root/*:string*/)/*:void*/ {\n\tvar fname = \"\", cte = \"\", ctype = \"\", fdata;\n\tvar di = 0;\n\tfor(;di < 10; ++di) {\n\t\tvar line = data[di];\n\t\tif(!line || line.match(/^\\s*$/)) break;\n\t\tvar m = line.match(/^(.*?):\\s*([^\\s].*)$/);\n\t\tif(m) switch(m[1].toLowerCase()) {\n\t\t\tcase \"content-location\": fname = m[2].trim(); break;\n\t\t\tcase \"content-type\": ctype = m[2].trim(); break;\n\t\t\tcase \"content-transfer-encoding\": cte = m[2].trim(); break;\n\t\t}\n\t}\n\t++di;\n\tswitch(cte.toLowerCase()) {\n\t\tcase 'base64': fdata = s2a(Base64_decode(data.slice(di).join(\"\"))); break;\n\t\tcase 'quoted-printable': fdata = parse_quoted_printable(data.slice(di)); break;\n\t\tdefault: throw new Error(\"Unsupported Content-Transfer-Encoding \" + cte);\n\t}\n\tvar file = cfb_add(cfb, fname.slice(root.length), fdata, {unsafe: true});\n\tif(ctype) file.ctype = ctype;\n}\n\nfunction parse_mad(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tif(a2s(file.slice(0,13)).toLowerCase() != \"mime-version:\") throw new Error(\"Unsupported MAD header\");\n\tvar root = (options && options.root || \"\");\n\t// $FlowIgnore\n\tvar data = (has_buf && Buffer.isBuffer(file) ? file.toString(\"binary\") : a2s(file)).split(\"\\r\\n\");\n\tvar di = 0, row = \"\";\n\n\t/* if root is not specified, scan for the common prefix */\n\tfor(di = 0; di < data.length; ++di) {\n\t\trow = data[di];\n\t\tif(!/^Content-Location:/i.test(row)) continue;\n\t\trow = row.slice(row.indexOf(\"file\"));\n\t\tif(!root) root = row.slice(0, row.lastIndexOf(\"/\") + 1);\n\t\tif(row.slice(0, root.length) == root) continue;\n\t\twhile(root.length > 0) {\n\t\t\troot = root.slice(0, root.length - 1);\n\t\t\troot = root.slice(0, root.lastIndexOf(\"/\") + 1);\n\t\t\tif(row.slice(0,root.length) == root) break;\n\t\t}\n\t}\n\n\tvar mboundary = (data[1] || \"\").match(/boundary=\"(.*?)\"/);\n\tif(!mboundary) throw new Error(\"MAD cannot find boundary\");\n\tvar boundary = \"--\" + (mboundary[1] || \"\");\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o);\n\tvar start_di, fcnt = 0;\n\tfor(di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\tif(line !== boundary && line !== boundary + \"--\") continue;\n\t\tif(fcnt++) parse_mime(o, data.slice(start_di, di), root);\n\t\tstart_di = di;\n\t}\n\treturn o;\n}\n\nfunction write_mad(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:string*/ {\n\tvar opts = options || {};\n\tvar boundary = opts.boundary || \"SheetJS\";\n\tboundary = '------=' + boundary;\n\n\tvar out = [\n\t\t'MIME-Version: 1.0',\n\t\t'Content-Type: multipart/related; boundary=\"' + boundary.slice(2) + '\"',\n\t\t'',\n\t\t'',\n\t\t''\n\t];\n\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tfor(var i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length);\n\t\tfi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\n\t\t/* Normalize filename */\n\t\tfp = fp.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF]/g, function(c) {\n\t\t\treturn \"_x\" + c.charCodeAt(0).toString(16) + \"_\";\n\t\t}).replace(/[\\u0080-\\uFFFF]/g, function(u) {\n\t\t\treturn \"_u\" + u.charCodeAt(0).toString(16) + \"_\";\n\t\t});\n\n\t\t/* Extract content as binary string */\n\t\tvar ca = fi.content;\n\t\t// $FlowIgnore\n\t\tvar cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString(\"binary\") : a2s(ca);\n\n\t\t/* 4/5 of first 1024 chars ascii -> quoted printable, else base64 */\n\t\tvar dispcnt = 0, L = Math.min(1024, cstr.length), cc = 0;\n\t\tfor(var csl = 0; csl <= L; ++csl) if((cc=cstr.charCodeAt(csl)) >= 0x20 && cc < 0x80) ++dispcnt;\n\t\tvar qp = dispcnt >= L * 4 / 5;\n\n\t\tout.push(boundary);\n\t\tout.push('Content-Location: ' + (opts.root || 'file:///C:/SheetJS/') + fp);\n\t\tout.push('Content-Transfer-Encoding: ' + (qp ? 'quoted-printable' : 'base64'));\n\t\tout.push('Content-Type: ' + get_content_type(fi, fp));\n\t\tout.push('');\n\n\t\tout.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));\n\t}\n\tout.push(boundary + '--\\r\\n');\n\treturn out.join(\"\\r\\n\");\n}\nfunction cfb_new(opts/*:?any*/)/*:CFBContainer*/ {\n\tvar o/*:CFBContainer*/ = ({}/*:any*/);\n\tinit_cfb(o, opts);\n\treturn o;\n}\n\nfunction cfb_add(cfb/*:CFBContainer*/, name/*:string*/, content/*:?RawBytes*/, opts/*:?any*/)/*:CFBEntry*/ {\n\tvar unsafe = opts && opts.unsafe;\n\tif(!unsafe) init_cfb(cfb);\n\tvar file = !unsafe && CFB.find(cfb, name);\n\tif(!file) {\n\t\tvar fpath/*:string*/ = cfb.FullPaths[0];\n\t\tif(name.slice(0, fpath.length) == fpath) fpath = name;\n\t\telse {\n\t\t\tif(fpath.slice(-1) != \"/\") fpath += \"/\";\n\t\t\tfpath = (fpath + name).replace(\"//\",\"/\");\n\t\t}\n\t\tfile = ({name: filename(name), type: 2}/*:any*/);\n\t\tcfb.FileIndex.push(file);\n\t\tcfb.FullPaths.push(fpath);\n\t\tif(!unsafe) CFB.utils.cfb_gc(cfb);\n\t}\n\t/*:: if(!file) throw new Error(\"unreachable\"); */\n\tfile.content = (content/*:any*/);\n\tfile.size = content ? content.length : 0;\n\tif(opts) {\n\t\tif(opts.CLSID) file.clsid = opts.CLSID;\n\t\tif(opts.mt) file.mt = opts.mt;\n\t\tif(opts.ct) file.ct = opts.ct;\n\t}\n\treturn file;\n}\n\nfunction cfb_del(cfb/*:CFBContainer*/, name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex.splice(j, 1);\n\t\tcfb.FullPaths.splice(j, 1);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_mov(cfb/*:CFBContainer*/, old_name/*:string*/, new_name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, old_name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex[j].name = filename(new_name);\n\t\tcfb.FullPaths[j] = new_name;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_gc(cfb/*:CFBContainer*/)/*:void*/ { rebuild_cfb(cfb, true); }\n\nexports.find = find;\nexports.read = read;\nexports.parse = parse;\nexports.write = write;\nexports.writeFile = write_file;\nexports.utils = {\n\tcfb_new: cfb_new,\n\tcfb_add: cfb_add,\n\tcfb_del: cfb_del,\n\tcfb_mov: cfb_mov,\n\tcfb_gc: cfb_gc,\n\tReadShift: ReadShift,\n\tCheckField: CheckField,\n\tprep_blob: prep_blob,\n\tbconcat: bconcat,\n\tuse_zlib: use_zlib,\n\t_deflateRaw: _deflate,\n\t_inflateRaw: _inflate,\n\tconsts: consts\n};\n\nreturn exports;\n})();\n\nvar _fs;\nfunction set_fs(fs) { _fs = fs; }\n\n/* normalize data for blob ctor */\nfunction blobify(data) {\n\tif(typeof data === \"string\") return s2ab(data);\n\tif(Array.isArray(data)) return a2u(data);\n\treturn data;\n}\n/* write or download file */\nfunction write_dl(fname/*:string*/, payload/*:any*/, enc/*:?string*/) {\n\t/*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n\tif(typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n\tif(typeof Deno !== 'undefined') {\n\t\t/* in this spot, it's safe to assume typed arrays and TextEncoder/TextDecoder exist */\n\t\tif(enc && typeof payload == \"string\") switch(enc) {\n\t\t\tcase \"utf8\": payload = new TextEncoder(enc).encode(payload); break;\n\t\t\tcase \"binary\": payload = s2ab(payload); break;\n\t\t\t/* TODO: binary equivalent */\n\t\t\tdefault: throw new Error(\"Unsupported encoding \" + enc);\n\t\t}\n\t\treturn Deno.writeFileSync(fname, payload);\n\t}\n\tvar data = (enc == \"utf8\") ? utf8write(payload) : payload;\n\t/*:: declare var IE_SaveFile: any; */\n\tif(typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\tif(typeof Blob !== 'undefined') {\n\t\tvar blob = new Blob([blobify(data)], {type:\"application/octet-stream\"});\n\t\t/*:: declare var navigator: any; */\n\t\tif(typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\n\t\t/*:: declare var saveAs: any; */\n\t\tif(typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\t\tif(typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n\t\t\tvar url = URL.createObjectURL(blob);\n\t\t\t/*:: declare var chrome: any; */\n\t\t\tif(typeof chrome === 'object' && typeof (chrome.downloads||{}).download == \"function\") {\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn chrome.downloads.download({ url: url, filename: fname, saveAs: true});\n\t\t\t}\n\t\t\tvar a = document.createElement(\"a\");\n\t\t\tif(a.download != null) {\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */\n\t\t\t\ta.download = fname; a.href = url; document.body.appendChild(a); a.click();\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */ document.body.removeChild(a);\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn url;\n\t\t\t}\n\t\t}\n\t}\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar out = File(fname); out.open(\"w\"); out.encoding = \"binary\";\n\t\tif(Array.isArray(payload)) payload = a2s(payload);\n\t\tout.write(payload); out.close(); return payload;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"cannot save file \" + fname);\n}\n\n/* read binary data from file */\nfunction read_binary(path/*:string*/) {\n\tif(typeof _fs !== 'undefined') return _fs.readFileSync(path);\n\tif(typeof Deno !== 'undefined') return Deno.readFileSync(path);\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar infile = File(path); infile.open(\"r\"); infile.encoding = \"binary\";\n\t\tvar data = infile.read(); infile.close();\n\t\treturn data;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"Cannot access file \" + path);\n}\nfunction keys(o/*:any*/)/*:Array*/ {\n\tvar ks = Object.keys(o), o2 = [];\n\tfor(var i = 0; i < ks.length; ++i) if(Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n\treturn o2;\n}\n\nfunction evert_key(obj/*:any*/, key/*:string*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) if(o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n\treturn o;\n}\n\nfunction evert(obj/*:any*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];\n\treturn o;\n}\n\nfunction evert_num(obj/*:any*/)/*:EvertNumType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);\n\treturn o;\n}\n\nfunction evert_arr(obj/*:any*/)/*:EvertArrType*/ {\n\tvar o/*:EvertArrType*/ = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) {\n\t\tif(o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n\t\to[obj[K[i]]].push(K[i]);\n\t}\n\treturn o;\n}\n\nvar basedate = /*#__PURE__*/new Date(1899, 11, 30, 0, 0, 0); // 2209161600000\nfunction datenum(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = /*#__PURE__*/v.getTime();\n\tif(date1904) epoch -= 1462*24*60*60*1000;\n\tvar dnthresh = /*#__PURE__*/basedate.getTime() + (/*#__PURE__*/v.getTimezoneOffset() - /*#__PURE__*/basedate.getTimezoneOffset()) * 60000;\n\treturn (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n}\nvar refdate = /*#__PURE__*/new Date();\nvar dnthresh = /*#__PURE__*/basedate.getTime() + (/*#__PURE__*/refdate.getTimezoneOffset() - /*#__PURE__*/basedate.getTimezoneOffset()) * 60000;\nvar refoffset = /*#__PURE__*/refdate.getTimezoneOffset();\nfunction numdate(v/*:number*/)/*:Date*/ {\n\tvar out = new Date();\n\tout.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);\n\tif (out.getTimezoneOffset() !== refoffset) {\n\t\tout.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 60000);\n\t}\n\treturn out;\n}\n\n/* ISO 8601 Duration */\nfunction parse_isodur(s) {\n\tvar sec = 0, mt = 0, time = false;\n\tvar m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n\tif(!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\tfor(var i = 1; i != m.length; ++i) {\n\t\tif(!m[i]) continue;\n\t\tmt = 1;\n\t\tif(i > 3) time = true;\n\t\tswitch(m[i].slice(m[i].length-1)) {\n\t\t\tcase 'Y':\n\t\t\t\tthrow new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length-1));\n\t\t\tcase 'D': mt *= 24;\n\t\t\t\t/* falls through */\n\t\t\tcase 'H': mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M':\n\t\t\t\tif(!time) throw new Error(\"Unsupported ISO Duration Field: M\");\n\t\t\t\telse mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'S': break;\n\t\t}\n\t\tsec += mt * parseInt(m[i], 10);\n\t}\n\treturn sec;\n}\n\nvar good_pd_date_1 = /*#__PURE__*/new Date('2017-02-19T19:06:09.000Z');\nvar good_pd_date = /*#__PURE__*/isNaN(/*#__PURE__*/good_pd_date_1.getFullYear()) ? /*#__PURE__*/new Date('2/19/17') : good_pd_date_1;\nvar good_pd = /*#__PURE__*/good_pd_date.getFullYear() == 2017;\n/* parses a date as a local date */\nfunction parseDate(str/*:string|Date*/, fixdate/*:?number*/)/*:Date*/ {\n\tvar d = new Date(str);\n\tif(good_pd) {\n\t\t/*:: if(fixdate == null) fixdate = 0; */\n\t\tif(fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);\n\t\telse if(fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);\n\t\treturn d;\n\t}\n\tif(str instanceof Date) return str;\n\tif(good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {\n\t\tvar s = d.getFullYear();\n\t\tif(str.indexOf(\"\" + s) > -1) return d;\n\t\td.setFullYear(d.getFullYear() + 100); return d;\n\t}\n\tvar n = str.match(/\\d+/g)||[\"2017\",\"2\",\"19\",\"0\",\"0\",\"0\"];\n\tvar out = new Date(+n[0], +n[1] - 1, +n[2], (+n[3]||0), (+n[4]||0), (+n[5]||0));\n\tif(str.indexOf(\"Z\") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000);\n\treturn out;\n}\n\nfunction cc2str(arr/*:Array*/, debomit)/*:string*/ {\n\tif(has_buf && Buffer.isBuffer(arr)) {\n\t\tif(debomit && buf_utf16le) {\n\t\t\t// TODO: temporary patch\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(arr.slice(2).toString(\"utf16le\"));\n\t\t\tif(arr[1] == 0xFE && arr[2] == 0xFF) return utf8write(utf16beread(arr.slice(2).toString(\"binary\")));\n\t\t}\n\t\treturn arr.toString(\"binary\");\n\t}\n\n\tif(typeof TextDecoder !== \"undefined\") try {\n\t\tif(debomit) {\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(new TextDecoder(\"utf-16le\").decode(arr.slice(2)));\n\t\t\tif(arr[0] == 0xFE && arr[1] == 0xFF) return utf8write(new TextDecoder(\"utf-16be\").decode(arr.slice(2)));\n\t\t}\n\t\tvar rev = {\n\t\t\t\"\\u20ac\": \"\\x80\", \"\\u201a\": \"\\x82\", \"\\u0192\": \"\\x83\", \"\\u201e\": \"\\x84\",\n\t\t\t\"\\u2026\": \"\\x85\", \"\\u2020\": \"\\x86\", \"\\u2021\": \"\\x87\", \"\\u02c6\": \"\\x88\",\n\t\t\t\"\\u2030\": \"\\x89\", \"\\u0160\": \"\\x8a\", \"\\u2039\": \"\\x8b\", \"\\u0152\": \"\\x8c\",\n\t\t\t\"\\u017d\": \"\\x8e\", \"\\u2018\": \"\\x91\", \"\\u2019\": \"\\x92\", \"\\u201c\": \"\\x93\",\n\t\t\t\"\\u201d\": \"\\x94\", \"\\u2022\": \"\\x95\", \"\\u2013\": \"\\x96\", \"\\u2014\": \"\\x97\",\n\t\t\t\"\\u02dc\": \"\\x98\", \"\\u2122\": \"\\x99\", \"\\u0161\": \"\\x9a\", \"\\u203a\": \"\\x9b\",\n\t\t\t\"\\u0153\": \"\\x9c\", \"\\u017e\": \"\\x9e\", \"\\u0178\": \"\\x9f\"\n\t\t};\n\t\tif(Array.isArray(arr)) arr = new Uint8Array(arr);\n\t\treturn new TextDecoder(\"latin1\").decode(arr).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g, function(c) { return rev[c] || c; });\n\t} catch(e) {}\n\n\tvar o = [];\n\tfor(var i = 0; i != arr.length; ++i) o.push(String.fromCharCode(arr[i]));\n\treturn o.join(\"\");\n}\n\nfunction dup(o/*:any*/)/*:any*/ {\n\tif(typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n\tif(typeof o != 'object' || o == null) return o;\n\tif(o instanceof Date) return new Date(o.getTime());\n\tvar out = {};\n\tfor(var k in o) if(Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n\treturn out;\n}\n\nfunction fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = \"\"; while(o.length < l) o+=c; return o; }\n\n/* TODO: stress test */\nfunction fuzzynum(s/*:string*/)/*:number*/ {\n\tvar v/*:number*/ = Number(s);\n\tif(!isNaN(v)) return isFinite(v) ? v : NaN;\n\tif(!/\\d/.test(s)) return v;\n\tvar wt = 1;\n\tvar ss = s.replace(/([\\d]),([\\d])/g,\"$1$2\").replace(/[$]/g,\"\").replace(/[%]/g, function() { wt *= 100; return \"\";});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\tss = ss.replace(/[(](.*)[)]/,function($$, $1) { wt = -wt; return $1;});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\treturn v;\n}\n\n/* NOTE: Chrome rejects bare times like 1:23 PM */\nvar FDRE1 = /^(0?\\d|1[0-2])(?:|:([0-5]?\\d)(?:|(\\.\\d+)(?:|:([0-5]?\\d))|:([0-5]?\\d)(|\\.\\d+)))\\s+([ap])m?$/;\n\nfunction fuzzytime1(M) /*:Date*/ {\n /* TODO: 1904 adjustment, keep in sync with base date */\n if(!M[2]) return new Date(1899,11,30,(+M[1]%12) + (M[7] == \"p\" ? 12 : 0), 0, 0, 0);\n if(M[3]) {\n if(M[4]) return new Date(1899,11,30,(+M[1]%12) + (M[7] == \"p\" ? 12 : 0), +M[2], +M[4], parseFloat(M[3])*1000);\n else return new Date(1899,11,30,(M[7] == \"p\" ? 12 : 0), +M[1], +M[2], parseFloat(M[3])*1000);\n }\n else if(M[5]) return new Date(1899,11,30, (+M[1]%12) + (M[7] == \"p\" ? 12 : 0), +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1000 : 0);\n else return new Date(1899,11,30,(+M[1]%12) + (M[7] == \"p\" ? 12 : 0), +M[2], 0, 0);\n}\nvar lower_months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];\nfunction fuzzydate(s/*:string*/)/*:Date*/ {\n\tvar lower = s.toLowerCase();\n\tvar lnos = lower.replace(/\\s+/g, \" \").trim();\n\tvar M = lnos.match(FDRE1);\n\tif(M) return fuzzytime1(M);\n\n\tvar o = new Date(s), n = new Date(NaN);\n\tvar y = o.getYear(), m = o.getMonth(), d = o.getDate();\n\tif(isNaN(d)) return n;\n\tif(lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {\n\t\tlower = lower.replace(/[^a-z]/g,\"\").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/,\"\");\n\t\tif(lower.length > 3 && lower_months.indexOf(lower) == -1) return n;\n\t} else if(lower.replace(/[ap]m?/, \"\").match(/[a-z]/)) return n;\n\tif(y < 0 || y > 8099 || s.match(/[^-0-9:,\\/\\\\]/)) return n;\n\treturn o;\n}\n\nvar split_regex = /*#__PURE__*/(function() {\n\tvar safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\n\treturn function split_regex(str/*:string*/, re, def/*:string*/)/*:Array*/ {\n\t\tif(safe_split_regex || typeof re == \"string\") return str.split(re);\n\t\tvar p = str.split(re), o = [p[0]];\n\t\tfor(var i = 1; i < p.length; ++i) { o.push(def); o.push(p[i]); }\n\t\treturn o;\n\t};\n})();\nfunction getdatastr(data)/*:?string*/ {\n\tif(!data) return null;\n\tif(data.content && data.type) return cc2str(data.content, true);\n\tif(data.data) return debom(data.data);\n\tif(data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n\tif(data.asBinary) return debom(data.asBinary());\n\tif(data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));\n\treturn null;\n}\n\nfunction getdatabin(data) {\n\tif(!data) return null;\n\tif(data.data) return char_codes(data.data);\n\tif(data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\tif(data._data && data._data.getContent) {\n\t\tvar o = data._data.getContent();\n\t\tif(typeof o == \"string\") return char_codes(o);\n\t\treturn Array.prototype.slice.call(o);\n\t}\n\tif(data.content && data.type) return data.content;\n\treturn null;\n}\n\nfunction getdata(data) { return (data && data.name.slice(-4) === \".bin\") ? getdatabin(data) : getdatastr(data); }\n\n/* Part 2 Section 10.1.2 \"Mapping Content Types\" Names are case-insensitive */\n/* OASIS does not comment on filename case sensitivity */\nfunction safegetzipfile(zip, file/*:string*/) {\n\tvar k = zip.FullPaths || keys(zip.files);\n\tvar f = file.toLowerCase().replace(/[\\/]/g, '\\\\'), g = f.replace(/\\\\/g,'\\/');\n\tfor(var i=0; i\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\nvar tagregex1=/<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\">\\s=]+))*\\s*[\\/\\?]?>/mg, tagregex2 = /<[^>]*>/g;\nvar tagregex = /*#__PURE__*/XML_HEADER.match(tagregex1) ? tagregex1 : tagregex2;\nvar nsregex=/<\\w*:/, nsregex2 = /<(\\/?)\\w+:/;\nfunction parsexmltag(tag/*:string*/, skip_root/*:?boolean*/, skip_LC/*:?boolean*/)/*:any*/ {\n\tvar z = ({}/*:any*/);\n\tvar eq = 0, c = 0;\n\tfor(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n\tif(!skip_root) z[0] = tag.slice(0, eq);\n\tif(eq === tag.length) return z;\n\tvar m = tag.match(attregexg), j=0, v=\"\", i=0, q=\"\", cc=\"\", quot = 1;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\tcc = m[i];\n\t\tfor(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;\n\t\tq = cc.slice(0,c).trim();\n\t\twhile(cc.charCodeAt(c+1) == 32) ++c;\n\t\tquot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;\n\t\tv = cc.slice(c+1+quot, cc.length-quot);\n\t\tfor(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;\n\t\tif(j===q.length) {\n\t\t\tif(q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\t\t\tz[q] = v;\n\t\t\tif(!skip_LC) z[q.toLowerCase()] = v;\n\t\t}\n\t\telse {\n\t\t\tvar k = (j===5 && q.slice(0,5)===\"xmlns\"?\"xmlns\":\"\")+q.slice(j+1);\n\t\t\tif(z[k] && q.slice(j-3,j) == \"ext\") continue; // from ods\n\t\t\tz[k] = v;\n\t\t\tif(!skip_LC) z[k.toLowerCase()] = v;\n\t\t}\n\t}\n\treturn z;\n}\nfunction strip_ns(x/*:string*/)/*:string*/ { return x.replace(nsregex2, \"<$1\"); }\n\nvar encodings = {\n\t'"': '\"',\n\t''': \"'\",\n\t'>': '>',\n\t'<': '<',\n\t'&': '&'\n};\nvar rencoding = /*#__PURE__*/evert(encodings);\n//var rencstr = \"&<>'\\\"\".split(\"\");\n\n// TODO: CP remap (need to read file version to determine OS)\nvar unescapexml/*:StringConv*/ = /*#__PURE__*/(function() {\n\t/* 22.4.2.4 bstr (Basic String) */\n\tvar encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig, coderegex = /_x([\\da-fA-F]{4})_/ig;\n\tfunction raw_unescapexml(text/*:string*/)/*:string*/ {\n\t\tvar s = text + '', i = s.indexOf(\"-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});\n\t\tvar j = s.indexOf(\"]]>\");\n\t\treturn raw_unescapexml(s.slice(0, i)) + s.slice(i+9,j) + raw_unescapexml(s.slice(j+3));\n\t}\n\treturn function unescapexml(text/*:string*/, xlsx/*:boolean*/) {\n\t\tvar out = raw_unescapexml(text);\n\t\treturn xlsx ? out.replace(/\\r\\n/g, \"\\n\") : out;\n\t};\n})();\n\nvar decregex=/[&<>'\"]/g, charegex = /[\\u0000-\\u0008\\u000b-\\u001f\\uFFFE-\\uFFFF]/g;\nfunction escapexml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return \"_x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \"_\";});\n}\nfunction escapexmltag(text/*:string*/)/*:string*/{ return escapexml(text).replace(/ /g,\"_x0020_\"); }\n\nvar htmlcharegex = /[\\u0000-\\u001f]/g;\nfunction escapehtml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(/\\n/g, \"
\").replace(htmlcharegex,function(s) { return \"&#x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \";\"; });\n}\n\nfunction escapexlml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return \"&#x\" + (s.charCodeAt(0).toString(16)).toUpperCase() + \";\"; });\n}\n\n/* TODO: handle codepages */\nvar xlml_fixstr/*:StringConv*/ = /*#__PURE__*/(function() {\n\tvar entregex = /&#(\\d+);/g;\n\tfunction entrepl($$/*:string*/,$1/*:string*/)/*:string*/ { return String.fromCharCode(parseInt($1,10)); }\n\treturn function xlml_fixstr(str/*:string*/)/*:string*/ { return str.replace(entregex,entrepl); };\n})();\nfunction xlml_unfixstr(str/*:string*/)/*:string*/ { return str.replace(/(\\r\\n|[\\r\\n])/g,\"\\ \"); }\n\n/* note: xsd:boolean valid values: true / 1 / false / 0 */\nfunction parsexmlbool(value/*:any*/)/*:boolean*/ {\n\tswitch(value) {\n\t\tcase 1: case true: case '1': case 'true': return true;\n\t\tcase 0: case false: case '0': case 'false': return false;\n\t\t//default: throw new Error(\"Invalid xsd:boolean \" + value);\n\t}\n\treturn false;\n}\n\nfunction utf8reada(orig/*:string*/)/*:string*/ {\n\tvar out = \"\", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;\n\twhile (i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tif (c < 128) { out += String.fromCharCode(c); continue; }\n\t\td = orig.charCodeAt(i++);\n\t\tif (c>191 && c<224) { f = ((c & 31) << 6); f |= (d & 63); out += String.fromCharCode(f); continue; }\n\t\te = orig.charCodeAt(i++);\n\t\tif (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }\n\t\tf = orig.charCodeAt(i++);\n\t\tw = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;\n\t\tout += String.fromCharCode(0xD800 + ((w>>>10)&1023));\n\t\tout += String.fromCharCode(0xDC00 + (w&1023));\n\t}\n\treturn out;\n}\n\nfunction utf8readb(data) {\n\tvar out = new_raw_buf(2*data.length), w, i, j = 1, k = 0, ww=0, c;\n\tfor(i = 0; i < data.length; i+=j) {\n\t\tj = 1;\n\t\tif((c=data.charCodeAt(i)) < 128) w = c;\n\t\telse if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }\n\t\telse if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }\n\t\telse { j = 4;\n\t\t\tw = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);\n\t\t\tw -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);\n\t\t}\n\t\tif(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }\n\t\tout[k++] = w%256; out[k++] = w>>>8;\n\t}\n\treturn out.slice(0,k).toString('ucs2');\n}\n\nfunction utf8readc(data) { return Buffer_from(data, 'binary').toString('utf8'); }\n\nvar utf8corpus = \"foo bar baz\\u00e2\\u0098\\u0083\\u00f0\\u009f\\u008d\\u00a3\";\nvar utf8read = has_buf && (/*#__PURE__*/utf8readc(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readc || /*#__PURE__*/utf8readb(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readb) || utf8reada;\n\nvar utf8write/*:StringConv*/ = has_buf ? function(data) { return Buffer_from(data, 'utf8').toString(\"binary\"); } : function(orig/*:string*/)/*:string*/ {\n\tvar out/*:Array*/ = [], i = 0, c = 0, d = 0;\n\twhile(i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tswitch(true) {\n\t\t\tcase c < 128: out.push(String.fromCharCode(c)); break;\n\t\t\tcase c < 2048:\n\t\t\t\tout.push(String.fromCharCode(192 + (c >> 6)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t\t\tbreak;\n\t\t\tcase c >= 55296 && c < 57344:\n\t\t\t\tc -= 55296; d = orig.charCodeAt(i++) - 56320 + (c<<10);\n\t\t\t\tout.push(String.fromCharCode(240 + ((d >>18) & 7)));\n\t\t\t\tout.push(String.fromCharCode(144 + ((d >>12) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((d >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (d & 63)));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tout.push(String.fromCharCode(224 + (c >> 12)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((c >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t}\n\t}\n\treturn out.join(\"\");\n};\n\n// matches ... extracts content\nvar matchtag = /*#__PURE__*/(function() {\n\tvar mtcache/*:{[k:string]:RegExp}*/ = ({}/*:any*/);\n\treturn function matchtag(f/*:string*/,g/*:?string*/)/*:RegExp*/ {\n\t\tvar t = f+\"|\"+(g||\"\");\n\t\tif(mtcache[t]) return mtcache[t];\n\t\treturn (mtcache[t] = new RegExp('<(?:\\\\w+:)?'+f+'(?: xml:space=\"preserve\")?(?:[^>]*)>([\\\\s\\\\S]*?)',((g||\"\")/*:any*/)));\n\t};\n})();\n\nvar htmldecode/*:{(s:string):string}*/ = /*#__PURE__*/(function() {\n\tvar entities/*:Array<[RegExp, string]>*/ = [\n\t\t['nbsp', ' '], ['middot', '·'],\n\t\t['quot', '\"'], ['apos', \"'\"], ['gt', '>'], ['lt', '<'], ['amp', '&']\n\t].map(function(x/*:[string, string]*/) { return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]]; });\n\treturn function htmldecode(str/*:string*/)/*:string*/ {\n\t\tvar o = str\n\t\t\t\t// Remove new lines and spaces from start of content\n\t\t\t\t.replace(/^[\\t\\n\\r ]+/, \"\")\n\t\t\t\t// Remove new lines and spaces from end of content\n\t\t\t\t.replace(/[\\t\\n\\r ]+$/,\"\")\n\t\t\t\t// Added line which removes any white space characters after and before html tags\n\t\t\t\t.replace(/>\\s+/g,\">\").replace(/\\s+ tags with new lines\n\t\t\t\t.replace(/<\\s*[bB][rR]\\s*\\/?>/g,\"\\n\")\n\t\t\t\t// Strip HTML elements\n\t\t\t\t.replace(/<[^>]*>/g,\"\");\n\t\tfor(var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);\n\t\treturn o;\n\t};\n})();\n\nvar vtregex = /*#__PURE__*/(function(){ var vt_cache = {};\n\treturn function vt_regex(bt) {\n\t\tif(vt_cache[bt] !== undefined) return vt_cache[bt];\n\t\treturn (vt_cache[bt] = new RegExp(\"<(?:vt:)?\" + bt + \">([\\\\s\\\\S]*?)\", 'g') );\n};})();\nvar vtvregex = /<\\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^>]*)>([\\s\\S]*)*/ {\n\tvar h = parsexmltag(data);\n\n\tvar matches/*:Array*/ = data.match(vtregex(h.baseType))||[];\n\tvar res/*:Array*/ = [];\n\tif(matches.length != h.size) {\n\t\tif(opts.WTF) throw new Error(\"unexpected vector length \" + matches.length + \" != \" + h.size);\n\t\treturn res;\n\t}\n\tmatches.forEach(function(x/*:string*/) {\n\t\tvar v = x.replace(vtvregex,\"\").match(vtmregex);\n\t\tif(v) res.push({v:utf8read(v[2]), t:v[1]});\n\t});\n\treturn res;\n}\n\nvar wtregex = /(^\\s|\\s$|\\n)/;\nfunction writetag(f/*:string*/,g/*:string*/)/*:string*/ { return '<' + f + (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + ''; }\n\nfunction wxt_helper(h)/*:string*/ { return keys(h).map(function(k) { return \" \" + k + '=\"' + h[k] + '\"';}).join(\"\"); }\nfunction writextag(f/*:string*/,g/*:?string*/,h) { return '<' + f + ((h != null) ? wxt_helper(h) : \"\") + ((g != null) ? (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '';}\n\nfunction write_w3cdtf(d/*:Date*/, t/*:?boolean*/)/*:string*/ { try { return d.toISOString().replace(/\\.\\d*/,\"\"); } catch(e) { if(t) throw e; } return \"\"; }\n\nfunction write_vt(s, xlsx/*:?boolean*/)/*:string*/ {\n\tswitch(typeof s) {\n\t\tcase 'string':\n\t\t\tvar o = writextag('vt:lpwstr', escapexml(s));\n\t\t\tif(xlsx) o = o.replace(/"/g, \"_x0022_\");\n\t\t\treturn o;\n\t\tcase 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', escapexml(String(s)));\n\t\tcase 'boolean': return writextag('vt:bool',s?'true':'false');\n\t}\n\tif(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n\tthrow new Error(\"Unable to serialize \" + s);\n}\n\nfunction xlml_normalize(d)/*:string*/ {\n\tif(has_buf &&/*::typeof Buffer !== \"undefined\" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8');\n\tif(typeof d === 'string') return d;\n\t/* duktape */\n\tif(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n\tthrow new Error(\"Bad input format: expected Buffer or string\");\n}\n/* UOS uses CJK in tags */\nvar xlmlregex = /<(\\/?)([^\\s?>:\\/]+)(?:[\\s?:\\/](?:[^>=]|=\"[^\"]*?\")*)?>/mg;\n//var xlmlregex = /<(\\/?)([a-z0-9]*:|)(\\w+)[^>]*>/mg;\n\nvar XMLNS = ({\n\tCORE_PROPS: 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n\tCUST_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\",\n\tEXT_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\n\tCT: 'http://schemas.openxmlformats.org/package/2006/content-types',\n\tRELS: 'http://schemas.openxmlformats.org/package/2006/relationships',\n\tTCMNT: 'http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments',\n\t'dc': 'http://purl.org/dc/elements/1.1/',\n\t'dcterms': 'http://purl.org/dc/terms/',\n\t'dcmitype': 'http://purl.org/dc/dcmitype/',\n\t'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n\t'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n\t'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n\t'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n\t'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n\t'xsd': 'http://www.w3.org/2001/XMLSchema'\n}/*:any*/);\n\nvar XMLNS_main = [\n\t'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n\t'http://purl.oclc.org/ooxml/spreadsheetml/main',\n\t'http://schemas.microsoft.com/office/excel/2006/main',\n\t'http://schemas.microsoft.com/office/excel/2006/2'\n];\n\nvar XLMLNS = ({\n\t'o': 'urn:schemas-microsoft-com:office:office',\n\t'x': 'urn:schemas-microsoft-com:office:excel',\n\t'ss': 'urn:schemas-microsoft-com:office:spreadsheet',\n\t'dt': 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n\t'mv': 'http://macVmlSchemaUri',\n\t'v': 'urn:schemas-microsoft-com:vml',\n\t'html': 'http://www.w3.org/TR/REC-html40'\n}/*:any*/);\nfunction read_double_le(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ {\n\tvar s = 1 - 2 * (b[idx + 7] >>> 7);\n\tvar e = ((b[idx + 7] & 0x7f) << 4) + ((b[idx + 6] >>> 4) & 0x0f);\n\tvar m = (b[idx+6]&0x0f);\n\tfor(var i = 5; i >= 0; --i) m = m * 256 + b[idx + i];\n\tif(e == 0x7ff) return m == 0 ? (s * Infinity) : NaN;\n\tif(e == 0) e = -1022;\n\telse { e -= 1023; m += Math.pow(2,52); }\n\treturn s * Math.pow(2, e - 52) * m;\n}\n\nfunction write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:number*/) {\n\tvar bs = ((((v < 0) || (1/v == -Infinity)) ? 1 : 0) << 7), e = 0, m = 0;\n\tvar av = bs ? (-v) : v;\n\tif(!isFinite(av)) { e = 0x7ff; m = isNaN(v) ? 0x6969 : 0; }\n\telse if(av == 0) e = m = 0;\n\telse {\n\t\te = Math.floor(Math.log(av) / Math.LN2);\n\t\tm = av * Math.pow(2, 52 - e);\n\t\tif((e <= -1023) && (!isFinite(m) || (m < Math.pow(2,52)))) { e = -1022; }\n\t\telse { m -= Math.pow(2,52); e+=1023; }\n\t}\n\tfor(var i = 0; i <= 5; ++i, m/=256) b[idx + i] = m & 0xff;\n\tb[idx + 6] = ((e & 0x0f) << 4) | (m & 0xf);\n\tb[idx + 7] = (e >> 4) | bs;\n}\n\nvar ___toBuffer = function(bufs/*:Array >*/)/*:RawBytes*/ { var x=[],w=10240; for(var i=0;i 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0].map(function(x) { return Buffer.isBuffer(x) ? x : Buffer_from(x); })) : ___toBuffer(bufs);} : ___toBuffer;\n\nvar ___utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { var ss/*:Array*/=[]; for(var i=s; i*/=[]; for(var i=s; i 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpstr = ___lpstr;\n\nvar ___cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __cpstr = ___cpstr;\n\nvar ___lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpwstr = ___lpwstr;\n\nvar ___lpp4 = function lpp4_(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf16le(b, i+4,i+4+len) : \"\";};\nvar __lpp4 = ___lpp4;\n\nvar ___8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : \"\";};\nvar __8lpp4 = ___8lpp4;\n\nvar ___double = function(b/*:RawBytes|CFBlob*/, idx/*:number*/) { return read_double_le(b, idx);};\nvar __double = ___double;\n\nvar is_buf = function is_buf_a(a) { return Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n\nif(has_buf/*:: && typeof Buffer !== 'undefined'*/) {\n\t__lpstr = function lpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__cpstr = function cpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___cpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__lpwstr = function lpwstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/ || !buf_utf16le) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};\n\t__lpp4 = function lpp4_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/ || !buf_utf16le) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};\n\t__8lpp4 = function lpp4_8b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};\n\t__double = function double_(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(Buffer.isBuffer(b)/*::&& b instanceof Buffer*/) return b.readDoubleLE(i); return ___double(b,i); };\n\tis_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n}\n\n/* from js-xls */\nfunction cpdoit() {\n\t__utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(1200, b.slice(s,e)).replace(chr0, ''); };\n\t__utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(65001, b.slice(s,e)); };\n\t__lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_ansi, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : \"\";};\n\t__lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len)) : \"\";};\n\t__8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(65001, b.slice(i+4,i+4+len)) : \"\";};\n}\nif(typeof $cptable !== 'undefined') cpdoit();\n\nvar __readUInt8 = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx]; };\nvar __readUInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+1]*(1<<8))+b[idx]; };\nvar __readInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { var u = (b[idx+1]*(1<<8))+b[idx]; return (u < 0x8000) ? u : ((0xffff - u + 1) * -1); };\nvar __readUInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\nvar __readInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };\nvar __readInt32BE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx]<<24)|(b[idx+1]<<16)|(b[idx+2]<<8)|b[idx+3]; };\n\nfunction ReadShift(size/*:number*/, t/*:?string*/)/*:number|string*/ {\n\tvar o=\"\", oI/*:: :number = 0*/, oR, oo=[], w, vv, i, loc;\n\tswitch(t) {\n\t\tcase 'dbcs':\n\t\t\tloc = this.l;\n\t\t\tif(has_buf && Buffer.isBuffer(this) && buf_utf16le) o = this.slice(this.l, this.l+2*size).toString(\"utf16le\");\n\t\t\telse for(i = 0; i < size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }\n\t\t\tsize *= 2;\n\t\t\tbreak;\n\n\t\tcase 'utf8': o = __utf8(this, this.l, this.l + size); break;\n\t\tcase 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;\n\n\t\tcase 'wstr':\n\t\t\tif(typeof $cptable !== 'undefined') o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l+2*size));\n\t\t\telse return ReadShift.call(this, size, 'dbcs');\n\t\t\tsize = 2 * size; break;\n\n\t\t/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\t\tcase 'lpstr-ansi': o = __lpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\tcase 'lpstr-cp': o = __cpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\t\tcase 'lpwstr': o = __lpwstr(this, this.l); size = 4 + 2 * __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\t\tcase 'lpp4': size = 4 + __readUInt32LE(this, this.l); o = __lpp4(this, this.l); if(size & 0x02) size += 2; break;\n\t\t/* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\t\tcase '8lpp4': size = 4 + __readUInt32LE(this, this.l); o = __8lpp4(this, this.l); if(size & 0x03) size += 4 - (size & 0x03); break;\n\n\t\tcase 'cstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));\n\t\t\to = oo.join(\"\"); break;\n\t\tcase '_wstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}\n\t\t\tsize+=2; o = oo.join(\"\"); break;\n\n\t\t/* sbcs and dbcs support continue records in the SST way TODO codepages */\n\t\tcase 'dbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i < size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt16LE(this, loc)));\n\t\t\t\tloc+=2;\n\t\t\t} o = oo.join(\"\"); size *= 2; break;\n\n\t\tcase 'cpstr':\n\t\t\tif(typeof $cptable !== 'undefined') {\n\t\t\t\to = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t/* falls through */\n\t\tcase 'sbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i != size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt8(this, loc)));\n\t\t\t\tloc+=1;\n\t\t\t} o = oo.join(\"\"); break;\n\n\t\tdefault:\n\tswitch(size) {\n\t\tcase 1: oI = __readUInt8(this, this.l); this.l++; return oI;\n\t\tcase 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;\n\t\tcase 4: case -4:\n\t\t\tif(t === 'i' || ((this[this.l+3] & 0x80)===0)) { oI = ((size > 0) ? __readInt32LE : __readInt32BE)(this, this.l); this.l += 4; return oI; }\n\t\t\telse { oR = __readUInt32LE(this, this.l); this.l += 4; } return oR;\n\t\tcase 8: case -8:\n\t\t\tif(t === 'f') {\n\t\t\t\tif(size == 8) oR = __double(this, this.l);\n\t\t\t\telse oR = __double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]], 0);\n\t\t\t\tthis.l += 8; return oR;\n\t\t\t} else size = 8;\n\t\t/* falls through */\n\t\tcase 16: o = __hexlify(this, this.l, size); break;\n\t}}\n\tthis.l+=size; return o;\n}\n\nvar __writeUInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };\nvar __writeInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };\nvar __writeUInt16LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); };\n\nfunction WriteShift(t/*:number*/, val/*:string|number*/, f/*:?string*/)/*:any*/ {\n\tvar size = 0, i = 0;\n\tif(f === 'dbcs') {\n\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\tfor(i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n\t\tsize = 2 * val.length;\n\t} else if(f === 'sbcs' || f == 'cpstr') {\n\t\tif(typeof $cptable !== 'undefined' && current_ansi == 874) {\n\t\t\t/* TODO: use tables directly, don't encode */\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) {\n\t\t\t\tvar cpp = $cptable.utils.encode(current_ansi, val.charAt(i));\n\t\t\t\tthis[this.l + i] = cpp[0];\n\t\t\t}\n\t\t\tsize = val.length;\n\t\t} else if(typeof $cptable !== 'undefined' && f == 'cpstr') {\n\t\t\tcpp = $cptable.utils.encode(current_codepage, val);\n\t\t\t/* replace null bytes with _ when relevant */\n if(cpp.length == val.length) for(i = 0; i < val.length; ++i) if(cpp[i] == 0 && val.charCodeAt(i) != 0) cpp[i] = 0x5F;\n if(cpp.length == 2 * val.length) for(i = 0; i < val.length; ++i) if(cpp[2*i] == 0 && cpp[2*i+1] == 0 && val.charCodeAt(i) != 0) cpp[2*i] = 0x5F;\n\t\t\tfor(i = 0; i < cpp.length; ++i) this[this.l + i] = cpp[i];\n\t\t\tsize = cpp.length;\n\t\t} else {\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tval = val.replace(/[^\\x00-\\x7F]/g, \"_\");\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) this[this.l + i] = (val.charCodeAt(i) & 0xFF);\n\t\t\tsize = val.length;\n\t\t}\n\t} else if(f === 'hex') {\n\t\tfor(; i < t; ++i) {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tthis[this.l++] = (parseInt(val.slice(2*i, 2*i+2), 16)||0);\n\t\t} return this;\n\t} else if(f === 'utf16le') {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tvar end/*:number*/ = Math.min(this.l + t, this.length);\n\t\t\tfor(i = 0; i < Math.min(val.length, t); ++i) {\n\t\t\t\tvar cc = val.charCodeAt(i);\n\t\t\t\tthis[this.l++] = (cc & 0xff);\n\t\t\t\tthis[this.l++] = (cc >> 8);\n\t\t\t}\n\t\t\twhile(this.l < end) this[this.l++] = 0;\n\t\t\treturn this;\n\t} else /*:: if(typeof val === 'number') */ switch(t) {\n\t\tcase 1: size = 1; this[this.l] = val&0xFF; break;\n\t\tcase 2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;\n\t\tcase 3: size = 3; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; val >>>= 8; this[this.l+2] = val&0xFF; break;\n\t\tcase 4: size = 4; __writeUInt32LE(this, val, this.l); break;\n\t\tcase 8: size = 8; if(f === 'f') { write_double_le(this, val, this.l); break; }\n\t\t/* falls through */\n\t\tcase 16: break;\n\t\tcase -4: size = 4; __writeInt32LE(this, val, this.l); break;\n\t}\n\tthis.l += size; return this;\n}\n\nfunction CheckField(hexstr/*:string*/, fld/*:string*/)/*:void*/ {\n\tvar m = __hexlify(this,this.l,hexstr.length>>1);\n\tif(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n\tthis.l += hexstr.length>>1;\n}\n\nfunction prep_blob(blob, pos/*:number*/)/*:void*/ {\n\tblob.l = pos;\n\tblob.read_shift = /*::(*/ReadShift/*:: :any)*/;\n\tblob.chk = CheckField;\n\tblob.write_shift = WriteShift;\n}\n\nfunction parsenoop(blob, length/*:: :number, opts?:any */) { blob.l += length; }\n\nfunction new_buf(sz/*:number*/)/*:Block*/ {\n\tvar o = new_raw_buf(sz);\n\tprep_blob(o, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.1.4 Record */\nfunction recordhopper(data, cb/*:RecordHopperCB*/, opts/*:?any*/) {\n\tif(!data) return;\n\tvar tmpbyte, cntbyte, length;\n\tprep_blob(data, data.l || 0);\n\tvar L = data.length, RT = 0, tgt = 0;\n\twhile(data.l < L) {\n\t\tRT = data.read_shift(1);\n\t\tif(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);\n\t\tvar R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n\t\ttmpbyte = data.read_shift(1);\n\t\tlength = tmpbyte & 0x7F;\n\t\tfor(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);\n\t\ttgt = data.l + length;\n\t\tvar d = R.f && R.f(data, length, opts);\n\t\tdata.l = tgt;\n\t\tif(cb(d, R, RT)) return;\n\t}\n}\n\n/* control buffer usage for fixed-length buffers */\nfunction buf_array()/*:BufArray*/ {\n\tvar bufs/*:Array*/ = [], blksz = has_buf ? 256 : 2048;\n\tvar newblk = function ba_newblk(sz/*:number*/)/*:Block*/ {\n\t\tvar o/*:Block*/ = (new_buf(sz)/*:any*/);\n\t\tprep_blob(o, 0);\n\t\treturn o;\n\t};\n\n\tvar curbuf/*:Block*/ = newblk(blksz);\n\n\tvar endbuf = function ba_endbuf() {\n\t\tif(!curbuf) return;\n\t\t// workaround for new Buffer(3).slice(0,0) bug in bun 0.1.3\n\t\tif(curbuf.l) {\n\t\t\tif(curbuf.length > curbuf.l) { curbuf = curbuf.slice(0, curbuf.l); curbuf.l = curbuf.length; }\n\t\t\tif(curbuf.length > 0) bufs.push(curbuf);\n\t\t}\n\t\tcurbuf = null;\n\t};\n\n\tvar next = function ba_next(sz/*:number*/)/*:Block*/ {\n\t\tif(curbuf && (sz < (curbuf.length - curbuf.l))) return curbuf;\n\t\tendbuf();\n\t\treturn (curbuf = newblk(Math.max(sz+1, blksz)));\n\t};\n\n\tvar end = function ba_end() {\n\t\tendbuf();\n\t\treturn bconcat(bufs);\n\t};\n\n\tvar push = function ba_push(buf) { endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz); };\n\n\treturn ({ next:next, push:push, end:end, _bufs:bufs }/*:any*/);\n}\n\nfunction write_record(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/) {\n\tvar t/*:number*/ = +type, l;\n\tif(isNaN(t)) return; // TODO: throw something here?\n\tif(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;\n\tl = 1 + (t >= 0x80 ? 1 : 0) + 1/* + length*/;\n\tif(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;\n\tvar o = ba.next(l);\n\tif(t <= 0x7F) o.write_shift(1, t);\n\telse {\n\t\to.write_shift(1, (t & 0x7F) + 0x80);\n\t\to.write_shift(1, (t >> 7));\n\t}\n\tfor(var i = 0; i != 4; ++i) {\n\t\tif(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }\n\t\telse { o.write_shift(1, length); break; }\n\t}\n\tif(/*:: length != null &&*/length > 0 && is_buf(payload)) ba.push(payload);\n}\n/* XLS ranges enforced */\nfunction shift_cell_xls(cell/*:CellAddress*/, tgt/*:any*/, opts/*:?any*/)/*:CellAddress*/ {\n\tvar out = dup(cell);\n\tif(tgt.s) {\n\t\tif(out.cRel) out.c += tgt.s.c;\n\t\tif(out.rRel) out.r += tgt.s.r;\n\t} else {\n\t\tif(out.cRel) out.c += tgt.c;\n\t\tif(out.rRel) out.r += tgt.r;\n\t}\n\tif(!opts || opts.biff < 12) {\n\t\twhile(out.c >= 0x100) out.c -= 0x100;\n\t\twhile(out.r >= 0x10000) out.r -= 0x10000;\n\t}\n\treturn out;\n}\n\nfunction shift_range_xls(cell, range, opts) {\n\tvar out = dup(cell);\n\tout.s = shift_cell_xls(out.s, range.s, opts);\n\tout.e = shift_cell_xls(out.e, range.s, opts);\n\treturn out;\n}\n\nfunction encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {\n\tif(c.cRel && c.c < 0) { c = dup(c); while(c.c < 0) c.c += (biff > 8) ? 0x4000 : 0x100; }\n\tif(c.rRel && c.r < 0) { c = dup(c); while(c.r < 0) c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }\n\tvar s = encode_cell(c);\n\tif(!c.cRel && c.cRel != null) s = fix_col(s);\n\tif(!c.rRel && c.rRel != null) s = fix_row(s);\n\treturn s;\n}\n\nfunction encode_range_xls(r, opts)/*:string*/ {\n\tif(r.s.r == 0 && !r.s.rRel) {\n\t\tif(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {\n\t\t\treturn (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n\t\t}\n\t}\n\tif(r.s.c == 0 && !r.s.cRel) {\n\t\tif(r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n\t\t\treturn (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n\t\t}\n\t}\n\treturn encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n}\nfunction decode_row(rowstr/*:string*/)/*:number*/ { return parseInt(unfix_row(rowstr),10) - 1; }\nfunction encode_row(row/*:number*/)/*:string*/ { return \"\" + (row + 1); }\nfunction fix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/([A-Z]|^)(\\d+)$/,\"$1$$$2\"); }\nfunction unfix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/\\$(\\d+)$/,\"$1\"); }\n\nfunction decode_col(colstr/*:string*/)/*:number*/ { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }\nfunction encode_col(col/*:number*/)/*:string*/ { if(col < 0) throw new Error(\"invalid column \" + col); var s=\"\"; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }\nfunction fix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^([A-Z])/,\"$$$1\"); }\nfunction unfix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^\\$([A-Z])/,\"$1\"); }\n\nfunction split_cell(cstr/*:string*/)/*:Array*/ { return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/,\"$1,$2\").split(\",\"); }\nfunction decode_cell(cstr/*:string*/)/*:CellAddress*/ {\n\tvar R = 0, C = 0;\n\tfor(var i = 0; i < cstr.length; ++i) {\n\t\tvar cc = cstr.charCodeAt(i);\n\t\tif(cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);\n\t\telse if(cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n\t}\n\treturn { c: C - 1, r:R - 1 };\n}\nfunction encode_cell(cell/*:CellAddress*/)/*:string*/ {\n\tvar col = cell.c + 1;\n\tvar s=\"\";\n\tfor(; col; col=((col-1)/26)|0) s = String.fromCharCode(((col-1)%26) + 65) + s;\n\treturn s + (cell.r + 1);\n}\nfunction decode_range(range/*:string*/)/*:Range*/ {\n\tvar idx = range.indexOf(\":\");\n\tif(idx == -1) return { s: decode_cell(range), e: decode_cell(range) };\n\treturn { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) };\n}\n/*# if only one arg, it is assumed to be a Range. If 2 args, both are cell addresses */\nfunction encode_range(cs/*:CellAddrSpec|Range*/,ce/*:?CellAddrSpec*/)/*:string*/ {\n\tif(typeof ce === 'undefined' || typeof ce === 'number') {\n/*:: if(!(cs instanceof Range)) throw \"unreachable\"; */\n\t\treturn encode_range(cs.s, cs.e);\n\t}\n/*:: if((cs instanceof Range)) throw \"unreachable\"; */\n\tif(typeof cs !== 'string') cs = encode_cell((cs/*:any*/));\n\tif(typeof ce !== 'string') ce = encode_cell((ce/*:any*/));\n/*:: if(typeof cs !== 'string') throw \"unreachable\"; */\n/*:: if(typeof ce !== 'string') throw \"unreachable\"; */\n\treturn cs == ce ? cs : cs + \":\" + ce;\n}\nfunction fix_range(a1/*:string*/)/*:string*/ {\n\tvar s = decode_range(a1);\n\treturn \"$\" + encode_col(s.s.c) + \"$\" + encode_row(s.s.r) + \":$\" + encode_col(s.e.c) + \"$\" + encode_row(s.e.r);\n}\n\n// List of invalid characters needs to be tested further\nfunction formula_quote_sheet_name(sname/*:string*/, opts)/*:string*/ {\n\tif(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n\tif (/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/.test(sname)) return \"'\" + sname.replace(/'/g, \"''\") + \"'\";\n\treturn sname;\n}\n\nfunction safe_decode_range(range/*:string*/)/*:Range*/ {\n\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\tvar idx = 0, i = 0, cc = 0;\n\tvar len = range.length;\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.s.c = --idx;\n\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.s.r = --idx;\n\n\tif(i === len || cc != 10) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }\n\t++i;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.e.c = --idx;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.e.r = --idx;\n\treturn o;\n}\n\nfunction safe_format_cell(cell/*:Cell*/, v/*:any*/) {\n\tvar q = (cell.t == 'd' && v instanceof Date);\n\tif(cell.z != null) try { return (cell.w = SSF_format(cell.z, q ? datenum(v) : v)); } catch(e) { }\n\ttry { return (cell.w = SSF_format((cell.XF||{}).numFmtId||(q ? 14 : 0), q ? datenum(v) : v)); } catch(e) { return ''+v; }\n}\n\nfunction format_cell(cell/*:Cell*/, v/*:any*/, o/*:any*/) {\n\tif(cell == null || cell.t == null || cell.t == 'z') return \"\";\n\tif(cell.w !== undefined) return cell.w;\n\tif(cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n\tif(cell.t == \"e\") return BErr[cell.v] || cell.v;\n\tif(v == undefined) return safe_format_cell(cell, cell.v);\n\treturn safe_format_cell(cell, v);\n}\n\nfunction sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ {\n\tvar n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n\tvar sheets = {}; sheets[n] = sheet;\n\treturn { SheetNames: [n], Sheets: sheets };\n}\n\nfunction sheet_add_aoa(_ws/*:?Worksheet*/, data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar dense = _ws ? (_ws[\"!data\"] != null) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar ws/*:Worksheet*/ = _ws || ({}/*:any*/);\n\tif(dense && !ws[\"!data\"]) ws[\"!data\"] = [];\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t\tif(!ws[\"!ref\"]) ws[\"!ref\"] = \"A1:A1\";\n\t}\n\tvar range/*:Range*/ = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}}/*:any*/);\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.s.c = _range.s.c;\n\t\trange.s.r = _range.s.r;\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) range.e.r = _R = _range.e.r + 1;\n\t}\n\tvar row = [];\n\tfor(var R = 0; R != data.length; ++R) {\n\t\tif(!data[R]) continue;\n\t\tif(!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\t\tvar __R = _R + R, __Rstr = \"\" + (__R + 1);\n\t\tif(dense) {\n\t\t\tif(!ws[\"!data\"][__R]) ws[\"!data\"][__R] = [];\n\t\t\trow = ws[\"!data\"][__R];\n\t\t}\n\t\tfor(var C = 0; C != data[R].length; ++C) {\n\t\t\tif(typeof data[R][C] === 'undefined') continue;\n\t\t\tvar cell/*:Cell*/ = ({v: data[R][C] }/*:any*/);\n\t\t\tvar __C = _C + C;\n\t\t\tif(range.s.r > __R) range.s.r = __R;\n\t\t\tif(range.s.c > __C) range.s.c = __C;\n\t\t\tif(range.e.r < __R) range.e.r = __R;\n\t\t\tif(range.e.c < __C) range.e.c = __C;\n\t\t\tif(data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];\n\t\t\telse {\n\t\t\t\tif(Array.isArray(cell.v)) { cell.f = data[R][C][1]; cell.v = cell.v[0]; }\n\t\t\t\tif(cell.v === null) {\n\t\t\t\t\tif(cell.f) cell.t = 'n';\n\t\t\t\t\telse if(o.nullError) { cell.t = 'e'; cell.v = 0; }\n\t\t\t\t\telse if(!o.sheetStubs) continue;\n\t\t\t\t\telse cell.t = 'z';\n\t\t\t\t}\n\t\t\t\telse if(typeof cell.v === 'number') cell.t = 'n';\n\t\t\t\telse if(typeof cell.v === 'boolean') cell.t = 'b';\n\t\t\t\telse if(cell.v instanceof Date) {\n\t\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.w = SSF_format(cell.z, datenum(cell.v, o.date1904)); }\n\t\t\t\t\telse { cell.t = 'n'; cell.v = datenum(cell.v, o.date1904); cell.w = SSF_format(cell.z, cell.v); }\n\t\t\t\t}\n\t\t\t\telse cell.t = 's';\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tif(row[__C] && row[__C].z) cell.z = row[__C].z;\n\t\t\t\trow[__C] = cell;\n\t\t\t} else {\n\t\t\t\tvar cell_ref = encode_col(__C) + __Rstr/*:any*/;\n\t\t\t\tif(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n\t\t\t\tws[cell_ref] = cell;\n\t\t\t}\n\t\t}\n\t}\n\tif(range.s.c < 10000000) ws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction aoa_to_sheet(data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ { return sheet_add_aoa(null, data, opts); }\n\nfunction parse_Int32LE(data) {\n\treturn data.read_shift(4, 'i');\n}\nfunction write_UInt32LE(x/*:number*/, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(4, x);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.168 */\nfunction parse_XLWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(4 + 2 * data.length); }\n\to.write_shift(4, data.length);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.91 */\n//function parse_LPWideString(data/*::, length*/)/*:string*/ {\n//\tvar cchCharacters = data.read_shift(2);\n//\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n//}\n\n/* [MS-XLSB] 2.5.143 */\nfunction parse_StrRun(data) {\n\treturn { ich: data.read_shift(2), ifnt: data.read_shift(2) };\n}\nfunction write_StrRun(run, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(2, run.ich || 0);\n\to.write_shift(2, run.ifnt || 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.121 */\nfunction parse_RichStr(data, length/*:number*/)/*:XLString*/ {\n\tvar start = data.l;\n\tvar flags = data.read_shift(1);\n\tvar str = parse_XLWideString(data);\n\tvar rgsStrRun = [];\n\tvar z = ({ t: str, h: str }/*:any*/);\n\tif ((flags & 1) !== 0) { /* fRichStr */\n\t\t/* TODO: formatted string */\n\t\tvar dwSizeStrRun = data.read_shift(4);\n\t\tfor (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));\n\t\tz.r = rgsStrRun;\n\t}\n\telse z.r = [{ ich: 0, ifnt: 0 }];\n\t//if((flags & 2) !== 0) { /* fExtStr */\n\t//\t/* TODO: phonetic string */\n\t//}\n\tdata.l = start + length;\n\treturn z;\n}\nfunction write_RichStr(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(15 + 4 * str.t.length); }\n\to.write_shift(1, 0);\n\twrite_XLWideString(str.t, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\nvar parse_BrtCommentText = parse_RichStr;\nfunction write_BrtCommentText(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(23 + 4 * str.t.length); }\n\to.write_shift(1, 1);\n\twrite_XLWideString(str.t, o);\n\to.write_shift(4, 1);\n\twrite_StrRun({ ich: 0, ifnt: 0 }, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.9 */\nfunction parse_XLSBCell(data)/*:any*/ {\n\tvar col = data.read_shift(4);\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) << 16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c: col, iStyleRef: iStyleRef };\n}\nfunction write_XLSBCell(cell/*:any*/, o/*:?Block*/) {\n\tif (o == null) o = new_buf(8);\n\to.write_shift(-4, cell.c);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* Short XLSB Cell does not include column */\nfunction parse_XLSBShortCell(data)/*:any*/ {\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) <<16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c:-1, iStyleRef: iStyleRef };\n}\nfunction write_XLSBShortCell(cell/*:any*/, o/*:?Block*/) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.21 */\nvar parse_XLSBCodeName = parse_XLWideString;\nvar write_XLSBCodeName = write_XLWideString;\n\n/* [MS-XLSB] 2.5.166 */\nfunction parse_XLNullableWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLNullableWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(127); }\n\to.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.165 */\nvar parse_XLNameWideString = parse_XLWideString;\n//var write_XLNameWideString = write_XLWideString;\n\n/* [MS-XLSB] 2.5.114 */\nvar parse_RelID = parse_XLNullableWideString;\nvar write_RelID = write_XLNullableWideString;\n\n\n/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\nfunction parse_RkNumber(data)/*:number*/ {\n\tvar b = data.slice(data.l, data.l + 4);\n\tvar fX100 = (b[0] & 1), fInt = (b[0] & 2);\n\tdata.l += 4;\n\tvar RK = fInt === 0 ? __double([0, 0, 0, 0, (b[0] & 0xFC), b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n\treturn fX100 ? (RK / 100) : RK;\n}\nfunction write_RkNumber(data/*:number*/, o) {\n\tif (o == null) o = new_buf(4);\n\tvar fX100 = 0, fInt = 0, d100 = data * 100;\n\tif ((data == (data | 0)) && (data >= -(1 << 29)) && (data < (1 << 29))) { fInt = 1; }\n\telse if ((d100 == (d100 | 0)) && (d100 >= -(1 << 29)) && (d100 < (1 << 29))) { fInt = 1; fX100 = 1; }\n\tif (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));\n\telse throw new Error(\"unsupported RkNumber \" + data); // TODO\n}\n\n\n/* [MS-XLSB] 2.5.117 RfX */\nfunction parse_RfX(data /*::, length*/)/*:Range*/ {\n\tvar cell/*:Range*/ = ({ s: {}, e: {} }/*:any*/);\n\tcell.s.r = data.read_shift(4);\n\tcell.e.r = data.read_shift(4);\n\tcell.s.c = data.read_shift(4);\n\tcell.e.c = data.read_shift(4);\n\treturn cell;\n}\nfunction write_RfX(r/*:Range*/, o) {\n\tif (!o) o = new_buf(16);\n\to.write_shift(4, r.s.r);\n\to.write_shift(4, r.e.r);\n\to.write_shift(4, r.s.c);\n\to.write_shift(4, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.153 UncheckedRfX */\nvar parse_UncheckedRfX = parse_RfX;\nvar write_UncheckedRfX = write_RfX;\n\n/* [MS-XLSB] 2.5.155 UncheckedSqRfX */\n//function parse_UncheckedSqRfX(data) {\n//\tvar cnt = data.read_shift(4);\n//\tvar out = [];\n//\tfor(var i = 0; i < cnt; ++i) {\n//\t\tvar rng = parse_UncheckedRfX(data);\n//\t\tout.push(encode_range(rng));\n//\t}\n//\treturn out.join(\",\");\n//}\n//function write_UncheckedSqRfX(sqrfx/*:string*/) {\n//\tvar parts = sqrfx.split(/\\s*,\\s*/);\n//\tvar o = new_buf(4); o.write_shift(4, parts.length);\n//\tvar out = [o];\n//\tparts.forEach(function(rng) {\n//\t\tout.push(write_UncheckedRfX(safe_decode_range(rng)));\n//\t});\n//\treturn bconcat(out);\n//}\n\n/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */\n/* TODO: error checking, NaN and Infinity values are not valid Xnum */\nfunction parse_Xnum(data/*::, length*/) {\n\tif(data.length - data.l < 8) throw \"XLS Xnum Buffer underflow\";\n\treturn data.read_shift(8, 'f');\n}\nfunction write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, data, 'f'); }\n\n/* [MS-XLSB] 2.4.324 BrtColor */\nfunction parse_BrtColor(data/*::, length*/) {\n\tvar out = {};\n\tvar d = data.read_shift(1);\n\n\t//var fValidRGB = d & 1;\n\tvar xColorType = d >>> 1;\n\n\tvar index = data.read_shift(1);\n\tvar nTS = data.read_shift(2, 'i');\n\tvar bR = data.read_shift(1);\n\tvar bG = data.read_shift(1);\n\tvar bB = data.read_shift(1);\n\tdata.l++; //var bAlpha = data.read_shift(1);\n\n\tswitch (xColorType) {\n\t\tcase 0: out.auto = 1; break;\n\t\tcase 1:\n\t\t\tout.index = index;\n\t\t\tvar icv = XLSIcv[index];\n\t\t\t/* automatic pseudo index 81 */\n\t\t\tif (icv) out.rgb = rgb2Hex(icv);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/* if(!fValidRGB) throw new Error(\"invalid\"); */\n\t\t\tout.rgb = rgb2Hex([bR, bG, bB]);\n\t\t\tbreak;\n\t\tcase 3: out.theme = index; break;\n\t}\n\tif (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n\n\treturn out;\n}\nfunction write_BrtColor(color, o) {\n\tif (!o) o = new_buf(8);\n\tif (!color || color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; }\n\tif (color.index != null) {\n\t\to.write_shift(1, 0x02);\n\t\to.write_shift(1, color.index);\n\t} else if (color.theme != null) {\n\t\to.write_shift(1, 0x06);\n\t\to.write_shift(1, color.theme);\n\t} else {\n\t\to.write_shift(1, 0x05);\n\t\to.write_shift(1, 0);\n\t}\n\tvar nTS = color.tint || 0;\n\tif (nTS > 0) nTS *= 32767;\n\telse if (nTS < 0) nTS *= 32768;\n\to.write_shift(2, nTS);\n\tif (!color.rgb || color.theme != null) {\n\t\to.write_shift(2, 0);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(1, 0);\n\t} else {\n\t\tvar rgb = (color.rgb || 'FFFFFF');\n\t\tif (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n\t\to.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n\t\to.write_shift(1, 0xFF);\n\t}\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.52 */\nfunction parse_FontFlags(data/*::, length, opts*/) {\n\tvar d = data.read_shift(1);\n\tdata.l++;\n\tvar out = {\n\t\tfBold: d & 0x01,\n\t\tfItalic: d & 0x02,\n\t\tfUnderline: d & 0x04,\n\t\tfStrikeout: d & 0x08,\n\t\tfOutline: d & 0x10,\n\t\tfShadow: d & 0x20,\n\t\tfCondense: d & 0x40,\n\t\tfExtend: d & 0x80\n\t};\n\treturn out;\n}\nfunction write_FontFlags(font, o) {\n\tif (!o) o = new_buf(2);\n\tvar grbit =\n\t\t(font.italic ? 0x02 : 0) |\n\t\t(font.strike ? 0x08 : 0) |\n\t\t(font.outline ? 0x10 : 0) |\n\t\t(font.shadow ? 0x20 : 0) |\n\t\t(font.condense ? 0x40 : 0) |\n\t\t(font.extend ? 0x80 : 0);\n\to.write_shift(1, grbit);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-OLEDS] 2.3.1 and 2.3.2 */\nfunction parse_ClipboardFormatOrString(o, w/*:number*/)/*:string*/ {\n\t// $FlowIgnore\n\tvar ClipFmt = { 2: \"BITMAP\", 3: \"METAFILEPICT\", 8: \"DIB\", 14: \"ENHMETAFILE\" };\n\tvar m/*:number*/ = o.read_shift(4);\n\tswitch (m) {\n\t\tcase 0x00000000: return \"\";\n\t\tcase 0xffffffff: case 0xfffffffe: return ClipFmt[o.read_shift(4)] || \"\";\n\t}\n\tif (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n\to.l -= 4;\n\treturn o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n}\nfunction parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFormatOrString(o, 1); }\nfunction parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatOrString(o, 2); }\n\n/* [MS-OLEPS] 2.2 PropertyType */\n// Note: some tree shakers cannot handle VT_VECTOR | $CONST, hence extra vars\n//var VT_EMPTY = 0x0000;\n//var VT_NULL = 0x0001;\nvar VT_I2 = 0x0002;\nvar VT_I4 = 0x0003;\n//var VT_R4 = 0x0004;\n//var VT_R8 = 0x0005;\n//var VT_CY = 0x0006;\n//var VT_DATE = 0x0007;\n//var VT_BSTR = 0x0008;\n//var VT_ERROR = 0x000A;\nvar VT_BOOL = 0x000B;\nvar VT_VARIANT = 0x000C;\n//var VT_DECIMAL = 0x000E;\n//var VT_I1 = 0x0010;\n//var VT_UI1 = 0x0011;\n//var VT_UI2 = 0x0012;\nvar VT_UI4 = 0x0013;\n//var VT_I8 = 0x0014;\n//var VT_UI8 = 0x0015;\n//var VT_INT = 0x0016;\n//var VT_UINT = 0x0017;\n//var VT_LPSTR = 0x001E;\n//var VT_LPWSTR = 0x001F;\nvar VT_FILETIME = 0x0040;\nvar VT_BLOB = 0x0041;\n//var VT_STREAM = 0x0042;\n//var VT_STORAGE = 0x0043;\n//var VT_STREAMED_Object = 0x0044;\n//var VT_STORED_Object = 0x0045;\n//var VT_BLOB_Object = 0x0046;\nvar VT_CF = 0x0047;\n//var VT_CLSID = 0x0048;\n//var VT_VERSIONED_STREAM = 0x0049;\n//var VT_VECTOR = 0x1000;\nvar VT_VECTOR_VARIANT = 0x100C;\nvar VT_VECTOR_LPSTR = 0x101E;\n//var VT_ARRAY = 0x2000;\n\nvar VT_STRING = 0x0050; // 2.3.3.1.11 VtString\nvar VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\nvar VT_CUSTOM = [VT_STRING, VT_USTR];\n\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\nvar DocSummaryPIDDSI = {\n\t/*::[*/0x01/*::]*/: { n: 'CodePage', t: VT_I2 },\n\t/*::[*/0x02/*::]*/: { n: 'Category', t: VT_STRING },\n\t/*::[*/0x03/*::]*/: { n: 'PresentationFormat', t: VT_STRING },\n\t/*::[*/0x04/*::]*/: { n: 'ByteCount', t: VT_I4 },\n\t/*::[*/0x05/*::]*/: { n: 'LineCount', t: VT_I4 },\n\t/*::[*/0x06/*::]*/: { n: 'ParagraphCount', t: VT_I4 },\n\t/*::[*/0x07/*::]*/: { n: 'SlideCount', t: VT_I4 },\n\t/*::[*/0x08/*::]*/: { n: 'NoteCount', t: VT_I4 },\n\t/*::[*/0x09/*::]*/: { n: 'HiddenCount', t: VT_I4 },\n\t/*::[*/0x0a/*::]*/: { n: 'MultimediaClipCount', t: VT_I4 },\n\t/*::[*/0x0b/*::]*/: { n: 'ScaleCrop', t: VT_BOOL },\n\t/*::[*/0x0c/*::]*/: { n: 'HeadingPairs', t: VT_VECTOR_VARIANT /* VT_VECTOR | VT_VARIANT */ },\n\t/*::[*/0x0d/*::]*/: { n: 'TitlesOfParts', t: VT_VECTOR_LPSTR /* VT_VECTOR | VT_LPSTR */ },\n\t/*::[*/0x0e/*::]*/: { n: 'Manager', t: VT_STRING },\n\t/*::[*/0x0f/*::]*/: { n: 'Company', t: VT_STRING },\n\t/*::[*/0x10/*::]*/: { n: 'LinksUpToDate', t: VT_BOOL },\n\t/*::[*/0x11/*::]*/: { n: 'CharacterCount', t: VT_I4 },\n\t/*::[*/0x13/*::]*/: { n: 'SharedDoc', t: VT_BOOL },\n\t/*::[*/0x16/*::]*/: { n: 'HyperlinksChanged', t: VT_BOOL },\n\t/*::[*/0x17/*::]*/: { n: 'AppVersion', t: VT_I4, p: 'version' },\n\t/*::[*/0x18/*::]*/: { n: 'DigSig', t: VT_BLOB },\n\t/*::[*/0x1A/*::]*/: { n: 'ContentType', t: VT_STRING },\n\t/*::[*/0x1B/*::]*/: { n: 'ContentStatus', t: VT_STRING },\n\t/*::[*/0x1C/*::]*/: { n: 'Language', t: VT_STRING },\n\t/*::[*/0x1D/*::]*/: { n: 'Version', t: VT_STRING },\n\t/*::[*/0xFF/*::]*/: {},\n\t/* [MS-OLEPS] 2.18 */\n\t/*::[*/0x80000000/*::]*/: { n: 'Locale', t: VT_UI4 },\n\t/*::[*/0x80000003/*::]*/: { n: 'Behavior', t: VT_UI4 },\n\t/*::[*/0x72627262/*::]*/: {}\n};\n\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\nvar SummaryPIDSI = {\n\t/*::[*/0x01/*::]*/: { n: 'CodePage', t: VT_I2 },\n\t/*::[*/0x02/*::]*/: { n: 'Title', t: VT_STRING },\n\t/*::[*/0x03/*::]*/: { n: 'Subject', t: VT_STRING },\n\t/*::[*/0x04/*::]*/: { n: 'Author', t: VT_STRING },\n\t/*::[*/0x05/*::]*/: { n: 'Keywords', t: VT_STRING },\n\t/*::[*/0x06/*::]*/: { n: 'Comments', t: VT_STRING },\n\t/*::[*/0x07/*::]*/: { n: 'Template', t: VT_STRING },\n\t/*::[*/0x08/*::]*/: { n: 'LastAuthor', t: VT_STRING },\n\t/*::[*/0x09/*::]*/: { n: 'RevNumber', t: VT_STRING },\n\t/*::[*/0x0A/*::]*/: { n: 'EditTime', t: VT_FILETIME },\n\t/*::[*/0x0B/*::]*/: { n: 'LastPrinted', t: VT_FILETIME },\n\t/*::[*/0x0C/*::]*/: { n: 'CreatedDate', t: VT_FILETIME },\n\t/*::[*/0x0D/*::]*/: { n: 'ModifiedDate', t: VT_FILETIME },\n\t/*::[*/0x0E/*::]*/: { n: 'PageCount', t: VT_I4 },\n\t/*::[*/0x0F/*::]*/: { n: 'WordCount', t: VT_I4 },\n\t/*::[*/0x10/*::]*/: { n: 'CharCount', t: VT_I4 },\n\t/*::[*/0x11/*::]*/: { n: 'Thumbnail', t: VT_CF },\n\t/*::[*/0x12/*::]*/: { n: 'Application', t: VT_STRING },\n\t/*::[*/0x13/*::]*/: { n: 'DocSecurity', t: VT_I4 },\n\t/*::[*/0xFF/*::]*/: {},\n\t/* [MS-OLEPS] 2.18 */\n\t/*::[*/0x80000000/*::]*/: { n: 'Locale', t: VT_UI4 },\n\t/*::[*/0x80000003/*::]*/: { n: 'Behavior', t: VT_UI4 },\n\t/*::[*/0x72627262/*::]*/: {}\n};\n\n/* [MS-XLS] 2.4.63 Country/Region codes */\nvar CountryEnum = {\n\t/*::[*/0x0001/*::]*/: \"US\", // United States\n\t/*::[*/0x0002/*::]*/: \"CA\", // Canada\n\t/*::[*/0x0003/*::]*/: \"\", // Latin America (except Brazil)\n\t/*::[*/0x0007/*::]*/: \"RU\", // Russia\n\t/*::[*/0x0014/*::]*/: \"EG\", // Egypt\n\t/*::[*/0x001E/*::]*/: \"GR\", // Greece\n\t/*::[*/0x001F/*::]*/: \"NL\", // Netherlands\n\t/*::[*/0x0020/*::]*/: \"BE\", // Belgium\n\t/*::[*/0x0021/*::]*/: \"FR\", // France\n\t/*::[*/0x0022/*::]*/: \"ES\", // Spain\n\t/*::[*/0x0024/*::]*/: \"HU\", // Hungary\n\t/*::[*/0x0027/*::]*/: \"IT\", // Italy\n\t/*::[*/0x0029/*::]*/: \"CH\", // Switzerland\n\t/*::[*/0x002B/*::]*/: \"AT\", // Austria\n\t/*::[*/0x002C/*::]*/: \"GB\", // United Kingdom\n\t/*::[*/0x002D/*::]*/: \"DK\", // Denmark\n\t/*::[*/0x002E/*::]*/: \"SE\", // Sweden\n\t/*::[*/0x002F/*::]*/: \"NO\", // Norway\n\t/*::[*/0x0030/*::]*/: \"PL\", // Poland\n\t/*::[*/0x0031/*::]*/: \"DE\", // Germany\n\t/*::[*/0x0034/*::]*/: \"MX\", // Mexico\n\t/*::[*/0x0037/*::]*/: \"BR\", // Brazil\n\t/*::[*/0x003d/*::]*/: \"AU\", // Australia\n\t/*::[*/0x0040/*::]*/: \"NZ\", // New Zealand\n\t/*::[*/0x0042/*::]*/: \"TH\", // Thailand\n\t/*::[*/0x0051/*::]*/: \"JP\", // Japan\n\t/*::[*/0x0052/*::]*/: \"KR\", // Korea\n\t/*::[*/0x0054/*::]*/: \"VN\", // Viet Nam\n\t/*::[*/0x0056/*::]*/: \"CN\", // China\n\t/*::[*/0x005A/*::]*/: \"TR\", // Turkey\n\t/*::[*/0x0069/*::]*/: \"JS\", // Ramastan\n\t/*::[*/0x00D5/*::]*/: \"DZ\", // Algeria\n\t/*::[*/0x00D8/*::]*/: \"MA\", // Morocco\n\t/*::[*/0x00DA/*::]*/: \"LY\", // Libya\n\t/*::[*/0x015F/*::]*/: \"PT\", // Portugal\n\t/*::[*/0x0162/*::]*/: \"IS\", // Iceland\n\t/*::[*/0x0166/*::]*/: \"FI\", // Finland\n\t/*::[*/0x01A4/*::]*/: \"CZ\", // Czech Republic\n\t/*::[*/0x0376/*::]*/: \"TW\", // Taiwan\n\t/*::[*/0x03C1/*::]*/: \"LB\", // Lebanon\n\t/*::[*/0x03C2/*::]*/: \"JO\", // Jordan\n\t/*::[*/0x03C3/*::]*/: \"SY\", // Syria\n\t/*::[*/0x03C4/*::]*/: \"IQ\", // Iraq\n\t/*::[*/0x03C5/*::]*/: \"KW\", // Kuwait\n\t/*::[*/0x03C6/*::]*/: \"SA\", // Saudi Arabia\n\t/*::[*/0x03CB/*::]*/: \"AE\", // United Arab Emirates\n\t/*::[*/0x03CC/*::]*/: \"IL\", // Israel\n\t/*::[*/0x03CE/*::]*/: \"QA\", // Qatar\n\t/*::[*/0x03D5/*::]*/: \"IR\", // Iran\n\t/*::[*/0xFFFF/*::]*/: \"US\" // United States\n};\n\n/* [MS-XLS] 2.5.127 */\nvar XLSFillPattern = [\n\tnull,\n\t'solid',\n\t'mediumGray',\n\t'darkGray',\n\t'lightGray',\n\t'darkHorizontal',\n\t'darkVertical',\n\t'darkDown',\n\t'darkUp',\n\t'darkGrid',\n\t'darkTrellis',\n\t'lightHorizontal',\n\t'lightVertical',\n\t'lightDown',\n\t'lightUp',\n\t'lightGrid',\n\t'lightTrellis',\n\t'gray125',\n\t'gray0625'\n];\n\nfunction rgbify(arr/*:Array*/)/*:Array<[number, number, number]>*/ { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }\n\n/* [MS-XLS] 2.5.161 */\n/* [MS-XLSB] 2.5.75 Icv */\nvar _XLSIcv = /*#__PURE__*/ rgbify([\n\t/* Color Constants */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t/* Overridable Defaults */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t0x800000,\n\t0x008000,\n\t0x000080,\n\t0x808000,\n\t0x800080,\n\t0x008080,\n\t0xC0C0C0,\n\t0x808080,\n\t0x9999FF,\n\t0x993366,\n\t0xFFFFCC,\n\t0xCCFFFF,\n\t0x660066,\n\t0xFF8080,\n\t0x0066CC,\n\t0xCCCCFF,\n\n\t0x000080,\n\t0xFF00FF,\n\t0xFFFF00,\n\t0x00FFFF,\n\t0x800080,\n\t0x800000,\n\t0x008080,\n\t0x0000FF,\n\t0x00CCFF,\n\t0xCCFFFF,\n\t0xCCFFCC,\n\t0xFFFF99,\n\t0x99CCFF,\n\t0xFF99CC,\n\t0xCC99FF,\n\t0xFFCC99,\n\n\t0x3366FF,\n\t0x33CCCC,\n\t0x99CC00,\n\t0xFFCC00,\n\t0xFF9900,\n\t0xFF6600,\n\t0x666699,\n\t0x969696,\n\t0x003366,\n\t0x339966,\n\t0x003300,\n\t0x333300,\n\t0x993300,\n\t0x993366,\n\t0x333399,\n\t0x333333,\n\n\t/* Other entries to appease BIFF8/12 */\n\t0x000000, /* 0x40 icvForeground ?? */\n\t0xFFFFFF, /* 0x41 icvBackground ?? */\n\t0x000000, /* 0x42 icvFrame ?? */\n\t0x000000, /* 0x43 icv3D ?? */\n\t0x000000, /* 0x44 icv3DText ?? */\n\t0x000000, /* 0x45 icv3DHilite ?? */\n\t0x000000, /* 0x46 icv3DShadow ?? */\n\t0x000000, /* 0x47 icvHilite ?? */\n\t0x000000, /* 0x48 icvCtlText ?? */\n\t0x000000, /* 0x49 icvCtlScrl ?? */\n\t0x000000, /* 0x4A icvCtlInv ?? */\n\t0x000000, /* 0x4B icvCtlBody ?? */\n\t0x000000, /* 0x4C icvCtlFrame ?? */\n\t0x000000, /* 0x4D icvCtlFore ?? */\n\t0x000000, /* 0x4E icvCtlBack ?? */\n\t0x000000, /* 0x4F icvCtlNeutral */\n\t0x000000, /* 0x50 icvInfoBk ?? */\n\t0x000000 /* 0x51 icvInfoText ?? */\n]);\nvar XLSIcv = /*#__PURE__*/dup(_XLSIcv);\n\n/* [MS-XLSB] 2.5.97.2 */\nvar BErr = {\n\t/*::[*/0x00/*::]*/: \"#NULL!\",\n\t/*::[*/0x07/*::]*/: \"#DIV/0!\",\n\t/*::[*/0x0F/*::]*/: \"#VALUE!\",\n\t/*::[*/0x17/*::]*/: \"#REF!\",\n\t/*::[*/0x1D/*::]*/: \"#NAME?\",\n\t/*::[*/0x24/*::]*/: \"#NUM!\",\n\t/*::[*/0x2A/*::]*/: \"#N/A\",\n\t/*::[*/0x2B/*::]*/: \"#GETTING_DATA\",\n\t/*::[*/0xFF/*::]*/: \"#WTF?\"\n};\n//var RBErr = evert_num(BErr);\nvar RBErr = {\n\t\"#NULL!\": 0x00,\n\t\"#DIV/0!\": 0x07,\n\t\"#VALUE!\": 0x0F,\n\t\"#REF!\": 0x17,\n\t\"#NAME?\": 0x1D,\n\t\"#NUM!\": 0x24,\n\t\"#N/A\": 0x2A,\n\t\"#GETTING_DATA\": 0x2B,\n\t\"#WTF?\": 0xFF\n};\n\nvar XLSLblBuiltIn = [\n\t\"_xlnm.Consolidate_Area\",\n\t\"_xlnm.Auto_Open\",\n\t\"_xlnm.Auto_Close\",\n\t\"_xlnm.Extract\",\n\t\"_xlnm.Database\",\n\t\"_xlnm.Criteria\",\n\t\"_xlnm.Print_Area\",\n\t\"_xlnm.Print_Titles\",\n\t\"_xlnm.Recorder\",\n\t\"_xlnm.Data_Form\",\n\t\"_xlnm.Auto_Activate\",\n\t\"_xlnm.Auto_Deactivate\",\n\t\"_xlnm.Sheet_Title\",\n\t\"_xlnm._FilterDatabase\"\n];\n\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n/* 12.3 Part Summary */\n/* 14.2 Part Summary */\n/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\nvar ct2type/*{[string]:string}*/ = ({\n\t/* Workbook */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.binary.macroEnabled.main\": \"workbooks\",\n\t\"application/vnd.ms-excel.addin.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": \"workbooks\",\n\n\t/* Worksheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": \"sheets\",\n\t\"application/vnd.ms-excel.worksheet\": \"sheets\",\n\t\"application/vnd.ms-excel.binIndexWs\": \"TODO\", /* Binary Index */\n\n\t/* Chartsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": \"charts\",\n\t\"application/vnd.ms-excel.chartsheet\": \"charts\",\n\n\t/* Macrosheet */\n\t\"application/vnd.ms-excel.macrosheet+xml\": \"macros\",\n\t\"application/vnd.ms-excel.macrosheet\": \"macros\",\n\t\"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n\t\"application/vnd.ms-excel.binIndexMs\": \"TODO\", /* Binary Index */\n\n\t/* Dialogsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": \"dialogs\",\n\t\"application/vnd.ms-excel.dialogsheet\": \"dialogs\",\n\n\t/* Shared Strings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\": \"strs\",\n\t\"application/vnd.ms-excel.sharedStrings\": \"strs\",\n\n\t/* Styles */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": \"styles\",\n\t\"application/vnd.ms-excel.styles\": \"styles\",\n\n\t/* File Properties */\n\t\"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n\t\"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n\t\"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n\t/* Custom Data Properties */\n\t\"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n\t/* Comments */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": \"comments\",\n\t\"application/vnd.ms-excel.comments\": \"comments\",\n\t\"application/vnd.ms-excel.threadedcomments+xml\": \"threadedcomments\",\n\t\"application/vnd.ms-excel.person+xml\": \"people\",\n\n\t/* Metadata (Stock/Geography and Dynamic Array) */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"metadata\",\n\t\"application/vnd.ms-excel.sheetMetadata\": \"metadata\",\n\n\t/* PivotTable */\n\t\"application/vnd.ms-excel.pivotTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n\t/* Chart Objects */\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n\t/* Chart Colors */\n\t\"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n\t/* Chart Style */\n\t\"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n\t/* Chart Advanced */\n\t\"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n\t/* Calculation Chain */\n\t\"application/vnd.ms-excel.calcChain\": \"calcchains\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n\t/* Printer Settings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n\t/* ActiveX */\n\t\"application/vnd.ms-office.activeX\": \"TODO\",\n\t\"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n\t/* Custom Toolbars */\n\t\"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n\t/* External Data Connections */\n\t\"application/vnd.ms-excel.connections\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n\t/* External Links */\n\t\"application/vnd.ms-excel.externalLink\": \"links\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n\t/* PivotCache */\n\t\"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n\t\"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n\t/* Query Table */\n\t\"application/vnd.ms-excel.queryTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n\t/* Shared Workbook */\n\t\"application/vnd.ms-excel.userNames\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionLog\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n\t/* Single Cell Table */\n\t\"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n\t/* Slicer */\n\t\"application/vnd.ms-excel.slicer\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache\": \"TODO\",\n\t\"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n\t/* Sort Map */\n\t\"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n\t/* Table */\n\t\"application/vnd.ms-excel.table\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n\t/* Themes */\n\t\"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n\t/* Theme Override */\n\t\"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n\t/* Timeline */\n\t\"application/vnd.ms-excel.Timeline+xml\": \"TODO\", /* verify */\n\t\"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\", /* verify */\n\n\t/* VBA */\n\t\"application/vnd.ms-office.vbaProject\": \"vba\",\n\t\"application/vnd.ms-office.vbaProjectSignature\": \"TODO\",\n\n\t/* Volatile Dependencies */\n\t\"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n\t/* Control Properties */\n\t\"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n\t/* Data Model */\n\t\"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n\t/* Survey */\n\t\"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n\t/* Drawing */\n\t\"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n\t/* VML */\n\t\"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n\n\t\"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n\t\"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n\t/* Image */\n\t\"image/png\": \"TODO\",\n\n\t\"sheet\": \"js\"\n}/*:any*/);\n\nvar CT_LIST = {\n\tworkbooks: {\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n\t\txlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n\t\txlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n\t\txlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n\t\txltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n\t},\n\tstrs: { /* Shared Strings */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n\t\txlsb: \"application/vnd.ms-excel.sharedStrings\"\n\t},\n\tcomments: { /* Comments */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n\t\txlsb: \"application/vnd.ms-excel.comments\"\n\t},\n\tsheets: { /* Worksheet */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.worksheet\"\n\t},\n\tcharts: { /* Chartsheet */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.chartsheet\"\n\t},\n\tdialogs: { /* Dialogsheet */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.dialogsheet\"\n\t},\n\tmacros: { /* Macrosheet (Excel 4.0 Macros) */\n\t\txlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.macrosheet\"\n\t},\n\tmetadata: { /* Metadata (Stock/Geography and Dynamic Array) */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\",\n\t\txlsb: \"application/vnd.ms-excel.sheetMetadata\"\n\t},\n\tstyles: { /* Styles */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n\t\txlsb: \"application/vnd.ms-excel.styles\"\n\t}\n};\n\nfunction new_ct()/*:any*/ {\n\treturn ({\n\t\tworkbooks:[], sheets:[], charts:[], dialogs:[], macros:[],\n\t\trels:[], strs:[], comments:[], threadedcomments:[], links:[],\n\t\tcoreprops:[], extprops:[], custprops:[], themes:[], styles:[],\n\t\tcalcchains:[], vba: [], drawings: [], metadata: [], people:[],\n\t\tTODO:[], xmlns: \"\" }/*:any*/);\n}\n\nfunction parse_ct(data/*:?string*/) {\n\tvar ct = new_ct();\n\tif(!data || !data.match) return ct;\n\tvar ctext = {};\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0].replace(nsregex,\"<\")) {\n\t\t\tcase ' 0 ? ct.calcchains[0] : \"\";\n\tct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n\tct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n\tct.defaults = ctext;\n\tdelete ct.calcchains;\n\treturn ct;\n}\n\nfunction write_ct(ct, opts, raw)/*:string*/ {\n\tvar type2ct/*{[string]:Array}*/ = evert_arr(ct2type);\n\n\tvar o/*:Array*/ = [], v;\n\n\tif(!raw) {\n\t\to[o.length] = (XML_HEADER);\n\t\to[o.length] = writextag('Types', null, {\n\t\t\t'xmlns': XMLNS.CT,\n\t\t\t'xmlns:xsd': XMLNS.xsd,\n\t\t\t'xmlns:xsi': XMLNS.xsi\n\t\t});\n\t\to = o.concat([\n\t\t\t['xml', 'application/xml'],\n\t\t\t['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],\n\t\t\t['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'],\n\t\t\t['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n\t\t\t/* from test files */\n\t\t\t['bmp', 'image/bmp'],\n\t\t\t['png', 'image/png'],\n\t\t\t['gif', 'image/gif'],\n\t\t\t['emf', 'image/x-emf'],\n\t\t\t['wmf', 'image/x-wmf'],\n\t\t\t['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'],\n\t\t\t['tif', 'image/tiff'], ['tiff', 'image/tiff'],\n\t\t\t['pdf', 'application/pdf'],\n\t\t\t['rels', 'application/vnd.openxmlformats-package.relationships+xml']\n\t\t].map(function(x) {\n\t\t\treturn writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});\n\t\t}));\n\t}\n\n\t/* only write first instance */\n\tvar f1 = function(w) {\n\t\tif(ct[w] && ct[w].length > 0) {\n\t\t\tv = ct[w][0];\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t}\n\t};\n\n\t/* book type-specific */\n\tvar f2 = function(w) {\n\t\t(ct[w]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t});\n\t};\n\n\t/* standard type */\n\tvar f3 = function(t) {\n\t\t(ct[t]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': type2ct[t][0]\n\t\t\t}));\n\t\t});\n\t};\n\n\tf1('workbooks');\n\tf2('sheets');\n\tf2('charts');\n\tf3('themes');\n\t['strs', 'styles'].forEach(f1);\n\t['coreprops', 'extprops', 'custprops'].forEach(f3);\n\tf3('vba');\n\tf3('comments');\n\tf3('threadedcomments');\n\tf3('drawings');\n\tf2('metadata');\n\tf3('people');\n\tif(!raw && o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 9.3 Relationships */\nvar RELS = ({\n\tWB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tSHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tHLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n\tVML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n\tXPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n\tXMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n\tXLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n\tCXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n\tCXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n\tCMNT: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n\tCORE_PROPS: \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n\tEXT_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n\tCUST_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties',\n\tSST: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n\tSTY: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n\tTHEME: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n\tCHART: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n\tCHARTEX: \"http://schemas.microsoft.com/office/2014/relationships/chartEx\",\n\tCS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\",\n\tWS: [\n\t\t\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n\t\t\"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"\n\t],\n\tDS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\",\n\tMS: \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\",\n\tIMG: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n\tDRAW: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n\tXLMETA: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata\",\n\tTCMNT: \"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment\",\n\tPEOPLE: \"http://schemas.microsoft.com/office/2017/10/relationships/person\",\n\tCONN: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/connections\",\n\tVBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n}/*:any*/);\n\n/* 9.3.3 Representing Relationships */\nfunction get_rels_path(file/*:string*/)/*:string*/ {\n\tvar n = file.lastIndexOf(\"/\");\n\treturn file.slice(0,n+1) + '_rels/' + file.slice(n+1) + \".rels\";\n}\n\nfunction parse_rels(data/*:?string*/, currentFilePath/*:string*/) {\n\tvar rels = {\"!id\":{}};\n\tif (!data) return rels;\n\tif (currentFilePath.charAt(0) !== '/') {\n\t\tcurrentFilePath = '/'+currentFilePath;\n\t}\n\tvar hash = {};\n\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\t/* 9.3.2.2 OPC_Relationships */\n\t\tif (y[0] === '2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\nfunction add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?string*/)/*:number*/ {\n\tif(!relobj) relobj = {};\n\tif(!rels['!id']) rels['!id'] = {};\n\tif(!rels['!idx']) rels['!idx'] = 1;\n\tif(rId < 0) for(rId = rels['!idx']; rels['!id']['rId' + rId]; ++rId){/* empty */}\n\trels['!idx'] = rId + 1;\n\trelobj.Id = 'rId' + rId;\n\trelobj.Type = type;\n\trelobj.Target = f;\n\tif(targetmode) relobj.TargetMode = targetmode;\n\telse if([RELS.HLINK, RELS.XPATH, RELS.XMISS].indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n\tif(rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n\trels['!id'][relobj.Id] = relobj;\n\trels[('/' + relobj.Target).replace(\"//\",\"/\")] = relobj;\n\treturn rId;\n}\n/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */\n/* Part 3 Section 4 Manifest File */\nvar CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\nfunction parse_manifest(d, opts) {\n\tvar str = xlml_normalize(d);\n\tvar Rn;\n\tvar FEtag;\n\twhile((Rn = xlmlregex.exec(str))) switch(Rn[3]) {\n\t\tcase 'manifest': break; // 4.2 \n\t\tcase 'file-entry': // 4.3 \n\t\t\tFEtag = parsexmltag(Rn[0], false);\n\t\t\tif(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error(\"This OpenDocument is not a spreadsheet\");\n\t\t\tbreak;\n\t\tcase 'encryption-data': // 4.4 \n\t\tcase 'algorithm': // 4.5 \n\t\tcase 'start-key-generation': // 4.6 \n\t\tcase 'key-derivation': // 4.7 \n\t\t\tthrow new Error(\"Unsupported ODS Encryption\");\n\t\tdefault: if(opts && opts.WTF) throw Rn;\n\t}\n}\n\nfunction write_manifest(manifest/*:Array >*/)/*:string*/ {\n\tvar o = [XML_HEADER];\n\to.push('\\n');\n\to.push(' \\n');\n\tfor(var i = 0; i < manifest.length; ++i) o.push(' \\n');\n\to.push('');\n\treturn o.join(\"\");\n}\n\n/* Part 3 Section 6 Metadata Manifest File */\nfunction write_rdf_type(file/*:string*/, res/*:string*/, tag/*:?string*/) {\n\treturn [\n\t\t' \\n',\n\t\t' \\n',\n\t\t' \\n'\n\t].join(\"\");\n}\nfunction write_rdf_has(base/*:string*/, file/*:string*/) {\n\treturn [\n\t\t' \\n',\n\t\t' \\n',\n\t\t' \\n'\n\t].join(\"\");\n}\nfunction write_rdf(rdf) {\n\tvar o = [XML_HEADER];\n\to.push('\\n');\n\tfor(var i = 0; i != rdf.length; ++i) {\n\t\to.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n\t\to.push(write_rdf_has(\"\",rdf[i][0]));\n\t}\n\to.push(write_rdf_type(\"\",\"Document\", \"pkg\"));\n\to.push('');\n\treturn o.join(\"\");\n}\n/* TODO: pull properties */\nfunction write_meta_ods(/*:: wb: Workbook, opts: any*/)/*:string*/ {\n\treturn 'Sheet' + 'JS ' + XLSX.version + '';\n}\n\n/* ECMA-376 Part II 11.1 Core Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar CORE_PROPS/*:Array >*/ = [\n\t[\"cp:category\", \"Category\"],\n\t[\"cp:contentStatus\", \"ContentStatus\"],\n\t[\"cp:keywords\", \"Keywords\"],\n\t[\"cp:lastModifiedBy\", \"LastAuthor\"],\n\t[\"cp:lastPrinted\", \"LastPrinted\"],\n\t[\"cp:revision\", \"RevNumber\"],\n\t[\"cp:version\", \"Version\"],\n\t[\"dc:creator\", \"Author\"],\n\t[\"dc:description\", \"Comments\"],\n\t[\"dc:identifier\", \"Identifier\"],\n\t[\"dc:language\", \"Language\"],\n\t[\"dc:subject\", \"Subject\"],\n\t[\"dc:title\", \"Title\"],\n\t[\"dcterms:created\", \"CreatedDate\", 'date'],\n\t[\"dcterms:modified\", \"ModifiedDate\", 'date']\n];\n\nvar CORE_PROPS_REGEX/*:Array*/ = /*#__PURE__*/(function() {\n\tvar r = new Array(CORE_PROPS.length);\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar g = \"(?:\"+ f[0].slice(0,f[0].indexOf(\":\")) +\":)\"+ f[0].slice(f[0].indexOf(\":\")+1);\n\t\tr[i] = new RegExp(\"<\" + g + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + g + \">\");\n\t}\n\treturn r;\n})();\n\nfunction parse_core_props(data) {\n\tvar p = {};\n\tdata = utf8read(data);\n\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);\n\t\tif(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n\t\tif(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n\t}\n\n\treturn p;\n}\n\nfunction cp_doit(f, g, h, o, p) {\n\tif(p[f] != null || g == null || g === \"\") return;\n\tp[f] = g;\n\tg = escapexml(g);\n\to[o.length] = (h ? writextag(f,g,h) : writetag(f,g));\n}\n\nfunction write_core_props(cp, _opts) {\n\tvar opts = _opts || {};\n\tvar o = [XML_HEADER, writextag('cp:coreProperties', null, {\n\t\t//'xmlns': XMLNS.CORE_PROPS,\n\t\t'xmlns:cp': XMLNS.CORE_PROPS,\n\t\t'xmlns:dc': XMLNS.dc,\n\t\t'xmlns:dcterms': XMLNS.dcterms,\n\t\t'xmlns:dcmitype': XMLNS.dcmitype,\n\t\t'xmlns:xsi': XMLNS.xsi\n\t})], p = {};\n\tif(!cp && !opts.Props) return o.join(\"\");\n\n\tif(cp) {\n\t\tif(cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t\tif(cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t}\n\n\tfor(var i = 0; i != CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n\t\tif(v === true) v = \"1\";\n\t\telse if(v === false) v = \"0\";\n\t\telse if(typeof v == \"number\") v = String(v);\n\t\tif(v != null) cp_doit(f[0], v, null, o, p);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.3 Extended File Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar EXT_PROPS/*:Array >*/ = [\n\t[\"Application\", \"Application\", \"string\"],\n\t[\"AppVersion\", \"AppVersion\", \"string\"],\n\t[\"Company\", \"Company\", \"string\"],\n\t[\"DocSecurity\", \"DocSecurity\", \"string\"],\n\t[\"Manager\", \"Manager\", \"string\"],\n\t[\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"],\n\t[\"SharedDoc\", \"SharedDoc\", \"bool\"],\n\t[\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"],\n\t[\"ScaleCrop\", \"ScaleCrop\", \"bool\"],\n\t[\"HeadingPairs\", \"HeadingPairs\", \"raw\"],\n\t[\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]\n];\n\nvar PseudoPropsPairs = [\n\t\"Worksheets\", \"SheetNames\",\n\t\"NamedRanges\", \"DefinedNames\",\n\t\"Chartsheets\", \"ChartNames\"\n];\nfunction load_props_pairs(HP/*:string|Array>*/, TOP, props, opts) {\n\tvar v = [];\n\tif(typeof HP == \"string\") v = parseVector(HP, opts);\n\telse for(var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) { return {v:hp}; }));\n\tvar parts = (typeof TOP == \"string\") ? parseVector(TOP, opts).map(function (x) { return x.v; }) : TOP;\n\tvar idx = 0, len = 0;\n\tif(parts.length > 0) for(var i = 0; i !== v.length; i += 2) {\n\t\tlen = +(v[i+1].v);\n\t\tswitch(v[i].v) {\n\t\t\tcase \"Worksheets\":\n\t\t\tcase \"工作表\":\n\t\t\tcase \"Листы\":\n\t\t\tcase \"أوراق العمل\":\n\t\t\tcase \"ワークシート\":\n\t\t\tcase \"גליונות עבודה\":\n\t\t\tcase \"Arbeitsblätter\":\n\t\t\tcase \"Çalışma Sayfaları\":\n\t\t\tcase \"Feuilles de calcul\":\n\t\t\tcase \"Fogli di lavoro\":\n\t\t\tcase \"Folhas de cálculo\":\n\t\t\tcase \"Planilhas\":\n\t\t\tcase \"Regneark\":\n\t\t\tcase \"Hojas de cálculo\":\n\t\t\tcase \"Werkbladen\":\n\t\t\t\tprops.Worksheets = len;\n\t\t\t\tprops.SheetNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Named Ranges\":\n\t\t\tcase \"Rangos con nombre\":\n\t\t\tcase \"名前付き一覧\":\n\t\t\tcase \"Benannte Bereiche\":\n\t\t\tcase \"Navngivne områder\":\n\t\t\t\tprops.NamedRanges = len;\n\t\t\t\tprops.DefinedNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Charts\":\n\t\t\tcase \"Diagramme\":\n\t\t\t\tprops.Chartsheets = len;\n\t\t\t\tprops.ChartNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\t\t}\n\t\tidx += len;\n\t}\n}\n\nfunction parse_ext_props(data, p, opts) {\n\tvar q = {}; if(!p) p = {};\n\tdata = utf8read(data);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tvar xml = (data.match(matchtag(f[0]))||[])[1];\n\t\tswitch(f[2]) {\n\t\t\tcase \"string\": if(xml) p[f[1]] = unescapexml(xml); break;\n\t\t\tcase \"bool\": p[f[1]] = xml === \"true\"; break;\n\t\t\tcase \"raw\":\n\t\t\t\tvar cur = data.match(new RegExp(\"<\" + f[0] + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + f[0] + \">\"));\n\t\t\t\tif(cur && cur.length > 0) q[f[1]] = cur[1];\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n\n\treturn p;\n}\n\nfunction write_ext_props(cp/*::, opts*/)/*:string*/ {\n\tvar o/*:Array*/ = [], W = writextag;\n\tif(!cp) cp = {};\n\tcp.Application = \"SheetJS\";\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (writextag('Properties', null, {\n\t\t'xmlns': XMLNS.EXT_PROPS,\n\t\t'xmlns:vt': XMLNS.vt\n\t}));\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tif(cp[f[1]] === undefined) return;\n\t\tvar v;\n\t\tswitch(f[2]) {\n\t\t\tcase 'string': v = escapexml(String(cp[f[1]])); break;\n\t\t\tcase 'bool': v = cp[f[1]] ? 'true' : 'false'; break;\n\t\t}\n\t\tif(v !== undefined) o[o.length] = (W(f[0], v));\n\t});\n\n\t/* TODO: HeadingPairs, TitlesOfParts */\n\to[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', 'Worksheets')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:\"variant\"})));\n\to[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return \"\" + escapexml(s) + \"\"; }).join(\"\"), {size: cp.Worksheets, baseType:\"lpstr\"})));\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.2 Custom File Properties Part */\nvar custregex = /<[^>]+>[^<]*/g;\nfunction parse_cust_props(data/*:string*/, opts) {\n\tvar p = {}, name = \"\";\n\tvar m = data.match(custregex);\n\tif(m) for(var i = 0; i != m.length; ++i) {\n\t\tvar x = m[i], y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': name = null; break;\n\t\t\tdefault: if (x.indexOf('');\n\t\t\t\tvar type = toks[0].slice(4), text = toks[1];\n\t\t\t\t/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase 'lpstr': case 'bstr': case 'lpwstr':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bool':\n\t\t\t\t\t\tp[name] = parsexmlbool(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':\n\t\t\t\t\t\tp[name] = parseInt(text, 10);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'r4': case 'r8': case 'decimal':\n\t\t\t\t\t\tp[name] = parseFloat(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'filetime': case 'date':\n\t\t\t\t\t\tp[name] = parseDate(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cy': case 'error':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(type.slice(-1) == '/') break;\n\t\t\t\t\t\tif(opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n\t\t\t\t}\n\t\t\t} else if(x.slice(0,2) === \"2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* Common Name -> XLML Name */\nvar XLMLDocPropsMap = {\n\tTitle: 'Title',\n\tSubject: 'Subject',\n\tAuthor: 'Author',\n\tKeywords: 'Keywords',\n\tComments: 'Description',\n\tLastAuthor: 'LastAuthor',\n\tRevNumber: 'Revision',\n\tApplication: 'AppName',\n\t/* TotalTime: 'TotalTime', */\n\tLastPrinted: 'LastPrinted',\n\tCreatedDate: 'Created',\n\tModifiedDate: 'LastSaved',\n\t/* Pages */\n\t/* Words */\n\t/* Characters */\n\tCategory: 'Category',\n\t/* PresentationFormat */\n\tManager: 'Manager',\n\tCompany: 'Company',\n\t/* Guid */\n\t/* HyperlinkBase */\n\t/* Bytes */\n\t/* Lines */\n\t/* Paragraphs */\n\t/* CharactersWithSpaces */\n\tAppVersion: 'Version',\n\n\tContentStatus: 'ContentStatus', /* NOTE: missing from schema */\n\tIdentifier: 'Identifier', /* NOTE: missing from schema */\n\tLanguage: 'Language' /* NOTE: missing from schema */\n};\nvar evert_XLMLDPM;\n\nfunction xlml_set_prop(Props, tag/*:string*/, val) {\n\tif(!evert_XLMLDPM) evert_XLMLDPM = evert(XLMLDocPropsMap);\n\ttag = evert_XLMLDPM[tag] || tag;\n\tProps[tag] = val;\n}\n\nfunction xlml_write_docprops(Props, opts) {\n\tvar o/*:Array*/ = [];\n\tkeys(XLMLDocPropsMap).map(function(m) {\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n\t\tthrow m;\n\t}).forEach(function(p) {\n\t\tif(Props[p[1]] == null) return;\n\t\tvar m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\t\tswitch(p[2]) {\n\t\t\tcase 'date': m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"Z\"); break;\n\t\t}\n\t\tif(typeof m == 'number') m = String(m);\n\t\telse if(m === true || m === false) { m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"\");\n\t\to.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n\t});\n\treturn writextag('DocumentProperties', o.join(\"\"), {xmlns:XLMLNS.o });\n}\nfunction xlml_write_custprops(Props, Custprops/*::, opts*/) {\n\tvar BLACKLIST = [\"Worksheets\",\"SheetNames\"];\n\tvar T = 'CustomDocumentProperties';\n\tvar o/*:Array*/ = [];\n\tif(Props) keys(Props).forEach(function(k) {\n\t\t/*:: if(!Props) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(k == CORE_PROPS[i][1]) return;\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(k == EXT_PROPS[i][1]) return;\n\t\tfor(i = 0; i < BLACKLIST.length; ++i) if(k == BLACKLIST[i]) return;\n\n\t\tvar m = Props[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\tif(Custprops) keys(Custprops).forEach(function(k) {\n\t\t/*:: if(!Custprops) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n\t\tif(Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tvar m = Custprops[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) { t = \"dateTime.tz\"; m = m.toISOString(); }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\treturn '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '';\n}\n/* [MS-DTYP] 2.3.3 FILETIME */\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\nfunction parse_FILETIME(blob) {\n\tvar dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);\n\treturn new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\\.000/,\"\");\n}\nfunction write_FILETIME(time/*:string|Date*/) {\n\tvar date = (typeof time == \"string\") ? new Date(Date.parse(time)) : time;\n\tvar t = date.getTime() / 1000 + 11644473600;\n\tvar l = t % Math.pow(2,32), h = (t - l) / Math.pow(2,32);\n\tl *= 1e7; h *= 1e7;\n\tvar w = (l / Math.pow(2,32)) | 0;\n\tif(w > 0) { l = l % Math.pow(2,32); h += w; }\n\tvar o = new_buf(8); o.write_shift(4, l); o.write_shift(4, h); return o;\n}\n\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\nfunction parse_lpstr(blob, type, pad/*:?number*/) {\n\tvar start = blob.l;\n\tvar str = blob.read_shift(0, 'lpstr-cp');\n\tif(pad) while((blob.l - start) & 3) ++blob.l;\n\treturn str;\n}\n\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\nfunction parse_lpwstr(blob, type, pad) {\n\tvar str = blob.read_shift(0, 'lpwstr');\n\tif(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;\n\treturn str;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\nfunction parse_VtStringBase(blob, stringType, pad) {\n\tif(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);\n\treturn parse_lpstr(blob, stringType, pad);\n}\n\nfunction parse_VtString(blob, t/*:number*/, pad/*:?boolean*/) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }\nfunction parse_VtUnalignedString(blob, t/*:number*/) { if(!t) throw new Error(\"VtUnalignedString must have positive length\"); return parse_VtStringBase(blob, t, 0); }\n\n/* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */\nfunction parse_VtVecLpwstrValue(blob)/*:Array*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array*/ = [];\n\tfor(var i = 0; i != length; ++i) {\n\t\tvar start = blob.l;\n\t\tret[i] = blob.read_shift(0, 'lpwstr').replace(chr0,'');\n\t\tif((blob.l - start) & 0x02) blob.l += 2;\n\t}\n\treturn ret;\n}\n\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\nfunction parse_VtVecUnalignedLpstrValue(blob)/*:Array*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array*/ = [];\n\tfor(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0,'');\n\treturn ret;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\nfunction parse_VtHeadingPair(blob) {\n\tvar start = blob.l;\n\tvar headingString = parse_TypedPropertyValue(blob, VT_USTR);\n\tif(blob[blob.l] == 0x00 && blob[blob.l+1] == 0x00 && ((blob.l - start) & 0x02)) blob.l += 2;\n\tvar headerParts = parse_TypedPropertyValue(blob, VT_I4);\n\treturn [headingString, headerParts];\n}\n\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\nfunction parse_VtVecHeadingPairValue(blob) {\n\tvar cElements = blob.read_shift(4);\n\tvar out = [];\n\tfor(var i = 0; i < cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));\n\treturn out;\n}\n\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\nfunction parse_dictionary(blob,CodePage) {\n\tvar cnt = blob.read_shift(4);\n\tvar dict/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(var j = 0; j != cnt; ++j) {\n\t\tvar pid = blob.read_shift(4);\n\t\tvar len = blob.read_shift(4);\n\t\tdict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');\n\t\tif(CodePage === 0x4B0 && (len % 2)) blob.l += 2;\n\t}\n\tif(blob.l & 3) blob.l = (blob.l>>2+1)<<2;\n\treturn dict;\n}\n\n/* [MS-OLEPS] 2.9 BLOB */\nfunction parse_BLOB(blob) {\n\tvar size = blob.read_shift(4);\n\tvar bytes = blob.slice(blob.l,blob.l+size);\n\tblob.l += size;\n\tif((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;\n\treturn bytes;\n}\n\n/* [MS-OLEPS] 2.11 ClipboardData */\nfunction parse_ClipboardData(blob) {\n\t// TODO\n\tvar o = {};\n\to.Size = blob.read_shift(4);\n\t//o.Format = blob.read_shift(4);\n\tblob.l += o.Size + 3 - (o.Size - 1) % 4;\n\treturn o;\n}\n\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\nfunction parse_TypedPropertyValue(blob, type/*:number*/, _opts)/*:any*/ {\n\tvar t = blob.read_shift(2), ret, opts = _opts||{};\n\tblob.l += 2;\n\tif(type !== VT_VARIANT)\n\tif(t !== type && VT_CUSTOM.indexOf(type)===-1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t);\n\tswitch(type === VT_VARIANT ? t : type) {\n\t\tcase 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;\n\t\tcase 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;\n\t\tcase 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;\n\t\tcase 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;\n\t\tcase 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');\n\t\tcase 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);\n\t\tcase 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);\n\t\tcase 0x41 /*VT_BLOB*/: return parse_BLOB(blob);\n\t\tcase 0x47 /*VT_CF*/: return parse_ClipboardData(blob);\n\t\tcase 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw).replace(chr0,'');\n\t\tcase 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t/*, 4*/).replace(chr0,'');\n\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPairValue(blob);\n\t\tcase 0x101E /*VT_VECTOR|VT_LPSTR*/:\n\t\tcase 0x101F /*VT_VECTOR|VT_LPWSTR*/:\n\t\t\treturn t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n\t}\n}\nfunction write_TypedPropertyValue(type/*:number*/, value) {\n\tvar o = new_buf(4), p = new_buf(4);\n\to.write_shift(4, type == 0x50 ? 0x1F : type);\n\tswitch(type) {\n\t\tcase 0x03 /*VT_I4*/: p.write_shift(-4, value); break;\n\t\tcase 0x05 /*VT_I4*/: p = new_buf(8); p.write_shift(8, value, 'f'); break;\n\t\tcase 0x0B /*VT_BOOL*/: p.write_shift(4, value ? 0x01 : 0x00); break;\n\t\tcase 0x40 /*VT_FILETIME*/: /*:: if(typeof value !== \"string\" && !(value instanceof Date)) throw \"unreachable\"; */ p = write_FILETIME(value); break;\n\t\tcase 0x1F /*VT_LPWSTR*/:\n\t\tcase 0x50 /*VT_STRING*/:\n\t\t\t/*:: if(typeof value !== \"string\") throw \"unreachable\"; */\n\t\t\tp = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tp.write_shift(4, value.length + 1);\n\t\t\tp.write_shift(0, value, \"dbcs\");\n\t\t\twhile(p.l != p.length) p.write_shift(1, 0);\n\t\t\tbreak;\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n\t}\n\treturn bconcat([o, p]);\n}\n\n/* [MS-OLEPS] 2.20 PropertySet */\nfunction parse_PropertySet(blob, PIDSI) {\n\tvar start_addr = blob.l;\n\tvar size = blob.read_shift(4);\n\tvar NumProps = blob.read_shift(4);\n\tvar Props = [], i = 0;\n\tvar CodePage = 0;\n\tvar Dictionary = -1, DictObj/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tvar PropID = blob.read_shift(4);\n\t\tvar Offset = blob.read_shift(4);\n\t\tProps[i] = [PropID, Offset + start_addr];\n\t}\n\tProps.sort(function(x,y) { return x[1] - y[1]; });\n\tvar PropH = {};\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tif(blob.l !== Props[i][1]) {\n\t\t\tvar fail = true;\n\t\t\tif(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {\n\t\t\t\tcase 0x02 /*VT_I2*/: if(blob.l+2 === Props[i][1]) { blob.l+=2; fail = false; } break;\n\t\t\t\tcase 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t}\n\t\t\tif((!PIDSI||i==0) && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }\n\t\t\tif(fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n\t\t}\n\t\tif(PIDSI) {\n\t\t\tif(Props[i][0] == 0 && Props.length > i+1 && Props[i][1] == Props[i+1][1]) continue; // R9\n\t\t\tvar piddsi = PIDSI[Props[i][0]];\n\t\t\tPropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});\n\t\t\tif(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n\t\t\tif(piddsi.n == \"CodePage\") switch(PropH[piddsi.n]) {\n\t\t\t\tcase 0: PropH[piddsi.n] = 1252;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 874:\n\t\t\t\tcase 932:\n\t\t\t\tcase 936:\n\t\t\t\tcase 949:\n\t\t\t\tcase 950:\n\t\t\t\tcase 1250:\n\t\t\t\tcase 1251:\n\t\t\t\tcase 1253:\n\t\t\t\tcase 1254:\n\t\t\t\tcase 1255:\n\t\t\t\tcase 1256:\n\t\t\t\tcase 1257:\n\t\t\t\tcase 1258:\n\t\t\t\tcase 10000:\n\t\t\t\tcase 1200:\n\t\t\t\tcase 1201:\n\t\t\t\tcase 1252:\n\t\t\t\tcase 65000: case -536:\n\t\t\t\tcase 65001: case -535:\n\t\t\t\t\tset_cp(CodePage = (PropH[piddsi.n]>>>0) & 0xFFFF); break;\n\t\t\t\tdefault: throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n\t\t\t}\n\t\t} else {\n\t\t\tif(Props[i][0] === 0x1) {\n\t\t\t\tCodePage = PropH.CodePage = (parse_TypedPropertyValue(blob, VT_I2)/*:number*/);\n\t\t\t\tset_cp(CodePage);\n\t\t\t\tif(Dictionary !== -1) {\n\t\t\t\t\tvar oldpos = blob.l;\n\t\t\t\t\tblob.l = Props[Dictionary][1];\n\t\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t\t\tblob.l = oldpos;\n\t\t\t\t}\n\t\t\t} else if(Props[i][0] === 0) {\n\t\t\t\tif(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }\n\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t} else {\n\t\t\t\tvar name = DictObj[Props[i][0]];\n\t\t\t\tvar val;\n\t\t\t\t/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\t\t\t\tswitch(blob[blob.l]) {\n\t\t\t\t\tcase 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;\n\t\t\t\t\tcase 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;\n\t\t\t\t\tcase 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;\n\t\t\t\t\tcase 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;\n\t\t\t\t\tcase 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;\n\t\t\t\t\tcase 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;\n\t\t\t\t\tdefault: throw new Error(\"unparsed value: \" + blob[blob.l]);\n\t\t\t\t}\n\t\t\t\tPropH[name] = val;\n\t\t\t}\n\t\t}\n\t}\n\tblob.l = start_addr + size; /* step ahead to skip padding */\n\treturn PropH;\n}\nvar XLSPSSkip = [ \"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\" ];\nfunction guess_property_type(val/*:any*/)/*:number*/ {\n\tswitch(typeof val) {\n\t\tcase \"boolean\": return 0x0B;\n\t\tcase \"number\": return ((val|0)==val) ? 0x03 : 0x05;\n\t\tcase \"string\": return 0x1F;\n\t\tcase \"object\": if(val instanceof Date) return 0x40; break;\n\t}\n\treturn -1;\n}\nfunction write_PropertySet(entries, RE, PIDSI) {\n\tvar hdr = new_buf(8), piao = [], prop = [];\n\tvar sz = 8, i = 0;\n\n\tvar pr = new_buf(8), pio = new_buf(8);\n\tpr.write_shift(4, 0x0002);\n\tpr.write_shift(4, 0x04B0);\n\tpio.write_shift(4, 0x0001);\n\tprop.push(pr); piao.push(pio);\n\tsz += 8 + pr.length;\n\n\tif(!RE) {\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, 0);\n\t\tpiao.unshift(pio);\n\n\t\tvar bufs = [new_buf(4)];\n\t\tbufs[0].write_shift(4, entries.length);\n\t\tfor(i = 0; i < entries.length; ++i) {\n\t\t\tvar value = entries[i][0];\n\t\t\tpr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tpr.write_shift(4, i+2);\n\t\t\tpr.write_shift(4, value.length + 1);\n\t\t\tpr.write_shift(0, value, \"dbcs\");\n\t\t\twhile(pr.l != pr.length) pr.write_shift(1, 0);\n\t\t\tbufs.push(pr);\n\t\t}\n\t\tpr = bconcat(bufs);\n\t\tprop.unshift(pr);\n\t\tsz += 8 + pr.length;\n\t}\n\n\tfor(i = 0; i < entries.length; ++i) {\n\t\tif(RE && !RE[entries[i][0]]) continue;\n\t\tif(XLSPSSkip.indexOf(entries[i][0]) > -1 || PseudoPropsPairs.indexOf(entries[i][0]) > -1) continue;\n\t\tif(entries[i][1] == null) continue;\n\n\t\tvar val = entries[i][1], idx = 0;\n\t\tif(RE) {\n\t\t\tidx = +RE[entries[i][0]];\n\t\t\tvar pinfo = (PIDSI/*:: || {}*/)[idx]/*:: || {} */;\n\t\t\tif(pinfo.p == \"version\" && typeof val == \"string\") {\n\t\t\t\t/*:: if(typeof val !== \"string\") throw \"unreachable\"; */\n\t\t\t\tvar arr = val.split(\".\");\n\t\t\t\tval = ((+arr[0])<<16) + ((+arr[1])||0);\n\t\t\t}\n\t\t\tpr = write_TypedPropertyValue(pinfo.t, val);\n\t\t} else {\n\t\t\tvar T = guess_property_type(val);\n\t\t\tif(T == -1) { T = 0x1F; val = String(val); }\n\t\t\tpr = write_TypedPropertyValue(T, val);\n\t\t}\n\t\tprop.push(pr);\n\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, !RE ? 2+i : idx);\n\t\tpiao.push(pio);\n\n\t\tsz += 8 + pr.length;\n\t}\n\n\tvar w = 8 * (prop.length + 1);\n\tfor(i = 0; i < prop.length; ++i) { piao[i].write_shift(4, w); w += prop[i].length; }\n\thdr.write_shift(4, sz);\n\thdr.write_shift(4, prop.length);\n\treturn bconcat([hdr].concat(piao).concat(prop));\n}\n\n/* [MS-OLEPS] 2.21 PropertySetStream */\nfunction parse_PropertySetStream(file, PIDSI, clsid) {\n\tvar blob = file.content;\n\tif(!blob) return ({}/*:any*/);\n\tprep_blob(blob, 0);\n\n\tvar NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0;\n\tblob.chk('feff', 'Byte Order: ');\n\n\t/*var vers = */blob.read_shift(2); // TODO: check version\n\tvar SystemIdentifier = blob.read_shift(4);\n\tvar CLSID = blob.read_shift(16);\n\tif(CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n\tNumSets = blob.read_shift(4);\n\tif(NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n\tFMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);\n\n\tif(NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);\n\telse if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }\n\tvar PSet0 = parse_PropertySet(blob, PIDSI);\n\n\tvar rval = ({ SystemIdentifier: SystemIdentifier }/*:any*/);\n\tfor(var y in PSet0) rval[y] = PSet0[y];\n\t//rval.blob = blob;\n\trval.FMTID = FMTID0;\n\t//rval.PSet0 = PSet0;\n\tif(NumSets === 1) return rval;\n\tif(Offset1 - blob.l == 2) blob.l += 2;\n\tif(blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n\tvar PSet1;\n\ttry { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}\n\tfor(y in PSet1) rval[y] = PSet1[y];\n\trval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\treturn rval;\n}\nfunction write_PropertySetStream(entries, clsid, RE, PIDSI/*:{[key:string|number]:any}*/, entries2/*:?any*/, clsid2/*:?any*/) {\n\tvar hdr = new_buf(entries2 ? 68 : 48);\n\tvar bufs = [hdr];\n\thdr.write_shift(2, 0xFFFE);\n\thdr.write_shift(2, 0x0000); /* TODO: type 1 props */\n\thdr.write_shift(4, 0x32363237);\n\thdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n\thdr.write_shift(4, (entries2 ? 2 : 1));\n\thdr.write_shift(16, clsid, \"hex\");\n\thdr.write_shift(4, (entries2 ? 68 : 48));\n\tvar ps0 = write_PropertySet(entries, RE, PIDSI);\n\tbufs.push(ps0);\n\n\tif(entries2) {\n\t\tvar ps1 = write_PropertySet(entries2, null, null);\n\t\thdr.write_shift(16, clsid2, \"hex\");\n\t\thdr.write_shift(4, 68 + ps0.length);\n\t\tbufs.push(ps1);\n\t}\n\treturn bconcat(bufs);\n}\n\nfunction parsenoop2(blob, length) { blob.read_shift(length); return null; }\nfunction writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j= 12 ? 2 : 1);\n\tvar encoding = 'sbcs-cont';\n\tvar cp = current_codepage;\n\tif(opts && opts.biff >= 8) current_codepage = 1200;\n\tif(!opts || opts.biff == 8 ) {\n\t\tvar fHighByte = blob.read_shift(1);\n\t\tif(fHighByte) { encoding = 'dbcs-cont'; }\n\t} else if(opts.biff == 12) {\n\t\tencoding = 'wstr';\n\t}\n\tif(opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n\tvar o = cch ? blob.read_shift(cch, encoding) : \"\";\n\tcurrent_codepage = cp;\n\treturn o;\n}\n\n/* 2.5.293 XLUnicodeRichExtendedString */\nfunction parse_XLUnicodeRichExtendedString(blob) {\n\tvar cp = current_codepage;\n\tcurrent_codepage = 1200;\n\tvar cch = blob.read_shift(2), flags = blob.read_shift(1);\n\tvar /*fHighByte = flags & 0x1,*/ fExtSt = flags & 0x4, fRichSt = flags & 0x8;\n\tvar width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\tvar cRun = 0, cbExtRst;\n\tvar z = {};\n\tif(fRichSt) cRun = blob.read_shift(2);\n\tif(fExtSt) cbExtRst = blob.read_shift(4);\n\tvar encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n\tvar msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n\tif(fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\tif(fExtSt) blob.l += cbExtRst; //TODO: parse this\n\tz.t = msg;\n\tif(!fRichSt) { z.raw = \"\" + z.t + \"\"; z.r = z.t; }\n\tcurrent_codepage = cp;\n\treturn z;\n}\nfunction write_XLUnicodeRichExtendedString(xlstr/*:: :XLString, opts*/) {\n\tvar str = (xlstr.t||\"\"), nfmts = 1;\n\n\tvar hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n\thdr.write_shift(2, str.length);\n\thdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n\tif(nfmts > 1) hdr.write_shift(2, nfmts);\n\n\tvar otext = new_buf(2 * str.length);\n\totext.write_shift(2 * str.length, str, 'utf16le');\n\n\tvar out = [hdr, otext];\n\n\treturn bconcat(out);\n}\n\n/* 2.5.296 XLUnicodeStringNoCch */\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\n\tvar retval;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n\t\tif(opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n\t}\n\tvar fHighByte = blob.read_shift(1);\n\tif(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }\n\telse { retval = blob.read_shift(cch, 'dbcs-cont'); }\n\treturn retval;\n}\n\n/* 2.5.294 XLUnicodeString */\nfunction parse_XLUnicodeString(blob, length, opts) {\n\tvar cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn parse_XLUnicodeStringNoCch(blob, cch, opts);\n}\n/* BIFF5 override */\nfunction parse_XLUnicodeString2(blob, length, opts) {\n\tif(opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, (opts.biff <= 4 || !blob.lens ) ? 'cpstr' : 'sbcs-cont');\n}\n/* TODO: BIFF5 and lower, codepage awareness */\nfunction write_XLUnicodeString(str, opts, o) {\n\tif(!o) o = new_buf(3 + 2 * str.length);\n\to.write_shift(2, str.length);\n\to.write_shift(1, 1);\n\to.write_shift(31, str, 'utf16le');\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.61 ControlInfo */\nfunction parse_ControlInfo(blob/*::, length, opts*/) {\n\tvar flags = blob.read_shift(1);\n\tblob.l++;\n\tvar accel = blob.read_shift(2);\n\tblob.l += 2;\n\treturn [flags, accel];\n}\n\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\nfunction parse_URLMoniker(blob/*::, length, opts*/) {\n\tvar len = blob.read_shift(4), start = blob.l;\n\tvar extra = false;\n\tif(len > 24) {\n\t\t/* look ahead */\n\t\tblob.l += len - 24;\n\t\tif(blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n\t\tblob.l = start;\n\t}\n\tvar url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,\"\");\n\tif(extra) blob.l += 24;\n\treturn url;\n}\n\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\nfunction parse_FileMoniker(blob/*::, length*/) {\n\tvar cAnti = blob.read_shift(2);\n\tvar preamble = \"\"; while(cAnti-- > 0) preamble += \"../\";\n\tvar ansiPath = blob.read_shift(0, 'lpstr-ansi');\n\tblob.l += 2; //var endServer = blob.read_shift(2);\n\tif(blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n\tvar sz = blob.read_shift(4);\n\tif(sz === 0) return preamble + ansiPath.replace(/\\\\/g,\"/\");\n\tvar bytes = blob.read_shift(4);\n\tif(blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n\tvar unicodePath = blob.read_shift(bytes>>1, 'utf16le').replace(chr0,\"\");\n\treturn preamble + unicodePath;\n}\n\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\nfunction parse_HyperlinkMoniker(blob, length) {\n\tvar clsid = blob.read_shift(16); length -= 16;\n\tswitch(clsid) {\n\t\tcase \"e0c9ea79f9bace118c8200aa004ba90b\": return parse_URLMoniker(blob, length);\n\t\tcase \"0303000000000000c000000000000046\": return parse_FileMoniker(blob, length);\n\t\tdefault: throw new Error(\"Unsupported Moniker \" + clsid);\n\t}\n}\n\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\nfunction parse_HyperlinkString(blob/*::, length*/) {\n\tvar len = blob.read_shift(4);\n\tvar o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n\treturn o;\n}\nfunction write_HyperlinkString(str/*:string*/, o) {\n\tif(!o) o = new_buf(6 + str.length * 2);\n\to.write_shift(4, 1 + str.length);\n\tfor(var i = 0; i < str.length; ++i) o.write_shift(2, str.charCodeAt(i));\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\nfunction parse_Hyperlink(blob, length)/*:Hyperlink*/ {\n\tvar end = blob.l + length;\n\tvar sVer = blob.read_shift(4);\n\tif(sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n\tvar flags = blob.read_shift(2);\n\tblob.l += 2;\n\tvar displayName, targetFrameName, moniker, oleMoniker, Loc=\"\", guid, fileTime;\n\tif(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n\tif(flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0020) guid = blob.read_shift(16);\n\tif(flags & 0x0040) fileTime = parse_FILETIME(blob/*, 8*/);\n\tblob.l = end;\n\tvar target = targetFrameName||moniker||oleMoniker||\"\";\n\tif(target && Loc) target+=\"#\"+Loc;\n\tif(!target) target = \"#\" + Loc;\n\tif((flags & 0x0002) && target.charAt(0) == \"/\" && target.charAt(1) != \"/\") target = \"file://\" + target;\n\tvar out = ({Target:target}/*:any*/);\n\tif(guid) out.guid = guid;\n\tif(fileTime) out.time = fileTime;\n\tif(displayName) out.Tooltip = displayName;\n\treturn out;\n}\nfunction write_Hyperlink(hl) {\n\tvar out = new_buf(512), i = 0;\n\tvar Target = hl.Target;\n\tif(Target.slice(0,7) == \"file://\") Target = Target.slice(7);\n\tvar hashidx = Target.indexOf(\"#\");\n\tvar F = hashidx > -1 ? 0x1f : 0x17;\n\tswitch(Target.charAt(0)) { case \"#\": F=0x1c; break; case \".\": F&=~2; break; }\n\tout.write_shift(4,2); out.write_shift(4, F);\n\tvar data = [8,6815827,6619237,4849780,83]; for(i = 0; i < data.length; ++i) out.write_shift(4, data[i]);\n\tif(F == 0x1C) {\n\t\tTarget = Target.slice(1);\n\t\twrite_HyperlinkString(Target, out);\n\t} else if(F & 0x02) {\n\t\tdata = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;\n\t\tout.write_shift(4, 2*(Pretarget.length + 1));\n\t\tfor(i = 0; i < Pretarget.length; ++i) out.write_shift(2, Pretarget.charCodeAt(i));\n\t\tout.write_shift(2, 0);\n\t\tif(F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx+1): \"\", out);\n\t} else {\n\t\tdata = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar P = 0;\n\t\twhile(Target.slice(P*3,P*3+3)==\"../\"||Target.slice(P*3,P*3+3)==\"..\\\\\") ++P;\n\t\tout.write_shift(2, P);\n\t\tout.write_shift(4, Target.length - 3 * P + 1);\n\t\tfor(i = 0; i < Target.length - 3 * P; ++i) out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF);\n\t\tout.write_shift(1, 0);\n\t\tout.write_shift(2, 0xFFFF);\n\t\tout.write_shift(2, 0xDEAD);\n\t\tfor(i = 0; i < 6; ++i) out.write_shift(4, 0);\n\t}\n\treturn out.slice(0, out.l);\n}\n\n/* 2.5.178 LongRGBA */\nfunction parse_LongRGBA(blob/*::, length*/) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }\n\n/* 2.5.177 LongRGB */\nfunction parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }\n\n\n/* [MS-XLS] 2.5.19 */\nfunction parse_XLSCell(blob/*::, length*/)/*:Cell*/ {\n\tvar rw = blob.read_shift(2); // 0-indexed\n\tvar col = blob.read_shift(2);\n\tvar ixfe = blob.read_shift(2);\n\treturn ({r:rw, c:col, ixfe:ixfe}/*:any*/);\n}\nfunction write_XLSCell(R/*:number*/, C/*:number*/, ixfe/*:?number*/, o) {\n\tif(!o) o = new_buf(6);\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, ixfe||0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.134 */\nfunction parse_frtHeader(blob) {\n\tvar rt = blob.read_shift(2);\n\tvar flags = blob.read_shift(2); // TODO: parse these flags\n\tblob.l += 8;\n\treturn {type: rt, flags: flags};\n}\n\n\n\nfunction parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts); }\n\n/* [MS-XLS] 2.5.344 */\nfunction parse_XTI(blob, length, opts) {\n\tvar w = opts.biff > 8 ? 4 : 2;\n\tvar iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w,'i'), itabLast = blob.read_shift(w,'i');\n\treturn [iSupBook, itabFirst, itabLast];\n}\n\n/* [MS-XLS] 2.5.218 */\nfunction parse_RkRec(blob) {\n\tvar ixfe = blob.read_shift(2);\n\tvar RK = parse_RkNumber(blob);\n\treturn [ixfe, RK];\n}\n\n/* [MS-XLS] 2.5.1 */\nfunction parse_AddinUdf(blob, length, opts) {\n\tblob.l += 4; length -= 4;\n\tvar l = blob.l + length;\n\tvar udfName = parse_ShortXLUnicodeString(blob, length, opts);\n\tvar cb = blob.read_shift(2);\n\tl -= blob.l;\n\tif(cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n\tblob.l += cb;\n\treturn udfName;\n}\n\n/* [MS-XLS] 2.5.209 TODO: Check sizes */\nfunction parse_Ref8U(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(2);\n\tvar colLast = blob.read_shift(2);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\nfunction write_Ref8U(r/*:Range*/, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(2, r.s.r);\n\to.write_shift(2, r.e.r);\n\to.write_shift(2, r.s.c);\n\to.write_shift(2, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.211 */\nfunction parse_RefU(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(1);\n\tvar colLast = blob.read_shift(1);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\n\n/* [MS-XLS] 2.5.207 */\nvar parse_Ref = parse_RefU;\n\n/* [MS-XLS] 2.5.143 */\nfunction parse_FtCmo(blob/*::, length*/) {\n\tblob.l += 4;\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tblob.l+=12;\n\treturn [id, ot, flags];\n}\n\n/* [MS-XLS] 2.5.149 */\nfunction parse_FtNts(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.l += 16; // GUID TODO\n\tout.fSharedNote = blob.read_shift(2);\n\tblob.l += 4;\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.142 */\nfunction parse_FtCf(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.cf = blob.read_shift(2);\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.140 - 2.5.154 and friends */\nfunction parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); }\nvar FtTab = {\n\t/*::[*/0x00/*::]*/: parse_FtSkip, /* FtEnd */\n\t/*::[*/0x04/*::]*/: parse_FtSkip, /* FtMacro */\n\t/*::[*/0x05/*::]*/: parse_FtSkip, /* FtButton */\n\t/*::[*/0x06/*::]*/: parse_FtSkip, /* FtGmo */\n\t/*::[*/0x07/*::]*/: parse_FtCf, /* FtCf */\n\t/*::[*/0x08/*::]*/: parse_FtSkip, /* FtPioGrbit */\n\t/*::[*/0x09/*::]*/: parse_FtSkip, /* FtPictFmla */\n\t/*::[*/0x0A/*::]*/: parse_FtSkip, /* FtCbls */\n\t/*::[*/0x0B/*::]*/: parse_FtSkip, /* FtRbo */\n\t/*::[*/0x0C/*::]*/: parse_FtSkip, /* FtSbs */\n\t/*::[*/0x0D/*::]*/: parse_FtNts, /* FtNts */\n\t/*::[*/0x0E/*::]*/: parse_FtSkip, /* FtSbsFmla */\n\t/*::[*/0x0F/*::]*/: parse_FtSkip, /* FtGboData */\n\t/*::[*/0x10/*::]*/: parse_FtSkip, /* FtEdoData */\n\t/*::[*/0x11/*::]*/: parse_FtSkip, /* FtRboData */\n\t/*::[*/0x12/*::]*/: parse_FtSkip, /* FtCblsData */\n\t/*::[*/0x13/*::]*/: parse_FtSkip, /* FtLbsData */\n\t/*::[*/0x14/*::]*/: parse_FtSkip, /* FtCblsFmla */\n\t/*::[*/0x15/*::]*/: parse_FtCmo\n};\nfunction parse_FtArray(blob, length/*::, ot*/) {\n\tvar tgt = blob.l + length;\n\tvar fts = [];\n\twhile(blob.l < tgt) {\n\t\tvar ft = blob.read_shift(2);\n\t\tblob.l-=2;\n\t\ttry {\n\t\t\tfts.push(FtTab[ft](blob, tgt - blob.l));\n\t\t} catch(e) { blob.l = tgt; return fts; }\n\t}\n\tif(blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\treturn fts;\n}\n\n/* --- 2.4 Records --- */\n\n/* [MS-XLS] 2.4.21 */\nfunction parse_BOF(blob, length) {\n\tvar o = {BIFFVer:0, dt:0};\n\to.BIFFVer = blob.read_shift(2); length -= 2;\n\tif(length >= 2) { o.dt = blob.read_shift(2); blob.l -= 2; }\n\tswitch(o.BIFFVer) {\n\t\tcase 0x0600: /* BIFF8 */\n\t\tcase 0x0500: /* BIFF5 */\n\t\tcase 0x0400: /* BIFF4 */\n\t\tcase 0x0300: /* BIFF3 */\n\t\tcase 0x0200: /* BIFF2 */\n\t\tcase 0x0002: case 0x0007: /* BIFF2 */\n\t\t\tbreak;\n\t\tdefault: if(length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n\t}\n\n\tblob.read_shift(length);\n\treturn o;\n}\nfunction write_BOF(wb/*:Workbook*/, t/*:number*/, o) {\n\tvar h = 0x0600, w = 16;\n\tswitch(o.bookType) {\n\t\tcase 'biff8': break;\n\t\tcase 'biff5': h = 0x0500; w = 8; break;\n\t\tcase 'biff4': h = 0x0004; w = 6; break;\n\t\tcase 'biff3': h = 0x0003; w = 6; break;\n\t\tcase 'biff2': h = 0x0002; w = 4; break;\n\t\tcase 'xla': break;\n\t\tdefault: throw new Error(\"unsupported BIFF version\");\n\t}\n\tvar out = new_buf(w);\n\tout.write_shift(2, h);\n\tout.write_shift(2, t);\n\tif(w > 4) out.write_shift(2, 0x7262);\n\tif(w > 6) out.write_shift(2, 0x07CD);\n\tif(w > 8) {\n\t\tout.write_shift(2, 0xC009);\n\t\tout.write_shift(2, 0x0001);\n\t\tout.write_shift(2, 0x0706);\n\t\tout.write_shift(2, 0x0000);\n\t}\n\treturn out;\n}\n\n\n/* [MS-XLS] 2.4.146 */\nfunction parse_InterfaceHdr(blob, length) {\n\tif(length === 0) return 0x04b0;\n\tif((blob.read_shift(2))!==0x04b0){/* empty */}\n\treturn 0x04b0;\n}\n\n\n/* [MS-XLS] 2.4.349 */\nfunction parse_WriteAccess(blob, length, opts) {\n\tif(opts.enc) { blob.l += length; return \"\"; }\n\tvar l = blob.l;\n\t// TODO: make sure XLUnicodeString doesnt overrun\n\tvar UserName = parse_XLUnicodeString2(blob, 0, opts);\n\tblob.read_shift(length + l - blob.l);\n\treturn UserName;\n}\nfunction write_WriteAccess(s/*:string*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(b8 ? 112 : 54);\n\to.write_shift(opts.biff == 8 ? 2 : 1, 7);\n\tif(b8) o.write_shift(1, 0);\n\to.write_shift(4, 0x33336853);\n\to.write_shift(4, (0x00534A74 | (b8 ? 0 : 0x20000000)));\n\twhile(o.l < o.length) o.write_shift(1, (b8 ? 0 : 32));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.351 */\nfunction parse_WsBool(blob, length, opts) {\n\tvar flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n\treturn { fDialog: flags & 0x10, fBelow: flags & 0x40, fRight: flags & 0x80 };\n}\n\n/* [MS-XLS] 2.4.28 */\nfunction parse_BoundSheet8(blob, length, opts) {\n\tvar pos = blob.read_shift(4);\n\tvar hidden = blob.read_shift(1) & 0x03;\n\tvar dt = blob.read_shift(1);\n\tswitch(dt) {\n\t\tcase 0: dt = 'Worksheet'; break;\n\t\tcase 1: dt = 'Macrosheet'; break;\n\t\tcase 2: dt = 'Chartsheet'; break;\n\t\tcase 6: dt = 'VBAModule'; break;\n\t}\n\tvar name = parse_ShortXLUnicodeString(blob, 0, opts);\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { pos:pos, hs:hidden, dt:dt, name:name };\n}\nfunction write_BoundSheet8(data, opts) {\n\tvar w = (!opts || opts.biff >= 8 ? 2 : 1);\n\tvar o = new_buf(8 + w * data.name.length);\n\to.write_shift(4, data.pos);\n\to.write_shift(1, data.hs || 0);\n\to.write_shift(1, data.dt);\n\to.write_shift(1, data.name.length);\n\tif(opts.biff >= 8) o.write_shift(1, 1);\n\to.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n\tvar out = o.slice(0, o.l);\n\tout.l = o.l; return out;\n}\n\n/* [MS-XLS] 2.4.265 TODO */\nfunction parse_SST(blob, length)/*:SST*/ {\n\tvar end = blob.l + length;\n\tvar cnt = blob.read_shift(4);\n\tvar ucnt = blob.read_shift(4);\n\tvar strs/*:SST*/ = ([]/*:any*/);\n\tfor(var i = 0; i != ucnt && blob.l < end; ++i) {\n\t\tstrs.push(parse_XLUnicodeRichExtendedString(blob));\n\t}\n\tstrs.Count = cnt; strs.Unique = ucnt;\n\treturn strs;\n}\nfunction write_SST(sst, opts) {\n\tvar header = new_buf(8);\n\theader.write_shift(4, sst.Count);\n\theader.write_shift(4, sst.Unique);\n\tvar strs = [];\n\tfor(var j = 0; j < sst.length; ++j) strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n\tvar o = bconcat([header].concat(strs));\n\t/*::(*/o/*:: :any)*/.parts = [header.length].concat(strs.map(function(str) { return str.length; }));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.107 */\nfunction parse_ExtSST(blob, length) {\n\tvar extsst = {};\n\textsst.dsst = blob.read_shift(2);\n\tblob.l += length-2;\n\treturn extsst;\n}\n\n\n/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\nfunction parse_Row(blob) {\n\tvar z = ({}/*:any*/);\n\tz.r = blob.read_shift(2);\n\tz.c = blob.read_shift(2);\n\tz.cnt = blob.read_shift(2) - z.c;\n\tvar miyRw = blob.read_shift(2);\n\tblob.l += 4; // reserved(2), unused(2)\n\tvar flags = blob.read_shift(1); // various flags\n\tblob.l += 3; // reserved(8), ixfe(12), flags(4)\n\tif(flags & 0x07) z.level = flags & 0x07;\n\t// collapsed: flags & 0x10\n\tif(flags & 0x20) z.hidden = true;\n\tif(flags & 0x40) z.hpt = miyRw / 20;\n\treturn z;\n}\n\n\n/* [MS-XLS] 2.4.125 */\nfunction parse_ForceFullCalculation(blob) {\n\tvar header = parse_frtHeader(blob);\n\tif(header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n\tvar fullcalc = blob.read_shift(4);\n\treturn fullcalc !== 0x0;\n}\n\n\n\n\n\n/* [MS-XLS] 2.4.215 rt */\nfunction parse_RecalcId(blob) {\n\tblob.read_shift(2);\n\treturn blob.read_shift(4);\n}\n\n/* [MS-XLS] 2.4.87 */\nfunction parse_DefaultRowHeight(blob, length, opts) {\n\tvar f = 0;\n\tif(!(opts && opts.biff == 2)) {\n\t\tf = blob.read_shift(2);\n\t}\n\tvar miyRw = blob.read_shift(2);\n\tif((opts && opts.biff == 2)) {\n\t\tf = 1 - (miyRw >> 15); miyRw &= 0x7fff;\n\t}\n\tvar fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};\n\treturn [fl, miyRw];\n}\n\n/* [MS-XLS] 2.4.345 TODO */\nfunction parse_Window1(blob) {\n\tvar xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);\n\tvar ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);\n\treturn { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,\n\t\tFirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };\n}\nfunction write_Window1(/*::opts*/) {\n\tvar o = new_buf(18);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0x7260);\n\to.write_shift(2, 0x44c0);\n\to.write_shift(2, 0x38);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 1);\n\to.write_shift(2, 0x01f4);\n\treturn o;\n}\n/* [MS-XLS] 2.4.346 TODO */\nfunction parse_Window2(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff < 5) return {};\n\tvar f = blob.read_shift(2);\n\treturn { RTL: f & 0x40 };\n}\nfunction write_Window2(view) {\n\tvar o = new_buf(18), f = 0x6b6;\n\tif(view && view.RTL) f |= 0x40;\n\to.write_shift(2, f);\n\to.write_shift(4, 0);\n\to.write_shift(4, 64);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.189 TODO */\nfunction parse_Pane(/*blob, length, opts*/) {\n}\n\n/* [MS-XLS] 2.4.122 TODO */\nfunction parse_Font(blob, length, opts) {\n\tvar o/*:any*/ = {\n\t\tdyHeight: blob.read_shift(2),\n\t\tfl: blob.read_shift(2)\n\t};\n\tswitch((opts && opts.biff) || 8) {\n\t\tcase 2: break;\n\t\tcase 3: case 4: blob.l += 2; break;\n\t\tdefault: blob.l += 10; break;\n\t}\n\to.name = parse_ShortXLUnicodeString(blob, 0, opts);\n\treturn o;\n}\nfunction write_Font(data, opts) {\n\tvar name = data.name || \"Arial\";\n\tvar b5 = (opts && (opts.biff == 5)), w = (b5 ? (15 + name.length) : (16 + 2 * name.length));\n\tvar o = new_buf(w);\n\to.write_shift(2, (data.sz || 12) * 20);\n\to.write_shift(4, 0);\n\to.write_shift(2, 400);\n\to.write_shift(4, 0);\n\to.write_shift(2, 0);\n\to.write_shift(1, name.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * name.length, name, (b5 ? \"sbcs\" : \"utf16le\"));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.149 */\nfunction parse_LabelSst(blob) {\n\tvar cell = parse_XLSCell(blob);\n\tcell.isst = blob.read_shift(4);\n\treturn cell;\n}\nfunction write_LabelSst(R/*:number*/, C/*:number*/, v/*:number*/, os/*:number*/ /*::, opts*/) {\n\tvar o = new_buf(10);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(4, v);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.148 */\nfunction parse_Label(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar target = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) blob.l++;\n\tvar str = parse_XLUnicodeString(blob, target - blob.l, opts);\n\tcell.val = str;\n\treturn cell;\n}\nfunction write_Label(R/*:number*/, C/*:number*/, v/*:string*/, os/*:number*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(6 + 2 + (+b8) + (1 + b8) * v.length);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(2, v.length);\n\tif(b8) o.write_shift(1, 1);\n\to.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n\treturn o;\n}\n\n\n/* [MS-XLS] 2.4.126 Number Formats */\nfunction parse_Format(blob, length, opts) {\n\tvar numFmtId = blob.read_shift(2);\n\tvar fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [numFmtId, fmtstr];\n}\nfunction write_Format(i/*:number*/, f/*:string*/, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? (3 + f.length) : (5 + 2 * f.length));\n\to.write_shift(2, i);\n\to.write_shift((b5 ? 1 : 2), f.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * f.length, f, (b5 ? 'sbcs' : 'utf16le'));\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(out.l == null) out.l = out.length;\n\treturn out;\n}\nvar parse_BIFF2Format = parse_XLUnicodeString2;\n\n/* [MS-XLS] 2.4.90 */\nfunction parse_Dimensions(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar r = blob.read_shift(w), R = blob.read_shift(w);\n\tvar c = blob.read_shift(2), C = blob.read_shift(2);\n\tblob.l = end;\n\treturn {s: {r:r, c:c}, e: {r:R, c:C}};\n}\nfunction write_Dimensions(range, opts) {\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar o = new_buf(2*w + 6);\n\to.write_shift(w, range.s.r);\n\to.write_shift(w, range.e.r + 1);\n\to.write_shift(2, range.s.c);\n\to.write_shift(2, range.e.c + 1);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.220 */\nfunction parse_RK(blob) {\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrec = parse_RkRec(blob);\n\treturn {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};\n}\n\n/* [MS-XLS] 2.4.175 */\nfunction parse_MulRk(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrecs = [];\n\twhile(blob.l < target) rkrecs.push(parse_RkRec(blob));\n\tif(blob.l !== target) throw new Error(\"MulRK read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, rkrec:rkrecs};\n}\n/* [MS-XLS] 2.4.174 */\nfunction parse_MulBlank(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar ixfes = [];\n\twhile(blob.l < target) ixfes.push(blob.read_shift(2));\n\tif(blob.l !== target) throw new Error(\"MulBlank read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, ixfe:ixfes};\n}\n\n/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\nfunction parse_CellStyleXF(blob, length, style, opts) {\n\tvar o = {};\n\tvar a = blob.read_shift(4), b = blob.read_shift(4);\n\tvar c = blob.read_shift(4), d = blob.read_shift(2);\n\to.patternType = XLSFillPattern[c >> 26];\n\n\tif(!opts.cellStyles) return o;\n\to.alc = a & 0x07;\n\to.fWrap = (a >> 3) & 0x01;\n\to.alcV = (a >> 4) & 0x07;\n\to.fJustLast = (a >> 7) & 0x01;\n\to.trot = (a >> 8) & 0xFF;\n\to.cIndent = (a >> 16) & 0x0F;\n\to.fShrinkToFit = (a >> 20) & 0x01;\n\to.iReadOrder = (a >> 22) & 0x02;\n\to.fAtrNum = (a >> 26) & 0x01;\n\to.fAtrFnt = (a >> 27) & 0x01;\n\to.fAtrAlc = (a >> 28) & 0x01;\n\to.fAtrBdr = (a >> 29) & 0x01;\n\to.fAtrPat = (a >> 30) & 0x01;\n\to.fAtrProt = (a >> 31) & 0x01;\n\n\to.dgLeft = b & 0x0F;\n\to.dgRight = (b >> 4) & 0x0F;\n\to.dgTop = (b >> 8) & 0x0F;\n\to.dgBottom = (b >> 12) & 0x0F;\n\to.icvLeft = (b >> 16) & 0x7F;\n\to.icvRight = (b >> 23) & 0x7F;\n\to.grbitDiag = (b >> 30) & 0x03;\n\n\to.icvTop = c & 0x7F;\n\to.icvBottom = (c >> 7) & 0x7F;\n\to.icvDiag = (c >> 14) & 0x7F;\n\to.dgDiag = (c >> 21) & 0x0F;\n\n\to.icvFore = d & 0x7F;\n\to.icvBack = (d >> 7) & 0x7F;\n\to.fsxButton = (d >> 14) & 0x01;\n\treturn o;\n}\n//function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}\n//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}\n\n/* [MS-XLS] 2.4.353 TODO: actually do this right */\nfunction parse_XF(blob, length, opts) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(2); o.numFmtId = blob.read_shift(2); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\tlength -= 6;\n\to.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n\treturn o;\n}\nfunction write_XF(data, ixfeP, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? 16 : 20);\n\to.write_shift(2, 0);\n\tif(data.style) {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, 0xFFF4);\n\t} else {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, (ixfeP<<4));\n\t}\n\tvar f = 0;\n\tif(data.numFmtId > 0 && b5) f |= 0x0400;\n\to.write_shift(4, f);\n\to.write_shift(4, 0);\n\tif(!b5) o.write_shift(4, 0);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.134 */\nfunction parse_Guts(blob) {\n\tblob.l += 4;\n\tvar out = [blob.read_shift(2), blob.read_shift(2)];\n\tif(out[0] !== 0) out[0]--;\n\tif(out[1] !== 0) out[1]--;\n\tif(out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n\treturn out;\n}\nfunction write_Guts(guts/*:Array*/) {\n\tvar o = new_buf(8);\n\to.write_shift(4, 0);\n\to.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n\to.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.24 */\nfunction parse_BoolErr(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2 || length == 9) ++blob.l;\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\nfunction write_BoolErr(R/*:number*/, C/*:number*/, v, os/*:number*/, opts, t/*:string*/) {\n\tvar o = new_buf(8);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Bes(v, t, o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.180 Number */\nfunction parse_Number(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar xnum = parse_Xnum(blob, 8);\n\tcell.val = xnum;\n\treturn cell;\n}\nfunction write_Number(R/*:number*/, C/*:number*/, v, os/*:: :number, opts*/) {\n\tvar o = new_buf(14);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Xnum(v, o);\n\treturn o;\n}\n\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n/* [MS-XLS] 2.4.271 */\nfunction parse_SupBook(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar ctab = blob.read_shift(2);\n\tvar cch = blob.read_shift(2);\n\topts.sbcch = cch;\n\tif(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n\tif(cch < 0x01 || cch >0xff) throw new Error(\"Unexpected SupBook type: \"+cch);\n\tvar virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n\t/* TODO: 2.5.277 Virtual Path */\n\tvar rgst = [];\n\twhile(end > blob.l) rgst.push(parse_XLUnicodeString(blob));\n\treturn [cch, ctab, virtPath, rgst];\n}\n\n/* [MS-XLS] 2.4.105 TODO */\nfunction parse_ExternName(blob, length, opts) {\n\tvar flags = blob.read_shift(2);\n\tvar body;\n\tvar o = ({\n\t\tfBuiltIn: flags & 0x01,\n\t\tfWantAdvise: (flags >>> 1) & 0x01,\n\t\tfWantPict: (flags >>> 2) & 0x01,\n\t\tfOle: (flags >>> 3) & 0x01,\n\t\tfOleLink: (flags >>> 4) & 0x01,\n\t\tcf: (flags >>> 5) & 0x3FF,\n\t\tfIcon: flags >>> 15 & 0x01\n\t}/*:any*/);\n\tif(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2, opts);\n\t//else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\to.body = body || blob.read_shift(length-2);\n\tif(typeof body === \"string\") o.Name = body;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.150 TODO */\nfunction parse_Lbl(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar flags = blob.read_shift(2);\n\tvar chKey = blob.read_shift(1);\n\tvar cch = blob.read_shift(1);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar itab = 0;\n\tif(!opts || opts.biff >= 5) {\n\t\tif(opts.biff != 5) blob.l += 2;\n\t\titab = blob.read_shift(2);\n\t\tif(opts.biff == 5) blob.l += 2;\n\t\tblob.l += 4;\n\t}\n\tvar name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tif(flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n\tvar npflen = target - blob.l; if(opts && opts.biff == 2) --npflen;\n\t/*jshint -W018 */\n\tvar rgce = (target == blob.l || cce === 0 || !(npflen > 0)) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n\t/*jshint +W018 */\n\treturn {\n\t\tchKey: chKey,\n\t\tName: name,\n\t\titab: itab,\n\t\trgce: rgce\n\t};\n}\n\n/* [MS-XLS] 2.4.106 TODO: verify filename encoding */\nfunction parse_ExternSheet(blob, length, opts) {\n\tif(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n\tvar o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\twhile(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n\t\t// [iSupBook, itabFirst, itabLast];\n\tif(blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n\treturn o;\n}\nfunction parse_BIFF5ExternSheet(blob, length, opts) {\n\tif(blob[blob.l + 1] == 0x03) blob[blob.l]++;\n\tvar o = parse_ShortXLUnicodeString(blob, length, opts);\n\treturn o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n}\n\n/* [MS-XLS] 2.4.176 TODO: check older biff */\nfunction parse_NameCmt(blob, length, opts) {\n\tif(opts.biff < 8) { blob.l += length; return; }\n\tvar cchName = blob.read_shift(2);\n\tvar cchComment = blob.read_shift(2);\n\tvar name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n\tvar comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n\treturn [name, comment];\n}\n\n/* [MS-XLS] 2.4.260 */\nfunction parse_ShrFmla(blob, length, opts) {\n\tvar ref = parse_RefU(blob, 6);\n\tblob.l++;\n\tvar cUse = blob.read_shift(1);\n\tlength -= 8;\n\treturn [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n}\n\n/* [MS-XLS] 2.4.4 TODO */\nfunction parse_Array(blob, length, opts) {\n\tvar ref = parse_Ref(blob, 6);\n\t/* TODO: fAlwaysCalc */\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l ++; length -= 7; break;\n\t\tcase 3: case 4: blob.l += 2; length -= 8; break;\n\t\tdefault: blob.l += 6; length -= 12;\n\t}\n\treturn [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n}\n\n/* [MS-XLS] 2.4.173 */\nfunction parse_MTRSettings(blob) {\n\tvar fMTREnabled = blob.read_shift(4) !== 0x00;\n\tvar fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n\tvar cUserThreadCount = blob.read_shift(4);\n\treturn [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n}\n\n/* [MS-XLS] 2.5.186 TODO: BIFF5 */\nfunction parse_NoteSh(blob, length, opts) {\n\tif(opts.biff < 8) return;\n\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), idObj = blob.read_shift(2);\n\tvar stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n\tif(opts.biff < 8) blob.read_shift(1);\n\treturn [{r:row,c:col}, stAuthor, idObj, flags];\n}\n\n/* [MS-XLS] 2.4.179 */\nfunction parse_Note(blob, length, opts) {\n\t/* TODO: Support revisions */\n\treturn parse_NoteSh(blob, length, opts);\n}\n\n/* [MS-XLS] 2.4.168 */\nfunction parse_MergeCells(blob, length)/*:Array*/ {\n\tvar merges/*:Array*/ = [];\n\tvar cmcs = blob.read_shift(2);\n\twhile (cmcs--) merges.push(parse_Ref8U(blob,length));\n\treturn merges;\n}\nfunction write_MergeCells(merges/*:Array*/) {\n\tvar o = new_buf(2 + merges.length * 8);\n\to.write_shift(2, merges.length);\n\tfor(var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.181 TODO: parse all the things! */\nfunction parse_Obj(blob, length, opts) {\n\tif(opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n\tvar cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\tvar fts = parse_FtArray(blob, length-22, cmo[1]);\n\treturn { cmo: cmo, ft:fts };\n}\n/* from older spec */\nvar parse_BIFF5OT = {\n0x08: function(blob, length) {\n\tvar tgt = blob.l + length;\n\tblob.l += 10; // todo\n\tvar cf = blob.read_shift(2);\n\tblob.l += 4;\n\tblob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\tblob.l += 2;\n\tblob.l += 2; //var grbit = blob.read_shift(2);\n\tblob.l += 4;\n\tvar cchName = blob.read_shift(1);\n\tblob.l += cchName; // TODO: stName\n\tblob.l = tgt; // TODO: fmla\n\treturn { fmt:cf };\n}\n};\n\nfunction parse_BIFF5Obj(blob, length, opts) {\n\tblob.l += 4; //var cnt = blob.read_shift(4);\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar grbit = blob.read_shift(2);\n\tblob.l += 2; //var colL = blob.read_shift(2);\n\tblob.l += 2; //var dxL = blob.read_shift(2);\n\tblob.l += 2; //var rwT = blob.read_shift(2);\n\tblob.l += 2; //var dyT = blob.read_shift(2);\n\tblob.l += 2; //var colR = blob.read_shift(2);\n\tblob.l += 2; //var dxR = blob.read_shift(2);\n\tblob.l += 2; //var rwB = blob.read_shift(2);\n\tblob.l += 2; //var dyB = blob.read_shift(2);\n\tblob.l += 2; //var cbMacro = blob.read_shift(2);\n\tblob.l += 6;\n\tlength -= 36;\n\tvar fts = [];\n\tfts.push((parse_BIFF5OT[ot]||parsenoop)(blob, length, opts));\n\treturn { cmo: [id, ot, grbit], ft:fts };\n}\n\n/* [MS-XLS] 2.4.329 TODO: parse properly */\nfunction parse_TxO(blob, length, opts) {\n\tvar s = blob.l;\n\tvar texts = \"\";\ntry {\n\tblob.l += 4;\n\tvar ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];\n\tvar controlInfo; // eslint-disable-line no-unused-vars\n\tif([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;\n\telse controlInfo = parse_ControlInfo(blob, 6, opts); // eslint-disable-line no-unused-vars\n\tvar cchText = blob.read_shift(2);\n\t/*var cbRuns = */blob.read_shift(2);\n\t/*var ifntEmpty = */parseuint16(blob, 2);\n\tvar len = blob.read_shift(2);\n\tblob.l += len;\n\t//var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n\tfor(var i = 1; i < blob.lens.length-1; ++i) {\n\t\tif(blob.l-s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n\t\tvar hdr = blob[blob.l];\n\t\tvar t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);\n\t\ttexts += t;\n\t\tif(texts.length >= (hdr ? cchText : 2*cchText)) break;\n\t}\n\tif(texts.length !== cchText && texts.length !== cchText*2) {\n\t\tthrow new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n\t}\n\n\tblob.l = s + length;\n\t/* [MS-XLS] 2.5.272 TxORuns */\n//\tvar rgTxoRuns = [];\n//\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\n//\tvar cchText2 = blob.read_shift(2);\n//\tif(cchText2 !== cchText) throw new Error(\"TxOLastRun mismatch: \" + cchText2 + \" \" + cchText);\n//\tblob.l += 6;\n//\tif(s + length != blob.l) throw new Error(\"TxO \" + (s + length) + \", at \" + blob.l);\n\treturn { t: texts };\n} catch(e) { blob.l = s + length; return { t: texts }; }\n}\n\n/* [MS-XLS] 2.4.140 */\nfunction parse_HLink(blob, length) {\n\tvar ref = parse_Ref8U(blob, 8);\n\tblob.l += 16; /* CLSID */\n\tvar hlink = parse_Hyperlink(blob, length-24);\n\treturn [ref, hlink];\n}\nfunction write_HLink(hl) {\n\tvar O = new_buf(24);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tvar clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\tfor(var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16));\n\treturn bconcat([O, write_Hyperlink(hl[1])]);\n}\n\n\n/* [MS-XLS] 2.4.141 */\nfunction parse_HLinkTooltip(blob, length) {\n\tblob.read_shift(2);\n\tvar ref = parse_Ref8U(blob, 8);\n\tvar wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');\n\twzTooltip = wzTooltip.replace(chr0,\"\");\n\treturn [ref, wzTooltip];\n}\nfunction write_HLinkTooltip(hl) {\n\tvar TT = hl[1].Tooltip;\n\tvar O = new_buf(10 + 2 * (TT.length + 1));\n\tO.write_shift(2, 0x0800);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tfor(var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i));\n\tO.write_shift(2, 0);\n\treturn O;\n}\n\n/* [MS-XLS] 2.4.63 */\nfunction parse_Country(blob)/*:[string|number, string|number]*/ {\n\tvar o = [0,0], d;\n\td = blob.read_shift(2); o[0] = CountryEnum[d] || d;\n\td = blob.read_shift(2); o[1] = CountryEnum[d] || d;\n\treturn o;\n}\nfunction write_Country(o) {\n\tif(!o) o = new_buf(4);\n\to.write_shift(2, 0x01);\n\to.write_shift(2, 0x01);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.50 ClrtClient */\nfunction parse_ClrtClient(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.188 */\nfunction parse_Palette(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.354 */\nfunction parse_XFCRC(blob) {\n\tblob.l += 2;\n\tvar o = {cxfs:0, crc:0};\n\to.cxfs = blob.read_shift(2);\n\to.crc = blob.read_shift(4);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.53 TODO: parse flags */\n/* [MS-XLSB] 2.4.323 TODO: parse flags */\nfunction parse_ColInfo(blob, length, opts) {\n\tif(!opts.cellStyles) return parsenoop(blob, length);\n\tvar w = opts && opts.biff >= 12 ? 4 : 2;\n\tvar colFirst = blob.read_shift(w);\n\tvar colLast = blob.read_shift(w);\n\tvar coldx = blob.read_shift(w);\n\tvar ixfe = blob.read_shift(w);\n\tvar flags = blob.read_shift(2);\n\tif(w == 2) blob.l += 2;\n\tvar o = ({s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags}/*:any*/);\n\tif(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;\n\treturn o;\n}\nfunction write_ColInfo(col, idx) {\n\tvar o = new_buf(12);\n\to.write_shift(2, idx);\n\to.write_shift(2, idx);\n\to.write_shift(2, col.width * 256);\n\to.write_shift(2, 0);\n\tvar f = 0;\n\tif(col.hidden) f |= 1;\n\to.write_shift(1, f);\n\tf = col.level || 0;\n\to.write_shift(1, f);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.257 */\nfunction parse_Setup(blob, length) {\n\tvar o = {};\n\tif(length < 32) return o;\n\tblob.l += 16;\n\to.header = parse_Xnum(blob, 8);\n\to.footer = parse_Xnum(blob, 8);\n\tblob.l += 2;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.261 */\nfunction parse_ShtProps(blob, length, opts) {\n\tvar def = {area:false};\n\tif(opts.biff != 5) { blob.l += length; return def; }\n\tvar d = blob.read_shift(1); blob.l += 3;\n\tif((d & 0x10)) def.area = true;\n\treturn def;\n}\n\n/* [MS-XLS] 2.4.241 */\nfunction write_RRTabId(n/*:number*/) {\n\tvar out = new_buf(2 * n);\n\tfor(var i = 0; i < n; ++i) out.write_shift(2, i+1);\n\treturn out;\n}\n\nvar parse_Blank = parse_XLSCell; /* [MS-XLS] 2.4.20 Just the cell */\nvar parse_Scl = parseuint16a; /* [MS-XLS] 2.4.247 num, den */\nvar parse_String = parse_XLUnicodeString; /* [MS-XLS] 2.4.268 */\n\n/* --- Specific to versions before BIFF8 --- */\nfunction parse_ImData(blob) {\n\tvar cf = blob.read_shift(2);\n\tvar env = blob.read_shift(2);\n\tvar lcb = blob.read_shift(4);\n\tvar o = {fmt:cf, env:env, len:lcb, data:blob.slice(blob.l,blob.l+lcb)};\n\tblob.l += lcb;\n\treturn o;\n}\n\n/* BIFF2_??? where ??? is the name from [XLS] */\nfunction parse_BIFF2STR(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 5) opts.biff = 2;\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar str = parse_XLUnicodeString2(blob, length-7, opts);\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF2NUM(blob/*::, length*/) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = parse_Xnum(blob, 8);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2NUM(r/*:number*/, c/*:number*/, val/*:number*/) {\n\tvar out = new_buf(15);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(8, val, 'f');\n\treturn out;\n}\n\nfunction parse_BIFF2INT(blob) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = blob.read_shift(2);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2INT(r/*:number*/, c/*:number*/, val/*:number*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(2, val);\n\treturn out;\n}\n\nfunction parse_BIFF2STRING(blob) {\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, 'sbcs-cont');\n}\n\n/* TODO: convert to BIFF8 font struct */\nfunction parse_BIFF2FONTXTRA(blob, length) {\n\tblob.l += 6; // unknown\n\tblob.l += 2; // font weight \"bls\"\n\tblob.l += 1; // charset\n\tblob.l += 3; // unknown\n\tblob.l += 1; // font family\n\tblob.l += length - 13;\n}\n\n/* TODO: parse rich text runs */\nfunction parse_RString(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar cch = blob.read_shift(2);\n\tvar str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tblob.l = end;\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\nvar DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\nvar DBF = /*#__PURE__*/(function() {\nvar dbf_codepage_map = {\n\t/* Code Pages Supported by Visual FoxPro */\n\t/*::[*/0x01/*::]*/: 437, /*::[*/0x02/*::]*/: 850,\n\t/*::[*/0x03/*::]*/: 1252, /*::[*/0x04/*::]*/: 10000,\n\t/*::[*/0x64/*::]*/: 852, /*::[*/0x65/*::]*/: 866,\n\t/*::[*/0x66/*::]*/: 865, /*::[*/0x67/*::]*/: 861,\n\t/*::[*/0x68/*::]*/: 895, /*::[*/0x69/*::]*/: 620,\n\t/*::[*/0x6A/*::]*/: 737, /*::[*/0x6B/*::]*/: 857,\n\t/*::[*/0x78/*::]*/: 950, /*::[*/0x79/*::]*/: 949,\n\t/*::[*/0x7A/*::]*/: 936, /*::[*/0x7B/*::]*/: 932,\n\t/*::[*/0x7C/*::]*/: 874, /*::[*/0x7D/*::]*/: 1255,\n\t/*::[*/0x7E/*::]*/: 1256, /*::[*/0x96/*::]*/: 10007,\n\t/*::[*/0x97/*::]*/: 10029, /*::[*/0x98/*::]*/: 10006,\n\t/*::[*/0xC8/*::]*/: 1250, /*::[*/0xC9/*::]*/: 1251,\n\t/*::[*/0xCA/*::]*/: 1254, /*::[*/0xCB/*::]*/: 1253,\n\n\t/* shapefile DBF extension */\n\t/*::[*/0x00/*::]*/: 20127, /*::[*/0x08/*::]*/: 865,\n\t/*::[*/0x09/*::]*/: 437, /*::[*/0x0A/*::]*/: 850,\n\t/*::[*/0x0B/*::]*/: 437, /*::[*/0x0D/*::]*/: 437,\n\t/*::[*/0x0E/*::]*/: 850, /*::[*/0x0F/*::]*/: 437,\n\t/*::[*/0x10/*::]*/: 850, /*::[*/0x11/*::]*/: 437,\n\t/*::[*/0x12/*::]*/: 850, /*::[*/0x13/*::]*/: 932,\n\t/*::[*/0x14/*::]*/: 850, /*::[*/0x15/*::]*/: 437,\n\t/*::[*/0x16/*::]*/: 850, /*::[*/0x17/*::]*/: 865,\n\t/*::[*/0x18/*::]*/: 437, /*::[*/0x19/*::]*/: 437,\n\t/*::[*/0x1A/*::]*/: 850, /*::[*/0x1B/*::]*/: 437,\n\t/*::[*/0x1C/*::]*/: 863, /*::[*/0x1D/*::]*/: 850,\n\t/*::[*/0x1F/*::]*/: 852, /*::[*/0x22/*::]*/: 852,\n\t/*::[*/0x23/*::]*/: 852, /*::[*/0x24/*::]*/: 860,\n\t/*::[*/0x25/*::]*/: 850, /*::[*/0x26/*::]*/: 866,\n\t/*::[*/0x37/*::]*/: 850, /*::[*/0x40/*::]*/: 852,\n\t/*::[*/0x4D/*::]*/: 936, /*::[*/0x4E/*::]*/: 949,\n\t/*::[*/0x4F/*::]*/: 950, /*::[*/0x50/*::]*/: 874,\n\t/*::[*/0x57/*::]*/: 1252, /*::[*/0x58/*::]*/: 1252,\n\t/*::[*/0x59/*::]*/: 1252, /*::[*/0x6C/*::]*/: 863,\n\t/*::[*/0x86/*::]*/: 737, /*::[*/0x87/*::]*/: 852,\n\t/*::[*/0x88/*::]*/: 857, /*::[*/0xCC/*::]*/: 1257,\n\n\t/*::[*/0xFF/*::]*/: 16969\n};\nvar dbf_reverse_map = evert({\n\t/*::[*/0x01/*::]*/: 437, /*::[*/0x02/*::]*/: 850,\n\t/*::[*/0x03/*::]*/: 1252, /*::[*/0x04/*::]*/: 10000,\n\t/*::[*/0x64/*::]*/: 852, /*::[*/0x65/*::]*/: 866,\n\t/*::[*/0x66/*::]*/: 865, /*::[*/0x67/*::]*/: 861,\n\t/*::[*/0x68/*::]*/: 895, /*::[*/0x69/*::]*/: 620,\n\t/*::[*/0x6A/*::]*/: 737, /*::[*/0x6B/*::]*/: 857,\n\t/*::[*/0x78/*::]*/: 950, /*::[*/0x79/*::]*/: 949,\n\t/*::[*/0x7A/*::]*/: 936, /*::[*/0x7B/*::]*/: 932,\n\t/*::[*/0x7C/*::]*/: 874, /*::[*/0x7D/*::]*/: 1255,\n\t/*::[*/0x7E/*::]*/: 1256, /*::[*/0x96/*::]*/: 10007,\n\t/*::[*/0x97/*::]*/: 10029, /*::[*/0x98/*::]*/: 10006,\n\t/*::[*/0xC8/*::]*/: 1250, /*::[*/0xC9/*::]*/: 1251,\n\t/*::[*/0xCA/*::]*/: 1254, /*::[*/0xCB/*::]*/: 1253,\n\t/*::[*/0x00/*::]*/: 20127\n});\n/* TODO: find an actual specification */\nfunction dbf_to_aoa(buf, opts)/*:AOA*/ {\n\tvar out/*:AOA*/ = [];\n\tvar d/*:Block*/ = (new_raw_buf(1)/*:any*/);\n\tswitch(opts.type) {\n\t\tcase 'base64': d = s2a(Base64_decode(buf)); break;\n\t\tcase 'binary': d = s2a(buf); break;\n\t\tcase 'buffer':\n\t\tcase 'array': d = buf; break;\n\t}\n\tprep_blob(d, 0);\n\n\t/* header */\n\tvar ft = d.read_shift(1);\n\tvar memo = !!(ft & 0x88);\n\tvar vfp = false, l7 = false;\n\tswitch(ft) {\n\t\tcase 0x02: break; // dBASE II\n\t\tcase 0x03: break; // dBASE III\n\t\tcase 0x30: vfp = true; memo = true; break; // VFP\n\t\tcase 0x31: vfp = true; memo = true; break; // VFP with autoincrement\n\t\t// 0x43 dBASE IV SQL table files\n\t\t// 0x63 dBASE IV SQL system files\n\t\tcase 0x83: break; // dBASE III with memo\n\t\tcase 0x8B: break; // dBASE IV with memo\n\t\tcase 0x8C: l7 = true; break; // dBASE Level 7 with memo\n\t\t// case 0xCB dBASE IV SQL table files with memo\n\t\tcase 0xF5: break; // FoxPro 2.x with memo\n\t\t// case 0xFB FoxBASE\n\t\tdefault: throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n\t}\n\n\tvar nrow = 0, fpos = 0x0209;\n\tif(ft == 0x02) nrow = d.read_shift(2);\n\td.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD\n\tif(ft != 0x02) nrow = d.read_shift(4);\n\tif(nrow > 1048576) nrow = 1e6;\n\n\tif(ft != 0x02) fpos = d.read_shift(2); // header length\n\tvar rlen = d.read_shift(2); // record length\n\n\tvar /*flags = 0,*/ current_cp = opts.codepage || 1252;\n\tif(ft != 0x02) { // 20 reserved bytes\n\t\td.l+=16;\n\t\t/*flags = */d.read_shift(1);\n\t\t//if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n\t\t/* codepage present in FoxPro and dBASE Level 7 */\n\t\tif(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n\t\td.l+=1;\n\n\t\td.l+=2;\n\t}\n\tif(l7) d.l += 36; // Level 7: 32 byte \"Language driver name\", 4 byte reserved\n\n/*:: type DBFField = { name:string; len:number; type:string; } */\n\tvar fields/*:Array*/ = [], field/*:DBFField*/ = ({}/*:any*/);\n\tvar hend = Math.min(d.length, (ft == 0x02 ? 0x209 : (fpos - 10 - (vfp ? 264 : 0))));\n\tvar ww = l7 ? 32 : 11;\n\twhile(d.l < hend && d[d.l] != 0x0d) {\n\t\tfield = ({}/*:any*/);\n\t\tfield.name = (typeof $cptable !== \"undefined\" ? $cptable.utils.decode(current_cp, d.slice(d.l, d.l+ww)) : a2s(d.slice(d.l, d.l + ww))).replace(/[\\u0000\\r\\n].*$/g,\"\");\n\t\td.l += ww;\n\t\tfield.type = String.fromCharCode(d.read_shift(1));\n\t\tif(ft != 0x02 && !l7) field.offset = d.read_shift(4);\n\t\tfield.len = d.read_shift(1);\n\t\tif(ft == 0x02) field.offset = d.read_shift(2);\n\t\tfield.dec = d.read_shift(1);\n\t\tif(field.name.length) fields.push(field);\n\t\tif(ft != 0x02) d.l += l7 ? 13 : 14;\n\t\tswitch(field.type) {\n\t\t\tcase 'B': // Double (VFP) / Binary (dBASE L7)\n\t\t\t\tif((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase 'G': // General (FoxPro and dBASE L7)\n\t\t\tcase 'P': // Picture (FoxPro and dBASE L7)\n\t\t\t\tif(opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase '+': // Autoincrement (dBASE L7 only)\n\t\t\tcase '0': // _NullFlags (VFP only)\n\t\t\tcase '@': // Timestamp (dBASE L7 only)\n\t\t\tcase 'C': // Character (dBASE II)\n\t\t\tcase 'D': // Date (dBASE III)\n\t\t\tcase 'F': // Float (dBASE IV)\n\t\t\tcase 'I': // Long (VFP and dBASE L7)\n\t\t\tcase 'L': // Logical (dBASE II)\n\t\t\tcase 'M': // Memo (dBASE III)\n\t\t\tcase 'N': // Number (dBASE II)\n\t\t\tcase 'O': // Double (dBASE L7 only)\n\t\t\tcase 'T': // Datetime (VFP only)\n\t\t\tcase 'Y': // Currency (VFP only)\n\t\t\t\tbreak;\n\t\t\tdefault: throw new Error('Unknown Field Type: ' + field.type);\n\t\t}\n\t}\n\n\tif(d[d.l] !== 0x0D) d.l = fpos-1;\n\tif(d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n\td.l = fpos;\n\n\t/* data */\n\tvar R = 0, C = 0;\n\tout[0] = [];\n\tfor(C = 0; C != fields.length; ++C) out[0][C] = fields[C].name;\n\twhile(nrow-- > 0) {\n\t\tif(d[d.l] === 0x2A) {\n\t\t\t// TODO: record marked as deleted -- create a hidden row?\n\t\t\td.l+=rlen;\n\t\t\tcontinue;\n\t\t}\n\t\t++d.l;\n\t\tout[++R] = []; C = 0;\n\t\tfor(C = 0; C != fields.length; ++C) {\n\t\t\tvar dd = d.slice(d.l, d.l+fields[C].len); d.l+=fields[C].len;\n\t\t\tprep_blob(dd, 0);\n\t\t\tvar s = typeof $cptable !== \"undefined\" ? $cptable.utils.decode(current_cp, dd) : a2s(dd);\n\t\t\tswitch(fields[C].type) {\n\t\t\t\tcase 'C':\n\t\t\t\t\t// NOTE: it is conventional to write ' / / ' for empty dates\n\t\t\t\t\tif(s.trim().length) out[R][C] = s.replace(/\\s+$/,\"\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(s.length === 8) out[R][C] = new Date(+s.slice(0,4), +s.slice(4,6)-1, +s.slice(6,8));\n\t\t\t\t\telse out[R][C] = s;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'F': out[R][C] = parseFloat(s.trim()); break;\n\t\t\t\tcase '+': case 'I': out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i'); break;\n\t\t\t\tcase 'L': switch(s.trim().toUpperCase()) {\n\t\t\t\t\tcase 'Y': case 'T': out[R][C] = true; break;\n\t\t\t\t\tcase 'N': case 'F': out[R][C] = false; break;\n\t\t\t\t\tcase '': case '?': break;\n\t\t\t\t\tdefault: throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'M': /* TODO: handle memo files */\n\t\t\t\t\tif(!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n\t\t\t\t\tout[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10): dd.read_shift(4));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'N':\n\t\t\t\t\ts = s.replace(/\\u0000/g,\"\").trim();\n\t\t\t\t\t// NOTE: dBASE II interprets \" . \" as 0\n\t\t\t\t\tif(s && s != \".\") out[R][C] = +s || 0; break;\n\t\t\t\tcase '@':\n\t\t\t\t\t// NOTE: dBASE specs appear to be incorrect\n\t\t\t\t\tout[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'T': out[R][C] = new Date((dd.read_shift(4) - 0x253D8C) * 0x5265C00 + dd.read_shift(4)); break;\n\t\t\t\tcase 'Y': out[R][C] = dd.read_shift(4,'i')/1e4 + (dd.read_shift(4, 'i')/1e4)*Math.pow(2,32); break;\n\t\t\t\tcase 'O': out[R][C] = -dd.read_shift(-8, 'f'); break;\n\t\t\t\tcase 'B': if(vfp && fields[C].len == 8) { out[R][C] = dd.read_shift(8,'f'); break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'G': case 'P': dd.l += fields[C].len; break;\n\t\t\t\tcase '0':\n\t\t\t\t\tif(fields[C].name === '_NullFlags') break;\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n\t\t\t}\n\t\t}\n\t}\n\tif(ft != 0x02) if(d.l < d.length && d[d.l++] != 0x1A) throw new Error(\"DBF EOF Marker missing \" + (d.l-1) + \" of \" + d.length + \" \" + d[d.l-1].toString(16));\n\tif(opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n\topts.DBF = fields;\n\treturn out;\n}\n\nfunction dbf_to_sheet(buf, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tif(!o.dateNF) o.dateNF = \"yyyymmdd\";\n\tvar ws = aoa_to_sheet(dbf_to_aoa(buf, o), o);\n\tws[\"!cols\"] = o.DBF.map(function(field) { return {\n\t\twch: field.len,\n\t\tDBF: field\n\t};});\n\tdelete o.DBF;\n\treturn ws;\n}\n\nfunction dbf_to_workbook(buf, opts)/*:Workbook*/ {\n\ttry {\n\t\tvar o = sheet_to_workbook(dbf_to_sheet(buf, opts), opts);\n\t\to.bookType = \"dbf\";\n\t\treturn o;\n\t} catch(e) { if(opts && opts.WTF) throw e; }\n\treturn ({SheetNames:[],Sheets:{}});\n}\n\nvar _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };\nfunction sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tvar old_cp = current_codepage;\n\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\tif(o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n\tvar ba = buf_array();\n\tvar aoa/*:AOA*/ = sheet_to_json(ws, {header:1, raw:true, cellDates:true});\n\tvar headers = aoa[0], data = aoa.slice(1), cols = ws[\"!cols\"] || [];\n\tvar i = 0, j = 0, hcnt = 0, rlen = 1;\n\tfor(i = 0; i < headers.length; ++i) {\n\t\tif(((cols[i]||{}).DBF||{}).name) { headers[i] = cols[i].DBF.name; ++hcnt; continue; }\n\t\tif(headers[i] == null) continue;\n\t\t++hcnt;\n\t\tif(typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n\t\tif(typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + (typeof headers[i]) + \"|\");\n\t\tif(headers.indexOf(headers[i]) !== i) for(j=0; j<1024;++j)\n\t\t\tif(headers.indexOf(headers[i] + \"_\" + j) == -1) { headers[i] += \"_\" + j; break; }\n\t}\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar coltypes/*:Array*/ = [];\n\tvar colwidths/*:Array*/ = [];\n\tvar coldecimals/*:Array*/ = [];\n\tfor(i = 0; i <= range.e.c - range.s.c; ++i) {\n\t\tvar guess = '', _guess = '', maxlen = 0;\n\t\tvar col/*:Array*/ = [];\n\t\tfor(j=0; j < data.length; ++j) {\n\t\t\tif(data[j][i] != null) col.push(data[j][i]);\n\t\t}\n\t\tif(col.length == 0 || headers[i] == null) { coltypes[i] = '?'; continue; }\n\t\tfor(j = 0; j < col.length; ++j) {\n\t\t\tswitch(typeof col[j]) {\n\t\t\t\t/* TODO: check if L2 compat is desired */\n\t\t\t\tcase 'number': _guess = 'B'; break;\n\t\t\t\tcase 'string': _guess = 'C'; break;\n\t\t\t\tcase 'boolean': _guess = 'L'; break;\n\t\t\t\tcase 'object': _guess = col[j] instanceof Date ? 'D' : 'C'; break;\n\t\t\t\tdefault: _guess = 'C';\n\t\t\t}\n\t\t\t/* TODO: cache the values instead of encoding twice */\n\t\t\tmaxlen = Math.max(maxlen, (typeof $cptable !== \"undefined\" && typeof col[j] == \"string\" ? $cptable.utils.encode(current_ansi, col[j]): String(col[j])).length);\n\t\t\tguess = guess && guess != _guess ? 'C' : _guess;\n\t\t\t//if(guess == 'C') break;\n\t\t}\n\t\tif(maxlen > 250) maxlen = 250;\n\t\t_guess = ((cols[i]||{}).DBF||{}).type;\n\t\t/* TODO: more fine grained control over DBF type resolution */\n\t\tif(_guess == 'C') {\n\t\t\tif(cols[i].DBF.len > maxlen) maxlen = cols[i].DBF.len;\n\t\t}\n\t\tif(guess == 'B' && _guess == 'N') {\n\t\t\tguess = 'N';\n\t\t\tcoldecimals[i] = cols[i].DBF.dec;\n\t\t\tmaxlen = cols[i].DBF.len;\n\t\t}\n\t\tcolwidths[i] = guess == 'C' || _guess == 'N' ? maxlen : (_RLEN[guess] || 0);\n\t\trlen += colwidths[i];\n\t\tcoltypes[i] = guess;\n\t}\n\n\tvar h = ba.next(32);\n\th.write_shift(4, 0x13021130);\n\th.write_shift(4, data.length);\n\th.write_shift(2, 296 + 32 * hcnt);\n\th.write_shift(2, rlen);\n\tfor(i=0; i < 4; ++i) h.write_shift(4, 0);\n\tvar cp = +dbf_reverse_map[/*::String(*/current_codepage/*::)*/] || 0x03;\n\th.write_shift(4, 0x00000000 | (cp<<8));\n\tif(dbf_codepage_map[cp] != +o.codepage) {\n\t\tif(o.codepage) console.error(\"DBF Unsupported codepage \" + current_codepage + \", using 1252\");\n\t\tcurrent_codepage = 1252;\n\t}\n\n\tfor(i = 0, j = 0; i < headers.length; ++i) {\n\t\tif(headers[i] == null) continue;\n\t\tvar hf = ba.next(32);\n\t\t/* TODO: test how applications handle non-ASCII field names */\n\t\tvar _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\t\thf.write_shift(1, _f, \"sbcs\");\n\t\thf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n\t\thf.write_shift(4, j);\n\t\thf.write_shift(1, colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t\thf.write_shift(1, coldecimals[i] || 0);\n\t\thf.write_shift(1, 0x02);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(4, 0);\n\t\tj += (colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t}\n\n\tvar hb = ba.next(264);\n\thb.write_shift(4, 0x0000000D);\n\tfor(i=0; i < 65;++i) hb.write_shift(4, 0x00000000);\n\tfor(i=0; i < data.length; ++i) {\n\t\tvar rout = ba.next(rlen);\n\t\trout.write_shift(1, 0);\n\t\tfor(j=0; j colwidths[j]) _n = _n.slice(0, colwidths[j]); // addresses decimal > width\n\t\t\t\t\tfor(hcnt=0; hcnt < colwidths[j]-_n.length; ++hcnt) rout.write_shift(1, 0x20);\n\t\t\t\t\trout.write_shift(1, _n, \"sbcs\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(!data[i][j]) rout.write_shift(8, \"00000000\", \"sbcs\");\n\t\t\t\t\telse {\n\t\t\t\t\t\trout.write_shift(4, (\"0000\"+data[i][j].getFullYear()).slice(-4), \"sbcs\");\n\t\t\t\t\t\trout.write_shift(2, (\"00\"+(data[i][j].getMonth()+1)).slice(-2), \"sbcs\");\n\t\t\t\t\t\trout.write_shift(2, (\"00\"+data[i][j].getDate()).slice(-2), \"sbcs\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'C':\n\t\t\t\t\tvar _l = rout.l;\n\t\t\t\t\tvar _s = String(data[i][j] != null ? data[i][j] : \"\").slice(0, colwidths[j]);\n\t\t\t\t\trout.write_shift(1, _s, \"cpstr\");\n\t\t\t\t\t_l += colwidths[j] - rout.l;\n\t\t\t\t\tfor(hcnt=0; hcnt < _l; ++hcnt) rout.write_shift(1, 0x20); break;\n\t\t\t}\n\t\t}\n\t\t// data\n\t}\n\tcurrent_codepage = old_cp;\n\tba.next(1).write_shift(1, 0x1A);\n\treturn ba.end();\n}\n\treturn {\n\t\tto_workbook: dbf_to_workbook,\n\t\tto_sheet: dbf_to_sheet,\n\t\tfrom_sheet: sheet_to_dbf\n\t};\n})();\n\nvar SYLK = /*#__PURE__*/(function() {\n\t/* TODO: stress test sequences */\n\tvar sylk_escapes = ({\n\t\tAA:'À', BA:'Á', CA:'Â', DA:195, HA:'Ä', JA:197,\n\t\tAE:'È', BE:'É', CE:'Ê', HE:'Ë',\n\t\tAI:'Ì', BI:'Í', CI:'Î', HI:'Ï',\n\t\tAO:'Ò', BO:'Ó', CO:'Ô', DO:213, HO:'Ö',\n\t\tAU:'Ù', BU:'Ú', CU:'Û', HU:'Ü',\n\t\tAa:'à', Ba:'á', Ca:'â', Da:227, Ha:'ä', Ja:229,\n\t\tAe:'è', Be:'é', Ce:'ê', He:'ë',\n\t\tAi:'ì', Bi:'í', Ci:'î', Hi:'ï',\n\t\tAo:'ò', Bo:'ó', Co:'ô', Do:245, Ho:'ö',\n\t\tAu:'ù', Bu:'ú', Cu:'û', Hu:'ü',\n\t\tKC:'Ç', Kc:'ç', q:'æ', z:'œ', a:'Æ', j:'Œ',\n\t\tDN:209, Dn:241, Hy:255,\n\t\tS:169, c:170, R:174, \"B \":180,\n\t\t/*::[*/0/*::]*/:176, /*::[*/1/*::]*/:177, /*::[*/2/*::]*/:178,\n\t\t/*::[*/3/*::]*/:179, /*::[*/5/*::]*/:181, /*::[*/6/*::]*/:182,\n\t\t/*::[*/7/*::]*/:183, Q:185, k:186, b:208, i:216, l:222, s:240, y:248,\n\t\t\"!\":161, '\"':162, \"#\":163, \"(\":164, \"%\":165, \"'\":167, \"H \":168,\n\t\t\"+\":171, \";\":187, \"<\":188, \"=\":189, \">\":190, \"?\":191, \"{\":223\n\t}/*:any*/);\n\tvar sylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\tvar sylk_char_fn = function(_, $1){ var o = sylk_escapes[$1]; return typeof o == \"number\" ? _getansi(o) : o; };\n\tvar decode_sylk_char = function($$, $1, $2) { var newcc = (($1.charCodeAt(0) - 0x20)<<4) | ($2.charCodeAt(0) - 0x30); return newcc == 59 ? $$ : _getansi(newcc); };\n\tsylk_escapes[\"|\"] = 254;\n\t/* https://oss.sheetjs.com/notes/sylk/ for more details */\n\tfunction sylk_to_aoa(d/*:RawData*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return sylk_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return sylk_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return sylk_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction sylk_to_aoa_str(str/*:string*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tvar records = str.split(/[\\n\\r]+/), R = -1, C = -1, ri = 0, rj = 0, arr/*:AOA*/ = [];\n\t\tvar formats/*:Array*/ = [];\n\t\tvar next_cell_format/*:string|null*/ = null;\n\t\tvar sht = {}, rowinfo/*:Array*/ = [], colinfo/*:Array*/ = [], cw/*:Array*/ = [];\n\t\tvar Mval = 0, j;\n\t\tvar wb = { Workbook: { WBProps: {}, Names: [] } };\n\t\tif(+opts.codepage >= 0) set_cp(+opts.codepage);\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tMval = 0;\n\t\t\tvar rstr=records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n\t\t\tvar record=rstr.replace(/;;/g, \"\\u0000\").split(\";\").map(function(x) { return x.replace(/\\u0000/g, \";\"); });\n\t\t\tvar RT=record[0], val;\n\t\t\tif(rstr.length > 0) switch(RT) {\n\t\t\tcase 'ID': break; /* header */\n\t\t\tcase 'E': break; /* EOF */\n\t\t\tcase 'B': break; /* dimensions */\n\t\t\tcase 'O': /* workbook options */\n\t\t\tfor(rj=1; rj= 5 or < 0\n\t\t\t\t\tif(d1904 >= 1 && d1904 <= 4) wb.Workbook.WBProps.date1904 = true;\n\t\t\t\t} break;\n\t\t\t} break;\n\t\t\tcase 'W': break; /* window */\n\t\t\tcase 'P':\n\t\t\t\tswitch(record[1].charAt(0)){\n\t\t\t\t\tcase 'P': formats.push(rstr.slice(3).replace(/;;/g, \";\")); break;\n\t\t\t\t} break;\n\t\t\tcase 'NN': { /* defined name */\n\t\t\t\tvar nn = {Sheet: 0};\n\t\t\t\tfor(rj=1; rj -1 && arr[_R][_C];\n\t\t\t\tif(!shrbase || !shrbase[1]) throw new Error(\"SYLK shared formula cannot find base\");\n\t\t\t\tformula = shift_formula_str(shrbase[1], {r: R - _R, c: C - _C});\n\t\t\t}\n\t\t\tif(formula) {\n\t\t\t\tif(!arr[R][C]) arr[R][C] = { t: 'n', f: formula };\n\t\t\t\telse arr[R][C].f = formula;\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase 'F': /* Format */\n\t\t\tvar F_seen = 0;\n\t\t\tfor(rj=1; rj 0) { rowinfo[R].hpt = Mval; rowinfo[R].hpx = pt2px(Mval); }\n\t\t\t\t\telse if(Mval === 0) rowinfo[R].hidden = true;\n\t\t\t\t\tbreak;\n\t\t\t\t// case 'K': // ??\n\t\t\t\t// case 'E': // ??\n\t\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t\tif(F_seen < 1) next_cell_format = null; break;\n\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t}\n\t\tif(rowinfo.length > 0) sht['!rows'] = rowinfo;\n\t\tif(colinfo.length > 0) sht['!cols'] = colinfo;\n\t\tcolinfo.forEach(function(col) { process_col(col); });\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn [arr, sht, wb];\n\t}\n\n\tfunction sylk_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ {\n\t\tvar aoasht = sylk_to_aoa(d, opts);\n\t\tvar aoa = aoasht[0], ws = aoasht[1], wb = aoasht[2];\n\t\tvar _opts = dup(opts); _opts.date1904 = (((wb||{}).Workbook || {}).WBProps || {}).date1904;\n\t\tvar o = aoa_to_sheet(aoa, _opts);\n\t\tkeys(ws).forEach(function(k) { o[k] = ws[k]; });\n\t\tvar outwb = sheet_to_workbook(o, opts);\n\t\tkeys(wb).forEach(function(k) { outwb[k] = wb[k]; });\n\t\toutwb.bookType = \"sylk\";\n\t\treturn outwb;\n\t}\n\n\tfunction write_ws_cell_sylk(cell/*:Cell*/, ws/*:Worksheet*/, R/*:number*/, C/*:number*//*::, opts*/)/*:string*/ {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";K\";\n\t\tswitch(cell.t) {\n\t\t\tcase 'n':\n\t\t\t\to += (cell.v||0);\n\t\t\t\tif(cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {r:R, c:C}); break;\n\t\t\tcase 'b': o += cell.v ? \"TRUE\" : \"FALSE\"; break;\n\t\t\tcase 'e': o += cell.w || cell.v; break;\n\t\t\tcase 'd': o += '\"' + (cell.w || cell.v) + '\"'; break;\n\t\t\tcase 's': o += '\"' + (cell.v == null ? \"\" : String(cell.v)).replace(/\"/g,\"\").replace(/;/g, \";;\") + '\"'; break;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cols_sylk(out, cols) {\n\t\tcols.forEach(function(col, i) {\n\t\t\tvar rec = \"F;W\" + (i+1) + \" \" + (i+1) + \" \";\n\t\t\tif(col.hidden) rec += \"0\";\n\t\t\telse {\n\t\t\t\tif(typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width);\n\t\t\t\tif(typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx);\n\t\t\t\tif(typeof col.wch == 'number') rec += Math.round(col.wch);\n\t\t\t}\n\t\t\tif(rec.charAt(rec.length - 1) != \" \") out.push(rec);\n\t\t});\n\t}\n\n\tfunction write_ws_rows_sylk(out/*:Array*/, rows/*:Array*/) {\n\t\trows.forEach(function(row, i) {\n\t\t\tvar rec = \"F;\";\n\t\t\tif(row.hidden) rec += \"M0;\";\n\t\t\telse if(row.hpt) rec += \"M\" + 20 * row.hpt + \";\";\n\t\t\telse if(row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n\t\t\tif(rec.length > 2) out.push(rec + \"R\" + (i+1));\n\t\t});\n\t}\n\n\tfunction sheet_to_sylk(ws/*:Worksheet*/, opts/*:?any*/, wb/*:?WorkBook*/)/*:string*/ {\n\t\t/* TODO: codepage */\n\t\tvar preamble/*:Array*/ = [\"ID;PSheetJS;N;E\"], o/*:Array*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tvar RS = \"\\r\\n\";\n\t\tvar d1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\n\t\tpreamble.push(\"P;PGeneral\");\n\t\tpreamble.push(\"F;P0;DG0G8;M255\");\n\t\tif(ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n\t\tif(ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n\n\t\tpreamble.push(\"B;Y\" + (r.e.r - r.s.r + 1) + \";X\" + (r.e.c - r.s.c + 1) + \";D\" + [r.s.c,r.s.r,r.e.c,r.e.r].join(\" \"));\n\t\tpreamble.push(\"O;L;D;B\" + (d1904 ? \";V4\" : \"\") + \";K47;G100 0.001\");\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tif(dense && !ws[\"!data\"][R]) continue;\n\t\t\tvar p = [];\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcell = dense ? ws[\"!data\"][R][C] : ws[encode_col(C) + encode_row(R)];\n\t\t\t\tif(!cell || (cell.v == null && (!cell.f || cell.F))) continue;\n\t\t\t\tp.push(write_ws_cell_sylk(cell, ws, R, C, opts)); // TODO: pass date1904 info\n\t\t\t}\n\t\t\to.push(p.join(RS));\n\t\t}\n\t\treturn preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n\t}\n\n\treturn {\n\t\tto_workbook: sylk_to_workbook,\n\t\tfrom_sheet: sheet_to_sylk\n\t};\n})();\n\nvar DIF = /*#__PURE__*/(function() {\n\tfunction dif_to_aoa(d/*:RawData*/, opts)/*:AOA*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return dif_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return dif_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return dif_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction dif_to_aoa_str(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tif (records[ri].trim() === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\tif (R < 0) continue;\n\t\t\tvar metadata = records[ri].trim().split(\",\");\n\t\t\tvar type = metadata[0], value = metadata[1];\n\t\t\t++ri;\n\t\t\tvar data = records[ri] || \"\";\n\t\t\twhile(((data.match(/[\"]/g)||[]).length & 1) && ri < records.length - 1) data += \"\\n\" + records[++ri];\n\t\t\tdata = data.trim();\n\t\t\tswitch (+type) {\n\t\t\t\tcase -1:\n\t\t\t\t\tif (data === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\t\t\telse if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tif(data === 'TRUE') arr[R][C] = true;\n\t\t\t\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\t\t\t\telse if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);\n\t\t\t\t\telse if(!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value);\n\t\t\t\t\telse arr[R][C] = value;\n\t\t\t\t\t++C; break;\n\t\t\t\tcase 1:\n\t\t\t\t\tdata = data.slice(1,data.length-1);\n\t\t\t\t\tdata = data.replace(/\"\"/g, '\"');\n\t\t\t\t\tif(DIF_XL && data && data.match(/^=\".*\"$/)) data = data.slice(2, -1);\n\t\t\t\t\tarr[R][C++] = data !== '' ? data : null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (data === 'EOD') break;\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction dif_to_sheet(str/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(dif_to_aoa(str, opts), opts); }\n\tfunction dif_to_workbook(str/*:string*/, opts)/*:Workbook*/ {\n\t\tvar o = sheet_to_workbook(dif_to_sheet(str, opts), opts);\n\t\to.bookType = \"dif\";\n\t\treturn o;\n\t}\n\n\tfunction make_value(v/*:number*/, s/*:string*/)/*:string*/ { return \"0,\" + String(v) + \"\\r\\n\" + s; }\n\tfunction make_value_str(s/*:string*/)/*:string*/ { return \"1,0\\r\\n\\\"\" + s.replace(/\"/g,'\"\"') + '\"'; }\n\tfunction sheet_to_dif(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\tvar _DIF_XL = DIF_XL;\n\t\tvar r = safe_decode_range(ws['!ref']);\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tvar o/*:Array*/ = [\n\t\t\t\"TABLE\\r\\n0,1\\r\\n\\\"sheetjs\\\"\\r\\n\",\n\t\t\t\"VECTORS\\r\\n0,\" + (r.e.r - r.s.r + 1) + \"\\r\\n\\\"\\\"\\r\\n\",\n\t\t\t\"TUPLES\\r\\n0,\" + (r.e.c - r.s.c + 1) + \"\\r\\n\\\"\\\"\\r\\n\",\n\t\t\t\"DATA\\r\\n0,0\\r\\n\\\"\\\"\\r\\n\"\n\t\t];\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar row = dense ? ws[\"!data\"][R] : [];\n\t\t\tvar p = \"-1,0\\r\\nBOT\\r\\n\";\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar cell/*:Cell*/ = dense ? (row && row[C]) : ws[encode_cell({r:R,c:C})];\n\t\t\t\tif(cell == null) { p +=(\"1,0\\r\\n\\\"\\\"\\r\\n\"); continue;}\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(_DIF_XL) {\n\t\t\t\t\t\t\tif(cell.w != null) p +=(\"0,\" + cell.w + \"\\r\\nV\");\n\t\t\t\t\t\t\telse if(cell.v != null) p +=(make_value(cell.v, \"V\")); // TODO: should this call SSF_format?\n\t\t\t\t\t\t\telse if(cell.f != null && !cell.F) p +=(make_value_str(\"=\" + cell.f));\n\t\t\t\t\t\t\telse p +=(\"1,0\\r\\n\\\"\\\"\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(cell.v == null) p +=(\"1,0\\r\\n\\\"\\\"\");\n\t\t\t\t\t\t\telse p +=(make_value(cell.v, \"V\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\tp +=(cell.v ? make_value(1, \"TRUE\") : make_value(0, \"FALSE\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's':\n\t\t\t\t\t\tp +=(make_value_str((!_DIF_XL || isNaN(+cell.v)) ? cell.v : '=\"' + cell.v + '\"'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tif(!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));\n\t\t\t\t\t\tif(_DIF_XL) p +=(make_value(cell.w, \"V\"));\n\t\t\t\t\t\telse p +=(make_value_str(cell.w));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: p +=(\"1,0\\r\\n\\\"\\\"\");\n\t\t\t\t}\n\t\t\t\tp += \"\\r\\n\";\n\t\t\t}\n\t\t\to.push(p);\n\t\t}\n\t\treturn o.join(\"\") + \"-1,0\\r\\nEOD\";\n\t}\n\treturn {\n\t\tto_workbook: dif_to_workbook,\n\t\tto_sheet: dif_to_sheet,\n\t\tfrom_sheet: sheet_to_dif\n\t};\n})();\n\nvar ETH = /*#__PURE__*/(function() {\n\tfunction decode(s/*:string*/)/*:string*/ { return s.replace(/\\\\b/g,\"\\\\\").replace(/\\\\c/g,\":\").replace(/\\\\n/g,\"\\n\"); }\n\tfunction encode(s/*:string*/)/*:string*/ { return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g,\"\\\\n\"); }\n\n\tfunction eth_to_aoa(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tvar record = records[ri].trim().split(\":\");\n\t\t\tif(record[0] !== 'cell') continue;\n\t\t\tvar addr = decode_cell(record[1]);\n\t\t\tif(arr.length <= addr.r) for(R = arr.length; R <= addr.r; ++R) if(!arr[R]) arr[R] = [];\n\t\t\tR = addr.r; C = addr.c;\n\t\t\tswitch(record[2]) {\n\t\t\t\tcase 't': arr[R][C] = decode(record[3]); break;\n\t\t\t\tcase 'v': arr[R][C] = +record[3]; break;\n\t\t\t\tcase 'vtf': var _f = record[record.length - 1];\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'vtc':\n\t\t\t\t\tswitch(record[3]) {\n\t\t\t\t\t\tcase 'nl': arr[R][C] = +record[4] ? true : false; break;\n\t\t\t\t\t\tdefault: arr[R][C] = +record[4]; break;\n\t\t\t\t\t}\n\t\t\t\t\tif(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n\t\t\t}\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction eth_to_sheet(d/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(eth_to_aoa(d, opts), opts); }\n\tfunction eth_to_workbook(d/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(eth_to_sheet(d, opts), opts); }\n\n\tvar header = [\n\t\t\"socialcalc:version:1.5\",\n\t\t\"MIME-Version: 1.0\",\n\t\t\"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"\n\t].join(\"\\n\");\n\n\tvar sep = [\n\t\t\"--SocialCalcSpreadsheetControlSave\",\n\t\t\"Content-type: text/plain; charset=UTF-8\"\n\t].join(\"\\n\") + \"\\n\";\n\n\t/* TODO: the other parts */\n\tvar meta = [\n\t\t\"# SocialCalc Spreadsheet Control Save\",\n\t\t\"part:sheet\"\n\t].join(\"\\n\");\n\n\tvar end = \"--SocialCalcSpreadsheetControlSave--\";\n\n\tfunction sheet_to_eth_data(ws/*:Worksheet*/)/*:string*/ {\n\t\tif(!ws || !ws['!ref']) return \"\";\n\t\tvar o/*:Array*/ = [], oo/*:Array*/ = [], cell, coord = \"\";\n\t\tvar r = decode_range(ws['!ref']);\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcoord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[\"!data\"][R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null || cell.t === 'z') continue;\n\t\t\t\too = [\"cell\", coord, 't'];\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 's': case 'str': oo.push(encode(cell.v)); break;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(!cell.f) { oo[2]='v'; oo[3]=cell.v; }\n\t\t\t\t\t\telse { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\too[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?\"1\":\"0\";\n\t\t\t\t\t\too[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tvar t = datenum(parseDate(cell.v));\n\t\t\t\t\t\too[2] = 'vtc'; oo[3] = 'nd'; oo[4] = \"\"+t;\n\t\t\t\t\t\too[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e': continue;\n\t\t\t\t}\n\t\t\t\to.push(oo.join(\":\"));\n\t\t\t}\n\t\t}\n\t\to.push(\"sheet:c:\" + (r.e.c-r.s.c+1) + \":r:\" + (r.e.r-r.s.r+1) + \":tvf:1\");\n\t\to.push(\"valueformat:1:text-wiki\");\n\t\t//o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\t\treturn o.join(\"\\n\");\n\t}\n\n\tfunction sheet_to_eth(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\treturn [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\");\n\t\t// return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n\t}\n\n\treturn {\n\t\tto_workbook: eth_to_workbook,\n\t\tto_sheet: eth_to_sheet,\n\t\tfrom_sheet: sheet_to_eth\n\t};\n})();\n\nvar PRN = /*#__PURE__*/(function() {\n\tfunction set_text_arr(data/*:string*/, arr/*:AOA*/, R/*:number*/, C/*:number*/, o/*:any*/) {\n\t\tif(o.raw) arr[R][C] = data;\n\t\telse if(data === \"\"){/* empty */}\n\t\telse if(data === 'TRUE') arr[R][C] = true;\n\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\telse if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);\n\t\telse if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);\n\t\telse arr[R][C] = data;\n\t}\n\n\tfunction prn_to_aoa_str(f/*:string*/, opts)/*:AOA*/ {\n\t\tvar o = opts || {};\n\t\tvar arr/*:AOA*/ = ([]/*:any*/);\n\t\tif(!f || f.length === 0) return arr;\n\t\tvar lines = f.split(/[\\r\\n]/);\n\t\tvar L = lines.length - 1;\n\t\twhile(L >= 0 && lines[L].length === 0) --L;\n\t\tvar start = 10, idx = 0;\n\t\tvar R = 0;\n\t\tfor(; R <= L; ++R) {\n\t\t\tidx = lines[R].indexOf(\" \");\n\t\t\tif(idx == -1) idx = lines[R].length; else idx++;\n\t\t\tstart = Math.max(start, idx);\n\t\t}\n\t\tfor(R = 0; R <= L; ++R) {\n\t\t\tarr[R] = [];\n\t\t\t/* TODO: confirm that widths are always 10 */\n\t\t\tvar C = 0;\n\t\t\tset_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\t\t\tfor(C = 1; C <= (lines[R].length - start)/10 + 1; ++C)\n\t\t\t\tset_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C,o);\n\t\t}\n\t\tif(o.sheetRows) arr = arr.slice(0, o.sheetRows);\n\t\treturn arr;\n\t}\n\n\t// List of accepted CSV separators\n\tvar guess_seps = {\n\t\t/*::[*/0x2C/*::]*/: ',',\n\t\t/*::[*/0x09/*::]*/: \"\\t\",\n\t\t/*::[*/0x3B/*::]*/: ';',\n\t\t/*::[*/0x7C/*::]*/: '|'\n\t};\n\n\t// CSV separator weights to be used in case of equal numbers\n\tvar guess_sep_weights = {\n\t\t/*::[*/0x2C/*::]*/: 3,\n\t\t/*::[*/0x09/*::]*/: 2,\n\t\t/*::[*/0x3B/*::]*/: 1,\n\t\t/*::[*/0x7C/*::]*/: 0\n\t};\n\n\tfunction guess_sep(str) {\n\t\tvar cnt = {}, instr = false, end = 0, cc = 0;\n\t\tfor(;end < str.length;++end) {\n\t\t\tif((cc=str.charCodeAt(end)) == 0x22) instr = !instr;\n\t\t\telse if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;\n\t\t}\n\n\t\tcc = [];\n\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\tcc.push([ cnt[end], end ]);\n\t\t}\n\n\t\tif ( !cc.length ) {\n\t\t\tcnt = guess_sep_weights;\n\t\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\t\tcc.push([ cnt[end], end ]);\n\t\t\t}\n\t\t}\n\n\t\tcc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });\n\n\t\treturn guess_seps[cc.pop()[1]] || 0x2C;\n\t}\n\n\tfunction dsv_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tvar o = opts || {};\n\t\tvar sep = \"\";\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar ws/*:Worksheet*/ = ({}/*:any*/);\n\t\tif(o.dense) ws[\"!data\"] = [];\n\t\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:0}}/*:any*/);\n\n\t\tif(str.slice(0,4) == \"sep=\") {\n\t\t\t// If the line ends in \\r\\n\n\t\t\tif(str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(7);\n\t\t\t}\n\t\t\t// If line ends in \\r OR \\n\n\t\t\telse if(str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(6);\n\t\t\t}\n\t\t\telse sep = guess_sep(str.slice(0,1024));\n\t\t}\n\t\telse if(o && o.FS) sep = o.FS;\n\t\telse sep = guess_sep(str.slice(0,1024));\n\t\tvar R = 0, C = 0, v = 0;\n\t\tvar start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);\n\t\tvar _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\t\tfunction finish_cell() {\n\t\t\tvar s = str.slice(start, end); if(s.slice(-1) == \"\\r\") s = s.slice(0, -1);\n\t\t\tvar cell = ({}/*:any*/);\n\t\t\tif(s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1,-1).replace(/\"\"/g,'\"');\n\t\t\tif(s.length === 0) cell.t = 'z';\n\t\t\telse if(o.raw) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.trim().length === 0) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.charCodeAt(0) == 0x3D) {\n\t\t\t\tif(s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) { cell.t = 's'; cell.v = s.slice(2,-1).replace(/\"\"/g,'\"'); }\n\t\t\t\telse if(fuzzyfmla(s)) { cell.t = 'n'; cell.f = s.slice(1); }\n\t\t\t\telse { cell.t = 's'; cell.v = s; } }\n\t\t\telse if(s == \"TRUE\") { cell.t = 'b'; cell.v = true; }\n\t\t\telse if(s == \"FALSE\") { cell.t = 'b'; cell.v = false; }\n\t\t\telse if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; if(o.cellText !== false) cell.w = s; cell.v = v; }\n\t\t\telse if(!isNaN((v = fuzzydate(s)).getDate()) || _re && s.match(_re)) {\n\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\tvar k = 0;\n\t\t\t\tif(_re && s.match(_re)){ s=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); k=1; v = parseDate(s, k); }\n\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.v = v; }\n\t\t\t\telse { cell.t = 'n'; cell.v = datenum(v); }\n\t\t\t\tif(o.cellText !== false) cell.w = SSF_format(cell.z, cell.v instanceof Date ? datenum(cell.v):cell.v);\n\t\t\t\tif(!o.cellNF) delete cell.z;\n\t\t\t} else {\n\t\t\t\tcell.t = 's';\n\t\t\t\tcell.v = s;\n\t\t\t}\n\t\t\tif(cell.t == 'z'){}\n\t\t\telse if(o.dense) { if(!ws[\"!data\"][R]) ws[\"!data\"][R] = []; ws[\"!data\"][R][C] = cell; }\n\t\t\telse ws[encode_cell({c:C,r:R})] = cell;\n\t\t\tstart = end+1; startcc = str.charCodeAt(start);\n\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\tif(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }\n\t\t}\n\t\touter: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {\n\t\t\tcase 0x22: if(startcc === 0x22) instr = !instr; break;\n\t\t\tcase 0x0d:\n\t\t\t\tif(instr) break;\n\t\t\t\tif(str.charCodeAt(end+1) == 0x0a) ++end;\n\t\t\t\t/* falls through */\n\t\t\tcase sepcc: case 0x0a: if(!instr && finish_cell()) break outer; break;\n\t\t\tdefault: break;\n\t\t}\n\t\tif(end - start > 0) finish_cell();\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction prn_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tif(!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n\t\tif(opts.FS) return dsv_to_sheet_str(str, opts);\n\t\tif(str.slice(0,4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n\t\tif(str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n\t\treturn aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n\t}\n\n\tfunction prn_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tvar str = \"\", bytes = opts.type == 'string' ? [0,0,0,0] : firstbyte(d, opts);\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': str = Base64_decode(d); break;\n\t\t\tcase 'binary': str = d; break;\n\t\t\tcase 'buffer':\n\t\t\t\tif(opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf\n\t\t\t\telse if(opts.codepage && typeof $cptable !== 'undefined') str = $cptable.utils.decode(opts.codepage, d);\n\t\t\t\telse str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d);\n\t\t\t\tbreak;\n\t\t\tcase 'array': str = cc2str(d); break;\n\t\t\tcase 'string': str = d; break;\n\t\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t\t}\n\t\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));\n\t\telse if(opts.type != 'string' && opts.type != 'buffer' && opts.codepage == 65001) str = utf8read(str);\n\t\telse if((opts.type == 'binary') && typeof $cptable !== 'undefined' && opts.codepage) str = $cptable.utils.decode(opts.codepage, $cptable.utils.encode(28591,str));\n\t\tif(str.slice(0,19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n\t\treturn prn_to_sheet_str(str, opts);\n\t}\n\n\tfunction prn_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(prn_to_sheet(d, opts), opts); }\n\n\tfunction sheet_to_prn(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\tvar o/*:Array*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar oo/*:Array*/ = [];\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[\"!data\"][R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null) { oo.push(\" \"); continue; }\n\t\t\t\tvar w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0,10);\n\t\t\t\twhile(w.length < 10) w += \" \";\n\t\t\t\too.push(w + (C === 0 ? \" \" : \"\"));\n\t\t\t}\n\t\t\to.push(oo.join(\"\"));\n\t\t}\n\t\treturn o.join(\"\\n\");\n\t}\n\n\treturn {\n\t\tto_workbook: prn_to_workbook,\n\t\tto_sheet: prn_to_sheet,\n\t\tfrom_sheet: sheet_to_prn\n\t};\n})();\n\n/* Excel defaults to SYLK but warns if data is not valid */\nfunction read_wb_ID(d, opts) {\n\tvar o = opts || {}, OLD_WTF = !!o.WTF; o.WTF = true;\n\ttry {\n\t\tvar out = SYLK.to_workbook(d, o);\n\t\to.WTF = OLD_WTF;\n\t\treturn out;\n\t} catch(e) {\n\t\to.WTF = OLD_WTF;\n\t\tif(!e.message.match(/SYLK bad record ID/) && OLD_WTF) throw e;\n\t\treturn PRN.to_workbook(d, opts);\n\t}\n}\n\nvar WK_ = /*#__PURE__*/(function() {\n\tfunction lotushopper(data, cb/*:RecordHopperCB*/, opts/*:any*/) {\n\t\tif(!data) return;\n\t\tprep_blob(data, data.l || 0);\n\t\tvar Enum = opts.Enum || WK1Enum;\n\t\twhile(data.l < data.length) {\n\t\t\tvar RT = data.read_shift(2);\n\t\t\tvar R = Enum[RT] || Enum[0xFFFF];\n\t\t\tvar length = data.read_shift(2);\n\t\t\tvar tgt = data.l + length;\n\t\t\tvar d = R.f && R.f(data, length, opts);\n\t\t\tdata.l = tgt;\n\t\t\tif(cb(d, R, RT)) return;\n\t\t}\n\t}\n\n\tfunction lotus_to_workbook(d/*:RawData*/, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return lotus_to_workbook_buf(s2a(Base64_decode(d)), opts);\n\t\t\tcase 'binary': return lotus_to_workbook_buf(s2a(d), opts);\n\t\t\tcase 'buffer':\n\t\t\tcase 'array': return lotus_to_workbook_buf(d, opts);\n\t\t}\n\t\tthrow \"Unsupported type \" + opts.type;\n\t}\n\n\tfunction lotus_to_workbook_buf(d, opts)/*:Workbook*/ {\n\t\tif(!d) return d;\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s/*:Worksheet*/ = ({}/*:any*/), n = \"Sheet1\", next_n = \"\", sidx = 0;\n\t\tvar sheets = {}, snames = [], realnames = [], sdata = [];\n\t\tif(o.dense) sdata = s[\"!data\"] = [];\n\n\t\tvar refguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\tvar sheetRows = o.sheetRows || 0;\n\n\t\tif(d[4] == 0x51 && d[5] == 0x50 && d[6] == 0x57) return qpw_to_workbook_buf(d, opts);\n\t\tif(d[2] == 0x00) {\n\t\t\tif(d[3] == 0x08 || d[3] == 0x09) {\n\t\t\t\tif(d.length >= 16 && d[14] == 0x05 && d[15] === 0x6c) throw new Error(\"Unsupported Works 3 for Mac file\");\n\t\t\t}\n\t\t}\n\n\t\tif(d[2] == 0x02) {\n\t\t\to.Enum = WK1Enum;\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0x00: /* BOF */\n\t\t\t\t\to.vers = val;\n\t\t\t\t\tif(val >= 0x1000) o.qpro = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0xFF: /* BOF (works 3+) */\n\t\t\t\t\to.vers = val;\n\t\t\t\t\to.works = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x06: refguess = val; break; /* RANGE */\n\t\t\t\tcase 0xCC: if(val) next_n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0xDE: next_n = val; break; /* SHEETNAMELP */\n\t\t\t\tcase 0x0F: /* LABEL */\n\t\t\t\tcase 0x33: /* STRING */\n\t\t\t\t\tif((!o.qpro && !o.works || RT == 0x33) && val[1].v.charCodeAt(0) < 0x30) val[1].v = val[1].v.slice(1);\n\t\t\t\t\tif(o.works || o.works2) val[1].v = val[1].v.replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x0D: /* INTEGER */\n\t\t\t\tcase 0x0E: /* NUMBER */\n\t\t\t\tcase 0x10: /* FORMULA */\n\t\t\t\t\t/* TODO: actual translation of the format code */\n\t\t\t\t\tif(RT == 0x0E && (val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n\t\t\t\t\t\tval[1].z = o.dateNF || table_fmt[14];\n\t\t\t\t\t\tif(o.cellDates) { val[1].t = 'd'; val[1].v = numdate(val[1].v); }\n\t\t\t\t\t}\n\n\t\t\t\t\tif(o.qpro) {\n\t\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\t\ts = ({}/*:any*/); if(o.dense) sdata = s[\"!data\"] = [];\n\t\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\t\tsidx = val[3]; n = next_n || \"Sheet\" + (sidx + 1); next_n = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar tmpcell = o.dense ? (sdata[val[0].r]||[])[val[0].c] : s[encode_cell(val[0])];\n\t\t\t\t\tif(tmpcell) {\n\t\t\t\t\t\ttmpcell.t = val[1].t; tmpcell.v = val[1].v;\n\t\t\t\t\t\tif(val[1].z != null) tmpcell.z = val[1].z;\n\t\t\t\t\t\tif(val[1].f != null) tmpcell.f = val[1].f;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!sdata[val[0].r]) sdata[val[0].r] = [];\n\t\t\t\t\t\tsdata[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x5405: o.works2 = true; break;\n\t\t\t\tdefault:\n\t\t\t}}, o);\n\t\t} else if(d[2] == 0x1A || d[2] == 0x0E) {\n\t\t\to.Enum = WK3Enum;\n\t\t\tif(d[2] == 0x0E) { o.qpro = true; d.l = 0; }\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0xCC: n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0x16: /* LABEL16 */\n\t\t\t\t\tif(val[1].v.charCodeAt(0) < 0x30) val[1].v = val[1].v.slice(1);\n\t\t\t\t\t// TODO: R9 appears to encode control codes this way -- verify against other versions\n\t\t\t\t\tval[1].v = val[1].v.replace(/\\x0F./g, function($$) { return String.fromCharCode($$.charCodeAt(1) - 0x20); }).replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x17: /* NUMBER17 */\n\t\t\t\tcase 0x18: /* NUMBER18 */\n\t\t\t\tcase 0x19: /* FORMULA19 */\n\t\t\t\tcase 0x25: /* NUMBER25 */\n\t\t\t\tcase 0x27: /* NUMBER27 */\n\t\t\t\tcase 0x28: /* FORMULA28 */\n\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\ts = ({}/*:any*/); if(o.dense) sdata = s[\"!data\"] = [];\n\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\tsidx = val[3]; n = \"Sheet\" + (sidx + 1);\n\t\t\t\t\t}\n\t\t\t\t\tif(sheetRows > 0 && val[0].r >= sheetRows) break;\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!sdata[val[0].r]) sdata[val[0].r] = [];\n\t\t\t\t\t\tsdata[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tif(refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n\t\t\t\t\tif(refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x1B: /* XFORMAT */\n\t\t\t\t\tif(val[0x36b0]) realnames[val[0x36b0][0]] = val[0x36b0][1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0601: /* SHEETINFOQP */\n\t\t\t\t\trealnames[val[0]] = val[1]; if(val[0] == sidx) n = val[1]; break;\n\t\t\t\tdefault: break;\n\t\t\t}}, o);\n\t\t} else throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n\t\ts[\"!ref\"] = encode_range(refguess);\n\t\tsheets[next_n || n] = s;\n\t\tsnames.push(next_n || n);\n\t\tif(!realnames.length) return { SheetNames: snames, Sheets: sheets };\n\t\tvar osheets = {}, rnames = [];\n\t\t/* TODO: verify no collisions */\n\t\tfor(var i = 0; i < realnames.length; ++i) if(sheets[snames[i]]) {\n\t\t\trnames.push(realnames[i] || snames[i]);\n\t\t\tosheets[realnames[i]] = sheets[realnames[i]] || sheets[snames[i]];\n\t\t} else {\n\t\t\trnames.push(realnames[i]);\n\t\t\tosheets[realnames[i]] = ({ \"!ref\": \"A1\" });\n\t\t}\n\t\treturn { SheetNames: rnames, Sheets: osheets };\n\t}\n\n\tfunction sheet_to_wk1(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK1 to JS string\");\n\t\tvar ba = buf_array();\n\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tvar cols = [];\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK1(0x0406));\n\t\twrite_biff_rec(ba, 0x06, write_RANGE(range));\n\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\tvar rr = encode_row(R);\n\t\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[cols[C] + rr];\n\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t/* TODO: formula records */\n\t\t\t\tif(cell.t == \"n\") {\n\t\t\t\t\tif((cell.v|0)==cell.v && cell.v >= -32768 && cell.v <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, cell.v));\n\t\t\t\t\telse write_biff_rec(ba, 0x0e, write_NUMBER(R, C, cell.v));\n\t\t\t\t} else {\n\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\twrite_biff_rec(ba, 0x0F, write_LABEL(R, C, str.slice(0, 239)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\tfunction book_to_wk3(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK3 to JS string\");\n\t\tvar ba = buf_array();\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK3(wb));\n\n\t\tfor(var i = 0, cnt = 0; i < wb.SheetNames.length; ++i) if((wb.Sheets[wb.SheetNames[i]] || {})[\"!ref\"]) write_biff_rec(ba, 0x1b, write_XFORMAT_SHEETNAME(wb.SheetNames[i], cnt++));\n\n\t\tvar wsidx = 0;\n\t\tfor(i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\t\tvar dense = ws[\"!data\"] != null;\n\t\t\tvar cols = [];\n\t\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\t\tvar rr = encode_row(R);\n\t\t\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\t\t\tvar ref = cols[C] + rr;\n\t\t\t\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[ref];\n\t\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t\t/* TODO: FORMULA19 NUMBER18 records */\n\t\t\t\t\tif(cell.t == \"n\") {\n\t\t\t\t\t\twrite_biff_rec(ba, 0x17, write_NUMBER_17(R, C, wsidx, cell.v));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\t\t/* TODO: max len? */\n\t\t\t\t\t\twrite_biff_rec(ba, 0x16, write_LABEL_16(R, C, wsidx, str.slice(0, 239)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t++wsidx;\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\n\tfunction write_BOF_WK1(v/*:number*/) {\n\t\tvar out = new_buf(2);\n\t\tout.write_shift(2, v);\n\t\treturn out;\n\t}\n\n\tfunction write_BOF_WK3(wb/*:Workbook*/) {\n\t\tvar out = new_buf(26);\n\t\tout.write_shift(2, 0x1000);\n\t\tout.write_shift(2, 0x0004);\n\t\tout.write_shift(4, 0x0000);\n\t\tvar rows = 0, cols = 0, wscnt = 0;\n\t\tfor(var i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar name = wb.SheetNames[i];\n\t\t\tvar ws = wb.Sheets[name];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\t++wscnt;\n\t\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\t\tif(rows < range.e.r) rows = range.e.r;\n\t\t\tif(cols < range.e.c) cols = range.e.c;\n\t\t}\n\t\tif(rows > 8191) rows = 8191;\n\t\tout.write_shift(2, rows);\n\t\tout.write_shift(1, wscnt);\n\t\tout.write_shift(1, cols);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(1, 0x01);\n\t\tout.write_shift(1, 0x02);\n\t\tout.write_shift(4, 0);\n\t\tout.write_shift(4, 0);\n\t\treturn out;\n\t}\n\n\tfunction parse_RANGE(blob, length, opts) {\n\t\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\t\tif(length == 8 && opts.qpro) {\n\t\t\to.s.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.s.r = blob.read_shift(2);\n\t\t\to.e.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.e.r = blob.read_shift(2);\n\t\t\treturn o;\n\t\t}\n\t\to.s.c = blob.read_shift(2);\n\t\to.s.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\to.e.c = blob.read_shift(2);\n\t\to.e.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\tif(o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n\t\treturn o;\n\t}\n\tfunction write_RANGE(range) {\n\t\tvar out = new_buf(8);\n\t\tout.write_shift(2, range.s.c);\n\t\tout.write_shift(2, range.s.r);\n\t\tout.write_shift(2, range.e.c);\n\t\tout.write_shift(2, range.e.r);\n\t\treturn out;\n\t}\n\n\tfunction parse_cell(blob, length, opts) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0, 0];\n\t\tif(opts.qpro && opts.vers != 0x5120) {\n\t\t\to[0].c = blob.read_shift(1);\n\t\t\to[3] = blob.read_shift(1);\n\t\t\to[0].r = blob.read_shift(2);\n\t\t\tblob.l+=2;\n\t\t} else if(opts.works) { // TODO: verify with more complex works3-4 examples\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t\to[2] = blob.read_shift(2);\n\t\t} else {\n\t\t\to[2] = blob.read_shift(1);\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif(opts.vers == 0x5120) {\n\t\t\tblob.l++;\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\tif(opts.qpro) blob.l++;\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL(R, C, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(7 + s.length);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, 0x27); // ??\n\t\tfor(var i = 0; i < o.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\tfunction parse_STRING(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif(opts.vers == 0x5120) {\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\n\tfunction parse_INTEGER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(2, 'i');\n\t\treturn o;\n\t}\n\tfunction write_INTEGER(R, C, v) {\n\t\tvar o = new_buf(7);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(2, v, 'i');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\treturn o;\n\t}\n\tfunction write_NUMBER(R, C, v) {\n\t\tvar o = new_buf(13);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(8, v, 'f');\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\t/* TODO: formula */\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\tif(opts.qpro) blob.l = tgt;\n\t\telse {\n\t\t\tvar flen = blob.read_shift(2);\n\t\t\twk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o);\n\t\t\tblob.l += flen;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction wk1_parse_rc(B, V, col) {\n\t\tvar rel = V & 0x8000;\n\t\tV &= ~0x8000;\n\t\tV = (rel ? B : 0) + ((V >= 0x2000) ? V - 0x4000 : V);\n\t\treturn (rel ? \"\" : \"$\") + (col ? encode_col(V) : encode_row(V));\n\t}\n\t/* var oprec = [\n\t\t8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 4, 5, 5, 7, 3, 3,\n\t\t3, 3, 3, 3, 1, 1, 2, 6, 8, 8, 8, 8, 8, 8, 8, 8\n\t]; */\n\t/* TODO: flesh out */\n\tvar FuncTab = {\n\t\t0x1F: [\"NA\", 0],\n\t\t// 0x20: [\"ERR\", 0],\n\t\t0x21: [\"ABS\", 1],\n\t\t0x22: [\"TRUNC\", 1],\n\t\t0x23: [\"SQRT\", 1],\n\t\t0x24: [\"LOG\", 1],\n\t\t0x25: [\"LN\", 1],\n\t\t0x26: [\"PI\", 0],\n\t\t0x27: [\"SIN\", 1],\n\t\t0x28: [\"COS\", 1],\n\t\t0x29: [\"TAN\", 1],\n\t\t0x2A: [\"ATAN2\", 2],\n\t\t0x2B: [\"ATAN\", 1],\n\t\t0x2C: [\"ASIN\", 1],\n\t\t0x2D: [\"ACOS\", 1],\n\t\t0x2E: [\"EXP\", 1],\n\t\t0x2F: [\"MOD\", 2],\n\t\t// 0x30\n\t\t0x31: [\"ISNA\", 1],\n\t\t0x32: [\"ISERR\", 1],\n\t\t0x33: [\"FALSE\", 0],\n\t\t0x34: [\"TRUE\", 0],\n\t\t0x35: [\"RAND\", 0],\n\t\t// 0x36 DATE\n\t\t// 0x37 NOW\n\t\t// 0x38 PMT\n\t\t// 0x39 PV\n\t\t// 0x3A FV\n\t\t// 0x3B IF\n\t\t// 0x3C DAY\n\t\t// 0x3D MONTH\n\t\t// 0x3E YEAR\n\t\t0x3F: [\"ROUND\", 2],\n\t\t// 0x40 TIME\n\t\t// 0x41 HOUR\n\t\t// 0x42 MINUTE\n\t\t// 0x43 SECOND\n\t\t0x44: [\"ISNUMBER\", 1],\n\t\t0x45: [\"ISTEXT\", 1],\n\t\t0x46: [\"LEN\", 1],\n\t\t0x47: [\"VALUE\", 1],\n\t\t// 0x48: [\"FIXED\", ?? 1],\n\t\t0x49: [\"MID\", 3],\n\t\t0x4A: [\"CHAR\", 1],\n\t\t// 0x4B\n\t\t// 0x4C FIND\n\t\t// 0x4D DATEVALUE\n\t\t// 0x4E TIMEVALUE\n\t\t// 0x4F CELL\n\t\t0x50: [\"SUM\", 69],\n\t\t0x51: [\"AVERAGEA\", 69],\n\t\t0x52: [\"COUNTA\", 69],\n\t\t0x53: [\"MINA\", 69],\n\t\t0x54: [\"MAXA\", 69],\n\t\t// 0x55 VLOOKUP\n\t\t// 0x56 NPV\n\t\t// 0x57 VAR\n\t\t// 0x58 STD\n\t\t// 0x59 IRR\n\t\t// 0x5A HLOOKUP\n\t\t// 0x5B DSUM\n\t\t// 0x5C DAVERAGE\n\t\t// 0x5D DCOUNTA\n\t\t// 0x5E DMIN\n\t\t// 0x5F DMAX\n\t\t// 0x60 DVARP\n\t\t// 0x61 DSTDEVP\n\t\t// 0x62 INDEX\n\t\t// 0x63 COLS\n\t\t// 0x64 ROWS\n\t\t// 0x65 REPEAT\n\t\t0x66: [\"UPPER\", 1],\n\t\t0x67: [\"LOWER\", 1],\n\t\t// 0x68 LEFT\n\t\t// 0x69 RIGHT\n\t\t// 0x6A REPLACE\n\t\t0x6B: [\"PROPER\", 1],\n\t\t// 0x6C CELL\n\t\t0x6D: [\"TRIM\", 1],\n\t\t// 0x6E CLEAN\n\t\t0x6F: [\"T\", 1]\n\t\t// 0x70 V\n\t};\n\tvar BinOpTab = [\n\t\t \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t \"\", \"+\", \"-\", \"*\", \"/\", \"^\", \"=\", \"<>\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t\"<=\", \">=\", \"<\", \">\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t \"&\", \"\", \"\", \"\", \"\", \"\", \"\", \"\" // eslint-disable-line no-mixed-spaces-and-tabs\n\t];\n\n\tfunction wk1_fmla_to_csf(blob, o) {\n\t\tprep_blob(blob, 0);\n\t\tvar out = [], argc = 0, R = \"\", C = \"\", argL = \"\", argR = \"\";\n\t\twhile(blob.l < blob.length) {\n\t\t\tvar cc = blob[blob.l++];\n\t\t\tswitch(cc) {\n\t\t\t\tcase 0x00: out.push(blob.read_shift(8, 'f')); break;\n\t\t\t\tcase 0x01: {\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x02: {\n\t\t\t\t\tvar c = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tvar r = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(c + r + \":\" + C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tif(blob.l < blob.length) { console.error(\"WK1 premature formula end\"); return; }\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x04: out.push(\"(\" + out.pop() + \")\"); break;\n\t\t\t\tcase 0x05: out.push(blob.read_shift(2)); break;\n\t\t\t\tcase 0x06: {\n\t\t\t\t\t/* TODO: text encoding */\n\t\t\t\t\tvar Z = \"\"; while((cc = blob[blob.l++])) Z += String.fromCharCode(cc);\n\t\t\t\t\tout.push('\"' + Z.replace(/\"/g, '\"\"') + '\"');\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x08: out.push(\"-\" + out.pop()); break;\n\t\t\t\tcase 0x17: out.push(\"+\" + out.pop()); break;\n\t\t\t\tcase 0x16: out.push(\"NOT(\" + out.pop() + \")\"); break;\n\n\t\t\t\tcase 0x14: case 0x15: {\n\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\tout.push([\"AND\", \"OR\"][cc - 0x14] + \"(\" + argL + \",\" + argR + \")\");\n\t\t\t\t} break;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif(cc < 0x20 && BinOpTab[cc]) {\n\t\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\t\tout.push(argL + BinOpTab[cc] + argR);\n\t\t\t\t\t} else if(FuncTab[cc]) {\n\t\t\t\t\t\targc = FuncTab[cc][1];\n\t\t\t\t\t\tif(argc == 69) argc = blob[blob.l++];\n\t\t\t\t\t\tif(argc > out.length) { console.error(\"WK1 bad formula parse 0x\" + cc.toString(16) + \":|\" + out.join(\"|\") + \"|\"); return; }\n\t\t\t\t\t\tvar args = out.slice(-argc);\n\t\t\t\t\t\tout.length -= argc;\n\t\t\t\t\t\tout.push(FuncTab[cc][0] + \"(\" + args.join(\",\") + \")\");\n\t\t\t\t\t}\n\t\t\t\t\telse if(cc <= 0x07) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x18) return console.error(\"WK1 unsupported op \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x1E) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x73) return console.error(\"WK1 unsupported function opcode \" + cc.toString(16));\n\t\t\t\t\t// possible future functions ??\n\t\t\t\t\telse return console.error(\"WK1 unrecognized opcode \" + cc.toString(16));\n\t\t\t}\n\t\t}\n\t\tif(out.length == 1) o[1].f = \"\" + out[0];\n\t\telse console.error(\"WK1 bad formula parse |\" + out.join(\"|\") + \"|\");\n\t}\n\n\n\tfunction parse_cell_3(blob/*::, length*/) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\to[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++];\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL_16(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].t = 's';\n\t\to[1].v = blob.read_shift(length - 4, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL_16(R, C, wsidx, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(6 + s.length);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\to.write_shift(1, 0x27);\n\t\tfor(var i = 0; i < s.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_18(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].v = blob.read_shift(2);\n\t\tvar v = o[1].v >> 1;\n\t\tif(o[1].v & 0x1) {\n\t\t\tswitch(v & 0x07) {\n\t\t\t\tcase 0: v = (v >> 3) * 5000; break;\n\t\t\t\tcase 1: v = (v >> 3) * 500; break;\n\t\t\t\tcase 2: v = (v >> 3) / 20; break;\n\t\t\t\tcase 3: v = (v >> 3) / 200; break;\n\t\t\t\tcase 4: v = (v >> 3) / 2000; break;\n\t\t\t\tcase 5: v = (v >> 3) / 20000; break;\n\t\t\t\tcase 6: v = (v >> 3) / 16; break;\n\t\t\t\tcase 7: v = (v >> 3) / 64; break;\n\t\t\t}\n\t\t}\n\t\to[1].v = v;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_17(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\tvar v2 = blob.read_shift(4);\n\t\tvar e = blob.read_shift(2);\n\t\tif(e == 0xFFFF) {\n\t\t\tif(v1 === 0 && v2 === 0xC0000000) { o[1].t = \"e\"; o[1].v = 0x0F; } // ERR -> #VALUE!\n\t\t\telse if(v1 === 0 && v2 === 0xD0000000) { o[1].t = \"e\"; o[1].v = 0x2A; } // NA -> #N/A\n\t\t\telse o[1].v = 0;\n\t\t\treturn o;\n\t\t}\n\t\tvar s = e & 0x8000; e = (e&0x7FFF) - 16446;\n\t\to[1].v = (1 - s*2) * (v2 * Math.pow(2, e+32) + v1 * Math.pow(2, e));\n\t\treturn o;\n\t}\n\tfunction write_NUMBER_17(R, C, wsidx, v) {\n\t\tvar o = new_buf(14);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\tif(v == 0) {\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(2, 0xFFFF);\n\t\t\treturn o;\n\t\t}\n\t\tvar s = 0, e = 0, v1 = 0, v2 = 0;\n\t\tif(v < 0) { s = 1; v = -v; }\n\t\te = Math.log2(v) | 0;\n\t\tv /= Math.pow(2, e-31);\n\t\tv2 = (v)>>>0;\n\t\tif((v2&0x80000000) == 0) { v/=2; ++e; v2 = v >>> 0; }\n\t\tv -= v2;\n\t\tv2 |= 0x80000000;\n\t\tv2 >>>= 0;\n\t\tv *= Math.pow(2, 32);\n\t\tv1 = v>>>0;\n\t\to.write_shift(4, v1);\n\t\to.write_shift(4, v2);\n\t\te += 0x3FFF + (s ? 0x8000 : 0);\n\t\to.write_shift(2, e);\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_19(blob, length) {\n\t\tvar o = parse_NUMBER_17(blob, 14);\n\t\tblob.l += length - 14; /* TODO: WK3 formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_25(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\to[1].v = v1 >> 6;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_27(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(8,'f');\n\t\to[1].v = v1;\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_28(blob, length) {\n\t\tvar o = parse_NUMBER_27(blob, 12);\n\t\tblob.l += length - 12; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETNAMECS(blob, length) {\n\t\treturn blob[blob.l + length - 1] == 0 ? blob.read_shift(length, 'cstr') : \"\";\n\t}\n\n\tfunction parse_SHEETNAMELP(blob, length) {\n\t\tvar len = blob[blob.l++];\n\t\tif(len > length - 1) len = length - 1;\n\t\tvar o = \"\"; while(o.length < len) o += String.fromCharCode(blob[blob.l++]);\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETINFOQP(blob, length, opts) {\n\t\tif(!opts.qpro || length < 21) return;\n\t\tvar id = blob.read_shift(1);\n\t\tblob.l += 17;\n\t\tblob.l += 1; //var len = blob.read_shift(1);\n\t\tblob.l += 2;\n\t\tvar nm = blob.read_shift(length - 21, 'cstr');\n\t\treturn [id, nm];\n\t}\n\n\tfunction parse_XFORMAT(blob, length) {\n\t\tvar o = {}, tgt = blob.l + length;\n\t\twhile(blob.l < tgt) {\n\t\t\tvar dt = blob.read_shift(2);\n\t\t\tif(dt == 0x36b0) {\n\t\t\t\to[dt] = [0, \"\"];\n\t\t\t\to[dt][0] = blob.read_shift(2);\n\t\t\t\twhile(blob[blob.l]) { o[dt][1] += String.fromCharCode(blob[blob.l]); blob.l++; } blob.l++;\n\t\t\t}\n\t\t\t// TODO: 0x3a99 ??\n\t\t}\n\t\treturn o;\n\t}\n\tfunction write_XFORMAT_SHEETNAME(name, wsidx) {\n\t\tvar out = new_buf(5 + name.length);\n\t\tout.write_shift(2, 0x36b0);\n\t\tout.write_shift(2, wsidx);\n\t\tfor(var i = 0; i < name.length; ++i) {\n\t\t\tvar cc = name.charCodeAt(i);\n\t\t\tout[out.l++] = cc > 0x7F ? 0x5F : cc;\n\t\t}\n\t\tout[out.l++] = 0;\n\t\treturn out;\n\t}\n\n\tvar WK1Enum = {\n\t\t/*::[*/0x0000/*::]*/: { n:\"BOF\", f:parseuint16 },\n\t\t/*::[*/0x0001/*::]*/: { n:\"EOF\" },\n\t\t/*::[*/0x0002/*::]*/: { n:\"CALCMODE\" },\n\t\t/*::[*/0x0003/*::]*/: { n:\"CALCORDER\" },\n\t\t/*::[*/0x0004/*::]*/: { n:\"SPLIT\" },\n\t\t/*::[*/0x0005/*::]*/: { n:\"SYNC\" },\n\t\t/*::[*/0x0006/*::]*/: { n:\"RANGE\", f:parse_RANGE },\n\t\t/*::[*/0x0007/*::]*/: { n:\"WINDOW1\" },\n\t\t/*::[*/0x0008/*::]*/: { n:\"COLW1\" },\n\t\t/*::[*/0x0009/*::]*/: { n:\"WINTWO\" },\n\t\t/*::[*/0x000A/*::]*/: { n:\"COLW2\" },\n\t\t/*::[*/0x000B/*::]*/: { n:\"NAME\" },\n\t\t/*::[*/0x000C/*::]*/: { n:\"BLANK\" },\n\t\t/*::[*/0x000D/*::]*/: { n:\"INTEGER\", f:parse_INTEGER },\n\t\t/*::[*/0x000E/*::]*/: { n:\"NUMBER\", f:parse_NUMBER },\n\t\t/*::[*/0x000F/*::]*/: { n:\"LABEL\", f:parse_LABEL },\n\t\t/*::[*/0x0010/*::]*/: { n:\"FORMULA\", f:parse_FORMULA },\n\t\t/*::[*/0x0018/*::]*/: { n:\"TABLE\" },\n\t\t/*::[*/0x0019/*::]*/: { n:\"ORANGE\" },\n\t\t/*::[*/0x001A/*::]*/: { n:\"PRANGE\" },\n\t\t/*::[*/0x001B/*::]*/: { n:\"SRANGE\" },\n\t\t/*::[*/0x001C/*::]*/: { n:\"FRANGE\" },\n\t\t/*::[*/0x001D/*::]*/: { n:\"KRANGE1\" },\n\t\t/*::[*/0x0020/*::]*/: { n:\"HRANGE\" },\n\t\t/*::[*/0x0023/*::]*/: { n:\"KRANGE2\" },\n\t\t/*::[*/0x0024/*::]*/: { n:\"PROTEC\" },\n\t\t/*::[*/0x0025/*::]*/: { n:\"FOOTER\" },\n\t\t/*::[*/0x0026/*::]*/: { n:\"HEADER\" },\n\t\t/*::[*/0x0027/*::]*/: { n:\"SETUP\" },\n\t\t/*::[*/0x0028/*::]*/: { n:\"MARGINS\" },\n\t\t/*::[*/0x0029/*::]*/: { n:\"LABELFMT\" },\n\t\t/*::[*/0x002A/*::]*/: { n:\"TITLES\" },\n\t\t/*::[*/0x002B/*::]*/: { n:\"SHEETJS\" },\n\t\t/*::[*/0x002D/*::]*/: { n:\"GRAPH\" },\n\t\t/*::[*/0x002E/*::]*/: { n:\"NGRAPH\" },\n\t\t/*::[*/0x002F/*::]*/: { n:\"CALCCOUNT\" },\n\t\t/*::[*/0x0030/*::]*/: { n:\"UNFORMATTED\" },\n\t\t/*::[*/0x0031/*::]*/: { n:\"CURSORW12\" },\n\t\t/*::[*/0x0032/*::]*/: { n:\"WINDOW\" },\n\t\t/*::[*/0x0033/*::]*/: { n:\"STRING\", f:parse_STRING },\n\t\t/*::[*/0x0037/*::]*/: { n:\"PASSWORD\" },\n\t\t/*::[*/0x0038/*::]*/: { n:\"LOCKED\" },\n\t\t/*::[*/0x003C/*::]*/: { n:\"QUERY\" },\n\t\t/*::[*/0x003D/*::]*/: { n:\"QUERYNAME\" },\n\t\t/*::[*/0x003E/*::]*/: { n:\"PRINT\" },\n\t\t/*::[*/0x003F/*::]*/: { n:\"PRINTNAME\" },\n\t\t/*::[*/0x0040/*::]*/: { n:\"GRAPH2\" },\n\t\t/*::[*/0x0041/*::]*/: { n:\"GRAPHNAME\" },\n\t\t/*::[*/0x0042/*::]*/: { n:\"ZOOM\" },\n\t\t/*::[*/0x0043/*::]*/: { n:\"SYMSPLIT\" },\n\t\t/*::[*/0x0044/*::]*/: { n:\"NSROWS\" },\n\t\t/*::[*/0x0045/*::]*/: { n:\"NSCOLS\" },\n\t\t/*::[*/0x0046/*::]*/: { n:\"RULER\" },\n\t\t/*::[*/0x0047/*::]*/: { n:\"NNAME\" },\n\t\t/*::[*/0x0048/*::]*/: { n:\"ACOMM\" },\n\t\t/*::[*/0x0049/*::]*/: { n:\"AMACRO\" },\n\t\t/*::[*/0x004A/*::]*/: { n:\"PARSE\" },\n\t\t/*::[*/0x0066/*::]*/: { n:\"PRANGES??\" },\n\t\t/*::[*/0x0067/*::]*/: { n:\"RRANGES??\" },\n\t\t/*::[*/0x0068/*::]*/: { n:\"FNAME??\" },\n\t\t/*::[*/0x0069/*::]*/: { n:\"MRANGES??\" },\n\t\t/*::[*/0x00CC/*::]*/: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t/*::[*/0x00DE/*::]*/: { n:\"SHEETNAMELP\", f:parse_SHEETNAMELP },\n\t\t/*::[*/0x00FF/*::]*/: { n:\"BOF\", f:parseuint16 },\n\t\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n\t};\n\n\tvar WK3Enum = {\n\t\t/*::[*/0x0000/*::]*/: { n:\"BOF\" },\n\t\t/*::[*/0x0001/*::]*/: { n:\"EOF\" },\n\t\t/*::[*/0x0002/*::]*/: { n:\"PASSWORD\" },\n\t\t/*::[*/0x0003/*::]*/: { n:\"CALCSET\" },\n\t\t/*::[*/0x0004/*::]*/: { n:\"WINDOWSET\" },\n\t\t/*::[*/0x0005/*::]*/: { n:\"SHEETCELLPTR\" },\n\t\t/*::[*/0x0006/*::]*/: { n:\"SHEETLAYOUT\" },\n\t\t/*::[*/0x0007/*::]*/: { n:\"COLUMNWIDTH\" },\n\t\t/*::[*/0x0008/*::]*/: { n:\"HIDDENCOLUMN\" },\n\t\t/*::[*/0x0009/*::]*/: { n:\"USERRANGE\" },\n\t\t/*::[*/0x000A/*::]*/: { n:\"SYSTEMRANGE\" },\n\t\t/*::[*/0x000B/*::]*/: { n:\"ZEROFORCE\" },\n\t\t/*::[*/0x000C/*::]*/: { n:\"SORTKEYDIR\" },\n\t\t/*::[*/0x000D/*::]*/: { n:\"FILESEAL\" },\n\t\t/*::[*/0x000E/*::]*/: { n:\"DATAFILLNUMS\" },\n\t\t/*::[*/0x000F/*::]*/: { n:\"PRINTMAIN\" },\n\t\t/*::[*/0x0010/*::]*/: { n:\"PRINTSTRING\" },\n\t\t/*::[*/0x0011/*::]*/: { n:\"GRAPHMAIN\" },\n\t\t/*::[*/0x0012/*::]*/: { n:\"GRAPHSTRING\" },\n\t\t/*::[*/0x0013/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0014/*::]*/: { n:\"ERRCELL\" },\n\t\t/*::[*/0x0015/*::]*/: { n:\"NACELL\" },\n\t\t/*::[*/0x0016/*::]*/: { n:\"LABEL16\", f:parse_LABEL_16},\n\t\t/*::[*/0x0017/*::]*/: { n:\"NUMBER17\", f:parse_NUMBER_17 },\n\t\t/*::[*/0x0018/*::]*/: { n:\"NUMBER18\", f:parse_NUMBER_18 },\n\t\t/*::[*/0x0019/*::]*/: { n:\"FORMULA19\", f:parse_FORMULA_19},\n\t\t/*::[*/0x001A/*::]*/: { n:\"FORMULA1A\" },\n\t\t/*::[*/0x001B/*::]*/: { n:\"XFORMAT\", f:parse_XFORMAT },\n\t\t/*::[*/0x001C/*::]*/: { n:\"DTLABELMISC\" },\n\t\t/*::[*/0x001D/*::]*/: { n:\"DTLABELCELL\" },\n\t\t/*::[*/0x001E/*::]*/: { n:\"GRAPHWINDOW\" },\n\t\t/*::[*/0x001F/*::]*/: { n:\"CPA\" },\n\t\t/*::[*/0x0020/*::]*/: { n:\"LPLAUTO\" },\n\t\t/*::[*/0x0021/*::]*/: { n:\"QUERY\" },\n\t\t/*::[*/0x0022/*::]*/: { n:\"HIDDENSHEET\" },\n\t\t/*::[*/0x0023/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0025/*::]*/: { n:\"NUMBER25\", f:parse_NUMBER_25 },\n\t\t/*::[*/0x0026/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0027/*::]*/: { n:\"NUMBER27\", f:parse_NUMBER_27 },\n\t\t/*::[*/0x0028/*::]*/: { n:\"FORMULA28\", f:parse_FORMULA_28 },\n\t\t/*::[*/0x008E/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0093/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0096/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0097/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0098/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0099/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x009A/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x009B/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x009C/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00A3/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00AE/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00AF/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B0/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B1/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B8/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00B9/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00BA/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00BB/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00BC/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00C3/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00C9/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00CC/*::]*/: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t/*::[*/0x00CD/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00CE/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00CF/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x00D0/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0100/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0103/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0104/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0105/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0106/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0107/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0109/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010A/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010B/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010C/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010E/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x010F/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0180/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0185/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0186/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0189/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x018C/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0200/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0202/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0201/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0204/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0205/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0280/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0281/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0282/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0283/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0284/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0285/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0286/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0287/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0288/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0292/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0293/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0294/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0295/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0296/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0299/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x029A/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0300/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0304/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0601/*::]*/: { n:\"SHEETINFOQP\", f:parse_SHEETINFOQP },\n\t\t/*::[*/0x0640/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0642/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0701/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0702/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0703/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0704/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0780/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0800/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0801/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0804/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0A80/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x2AF6/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x3231/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x6E49/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x6F44/*::]*/: { n:\"??\" },\n\t\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n\t};\n\n\t/* QPW uses a different set of record types */\n\tfunction qpw_to_workbook_buf(d, opts)/*:Workbook*/ {\n\t\tprep_blob(d, 0);\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s/*:Worksheet*/ = ({}/*:any*/); if(o.dense) s[\"!data\"] = [];\n\t\tvar SST = [], sname = \"\", formulae = [];\n\t\tvar range = {s:{r:-1,c:-1}, e:{r:-1,c:-1}};\n\t\tvar cnt = 0, type = 0, C = 0, R = 0;\n\t\tvar wb = { SheetNames: [], Sheets: {} };\n\t\touter: while(d.l < d.length) {\n\t\t\tvar RT = d.read_shift(2), length = d.read_shift(2);\n\t\t\tvar p = d.slice(d.l, d.l + length);\n\t\t\tprep_blob(p, 0);\n\t\t\tswitch(RT) {\n\t\t\t\tcase 0x01: /* BOF */\n\t\t\t\t\tif(p.read_shift(4) != 0x39575051) throw \"Bad QPW9 BOF!\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x02: /* EOF */ break outer;\n\n\t\t\t\t/* TODO: The behavior here should be consistent with Numbers: QP Notebook ~ .TN.SheetArchive, QP Sheet ~ .TST.TableModelArchive */\n\t\t\t\tcase 0x0401: /* BON */ break;\n\t\t\t\tcase 0x0402: /* EON */ /* TODO: backfill missing sheets based on BON cnt */ break;\n\n\t\t\t\tcase 0x0407: { /* SST */\n\t\t\t\t\tp.l += 12;\n\t\t\t\t\twhile(p.l < p.length) {\n\t\t\t\t\t\tcnt = p.read_shift(2);\n\t\t\t\t\t\ttype = p.read_shift(1);\n\t\t\t\t\t\tSST.push(p.read_shift(cnt, 'cstr'));\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0408: { /* FORMULAE */\n\t\t\t\t\t//p.l += 12;\n\t\t\t\t\t//while(p.l < p.length) {\n\t\t\t\t\t//\tcnt = p.read_shift(2);\n\t\t\t\t\t//\tformulae.push(p.slice(p.l, p.l + cnt + 1)); p.l += cnt + 1;\n\t\t\t\t\t//}\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0601: { /* BOS */\n\t\t\t\t\tvar sidx = p.read_shift(2);\n\t\t\t\t\ts = ({}/*:any*/); if(o.dense) s[\"!data\"] = [];\n\t\t\t\t\trange.s.c = p.read_shift(2);\n\t\t\t\t\trange.e.c = p.read_shift(2);\n\t\t\t\t\trange.s.r = p.read_shift(4);\n\t\t\t\t\trange.e.r = p.read_shift(4);\n\t\t\t\t\tp.l += 4;\n\t\t\t\t\tif(p.l + 2 < p.length) {\n\t\t\t\t\t\tcnt = p.read_shift(2);\n\t\t\t\t\t\ttype = p.read_shift(1);\n\t\t\t\t\t\tsname = cnt == 0 ? \"\" : p.read_shift(cnt, 'cstr');\n\t\t\t\t\t}\n\t\t\t\t\tif(!sname) sname = encode_col(sidx);\n\t\t\t\t\t/* TODO: backfill empty sheets */\n\t\t\t\t} break;\n\t\t\t\tcase 0x0602: { /* EOS */\n\t\t\t\t\t/* NOTE: QP valid range A1:IV1000000 */\n\t\t\t\t\tif(range.s.c > 0xFF || range.s.r > 999999) break;\n\t\t\t\t\tif(range.e.c < range.s.c) range.e.c = range.s.c;\n\t\t\t\t\tif(range.e.r < range.s.r) range.e.r = range.s.r;\n\t\t\t\t\ts[\"!ref\"] = encode_range(range);\n\t\t\t\t\tbook_append_sheet(wb, s, sname); // TODO: a barrel roll\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0A01: { /* COL (like XLS Row, modulo the layout transposition) */\n\t\t\t\t\tC = p.read_shift(2);\n\t\t\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\t\t\tif(range.s.c > C) range.s.c = C;\n\t\t\t\t\tR = p.read_shift(4);\n\t\t\t\t\tif(range.s.r > R) range.s.r = R;\n\t\t\t\t\tR = p.read_shift(4);\n\t\t\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0C01: { /* MulCells (like XLS MulRK, but takes advantage of common column data patterns) */\n\t\t\t\t\tR = p.read_shift(4), cnt = p.read_shift(4);\n\t\t\t\t\tif(range.s.r > R) range.s.r = R;\n\t\t\t\t\tif(range.e.r < R + cnt - 1) range.e.r = R + cnt - 1;\n\t\t\t\t\tvar CC = encode_col(C);\n\t\t\t\t\twhile(p.l < p.length) {\n\t\t\t\t\t\tvar cell = { t: \"z\" };\n\t\t\t\t\t\tvar flags = p.read_shift(1);\n\t\t\t\t\t\tif(flags & 0x80) p.l += 2;\n\t\t\t\t\t\tvar mul = (flags & 0x40) ? p.read_shift(2) - 1: 0;\n\t\t\t\t\t\tswitch(flags & 0x1F) {\n\t\t\t\t\t\t\tcase 1: break;\n\t\t\t\t\t\t\tcase 2: cell = { t: \"n\", v: p.read_shift(2) }; break;\n\t\t\t\t\t\t\tcase 3: cell = { t: \"n\", v: p.read_shift(2, 'i') }; break;\n\t\t\t\t\t\t\tcase 5: cell = { t: \"n\", v: p.read_shift(8, 'f') }; break;\n\t\t\t\t\t\t\tcase 7: cell = { t: \"s\", v: SST[type = p.read_shift(4) - 1] }; break;\n\t\t\t\t\t\t\tcase 8: cell = { t: \"n\", v: p.read_shift(8, 'f') }; p.l += 2; /* cell.f = formulae[p.read_shift(4)]; */ p.l += 4; break;\n\t\t\t\t\t\t\tdefault: throw \"Unrecognized QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar delta = 0;\n\t\t\t\t\t\tif(flags & 0x20) switch(flags & 0x1F) {\n\t\t\t\t\t\t\tcase 2: delta = p.read_shift(2); break;\n\t\t\t\t\t\t\tcase 3: delta = p.read_shift(2, 'i'); break;\n\t\t\t\t\t\t\tcase 7: delta = p.read_shift(2); break;\n\t\t\t\t\t\t\tdefault: throw \"Unsupported delta for QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!(!o.sheetStubs && cell.t == \"z\")) {\n\t\t\t\t\t\t\tif(s[\"!data\"] != null) {\n\t\t\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\t\t\ts[\"!data\"][R][C] = cell;\n\t\t\t\t\t\t\t} else s[CC + encode_row(R)] = cell;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t++R; --cnt;\n\t\t\t\t\t\twhile(mul-- > 0 && cnt >= 0) {\n\t\t\t\t\t\t\tif(flags & 0x20) switch(flags & 0x1F) {\n\t\t\t\t\t\t\t\tcase 2: cell = { t: \"n\", v: (cell.v + delta) & 0xFFFF }; break;\n\t\t\t\t\t\t\t\tcase 3: cell = { t: \"n\", v: (cell.v + delta) & 0xFFFF }; if(cell.v > 0x7FFF) cell.v -= 0x10000; break;\n\t\t\t\t\t\t\t\tcase 7: cell = { t: \"s\", v: SST[type = (type + delta) >>> 0] }; break;\n\t\t\t\t\t\t\t\tdefault: throw \"Cannot apply delta for QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t\t} else switch(flags & 0x1F) {\n\t\t\t\t\t\t\t\tcase 1: cell = { t: \"z\" }; break;\n\t\t\t\t\t\t\t\tcase 2: cell = { t: \"n\", v: p.read_shift(2) }; break;\n\t\t\t\t\t\t\t\tcase 7: cell = { t: \"s\", v: SST[type = p.read_shift(4) - 1] }; break;\n\t\t\t\t\t\t\t\tdefault: throw \"Cannot apply repeat for QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(!(!o.sheetStubs && cell.t == \"z\")) {\n\t\t\t\t\t\t\t\tif(s[\"!data\"] != null) {\n\t\t\t\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\t\t\t\ts[\"!data\"][R][C] = cell;\n\t\t\t\t\t\t\t\t} else s[CC + encode_row(R)] = cell;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t++R; --cnt;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\tdefault: break;\n\t\t\t}\n\t\t\td.l += length;\n\t\t}\n\t\treturn wb;\n\t}\n\n\treturn {\n\t\tsheet_to_wk1: sheet_to_wk1,\n\t\tbook_to_wk3: book_to_wk3,\n\t\tto_workbook: lotus_to_workbook\n\t};\n})();\n/* 18.4.7 rPr CT_RPrElt */\nfunction parse_rpr(rpr) {\n\tvar font = {}, m = rpr.match(tagregex), i = 0;\n\tvar pass = false;\n\tif(m) for(;i!=m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(y[0].replace(/\\w*:/g,\"\")) {\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '':\n\t\t\tcase '': font.shadow = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty TODO */\n\t\t\tcase '':\n\t\t\tcase '': font.outline = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.5 rFont CT_FontName */\n\t\t\tcase '':\n\t\t\tcase '': font.strike = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '':\n\t\t\tcase '': font.u = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.2 b */\n\t\t\tcase '':\n\t\t\tcase '': font.b = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.26 i */\n\t\t\tcase '':\n\t\t\tcase '': font.i = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.18 family ST_FontFamily */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme TODO */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault:\n\t\t\t\tif(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n\t\t}\n\t}\n\treturn font;\n}\n\nvar parse_rs = /*#__PURE__*/(function() {\n\tvar tregex = matchtag(\"t\"), rpregex = matchtag(\"rPr\");\n\t/* 18.4.4 r CT_RElt */\n\tfunction parse_r(r) {\n\t\t/* 18.4.12 t ST_Xstring */\n\t\tvar t = r.match(tregex)/*, cp = 65001*/;\n\t\tif(!t) return {t:\"s\", v:\"\"};\n\n\t\tvar o/*:Cell*/ = ({t:'s', v:unescapexml(t[1])}/*:any*/);\n\t\tvar rpr = r.match(rpregex);\n\t\tif(rpr) o.s = parse_rpr(rpr[1]);\n\t\treturn o;\n\t}\n\tvar rregex = /<(?:\\w+:)?r>/g, rend = /<\\/(?:\\w+:)?r>/;\n\treturn function parse_rs(rs) {\n\t\treturn rs.replace(rregex,\"\").split(rend).map(parse_r).filter(function(r) { return r.v; });\n\t};\n})();\n\n\n/* Parse a list of tags */\nvar rs_to_html = /*#__PURE__*/(function parse_rs_factory() {\n\tvar nlregex = /(\\r\\n|\\n)/g;\n\tfunction parse_rpr2(font, intro, outro) {\n\t\tvar style/*:Array*/ = [];\n\n\t\tif(font.u) style.push(\"text-decoration: underline;\");\n\t\tif(font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n\t\tif(font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n\t\tif(font.outline) style.push(\"text-effect: outline;\");\n\t\tif(font.shadow) style.push(\"text-shadow: auto;\");\n\t\tintro.push('');\n\n\t\tif(font.b) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.i) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.strike) { intro.push(\"\"); outro.push(\"\"); }\n\n\t\tvar align = font.valign || \"\";\n\t\tif(align == \"superscript\" || align == \"super\") align = \"sup\";\n\t\telse if(align == \"subscript\") align = \"sub\";\n\t\tif(align != \"\") { intro.push(\"<\" + align + \">\"); outro.push(\"\"); }\n\n\t\toutro.push(\"\");\n\t\treturn font;\n\t}\n\n\t/* 18.4.4 r CT_RElt */\n\tfunction r_to_html(r) {\n\t\tvar terms/*:[Array, string, Array]*/ = [[],r.v,[]];\n\t\tif(!r.v) return \"\";\n\n\t\tif(r.s) parse_rpr2(r.s, terms[0], terms[2]);\n\n\t\treturn terms[0].join(\"\") + terms[1].replace(nlregex,'
') + terms[2].join(\"\");\n\t}\n\n\treturn function parse_rs(rs) {\n\t\treturn rs.map(r_to_html).join(\"\");\n\t};\n})();\n\n/* 18.4.8 si CT_Rst */\nvar sitregex = /<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g, sirregex = /<(?:\\w+:)?r>/;\nvar sirphregex = /<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;\nfunction parse_si(x, opts) {\n\tvar html = opts ? opts.cellHTML : true;\n\tvar z = {};\n\tif(!x) return { t: \"\" };\n\t//var y;\n\t/* 18.4.12 t ST_Xstring (Plaintext String) */\n\t// TODO: is whitespace actually valid here?\n\tif(x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n\t\tz.t = unescapexml(utf8read(x.slice(x.indexOf(\">\")+1).split(/<\\/(?:\\w+:)?t>/)[0]||\"\"), true);\n\t\tz.r = utf8read(x);\n\t\tif(html) z.h = escapehtml(z.t);\n\t}\n\t/* 18.4.4 r CT_RElt (Rich Text Run) */\n\telse if((/*y = */x.match(sirregex))) {\n\t\tz.r = utf8read(x);\n\t\tz.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex)||[]).join(\"\").replace(tagregex,\"\")), true);\n\t\tif(html) z.h = rs_to_html(parse_rs(z.r));\n\t}\n\t/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\t/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\treturn z;\n}\n\n/* 18.4 Shared String Table */\nvar sstr0 = /<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/;\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\nfunction parse_sst_xml(data/*:string*/, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/), ss = \"\";\n\tif(!data) return s;\n\t/* 18.4.9 sst CT_Sst */\n\tvar sst = data.match(sstr0);\n\tif(sst) {\n\t\tss = sst[2].replace(sstr1,\"\").split(sstr2);\n\t\tfor(var i = 0; i != ss.length; ++i) {\n\t\t\tvar o = parse_si(ss[i].trim(), opts);\n\t\t\tif(o != null) s[s.length] = o;\n\t\t}\n\t\tsst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;\n\t}\n\treturn s;\n}\n\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\nfunction write_sst_xml(sst/*:SST*/, opts)/*:string*/ {\n\tif(!opts.bookSST) return \"\";\n\tvar o = [XML_HEADER];\n\to[o.length] = (writextag('sst', null, {\n\t\txmlns: XMLNS_main[0],\n\t\tcount: sst.Count,\n\t\tuniqueCount: sst.Unique\n\t}));\n\tfor(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;\n\t\tvar s/*:XLString*/ = sst[i];\n\t\tvar sitag = \"\";\n\t\tif(s.r) sitag += s.r;\n\t\telse {\n\t\t\tsitag += \"\" + escapexml(s.t) + \"\";\n\t\t}\n\t\tsitag += \"\";\n\t\to[o.length] = (sitag);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\nfunction parse_BrtBeginSst(data) {\n\treturn [data.read_shift(4), data.read_shift(4)];\n}\n\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\nfunction parse_sst_bin(data, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/);\n\tvar pass = false;\n\trecordhopper(data, function hopper_sst(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009F: /* BrtBeginSst */\n\t\t\t\ts.Count = val[0]; s.Unique = val[1]; break;\n\t\t\tcase 0x0013: /* BrtSSTItem */\n\t\t\t\ts.push(val); break;\n\t\t\tcase 0x00A0: /* BrtEndSst */\n\t\t\t\treturn true;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){}\n\t\t\t\tif(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(4, sst.Count);\n\to.write_shift(4, sst.Unique);\n\treturn o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst/*::, opts*/) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x009F /* BrtBeginSst */, write_BrtBeginSst(sst));\n\tfor(var i = 0; i < sst.length; ++i) write_record(ba, 0x0013 /* BrtSSTItem */, write_BrtSSTItem(sst[i]));\n\t/* FRTSST */\n\twrite_record(ba, 0x00A0 /* BrtEndSst */);\n\treturn ba.end();\n}\nfunction _JS2ANSI(str/*:string*/)/*:Array*/ {\n\tif(typeof $cptable !== 'undefined') return $cptable.utils.encode(current_ansi, str);\n\tvar o/*:Array*/ = [], oo = str.split(\"\");\n\tfor(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.4 Version */\nfunction parse_CRYPTOVersion(blob, length/*:?number*/) {\n\tvar o/*:any*/ = {};\n\to.Major = blob.read_shift(2);\n\to.Minor = blob.read_shift(2);\n\t/*:: if(length == null) return o; */\n\tif(length >= 4) blob.l += length - 4;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\nfunction parse_DataSpaceVersionInfo(blob) {\n\tvar o = {};\n\to.id = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\nfunction parse_DataSpaceMapEntry(blob) {\n\tvar len = blob.read_shift(4);\n\tvar end = blob.l + len - 4;\n\tvar o = {};\n\tvar cnt = blob.read_shift(4);\n\tvar comps/*:Array<{t:number, v:string}>*/ = [];\n\t/* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\twhile(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') });\n\to.name = blob.read_shift(0, 'lpp4');\n\to.comps = comps;\n\tif(blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\nfunction parse_DataSpaceMap(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\nfunction parse_DataSpaceDefinition(blob)/*:Array*/ {\n\tvar o/*:Array*/ = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(blob.read_shift(0, 'lpp4'));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\nfunction parse_TransformInfoHeader(blob) {\n\tvar o = {};\n\t/*var len = */blob.read_shift(4);\n\tblob.l += 4; // must be 0x1\n\to.id = blob.read_shift(0, 'lpp4');\n\to.name = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\nfunction parse_Primary(blob) {\n\t/* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n\tvar hdr = parse_TransformInfoHeader(blob);\n\t/* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\thdr.ename = blob.read_shift(0, '8lpp4');\n\thdr.blksz = blob.read_shift(4);\n\thdr.cmode = blob.read_shift(4);\n\tif(blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n\treturn hdr;\n}\n\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\nfunction parse_EncryptionHeader(blob, length/*:number*/) {\n\tvar tgt = blob.l + length;\n\tvar o = {};\n\to.Flags = (blob.read_shift(4) & 0x3F);\n\tblob.l += 4;\n\to.AlgID = blob.read_shift(4);\n\tvar valid = false;\n\tswitch(o.AlgID) {\n\t\tcase 0x660E: case 0x660F: case 0x6610: valid = (o.Flags == 0x24); break;\n\t\tcase 0x6801: valid = (o.Flags == 0x04); break;\n\t\tcase 0: valid = (o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24); break;\n\t\tdefault: throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n\t}\n\tif(!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n\to.AlgIDHash = blob.read_shift(4);\n\to.KeySize = blob.read_shift(4);\n\to.ProviderType = blob.read_shift(4);\n\tblob.l += 8;\n\to.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le');\n\tblob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\nfunction parse_EncryptionVerifier(blob, length/*:number*/) {\n\tvar o = {}, tgt = blob.l + length;\n\tblob.l += 4; // SaltSize must be 0x10\n\to.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\to.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\t/*var sz = */blob.read_shift(4);\n\to.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\nfunction parse_EncryptionInfo(blob) {\n\tvar vers = parse_CRYPTOVersion(blob);\n\tswitch(vers.Minor) {\n\t\tcase 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\t\tcase 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\t\tcase 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n\t}\n\tthrow new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */\nfunction parse_EncInfoStd(blob/*::, vers*/) {\n\tvar flags = blob.read_shift(4);\n\tif((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n\tvar sz = blob.read_shift(4);\n\t//var tgt = blob.l + sz;\n\tvar hdr = parse_EncryptionHeader(blob, sz);\n\tvar verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n\treturn { t:\"Std\", h:hdr, v:verifier };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */\nfunction parse_EncInfoExt(/*::blob, vers*/) { throw new Error(\"File is password-protected: ECMA-376 Extensible\"); }\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\nfunction parse_EncInfoAgl(blob/*::, vers*/) {\n\tvar KeyData = [\"saltSize\",\"blockSize\",\"keyBits\",\"hashSize\",\"cipherAlgorithm\",\"cipherChaining\",\"hashAlgorithm\",\"saltValue\"];\n\tblob.l+=4;\n\tvar xml = blob.read_shift(blob.length - blob.l, 'utf8');\n\tvar o = {};\n\txml.replace(tagregex, function xml_agile(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\t\t\tcase '': case '': break;\n\n\t\t\tcase '': break;\n\t\t\tcase ' 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n\to.Flags = blob.read_shift(4); length -= 4;\n\tvar sz = blob.read_shift(4); length -= 4;\n\to.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;\n\to.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n\treturn o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\nfunction parse_RC4Header(blob/*::, length*/) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n\tif(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n\to.Salt = blob.read_shift(16);\n\to.EncryptedVerifier = blob.read_shift(16);\n\to.EncryptedVerifierHash = blob.read_shift(16);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\nfunction crypto_CreatePasswordVerifier_Method1(Password/*:string*/) {\n\tvar Verifier = 0x0000, PasswordArray;\n\tvar PasswordDecoded = _JS2ANSI(Password);\n\tvar len = PasswordDecoded.length + 1, i, PasswordByte;\n\tvar Intermediate1, Intermediate2, Intermediate3;\n\tPasswordArray = new_raw_buf(len);\n\tPasswordArray[0] = PasswordDecoded.length;\n\tfor(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];\n\tfor(i = len-1; i >= 0; --i) {\n\t\tPasswordByte = PasswordArray[i];\n\t\tIntermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;\n\t\tIntermediate2 = (Verifier << 1) & 0x7FFF;\n\t\tIntermediate3 = Intermediate1 | Intermediate2;\n\t\tVerifier = Intermediate3 ^ PasswordByte;\n\t}\n\treturn Verifier ^ 0xCE4B;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\nvar crypto_CreateXorArray_Method1 = /*#__PURE__*/(function() {\n\tvar PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n\tvar InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n\tvar XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\n\tvar Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };\n\tvar XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };\n\tvar CreateXorKey_Method1 = function(Password) {\n\t\tvar XorKey = InitialCode[Password.length - 1];\n\t\tvar CurrentElement = 0x68;\n\t\tfor(var i = Password.length-1; i >= 0; --i) {\n\t\t\tvar Char = Password[i];\n\t\t\tfor(var j = 0; j != 7; ++j) {\n\t\t\t\tif(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n\t\t\t\tChar *= 2; --CurrentElement;\n\t\t\t}\n\t\t}\n\t\treturn XorKey;\n\t};\n\treturn function(password/*:string*/) {\n\t\tvar Password = _JS2ANSI(password);\n\t\tvar XorKey = CreateXorKey_Method1(Password);\n\t\tvar Index = Password.length;\n\t\tvar ObfuscationArray = new_raw_buf(16);\n\t\tfor(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;\n\t\tvar Temp, PasswordLastChar, PadIndex;\n\t\tif((Index & 1) === 1) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tPasswordLastChar = Password[Password.length - 1];\n\t\t\tObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n\t\t}\n\t\twhile(Index > 0) {\n\t\t\t--Index;\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t}\n\t\tIndex = 15;\n\t\tPadIndex = 15 - Password.length;\n\t\twhile(PadIndex > 0) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t}\n\t\treturn ObfuscationArray;\n\t};\n})();\n\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\nvar crypto_DecryptData_Method1 = function(password/*:string*/, Data, XorArrayIndex, XorArray, O) {\n\t/* If XorArray is set, use it; if O is not set, make changes in-place */\n\tif(!O) O = Data;\n\tif(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n\tvar Index, Value;\n\tfor(Index = 0; Index != Data.length; ++Index) {\n\t\tValue = Data[Index];\n\t\tValue ^= XorArray[XorArrayIndex];\n\t\tValue = ((Value>>5) | (Value<<3)) & 0xFF;\n\t\tO[Index] = Value;\n\t\t++XorArrayIndex;\n\t}\n\treturn [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function(password/*:string*/) {\n\tvar XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);\n\treturn function(Data) {\n\t\tvar O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n\t\tXorArrayIndex = O[1];\n\t\treturn O[0];\n\t};\n};\n\n/* 2.5.343 */\nfunction parse_XORObfuscation(blob, length, opts, out) {\n\tvar o = ({ key: parseuint16(blob), verificationBytes: parseuint16(blob) }/*:any*/);\n\tif(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n\tout.valid = o.verificationBytes === o.verifier;\n\tif(out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n\treturn o;\n}\n\n/* 2.4.117 */\nfunction parse_FilePassHeader(blob, length/*:number*/, oo) {\n\tvar o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;\n\tif(o.Info === 1) o.Data = parse_RC4Header(blob, length);\n\telse o.Data = parse_RC4CryptoHeader(blob, length);\n\treturn o;\n}\nfunction parse_FilePass(blob, length/*:number*/, opts) {\n\tvar o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }/*:any*/); /* wEncryptionType */\n\tif(o.Type) parse_FilePassHeader(blob, length-2, o);\n\telse parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n\treturn o;\n}\n\n\nfunction rtf_to_sheet(d, opts) {\n switch (opts.type) {\n case \"base64\":\n return rtf_to_sheet_str(Base64_decode(d), opts);\n case \"binary\":\n return rtf_to_sheet_str(d, opts);\n case \"buffer\":\n return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString(\"binary\") : a2s(d), opts);\n case \"array\":\n return rtf_to_sheet_str(cc2str(d), opts);\n }\n throw new Error(\"Unrecognized type \" + opts.type);\n}\nfunction rtf_to_sheet_str(str, opts) {\n var o = opts || {};\n var ws = {};\n var dense = o.dense;\n if (dense)\n ws[\"!data\"] = [];\n var rows = str.match(/\\\\trowd[\\s\\S]*?\\\\row\\b/g);\n if (!rows)\n throw new Error(\"RTF missing table\");\n var range = { s: { c: 0, r: 0 }, e: { c: 0, r: rows.length - 1 } };\n var row = [];\n rows.forEach(function(rowtf, R) {\n if (dense)\n row = ws[\"!data\"][R] = [];\n var rtfre = /\\\\[\\w\\-]+\\b/g;\n var last_index = 0;\n var res;\n var C = -1;\n var payload = [];\n while ((res = rtfre.exec(rowtf)) != null) {\n var data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);\n if (data.charCodeAt(0) == 32)\n data = data.slice(1);\n if (data.length)\n payload.push(data);\n switch (res[0]) {\n case \"\\\\cell\":\n ++C;\n if (payload.length) {\n var cell = { v: payload.join(\"\"), t: \"s\" };\n if (cell.v == \"TRUE\" || cell.v == \"FALSE\") {\n cell.v = cell.v == \"TRUE\";\n cell.t = \"b\";\n } else if (!isNaN(fuzzynum(cell.v))) {\n cell.t = \"n\";\n if (o.cellText !== false)\n cell.w = cell.v;\n cell.v = fuzzynum(cell.v);\n }\n if (dense)\n row[C] = cell;\n else\n ws[encode_cell({ r: R, c: C })] = cell;\n }\n payload = [];\n break;\n case \"\\\\par\":\n payload.push(\"\\n\");\n break;\n }\n last_index = rtfre.lastIndex;\n }\n if (C > range.e.c)\n range.e.c = C;\n });\n ws[\"!ref\"] = encode_range(range);\n return ws;\n}\nfunction rtf_to_workbook(d, opts) {\n var wb = sheet_to_workbook(rtf_to_sheet(d, opts), opts);\n wb.bookType = \"rtf\";\n return wb;\n}\nfunction sheet_to_rtf(ws, opts) {\n var o = [\"{\\\\rtf1\\\\ansi\"];\n if (!ws[\"!ref\"])\n return o[0] + \"}\";\n var r = safe_decode_range(ws[\"!ref\"]), cell;\n var dense = ws[\"!data\"] != null, row = [];\n for (var R = r.s.r; R <= r.e.r; ++R) {\n o.push(\"\\\\trowd\\\\trautofit1\");\n for (var C = r.s.c; C <= r.e.c; ++C)\n o.push(\"\\\\cellx\" + (C + 1));\n o.push(\"\\\\pard\\\\intbl\");\n if (dense)\n row = ws[\"!data\"][R] || [];\n for (C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({ r: R, c: C });\n cell = dense ? row[C] : ws[coord];\n if (!cell || cell.v == null && (!cell.f || cell.F)) {\n o.push(\" \\\\cell\");\n continue;\n }\n o.push(\" \" + (cell.w || (format_cell(cell), cell.w) || \"\").replace(/[\\r\\n]/g, \"\\\\par \"));\n o.push(\"\\\\cell\");\n }\n o.push(\"\\\\pard\\\\intbl\\\\row\");\n }\n return o.join(\"\") + \"}\";\n}\nfunction hex2RGB(h) {\n\tvar o = h.slice(h[0]===\"#\"?1:0).slice(0,6);\n\treturn [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)];\n}\nfunction rgb2Hex(rgb) {\n\tfor(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);\n\treturn o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n\tvar R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;\n\tvar M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;\n\tif(C === 0) return [0, 0, R];\n\n\tvar H6 = 0, S = 0, L2 = (M + m);\n\tS = C / (L2 > 1 ? 2 - L2 : L2);\n\tswitch(M){\n\t\tcase R: H6 = ((G - B) / C + 6)%6; break;\n\t\tcase G: H6 = ((B - R) / C + 2); break;\n\t\tcase B: H6 = ((R - G) / C + 4); break;\n\t}\n\treturn [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl){\n\tvar H = hsl[0], S = hsl[1], L = hsl[2];\n\tvar C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;\n\tvar rgb = [m,m,m], h6 = 6*H;\n\n\tvar X;\n\tif(S !== 0) switch(h6|0) {\n\t\tcase 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;\n\t\tcase 1: X = C * (2 - h6); rgb[0] += X; rgb[1] += C; break;\n\t\tcase 2: X = C * (h6 - 2); rgb[1] += C; rgb[2] += X; break;\n\t\tcase 3: X = C * (4 - h6); rgb[1] += X; rgb[2] += C; break;\n\t\tcase 4: X = C * (h6 - 4); rgb[2] += C; rgb[0] += X; break;\n\t\tcase 5: X = C * (6 - h6); rgb[2] += X; rgb[0] += C; break;\n\t}\n\tfor(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);\n\treturn rgb;\n}\n\n/* 18.8.3 bgColor tint algorithm */\nfunction rgb_tint(hex, tint) {\n\tif(tint === 0) return hex;\n\tvar hsl = rgb2HSL(hex2RGB(hex));\n\tif (tint < 0) hsl[2] = hsl[2] * (1 + tint);\n\telse hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n\treturn rgb2Hex(hsl2RGB(hsl));\n}\n\n/* 18.3.1.13 width calculations */\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\nvar DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;\nfunction width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); }\nfunction px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }\nfunction char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; }\n//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\nfunction cycle_width(collw) { return char2width(px2char(width2px(collw))); }\n/* XLSX/XLSB/XLS specify width in units of MDW */\nfunction find_mdw_colw(collw) {\n\tvar delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;\n\tif(delta > 0.005) for(MDW=MIN_MDW; MDW 0.5) guess--;\n\t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n\t}\n\tMDW = _MDW;\n}*/\n\nfunction process_col(coll/*:ColInfo*/) {\n\tif(coll.width) {\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.MDW = MDW;\n\t} else if(coll.wpx) {\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.MDW = MDW;\n\t} else if(typeof coll.wch == 'number') {\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.MDW = MDW;\n\t}\n\tif(coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96, PPI = DEF_PPI;\nfunction px2pt(px) { return px * 96 / PPI; }\nfunction pt2px(pt) { return pt * PPI / 96; }\n\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\nvar XLMLPatternTypeMap = {\n\t\"None\": \"none\",\n\t\"Solid\": \"solid\",\n\t\"Gray50\": \"mediumGray\",\n\t\"Gray75\": \"darkGray\",\n\t\"Gray25\": \"lightGray\",\n\t\"HorzStripe\": \"darkHorizontal\",\n\t\"VertStripe\": \"darkVertical\",\n\t\"ReverseDiagStripe\": \"darkDown\",\n\t\"DiagStripe\": \"darkUp\",\n\t\"DiagCross\": \"darkGrid\",\n\t\"ThickDiagCross\": \"darkTrellis\",\n\t\"ThinHorzStripe\": \"lightHorizontal\",\n\t\"ThinVertStripe\": \"lightVertical\",\n\t\"ThinReverseDiagStripe\": \"lightDown\",\n\t\"ThinHorzCross\": \"lightGrid\"\n};\n\n/* 18.8.5 borders CT_Borders */\nfunction parse_borders(t, styles, themes, opts) {\n\tstyles.Borders = [];\n\tvar border = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.4 border CT_Border */\n\t\t\tcase '': case '':\n\t\t\t\tborder = /*::(*/{}/*:: :any)*/;\n\t\t\t\tif(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n\t\t\t\tif(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n\t\t\t\tstyles.Borders.push(border);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.43 top CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.6 bottom CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.13 diagonal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.25 horizontal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.44 vertical CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.37 start CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.16 end CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '':\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.21 fills CT_Fills */\nfunction parse_fills(t, styles, themes, opts) {\n\tstyles.Fills = [];\n\tvar fill = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.20 fill CT_Fill */\n\t\t\tcase '': case '':\n\t\t\t\tfill = {}; styles.Fills.push(fill); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.24 gradientFill CT_GradientFill */\n\t\t\tcase '': break;\n\t\t\tcase '': styles.Fills.push(fill); fill = {}; break;\n\n\t\t\t/* 18.8.32 patternFill CT_PatternFill */\n\t\t\tcase '':\n\t\t\t\tif(y.patternType) fill.patternType = y.patternType;\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.3 bgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.19 fgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.38 stop CT_GradientStop */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.23 fonts CT_Fonts */\nfunction parse_fonts(t, styles, themes, opts) {\n\tstyles.Fonts = [];\n\tvar font = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.22 font CT_Font */\n\t\t\tcase '': break;\n\t\t\tcase '': case '':\n\t\t\t\tstyles.Fonts.push(font);\n\t\t\t\tfont = {};\n\t\t\t\tbreak;\n\n\t\t\t/* 18.8.29 name CT_FontName */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.2 b CT_BooleanProperty */\n\t\t\tcase '': font.bold = 1; break;\n\n\t\t\t/* 18.8.26 i CT_BooleanProperty */\n\t\t\tcase '': font.italic = 1; break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '': font.underline = 1; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '': font.strike = 1; break;\n\n\t\t\t/* 18.4.2 outline CT_BooleanProperty */\n\t\t\tcase '': font.outline = 1; break;\n\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\tcase '': font.shadow = 1; break;\n\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\tcase '': font.condense = 1; break;\n\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\tcase '': font.extend = 1; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.18 family CT_FontFamily */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.31 numFmts CT_NumFmts */\nfunction parse_numFmts(t, styles, opts) {\n\tstyles.NumberFmt = [];\n\tvar k/*Array*/ = (keys(table_fmt)/*:any*/);\n\tfor(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = table_fmt[k[i]];\n\tvar m = t[0].match(tagregex);\n\tif(!m) return;\n\tfor(i=0; i < m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\t\t\tcase '0) {\n\t\t\t\t\tif(j > 0x188) {\n\t\t\t\t\t\tfor(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;\n\t\t\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\t\t}\n\t\t\t\t\tSSF__load(f,j);\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase '': break;\n\t\t\tdefault: if(opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n\t\t}\n\t}\n}\n\nfunction write_numFmts(NF/*:{[n:number|string]:string}*//*::, opts*/) {\n\tvar o = [\"\"];\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));\n\t});\n\tif(o.length === 1) return \"\";\n\to[o.length] = (\"\");\n\to[0] = writextag('numFmts', null, { count:o.length-2 }).replace(\"/>\", \">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8.10 cellXfs CT_CellXfs */\nvar cellXF_uint = [ \"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\" ];\nvar cellXF_bool = [ \"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\" ];\nfunction parse_cellXfs(t, styles, opts) {\n\tstyles.CellXf = [];\n\tvar xf;\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x), i = 0;\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.45 xf CT_Xf */\n\t\t\tcase '':\n\t\t\t\txf = y;\n\t\t\t\tdelete xf[0];\n\t\t\t\tfor(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]])\n\t\t\t\t\txf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n\t\t\t\tfor(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])\n\t\t\t\t\txf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n\t\t\t\tif(styles.NumberFmt && xf.numFmtId > 0x188) {\n\t\t\t\t\tfor(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }\n\t\t\t\t}\n\t\t\t\tstyles.CellXf.push(xf); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.1 alignment CT_CellAlignment */\n\t\t\tcase '':\n\t\t\t\tvar alignment = {};\n\t\t\t\tif(y.vertical) alignment.vertical = y.vertical;\n\t\t\t\tif(y.horizontal) alignment.horizontal = y.horizontal;\n\t\t\t\tif(y.textRotation != null) alignment.textRotation = y.textRotation;\n\t\t\t\tif(y.indent) alignment.indent = y.indent;\n\t\t\t\tif(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n\t\t\t\txf.alignment = alignment;\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.33 protection CT_CellProtection */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction write_cellXfs(cellXfs)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\to[o.length] = (writextag('cellXfs',null));\n\tcellXfs.forEach(function(c) {\n\t\to[o.length] = (writextag('xf', null, c));\n\t});\n\to[o.length] = (\"\");\n\tif(o.length === 2) return \"\";\n\to[0] = writextag('cellXfs',null, {count:o.length-2}).replace(\"/>\",\">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8 Styles CT_Stylesheet*/\nvar parse_sty_xml= /*#__PURE__*/(function make_pstyx() {\nvar numFmtRegex = /<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/;\nvar cellXfRegex = /<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/;\nvar fillsRegex = /<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/;\nvar fontsRegex = /<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/;\nvar bordersRegex = /<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/;\n\nreturn function parse_sty_xml(data, themes, opts) {\n\tvar styles = {};\n\tif(!data) return styles;\n\tdata = data.replace(//mg,\"\").replace(//gm,\"\");\n\t/* 18.8.39 styleSheet CT_Stylesheet */\n\tvar t;\n\n\t/* 18.8.31 numFmts CT_NumFmts ? */\n\tif((t=data.match(numFmtRegex))) parse_numFmts(t, styles, opts);\n\n\t/* 18.8.23 fonts CT_Fonts ? */\n\tif((t=data.match(fontsRegex))) parse_fonts(t, styles, themes, opts);\n\n\t/* 18.8.21 fills CT_Fills ? */\n\tif((t=data.match(fillsRegex))) parse_fills(t, styles, themes, opts);\n\n\t/* 18.8.5 borders CT_Borders ? */\n\tif((t=data.match(bordersRegex))) parse_borders(t, styles, themes, opts);\n\n\t/* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */\n\t/* 18.8.8 cellStyles CT_CellStyles ? */\n\n\t/* 18.8.10 cellXfs CT_CellXfs ? */\n\tif((t=data.match(cellXfRegex))) parse_cellXfs(t, styles, opts);\n\n\t/* 18.8.15 dxfs CT_Dxfs ? */\n\t/* 18.8.42 tableStyles CT_TableStyles ? */\n\t/* 18.8.11 colors CT_Colors ? */\n\t/* 18.2.10 extLst CT_ExtensionList ? */\n\n\treturn styles;\n};\n})();\n\nfunction write_sty_xml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('styleSheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:vt': XMLNS.vt\n\t})], w;\n\tif(wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\tif((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\nfunction parse_BrtFmt(data, length/*:number*/) {\n\tvar numFmtId = data.read_shift(2);\n\tvar stFmtCode = parse_XLWideString(data,length-2);\n\treturn [numFmtId, stFmtCode];\n}\nfunction write_BrtFmt(i/*:number*/, f/*:string*/, o) {\n\tif(!o) o = new_buf(6 + 4 * f.length);\n\to.write_shift(2, i);\n\twrite_XLWideString(f, o);\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(o.l == null) o.l = o.length;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\nfunction parse_BrtFont(data, length/*:number*/, opts) {\n\tvar out = ({}/*:any*/);\n\n\tout.sz = data.read_shift(2) / 20;\n\n\tvar grbit = parse_FontFlags(data, 2, opts);\n\tif(grbit.fItalic) out.italic = 1;\n\tif(grbit.fCondense) out.condense = 1;\n\tif(grbit.fExtend) out.extend = 1;\n\tif(grbit.fShadow) out.shadow = 1;\n\tif(grbit.fOutline) out.outline = 1;\n\tif(grbit.fStrikeout) out.strike = 1;\n\n\tvar bls = data.read_shift(2);\n\tif(bls === 0x02BC) out.bold = 1;\n\n\tswitch(data.read_shift(2)) {\n\t\t/* case 0: out.vertAlign = \"baseline\"; break; */\n\t\tcase 1: out.vertAlign = \"superscript\"; break;\n\t\tcase 2: out.vertAlign = \"subscript\"; break;\n\t}\n\n\tvar underline = data.read_shift(1);\n\tif(underline != 0) out.underline = underline;\n\n\tvar family = data.read_shift(1);\n\tif(family > 0) out.family = family;\n\n\tvar bCharSet = data.read_shift(1);\n\tif(bCharSet > 0) out.charset = bCharSet;\n\n\tdata.l++;\n\tout.color = parse_BrtColor(data, 8);\n\n\tswitch(data.read_shift(1)) {\n\t\t/* case 0: out.scheme = \"none\": break; */\n\t\tcase 1: out.scheme = \"major\"; break;\n\t\tcase 2: out.scheme = \"minor\"; break;\n\t}\n\n\tout.name = parse_XLWideString(data, length - 21);\n\n\treturn out;\n}\nfunction write_BrtFont(font/*:any*/, o) {\n\tif(!o) o = new_buf(25+4*32);\n\to.write_shift(2, font.sz * 20);\n\twrite_FontFlags(font, o);\n\to.write_shift(2, font.bold ? 0x02BC : 0x0190);\n\tvar sss = 0;\n\tif(font.vertAlign == \"superscript\") sss = 1;\n\telse if(font.vertAlign == \"subscript\") sss = 2;\n\to.write_shift(2, sss);\n\to.write_shift(1, font.underline || 0);\n\to.write_shift(1, font.family || 0);\n\to.write_shift(1, font.charset || 0);\n\to.write_shift(1, 0);\n\twrite_BrtColor(font.color, o);\n\tvar scheme = 0;\n\tif(font.scheme == \"major\") scheme = 1;\n\tif(font.scheme == \"minor\") scheme = 2;\n\to.write_shift(1, scheme);\n\twrite_XLWideString(font.name, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.650 BrtFill */\nvar XLSBFillPTNames = [\n\t\"none\",\n\t\"solid\",\n\t\"mediumGray\",\n\t\"darkGray\",\n\t\"lightGray\",\n\t\"darkHorizontal\",\n\t\"darkVertical\",\n\t\"darkDown\",\n\t\"darkUp\",\n\t\"darkGrid\",\n\t\"darkTrellis\",\n\t\"lightHorizontal\",\n\t\"lightVertical\",\n\t\"lightDown\",\n\t\"lightUp\",\n\t\"lightGrid\",\n\t\"lightTrellis\",\n\t\"gray125\",\n\t\"gray0625\"\n];\nvar rev_XLSBFillPTNames/*:EvertNumType*/;\n/* TODO: gradient fill representation */\nvar parse_BrtFill = parsenoop;\nfunction write_BrtFill(fill, o) {\n\tif(!o) o = new_buf(4*3 + 8*7 + 16*1);\n\tif(!rev_XLSBFillPTNames) rev_XLSBFillPTNames = (evert(XLSBFillPTNames)/*:any*/);\n\tvar fls/*:number*/ = rev_XLSBFillPTNames[fill.patternType];\n\tif(fls == null) fls = 0x28;\n\to.write_shift(4, fls);\n\tvar j = 0;\n\tif(fls != 0x28) {\n\t\t/* TODO: custom FG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\t\t/* TODO: custom BG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0);\n\t} else {\n\t\tfor(; j < 4; ++j) o.write_shift(4, 0);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0); /* TODO */\n\t\t/* iGradientType */\n\t\t/* xnumDegree */\n\t\t/* xnumFillToLeft */\n\t\t/* xnumFillToRight */\n\t\t/* xnumFillToTop */\n\t\t/* xnumFillToBottom */\n\t\t/* cNumStop */\n\t\t/* xfillGradientStop */\n\t}\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.824 BrtXF */\nfunction parse_BrtXF(data, length/*:number*/) {\n\tvar tgt = data.l + length;\n\tvar ixfeParent = data.read_shift(2);\n\tvar ifmt = data.read_shift(2);\n\tdata.l = tgt;\n\treturn {ixfe:ixfeParent, numFmtId:ifmt };\n}\nfunction write_BrtXF(data, ixfeP, o) {\n\tif(!o) o = new_buf(16);\n\to.write_shift(2, ixfeP||0);\n\to.write_shift(2, data.numFmtId||0);\n\to.write_shift(2, 0); /* iFont */\n\to.write_shift(2, 0); /* iFill */\n\to.write_shift(2, 0); /* ixBorder */\n\to.write_shift(1, 0); /* trot */\n\to.write_shift(1, 0); /* indent */\n\tvar flow = 0;\n\to.write_shift(1, flow); /* flags */\n\to.write_shift(1, 0); /* flags */\n\to.write_shift(1, 0); /* xfGrbitAtr */\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.4 Blxf TODO */\nfunction write_Blxf(data, o) {\n\tif(!o) o = new_buf(10);\n\to.write_shift(1, 0); /* dg */\n\to.write_shift(1, 0);\n\to.write_shift(4, 0); /* color */\n\to.write_shift(4, 0); /* color */\n\treturn o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\nvar parse_BrtBorder = parsenoop;\nfunction write_BrtBorder(border, o) {\n\tif(!o) o = new_buf(51);\n\to.write_shift(1, 0); /* diagonal */\n\twrite_Blxf(null, o); /* top */\n\twrite_Blxf(null, o); /* bottom */\n\twrite_Blxf(null, o); /* left */\n\twrite_Blxf(null, o); /* right */\n\twrite_Blxf(null, o); /* diag */\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\nfunction write_BrtStyle(style, o) {\n\tif(!o) o = new_buf(12+4*10);\n\to.write_shift(4, style.xfId);\n\to.write_shift(2, 1);\n\to.write_shift(1, +style.builtinId);\n\to.write_shift(1, 0); /* iLevel */\n\twrite_XLNullableWideString(style.name || \"\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n\tvar o = new_buf(4+256*2*4);\n\to.write_shift(4, cnt);\n\twrite_XLNullableWideString(defTableStyle, o);\n\twrite_XLNullableWideString(defPivotStyle, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction parse_sty_bin(data, themes, opts) {\n\tvar styles = {};\n\tstyles.NumberFmt = ([]/*:any*/);\n\tfor(var y in table_fmt) styles.NumberFmt[y] = table_fmt[y];\n\n\tstyles.CellXf = [];\n\tstyles.Fonts = [];\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_sty(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x002C: /* BrtFmt */\n\t\t\t\tstyles.NumberFmt[val[0]] = val[1]; SSF__load(val[1], val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x002B: /* BrtFont */\n\t\t\t\tstyles.Fonts.push(val);\n\t\t\t\tif(val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\tval.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0401: /* BrtKnownFonts */ break;\n\t\t\tcase 0x002D: /* BrtFill */\n\t\t\t\tbreak;\n\t\t\tcase 0x002E: /* BrtBorder */\n\t\t\t\tbreak;\n\t\t\tcase 0x002F: /* BrtXF */\n\t\t\t\tif(state[state.length - 1] == 0x0269 /* BrtBeginCellXFs */) {\n\t\t\t\t\tstyles.CellXf.push(val);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0030: /* BrtStyle */\n\t\t\tcase 0x01FB: /* BrtDXF */\n\t\t\tcase 0x023C: /* BrtMRUColor */\n\t\t\tcase 0x01DB: /* BrtIndexedColor */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0493: /* BrtDXF14 */\n\t\t\tcase 0x0836: /* BrtDXF15 */\n\t\t\tcase 0x046A: /* BrtSlicerStyleElement */\n\t\t\tcase 0x0200: /* BrtTableStyleElement */\n\t\t\tcase 0x082F: /* BrtTimelineStyleElement */\n\t\t\tcase 0x0C00: /* BrtUid */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* BrtACBegin */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* BrtACEnd */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn styles;\n}\n\nfunction write_FMTS_bin(ba, NF/*:?SSFTable*/) {\n\tif(!NF) return;\n\tvar cnt = 0;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) ++cnt;\n\t});\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0267 /* BrtBeginFmts */, write_UInt32LE(cnt));\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, 0x002C /* BrtFmt */, write_BrtFmt(i, NF[i]));\n\t});\n\twrite_record(ba, 0x0268 /* BrtEndFmts */);\n}\n\nfunction write_FONTS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0263 /* BrtBeginFonts */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002B /* BrtFont */, write_BrtFont({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Calibri\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}));\n\t/* 1*65491BrtFont [ACFONTS] */\n\twrite_record(ba, 0x0264 /* BrtEndFonts */);\n}\n\nfunction write_FILLS_bin(ba/*::, data*/) {\n\tvar cnt = 2;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x025B /* BrtBeginFills */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"none\"}));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"gray125\"}));\n\t/* 1*65431BrtFill */\n\twrite_record(ba, 0x025C /* BrtEndFills */);\n}\n\nfunction write_BORDERS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0265 /* BrtBeginBorders */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002E /* BrtBorder */, write_BrtBorder({}));\n\t/* 1*65430BrtBorder */\n\twrite_record(ba, 0x0266 /* BrtEndBorders */);\n}\n\nfunction write_CELLSTYLEXFS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\twrite_record(ba, 0x0272 /* BrtBeginCellStyleXFs */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002F /* BrtXF */, write_BrtXF({\n\t\tnumFmtId: 0,\n\t\tfontId: 0,\n\t\tfillId: 0,\n\t\tborderId: 0\n\t}, 0xFFFF));\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x0273 /* BrtEndCellStyleXFs */);\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n\twrite_record(ba, 0x0269 /* BrtBeginCellXFs */, write_UInt32LE(data.length));\n\tdata.forEach(function(c) { write_record(ba, 0x002F /* BrtXF */, write_BrtXF(c,0)); });\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x026A /* BrtEndCellXFs */);\n}\n\nfunction write_STYLES_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\twrite_record(ba, 0x026B /* BrtBeginStyles */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x0030 /* BrtStyle */, write_BrtStyle({\n\t\txfId:0,\n\t\tbuiltinId:0,\n\t\tname:\"Normal\"\n\t}));\n\t/* 1*65430(BrtStyle *FRT) */\n\twrite_record(ba, 0x026C /* BrtEndStyles */);\n}\n\nfunction write_DXFS_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01F9 /* BrtBeginDXFs */, write_UInt32LE(cnt));\n\t/* *2147483647(BrtDXF *FRT) */\n\twrite_record(ba, 0x01FA /* BrtEndDXFs */);\n}\n\nfunction write_TABLESTYLES_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01FC /* BrtBeginTableStyles */, write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n\t/* *TABLESTYLE */\n\twrite_record(ba, 0x01FD /* BrtEndTableStyles */);\n}\n\nfunction write_COLORPALETTE_bin(/*::ba, data*/) {\n\treturn;\n\t/* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction write_sty_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0116 /* BrtBeginStyleSheet */);\n\twrite_FMTS_bin(ba, wb.SSF);\n\twrite_FONTS_bin(ba, wb);\n\twrite_FILLS_bin(ba, wb);\n\twrite_BORDERS_bin(ba, wb);\n\twrite_CELLSTYLEXFS_bin(ba, wb);\n\twrite_CELLXFS_bin(ba, opts.cellXfs);\n\twrite_STYLES_bin(ba, wb);\n\twrite_DXFS_bin(ba, wb);\n\twrite_TABLESTYLES_bin(ba, wb);\n\twrite_COLORPALETTE_bin(ba, wb);\n\t/* FRTSTYLESHEET*/\n\twrite_record(ba, 0x0117 /* BrtEndStyleSheet */);\n\treturn ba.end();\n}\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\nvar XLSXThemeClrScheme = [\n\t'', '', '', '',\n\t'', '', '',\n\t'', '', '',\n\t'', ''\n];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\nfunction parse_clrScheme(t, themes, opts) {\n\tthemes.themeElements.clrScheme = [];\n\tvar color = {};\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\t/* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\t\tif (y[0].charAt(1) === '/') {\n\t\t\t\t\tthemes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n\t\t\t\t\tcolor = {};\n\t\t\t\t} else {\n\t\t\t\t\tcolor.name = y[0].slice(3, y[0].length - 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: if(opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n\t\t}\n\t});\n}\n\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\nfunction parse_fontScheme(/*::t, themes, opts*/) { }\n\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\nfunction parse_fmtScheme(/*::t, themes, opts*/) { }\n\nvar clrsregex = /]*)>[\\s\\S]*<\\/a:clrScheme>/;\nvar fntsregex = /]*)>[\\s\\S]*<\\/a:fontScheme>/;\nvar fmtsregex = /]*)>[\\s\\S]*<\\/a:fmtScheme>/;\n\n/* 20.1.6.10 themeElements CT_BaseStyles */\nfunction parse_themeElements(data, themes, opts) {\n\tthemes.themeElements = {};\n\n\tvar t;\n\n\t[\n\t\t/* clrScheme CT_ColorScheme */\n\t\t['clrScheme', clrsregex, parse_clrScheme],\n\t\t/* fontScheme CT_FontScheme */\n\t\t['fontScheme', fntsregex, parse_fontScheme],\n\t\t/* fmtScheme CT_StyleMatrix */\n\t\t['fmtScheme', fmtsregex, parse_fmtScheme]\n\t].forEach(function(m) {\n\t\tif(!(t=data.match(m[1]))) throw new Error(m[0] + ' not found in themeElements');\n\t\tm[2](t, themes, opts);\n\t});\n}\n\nvar themeltregex = /]*)>[\\s\\S]*<\\/a:themeElements>/;\n\n/* 14.2.7 Theme Part */\nfunction parse_theme_xml(data/*:string*/, opts) {\n\t/* 20.1.6.9 theme CT_OfficeStyleSheet */\n\tif(!data || data.length === 0) data = write_theme();\n\n\tvar t;\n\tvar themes = {};\n\n\t/* themeElements CT_BaseStyles */\n\tif(!(t=data.match(themeltregex))) throw new Error('themeElements not found in theme');\n\tparse_themeElements(t[0], themes, opts);\n\tthemes.raw = data;\n\treturn themes;\n}\n\nfunction write_theme(Themes, opts)/*:string*/ {\n\tif(opts && opts.themeXLSX) return opts.themeXLSX;\n\tif(Themes && typeof Themes.raw == \"string\") return Themes.raw;\n\tvar o = [XML_HEADER];\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\treturn o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\nfunction parse_Theme(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar dwThemeVersion = blob.read_shift(4);\n\tif(dwThemeVersion === 124226) return;\n\tif(!opts.cellStyles) { blob.l = end; return; }\n\tvar data = blob.slice(blob.l);\n\tblob.l = end;\n\tvar zip; try { zip = zip_read(data, {type: \"array\"}); } catch(e) { return; }\n\tvar themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n\tif(!themeXML) return;\n\treturn parse_theme_xml(themeXML, opts);\n}\n\n/* 2.5.49 */\nfunction parse_ColorTheme(blob/*::, length*/) { return blob.read_shift(4); }\n\n/* 2.5.155 */\nfunction parse_FullColorExt(blob/*::, length*/) {\n\tvar o = {};\n\to.xclrType = blob.read_shift(2);\n\to.nTintShade = blob.read_shift(2);\n\tswitch(o.xclrType) {\n\t\tcase 0: blob.l += 4; break;\n\t\tcase 1: o.xclrValue = parse_IcvXF(blob, 4); break;\n\t\tcase 2: o.xclrValue = parse_LongRGBA(blob, 4); break;\n\t\tcase 3: o.xclrValue = parse_ColorTheme(blob, 4); break;\n\t\tcase 4: blob.l += 4; break;\n\t}\n\tblob.l += 8;\n\treturn o;\n}\n\n/* 2.5.164 TODO: read 7 bits*/\nfunction parse_IcvXF(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* 2.5.280 */\nfunction parse_XFExtGradient(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* [MS-XLS] 2.5.108 */\nfunction parse_ExtProp(blob/*::, length*/)/*:Array*/ {\n\tvar extType = blob.read_shift(2);\n\tvar cb = blob.read_shift(2) - 4;\n\tvar o = [extType];\n\tswitch(extType) {\n\t\tcase 0x04: case 0x05: case 0x07: case 0x08:\n\t\tcase 0x09: case 0x0A: case 0x0B: case 0x0D:\n\t\t\to[1] = parse_FullColorExt(blob, cb); break;\n\t\tcase 0x06: o[1] = parse_XFExtGradient(blob, cb); break;\n\t\tcase 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break;\n\t\tdefault: throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n\t}\n\treturn o;\n}\n\n/* 2.4.355 */\nfunction parse_XFExt(blob, length) {\n\tvar end = blob.l + length;\n\tblob.l += 2;\n\tvar ixfe = blob.read_shift(2);\n\tblob.l += 2;\n\tvar cexts = blob.read_shift(2);\n\tvar ext/*:AOA*/ = [];\n\twhile(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));\n\treturn {ixfe:ixfe, ext:ext};\n}\n\n/* xf is an XF, see parse_XFExt for xfext */\nfunction update_xfext(xf, xfext) {\n\txfext.forEach(function(xfe) {\n\t\tswitch(xfe[0]) { /* 2.5.108 extPropData */\n\t\t\tcase 0x04: break; /* foreground color */\n\t\t\tcase 0x05: break; /* background color */\n\t\t\tcase 0x06: break; /* gradient fill */\n\t\t\tcase 0x07: break; /* top cell border color */\n\t\t\tcase 0x08: break; /* bottom cell border color */\n\t\t\tcase 0x09: break; /* left cell border color */\n\t\t\tcase 0x0a: break; /* right cell border color */\n\t\t\tcase 0x0b: break; /* diagonal cell border color */\n\t\t\tcase 0x0d: /* text color */\n\t\t\t\tbreak;\n\t\t\tcase 0x0e: break; /* font scheme */\n\t\t\tcase 0x0f: break; /* indentation level */\n\t\t}\n\t});\n}\n\nfunction parse_BrtMdtinfo(data, length) {\n return {\n flags: data.read_shift(4),\n version: data.read_shift(4),\n name: parse_XLWideString(data, length - 8)\n };\n}\nfunction write_BrtMdtinfo(data) {\n var o = new_buf(12 + 2 * data.name.length);\n o.write_shift(4, data.flags);\n o.write_shift(4, data.version);\n write_XLWideString(data.name, o);\n return o.slice(0, o.l);\n}\nfunction parse_BrtMdb(data) {\n var out = [];\n var cnt = data.read_shift(4);\n while (cnt-- > 0)\n out.push([data.read_shift(4), data.read_shift(4)]);\n return out;\n}\nfunction write_BrtMdb(mdb) {\n var o = new_buf(4 + 8 * mdb.length);\n o.write_shift(4, mdb.length);\n for (var i = 0; i < mdb.length; ++i) {\n o.write_shift(4, mdb[i][0]);\n o.write_shift(4, mdb[i][1]);\n }\n return o;\n}\nfunction write_BrtBeginEsfmd(cnt, name) {\n var o = new_buf(8 + 2 * name.length);\n o.write_shift(4, cnt);\n write_XLWideString(name, o);\n return o.slice(0, o.l);\n}\nfunction parse_BrtBeginEsmdb(data) {\n data.l += 4;\n return data.read_shift(4) != 0;\n}\nfunction write_BrtBeginEsmdb(cnt, cm) {\n var o = new_buf(8);\n o.write_shift(4, cnt);\n o.write_shift(4, cm ? 1 : 0);\n return o;\n}\nfunction parse_xlmeta_bin(data, name, _opts) {\n var out = { Types: [], Cell: [], Value: [] };\n var opts = _opts || {};\n var state = [];\n var pass = false;\n var metatype = 2;\n recordhopper(data, function(val, R, RT) {\n switch (RT) {\n case 335:\n out.Types.push({ name: val.name });\n break;\n case 51:\n val.forEach(function(r) {\n if (metatype == 1)\n out.Cell.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n else if (metatype == 0)\n out.Value.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n });\n break;\n case 337:\n metatype = val ? 1 : 0;\n break;\n case 338:\n metatype = 2;\n break;\n case 35:\n state.push(RT);\n pass = true;\n break;\n case 36:\n state.pop();\n pass = false;\n break;\n default:\n if (R.T) {\n } else if (!pass || opts.WTF && state[state.length - 1] != 35)\n throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n }\n });\n return out;\n}\nfunction write_xlmeta_bin() {\n var ba = buf_array();\n write_record(ba, 332);\n write_record(ba, 334, write_UInt32LE(1));\n write_record(ba, 335, write_BrtMdtinfo({\n name: \"XLDAPR\",\n version: 12e4,\n flags: 3496657072\n }));\n write_record(ba, 336);\n write_record(ba, 339, write_BrtBeginEsfmd(1, \"XLDAPR\"));\n write_record(ba, 52);\n write_record(ba, 35, write_UInt32LE(514));\n write_record(ba, 4096, write_UInt32LE(0));\n write_record(ba, 4097, writeuint16(1));\n write_record(ba, 36);\n write_record(ba, 53);\n write_record(ba, 340);\n write_record(ba, 337, write_BrtBeginEsmdb(1, true));\n write_record(ba, 51, write_BrtMdb([[1, 0]]));\n write_record(ba, 338);\n write_record(ba, 333);\n return ba.end();\n}\nfunction parse_xlmeta_xml(data, name, opts) {\n var out = { Types: [], Cell: [], Value: [] };\n if (!data)\n return out;\n var pass = false;\n var metatype = 2;\n var lastmeta;\n data.replace(tagregex, function(x) {\n var y = parsexmltag(x);\n switch (strip_ns(y[0])) {\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n metatype = 2;\n break;\n case \"\":\n metatype = 2;\n break;\n case \"\":\n case \"\":\n case \"\":\n break;\n case \"\":\n pass = false;\n break;\n case \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n');\n return o.join(\"\");\n}\n/* 18.6 Calculation Chain */\nfunction parse_cc_xml(data/*::, name, opts*/)/*:Array*/ {\n\tvar d = [];\n\tif(!data) return d;\n\tvar i = 1;\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.6.1 c CT_CalcCell 1 */\n\t\t\tcase ']*r:id=\"([^\"]*)\"/)||[\"\",\"\"])[1];\n\n\treturn rels['!id'][id].Target;\n}\n\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\nfunction write_vml(rId/*:number*/, comments) {\n\tvar csize = [21600, 21600];\n\t/* L.5.2.1.2 Path Attribute */\n\tvar bbox = [\"m0,0l0\",csize[1],csize[0],csize[1],csize[0],\"0xe\"].join(\",\");\n\tvar o = [\n\t\twritextag(\"xml\", null, { 'xmlns:v': XLMLNS.v, 'xmlns:o': XLMLNS.o, 'xmlns:x': XLMLNS.x, 'xmlns:mv': XLMLNS.mv }).replace(/\\/>/,\">\"),\n\t\twritextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {'v:ext':\"edit\", 'data':rId}), {'v:ext':\"edit\"})\n\t];\n\n\tvar _shapeid = 65536 * rId;\n\n\tvar _comments = comments || [];\n\tif(_comments.length > 0) o.push(writextag(\"v:shapetype\", [\n\t\twritextag(\"v:stroke\", null, {joinstyle:\"miter\"}),\n\t\twritextag(\"v:path\", null, {gradientshapeok:\"t\", 'o:connecttype':\"rect\"})\n\t].join(\"\"), {id:\"_x0000_t202\", coordsize:csize.join(\",\"), 'o:spt':202, path:bbox}));\n\n\t_comments.forEach(function(x) { ++_shapeid; o.push(write_vml_comment(x, _shapeid)); });\n\to.push('');\n\treturn o.join(\"\");\n}\n\nfunction write_vml_comment(x, _shapeid)/*:string*/ {\n\tvar c = decode_cell(x[0]);\n\tvar fillopts = /*::(*/{'color2':\"#BEFF82\", 'type':\"gradient\"}/*:: :any)*/;\n\tif(fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n\tvar fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {type:\"gradientUnscaled\", 'v:ext':\"view\"}) : null;\n\tvar fillxml = writextag('v:fill', fillparm, fillopts);\n\n\tvar shadata = ({on:\"t\", 'obscured':\"t\"}/*:any*/);\n\n\treturn [\n\t'',\n\t\tfillxml,\n\t\twritextag(\"v:shadow\", null, shadata),\n\t\twritextag(\"v:path\", null, {'o:connecttype':\"none\"}),\n\t\t'
',\n\t\t'',\n\t\t\t'',\n\t\t\t'',\n\t\t\t/* Part 4 19.4.2.3 Anchor (Anchor) */\n\t\t\twritetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(\",\")),\n\t\t\twritetag('x:AutoFill', \"False\"),\n\t\t\twritetag('x:Row', String(c.r)),\n\t\t\twritetag('x:Column', String(c.c)),\n\t\t\tx[1].hidden ? '' : '',\n\t\t'',\n\t''\n\t].join(\"\");\n}\nfunction sheet_insert_comments(sheet/*:WorkSheet*/, comments/*:Array*/, threaded/*:boolean*/, people/*:?Array*/) {\n\tvar dense = sheet[\"!data\"] != null;\n\tvar cell/*:Cell*/;\n\tcomments.forEach(function(comment) {\n\t\tvar r = decode_cell(comment.ref);\n\t\tif(dense) {\n\t\t\tif(!sheet[\"!data\"][r.r]) sheet[\"!data\"][r.r] = [];\n\t\t\tcell = sheet[\"!data\"][r.r][r.c];\n\t\t} else cell = sheet[comment.ref];\n\t\tif (!cell) {\n\t\t\tcell = ({t:\"z\"}/*:any*/);\n\t\t\tif(dense) sheet[\"!data\"][r.r][r.c] = cell;\n\t\t\telse sheet[comment.ref] = cell;\n\t\t\tvar range = safe_decode_range(sheet[\"!ref\"]||\"BDWGO1000001:A1\");\n\t\t\tif(range.s.r > r.r) range.s.r = r.r;\n\t\t\tif(range.e.r < r.r) range.e.r = r.r;\n\t\t\tif(range.s.c > r.c) range.s.c = r.c;\n\t\t\tif(range.e.c < r.c) range.e.c = r.c;\n\t\t\tvar encoded = encode_range(range);\n\t\t\tsheet[\"!ref\"] = encoded;\n\t\t}\n\n\t\tif (!cell.c) cell.c = [];\n\t\tvar o/*:Comment*/ = ({a: comment.author, t: comment.t, r: comment.r, T: threaded});\n\t\tif(comment.h) o.h = comment.h;\n\n\t\t/* threaded comments always override */\n\t\tfor(var i = cell.c.length - 1; i >= 0; --i) {\n\t\t\tif(!threaded && cell.c[i].T) return;\n\t\t\tif(threaded && !cell.c[i].T) cell.c.splice(i, 1);\n\t\t}\n\t\tif(threaded && people) for(i = 0; i < people.length; ++i) {\n\t\t\tif(o.a == people[i].id) { o.a = people[i].name || o.a; break; }\n\t\t}\n\t\tcell.c.push(o);\n\t});\n}\n/* 18.7 Comments */\nfunction parse_comments_xml(data/*:string*/, opts)/*:Array*/ {\n\t/* 18.7.6 CT_Comments */\n\tif(data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n\tvar authors/*:Array*/ = [];\n\tvar commentList/*:Array*/ = [];\n\tvar authtag = data.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);\n\tif(authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar a = x.match(/<(?:\\w+:)?author[^>]*>(.*)/);\n\t\tif(a) authors.push(a[1]);\n\t});\n\tvar cmnttag = data.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);\n\tif(cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar cm = x.match(/<(?:\\w+:)?comment[^>]*>/);\n\t\tif(!cm) return;\n\t\tvar y = parsexmltag(cm[0]);\n\t\tvar comment/*:RawComment*/ = ({ author: y.authorId && authors[y.authorId] || \"sheetjsghost\", ref: y.ref, guid: y.guid }/*:any*/);\n\t\tvar cell = decode_cell(y.ref);\n\t\tif(opts.sheetRows && opts.sheetRows <= cell.r) return;\n\t\tvar textMatch = x.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/);\n\t\tvar rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:\"\",t:\"\",h:\"\"};\n\t\tcomment.r = rt.r;\n\t\tif(rt.r == \"\") rt.t = rt.h = \"\";\n\t\tcomment.t = (rt.t||\"\").replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\t\tif(opts.cellHTML) comment.h = rt.h;\n\t\tcommentList.push(comment);\n\t});\n\treturn commentList;\n}\n\nfunction write_comments_xml(data/*::, opts*/) {\n\tvar o = [XML_HEADER, writextag('comments', null, { 'xmlns': XMLNS_main[0] })];\n\n\tvar iauthor/*:Array*/ = [];\n\to.push(\"\");\n\tdata.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a);\n\t\tif(iauthor.indexOf(a) == -1) {\n\t\t\tiauthor.push(a);\n\t\t\to.push(\"\" + a + \"\");\n\t\t}\n\t\tif(w.T && w.ID && iauthor.indexOf(\"tc=\" + w.ID) == -1) {\n\t\t\tiauthor.push(\"tc=\" + w.ID);\n\t\t\to.push(\"\" + \"tc=\" + w.ID + \"\");\n\t\t}\n\t}); });\n\tif(iauthor.length == 0) { iauthor.push(\"SheetJ5\"); o.push(\"SheetJ5\"); }\n\to.push(\"\");\n\to.push(\"\");\n\tdata.forEach(function(d) {\n\t\t/* 18.7.3 CT_Comment */\n\t\tvar lastauthor = 0, ts = [], tcnt = 0;\n\t\tif(d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf(\"tc=\" + d[1][0].ID);\n\t\td[1].forEach(function(c) {\n\t\t\tif(c.a) lastauthor = iauthor.indexOf(escapexml(c.a));\n\t\t\tif(c.T) ++tcnt;\n\t\t\tts.push(c.t == null ? \"\" : escapexml(c.t));\n\t\t});\n\t\tif(tcnt === 0) {\n\t\t\td[1].forEach(function(c) {\n\t\t\t\to.push('');\n\t\t\t\to.push(writetag(\"t\", c.t == null ? \"\" : escapexml(c.t)));\n\t\t\t\to.push('');\n\t\t\t});\n\t\t} else {\n\t\t\t/* based on Threaded Comments -> Comments projection */\n\t\t\to.push('');\n\t\t\tvar t = \"Comment:\\n \" + (ts[0]) + \"\\n\";\n\t\t\tfor(var i = 1; i < ts.length; ++i) t += \"Reply:\\n \" + ts[i] + \"\\n\";\n\t\t\to.push(writetag(\"t\", escapexml(t)));\n\t\t\to.push('');\n\t\t}\n\t});\n\to.push(\"\");\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.17 */\nfunction parse_tcmnt_xml(data/*:string*/, opts)/*:Array*/ {\n\tvar out = [];\n\tvar pass = false, comment = {}, tidx = 0;\n\tdata.replace(tagregex, function xml_tcmnt(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 2.6.205 threadedComment CT_ThreadedComment */\n\t\t\tcase '': if(comment.t != null) out.push(comment); break;\n\n\t\t\tcase '': case '': comment.t = data.slice(tidx, idx).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\"); break;\n\n\t\t\t/* 2.6.206 mentions CT_ThreadedCommentMentions TODO */\n\t\t\tcase '': pass = true; break;\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 2.6.202 mention CT_Mention TODO */\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '
': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\n\nfunction write_tcmnt_xml(comments, people, opts) {\n\tvar o = [XML_HEADER, writextag('ThreadedComments', null, { 'xmlns': XMLNS.TCMNT }).replace(/[\\/]>/, \">\")];\n\tcomments.forEach(function(carr) {\n\t\tvar rootid = \"\";\n\t\t(carr[1] || []).forEach(function(c, idx) {\n\t\t\tif(!c.T) { delete c.ID; return; }\n\t\t\tif(c.a && people.indexOf(c.a) == -1) people.push(c.a);\n\t\t\tvar tcopts = {\n\t\t\t\tref: carr[0],\n\t\t\t\tid: \"{54EE7951-7262-4200-6969-\" + (\"000000000000\" + opts.tcid++).slice(-12) + \"}\"\n\t\t\t};\n\t\t\tif(idx == 0) rootid = tcopts.id;\n\t\t\telse tcopts.parentId = rootid;\n\t\t\tc.ID = tcopts.id;\n\t\t\tif(c.a) tcopts.personId = \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + people.indexOf(c.a)).slice(-12) + \"}\";\n\t\t\to.push(writextag('threadedComment', writetag('text', c.t||\"\"), tcopts));\n\t\t});\n\t});\n\to.push('');\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.18 */\nfunction parse_people_xml(data/*:string*/, opts) {\n\tvar out = [];\n\tvar pass = false;\n\tdata.replace(tagregex, function xml_tcmnt(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 2.6.203 person CT_Person TODO: providers */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\nfunction write_people_xml(people/*, opts*/) {\n\tvar o = [XML_HEADER, writextag('personList', null, {\n\t\t'xmlns': XMLNS.TCMNT,\n\t\t'xmlns:x': XMLNS_main[0]\n\t}).replace(/[\\/]>/, \">\")];\n\tpeople.forEach(function(person, idx) {\n\t\to.push(writextag('person', null, {\n\t\t\tdisplayName: person,\n\t\t\tid: \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + idx).slice(-12) + \"}\",\n\t\t\tuserId: person,\n\t\t\tproviderId: \"None\"\n\t\t}));\n\t});\n\to.push(\"\");\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\nfunction parse_BrtBeginComment(data) {\n\tvar out = {};\n\tout.iauthor = data.read_shift(4);\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tout.rfx = rfx.s;\n\tout.ref = encode_cell(rfx.s);\n\tdata.l += 16; /*var guid = parse_GUID(data); */\n\treturn out;\n}\nfunction write_BrtBeginComment(data, o) {\n\tif(o == null) o = new_buf(36);\n\to.write_shift(4, data[1].iauthor);\n\twrite_UncheckedRfX((data[0]/*:any*/), o);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\nvar parse_BrtCommentAuthor = parse_XLWideString;\nfunction write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); }\n\n/* [MS-XLSB] 2.1.7.8 Comments */\nfunction parse_comments_bin(data, opts)/*:Array*/ {\n\tvar out/*:Array*/ = [];\n\tvar authors/*:Array*/ = [];\n\tvar c = {};\n\tvar pass = false;\n\trecordhopper(data, function hopper_cmnt(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x0278: /* 'BrtCommentAuthor' */\n\t\t\t\tauthors.push(val); break;\n\t\t\tcase 0x027B: /* 'BrtBeginComment' */\n\t\t\t\tc = val; break;\n\t\t\tcase 0x027D: /* 'BrtCommentText' */\n\t\t\t\tc.t = val.t; c.h = val.h; c.r = val.r; break;\n\t\t\tcase 0x027C: /* 'BrtEndComment' */\n\t\t\t\tc.author = authors[c.iauthor];\n\t\t\t\tdelete (c/*:any*/).iauthor;\n\t\t\t\tif(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n\t\t\t\tif(!c.t) c.t = \"\";\n\t\t\t\tdelete c.rfx; out.push(c); break;\n\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */ break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */ break;\n\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn out;\n}\n\nfunction write_comments_bin(data/*::, opts*/) {\n\tvar ba = buf_array();\n\tvar iauthor/*:Array*/ = [];\n\twrite_record(ba, 0x0274 /* BrtBeginComments */);\n\n\twrite_record(ba, 0x0276 /* BrtBeginCommentAuthors */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tif(iauthor.indexOf(c.a) > -1) return;\n\t\t\tiauthor.push(c.a.slice(0,54));\n\t\t\twrite_record(ba, 0x0278 /* BrtCommentAuthor */, write_BrtCommentAuthor(c.a));\n\t\t});\n\t});\n\twrite_record(ba, 0x0277 /* BrtEndCommentAuthors */);\n\n\twrite_record(ba, 0x0279 /* BrtBeginCommentList */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tc.iauthor = iauthor.indexOf(c.a);\n\t\t\tvar range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])};\n\t\t\twrite_record(ba, 0x027B /* BrtBeginComment */, write_BrtBeginComment([range, c]));\n\t\t\tif(c.t && c.t.length > 0) write_record(ba, 0x027D /* BrtCommentText */, write_BrtCommentText(c));\n\t\t\twrite_record(ba, 0x027C /* BrtEndComment */);\n\t\t\tdelete c.iauthor;\n\t\t});\n\t});\n\twrite_record(ba, 0x027A /* BrtEndCommentList */);\n\n\twrite_record(ba, 0x0275 /* BrtEndComments */);\n\treturn ba.end();\n}\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\nfunction make_vba_xls(cfb) {\n var newcfb = CFB.utils.cfb_new({ root: \"R\" });\n cfb.FullPaths.forEach(function(p, i) {\n if (p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/))\n return;\n var newpath = p.replace(/^[^\\/]*/, \"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n CFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n });\n return CFB.write(newcfb);\n}\nfunction fill_vba_xls(cfb, vba) {\n vba.FullPaths.forEach(function(p, i) {\n if (i == 0)\n return;\n var newpath = p.replace(/[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n if (newpath.slice(-1) !== \"/\")\n CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n });\n}\nvar VBAFMTS = [\"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\"];\n/* macro and dialog sheet stubs */\nfunction parse_ds_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ds_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ms_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\nfunction parse_ms_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\n/* TODO: it will be useful to parse the function str */\nvar rc_to_a1 = /*#__PURE__*/(function(){\n\tvar rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n\tvar rcbase/*:Cell*/ = ({r:0,c:0}/*:any*/);\n\tfunction rcfunc($$,$1,$2,$3) {\n\t\tvar cRel = false, rRel = false;\n\n\t\tif($2.length == 0) rRel = true;\n\t\telse if($2.charAt(0) == \"[\") { rRel = true; $2 = $2.slice(1, -1); }\n\n\t\tif($3.length == 0) cRel = true;\n\t\telse if($3.charAt(0) == \"[\") { cRel = true; $3 = $3.slice(1, -1); }\n\n\t\tvar R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0;\n\n\t\tif(cRel) C += rcbase.c; else --C;\n\t\tif(rRel) R += rcbase.r; else --R;\n\t\treturn $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n\t}\n\treturn function rc_to_a1(fstr/*:string*/, base/*:Cell*/)/*:string*/ {\n\t\trcbase = base;\n\t\treturn fstr.replace(rcregex, rcfunc);\n\t};\n})();\n\nvar crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\nvar a1_to_rc = /*#__PURE__*/(function(){\n\treturn function a1_to_rc(fstr/*:string*/, base/*:CellAddress*/) {\n\t\treturn fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\t\tvar c = decode_col($3) - ($2 ? 0 : base.c);\n\t\t\tvar r = decode_row($5) - ($4 ? 0 : base.r);\n\t\t\tvar R = $4 == \"$\" ? (r+1) : (r == 0 ? \"\" : \"[\" + r + \"]\");\n\t\t\tvar C = $2 == \"$\" ? (c+1) : (c == 0 ? \"\" : \"[\" + c + \"]\");\n\t\t\treturn $1 + \"R\" + R + \"C\" + C;\n\t\t});\n\t};\n})();\n\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\nfunction shift_formula_str(f/*:string*/, delta/*:Cell*/)/*:string*/ {\n\treturn f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\treturn $1+($2==\"$\" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4==\"$\" ? $4+$5 : encode_row(decode_row($5) + delta.r));\n\t});\n}\n\nfunction shift_formula_xlsx(f/*:string*/, range/*:string*/, cell/*:string*/)/*:string*/ {\n\tvar r = decode_range(range), s = r.s, c = decode_cell(cell);\n\tvar delta = {r:c.r - s.r, c:c.c - s.c};\n\treturn shift_formula_str(f, delta);\n}\n\n/* TODO: parse formula */\nfunction fuzzyfmla(f/*:string*/)/*:boolean*/ {\n\tif(f.length == 1) return false;\n\treturn true;\n}\n\nfunction _xlfn(f/*:string*/)/*:string*/ {\n\treturn f.replace(/_xlfn\\./g,\"\");\n}\nfunction parseread1(blob) { blob.l+=1; return; }\n\n/* [MS-XLS] 2.5.51 */\nfunction parse_ColRelU(blob, length) {\n\tvar c = blob.read_shift(length == 1 ? 1 : 2);\n\treturn [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\nfunction parse_RgceArea(blob, length, opts) {\n\tvar w = 2;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);\n\t\telse if(opts.biff == 12) w = 4;\n\t}\n\tvar r=blob.read_shift(w), R=blob.read_shift(w);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n/* BIFF 2-5 encodes flags in the row field */\nfunction parse_RgceArea_BIFF2(blob/*::, length, opts*/) {\n\tvar r=parse_ColRelU(blob, 2), R=parse_ColRelU(blob, 2);\n\tvar c=blob.read_shift(1);\n\tvar C=blob.read_shift(1);\n\treturn { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} };\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\nfunction parse_RgceAreaRel(blob, length, opts) {\n\tif(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n\tvar r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\nfunction parse_RgceLoc(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n\tvar c = parse_ColRelU(blob, 2);\n\treturn {r:r, c:c[0], cRel:c[1], rRel:c[2]};\n}\nfunction parse_RgceLoc_BIFF2(blob/*::, length, opts*/) {\n\tvar r = parse_ColRelU(blob, 2);\n\tvar c = blob.read_shift(1);\n\treturn {r:r[0], c:c, cRel:r[1], rRel:r[2]};\n}\n\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\nfunction parse_RgceElfLoc(blob/*::, length, opts*/) {\n\tvar r = blob.read_shift(2);\n\tvar c = blob.read_shift(2);\n\treturn {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 };\n}\n\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\nfunction parse_RgceLocRel(blob, length, opts) {\n\tvar biff = opts && opts.biff ? opts.biff : 8;\n\tif(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(biff >= 12 ? 4 : 2);\n\tvar cl = blob.read_shift(2);\n\tvar cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15;\n\tcl &= 0x3FFF;\n\tif(rRel == 1) while(r > 0x7FFFF) r -= 0x100000;\n\tif(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000;\n\treturn {r:r,c:cl,cRel:cRel,rRel:rRel};\n}\nfunction parse_RgceLocRel_BIFF2(blob/*::, length:number, opts*/) {\n\tvar rl = blob.read_shift(2);\n\tvar c = blob.read_shift(1);\n\tvar rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14;\n\trl &= 0x3FFF;\n\tif(rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n\tif(cRel == 1 && c >= 0x80) c = c - 0x100;\n\treturn {r:rl,c:c,cRel:cRel,rRel:rRel};\n}\n\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\nfunction parse_PtgArea(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\nfunction parse_PtgArea3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2, 'i');\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tvar area = parse_RgceArea(blob, w, opts);\n\treturn [type, ixti, area];\n}\n\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\nfunction parse_PtgAreaErr(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8);\n\treturn [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\nfunction parse_PtgAreaN(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceAreaRel(blob, length - 1, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\nfunction parse_PtgArray(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\nfunction parse_PtgAttrBaxcel(blob) {\n\tvar bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */\n\tvar bitBaxcel = 1;\n\tblob.l += 4;\n\treturn [bitSemi, bitBaxcel];\n}\n\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\nfunction parse_PtgAttrChoose(blob, length, opts)/*:Array*/ {\n\tblob.l +=2;\n\tvar offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar o/*:Array*/ = [];\n\t/* offset is 1 less than the number of elements */\n\tfor(var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\nfunction parse_PtgAttrGoto(blob, length, opts) {\n\tvar bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\nfunction parse_PtgAttrIf(blob, length, opts) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLSB] 2.5.97.28 */\nfunction parse_PtgAttrIfError(blob) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(2)];\n}\n\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\nfunction parse_PtgAttrSemi(blob, length, opts) {\n\tvar bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += opts && opts.biff == 2 ? 3 : 4;\n\treturn [bitSemi];\n}\n\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\nfunction parse_PtgAttrSpaceType(blob/*::, length*/) {\n\tvar type = blob.read_shift(1), cch = blob.read_shift(1);\n\treturn [type, cch];\n}\n\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\nfunction parse_PtgAttrSpace(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\nfunction parse_PtgAttrSpaceSemi(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\nfunction parse_PtgRef(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLoc(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\nfunction parse_PtgRefN(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLocRel(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\nfunction parse_PtgRef3d(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tif(opts && opts.biff == 5) blob.l += 12;\n\tvar loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\treturn [type, ixti, loc];\n}\n\n\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\nfunction parse_PtgFunc(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n\treturn [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\nfunction parse_PtgFuncVar(blob, length, opts) {\n\tvar type = blob[blob.l++];\n\tvar cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob);\n\treturn [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n\treturn [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];\n}\n\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\nfunction parse_PtgAttrSum(blob, length, opts) {\n\tblob.l += opts && opts.biff == 2 ? 3 : 4; return;\n}\n\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\nfunction parse_PtgExp(blob, length, opts) {\n\tblob.l++;\n\tif(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n\tvar row = blob.read_shift(2);\n\tvar col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [row, col];\n}\n\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\nfunction parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }\n\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\nfunction parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }\n\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\nfunction parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}\n\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\nfunction parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }\n\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\nfunction parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); }\n\n/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\nfunction parse_SerAr(blob, biff/*:number*/) {\n\tvar val = [blob.read_shift(1)];\n\tif(biff == 12) switch(val[0]) {\n\t\tcase 0x02: val[0] = 0x04; break; /* SerBool */\n\t\tcase 0x04: val[0] = 0x10; break; /* SerErr */\n\t\tcase 0x00: val[0] = 0x01; break; /* SerNum */\n\t\tcase 0x01: val[0] = 0x02; break; /* SerStr */\n\t}\n\tswitch(val[0]) {\n\t\tcase 0x04: /* SerBool -- boolean */\n\t\t\tval[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n\t\t\tif(biff != 12) blob.l += 7; break;\n\t\tcase 0x25: /* appears to be an alias */\n\t\tcase 0x10: /* SerErr -- error */\n\t\t\tval[1] = BErr[blob[blob.l]];\n\t\t\tblob.l += ((biff == 12) ? 4 : 8); break;\n\t\tcase 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */\n\t\t\tblob.l += 8; break;\n\t\tcase 0x01: /* SerNum -- Xnum */\n\t\t\tval[1] = parse_Xnum(blob, 8); break;\n\t\tcase 0x02: /* SerStr -- XLUnicodeString (<256 chars) */\n\t\t\tval[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break;\n\t\tdefault: throw new Error(\"Bad SerAr: \" + val[0]); /* Unreachable */\n\t}\n\treturn val;\n}\n\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\nfunction parse_PtgExtraMem(blob, cce, opts) {\n\tvar count = blob.read_shift((opts.biff == 12) ? 4 : 2);\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\nfunction parse_PtgExtraArray(blob, length, opts) {\n\tvar rows = 0, cols = 0;\n\tif(opts.biff == 12) {\n\t\trows = blob.read_shift(4); // DRw\n\t\tcols = blob.read_shift(4); // DCol\n\t} else {\n\t\tcols = 1 + blob.read_shift(1); //DColByteU\n\t\trows = 1 + blob.read_shift(2); //DRw\n\t}\n\tif(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; }\n\t// $FlowIgnore\n\tfor(var i = 0, o/*:Array>*/ = []; i != rows && (o[i] = []); ++i)\n\t\tfor(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\nfunction parse_PtgName(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar w = (!opts || (opts.biff >= 8)) ? 4 : 2;\n\tvar nameindex = blob.read_shift(w);\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l += 5; break;\n\t\tcase 3: case 4: blob.l += 8; break;\n\t\tcase 5: blob.l += 12; break;\n\t}\n\treturn [type, 0, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\nfunction parse_PtgNameX(blob, length, opts) {\n\tif(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tvar nameindex = blob.read_shift(4);\n\treturn [type, ixti, nameindex];\n}\nfunction parse_PtgNameX_BIFF5(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2, 'i'); // XtiIndex\n\tblob.l += 8;\n\tvar nameindex = blob.read_shift(2);\n\tblob.l += 12;\n\treturn [type, ixti, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\nfunction parse_PtgMemArea(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += (opts && opts.biff == 2 ? 3 : 4);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\nfunction parse_PtgMemFunc(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\nfunction parse_PtgRefErr(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += 4;\n\tif(opts.biff < 8) blob.l--;\n\tif(opts.biff == 12) blob.l += 2;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\nfunction parse_PtgRefErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 4;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: w = 15; break;\n\t\tcase 12: w = 6; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n\tblob.l += 2;\n\treturn [parse_RgceElfLoc(blob, 4, opts)];\n}\nfunction parse_PtgElfNoop(blob/*::, length, opts*/) {\n\tblob.l += 6;\n\treturn [];\n}\n/* [MS-XLS] 2.5.198.46 */\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\nfunction parse_PtgElfLel(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n\n/* [MS-XLSB] 2.5.97.52 TODO */\nvar PtgListRT = [\n\t\"Data\",\n\t\"All\",\n\t\"Headers\",\n\t\"??\",\n\t\"?Data2\",\n\t\"??\",\n\t\"?DataHeaders\",\n\t\"??\",\n\t\"Totals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?DataTotals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?Current\"\n];\nfunction parse_PtgList(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\tvar ixti = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tvar idx = blob.read_shift(4);\n\tvar c = blob.read_shift(2);\n\tvar C = blob.read_shift(2);\n\tvar rt = PtgListRT[(flags >> 2) & 0x1F];\n\treturn {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C};\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\nfunction parse_PtgSxName(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [blob.read_shift(4)];\n}\n\n/* [XLS] old spec */\nfunction parse_PtgSheet(blob, length, opts) {\n\tblob.l += 5;\n\tblob.l += 2;\n\tblob.l += (opts.biff == 2 ? 1 : 4);\n\treturn [\"PTGSHEET\"];\n}\nfunction parse_PtgEndSheet(blob, length, opts) {\n\tblob.l += (opts.biff == 2 ? 4 : 5);\n\treturn [\"PTGENDSHEET\"];\n}\nfunction parse_PtgMemAreaN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgMemNoMemN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgAttrNoop(blob/*::, length, opts*/) {\n\tblob.l += 4;\n\treturn [0, 0];\n}\n\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\nvar PtgTypes = {\n\t/*::[*/0x01/*::]*/: { n:'PtgExp', f:parse_PtgExp },\n\t/*::[*/0x02/*::]*/: { n:'PtgTbl', f:parse_PtgTbl },\n\t/*::[*/0x03/*::]*/: { n:'PtgAdd', f:parseread1 },\n\t/*::[*/0x04/*::]*/: { n:'PtgSub', f:parseread1 },\n\t/*::[*/0x05/*::]*/: { n:'PtgMul', f:parseread1 },\n\t/*::[*/0x06/*::]*/: { n:'PtgDiv', f:parseread1 },\n\t/*::[*/0x07/*::]*/: { n:'PtgPower', f:parseread1 },\n\t/*::[*/0x08/*::]*/: { n:'PtgConcat', f:parseread1 },\n\t/*::[*/0x09/*::]*/: { n:'PtgLt', f:parseread1 },\n\t/*::[*/0x0A/*::]*/: { n:'PtgLe', f:parseread1 },\n\t/*::[*/0x0B/*::]*/: { n:'PtgEq', f:parseread1 },\n\t/*::[*/0x0C/*::]*/: { n:'PtgGe', f:parseread1 },\n\t/*::[*/0x0D/*::]*/: { n:'PtgGt', f:parseread1 },\n\t/*::[*/0x0E/*::]*/: { n:'PtgNe', f:parseread1 },\n\t/*::[*/0x0F/*::]*/: { n:'PtgIsect', f:parseread1 },\n\t/*::[*/0x10/*::]*/: { n:'PtgUnion', f:parseread1 },\n\t/*::[*/0x11/*::]*/: { n:'PtgRange', f:parseread1 },\n\t/*::[*/0x12/*::]*/: { n:'PtgUplus', f:parseread1 },\n\t/*::[*/0x13/*::]*/: { n:'PtgUminus', f:parseread1 },\n\t/*::[*/0x14/*::]*/: { n:'PtgPercent', f:parseread1 },\n\t/*::[*/0x15/*::]*/: { n:'PtgParen', f:parseread1 },\n\t/*::[*/0x16/*::]*/: { n:'PtgMissArg', f:parseread1 },\n\t/*::[*/0x17/*::]*/: { n:'PtgStr', f:parse_PtgStr },\n\t/*::[*/0x1A/*::]*/: { n:'PtgSheet', f:parse_PtgSheet },\n\t/*::[*/0x1B/*::]*/: { n:'PtgEndSheet', f:parse_PtgEndSheet },\n\t/*::[*/0x1C/*::]*/: { n:'PtgErr', f:parse_PtgErr },\n\t/*::[*/0x1D/*::]*/: { n:'PtgBool', f:parse_PtgBool },\n\t/*::[*/0x1E/*::]*/: { n:'PtgInt', f:parse_PtgInt },\n\t/*::[*/0x1F/*::]*/: { n:'PtgNum', f:parse_PtgNum },\n\t/*::[*/0x20/*::]*/: { n:'PtgArray', f:parse_PtgArray },\n\t/*::[*/0x21/*::]*/: { n:'PtgFunc', f:parse_PtgFunc },\n\t/*::[*/0x22/*::]*/: { n:'PtgFuncVar', f:parse_PtgFuncVar },\n\t/*::[*/0x23/*::]*/: { n:'PtgName', f:parse_PtgName },\n\t/*::[*/0x24/*::]*/: { n:'PtgRef', f:parse_PtgRef },\n\t/*::[*/0x25/*::]*/: { n:'PtgArea', f:parse_PtgArea },\n\t/*::[*/0x26/*::]*/: { n:'PtgMemArea', f:parse_PtgMemArea },\n\t/*::[*/0x27/*::]*/: { n:'PtgMemErr', f:parse_PtgMemErr },\n\t/*::[*/0x28/*::]*/: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },\n\t/*::[*/0x29/*::]*/: { n:'PtgMemFunc', f:parse_PtgMemFunc },\n\t/*::[*/0x2A/*::]*/: { n:'PtgRefErr', f:parse_PtgRefErr },\n\t/*::[*/0x2B/*::]*/: { n:'PtgAreaErr', f:parse_PtgAreaErr },\n\t/*::[*/0x2C/*::]*/: { n:'PtgRefN', f:parse_PtgRefN },\n\t/*::[*/0x2D/*::]*/: { n:'PtgAreaN', f:parse_PtgAreaN },\n\t/*::[*/0x2E/*::]*/: { n:'PtgMemAreaN', f:parse_PtgMemAreaN },\n\t/*::[*/0x2F/*::]*/: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN },\n\t/*::[*/0x39/*::]*/: { n:'PtgNameX', f:parse_PtgNameX },\n\t/*::[*/0x3A/*::]*/: { n:'PtgRef3d', f:parse_PtgRef3d },\n\t/*::[*/0x3B/*::]*/: { n:'PtgArea3d', f:parse_PtgArea3d },\n\t/*::[*/0x3C/*::]*/: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },\n\t/*::[*/0x3D/*::]*/: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },\n\t/*::[*/0xFF/*::]*/: {}\n};\n/* These are duplicated in the PtgTypes table */\nvar PtgDupes = {\n\t/*::[*/0x40/*::]*/: 0x20, /*::[*/0x60/*::]*/: 0x20,\n\t/*::[*/0x41/*::]*/: 0x21, /*::[*/0x61/*::]*/: 0x21,\n\t/*::[*/0x42/*::]*/: 0x22, /*::[*/0x62/*::]*/: 0x22,\n\t/*::[*/0x43/*::]*/: 0x23, /*::[*/0x63/*::]*/: 0x23,\n\t/*::[*/0x44/*::]*/: 0x24, /*::[*/0x64/*::]*/: 0x24,\n\t/*::[*/0x45/*::]*/: 0x25, /*::[*/0x65/*::]*/: 0x25,\n\t/*::[*/0x46/*::]*/: 0x26, /*::[*/0x66/*::]*/: 0x26,\n\t/*::[*/0x47/*::]*/: 0x27, /*::[*/0x67/*::]*/: 0x27,\n\t/*::[*/0x48/*::]*/: 0x28, /*::[*/0x68/*::]*/: 0x28,\n\t/*::[*/0x49/*::]*/: 0x29, /*::[*/0x69/*::]*/: 0x29,\n\t/*::[*/0x4A/*::]*/: 0x2A, /*::[*/0x6A/*::]*/: 0x2A,\n\t/*::[*/0x4B/*::]*/: 0x2B, /*::[*/0x6B/*::]*/: 0x2B,\n\t/*::[*/0x4C/*::]*/: 0x2C, /*::[*/0x6C/*::]*/: 0x2C,\n\t/*::[*/0x4D/*::]*/: 0x2D, /*::[*/0x6D/*::]*/: 0x2D,\n\t/*::[*/0x4E/*::]*/: 0x2E, /*::[*/0x6E/*::]*/: 0x2E,\n\t/*::[*/0x4F/*::]*/: 0x2F, /*::[*/0x6F/*::]*/: 0x2F,\n\t/*::[*/0x58/*::]*/: 0x22, /*::[*/0x78/*::]*/: 0x22,\n\t/*::[*/0x59/*::]*/: 0x39, /*::[*/0x79/*::]*/: 0x39,\n\t/*::[*/0x5A/*::]*/: 0x3A, /*::[*/0x7A/*::]*/: 0x3A,\n\t/*::[*/0x5B/*::]*/: 0x3B, /*::[*/0x7B/*::]*/: 0x3B,\n\t/*::[*/0x5C/*::]*/: 0x3C, /*::[*/0x7C/*::]*/: 0x3C,\n\t/*::[*/0x5D/*::]*/: 0x3D, /*::[*/0x7D/*::]*/: 0x3D\n};\n\nvar Ptg18 = {\n\t/*::[*/0x01/*::]*/: { n:'PtgElfLel', f:parse_PtgElfLel },\n\t/*::[*/0x02/*::]*/: { n:'PtgElfRw', f:parse_PtgElfRw },\n\t/*::[*/0x03/*::]*/: { n:'PtgElfCol', f:parse_PtgElfCol },\n\t/*::[*/0x06/*::]*/: { n:'PtgElfRwV', f:parse_PtgElfRwV },\n\t/*::[*/0x07/*::]*/: { n:'PtgElfColV', f:parse_PtgElfColV },\n\t/*::[*/0x0A/*::]*/: { n:'PtgElfRadical', f:parse_PtgElfRadical },\n\t/*::[*/0x0B/*::]*/: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS },\n\t/*::[*/0x0D/*::]*/: { n:'PtgElfColS', f:parse_PtgElfColS },\n\t/*::[*/0x0F/*::]*/: { n:'PtgElfColSV', f:parse_PtgElfColSV },\n\t/*::[*/0x10/*::]*/: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel },\n\t/*::[*/0x19/*::]*/: { n:'PtgList', f:parse_PtgList },\n\t/*::[*/0x1D/*::]*/: { n:'PtgSxName', f:parse_PtgSxName },\n\t/*::[*/0xFF/*::]*/: {}\n};\nvar Ptg19 = {\n\t/*::[*/0x00/*::]*/: { n:'PtgAttrNoop', f:parse_PtgAttrNoop },\n\t/*::[*/0x01/*::]*/: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },\n\t/*::[*/0x02/*::]*/: { n:'PtgAttrIf', f:parse_PtgAttrIf },\n\t/*::[*/0x04/*::]*/: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },\n\t/*::[*/0x08/*::]*/: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },\n\t/*::[*/0x10/*::]*/: { n:'PtgAttrSum', f:parse_PtgAttrSum },\n\t/*::[*/0x20/*::]*/: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t/*::[*/0x21/*::]*/: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t/*::[*/0x40/*::]*/: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },\n\t/*::[*/0x41/*::]*/: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },\n\t/*::[*/0x80/*::]*/: { n:'PtgAttrIfError', f:parse_PtgAttrIfError },\n\t/*::[*/0xFF/*::]*/: {}\n};\n\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n\tif(opts.biff < 8) return parsenoop(blob, length);\n\tvar target = blob.l + length;\n\tvar o = [];\n\tfor(var i = 0; i !== rgce.length; ++i) {\n\t\tswitch(rgce[i][0]) {\n\t\t\tcase 'PtgArray': /* PtgArray -> PtgExtraArray */\n\t\t\t\trgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n\t\t\t\to.push(rgce[i][1]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */\n\t\t\t\trgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n\t\t\t\to.push(rgce[i][2]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgExp': /* PtgExp -> PtgExtraCol */\n\t\t\t\tif(opts && opts.biff == 12) {\n\t\t\t\t\trgce[i][1][1] = blob.read_shift(4);\n\t\t\t\t\to.push(rgce[i][1]);\n\t\t\t\t} break;\n\t\t\tcase 'PtgList': /* TODO: PtgList -> PtgExtraList */\n\t\t\tcase 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */\n\t\t\t\tthrow \"Unsupported \" + rgce[i][0];\n\t\t\tdefault: break;\n\t\t}\n\t}\n\tlength = target - blob.l;\n\t/* note: this is technically an error but Excel disregards */\n\t//if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\tif(length !== 0) o.push(parsenoop(blob, length));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\nfunction parse_Rgce(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar R, id, ptgs = [];\n\twhile(target != blob.l) {\n\t\tlength = target - blob.l;\n\t\tid = blob[blob.l];\n\t\tR = PtgTypes[id] || PtgTypes[PtgDupes[id]];\n\t\tif(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\t\tif(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); }\n\t\telse { ptgs.push([R.n, R.f(blob, length, opts)]); }\n\t}\n\treturn ptgs;\n}\n\nfunction stringify_array(f/*:Array>*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < f.length; ++i) {\n\t\tvar x = f[i], r/*:Array*/ = [];\n\t\tfor(var j = 0; j < x.length; ++j) {\n\t\t\tvar y = x[j];\n\t\t\tif(y) switch(y[0]) {\n\t\t\t\t// TODO: handle embedded quotes\n\t\t\t\tcase 0x02:\n\t\t\t\t\t/*:: if(typeof y[1] != 'string') throw \"unreachable\"; */\n\t\t\t\t\tr.push('\"' + y[1].replace(/\"/g,'\"\"') + '\"'); break;\n\t\t\t\tdefault: r.push(y[1]);\n\t\t\t} else r.push(\"\");\n\t\t}\n\t\to.push(r.join(\",\"));\n\t}\n\treturn o.join(\";\");\n}\n\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\nvar PtgBinOp = {\n\tPtgAdd: \"+\",\n\tPtgConcat: \"&\",\n\tPtgDiv: \"/\",\n\tPtgEq: \"=\",\n\tPtgGe: \">=\",\n\tPtgGt: \">\",\n\tPtgLe: \"<=\",\n\tPtgLt: \"<\",\n\tPtgMul: \"*\",\n\tPtgNe: \"<>\",\n\tPtgPower: \"^\",\n\tPtgSub: \"-\"\n};\n\n// TODO: explore space\nfunction make_3d_range(start, end) {\n\tvar s = start.lastIndexOf(\"!\"), e = end.lastIndexOf(\"!\");\n\tif(s == -1 && e == -1) return start + \":\" + end;\n\tif(s > 0 && e > 0 && start.slice(0, s).toLowerCase() == end.slice(0, e).toLowerCase()) return start + \":\" + end.slice(e+1);\n\tconsole.error(\"Cannot hydrate range\", start, end);\n\treturn start + \":\" + end;\n}\n\nfunction get_ixti_raw(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tif(!supbooks) return \"SH33TJSERR0\";\n\tif(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n\tif(!supbooks.XTI) return \"SH33TJSERR6\";\n\tvar XTI = supbooks.XTI[ixti];\n\tif(opts.biff < 8) {\n\t\tif(ixti > 10000) ixti-= 65536;\n\t\tif(ixti < 0) ixti = -ixti;\n\t\treturn ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n\t}\n\tif(!XTI) return \"SH33TJSERR1\";\n\tvar o = \"\";\n\tif(opts.biff > 8) switch(supbooks[XTI[0]][0]) {\n\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\to = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tif(opts.SID != null) return supbooks.SheetNames[opts.SID];\n\t\t\treturn \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\t/* falls through */\n\t\tdefault: return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n\t}\n\tswitch(supbooks[XTI[0]][0][0]) {\n\t\tcase 0x0401:\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(\";;\"); //return \"SH33TJSERR8\";\n\t\tdefault:\n\t\t\tif(!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n\t}\n}\nfunction get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tvar ixtiraw = get_ixti_raw(supbooks, ixti, opts);\n\treturn ixtiraw == \"#REF\" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);\n}\nfunction stringify_formula(formula/*Array*/, range, cell/*:any*/, supbooks, opts)/*:string*/ {\n\tvar biff = (opts && opts.biff) || 8;\n\tvar _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};\n\tvar stack/*:Array*/ = [], e1, e2, /*::type,*/ c/*:CellAddress*/, ixti=0, nameidx=0, r, sname=\"\";\n\tif(!formula[0] || !formula[0][0]) return \"\";\n\tvar last_sp = -1, sp = \"\";\n\tfor(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n\t\tvar f = formula[0][ff];\n\t\tswitch(f[0]) {\n\t\t\tcase 'PtgUminus': /* [MS-XLS] 2.5.198.93 */\n\t\t\t\tstack.push(\"-\" + stack.pop()); break;\n\t\t\tcase 'PtgUplus': /* [MS-XLS] 2.5.198.95 */\n\t\t\t\tstack.push(\"+\" + stack.pop()); break;\n\t\t\tcase 'PtgPercent': /* [MS-XLS] 2.5.198.81 */\n\t\t\t\tstack.push(stack.pop() + \"%\"); break;\n\n\t\t\tcase 'PtgAdd': /* [MS-XLS] 2.5.198.26 */\n\t\t\tcase 'PtgConcat': /* [MS-XLS] 2.5.198.43 */\n\t\t\tcase 'PtgDiv': /* [MS-XLS] 2.5.198.45 */\n\t\t\tcase 'PtgEq': /* [MS-XLS] 2.5.198.56 */\n\t\t\tcase 'PtgGe': /* [MS-XLS] 2.5.198.64 */\n\t\t\tcase 'PtgGt': /* [MS-XLS] 2.5.198.65 */\n\t\t\tcase 'PtgLe': /* [MS-XLS] 2.5.198.68 */\n\t\t\tcase 'PtgLt': /* [MS-XLS] 2.5.198.69 */\n\t\t\tcase 'PtgMul': /* [MS-XLS] 2.5.198.75 */\n\t\t\tcase 'PtgNe': /* [MS-XLS] 2.5.198.78 */\n\t\t\tcase 'PtgPower': /* [MS-XLS] 2.5.198.82 */\n\t\t\tcase 'PtgSub': /* [MS-XLS] 2.5.198.90 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\" \", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\"\\r\", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsp = \"\";\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\te2 = e2 + sp;\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(e2+PtgBinOp[f[0]]+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgIsect': /* [MS-XLS] 2.5.198.67 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\" \"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgUnion': /* [MS-XLS] 2.5.198.94 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\",\"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRange': /* [MS-XLS] 2.5.198.83 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(make_3d_range(e2,e1));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */\n\t\t\t\tbreak;\n\n\n\t\t\tcase 'PtgRef': /* [MS-XLS] 2.5.198.84 */\n\t\t\t\t/*::type = f[1][0]; */c = shift_cell_xls((f[1][1]/*:any*/), _range, opts);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRefN': /* [MS-XLS] 2.5.198.88 */\n\t\t\t\t/*::type = f[1][0]; */c = cell ? shift_cell_xls((f[1][1]/*:any*/), cell, opts) : (f[1][1]/*:any*/);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; c = shift_cell_xls((f[1][2]/*:any*/), _range, opts);\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tvar w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars\n\t\t\t\tstack.push(sname + \"!\" + encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgFunc': /* [MS-XLS] 2.5.198.62 */\n\t\t\tcase 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */\n\t\t\t\t/* f[1] = [argc, func, type] */\n\t\t\t\tvar argc/*:number*/ = (f[1][0]/*:any*/), func/*:string*/ = (f[1][1]/*:any*/);\n\t\t\t\tif(!argc) argc = 0;\n\t\t\t\targc &= 0x7F;\n\t\t\t\tvar args = argc == 0 ? [] : stack.slice(-argc);\n\t\t\t\tstack.length -= argc;\n\t\t\t\tif(func === 'User') func = args.shift();\n\t\t\t\tstack.push(func + \"(\" + args.join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgBool': /* [MS-XLS] 2.5.198.42 */\n\t\t\t\tstack.push(f[1] ? \"TRUE\" : \"FALSE\"); break;\n\t\t\tcase 'PtgInt': /* [MS-XLS] 2.5.198.66 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */\n\t\t\t\tstack.push(String(f[1])); break;\n\t\t\tcase 'PtgStr': /* [MS-XLS] 2.5.198.89 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"'); break;\n\t\t\tcase 'PtgErr': /* [MS-XLS] 2.5.198.57 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; r = f[1][2];\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tstack.push(sname + \"!\" + encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */\n\t\t\t\tstack.push(\"SUM(\" + stack.pop() + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */\n\t\t\tcase 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\t\t\t\t/* f[1] = type, 0, nameindex */\n\t\t\t\tnameidx = (f[1][2]/*:any*/);\n\t\t\t\tvar lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx];\n\t\t\t\tvar name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n\t\t\t\t/* [MS-XLSB] 2.5.97.10 Ftab -- last verified 20220204 */\n\t\t\t\tif(name && name.slice(0,6) == \"_xlfn.\" && !opts.xlfn) name = name.slice(6);\n\t\t\t\tstack.push(name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\t\t\t\t/* f[1] = type, ixti, nameindex */\n\t\t\t\tvar bookidx/*:number*/ = (f[1][1]/*:any*/); nameidx = (f[1][2]/*:any*/); var externbook;\n\t\t\t\t/* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\t\t\t\tif(opts.biff <= 5) {\n\t\t\t\t\tif(bookidx < 0) bookidx = -bookidx;\n\t\t\t\t\tif(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n\t\t\t\t} else {\n\t\t\t\t\tvar o = \"\";\n\t\t\t\t\tif(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */}\n\t\t\t\t\telse if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){\n\t\t\t\t\t\tif(supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n\t\t\t\t\t\t\to = supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1] + \"!\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse o = supbooks.SheetNames[nameidx-1]+ \"!\";\n\t\t\t\t\tif(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;\n\t\t\t\t\telse if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||\"\").split(\";;\");\n\t\t\t\t\t\tif(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n\t\t\t\t\t\telse o += \"SH33TJSERRX\";\n\t\t\t\t\t}\n\t\t\t\t\tstack.push(o);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!externbook) externbook = {Name: \"SH33TJSERRY\"};\n\t\t\t\tstack.push(externbook.Name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgParen': /* [MS-XLS] 2.5.198.80 */\n\t\t\t\tvar lp = '(', rp = ')';\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 2: lp = fill(\" \", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 3: lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 4: rp = fill(\" \", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 5: rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(lp + stack.pop() + rp); break;\n\n\t\t\tcase 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */\n\t\t\t\tc = {c:(f[1][1]/*:any*/),r:(f[1][0]/*:any*/)};\n\t\t\t\tvar q = ({c: cell.c, r:cell.r}/*:any*/);\n\t\t\t\tif(supbooks.sharedf[encode_cell(c)]) {\n\t\t\t\t\tvar parsedf = (supbooks.sharedf[encode_cell(c)]);\n\t\t\t\t\tstack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n\t\t\t\t} else {\n\t\t\t\t\tvar fnd = false;\n\t\t\t\t\tfor(e1=0;e1!=supbooks.arrayf.length; ++e1) {\n\t\t\t\t\t\t/* TODO: should be something like range_has */\n\t\t\t\t\t\te2 = supbooks.arrayf[e1];\n\t\t\t\t\t\tif(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n\t\t\t\t\t\tif(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n\t\t\t\t\t\tstack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n\t\t\t\t\t\tfnd = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(!fnd) stack.push(/*::String(*/f[1]/*::)*/);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */\n\t\t\t\tstack.push(\"{\" + stringify_array(/*::(*/f[1]/*:: :any)*/) + \"}\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n\t\t\t\t//stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */\n\t\t\tcase 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */\n\t\t\t\tlast_sp = ff;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */\n\t\t\t\tstack.push(\"\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgList': /* [MS-XLSB] 2.5.97.52 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemAreaN':\n\t\t\tcase 'PtgMemNoMemN':\n\t\t\tcase 'PtgAttrNoop':\n\t\t\tcase 'PtgSheet':\n\t\t\tcase 'PtgEndSheet':\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */\n\t\t\tcase 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */\n\t\t\tcase 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */\n\t\t\tcase 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */\n\t\t\tcase 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */\n\t\t\tcase 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */\n\t\t\tcase 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */\n\t\t\tcase 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */\n\t\t\tcase 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */\n\t\t\tcase 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */\n\t\t\t\tthrow new Error(\"Unsupported ELFs\");\n\n\t\t\tcase 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n\t\t\t\tthrow new Error('Unrecognized Formula Token: ' + String(f));\n\t\t\tdefault: throw new Error('Unrecognized Formula Token: ' + String(f));\n\t\t}\n\t\tvar PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n\t\tif(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n\t\t\tf = formula[0][last_sp];\n\t\t\tvar _left = true;\n\t\t\tswitch(f[1][0]) {\n\t\t\t\t/* note: some bad XLSB files omit the PtgParen */\n\t\t\t\tcase 4: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 0:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\" \", f[1][1]); break;\n\t\t\t\tcase 5: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\"\\r\", f[1][1]); break;\n\t\t\t\tdefault:\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n\t\t\t}\n\t\t\tstack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n\t\t\tlast_sp = -1;\n\t\t}\n\t}\n\tif(stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n\tif(stack[0] == \"TRUE\") return true; if(stack[0] == \"FALSE\") return false;\n\treturn stack[0];\n}\n\n/* [MS-XLS] 2.5.198.1 TODO */\nfunction parse_ArrayParsedFormula(blob, length, opts/*::, ref*/) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.3 TODO */\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.21 */\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n\tvar target = blob.l + length;\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tvar rgcb;\n\tif(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.118 TODO */\nfunction parse_SharedParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar rgcb, cce = blob.read_shift(2); // length of rgce\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\nfunction parse_FormulaValue(blob/*::, length*/) {\n\tvar b;\n\tif(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];\n\tswitch(blob[blob.l]) {\n\t\tcase 0x00: blob.l += 8; return [\"String\", 's'];\n\t\tcase 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];\n\t\tcase 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];\n\t\tcase 0x03: blob.l += 8; return [\"\",'s'];\n\t}\n\treturn [];\n}\nfunction write_FormulaValue(value) {\n\tif(value == null) {\n\t\t// Blank String Value\n\t\tvar o = new_buf(8);\n\t\to.write_shift(1, 0x03);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0xFFFF);\n\t\treturn o;\n\t} else if(typeof value == \"number\") return write_Xnum(value);\n\treturn write_Xnum(0);\n}\n\n/* [MS-XLS] 2.4.127 TODO */\nfunction parse_Formula(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) ++blob.l;\n\tvar val = parse_FormulaValue(blob,8);\n\tvar flags = blob.read_shift(1);\n\tif(opts.biff != 2) {\n\t\tblob.read_shift(1);\n\t\tif(opts.biff >= 5) {\n\t\t\t/*var chn = */blob.read_shift(4);\n\t\t}\n\t}\n\tvar cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n\treturn {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};\n}\nfunction write_Formula(cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, os/*:number*/) {\n\t// Cell\n\tvar o1 = write_XLSCell(R, C, os);\n\n\t// FormulaValue\n\tvar o2 = write_FormulaValue(cell.v);\n\n\t// flags + cache\n\tvar o3 = new_buf(6);\n\tvar flags = 0x01 | 0x20;\n\to3.write_shift(2, flags);\n\to3.write_shift(4, 0);\n\n\t// CellParsedFormula\n\tvar bf = new_buf(cell.bf.length);\n\tfor(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];\n\n\tvar out = bconcat([o1, o2, o3, bf]);\n\treturn out;\n}\n\n\n/* XLSB Parsed Formula records have the same shape */\nfunction parse_XLSBParsedFormula(data, length, opts) {\n\tvar cce = data.read_shift(4);\n\tvar rgce = parse_Rgce(data, cce, opts);\n\tvar cb = data.read_shift(4);\n\tvar rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\n\n/* Writes a PtgNum or PtgInt */\nfunction write_XLSBFormulaNum(val/*:number*/) {\n\tif((val | 0) == val && val < Math.pow(2,16) && val >= 0) {\n\t\tvar oint = new_buf(11);\n\t\toint.write_shift(4, 3);\n\t\toint.write_shift(1, 0x1e);\n\t\toint.write_shift(2, val);\n\t\toint.write_shift(4, 0);\n\t\treturn oint;\n\t}\n\n\tvar num = new_buf(17);\n\tnum.write_shift(4, 11);\n\tnum.write_shift(1, 0x1f);\n\tnum.write_shift(8, val);\n\tnum.write_shift(4, 0);\n\treturn num;\n}\n/* Writes a PtgErr */\nfunction write_XLSBFormulaErr(val/*:number*/) {\n\tvar oint = new_buf(10);\n\toint.write_shift(4, 2);\n\toint.write_shift(1, 0x1C);\n\toint.write_shift(1, val);\n\toint.write_shift(4, 0);\n\treturn oint;\n}\n/* Writes a PtgBool */\nfunction write_XLSBFormulaBool(val/*:boolean*/) {\n\tvar oint = new_buf(10);\n\toint.write_shift(4, 2);\n\toint.write_shift(1, 0x1D);\n\toint.write_shift(1, val?1:0);\n\toint.write_shift(4, 0);\n\treturn oint;\n}\n\n/* Writes a PtgStr */\nfunction write_XLSBFormulaStr(val/*:string*/) {\n\tvar preamble = new_buf(7);\n\tpreamble.write_shift(4, 3 + 2 * val.length);\n\tpreamble.write_shift(1, 0x17);\n\tpreamble.write_shift(2, val.length);\n\n\tvar body = new_buf(2 * val.length);\n\tbody.write_shift(2 * val.length, val, \"utf16le\");\n\n\tvar postamble = new_buf(4);\n\tpostamble.write_shift(4, 0);\n\n\treturn bconcat([preamble, body, postamble]);\n}\n\n/* Writes a PtgRef */\nfunction write_XLSBFormulaRef(str) {\n\tvar cell = decode_cell(str);\n\tvar out = new_buf(15);\n\tout.write_shift(4, 7);\n\tout.write_shift(1, 0x04 | ((1)<<5));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a PtgRef3d */\nfunction write_XLSBFormulaRef3D(str, wb) {\n\tvar lastbang = str.lastIndexOf(\"!\");\n\tvar sname = str.slice(0, lastbang);\n\tstr = str.slice(lastbang+1);\n\tvar cell = decode_cell(str);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\n\tvar out = new_buf(17);\n\tout.write_shift(4, 9);\n\tout.write_shift(1, 0x1A | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a PtgRefErr3d */\nfunction write_XLSBFormulaRefErr3D(str, wb) {\n\tvar lastbang = str.lastIndexOf(\"!\");\n\tvar sname = str.slice(0, lastbang);\n\tstr = str.slice(lastbang+1);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\n\tvar out = new_buf(17);\n\tout.write_shift(4, 9);\n\tout.write_shift(1, 0x1C | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, 0);\n\tout.write_shift(2, 0); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a single sheet range [PtgRef PtgRef PtgRange] */\nfunction write_XLSBFormulaRange(_str) {\n\tvar parts = _str.split(\":\"), str = parts[0];\n\n\tvar out = new_buf(23);\n\tout.write_shift(4, 15);\n\n\t/* start cell */\n\tstr = parts[0]; var cell = decode_cell(str);\n\tout.write_shift(1, 0x04 | ((1)<<5));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\t/* end cell */\n\tstr = parts[1]; cell = decode_cell(str);\n\tout.write_shift(1, 0x04 | ((1)<<5));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\t/* PtgRange */\n\tout.write_shift(1, 0x11);\n\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a range with explicit sheet name [PtgRef3D PtgRef3D PtgRange] */\nfunction write_XLSBFormulaRangeWS(_str, wb) {\n\tvar lastbang = _str.lastIndexOf(\"!\");\n\tvar sname = _str.slice(0, lastbang);\n\t_str = _str.slice(lastbang+1);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\tvar parts = _str.split(\":\"); str = parts[0];\n\n\tvar out = new_buf(27);\n\tout.write_shift(4, 19);\n\n\t/* start cell */\n\tvar str = parts[0], cell = decode_cell(str);\n\tout.write_shift(1, 0x1A | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\n\t/* end cell */\n\tstr = parts[1]; cell = decode_cell(str);\n\tout.write_shift(1, 0x1A | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\n\t/* PtgRange */\n\tout.write_shift(1, 0x11);\n\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a range with explicit sheet name [PtgArea3d] */\nfunction write_XLSBFormulaArea3D(_str, wb) {\n\tvar lastbang = _str.lastIndexOf(\"!\");\n\tvar sname = _str.slice(0, lastbang);\n\t_str = _str.slice(lastbang+1);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\tvar range = decode_range(_str);\n\n\tvar out = new_buf(23);\n\tout.write_shift(4, 15);\n\n\tout.write_shift(1, 0x1B | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, range.s.r);\n\tout.write_shift(4, range.e.r);\n\tout.write_shift(2, range.s.c);\n\tout.write_shift(2, range.e.c);\n\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n\n/* General Formula */\nfunction write_XLSBFormula(val/*:string|number*/, wb) {\n\tif(typeof val == \"number\") return write_XLSBFormulaNum(val);\n\tif(typeof val == \"boolean\") return write_XLSBFormulaBool(val);\n\tif(/^#(DIV\\/0!|GETTING_DATA|N\\/A|NAME\\?|NULL!|NUM!|REF!|VALUE!)$/.test(val)) return write_XLSBFormulaErr(+RBErr[val]);\n\tif(val.match(/^\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRef(val);\n\tif(val.match(/^\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5}):\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRange(val);\n\tif(val.match(/^#REF!\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5}):\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaArea3D(val, wb);\n\tif(val.match(/^(?:'[^\\\\\\/?*\\[\\]:]*'|[^'][^\\\\\\/?*\\[\\]:'`~!@#$%^()\\-=+{}|;,<.>]*)!\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRef3D(val, wb);\n\tif(val.match(/^(?:'[^\\\\\\/?*\\[\\]:]*'|[^'][^\\\\\\/?*\\[\\]:'`~!@#$%^()\\-=+{}|;,<.>]*)!\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5}):\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRangeWS(val, wb);\n\tif(/^(?:'[^\\\\\\/?*\\[\\]:]*'|[^'][^\\\\\\/?*\\[\\]:'`~!@#$%^()\\-=+{}|;,<.>]*)!#REF!$/.test(val)) return write_XLSBFormulaRefErr3D(val, wb);\n\tif(/^\".*\"$/.test(val)) return write_XLSBFormulaStr(val);\n\tif(/^[+-]\\d+$/.test(val)) return write_XLSBFormulaNum(parseInt(val, 10));\n\tthrow \"Formula |\" + val + \"| not supported for XLSB\";\n}\nvar write_XLSBNameParsedFormula = write_XLSBFormula;\nvar Cetab = {\n 0: \"BEEP\",\n 1: \"OPEN\",\n 2: \"OPEN.LINKS\",\n 3: \"CLOSE.ALL\",\n 4: \"SAVE\",\n 5: \"SAVE.AS\",\n 6: \"FILE.DELETE\",\n 7: \"PAGE.SETUP\",\n 8: \"PRINT\",\n 9: \"PRINTER.SETUP\",\n 10: \"QUIT\",\n 11: \"NEW.WINDOW\",\n 12: \"ARRANGE.ALL\",\n 13: \"WINDOW.SIZE\",\n 14: \"WINDOW.MOVE\",\n 15: \"FULL\",\n 16: \"CLOSE\",\n 17: \"RUN\",\n 22: \"SET.PRINT.AREA\",\n 23: \"SET.PRINT.TITLES\",\n 24: \"SET.PAGE.BREAK\",\n 25: \"REMOVE.PAGE.BREAK\",\n 26: \"FONT\",\n 27: \"DISPLAY\",\n 28: \"PROTECT.DOCUMENT\",\n 29: \"PRECISION\",\n 30: \"A1.R1C1\",\n 31: \"CALCULATE.NOW\",\n 32: \"CALCULATION\",\n 34: \"DATA.FIND\",\n 35: \"EXTRACT\",\n 36: \"DATA.DELETE\",\n 37: \"SET.DATABASE\",\n 38: \"SET.CRITERIA\",\n 39: \"SORT\",\n 40: \"DATA.SERIES\",\n 41: \"TABLE\",\n 42: \"FORMAT.NUMBER\",\n 43: \"ALIGNMENT\",\n 44: \"STYLE\",\n 45: \"BORDER\",\n 46: \"CELL.PROTECTION\",\n 47: \"COLUMN.WIDTH\",\n 48: \"UNDO\",\n 49: \"CUT\",\n 50: \"COPY\",\n 51: \"PASTE\",\n 52: \"CLEAR\",\n 53: \"PASTE.SPECIAL\",\n 54: \"EDIT.DELETE\",\n 55: \"INSERT\",\n 56: \"FILL.RIGHT\",\n 57: \"FILL.DOWN\",\n 61: \"DEFINE.NAME\",\n 62: \"CREATE.NAMES\",\n 63: \"FORMULA.GOTO\",\n 64: \"FORMULA.FIND\",\n 65: \"SELECT.LAST.CELL\",\n 66: \"SHOW.ACTIVE.CELL\",\n 67: \"GALLERY.AREA\",\n 68: \"GALLERY.BAR\",\n 69: \"GALLERY.COLUMN\",\n 70: \"GALLERY.LINE\",\n 71: \"GALLERY.PIE\",\n 72: \"GALLERY.SCATTER\",\n 73: \"COMBINATION\",\n 74: \"PREFERRED\",\n 75: \"ADD.OVERLAY\",\n 76: \"GRIDLINES\",\n 77: \"SET.PREFERRED\",\n 78: \"AXES\",\n 79: \"LEGEND\",\n 80: \"ATTACH.TEXT\",\n 81: \"ADD.ARROW\",\n 82: \"SELECT.CHART\",\n 83: \"SELECT.PLOT.AREA\",\n 84: \"PATTERNS\",\n 85: \"MAIN.CHART\",\n 86: \"OVERLAY\",\n 87: \"SCALE\",\n 88: \"FORMAT.LEGEND\",\n 89: \"FORMAT.TEXT\",\n 90: \"EDIT.REPEAT\",\n 91: \"PARSE\",\n 92: \"JUSTIFY\",\n 93: \"HIDE\",\n 94: \"UNHIDE\",\n 95: \"WORKSPACE\",\n 96: \"FORMULA\",\n 97: \"FORMULA.FILL\",\n 98: \"FORMULA.ARRAY\",\n 99: \"DATA.FIND.NEXT\",\n 100: \"DATA.FIND.PREV\",\n 101: \"FORMULA.FIND.NEXT\",\n 102: \"FORMULA.FIND.PREV\",\n 103: \"ACTIVATE\",\n 104: \"ACTIVATE.NEXT\",\n 105: \"ACTIVATE.PREV\",\n 106: \"UNLOCKED.NEXT\",\n 107: \"UNLOCKED.PREV\",\n 108: \"COPY.PICTURE\",\n 109: \"SELECT\",\n 110: \"DELETE.NAME\",\n 111: \"DELETE.FORMAT\",\n 112: \"VLINE\",\n 113: \"HLINE\",\n 114: \"VPAGE\",\n 115: \"HPAGE\",\n 116: \"VSCROLL\",\n 117: \"HSCROLL\",\n 118: \"ALERT\",\n 119: \"NEW\",\n 120: \"CANCEL.COPY\",\n 121: \"SHOW.CLIPBOARD\",\n 122: \"MESSAGE\",\n 124: \"PASTE.LINK\",\n 125: \"APP.ACTIVATE\",\n 126: \"DELETE.ARROW\",\n 127: \"ROW.HEIGHT\",\n 128: \"FORMAT.MOVE\",\n 129: \"FORMAT.SIZE\",\n 130: \"FORMULA.REPLACE\",\n 131: \"SEND.KEYS\",\n 132: \"SELECT.SPECIAL\",\n 133: \"APPLY.NAMES\",\n 134: \"REPLACE.FONT\",\n 135: \"FREEZE.PANES\",\n 136: \"SHOW.INFO\",\n 137: \"SPLIT\",\n 138: \"ON.WINDOW\",\n 139: \"ON.DATA\",\n 140: \"DISABLE.INPUT\",\n 142: \"OUTLINE\",\n 143: \"LIST.NAMES\",\n 144: \"FILE.CLOSE\",\n 145: \"SAVE.WORKBOOK\",\n 146: \"DATA.FORM\",\n 147: \"COPY.CHART\",\n 148: \"ON.TIME\",\n 149: \"WAIT\",\n 150: \"FORMAT.FONT\",\n 151: \"FILL.UP\",\n 152: \"FILL.LEFT\",\n 153: \"DELETE.OVERLAY\",\n 155: \"SHORT.MENUS\",\n 159: \"SET.UPDATE.STATUS\",\n 161: \"COLOR.PALETTE\",\n 162: \"DELETE.STYLE\",\n 163: \"WINDOW.RESTORE\",\n 164: \"WINDOW.MAXIMIZE\",\n 166: \"CHANGE.LINK\",\n 167: \"CALCULATE.DOCUMENT\",\n 168: \"ON.KEY\",\n 169: \"APP.RESTORE\",\n 170: \"APP.MOVE\",\n 171: \"APP.SIZE\",\n 172: \"APP.MINIMIZE\",\n 173: \"APP.MAXIMIZE\",\n 174: \"BRING.TO.FRONT\",\n 175: \"SEND.TO.BACK\",\n 185: \"MAIN.CHART.TYPE\",\n 186: \"OVERLAY.CHART.TYPE\",\n 187: \"SELECT.END\",\n 188: \"OPEN.MAIL\",\n 189: \"SEND.MAIL\",\n 190: \"STANDARD.FONT\",\n 191: \"CONSOLIDATE\",\n 192: \"SORT.SPECIAL\",\n 193: \"GALLERY.3D.AREA\",\n 194: \"GALLERY.3D.COLUMN\",\n 195: \"GALLERY.3D.LINE\",\n 196: \"GALLERY.3D.PIE\",\n 197: \"VIEW.3D\",\n 198: \"GOAL.SEEK\",\n 199: \"WORKGROUP\",\n 200: \"FILL.GROUP\",\n 201: \"UPDATE.LINK\",\n 202: \"PROMOTE\",\n 203: \"DEMOTE\",\n 204: \"SHOW.DETAIL\",\n 206: \"UNGROUP\",\n 207: \"OBJECT.PROPERTIES\",\n 208: \"SAVE.NEW.OBJECT\",\n 209: \"SHARE\",\n 210: \"SHARE.NAME\",\n 211: \"DUPLICATE\",\n 212: \"APPLY.STYLE\",\n 213: \"ASSIGN.TO.OBJECT\",\n 214: \"OBJECT.PROTECTION\",\n 215: \"HIDE.OBJECT\",\n 216: \"SET.EXTRACT\",\n 217: \"CREATE.PUBLISHER\",\n 218: \"SUBSCRIBE.TO\",\n 219: \"ATTRIBUTES\",\n 220: \"SHOW.TOOLBAR\",\n 222: \"PRINT.PREVIEW\",\n 223: \"EDIT.COLOR\",\n 224: \"SHOW.LEVELS\",\n 225: \"FORMAT.MAIN\",\n 226: \"FORMAT.OVERLAY\",\n 227: \"ON.RECALC\",\n 228: \"EDIT.SERIES\",\n 229: \"DEFINE.STYLE\",\n 240: \"LINE.PRINT\",\n 243: \"ENTER.DATA\",\n 249: \"GALLERY.RADAR\",\n 250: \"MERGE.STYLES\",\n 251: \"EDITION.OPTIONS\",\n 252: \"PASTE.PICTURE\",\n 253: \"PASTE.PICTURE.LINK\",\n 254: \"SPELLING\",\n 256: \"ZOOM\",\n 259: \"INSERT.OBJECT\",\n 260: \"WINDOW.MINIMIZE\",\n 265: \"SOUND.NOTE\",\n 266: \"SOUND.PLAY\",\n 267: \"FORMAT.SHAPE\",\n 268: \"EXTEND.POLYGON\",\n 269: \"FORMAT.AUTO\",\n 272: \"GALLERY.3D.BAR\",\n 273: \"GALLERY.3D.SURFACE\",\n 274: \"FILL.AUTO\",\n 276: \"CUSTOMIZE.TOOLBAR\",\n 277: \"ADD.TOOL\",\n 278: \"EDIT.OBJECT\",\n 279: \"ON.DOUBLECLICK\",\n 280: \"ON.ENTRY\",\n 281: \"WORKBOOK.ADD\",\n 282: \"WORKBOOK.MOVE\",\n 283: \"WORKBOOK.COPY\",\n 284: \"WORKBOOK.OPTIONS\",\n 285: \"SAVE.WORKSPACE\",\n 288: \"CHART.WIZARD\",\n 289: \"DELETE.TOOL\",\n 290: \"MOVE.TOOL\",\n 291: \"WORKBOOK.SELECT\",\n 292: \"WORKBOOK.ACTIVATE\",\n 293: \"ASSIGN.TO.TOOL\",\n 295: \"COPY.TOOL\",\n 296: \"RESET.TOOL\",\n 297: \"CONSTRAIN.NUMERIC\",\n 298: \"PASTE.TOOL\",\n 302: \"WORKBOOK.NEW\",\n 305: \"SCENARIO.CELLS\",\n 306: \"SCENARIO.DELETE\",\n 307: \"SCENARIO.ADD\",\n 308: \"SCENARIO.EDIT\",\n 309: \"SCENARIO.SHOW\",\n 310: \"SCENARIO.SHOW.NEXT\",\n 311: \"SCENARIO.SUMMARY\",\n 312: \"PIVOT.TABLE.WIZARD\",\n 313: \"PIVOT.FIELD.PROPERTIES\",\n 314: \"PIVOT.FIELD\",\n 315: \"PIVOT.ITEM\",\n 316: \"PIVOT.ADD.FIELDS\",\n 318: \"OPTIONS.CALCULATION\",\n 319: \"OPTIONS.EDIT\",\n 320: \"OPTIONS.VIEW\",\n 321: \"ADDIN.MANAGER\",\n 322: \"MENU.EDITOR\",\n 323: \"ATTACH.TOOLBARS\",\n 324: \"VBAActivate\",\n 325: \"OPTIONS.CHART\",\n 328: \"VBA.INSERT.FILE\",\n 330: \"VBA.PROCEDURE.DEFINITION\",\n 336: \"ROUTING.SLIP\",\n 338: \"ROUTE.DOCUMENT\",\n 339: \"MAIL.LOGON\",\n 342: \"INSERT.PICTURE\",\n 343: \"EDIT.TOOL\",\n 344: \"GALLERY.DOUGHNUT\",\n 350: \"CHART.TREND\",\n 352: \"PIVOT.ITEM.PROPERTIES\",\n 354: \"WORKBOOK.INSERT\",\n 355: \"OPTIONS.TRANSITION\",\n 356: \"OPTIONS.GENERAL\",\n 370: \"FILTER.ADVANCED\",\n 373: \"MAIL.ADD.MAILER\",\n 374: \"MAIL.DELETE.MAILER\",\n 375: \"MAIL.REPLY\",\n 376: \"MAIL.REPLY.ALL\",\n 377: \"MAIL.FORWARD\",\n 378: \"MAIL.NEXT.LETTER\",\n 379: \"DATA.LABEL\",\n 380: \"INSERT.TITLE\",\n 381: \"FONT.PROPERTIES\",\n 382: \"MACRO.OPTIONS\",\n 383: \"WORKBOOK.HIDE\",\n 384: \"WORKBOOK.UNHIDE\",\n 385: \"WORKBOOK.DELETE\",\n 386: \"WORKBOOK.NAME\",\n 388: \"GALLERY.CUSTOM\",\n 390: \"ADD.CHART.AUTOFORMAT\",\n 391: \"DELETE.CHART.AUTOFORMAT\",\n 392: \"CHART.ADD.DATA\",\n 393: \"AUTO.OUTLINE\",\n 394: \"TAB.ORDER\",\n 395: \"SHOW.DIALOG\",\n 396: \"SELECT.ALL\",\n 397: \"UNGROUP.SHEETS\",\n 398: \"SUBTOTAL.CREATE\",\n 399: \"SUBTOTAL.REMOVE\",\n 400: \"RENAME.OBJECT\",\n 412: \"WORKBOOK.SCROLL\",\n 413: \"WORKBOOK.NEXT\",\n 414: \"WORKBOOK.PREV\",\n 415: \"WORKBOOK.TAB.SPLIT\",\n 416: \"FULL.SCREEN\",\n 417: \"WORKBOOK.PROTECT\",\n 420: \"SCROLLBAR.PROPERTIES\",\n 421: \"PIVOT.SHOW.PAGES\",\n 422: \"TEXT.TO.COLUMNS\",\n 423: \"FORMAT.CHARTTYPE\",\n 424: \"LINK.FORMAT\",\n 425: \"TRACER.DISPLAY\",\n 430: \"TRACER.NAVIGATE\",\n 431: \"TRACER.CLEAR\",\n 432: \"TRACER.ERROR\",\n 433: \"PIVOT.FIELD.GROUP\",\n 434: \"PIVOT.FIELD.UNGROUP\",\n 435: \"CHECKBOX.PROPERTIES\",\n 436: \"LABEL.PROPERTIES\",\n 437: \"LISTBOX.PROPERTIES\",\n 438: \"EDITBOX.PROPERTIES\",\n 439: \"PIVOT.REFRESH\",\n 440: \"LINK.COMBO\",\n 441: \"OPEN.TEXT\",\n 442: \"HIDE.DIALOG\",\n 443: \"SET.DIALOG.FOCUS\",\n 444: \"ENABLE.OBJECT\",\n 445: \"PUSHBUTTON.PROPERTIES\",\n 446: \"SET.DIALOG.DEFAULT\",\n 447: \"FILTER\",\n 448: \"FILTER.SHOW.ALL\",\n 449: \"CLEAR.OUTLINE\",\n 450: \"FUNCTION.WIZARD\",\n 451: \"ADD.LIST.ITEM\",\n 452: \"SET.LIST.ITEM\",\n 453: \"REMOVE.LIST.ITEM\",\n 454: \"SELECT.LIST.ITEM\",\n 455: \"SET.CONTROL.VALUE\",\n 456: \"SAVE.COPY.AS\",\n 458: \"OPTIONS.LISTS.ADD\",\n 459: \"OPTIONS.LISTS.DELETE\",\n 460: \"SERIES.AXES\",\n 461: \"SERIES.X\",\n 462: \"SERIES.Y\",\n 463: \"ERRORBAR.X\",\n 464: \"ERRORBAR.Y\",\n 465: \"FORMAT.CHART\",\n 466: \"SERIES.ORDER\",\n 467: \"MAIL.LOGOFF\",\n 468: \"CLEAR.ROUTING.SLIP\",\n 469: \"APP.ACTIVATE.MICROSOFT\",\n 470: \"MAIL.EDIT.MAILER\",\n 471: \"ON.SHEET\",\n 472: \"STANDARD.WIDTH\",\n 473: \"SCENARIO.MERGE\",\n 474: \"SUMMARY.INFO\",\n 475: \"FIND.FILE\",\n 476: \"ACTIVE.CELL.FONT\",\n 477: \"ENABLE.TIPWIZARD\",\n 478: \"VBA.MAKE.ADDIN\",\n 480: \"INSERTDATATABLE\",\n 481: \"WORKGROUP.OPTIONS\",\n 482: \"MAIL.SEND.MAILER\",\n 485: \"AUTOCORRECT\",\n 489: \"POST.DOCUMENT\",\n 491: \"PICKLIST\",\n 493: \"VIEW.SHOW\",\n 494: \"VIEW.DEFINE\",\n 495: \"VIEW.DELETE\",\n 509: \"SHEET.BACKGROUND\",\n 510: \"INSERT.MAP.OBJECT\",\n 511: \"OPTIONS.MENONO\",\n 517: \"MSOCHECKS\",\n 518: \"NORMAL\",\n 519: \"LAYOUT\",\n 520: \"RM.PRINT.AREA\",\n 521: \"CLEAR.PRINT.AREA\",\n 522: \"ADD.PRINT.AREA\",\n 523: \"MOVE.BRK\",\n 545: \"HIDECURR.NOTE\",\n 546: \"HIDEALL.NOTES\",\n 547: \"DELETE.NOTE\",\n 548: \"TRAVERSE.NOTES\",\n 549: \"ACTIVATE.NOTES\",\n 620: \"PROTECT.REVISIONS\",\n 621: \"UNPROTECT.REVISIONS\",\n 647: \"OPTIONS.ME\",\n 653: \"WEB.PUBLISH\",\n 667: \"NEWWEBQUERY\",\n 673: \"PIVOT.TABLE.CHART\",\n 753: \"OPTIONS.SAVE\",\n 755: \"OPTIONS.SPELL\",\n 808: \"HIDEALL.INKANNOTS\"\n};\nvar Ftab = {\n 0: \"COUNT\",\n 1: \"IF\",\n 2: \"ISNA\",\n 3: \"ISERROR\",\n 4: \"SUM\",\n 5: \"AVERAGE\",\n 6: \"MIN\",\n 7: \"MAX\",\n 8: \"ROW\",\n 9: \"COLUMN\",\n 10: \"NA\",\n 11: \"NPV\",\n 12: \"STDEV\",\n 13: \"DOLLAR\",\n 14: \"FIXED\",\n 15: \"SIN\",\n 16: \"COS\",\n 17: \"TAN\",\n 18: \"ATAN\",\n 19: \"PI\",\n 20: \"SQRT\",\n 21: \"EXP\",\n 22: \"LN\",\n 23: \"LOG10\",\n 24: \"ABS\",\n 25: \"INT\",\n 26: \"SIGN\",\n 27: \"ROUND\",\n 28: \"LOOKUP\",\n 29: \"INDEX\",\n 30: \"REPT\",\n 31: \"MID\",\n 32: \"LEN\",\n 33: \"VALUE\",\n 34: \"TRUE\",\n 35: \"FALSE\",\n 36: \"AND\",\n 37: \"OR\",\n 38: \"NOT\",\n 39: \"MOD\",\n 40: \"DCOUNT\",\n 41: \"DSUM\",\n 42: \"DAVERAGE\",\n 43: \"DMIN\",\n 44: \"DMAX\",\n 45: \"DSTDEV\",\n 46: \"VAR\",\n 47: \"DVAR\",\n 48: \"TEXT\",\n 49: \"LINEST\",\n 50: \"TREND\",\n 51: \"LOGEST\",\n 52: \"GROWTH\",\n 53: \"GOTO\",\n 54: \"HALT\",\n 55: \"RETURN\",\n 56: \"PV\",\n 57: \"FV\",\n 58: \"NPER\",\n 59: \"PMT\",\n 60: \"RATE\",\n 61: \"MIRR\",\n 62: \"IRR\",\n 63: \"RAND\",\n 64: \"MATCH\",\n 65: \"DATE\",\n 66: \"TIME\",\n 67: \"DAY\",\n 68: \"MONTH\",\n 69: \"YEAR\",\n 70: \"WEEKDAY\",\n 71: \"HOUR\",\n 72: \"MINUTE\",\n 73: \"SECOND\",\n 74: \"NOW\",\n 75: \"AREAS\",\n 76: \"ROWS\",\n 77: \"COLUMNS\",\n 78: \"OFFSET\",\n 79: \"ABSREF\",\n 80: \"RELREF\",\n 81: \"ARGUMENT\",\n 82: \"SEARCH\",\n 83: \"TRANSPOSE\",\n 84: \"ERROR\",\n 85: \"STEP\",\n 86: \"TYPE\",\n 87: \"ECHO\",\n 88: \"SET.NAME\",\n 89: \"CALLER\",\n 90: \"DEREF\",\n 91: \"WINDOWS\",\n 92: \"SERIES\",\n 93: \"DOCUMENTS\",\n 94: \"ACTIVE.CELL\",\n 95: \"SELECTION\",\n 96: \"RESULT\",\n 97: \"ATAN2\",\n 98: \"ASIN\",\n 99: \"ACOS\",\n 100: \"CHOOSE\",\n 101: \"HLOOKUP\",\n 102: \"VLOOKUP\",\n 103: \"LINKS\",\n 104: \"INPUT\",\n 105: \"ISREF\",\n 106: \"GET.FORMULA\",\n 107: \"GET.NAME\",\n 108: \"SET.VALUE\",\n 109: \"LOG\",\n 110: \"EXEC\",\n 111: \"CHAR\",\n 112: \"LOWER\",\n 113: \"UPPER\",\n 114: \"PROPER\",\n 115: \"LEFT\",\n 116: \"RIGHT\",\n 117: \"EXACT\",\n 118: \"TRIM\",\n 119: \"REPLACE\",\n 120: \"SUBSTITUTE\",\n 121: \"CODE\",\n 122: \"NAMES\",\n 123: \"DIRECTORY\",\n 124: \"FIND\",\n 125: \"CELL\",\n 126: \"ISERR\",\n 127: \"ISTEXT\",\n 128: \"ISNUMBER\",\n 129: \"ISBLANK\",\n 130: \"T\",\n 131: \"N\",\n 132: \"FOPEN\",\n 133: \"FCLOSE\",\n 134: \"FSIZE\",\n 135: \"FREADLN\",\n 136: \"FREAD\",\n 137: \"FWRITELN\",\n 138: \"FWRITE\",\n 139: \"FPOS\",\n 140: \"DATEVALUE\",\n 141: \"TIMEVALUE\",\n 142: \"SLN\",\n 143: \"SYD\",\n 144: \"DDB\",\n 145: \"GET.DEF\",\n 146: \"REFTEXT\",\n 147: \"TEXTREF\",\n 148: \"INDIRECT\",\n 149: \"REGISTER\",\n 150: \"CALL\",\n 151: \"ADD.BAR\",\n 152: \"ADD.MENU\",\n 153: \"ADD.COMMAND\",\n 154: \"ENABLE.COMMAND\",\n 155: \"CHECK.COMMAND\",\n 156: \"RENAME.COMMAND\",\n 157: \"SHOW.BAR\",\n 158: \"DELETE.MENU\",\n 159: \"DELETE.COMMAND\",\n 160: \"GET.CHART.ITEM\",\n 161: \"DIALOG.BOX\",\n 162: \"CLEAN\",\n 163: \"MDETERM\",\n 164: \"MINVERSE\",\n 165: \"MMULT\",\n 166: \"FILES\",\n 167: \"IPMT\",\n 168: \"PPMT\",\n 169: \"COUNTA\",\n 170: \"CANCEL.KEY\",\n 171: \"FOR\",\n 172: \"WHILE\",\n 173: \"BREAK\",\n 174: \"NEXT\",\n 175: \"INITIATE\",\n 176: \"REQUEST\",\n 177: \"POKE\",\n 178: \"EXECUTE\",\n 179: \"TERMINATE\",\n 180: \"RESTART\",\n 181: \"HELP\",\n 182: \"GET.BAR\",\n 183: \"PRODUCT\",\n 184: \"FACT\",\n 185: \"GET.CELL\",\n 186: \"GET.WORKSPACE\",\n 187: \"GET.WINDOW\",\n 188: \"GET.DOCUMENT\",\n 189: \"DPRODUCT\",\n 190: \"ISNONTEXT\",\n 191: \"GET.NOTE\",\n 192: \"NOTE\",\n 193: \"STDEVP\",\n 194: \"VARP\",\n 195: \"DSTDEVP\",\n 196: \"DVARP\",\n 197: \"TRUNC\",\n 198: \"ISLOGICAL\",\n 199: \"DCOUNTA\",\n 200: \"DELETE.BAR\",\n 201: \"UNREGISTER\",\n 204: \"USDOLLAR\",\n 205: \"FINDB\",\n 206: \"SEARCHB\",\n 207: \"REPLACEB\",\n 208: \"LEFTB\",\n 209: \"RIGHTB\",\n 210: \"MIDB\",\n 211: \"LENB\",\n 212: \"ROUNDUP\",\n 213: \"ROUNDDOWN\",\n 214: \"ASC\",\n 215: \"DBCS\",\n 216: \"RANK\",\n 219: \"ADDRESS\",\n 220: \"DAYS360\",\n 221: \"TODAY\",\n 222: \"VDB\",\n 223: \"ELSE\",\n 224: \"ELSE.IF\",\n 225: \"END.IF\",\n 226: \"FOR.CELL\",\n 227: \"MEDIAN\",\n 228: \"SUMPRODUCT\",\n 229: \"SINH\",\n 230: \"COSH\",\n 231: \"TANH\",\n 232: \"ASINH\",\n 233: \"ACOSH\",\n 234: \"ATANH\",\n 235: \"DGET\",\n 236: \"CREATE.OBJECT\",\n 237: \"VOLATILE\",\n 238: \"LAST.ERROR\",\n 239: \"CUSTOM.UNDO\",\n 240: \"CUSTOM.REPEAT\",\n 241: \"FORMULA.CONVERT\",\n 242: \"GET.LINK.INFO\",\n 243: \"TEXT.BOX\",\n 244: \"INFO\",\n 245: \"GROUP\",\n 246: \"GET.OBJECT\",\n 247: \"DB\",\n 248: \"PAUSE\",\n 251: \"RESUME\",\n 252: \"FREQUENCY\",\n 253: \"ADD.TOOLBAR\",\n 254: \"DELETE.TOOLBAR\",\n 255: \"User\",\n 256: \"RESET.TOOLBAR\",\n 257: \"EVALUATE\",\n 258: \"GET.TOOLBAR\",\n 259: \"GET.TOOL\",\n 260: \"SPELLING.CHECK\",\n 261: \"ERROR.TYPE\",\n 262: \"APP.TITLE\",\n 263: \"WINDOW.TITLE\",\n 264: \"SAVE.TOOLBAR\",\n 265: \"ENABLE.TOOL\",\n 266: \"PRESS.TOOL\",\n 267: \"REGISTER.ID\",\n 268: \"GET.WORKBOOK\",\n 269: \"AVEDEV\",\n 270: \"BETADIST\",\n 271: \"GAMMALN\",\n 272: \"BETAINV\",\n 273: \"BINOMDIST\",\n 274: \"CHIDIST\",\n 275: \"CHIINV\",\n 276: \"COMBIN\",\n 277: \"CONFIDENCE\",\n 278: \"CRITBINOM\",\n 279: \"EVEN\",\n 280: \"EXPONDIST\",\n 281: \"FDIST\",\n 282: \"FINV\",\n 283: \"FISHER\",\n 284: \"FISHERINV\",\n 285: \"FLOOR\",\n 286: \"GAMMADIST\",\n 287: \"GAMMAINV\",\n 288: \"CEILING\",\n 289: \"HYPGEOMDIST\",\n 290: \"LOGNORMDIST\",\n 291: \"LOGINV\",\n 292: \"NEGBINOMDIST\",\n 293: \"NORMDIST\",\n 294: \"NORMSDIST\",\n 295: \"NORMINV\",\n 296: \"NORMSINV\",\n 297: \"STANDARDIZE\",\n 298: \"ODD\",\n 299: \"PERMUT\",\n 300: \"POISSON\",\n 301: \"TDIST\",\n 302: \"WEIBULL\",\n 303: \"SUMXMY2\",\n 304: \"SUMX2MY2\",\n 305: \"SUMX2PY2\",\n 306: \"CHITEST\",\n 307: \"CORREL\",\n 308: \"COVAR\",\n 309: \"FORECAST\",\n 310: \"FTEST\",\n 311: \"INTERCEPT\",\n 312: \"PEARSON\",\n 313: \"RSQ\",\n 314: \"STEYX\",\n 315: \"SLOPE\",\n 316: \"TTEST\",\n 317: \"PROB\",\n 318: \"DEVSQ\",\n 319: \"GEOMEAN\",\n 320: \"HARMEAN\",\n 321: \"SUMSQ\",\n 322: \"KURT\",\n 323: \"SKEW\",\n 324: \"ZTEST\",\n 325: \"LARGE\",\n 326: \"SMALL\",\n 327: \"QUARTILE\",\n 328: \"PERCENTILE\",\n 329: \"PERCENTRANK\",\n 330: \"MODE\",\n 331: \"TRIMMEAN\",\n 332: \"TINV\",\n 334: \"MOVIE.COMMAND\",\n 335: \"GET.MOVIE\",\n 336: \"CONCATENATE\",\n 337: \"POWER\",\n 338: \"PIVOT.ADD.DATA\",\n 339: \"GET.PIVOT.TABLE\",\n 340: \"GET.PIVOT.FIELD\",\n 341: \"GET.PIVOT.ITEM\",\n 342: \"RADIANS\",\n 343: \"DEGREES\",\n 344: \"SUBTOTAL\",\n 345: \"SUMIF\",\n 346: \"COUNTIF\",\n 347: \"COUNTBLANK\",\n 348: \"SCENARIO.GET\",\n 349: \"OPTIONS.LISTS.GET\",\n 350: \"ISPMT\",\n 351: \"DATEDIF\",\n 352: \"DATESTRING\",\n 353: \"NUMBERSTRING\",\n 354: \"ROMAN\",\n 355: \"OPEN.DIALOG\",\n 356: \"SAVE.DIALOG\",\n 357: \"VIEW.GET\",\n 358: \"GETPIVOTDATA\",\n 359: \"HYPERLINK\",\n 360: \"PHONETIC\",\n 361: \"AVERAGEA\",\n 362: \"MAXA\",\n 363: \"MINA\",\n 364: \"STDEVPA\",\n 365: \"VARPA\",\n 366: \"STDEVA\",\n 367: \"VARA\",\n 368: \"BAHTTEXT\",\n 369: \"THAIDAYOFWEEK\",\n 370: \"THAIDIGIT\",\n 371: \"THAIMONTHOFYEAR\",\n 372: \"THAINUMSOUND\",\n 373: \"THAINUMSTRING\",\n 374: \"THAISTRINGLENGTH\",\n 375: \"ISTHAIDIGIT\",\n 376: \"ROUNDBAHTDOWN\",\n 377: \"ROUNDBAHTUP\",\n 378: \"THAIYEAR\",\n 379: \"RTD\",\n 380: \"CUBEVALUE\",\n 381: \"CUBEMEMBER\",\n 382: \"CUBEMEMBERPROPERTY\",\n 383: \"CUBERANKEDMEMBER\",\n 384: \"HEX2BIN\",\n 385: \"HEX2DEC\",\n 386: \"HEX2OCT\",\n 387: \"DEC2BIN\",\n 388: \"DEC2HEX\",\n 389: \"DEC2OCT\",\n 390: \"OCT2BIN\",\n 391: \"OCT2HEX\",\n 392: \"OCT2DEC\",\n 393: \"BIN2DEC\",\n 394: \"BIN2OCT\",\n 395: \"BIN2HEX\",\n 396: \"IMSUB\",\n 397: \"IMDIV\",\n 398: \"IMPOWER\",\n 399: \"IMABS\",\n 400: \"IMSQRT\",\n 401: \"IMLN\",\n 402: \"IMLOG2\",\n 403: \"IMLOG10\",\n 404: \"IMSIN\",\n 405: \"IMCOS\",\n 406: \"IMEXP\",\n 407: \"IMARGUMENT\",\n 408: \"IMCONJUGATE\",\n 409: \"IMAGINARY\",\n 410: \"IMREAL\",\n 411: \"COMPLEX\",\n 412: \"IMSUM\",\n 413: \"IMPRODUCT\",\n 414: \"SERIESSUM\",\n 415: \"FACTDOUBLE\",\n 416: \"SQRTPI\",\n 417: \"QUOTIENT\",\n 418: \"DELTA\",\n 419: \"GESTEP\",\n 420: \"ISEVEN\",\n 421: \"ISODD\",\n 422: \"MROUND\",\n 423: \"ERF\",\n 424: \"ERFC\",\n 425: \"BESSELJ\",\n 426: \"BESSELK\",\n 427: \"BESSELY\",\n 428: \"BESSELI\",\n 429: \"XIRR\",\n 430: \"XNPV\",\n 431: \"PRICEMAT\",\n 432: \"YIELDMAT\",\n 433: \"INTRATE\",\n 434: \"RECEIVED\",\n 435: \"DISC\",\n 436: \"PRICEDISC\",\n 437: \"YIELDDISC\",\n 438: \"TBILLEQ\",\n 439: \"TBILLPRICE\",\n 440: \"TBILLYIELD\",\n 441: \"PRICE\",\n 442: \"YIELD\",\n 443: \"DOLLARDE\",\n 444: \"DOLLARFR\",\n 445: \"NOMINAL\",\n 446: \"EFFECT\",\n 447: \"CUMPRINC\",\n 448: \"CUMIPMT\",\n 449: \"EDATE\",\n 450: \"EOMONTH\",\n 451: \"YEARFRAC\",\n 452: \"COUPDAYBS\",\n 453: \"COUPDAYS\",\n 454: \"COUPDAYSNC\",\n 455: \"COUPNCD\",\n 456: \"COUPNUM\",\n 457: \"COUPPCD\",\n 458: \"DURATION\",\n 459: \"MDURATION\",\n 460: \"ODDLPRICE\",\n 461: \"ODDLYIELD\",\n 462: \"ODDFPRICE\",\n 463: \"ODDFYIELD\",\n 464: \"RANDBETWEEN\",\n 465: \"WEEKNUM\",\n 466: \"AMORDEGRC\",\n 467: \"AMORLINC\",\n 468: \"CONVERT\",\n 724: \"SHEETJS\",\n 469: \"ACCRINT\",\n 470: \"ACCRINTM\",\n 471: \"WORKDAY\",\n 472: \"NETWORKDAYS\",\n 473: \"GCD\",\n 474: \"MULTINOMIAL\",\n 475: \"LCM\",\n 476: \"FVSCHEDULE\",\n 477: \"CUBEKPIMEMBER\",\n 478: \"CUBESET\",\n 479: \"CUBESETCOUNT\",\n 480: \"IFERROR\",\n 481: \"COUNTIFS\",\n 482: \"SUMIFS\",\n 483: \"AVERAGEIF\",\n 484: \"AVERAGEIFS\"\n};\nvar FtabArgc = {\n 2: 1,\n 3: 1,\n 10: 0,\n 15: 1,\n 16: 1,\n 17: 1,\n 18: 1,\n 19: 0,\n 20: 1,\n 21: 1,\n 22: 1,\n 23: 1,\n 24: 1,\n 25: 1,\n 26: 1,\n 27: 2,\n 30: 2,\n 31: 3,\n 32: 1,\n 33: 1,\n 34: 0,\n 35: 0,\n 38: 1,\n 39: 2,\n 40: 3,\n 41: 3,\n 42: 3,\n 43: 3,\n 44: 3,\n 45: 3,\n 47: 3,\n 48: 2,\n 53: 1,\n 61: 3,\n 63: 0,\n 65: 3,\n 66: 3,\n 67: 1,\n 68: 1,\n 69: 1,\n 70: 1,\n 71: 1,\n 72: 1,\n 73: 1,\n 74: 0,\n 75: 1,\n 76: 1,\n 77: 1,\n 79: 2,\n 80: 2,\n 83: 1,\n 85: 0,\n 86: 1,\n 89: 0,\n 90: 1,\n 94: 0,\n 95: 0,\n 97: 2,\n 98: 1,\n 99: 1,\n 101: 3,\n 102: 3,\n 105: 1,\n 106: 1,\n 108: 2,\n 111: 1,\n 112: 1,\n 113: 1,\n 114: 1,\n 117: 2,\n 118: 1,\n 119: 4,\n 121: 1,\n 126: 1,\n 127: 1,\n 128: 1,\n 129: 1,\n 130: 1,\n 131: 1,\n 133: 1,\n 134: 1,\n 135: 1,\n 136: 2,\n 137: 2,\n 138: 2,\n 140: 1,\n 141: 1,\n 142: 3,\n 143: 4,\n 144: 4,\n 161: 1,\n 162: 1,\n 163: 1,\n 164: 1,\n 165: 2,\n 172: 1,\n 175: 2,\n 176: 2,\n 177: 3,\n 178: 2,\n 179: 1,\n 184: 1,\n 186: 1,\n 189: 3,\n 190: 1,\n 195: 3,\n 196: 3,\n 197: 1,\n 198: 1,\n 199: 3,\n 201: 1,\n 207: 4,\n 210: 3,\n 211: 1,\n 212: 2,\n 213: 2,\n 214: 1,\n 215: 1,\n 225: 0,\n 229: 1,\n 230: 1,\n 231: 1,\n 232: 1,\n 233: 1,\n 234: 1,\n 235: 3,\n 244: 1,\n 247: 4,\n 252: 2,\n 257: 1,\n 261: 1,\n 271: 1,\n 273: 4,\n 274: 2,\n 275: 2,\n 276: 2,\n 277: 3,\n 278: 3,\n 279: 1,\n 280: 3,\n 281: 3,\n 282: 3,\n 283: 1,\n 284: 1,\n 285: 2,\n 286: 4,\n 287: 3,\n 288: 2,\n 289: 4,\n 290: 3,\n 291: 3,\n 292: 3,\n 293: 4,\n 294: 1,\n 295: 3,\n 296: 1,\n 297: 3,\n 298: 1,\n 299: 2,\n 300: 3,\n 301: 3,\n 302: 4,\n 303: 2,\n 304: 2,\n 305: 2,\n 306: 2,\n 307: 2,\n 308: 2,\n 309: 3,\n 310: 2,\n 311: 2,\n 312: 2,\n 313: 2,\n 314: 2,\n 315: 2,\n 316: 4,\n 325: 2,\n 326: 2,\n 327: 2,\n 328: 2,\n 331: 2,\n 332: 2,\n 337: 2,\n 342: 1,\n 343: 1,\n 346: 2,\n 347: 1,\n 350: 4,\n 351: 3,\n 352: 1,\n 353: 2,\n 360: 1,\n 368: 1,\n 369: 1,\n 370: 1,\n 371: 1,\n 372: 1,\n 373: 1,\n 374: 1,\n 375: 1,\n 376: 1,\n 377: 1,\n 378: 1,\n 382: 3,\n 385: 1,\n 392: 1,\n 393: 1,\n 396: 2,\n 397: 2,\n 398: 2,\n 399: 1,\n 400: 1,\n 401: 1,\n 402: 1,\n 403: 1,\n 404: 1,\n 405: 1,\n 406: 1,\n 407: 1,\n 408: 1,\n 409: 1,\n 410: 1,\n 414: 4,\n 415: 1,\n 416: 1,\n 417: 2,\n 420: 1,\n 421: 1,\n 422: 2,\n 424: 1,\n 425: 2,\n 426: 2,\n 427: 2,\n 428: 2,\n 430: 3,\n 438: 3,\n 439: 3,\n 440: 3,\n 443: 2,\n 444: 2,\n 445: 2,\n 446: 2,\n 447: 6,\n 448: 6,\n 449: 2,\n 450: 2,\n 464: 2,\n 468: 3,\n 476: 2,\n 479: 1,\n 480: 2,\n 65535: 0\n};\n/* Part 3 TODO: actually parse formulae */\nfunction ods_to_csf_formula(f/*:string*/)/*:string*/ {\n\tif(f.slice(0,3) == \"of:\") f = f.slice(3);\n\t/* 5.2 Basic Expressions */\n\tif(f.charCodeAt(0) == 61) {\n\t\tf = f.slice(1);\n\t\tif(f.charCodeAt(0) == 61) f = f.slice(1);\n\t}\n\tf = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n\t/* Part 3 Section 5.8 References */\n\tf = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function($$, $1) { return $1.replace(/\\./g,\"\"); });\n\tf = f.replace(/\\$'([^']|'')+'/g, function($$) { return $$.slice(1); });\n\tf = f.replace(/\\$([^\\]\\. #$]+)/g, function($$, $1) { return ($1).match(/^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])?(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})?$/) ? $$ : $1; });\n\t/* TODO: something other than this */\n\tf = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n\treturn f.replace(/[;~]/g,\",\").replace(/\\|/g,\";\");\n}\n\nfunction csf_to_ods_formula(f/*:string*/)/*:string*/ {\n\tvar o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g,\":\");\n\t/* TODO: something other than this */\n\treturn o.replace(/;/g, \"|\").replace(/,/g,\";\");\n}\n\nfunction ods_to_csf_3D(r/*:string*/)/*:[string, string]*/ {\n\tr = r.replace(/\\$'([^']|'')+'/g, function($$) { return $$.slice(1); });\n\tr = r.replace(/\\$([^\\]\\. #$]+)/g, function($$, $1) { return ($1).match(/^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])?(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})?$/) ? $$ : $1; });\n\tvar a = r.split(\":\");\n\tvar s = a[0].split(\".\")[0];\n\treturn [s, a[0].split(\".\")[1] + (a.length > 1 ? (\":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0])) : \"\")];\n}\n\nfunction csf_to_ods_3D(r/*:string*/)/*:string*/ {\n\treturn r.replace(/!/,\".\");\n}\n\nvar strs = {}; // shared strings\nvar _ssfopts = {}; // spreadsheet formatting options\n\n\n/*global Map */\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst/*:SST*/, str/*:string*/, rev)/*:number*/ {\n\tvar i = 0, len = sst.length;\n\tif(rev) {\n\t\tif(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n\t\t\tvar revarr = browser_has_Map ? rev.get(str) : rev[str];\n\t\t\tfor(; i < revarr.length; ++i) {\n\t\t\t\tif(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; }\n\t\t\t}\n\t\t}\n\t} else for(; i < len; ++i) {\n\t\tif(sst[i].t === str) { sst.Count ++; return i; }\n\t}\n\tsst[len] = ({t:str}/*:any*/); sst.Count ++; sst.Unique ++;\n\tif(rev) {\n\t\tif(browser_has_Map) {\n\t\t\tif(!rev.has(str)) rev.set(str, []);\n\t\t\trev.get(str).push(len);\n\t\t} else {\n\t\t\tif(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n\t\t\trev[str].push(len);\n\t\t}\n\t}\n\treturn len;\n}\n\nfunction col_obj_w(C/*:number*/, col) {\n\tvar p = ({min:C+1,max:C+1}/*:any*/);\n\t/* wch (chars), wpx (pixels) */\n\tvar wch = -1;\n\tif(col.MDW) MDW = col.MDW;\n\tif(col.width != null) p.customWidth = 1;\n\telse if(col.wpx != null) wch = px2char(col.wpx);\n\telse if(col.wch != null) wch = col.wch;\n\tif(wch > -1) { p.width = char2width(wch); p.customWidth = 1; }\n\telse if(col.width != null) p.width = col.width;\n\tif(col.hidden) p.hidden = true;\n\tif(col.level != null) { p.outlineLevel = p.level = col.level; }\n\treturn p;\n}\n\nfunction default_margins(margins/*:Margins*/, mode/*:?string*/) {\n\tif(!margins) return;\n\tvar defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n\tif(mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n\tif(margins.left == null) margins.left = defs[0];\n\tif(margins.right == null) margins.right = defs[1];\n\tif(margins.top == null) margins.top = defs[2];\n\tif(margins.bottom == null) margins.bottom = defs[3];\n\tif(margins.header == null) margins.header = defs[4];\n\tif(margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles/*:Array*/, cell/*:Cell*/, opts) {\n\tvar z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n\tvar i = 0x3c, len = styles.length;\n\tif(z == null && opts.ssf) {\n\t\tfor(; i < 0x188; ++i) if(opts.ssf[i] == null) {\n\t\t\tSSF__load(cell.z, i);\n\t\t\t// $FlowIgnore\n\t\t\topts.ssf[i] = cell.z;\n\t\t\topts.revssf[cell.z] = z = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor(i = 0; i != len; ++i) if(styles[i].numFmtId === z) return i;\n\tstyles[len] = {\n\t\tnumFmtId:z,\n\t\tfontId:0,\n\t\tfillId:0,\n\t\tborderId:0,\n\t\txfId:0,\n\t\tapplyNumberFormat:1\n\t};\n\treturn len;\n}\n\nfunction safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, themes, styles) {\n\ttry {\n\t\tif(opts.cellNF) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(p.t === 'z' && !opts.cellStyles) return;\n\tif(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n\tif((!opts || opts.cellText !== false) && p.t !== 'z') try {\n\t\tif(table_fmt[fmtid] == null) SSF__load(SSFImplicit[fmtid] || \"General\", fmtid);\n\t\tif(p.t === 'e') p.w = p.w || BErr[p.v];\n\t\telse if(fmtid === 0) {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse if(p.t === 'd') {\n\t\t\t\tvar dd = datenum(p.v);\n\t\t\t\tif((dd|0) === dd) p.w = dd.toString(10);\n\t\t\t\telse p.w = SSF_general_num(dd);\n\t\t\t}\n\t\t\telse if(p.v === undefined) return \"\";\n\t\t\telse p.w = SSF_general(p.v,_ssfopts);\n\t\t}\n\t\telse if(p.t === 'd') p.w = SSF_format(fmtid,datenum(p.v),_ssfopts);\n\t\telse p.w = SSF_format(fmtid,p.v,_ssfopts);\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts.cellStyles) return;\n\tif(fillid != null) try {\n\t\tp.s = styles.Fills[fillid];\n\t\tif (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n\t\t\tp.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n\t\t}\n\t\tif (p.s.bgColor && p.s.bgColor.theme) {\n\t\t\tp.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n\t\t}\n\t} catch(e) { if(opts.WTF && styles.Fills) throw e; }\n}\n\nfunction check_ws(ws/*:Worksheet*/, sname/*:string*/, i/*:number*/) {\n\tif(ws && ws['!ref']) {\n\t\tvar range = safe_decode_range(ws['!ref']);\n\t\tif(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n\t}\n}\nfunction parse_ws_xml_dim(ws/*:Worksheet*/, s/*:string*/) {\n\tvar d = safe_decode_range(s);\n\tif(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws[\"!ref\"] = encode_range(d);\n}\nvar mergecregex = /<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g;\nvar sheetdataregex = /<(?:\\w+:)?sheetData[^>]*>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/;\nvar hlinkregex = /<(?:\\w:)?hyperlink [^>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w:)?col\\b[^>]*[\\/]?>/g;\nvar afregex = /<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g;\nvar marginregex= /<(?:\\w:)?pageMargins[^>]*\\/>/g;\nvar sheetprregex = /<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/;\nvar sheetprregex2= /<(?:\\w:)?sheetPr[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetPr)>/;\nvar svsregex = /<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;\n\n/* 18.3 Worksheets */\nfunction parse_ws_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\n\t/* 18.3.1.99 worksheet CT_Worksheet */\n\tvar s = ({}/*:any*/); if(opts.dense) s[\"!data\"] = [];\n\tvar refguess/*:Range*/ = ({s: {r:2000000, c:2000000}, e: {r:0, c:0} }/*:any*/);\n\n\tvar data1 = \"\", data2 = \"\";\n\tvar mtch/*:?any*/ = data.match(sheetdataregex);\n\tif(mtch) {\n\t\tdata1 = data.slice(0, mtch.index);\n\t\tdata2 = data.slice(mtch.index + mtch[0].length);\n\t} else data1 = data2 = data;\n\n\t/* 18.3.1.82 sheetPr CT_SheetPr */\n\tvar sheetPr = data1.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\telse if((sheetPr = data1.match(sheetprregex2))) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1]||\"\", s, wb, idx, styles, themes);\n\n\t/* 18.3.1.35 dimension CT_SheetDimension */\n\tvar ridx = (data1.match(/<(?:\\w*:)?dimension/)||{index:-1}).index;\n\tif(ridx > 0) {\n\t\tvar ref = data1.slice(ridx,ridx+50).match(dimregex);\n\t\tif(ref) parse_ws_xml_dim(s, ref[1]);\n\t}\n\n\t/* 18.3.1.88 sheetViews CT_SheetViews */\n\tvar svs = data1.match(svsregex);\n\tif(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n\n\t/* 18.3.1.17 cols CT_Cols */\n\tvar columns/*:Array*/ = [];\n\tif(opts.cellStyles) {\n\t\t/* 18.3.1.13 col CT_Col */\n\t\tvar cols = data1.match(colregex);\n\t\tif(cols) parse_ws_xml_cols(columns, cols);\n\t}\n\n\t/* 18.3.1.80 sheetData CT_SheetData ? */\n\tif(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);\n\n\t/* 18.3.1.2 autoFilter CT_AutoFilter */\n\tvar afilter = data2.match(afregex);\n\tif(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n\n\t/* 18.3.1.55 mergeCells CT_MergeCells */\n\tvar merges/*:Array*/ = [];\n\tvar _merge = data2.match(mergecregex);\n\tif(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)\n\t\tmerges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\")+1));\n\n\t/* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\tvar hlink = data2.match(hlinkregex);\n\tif(hlink) parse_ws_xml_hlinks(s, hlink, rels);\n\n\t/* 18.3.1.62 pageMargins CT_PageMargins */\n\tvar margins = data2.match(marginregex);\n\tif(margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n\n\tif(!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\tif(opts.sheetRows > 0 && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(columns.length > 0) s[\"!cols\"] = columns;\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\treturn s;\n}\n\nfunction write_ws_xml_merges(merges/*:Array*/)/*:string*/ {\n\tif(merges.length === 0) return \"\";\n\tvar o = '';\n\tfor(var i = 0; i != merges.length; ++i) o += '';\n\treturn o + '';\n}\n\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\nfunction parse_ws_xml_sheetpr(sheetPr/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tvar data = parsexmltag(sheetPr);\n\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\tif(data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n}\nfunction parse_ws_xml_sheetpr2(sheetPr/*:string*/, body/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tparse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(\">\")), s, wb, idx);\n}\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n\tvar needed = false;\n\tvar props = {}, payload = null;\n\tif(opts.bookType !== 'xlsx' && wb.vbaraw) {\n\t\tvar cname = wb.SheetNames[idx];\n\t\ttry { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {}\n\t\tneeded = true;\n\t\tprops.codeName = utf8write(escapexml(cname));\n\t}\n\n\tif(ws && ws[\"!outline\"]) {\n\t\tvar outlineprops = {summaryBelow:1, summaryRight:1};\n\t\tif(ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n\t\tif(ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n\t\tpayload = (payload||\"\") + writextag('outlinePr', null, outlineprops);\n\t}\n\n\tif(!needed && !payload) return;\n\to[o.length] = (writextag('sheetPr', payload, props));\n}\n\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\n\t\"formatColumns\", \"formatRows\", \"formatCells\",\n\t\"insertColumns\", \"insertRows\", \"insertHyperlinks\",\n\t\"deleteColumns\", \"deleteRows\",\n\t\"sort\", \"autoFilter\", \"pivotTables\"\n];\nfunction write_ws_xml_protection(sp)/*:string*/ {\n\t// algorithmName, hashValue, saltValue, spinCount\n\tvar o = ({sheet:1}/*:any*/);\n\tsheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = \"1\"; });\n\tsheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = \"0\"; });\n\t/* TODO: algorithm */\n\tif(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n\treturn writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data/*:Array*/, rels) {\n\tvar dense = s[\"!data\"] != null;\n\tfor(var i = 0; i != data.length; ++i) {\n\t\tvar val = parsexmltag(utf8read(data[i]), true);\n\t\tif(!val.ref) return;\n\t\tvar rel = ((rels || {})['!id']||[])[val.id];\n\t\tif(rel) {\n\t\t\tval.Target = rel.Target;\n\t\t\tif(val.location) val.Target += \"#\"+unescapexml(val.location);\n\t\t} else {\n\t\t\tval.Target = \"#\" + unescapexml(val.location);\n\t\t\trel = {Target: val.Target, TargetMode: 'Internal'};\n\t\t}\n\t\tval.Rel = rel;\n\t\tif(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; }\n\t\tvar rng = safe_decode_range(val.ref);\n\t\tfor(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {\n\t\t\tvar addr = encode_col(C) + encode_row(R);\n\t\t\tif(dense) {\n\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\tif(!s[\"!data\"][R][C]) s[\"!data\"][R][C] = {t:\"z\",v:undefined};\n\t\t\t\ts[\"!data\"][R][C].l = val;\n\t\t\t} else {\n\t\t\t\tif(!s[addr]) s[addr] = {t:\"z\",v:undefined};\n\t\t\t\ts[addr].l = val;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction parse_ws_xml_margins(margin) {\n\tvar o = {};\n\t[\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function(k) {\n\t\tif(margin[k]) o[k] = parseFloat(margin[k]);\n\t});\n\treturn o;\n}\nfunction write_ws_xml_margins(margin)/*:string*/ {\n\tdefault_margins(margin);\n\treturn writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n\tvar seencol = false;\n\tfor(var coli = 0; coli != cols.length; ++coli) {\n\t\tvar coll = parsexmltag(cols[coli], true);\n\t\tif(coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n\t\tvar colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;\n\t\tif(coll.outlineLevel) coll.level = (+coll.outlineLevel || 0);\n\t\tdelete coll.min; delete coll.max; coll.width = +coll.width;\n\t\tif(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); }\n\t\tprocess_col(coll);\n\t\twhile(colm <= colM) columns[colm++] = dup(coll);\n\t}\n}\nfunction write_ws_xml_cols(ws, cols)/*:string*/ {\n\tvar o = [\"\"], col;\n\tfor(var i = 0; i != cols.length; ++i) {\n\t\tif(!(col = cols[i])) continue;\n\t\to[o.length] = (writextag('col', null, col_obj_w(i, col)));\n\t}\n\to[o.length] = \"\";\n\treturn o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data/*:string*/) {\n\tvar o = { ref: (data.match(/ref=\"([^\"]*)\"/)||[])[1]};\n\treturn o;\n}\nfunction write_ws_xml_autofilter(data, ws, wb, idx)/*:string*/ {\n\tvar ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = formula_quote_sheet_name(wb.SheetNames[idx]) + \"!\" + fix_range(ref); break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\treturn writextag(\"autoFilter\", null, {ref:ref});\n}\n\n/* 18.3.1.88 sheetViews CT_SheetViews */\n/* 18.3.1.87 sheetView CT_SheetView */\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/?>/g;\nfunction parse_ws_xml_sheetviews(data, wb/*:WBWBProps*/) {\n\tif(!wb.Views) wb.Views = [{}];\n\t(data.match(sviewregex)||[]).forEach(function(r/*:string*/, i/*:number*/) {\n\t\tvar tag = parsexmltag(r);\n\t\t// $FlowIgnore\n\t\tif(!wb.Views[i]) wb.Views[i] = {};\n\t\t// $FlowIgnore\n\t\tif(+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale;\n\t\t// $FlowIgnore\n\t\tif(tag.rightToLeft && parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n\t});\n}\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb)/*:string*/ {\n\tvar sview = ({workbookViewId:\"0\"}/*:any*/);\n\t// $FlowIgnore\n\tif((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n\treturn writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts/*::, idx, wb*/)/*:string*/ {\n\tif(cell.c) ws['!comments'].push([ref, cell.c]);\n\tif((cell.v === undefined || cell.t === \"z\" && !(opts||{}).sheetStubs) && typeof cell.f !== \"string\" && typeof cell.z == \"undefined\") return \"\";\n\tvar vv = \"\";\n\tvar oldt = cell.t, oldv = cell.v;\n\tif(cell.t !== \"z\") switch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'n': vv = ''+cell.v; break;\n\t\tcase 'e': vv = BErr[cell.v]; break;\n\t\tcase 'd':\n\t\t\tif(opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();\n\t\t\telse {\n\t\t\t\tcell = dup(cell);\n\t\t\t\tcell.t = 'n';\n\t\t\t\tvv = ''+(cell.v = datenum(parseDate(cell.v)));\n\t\t\t}\n\t\t\tif(typeof cell.z === 'undefined') cell.z = table_fmt[14];\n\t\t\tbreak;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar v = (cell.t == \"z\" || cell.v == null)? \"\" : writetag('v', escapexml(vv)), o = ({r:ref}/*:any*/);\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tif(os !== 0) o.s = os;\n\tswitch(cell.t) {\n\t\tcase 'n': break;\n\t\tcase 'd': o.t = \"d\"; break;\n\t\tcase 'b': o.t = \"b\"; break;\n\t\tcase 'e': o.t = \"e\"; break;\n\t\tcase 'z': break;\n\t\tdefault: if(cell.v == null) { delete cell.t; break; }\n\t\t\tif(cell.v.length > 32767) throw new Error(\"Text length must not exceed 32767 characters\");\n\t\t\tif(opts && opts.bookSST) {\n\t\t\t\tv = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings));\n\t\t\t\to.t = \"s\"; break;\n\t\t\t}\n\t\t\telse o.t = \"str\"; break;\n\t}\n\tif(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }\n\tif(typeof cell.f == \"string\" && cell.f) {\n\t\tvar ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:\"array\", ref:cell.F} : null;\n\t\tv = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n\t}\n\tif(cell.l) {\n\t\tcell.l.display = escapexml(vv);\n\t\tws['!links'].push([ref, cell.l]);\n\t}\n\tif(cell.D) o.cm = 1;\n\treturn writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = /*#__PURE__*/(function() {\n\tvar cellregex = /<(?:\\w+:)?c[ \\/>]/, rowregex = /<\\/(?:\\w+:)?row>/;\n\tvar rregex = /r=[\"']([^\"']*)[\"']/, isregex = /<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/;\n\tvar refregex = /ref=[\"']([^\"']*)[\"']/;\n\tvar match_v = matchtag(\"v\"), match_f = matchtag(\"f\");\n\nreturn function parse_ws_xml_data(sdata/*:string*/, s, opts, guess/*:Range*/, themes, styles) {\n\tvar ri = 0, x = \"\", cells/*:Array*/ = [], cref/*:?Array*/ = [], idx=0, i=0, cc=0, d=\"\", p/*:any*/;\n\tvar tag, tagr = 0, tagc = 0;\n\tvar sstr, ftag;\n\tvar fmtid = 0, fillid = 0;\n\tvar do_format = Array.isArray(styles.CellXf), cf;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = [];\n\tvar dense = s[\"!data\"] != null;\n\tvar rows/*:Array*/ = [], rowobj = {}, rowrite = false;\n\tvar sheetStubs = !!opts.sheetStubs;\n\tfor(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n\t\tx = marr[mt].trim();\n\t\tvar xlen = x.length;\n\t\tif(xlen === 0) continue;\n\n\t\t/* 18.3.1.73 row CT_Row */\n\t\tvar rstarti = 0;\n\t\touta: for(ri = 0; ri < xlen; ++ri) switch(/*x.charCodeAt(ri)*/x[ri]) {\n\t\t\tcase \">\" /*62*/:\n\t\t\t\tif(/*x.charCodeAt(ri-1) != 47*/x[ri-1] != \"/\") { ++ri; break outa; }\n\t\t\t\tif(opts && opts.cellStyles) {\n\t\t\t\t\t// TODO: avoid duplication\n\t\t\t\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\t\t\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\t\t\t\trowobj = {}; rowrite = false;\n\t\t\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\t\t\tif(tag.hidden && parsexmlbool(tag.hidden)) { rowrite = true; rowobj.hidden = true; }\n\t\t\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"<\" /*60*/: rstarti = ri; break;\n\t\t}\n\t\tif(rstarti >= ri) break;\n\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\tif(guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n\t\tif(guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\n\t\tif(opts && opts.cellStyles) {\n\t\t\trowobj = {}; rowrite = false;\n\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\tif(tag.hidden && parsexmlbool(tag.hidden)) { rowrite = true; rowobj.hidden = true; }\n\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t}\n\n\t\t/* 18.3.1.4 c CT_Cell */\n\t\tcells = x.slice(ri).split(cellregex);\n\t\tfor(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != \"<\") break;\n\t\tcells = cells.slice(rslice);\n\t\tfor(ri = 0; ri != cells.length; ++ri) {\n\t\t\tx = cells[ri].trim();\n\t\t\tif(x.length === 0) continue;\n\t\t\tcref = x.match(rregex); idx = ri; i=0; cc=0;\n\t\t\tx = \"\":\"\") + x;\n\t\t\tif(cref != null && cref.length === 2) {\n\t\t\t\tidx = 0; d=cref[1];\n\t\t\t\tfor(i=0; i != d.length; ++i) {\n\t\t\t\t\tif((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\t\t\t\tidx = 26*idx + cc;\n\t\t\t\t}\n\t\t\t\t--idx;\n\t\t\t\ttagc = idx;\n\t\t\t} else ++tagc;\n\t\t\tfor(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;\n\t\t\ttag = parsexmltag(x.slice(0,i), true);\n\t\t\tif(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc});\n\t\t\td = x.slice(i);\n\t\t\tp = ({t:\"\"}/*:any*/);\n\n\t\t\tif((cref=d.match(match_v))!= null && /*::cref != null && */cref[1] !== '') p.v=unescapexml(cref[1]);\n\t\t\tif(opts.cellFormula) {\n\t\t\t\tif((cref=d.match(match_f))!= null && /*::cref != null && */cref[1] !== '') {\n\t\t\t\t\t/* TODO: match against XLSXFutureFunctions */\n\t\t\t\t\tp.f=unescapexml(utf8read(cref[1]), true);\n\t\t\t\t\tif(!opts.xlfn) p.f = _xlfn(p.f);\n\t\t\t\t\tif(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"array\"') > -1) {\n\t\t\t\t\t\tp.F = (d.match(refregex)||[])[1];\n\t\t\t\t\t\tif(p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n\t\t\t\t\t} else if(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\tvar ___f = unescapexml(utf8read(cref[1]));\n\t\t\t\t\t\tif(!opts.xlfn) ___f = _xlfn(___f);\n\t\t\t\t\t\tsharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n\t\t\t\t\t}\n\t\t\t\t} else if((cref=d.match(/]*\\/>/))) {\n\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t}\n\t\t\t\t/* TODO: factor out contains logic */\n\t\t\t\tvar _tag = decode_cell(tag.r);\n\t\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\tif(_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r)\n\t\t\t\t\t\tif(_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\tp.F = arrayf[i][1];\n\t\t\t}\n\n\t\t\tif(tag.t == null && p.v === undefined) {\n\t\t\t\tif(p.f || p.F) {\n\t\t\t\t\tp.v = 0; p.t = \"n\";\n\t\t\t\t} else if(!sheetStubs) continue;\n\t\t\t\telse p.t = \"z\";\n\t\t\t}\n\t\t\telse p.t = tag.t || \"n\";\n\t\t\tif(guess.s.c > tagc) guess.s.c = tagc;\n\t\t\tif(guess.e.c < tagc) guess.e.c = tagc;\n\t\t\t/* 18.18.11 t ST_CellType */\n\t\t\tswitch(p.t) {\n\t\t\t\tcase 'n':\n\t\t\t\t\tif(p.v == \"\" || p.v == null) {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else p.v = parseFloat(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\tif(typeof p.v == 'undefined') {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsstr = strs[parseInt(p.v, 10)];\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tp.r = sstr.r;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'str':\n\t\t\t\t\tp.t = \"s\";\n\t\t\t\t\tp.v = (p.v!=null) ? unescapexml(utf8read(p.v), true) : '';\n\t\t\t\t\tif(opts.cellHTML) p.h = escapehtml(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'inlineStr':\n\t\t\t\t\tcref = d.match(isregex);\n\t\t\t\t\tp.t = 's';\n\t\t\t\t\tif(cref != null && (sstr = parse_si(cref[1]))) {\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t} else p.v = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b': p.v = parsexmlbool(p.v); break;\n\t\t\t\tcase 'd':\n\t\t\t\t\tif(opts.cellDates) p.v = parseDate(p.v, 1);\n\t\t\t\t\telse { p.v = datenum(parseDate(p.v, 1)); p.t = 'n'; }\n\t\t\t\t\tbreak;\n\t\t\t\t/* error string in .w, number in .v */\n\t\t\t\tcase 'e':\n\t\t\t\t\tif(!opts || opts.cellText !== false) p.w = p.v;\n\t\t\t\t\tp.v = RBErr[p.v]; break;\n\t\t\t}\n\t\t\t/* formatting */\n\t\t\tfmtid = fillid = 0;\n\t\t\tcf = null;\n\t\t\tif(do_format && tag.s !== undefined) {\n\t\t\t\tcf = styles.CellXf[tag.s];\n\t\t\t\tif(cf != null) {\n\t\t\t\t\tif(cf.numFmtId != null) fmtid = cf.numFmtId;\n\t\t\t\t\tif(opts.cellStyles) {\n\t\t\t\t\t\tif(cf.fillId != null) fillid = cf.fillId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsafe_format(p, fmtid, fillid, opts, themes, styles);\n\t\t\tif(opts.cellDates && do_format && p.t == 'n' && fmt_is_date(table_fmt[fmtid])) { p.t = 'd'; p.v = numdate(p.v); }\n\t\t\tif(tag.cm && opts.xlmeta) {\n\t\t\t\tvar cm = (opts.xlmeta.Cell||[])[+tag.cm-1];\n\t\t\t\tif(cm && cm.type == 'XLDAPR') p.D = true;\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tvar _r = decode_cell(tag.r);\n\t\t\t\tif(!s[\"!data\"][_r.r]) s[\"!data\"][_r.r] = [];\n\t\t\t\ts[\"!data\"][_r.r][_r.c] = p;\n\t\t\t} else s[tag.r] = p;\n\t\t}\n\t}\n\tif(rows.length > 0) s['!rows'] = rows;\n}; })();\n\nfunction write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*//*::, rels*/)/*:string*/ {\n\tvar o/*:Array*/ = [], r/*:Array*/ = [], range = safe_decode_range(ws['!ref']), cell=\"\", ref, rr = \"\", cols/*:Array*/ = [], R=0, C=0, rows = ws['!rows'];\n\tvar dense = ws[\"!data\"] != null;\n\tvar params = ({r:rr}/*:any*/), row/*:RowInfo*/, height = -1;\n\tfor(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(R = range.s.r; R <= range.e.r; ++R) {\n\t\tr = [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar _cell = dense ? (ws[\"!data\"][R]||[])[C]: ws[ref];\n\t\t\tif(_cell === undefined) continue;\n\t\t\tif((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);\n\t\t}\n\t\tif(r.length > 0 || (rows && rows[R])) {\n\t\t\tparams = ({r:rr}/*:any*/);\n\t\t\tif(rows && rows[R]) {\n\t\t\t\trow = rows[R];\n\t\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\t\theight = -1;\n\t\t\t\tif(row.hpx) height = px2pt(row.hpx);\n\t\t\t\telse if(row.hpt) height = row.hpt;\n\t\t\t\tif(height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\t\tif(row.level) { params.outlineLevel = row.level; }\n\t\t\t}\n\t\t\to[o.length] = (writextag('row', r.join(\"\"), params));\n\t\t}\n\t}\n\tif(rows) for(; R < rows.length; ++R) {\n\t\tif(rows && rows[R]) {\n\t\t\tparams = ({r:R+1}/*:any*/);\n\t\t\trow = rows[R];\n\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\theight = -1;\n\t\t\tif (row.hpx) height = px2pt(row.hpx);\n\t\t\telse if (row.hpt) height = row.hpt;\n\t\t\tif (height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\tif (row.level) { params.outlineLevel = row.level; }\n\t\t\to[o.length] = (writextag('row', \"\", params));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nfunction write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('worksheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:r': XMLNS.r\n\t})];\n\tvar s = wb.SheetNames[idx], sidx = 0, rdata = \"\";\n\tvar ws = wb.Sheets[s];\n\tif(ws == null) ws = {};\n\tvar ref = ws['!ref'] || 'A1';\n\tvar range = safe_decode_range(ref);\n\tif(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n\t\trange.e.c = Math.min(range.e.c, 0x3FFF);\n\t\trange.e.r = Math.min(range.e.c, 0xFFFFF);\n\t\tref = encode_range(range);\n\t}\n\tif(!rels) rels = {};\n\tws['!comments'] = [];\n\tvar _drawing = [];\n\n\twrite_ws_xml_sheetpr(ws, wb, idx, opts, o);\n\n\to[o.length] = (writextag('dimension', null, {'ref': ref}));\n\n\to[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n\n\t/* TODO: store in WB, process styles */\n\tif(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {\n\t\tdefaultRowHeight:opts.sheetFormat.defaultRowHeight||'16',\n\t\tbaseColWidth:opts.sheetFormat.baseColWidth||'10',\n\t\toutlineLevelRow:opts.sheetFormat.outlineLevelRow||'7'\n\t}));\n\n\tif(ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));\n\n\to[sidx = o.length] = '';\n\tws['!links'] = [];\n\tif(ws['!ref'] != null) {\n\t\trdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n\t\tif(rdata.length > 0) o[o.length] = (rdata);\n\t}\n\tif(o.length>sidx+1) { o[o.length] = (''); o[sidx]=o[sidx].replace(\"/>\",\">\"); }\n\n\t/* sheetCalcPr */\n\n\tif(ws['!protect']) o[o.length] = write_ws_xml_protection(ws['!protect']);\n\n\t/* protectedRanges */\n\t/* scenarios */\n\n\tif(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n\n\t/* sortState */\n\t/* dataConsolidate */\n\t/* customSheetViews */\n\n\tif(ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));\n\n\t/* phoneticPr */\n\t/* conditionalFormatting */\n\t/* dataValidations */\n\n\tvar relc = -1, rel, rId = -1;\n\tif(/*::(*/ws['!links']/*::||[])*/.length > 0) {\n\t\to[o.length] = \"\";\n\t\t/*::(*/ws['!links']/*::||[])*/.forEach(function(l) {\n\t\t\tif(!l[1].Target) return;\n\t\t\trel = ({\"ref\":l[0]}/*:any*/);\n\t\t\tif(l[1].Target.charAt(0) != \"#\") {\n\t\t\t\trId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, \"\"), RELS.HLINK);\n\t\t\t\trel[\"r:id\"] = \"rId\"+rId;\n\t\t\t}\n\t\t\tif((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1));\n\t\t\tif(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n\t\t\trel.display = l[1].display;\n\t\t\to[o.length] = writextag(\"hyperlink\",null,rel);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\tdelete ws['!links'];\n\n\t/* printOptions */\n\n\tif(ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n\n\t/* pageSetup */\n\t/* headerFooter */\n\t/* rowBreaks */\n\t/* colBreaks */\n\t/* customProperties */\n\t/* cellWatches */\n\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {numberStoredAsText:1, sqref:ref}));\n\n\t/* smartTags */\n\n\tif(_drawing.length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\t\to[o.length] = writextag(\"drawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!drawing'] = _drawing;\n\t}\n\n\tif(ws['!comments'].length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\to[o.length] = writextag(\"legacyDrawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!legacy'] = rId;\n\t}\n\n\t/* legacyDrawingHF */\n\t/* picture */\n\t/* oleObjects */\n\t/* controls */\n\t/* webPublishItems */\n\t/* tableParts */\n\t/* extLst */\n\n\tif(o.length>1) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\nfunction parse_BrtRowHdr(data, length) {\n\tvar z = ({}/*:any*/);\n\tvar tgt = data.l + length;\n\tz.r = data.read_shift(4);\n\tdata.l += 4; // TODO: ixfe\n\tvar miyRw = data.read_shift(2);\n\tdata.l += 1; // TODO: top/bot padding\n\tvar flags = data.read_shift(1);\n\tdata.l = tgt;\n\tif(flags & 0x07) z.level = flags & 0x07;\n\tif(flags & 0x10) z.hidden = true;\n\tif(flags & 0x20) z.hpt = miyRw / 20;\n\treturn z;\n}\nfunction write_BrtRowHdr(R/*:number*/, range, ws) {\n\tvar o = new_buf(17+8*16);\n\tvar row = (ws['!rows']||[])[R]||{};\n\to.write_shift(4, R);\n\n\to.write_shift(4, 0); /* TODO: ixfe */\n\n\tvar miyRw = 0x0140;\n\tif(row.hpx) miyRw = px2pt(row.hpx) * 20;\n\telse if(row.hpt) miyRw = row.hpt * 20;\n\to.write_shift(2, miyRw);\n\n\to.write_shift(1, 0); /* top/bot padding */\n\n\tvar flags = 0x0;\n\tif(row.level) flags |= row.level;\n\tif(row.hidden) flags |= 0x10;\n\tif(row.hpx || row.hpt) flags |= 0x20;\n\to.write_shift(1, flags);\n\n\to.write_shift(1, 0); /* phonetic guide */\n\n\t/* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\tvar ncolspan = 0, lcs = o.l;\n\to.l += 4;\n\n\tvar caddr = {r:R, c:0};\n\tvar dense = ws[\"!data\"] != null;\n\tfor(var i = 0; i < 16; ++i) {\n\t\tif((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue;\n\t\tvar first = -1, last = -1;\n\t\tfor(var j = (i<<10); j < ((i+1)<<10); ++j) {\n\t\t\tcaddr.c = j;\n\t\t\tvar cell = dense ? (ws[\"!data\"][caddr.r]||[])[caddr.c] : ws[encode_cell(caddr)];\n\t\t\tif(cell) { if(first < 0) first = j; last = j; }\n\t\t}\n\t\tif(first < 0) continue;\n\t\t++ncolspan;\n\t\to.write_shift(4, first);\n\t\to.write_shift(4, last);\n\t}\n\n\tvar l = o.l;\n\to.l = lcs;\n\to.write_shift(4, ncolspan);\n\to.l = l;\n\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction write_row_header(ba, ws, range, R) {\n\tvar o = write_BrtRowHdr(R, range, ws);\n\tif((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 0x0000 /* BrtRowHdr */, o);\n}\n\n/* [MS-XLSB] 2.4.820 BrtWsDim */\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\nfunction parse_BrtWsFmtInfo(/*::data, length*/) {\n}\n//function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\nfunction parse_BrtWsProp(data, length) {\n\tvar z = {};\n\tvar f = data[data.l]; ++data.l;\n\tz.above = !(f & 0x40);\n\tz.left = !(f & 0x80);\n\t/* TODO: pull flags */\n\tdata.l += 18;\n\tz.name = parse_XLSBCodeName(data, length - 19);\n\treturn z;\n}\nfunction write_BrtWsProp(str, outl, o) {\n\tif(o == null) o = new_buf(84+4*str.length);\n\tvar f = 0xC0;\n\tif(outl) {\n\t\tif(outl.above) f &= ~0x40;\n\t\tif(outl.left) f &= ~0x80;\n\t}\n\to.write_shift(1, f);\n\tfor(var i = 1; i < 3; ++i) o.write_shift(1,0);\n\twrite_BrtColor({auto:1}, o);\n\to.write_shift(-4,-1);\n\to.write_shift(-4,-1);\n\twrite_XLSBCodeName(str, o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\nfunction parse_BrtCellBlank(data) {\n\tvar cell = parse_XLSBCell(data);\n\treturn [cell];\n}\nfunction write_BrtCellBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\treturn write_XLSBCell(ncell, o);\n}\nfunction parse_BrtShortBlank(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\treturn [cell];\n}\nfunction write_BrtShortBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(4);\n\treturn write_XLSBShortCell(ncell, o);\n}\n\n/* [MS-XLSB] 2.4.307 BrtCellBool */\nfunction parse_BrtCellBool(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtCellBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\nfunction parse_BrtShortBool(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtShortBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(5);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.308 BrtCellError */\nfunction parse_BrtCellError(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtCellError(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v);\n\treturn o;\n}\nfunction parse_BrtShortError(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtShortError(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v);\n\to.write_shift(2, 0);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\nfunction parse_BrtCellIsst(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtCellIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\nfunction parse_BrtShortIsst(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtShortIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.313 BrtCellReal */\nfunction parse_BrtCellReal(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(16);\n\twrite_XLSBCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortReal(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.314 BrtCellRk */\nfunction parse_BrtCellRk(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortRk(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtCellRString */\nfunction parse_BrtCellRString(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RichStr(data);\n\treturn [cell, value, 'is'];\n}\n\n/* [MS-XLSB] 2.4.317 BrtCellSt */\nfunction parse_BrtCellSt(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtCellSt(cell, ncell, o) {\n\tvar data = cell.v == null ? \"\" : String(cell.v);\n\tif(o == null) o = new_buf(12 + 4 * cell.v.length);\n\twrite_XLSBCell(ncell, o);\n\twrite_XLWideString(data, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction parse_BrtShortSt(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtShortSt(cell, ncell, o) {\n\tvar data = cell.v == null ? \"\" : String(cell.v);\n\tif(o == null) o = new_buf(8 + 4 * data.length);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_XLWideString(data, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\nfunction parse_BrtFmlaBool(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'b'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\nfunction parse_BrtFmlaError(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'e'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\nfunction parse_BrtFmlaNum(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_Xnum(data);\n\tvar o = [cell, value, 'n'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\nfunction parse_BrtFmlaString(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_XLWideString(data);\n\tvar o = [cell, value, 'str'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\nfunction write_BrtBeginMergeCells(cnt, o) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(4, cnt);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.662 BrtHLink */\nfunction parse_BrtHLink(data, length/*::, opts*/) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar relId = parse_XLNullableWideString(data);\n\tvar loc = parse_XLWideString(data);\n\tvar tooltip = parse_XLWideString(data);\n\tvar display = parse_XLWideString(data);\n\tdata.l = end;\n\tvar o = ({rfx:rfx, relId:relId, loc:loc, display:display}/*:any*/);\n\tif(tooltip) o.Tooltip = tooltip;\n\treturn o;\n}\nfunction write_BrtHLink(l, rId) {\n\tvar o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || \"\").length));\n\twrite_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o);\n\twrite_RelID(\"rId\" + rId, o);\n\tvar locidx = l[1].Target.indexOf(\"#\");\n\tvar loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx+1);\n\twrite_XLWideString(loc || \"\", o);\n\twrite_XLWideString(l[1].Tooltip || \"\", o);\n\twrite_XLWideString(\"\", o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.692 BrtPane */\nfunction parse_BrtPane(/*data, length, opts*/) {\n}\n\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\nfunction parse_BrtArrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_RfX(data, 16);\n\tvar fAlwaysCalc = data.read_shift(1);\n\tvar o = [rfx]; o[2] = fAlwaysCalc;\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\nfunction parse_BrtShrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar o = [rfx];\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t\tdata.l = end;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n/* TODO: once XLS ColInfo is set, combine the functions */\nfunction write_BrtColInfo(C/*:number*/, col, o) {\n\tif(o == null) o = new_buf(18);\n\tvar p = col_obj_w(C, col);\n\to.write_shift(-4, C);\n\to.write_shift(-4, C);\n\to.write_shift(4, (p.width || 10) * 256);\n\to.write_shift(4, 0/*ixfe*/); // style\n\tvar flags = 0;\n\tif(col.hidden) flags |= 0x01;\n\tif(typeof p.width == 'number') flags |= 0x02;\n\tif(col.level) flags |= (col.level << 8);\n\to.write_shift(2, flags); // bit flag\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.678 BrtMargins */\nvar BrtMarginKeys = [\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"];\nfunction parse_BrtMargins(data/*::, length, opts*/)/*:Margins*/ {\n\tvar margins = ({}/*:any*/);\n\tBrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); });\n\treturn margins;\n}\nfunction write_BrtMargins(margins/*:Margins*/, o) {\n\tif(o == null) o = new_buf(6*8);\n\tdefault_margins(margins);\n\tBrtMarginKeys.forEach(function(k) { write_Xnum((margins/*:any*/)[k], o); });\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\nfunction parse_BrtBeginWsView(data/*::, length, opts*/) {\n\tvar f = data.read_shift(2);\n\tdata.l += 28;\n\treturn { RTL: f & 0x20 };\n}\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n\tif(o == null) o = new_buf(30);\n\tvar f = 0x39c;\n\tif((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20;\n\to.write_shift(2, f); // bit flag\n\to.write_shift(4, 0);\n\to.write_shift(4, 0); // view first row\n\to.write_shift(4, 0); // view first col\n\to.write_shift(1, 0); // gridline color ICV\n\to.write_shift(1, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 100); // zoom scale\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(4, 0); // workbook view id\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\nfunction write_BrtCellIgnoreEC(ref) {\n\tvar o = new_buf(24);\n\to.write_shift(4, 4);\n\to.write_shift(4, 1);\n\twrite_UncheckedRfX(ref, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\nfunction write_BrtSheetProtection(sp, o) {\n\tif(o == null) o = new_buf(16*4+2);\n\to.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n\to.write_shift(4, 1); // this record should not be written if no protection\n\t[\n\t\t[\"objects\", false], // fObjects\n\t\t[\"scenarios\", false], // fScenarios\n\t\t[\"formatCells\", true], // fFormatCells\n\t\t[\"formatColumns\", true], // fFormatColumns\n\t\t[\"formatRows\", true], // fFormatRows\n\t\t[\"insertColumns\", true], // fInsertColumns\n\t\t[\"insertRows\", true], // fInsertRows\n\t\t[\"insertHyperlinks\", true], // fInsertHyperlinks\n\t\t[\"deleteColumns\", true], // fDeleteColumns\n\t\t[\"deleteRows\", true], // fDeleteRows\n\t\t[\"selectLockedCells\", false], // fSelLockedCells\n\t\t[\"sort\", true], // fSort\n\t\t[\"autoFilter\", true], // fAutoFilter\n\t\t[\"pivotTables\", true], // fPivotTables\n\t\t[\"selectUnlockedCells\", false] // fSelUnlockedCells\n\t].forEach(function(n) {\n\t\t/*:: if(o == null) throw \"unreachable\"; */\n\t\tif(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);\n\t\telse o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n\t});\n\treturn o;\n}\n\nfunction parse_BrtDVal(/*data, length, opts*/) {\n}\nfunction parse_BrtDVal14(/*data, length, opts*/) {\n}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\nfunction parse_ws_bin(data, _opts, idx, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar s/*:Worksheet*/ = ({}); if(opts.dense) s[\"!data\"] = [];\n\n\tvar ref;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\tvar state/*:Array*/ = [];\n\tvar pass = false, end = false;\n\tvar row, p, cf, R, C, addr, sstr, rr, cell/*:Cell*/;\n\tvar merges/*:Array*/ = [];\n\topts.biff = 12;\n\topts['!row'] = 0;\n\n\tvar ai = 0, af = false;\n\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = {};\n\tvar supbooks = opts.supbooks || /*::(*/wb/*:: :any)*/.supbooks || ([[]]/*:any*/);\n\tsupbooks.sharedf = sharedf;\n\tsupbooks.arrayf = arrayf;\n\tsupbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; });\n\tif(!opts.supbooks) {\n\t\topts.supbooks = supbooks;\n\t\tif(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i];\n\t}\n\n\tvar colinfo/*:Array*/ = [], rowinfo/*:Array*/ = [];\n\tvar seencol = false;\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtShortReal\", f:parse_BrtShortReal };\n\n\tvar cm, vm;\n\n\trecordhopper(data, function ws_parse(val, RR, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0094: /* 'BrtWsDim' */\n\t\t\t\tref = val; break;\n\t\t\tcase 0x0000: /* 'BrtRowHdr' */\n\t\t\t\trow = val;\n\t\t\t\tif(opts.sheetRows && opts.sheetRows <= row.r) end=true;\n\t\t\t\trr = encode_row(R = row.r);\n\t\t\t\topts['!row'] = row.r;\n\t\t\t\tif(val.hidden || val.hpt || val.level != null) {\n\t\t\t\t\tif(val.hpt) val.hpx = pt2px(val.hpt);\n\t\t\t\t\trowinfo[val.r] = val;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0002: /* 'BrtCellRk' */\n\t\t\tcase 0x0003: /* 'BrtCellError' */\n\t\t\tcase 0x0004: /* 'BrtCellBool' */\n\t\t\tcase 0x0005: /* 'BrtCellReal' */\n\t\t\tcase 0x0006: /* 'BrtCellSt' */\n\t\t\tcase 0x0007: /* 'BrtCellIsst' */\n\t\t\tcase 0x0008: /* 'BrtFmlaString' */\n\t\t\tcase 0x0009: /* 'BrtFmlaNum' */\n\t\t\tcase 0x000A: /* 'BrtFmlaBool' */\n\t\t\tcase 0x000B: /* 'BrtFmlaError' */\n\t\t\tcase 0x000D: /* 'BrtShortRk' */\n\t\t\tcase 0x000E: /* 'BrtShortError' */\n\t\t\tcase 0x000F: /* 'BrtShortBool' */\n\t\t\tcase 0x0010: /* 'BrtShortReal' */\n\t\t\tcase 0x0011: /* 'BrtShortSt' */\n\t\t\tcase 0x0012: /* 'BrtShortIsst' */\n\t\t\tcase 0x003E: /* 'BrtCellRString' */\n\t\t\t\tp = ({t:val[2]}/*:any*/);\n\t\t\t\tswitch(val[2]) {\n\t\t\t\t\tcase 'n': p.v = val[1]; break;\n\t\t\t\t\tcase 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;\n\t\t\t\t\tcase 'b': p.v = val[1] ? true : false; break;\n\t\t\t\t\tcase 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break;\n\t\t\t\t\tcase 'str': p.t = 's'; p.v = val[1]; break;\n\t\t\t\t\tcase 'is': p.t = 's'; p.v = val[1].t; break;\n\t\t\t\t}\n\t\t\t\tif((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[\"!data\"][R]) s[\"!data\"][R] = []; s[\"!data\"][R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\taf = false;\n\t\t\t\t\tfor(ai = 0; ai < arrayf.length; ++ai) {\n\t\t\t\t\t\tvar aii = arrayf[ai];\n\t\t\t\t\t\tif(row.r >= aii[0].s.r && row.r <= aii[0].e.r)\n\t\t\t\t\t\t\tif(C >= aii[0].s.c && C <= aii[0].e.c) {\n\t\t\t\t\t\t\t\tp.F = encode_range(aii[0]); af = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!af && val.length > 3) p.f = val[3];\n\t\t\t\t}\n\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(opts.cellDates && cf && p.t == 'n' && fmt_is_date(table_fmt[cf.numFmtId])) {\n\t\t\t\t\tvar _d = SSF_parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t\t\t}\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0001: /* 'BrtCellBlank' */\n\t\t\tcase 0x000C: /* 'BrtShortBlank' */\n\t\t\t\tif(!opts.sheetStubs || pass) break;\n\t\t\t\tp = ({t:'z',v:void 0}/*:any*/);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[\"!data\"][R]) s[\"!data\"][R] = []; s[\"!data\"][R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00B0: /* 'BrtMergeCell' */\n\t\t\t\tmerges.push(val); break;\n\n\t\t\tcase 0x0031: { /* 'BrtCellMeta' */\n\t\t\t\tcm = ((opts.xlmeta||{}).Cell||[])[val-1];\n\t\t\t} break;\n\n\t\t\tcase 0x01EE: /* 'BrtHLink' */\n\t\t\t\tvar rel = rels['!id'][val.relId];\n\t\t\t\tif(rel) {\n\t\t\t\t\tval.Target = rel.Target;\n\t\t\t\t\tif(val.loc) val.Target += \"#\"+val.loc;\n\t\t\t\t\tval.Rel = rel;\n\t\t\t\t} else if(val.relId == '') {\n\t\t\t\t\tval.Target = \"#\" + val.loc;\n\t\t\t\t}\n\t\t\t\tfor(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\tif(!s[\"!data\"][R][C]) s[\"!data\"][R][C] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[\"!data\"][R][C].l = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddr = encode_col(C) + encode_row(R);\n\t\t\t\t\t\tif(!s[addr]) s[addr] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[addr].l = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01AA: /* 'BrtArrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tarrayf.push(val);\n\t\t\t\tcell = ((opts.dense ? s[\"!data\"][R][C] : s[encode_col(C) + rr])/*:any*/);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tcell.F = encode_range(val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x01AB: /* 'BrtShrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tsharedf[encode_cell(val[0].s)] = val[1];\n\t\t\t\tcell = (opts.dense ? s[\"!data\"][R][C] : s[encode_col(C) + rr]);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tbreak;\n\n\t\t\t/* identical to 'ColInfo' in XLS */\n\t\t\tcase 0x003C: /* 'BrtColInfo' */\n\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level };\n\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00A1: /* 'BrtBeginAFilter' */\n\t\t\t\ts['!autofilter'] = { ref:encode_range(val) };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\t\ts['!margins'] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0093: /* 'BrtWsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tif(val.above || val.left) s['!outline'] = { above: val.above, left: val.left };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0089: /* 'BrtBeginWsView' */\n\t\t\t\tif(!wb.Views) wb.Views = [{}];\n\t\t\t\tif(!wb.Views[0]) wb.Views[0] = {};\n\t\t\t\tif(val.RTL) wb.Views[0].RTL = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01E5: /* 'BrtWsFmtInfo' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0040: /* 'BrtDVal' */\n\t\t\tcase 0x041D: /* 'BrtDVal14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0097: /* 'BrtPane' */\n\t\t\t\tbreak;\n\t\t\tcase 0x0098: /* 'BrtSel' */\n\t\t\tcase 0x00AF: /* 'BrtAFilterDateGroupItem' */\n\t\t\tcase 0x0284: /* 'BrtActiveX' */\n\t\t\tcase 0x0271: /* 'BrtBigName' */\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x018C: /* 'BrtBrk' */\n\t\t\tcase 0x0458: /* 'BrtCFIcon' */\n\t\t\tcase 0x047A: /* 'BrtCFRuleExt' */\n\t\t\tcase 0x01D7: /* 'BrtCFVO' */\n\t\t\tcase 0x041A: /* 'BrtCFVO14' */\n\t\t\tcase 0x0289: /* 'BrtCellIgnoreEC' */\n\t\t\tcase 0x0451: /* 'BrtCellIgnoreEC14' */\n\t\t\tcase 0x024D: /* 'BrtCellSmartTagProperty' */\n\t\t\tcase 0x025F: /* 'BrtCellWatch' */\n\t\t\tcase 0x0234: /* 'BrtColor' */\n\t\t\tcase 0x041F: /* 'BrtColor14' */\n\t\t\tcase 0x00A8: /* 'BrtColorFilter' */\n\t\t\tcase 0x00AE: /* 'BrtCustomFilter' */\n\t\t\tcase 0x049C: /* 'BrtCustomFilter14' */\n\t\t\tcase 0x01F3: /* 'BrtDRef' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\tcase 0x00AB: /* 'BrtDynamicFilter' */\n\t\t\tcase 0x00A7: /* 'BrtFilter' */\n\t\t\tcase 0x0499: /* 'BrtFilter14' */\n\t\t\tcase 0x00A9: /* 'BrtIconFilter' */\n\t\t\tcase 0x049D: /* 'BrtIconFilter14' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x0295: /* 'BrtListPart' */\n\t\t\tcase 0x027F: /* 'BrtOleObject' */\n\t\t\tcase 0x01DE: /* 'BrtPageSetup' */\n\t\t\tcase 0x0219: /* 'BrtPhoneticInfo' */\n\t\t\tcase 0x01DD: /* 'BrtPrintOptions' */\n\t\t\tcase 0x0218: /* 'BrtRangeProtection' */\n\t\t\tcase 0x044F: /* 'BrtRangeProtection14' */\n\t\t\tcase 0x02A8: /* 'BrtRangeProtectionIso' */\n\t\t\tcase 0x0450: /* 'BrtRangeProtectionIso14' */\n\t\t\tcase 0x0400: /* 'BrtRwDescent' */\n\t\t\tcase 0x0297: /* 'BrtSheetCalcProp' */\n\t\t\tcase 0x0217: /* 'BrtSheetProtection' */\n\t\t\tcase 0x02A6: /* 'BrtSheetProtectionIso' */\n\t\t\tcase 0x01F8: /* 'BrtSlc' */\n\t\t\tcase 0x0413: /* 'BrtSparkline' */\n\t\t\tcase 0x01AC: /* 'BrtTable' */\n\t\t\tcase 0x00AA: /* 'BrtTop10Filter' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0032: /* 'BrtValueMeta' */\n\t\t\tcase 0x0816: /* 'BrtWebExtension' */\n\t\t\tcase 0x0415: /* 'BrtWsFmtInfoEx14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(RR.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tdelete opts.supbooks;\n\tdelete opts['!row'];\n\n\tif(!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\tif(opts.sheetRows && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(colinfo.length > 0) s[\"!cols\"] = colinfo;\n\tif(rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n\treturn s;\n}\n\n/* TODO: something useful -- this is a stub */\nfunction write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, ws/*:Worksheet*/, last_seen/*:boolean*/)/*:boolean*/ {\n\tvar o/*:any*/ = ({r:R, c:C}/*:any*/);\n\tif(cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\tif(cell.v === undefined) return false;\n\tvar vv = \"\";\n\tswitch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'd': // no BrtCellDate :(\n\t\t\tcell = dup(cell);\n\t\t\tcell.z = cell.z || table_fmt[14];\n\t\t\tcell.v = datenum(parseDate(cell.v)); cell.t = 'n';\n\t\t\tbreak;\n\t\t/* falls through */\n\t\tcase 'n': case 'e': vv = ''+cell.v; break;\n\t\tdefault: vv = cell.v; break;\n\t}\n\t/* TODO: cell style */\n\to.s = get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n\tswitch(cell.t) {\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvv = get_sst_id(opts.Strings, (cell.v == null ? \"\" : String(cell.v)/*:any*/), opts.revStrings);\n\t\t\t\to.t = \"s\"; o.v = vv;\n\t\t\t\tif(last_seen) write_record(ba, 0x0012 /* BrtShortIsst */, write_BrtShortIsst(cell, o));\n\t\t\t\telse write_record(ba, 0x0007 /* BrtCellIsst */, write_BrtCellIsst(cell, o));\n\t\t\t} else {\n\t\t\t\to.t = \"str\";\n\t\t\t\tif(last_seen) write_record(ba, 0x0011 /* BrtShortSt */, write_BrtShortSt(cell, o));\n\t\t\t\telse write_record(ba, 0x0006 /* BrtCellSt */, write_BrtCellSt(cell, o));\n\t\t\t}\n\t\t\treturn true;\n\t\tcase 'n':\n\t\t\t/* TODO: determine threshold for Real vs RK */\n\t\t\tif(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000D /* BrtShortRk */, write_BrtShortRk(cell, o));\n\t\t\t\telse write_record(ba, 0x0002 /* BrtCellRk */, write_BrtCellRk(cell, o));\n\t\t\t} else {\n\t\t\t\tif(last_seen) write_record(ba, 0x0010 /* BrtShortReal */, write_BrtShortReal(cell, o));\n\t\t\t\telse write_record(ba, 0x0005 /* BrtCellReal */, write_BrtCellReal(cell, o));\n\t\t\t} return true;\n\t\tcase 'b':\n\t\t\to.t = \"b\";\n\t\t\tif(last_seen) write_record(ba, 0x000F /* BrtShortBool */, write_BrtShortBool(cell, o));\n\t\t\telse write_record(ba, 0x0004 /* BrtCellBool */, write_BrtCellBool(cell, o));\n\t\t\treturn true;\n\t\tcase 'e':\n\t\t\to.t = \"e\";\n\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError(cell, o));\n\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError(cell, o));\n\t\t\treturn true;\n\t}\n\tif(last_seen) write_record(ba, 0x000C /* BrtShortBlank */, write_BrtShortBlank(cell, o));\n\telse write_record(ba, 0x0001 /* BrtCellBlank */, write_BrtCellBlank(cell, o));\n\treturn true;\n}\n\nfunction write_CELLTABLE(ba, ws/*:Worksheet*/, idx/*:number*/, opts/*::, wb:Workbook*/) {\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols/*:Array*/ = [];\n\twrite_record(ba, 0x0091 /* BrtBeginSheetData */);\n\tvar dense = ws[\"!data\"] != null;\n\tvar cap = range.e.r;\n\tif(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\tfor(var R = range.s.r; R <= cap; ++R) {\n\t\trr = encode_row(R);\n\t\t/* [ACCELLTABLE] */\n\t\t/* BrtRowHdr */\n\t\twrite_row_header(ba, ws, range, R);\n\t\tvar last_seen = false;\n\t\tif(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t/* *16384CELL */\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[ref];\n\t\t\tif(!cell) { last_seen = false; continue; }\n\t\t\t/* write cell */\n\t\t\tlast_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen);\n\t\t}\n\t}\n\twrite_record(ba, 0x0092 /* BrtEndSheetData */);\n}\n\nfunction write_MERGECELLS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!merges']) return;\n\twrite_record(ba, 0x00B1 /* BrtBeginMergeCells */, write_BrtBeginMergeCells(ws['!merges'].length));\n\tws['!merges'].forEach(function(m) { write_record(ba, 0x00B0 /* BrtMergeCell */, write_BrtMergeCell(m)); });\n\twrite_record(ba, 0x00B2 /* BrtEndMergeCells */);\n}\n\nfunction write_COLINFOS(ba, ws/*:Worksheet*//*::, idx:number, opts, wb:Workbook*/) {\n\tif(!ws || !ws['!cols']) return;\n\twrite_record(ba, 0x0186 /* BrtBeginColInfos */);\n\tws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 0x003C /* 'BrtColInfo' */, write_BrtColInfo(i, m)); });\n\twrite_record(ba, 0x0187 /* BrtEndColInfos */);\n}\n\nfunction write_IGNOREECS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!ref']) return;\n\twrite_record(ba, 0x0288 /* BrtBeginCellIgnoreECs */);\n\twrite_record(ba, 0x0289 /* BrtCellIgnoreEC */, write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n\twrite_record(ba, 0x028A /* BrtEndCellIgnoreECs */);\n}\n\nfunction write_HLINKS(ba, ws/*:Worksheet*/, rels) {\n\t/* *BrtHLink */\n\tws['!links'].forEach(function(l) {\n\t\tif(!l[1].Target) return;\n\t\tvar rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, \"\"), RELS.HLINK);\n\t\twrite_record(ba, 0x01EE /* BrtHLink */, write_BrtHLink(l, rId));\n\t});\n\tdelete ws['!links'];\n}\nfunction write_LEGACYDRAWING(ba, ws/*:Worksheet*/, idx/*:number*/, rels) {\n\t/* [BrtLegacyDrawing] */\n\tif(ws['!comments'].length > 0) {\n\t\tvar rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\twrite_record(ba, 0x0227 /* BrtLegacyDrawing */, write_RelID(\"rId\" + rId));\n\t\tws['!legacy'] = rId;\n\t}\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n\tif(!ws['!autofilter']) return;\n\tvar data = ws['!autofilter'];\n\tvar ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n\n\t/* Update FilterDatabase defined name for the worksheet */\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = formula_quote_sheet_name(wb.SheetNames[idx]) + \"!\" + fix_range(ref); break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: formula_quote_sheet_name(wb.SheetNames[idx]) + \"!\" + fix_range(ref) });\n\n\twrite_record(ba, 0x00A1 /* BrtBeginAFilter */, write_UncheckedRfX(safe_decode_range(ref)));\n\t/* *FILTERCOLUMN */\n\t/* [SORTSTATE] */\n\t/* BrtEndAFilter */\n\twrite_record(ba, 0x00A2 /* BrtEndAFilter */);\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n\twrite_record(ba, 0x0085 /* BrtBeginWsViews */);\n\t{ /* 1*WSVIEW2 */\n\t\t/* [ACUID] */\n\t\twrite_record(ba, 0x0089 /* BrtBeginWsView */, write_BrtBeginWsView(ws, Workbook));\n\t\t/* [BrtPane] */\n\t\t/* *4BrtSel */\n\t\t/* *4SXSELECT */\n\t\t/* *FRT */\n\t\twrite_record(ba, 0x008A /* BrtEndWsView */);\n\t}\n\t/* *FRT */\n\twrite_record(ba, 0x0086 /* BrtEndWsViews */);\n}\n\nfunction write_WSFMTINFO(/*::ba, ws*/) {\n\t/* [ACWSFMTINFO] */\n\t// write_record(ba, 0x01E5 /* BrtWsFmtInfo */, write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n\tif(!ws['!protect']) return;\n\t/* [BrtSheetProtectionIso] */\n\twrite_record(ba, 0x0217 /* BrtSheetProtection */, write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx/*:number*/, opts, wb/*:Workbook*/, rels) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar c/*:string*/ = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {}\n\tvar r = safe_decode_range(ws['!ref'] || \"A1\");\n\tif(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n\t\tr.e.c = Math.min(r.e.c, 0x3FFF);\n\t\tr.e.r = Math.min(r.e.c, 0xFFFFF);\n\t}\n\tws['!links'] = [];\n\t/* passed back to write_zip and removed there */\n\tws['!comments'] = [];\n\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n\tif(wb.vbaraw || ws['!outline']) write_record(ba, 0x0093 /* BrtWsProp */, write_BrtWsProp(c, ws['!outline']));\n\twrite_record(ba, 0x0094 /* BrtWsDim */, write_BrtWsDim(r));\n\twrite_WSVIEWS2(ba, ws, wb.Workbook);\n\twrite_WSFMTINFO(ba, ws);\n\twrite_COLINFOS(ba, ws, idx, opts, wb);\n\twrite_CELLTABLE(ba, ws, idx, opts, wb);\n\t/* [BrtSheetCalcProp] */\n\twrite_SHEETPROTECT(ba, ws);\n\t/* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\t/* [SCENMAN] */\n\twrite_AUTOFILTER(ba, ws, wb, idx);\n\t/* [SORTSTATE] */\n\t/* [DCON] */\n\t/* [USERSHVIEWS] */\n\twrite_MERGECELLS(ba, ws);\n\t/* [BrtPhoneticInfo] */\n\t/* *CONDITIONALFORMATTING */\n\t/* [DVALS] */\n\twrite_HLINKS(ba, ws, rels);\n\t/* [BrtPrintOptions] */\n\tif(ws['!margins']) write_record(ba, 0x01DC /* BrtMargins */, write_BrtMargins(ws['!margins']));\n\t/* [BrtPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* [RWBRK] */\n\t/* [COLBRK] */\n\t/* *BrtBigName */\n\t/* [CELLWATCHES] */\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws);\n\t/* [SMARTTAGS] */\n\t/* [BrtDrawing] */\n\twrite_LEGACYDRAWING(ba, ws, idx, rels);\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [OLEOBJECTS] */\n\t/* [ACTIVEXCONTROLS] */\n\t/* [WEBPUBITEMS] */\n\t/* [LISTPARTS] */\n\t/* FRTWORKSHEET */\n\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n\treturn ba.end();\n}\nfunction parse_Cache(data/*:string*/)/*:[Array, string, ?string]*/ {\n\tvar col/*:Array*/ = [];\n\tvar num = data.match(/^/);\n\tvar f;\n\n\t/* 21.2.2.150 pt CT_NumVal */\n\t(data.match(/(.*?)<\\/c:pt>/mg)||[]).forEach(function(pt) {\n\t\tvar q = pt.match(/(.*)<\\/c:v><\\/c:pt>/);\n\t\tif(!q) return;\n\t\tcol[+q[1]] = num ? +q[2] : q[2];\n\t});\n\n\t/* 21.2.2.71 formatCode CT_Xstring */\n\tvar nf = unescapexml((data.match(/([\\s\\S]*?)<\\/c:formatCode>/) || [\"\",\"General\"])[1]);\n\n\t(data.match(/(.*?)<\\/c:f>/mg)||[]).forEach(function(F) { f = F.replace(/<.*?>/g,\"\"); });\n\n\treturn [col, nf, f];\n}\n\n/* 21.2 DrawingML - Charts */\nfunction parse_chart(data/*:?string*/, name/*:string*/, opts, rels, wb, csheet) {\n\tvar cs/*:Worksheet*/ = ((csheet || {\"!type\":\"chart\"})/*:any*/);\n\tif(!data) return csheet;\n\t/* 21.2.2.27 chart CT_Chart */\n\n\tvar C = 0, R = 0, col = \"A\";\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\t/* 21.2.2.120 numCache CT_NumData */\n\t(data.match(/[\\s\\S]*?<\\/c:numCache>/gm)||[]).forEach(function(nc) {\n\t\tvar cache = parse_Cache(nc);\n\t\trefguess.s.r = refguess.s.c = 0;\n\t\trefguess.e.c = C;\n\t\tcol = encode_col(C);\n\t\tcache[0].forEach(function(n,i) {\n\t\t\tif(cs[\"!data\"]) {\n\t\t\t\tif(!cs[\"!data\"][i]) cs[\"!data\"][i] = [];\n\t\t\t\tcs[\"!data\"][i][C] = {t:'n', v:n, z:cache[1] };\n\t\t\t} else cs[col + encode_row(i)] = {t:'n', v:n, z:cache[1] };\n\t\t\tR = i;\n\t\t});\n\t\tif(refguess.e.r < R) refguess.e.r = R;\n\t\t++C;\n\t});\n\tif(C > 0) cs[\"!ref\"] = encode_range(refguess);\n\treturn cs;\n}\n/* 18.3 Worksheets also covers Chartsheets */\nfunction parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\t/* 18.3.1.12 chartsheet CT_ChartSheet */\n\tif(!rels) rels = {'!id':{}};\n\tvar s = ({'!type':\"chart\", '!drawel':null, '!rel':\"\"}/*:any*/);\n\tvar m;\n\n\t/* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\tvar sheetPr = data.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.36 drawing CT_Drawing */\n\tif((m = data.match(/drawing r:id=\"(.*?)\"/))) s['!rel'] = m[1];\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\n//function write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n//\tvar o = [XML_HEADER, writextag('chartsheet', null, {\n//\t\t'xmlns': XMLNS_main[0],\n//\t\t'xmlns:r': XMLNS.r\n//\t})];\n//\to[o.length] = writextag(\"drawing\", null, {\"r:id\": \"rId1\"});\n//\tadd_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n//\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n//\treturn o.join(\"\");\n//}\n\n/* [MS-XLSB] 2.4.331 BrtCsProp */\nfunction parse_BrtCsProp(data, length/*:number*/) {\n\tdata.l += 10;\n\tvar name = parse_XLWideString(data, length - 10);\n\treturn { name: name };\n}\n\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\nfunction parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tvar s = {'!type':\"chart\", '!drawel':null, '!rel':\"\"};\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function cs_parse(val, R, RT) {\n\t\tswitch(RT) {\n\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\t\ts['!rel'] = val; break;\n\n\t\t\tcase 0x028B: /* 'BrtCsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x028C: /* 'BrtCsPageSetup' */\n\t\t\tcase 0x029D: /* 'BrtCsProtection' */\n\t\t\tcase 0x02A7: /* 'BrtCsProtectionIso' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\n//function write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {\n//\tvar ba = buf_array();\n//\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n//\t/* [BrtCsProp] */\n//\t/* CSVIEWS */\n//\t/* [[BrtCsProtectionIso] BrtCsProtection] */\n//\t/* [USERCSVIEWS] */\n//\t/* [BrtMargins] */\n//\t/* [BrtCsPageSetup] */\n//\t/* [HEADERFOOTER] */\n//\t/* BrtDrawing */\n//\t/* [BrtLegacyDrawing] */\n//\t/* [BrtLegacyDrawingHF] */\n//\t/* [BrtBkHim] */\n//\t/* [WEBPUBITEMS] */\n//\t/* FRTCHARTSHEET */\n//\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n//\treturn ba.end();\n//}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\nvar WBPropsDef = [\n\t['allowRefreshQuery', false, \"bool\"],\n\t['autoCompressPictures', true, \"bool\"],\n\t['backupFile', false, \"bool\"],\n\t['checkCompatibility', false, \"bool\"],\n\t['CodeName', ''],\n\t['date1904', false, \"bool\"],\n\t['defaultThemeVersion', 0, \"int\"],\n\t['filterPrivacy', false, \"bool\"],\n\t['hidePivotFieldList', false, \"bool\"],\n\t['promptedSolutions', false, \"bool\"],\n\t['publishItems', false, \"bool\"],\n\t['refreshAllConnections', false, \"bool\"],\n\t['saveExternalLinkValues', true, \"bool\"],\n\t['showBorderUnselectedTables', true, \"bool\"],\n\t['showInkAnnotation', true, \"bool\"],\n\t['showObjects', 'all'],\n\t['showPivotChartFilter', false, \"bool\"],\n\t['updateLinks', 'userSet']\n];\n\n/* 18.2.30 (CT_BookView) Defaults */\nvar WBViewDef = [\n\t['activeTab', 0, \"int\"],\n\t['autoFilterDateGrouping', true, \"bool\"],\n\t['firstSheet', 0, \"int\"],\n\t['minimized', false, \"bool\"],\n\t['showHorizontalScroll', true, \"bool\"],\n\t['showSheetTabs', true, \"bool\"],\n\t['showVerticalScroll', true, \"bool\"],\n\t['tabRatio', 600, \"int\"],\n\t['visibility', 'visible']\n\t//window{Height,Width}, {x,y}Window\n];\n\n/* 18.2.19 (CT_Sheet) Defaults */\nvar SheetDef = [\n\t//['state', 'visible']\n];\n\n/* 18.2.2 (CT_CalcPr) Defaults */\nvar CalcPrDef = [\n\t['calcCompleted', 'true'],\n\t['calcMode', 'auto'],\n\t['calcOnSave', 'true'],\n\t['concurrentCalc', 'true'],\n\t['fullCalcOnLoad', 'false'],\n\t['fullPrecision', 'true'],\n\t['iterate', 'false'],\n\t['iterateCount', '100'],\n\t['iterateDelta', '0.001'],\n\t['refMode', 'A1']\n];\n\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n/*var CustomWBViewDef = [\n\t['autoUpdate', 'false'],\n\t['changesSavedWin', 'false'],\n\t['includeHiddenRowCol', 'true'],\n\t['includePrintSettings', 'true'],\n\t['maximized', 'false'],\n\t['minimized', 'false'],\n\t['onlySync', 'false'],\n\t['personalView', 'false'],\n\t['showComments', 'commIndicator'],\n\t['showFormulaBar', 'true'],\n\t['showHorizontalScroll', 'true'],\n\t['showObjects', 'all'],\n\t['showSheetTabs', 'true'],\n\t['showStatusbar', 'true'],\n\t['showVerticalScroll', 'true'],\n\t['tabRatio', '600'],\n\t['xWindow', '0'],\n\t['yWindow', '0']\n];*/\n\nfunction push_defaults_array(target, defaults) {\n\tfor(var j = 0; j != target.length; ++j) { var w = target[j];\n\t\tfor(var i=0; i != defaults.length; ++i) { var z = defaults[i];\n\t\t\tif(w[z[0]] == null) w[z[0]] = z[1];\n\t\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]); break;\n\t\t\tcase \"int\": if(typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10); break;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction push_defaults(target, defaults) {\n\tfor(var i = 0; i != defaults.length; ++i) { var z = defaults[i];\n\t\tif(target[z[0]] == null) target[z[0]] = z[1];\n\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]); break;\n\t\t\tcase \"int\": if(typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10); break;\n\t\t}\n\t}\n}\n\nfunction parse_wb_defaults(wb) {\n\tpush_defaults(wb.WBProps, WBPropsDef);\n\tpush_defaults(wb.CalcPr, CalcPrDef);\n\n\tpush_defaults_array(wb.WBView, WBViewDef);\n\tpush_defaults_array(wb.Sheets, SheetDef);\n\n\t_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb/*:Workbook*/)/*:string*/ {\n\t/* TODO: store date1904 somewhere else */\n\tif(!wb.Workbook) return \"false\";\n\tif(!wb.Workbook.WBProps) return \"false\";\n\treturn parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = /*#__PURE__*/\":][*?\\/\\\\\".split(\"\");\nfunction check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ {\n\tif(n.length > 31) { if(safe) return false; throw new Error(\"Sheet names cannot exceed 31 chars\"); }\n\tvar _good = true;\n\tbadchars.forEach(function(c) {\n\t\tif(n.indexOf(c) == -1) return;\n\t\tif(!safe) throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n\t\t_good = false;\n\t});\n\treturn _good;\n}\nfunction check_wb_names(N, S, codes) {\n\tN.forEach(function(n,i) {\n\t\tcheck_ws_name(n);\n\t\tfor(var j = 0; j < i; ++j) if(n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n\t\tif(codes) {\n\t\t\tvar cn = (S && S[i] && S[i].CodeName) || n;\n\t\t\tif(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n\t\t}\n\t});\n}\nfunction check_wb(wb) {\n\tif(!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n\tif(!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n\tvar Sheets = (wb.Workbook && wb.Workbook.Sheets) || [];\n\tcheck_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n\twb.SheetNames.forEach(function(n, i) {\n\t\tvar ws = wb.Sheets[n];\n\t\tif(!ws || !ws[\"!autofilter\"]) return;\n\t\tvar DN;\n\t\tif(!wb.Workbook) wb.Workbook = {};\n\t\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\t\twb.Workbook.Names.forEach(function(dn) { if(dn.Name == \"_xlnm._FilterDatabase\" && dn.Sheet == i) DN = dn; });\n\t\tvar nn = formula_quote_sheet_name(n) + \"!\" + fix_range(ws[\"!autofilter\"].ref);\n\t\tif(DN) DN.Ref = nn;\n\t\telse wb.Workbook.Names.push({Name: \"_xlnm._FilterDatabase\", Sheet: i, Ref: nn});\n\t});\n\t/* TODO: validate workbook */\n}\n/* 18.2 Workbook */\nvar wbnsregex = /<\\w+:workbook/;\nfunction parse_wb_xml(data, opts)/*:WorkbookFile*/ {\n\tif(!data) throw new Error(\"Could not find file\");\n\tvar wb = /*::(*/{ AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: \"\" }/*::)*/;\n\tvar pass = false, xmlns = \"xmlns\";\n\tvar dname = {}, dnstart = 0;\n\tdata.replace(tagregex, function xml_wb(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.13 fileVersion CT_FileVersion ? */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.12 fileSharing CT_FileSharing ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.28 workbookPr CT_WorkbookPr ? */\n\t\t\tcase '':\n\t\t\t\tWBPropsDef.forEach(function(w) {\n\t\t\t\t\tif(y[w[0]] == null) return;\n\t\t\t\t\tswitch(w[2]) {\n\t\t\t\t\t\tcase \"bool\": wb.WBProps[w[0]] = parsexmlbool(y[w[0]]); break;\n\t\t\t\t\t\tcase \"int\": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;\n\t\t\t\t\t\tdefault: wb.WBProps[w[0]] = y[w[0]];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.1 bookViews CT_BookViews ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.30 workbookView CT_BookView + */\n\t\t\tcase '': delete y[0]; wb.WBView.push(y); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.20 sheets CT_Sheets 1 */\n\t\t\tcase '': case '': break; // aggregate sheet\n\t\t\t/* 18.2.19 sheet CT_Sheet + */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.15 functionGroups CT_FunctionGroups ? */\n\t\t\tcase '': break;\n\t\t\t/* 18.2.14 functionGroup CT_FunctionGroup + */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.8 externalReference CT_ExternalReference + */\n\t\t\tcase '': break;\n\t\t\tcase '': case '': pass=false; break;\n\t\t\t/* 18.2.5 definedName CT_DefinedName + */\n\t\t\tcase '': {\n\t\t\t\tdname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n\t\t\t\twb.Names.push(dname);\n\t\t\t} break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.2 calcPr CT_CalcPr ? */\n\t\t\tcase '': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.18 pivotCaches CT_PivotCaches ? */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.22 smartTagType CT_SmartTagType ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* Others */\n\t\t\tcase '': pass=true; break;\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* TODO */\n\t\t\tcase ' 0);\n\n\t/* fileVersion */\n\t/* fileSharing */\n\n\tvar workbookPr/*:any*/ = ({codeName:\"ThisWorkbook\"}/*:any*/);\n\tif(wb.Workbook && wb.Workbook.WBProps) {\n\t\tWBPropsDef.forEach(function(x) {\n\t\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == null) return;\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == x[1]) return;\n\t\t\tworkbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]/*:any*/);\n\t\t});\n\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\tif(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; }\n\t}\n\to[o.length] = (writextag('workbookPr', null, workbookPr));\n\n\t/* workbookProtection */\n\n\tvar sheets = wb.Workbook && wb.Workbook.Sheets || [];\n\tvar i = 0;\n\n\t/* bookViews only written if first worksheet is hidden */\n\tif(sheets && sheets[0] && !!sheets[0].Hidden) {\n\t\to[o.length] = \"\";\n\t\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\t\tif(!sheets[i]) break;\n\t\t\tif(!sheets[i].Hidden) break;\n\t\t}\n\t\tif(i == wb.SheetNames.length) i = 0;\n\t\to[o.length] = '';\n\t\to[o.length] = \"\";\n\t}\n\n\to[o.length] = \"\";\n\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\tvar sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))}/*:any*/);\n\t\tsht.sheetId = \"\"+(i+1);\n\t\tsht[\"r:id\"] = \"rId\"+(i+1);\n\t\tif(sheets[i]) switch(sheets[i].Hidden) {\n\t\t\tcase 1: sht.state = \"hidden\"; break;\n\t\t\tcase 2: sht.state = \"veryHidden\"; break;\n\t\t}\n\t\to[o.length] = (writextag('sheet',null,sht));\n\t}\n\to[o.length] = \"\";\n\n\t/* functionGroups */\n\t/* externalReferences */\n\n\tif(write_names) {\n\t\to[o.length] = \"\";\n\t\tif(wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {\n\t\t\tvar d/*:any*/ = {name:n.Name};\n\t\t\tif(n.Comment) d.comment = n.Comment;\n\t\t\tif(n.Sheet != null) d.localSheetId = \"\"+n.Sheet;\n\t\t\tif(n.Hidden) d.hidden = \"1\";\n\t\t\tif(!n.Ref) return;\n\t\t\to[o.length] = writextag('definedName', escapexml(n.Ref), d);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\n\t/* calcPr */\n\t/* oleSize */\n\t/* customWorkbookViews */\n\t/* pivotCaches */\n\t/* smartTagPr */\n\t/* smartTagTypes */\n\t/* webPublishing */\n\t/* fileRecoveryPr */\n\t/* webPublishObjects */\n\t/* extLst */\n\n\tif(o.length>2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\nfunction parse_BrtBundleSh(data, length/*:number*/) {\n\tvar z = {};\n\tz.Hidden = data.read_shift(4); //hsState ST_SheetState\n\tz.iTabID = data.read_shift(4);\n\tz.strRelID = parse_RelID(data,length-8);\n\tz.name = parse_XLWideString(data);\n\treturn z;\n}\nfunction write_BrtBundleSh(data, o) {\n\tif(!o) o = new_buf(127);\n\to.write_shift(4, data.Hidden);\n\to.write_shift(4, data.iTabID);\n\twrite_RelID(data.strRelID, o);\n\twrite_XLWideString(data.name.slice(0,31), o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.815 BrtWbProp */\nfunction parse_BrtWbProp(data, length)/*:WBProps*/ {\n\tvar o/*:WBProps*/ = ({}/*:any*/);\n\tvar flags = data.read_shift(4);\n\to.defaultThemeVersion = data.read_shift(4);\n\tvar strName = (length > 8) ? parse_XLWideString(data) : \"\";\n\tif(strName.length > 0) o.CodeName = strName;\n\to.autoCompressPictures = !!(flags & 0x10000);\n\to.backupFile = !!(flags & 0x40);\n\to.checkCompatibility = !!(flags & 0x1000);\n\to.date1904 = !!(flags & 0x01);\n\to.filterPrivacy = !!(flags & 0x08);\n\to.hidePivotFieldList = !!(flags & 0x400);\n\to.promptedSolutions = !!(flags & 0x10);\n\to.publishItems = !!(flags & 0x800);\n\to.refreshAllConnections = !!(flags & 0x40000);\n\to.saveExternalLinkValues = !!(flags & 0x80);\n\to.showBorderUnselectedTables = !!(flags & 0x04);\n\to.showInkAnnotation = !!(flags & 0x20);\n\to.showObjects = [\"all\", \"placeholders\", \"none\"][(flags >> 13) & 0x03];\n\to.showPivotChartFilter = !!(flags & 0x8000);\n\to.updateLinks = [\"userSet\", \"never\", \"always\"][(flags >> 8) & 0x03];\n\treturn o;\n}\nfunction write_BrtWbProp(data/*:?WBProps*/, o) {\n\tif(!o) o = new_buf(72);\n\tvar flags = 0;\n\tif(data) {\n\t\t/* TODO: mirror parse_BrtWbProp fields */\n\t\tif(data.date1904) flags |= 0x01;\n\t\tif(data.filterPrivacy) flags |= 0x08;\n\t}\n\to.write_shift(4, flags);\n\to.write_shift(4, 0);\n\twrite_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n\treturn o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n\tvar o = {};\n\tdata.read_shift(4);\n\to.ArchID = data.read_shift(4);\n\tdata.l += length - 8;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.687 BrtName */\nfunction parse_BrtName(data, length, opts) {\n\tvar end = data.l + length;\n\tvar flags = data.read_shift(4);\n\tdata.l += 1; //var chKey = data.read_shift(1);\n\tvar itab = data.read_shift(4);\n\tvar name = parse_XLNameWideString(data);\n\tvar formula = parse_XLSBNameParsedFormula(data, 0, opts);\n\tvar comment = parse_XLNullableWideString(data);\n\tif(flags & 0x20) name = \"_xlnm.\" + name;\n\t//if(0 /* fProc */) {\n\t\t// unusedstring1: XLNullableWideString\n\t\t// description: XLNullableWideString\n\t\t// helpTopic: XLNullableWideString\n\t\t// unusedstring2: XLNullableWideString\n\t//}\n\tdata.l = end;\n\tvar out = ({Name:name, Ptg:formula, Flags: flags}/*:any*/);\n\tif(itab < 0xFFFFFFF) out.Sheet = itab;\n\tif(comment) out.Comment = comment;\n\treturn out;\n}\nfunction write_BrtName(name, wb) {\n\tvar o = new_buf(9);\n\tvar flags = 0;\n\tvar dname = name.Name;\n\tif(XLSLblBuiltIn.indexOf(dname) > -1) { flags |= 0x20; dname = dname.slice(6); }\n\to.write_shift(4, flags); // flags\n\to.write_shift(1, 0); // chKey\n\to.write_shift(4, name.Sheet == null ? 0xFFFFFFFF : name.Sheet);\n\n\tvar arr = [\n\t\to,\n\t\twrite_XLWideString(dname),\n\t\twrite_XLSBNameParsedFormula(name.Ref, wb)\n\t];\n\tif(name.Comment) arr.push(write_XLNullableWideString(name.Comment));\n\telse {\n\t\tvar x = new_buf(4);\n\t\tx.write_shift(4, 0xFFFFFFFF);\n\t\tarr.push(x);\n\t}\n\n\t// if macro (flags & 0x0F):\n\t// write_shift(4, 0xFFFFFFFF);\n\t// write_XLNullableWideString(description)\n\t// write_XLNullableWideString(helpTopic)\n\t// write_shift(4, 0xFFFFFFFF);\n\n\treturn bconcat(arr);\n}\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction parse_wb_bin(data, opts)/*:WorkbookFile*/ {\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \"\" };\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\n\tif(!opts) opts = {};\n\topts.biff = 12;\n\n\tvar Names = [];\n\tvar supbooks = ([[]]/*:any*/);\n\tsupbooks.SheetNames = [];\n\tsupbooks.XTI = [];\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtFRTArchID$\", f:parse_BrtFRTArchID$ };\n\n\trecordhopper(data, function hopper_wb(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009C: /* 'BrtBundleSh' */\n\t\t\t\tsupbooks.SheetNames.push(val.name);\n\t\t\t\twb.Sheets.push(val); break;\n\n\t\t\tcase 0x0099: /* 'BrtWbProp' */\n\t\t\t\twb.WBProps = val; break;\n\n\t\t\tcase 0x0027: /* 'BrtName' */\n\t\t\t\tif(val.Sheet != null) opts.SID = val.Sheet;\n\t\t\t\tval.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);\n\t\t\t\tdelete opts.SID;\n\t\t\t\tdelete val.Ptg;\n\t\t\t\tNames.push(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x040C: /* 'BrtNameExt' */ break;\n\n\t\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\tcase 0x029B: /* 'BrtSupAddin' */\n\t\t\t\tif(!supbooks[0].length) supbooks[0] = [RT, val];\n\t\t\t\telse supbooks.push([RT, val]);\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = [];\n\t\t\t\tbreak;\n\t\t\tcase 0x016A: /* 'BrtExternSheet' */\n\t\t\t\tif(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n\t\t\t\tsupbooks.XTI = supbooks.XTI.concat(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x0169: /* 'BrtPlaceholderName' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0817: /* 'BrtAbsPath15' */\n\t\t\tcase 0x009E: /* 'BrtBookView' */\n\t\t\tcase 0x008F: /* 'BrtBeginBundleShs' */\n\t\t\tcase 0x0298: /* 'BrtBeginFnGroup' */\n\t\t\tcase 0x0161: /* 'BrtBeginExternals' */\n\t\t\t\tbreak;\n\n\t\t\t/* case 'BrtModelTimeGroupingCalcCol' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0C01: /* 'BrtRevisionPtr' */\n\t\t\tcase 0x0216: /* 'BrtBookProtection' */\n\t\t\tcase 0x02A5: /* 'BrtBookProtectionIso' */\n\t\t\tcase 0x009D: /* 'BrtCalcProp' */\n\t\t\tcase 0x0262: /* 'BrtCrashRecErr' */\n\t\t\tcase 0x0802: /* 'BrtDecoupledPivotCacheID' */\n\t\t\tcase 0x009B: /* 'BrtFileRecover' */\n\t\t\tcase 0x0224: /* 'BrtFileSharing' */\n\t\t\tcase 0x02A4: /* 'BrtFileSharingIso' */\n\t\t\tcase 0x0080: /* 'BrtFileVersion' */\n\t\t\tcase 0x0299: /* 'BrtFnGroup' */\n\t\t\tcase 0x0850: /* 'BrtModelRelationship' */\n\t\t\tcase 0x084D: /* 'BrtModelTable' */\n\t\t\tcase 0x0225: /* 'BrtOleSize' */\n\t\t\tcase 0x0805: /* 'BrtPivotTableRef' */\n\t\t\tcase 0x0254: /* 'BrtSmartTagType' */\n\t\t\tcase 0x081C: /* 'BrtTableSlicerCacheID' */\n\t\t\tcase 0x081B: /* 'BrtTableSlicerCacheIDs' */\n\t\t\tcase 0x0822: /* 'BrtTimelineCachePivotCacheID' */\n\t\t\tcase 0x018D: /* 'BrtUserBookView' */\n\t\t\tcase 0x009A: /* 'BrtWbFactoid' */\n\t\t\tcase 0x045D: /* 'BrtWbProp14' */\n\t\t\tcase 0x0229: /* 'BrtWebOpt' */\n\t\t\tcase 0x082B: /* 'BrtWorkBookPr15' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tcase 0x0010: /* 'BrtFRTArchID$' */ break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */ && state[state.length-1] != 0x0023 /* BrtFRTBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tparse_wb_defaults(wb);\n\n\t// $FlowIgnore\n\twb.Names = Names;\n\n\t(wb/*:any*/).supbooks = supbooks;\n\treturn wb;\n}\n\nfunction write_BUNDLESHS(ba, wb/*::, opts*/) {\n\twrite_record(ba, 0x008F /* BrtBeginBundleShs */);\n\tfor(var idx = 0; idx != wb.SheetNames.length; ++idx) {\n\t\tvar viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n\t\tvar d = { Hidden: viz, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };\n\t\twrite_record(ba, 0x009C /* BrtBundleSh */, write_BrtBundleSh(d));\n\t}\n\twrite_record(ba, 0x0090 /* BrtEndBundleShs */);\n}\n\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\nfunction write_BrtFileVersion(data, o) {\n\tif(!o) o = new_buf(127);\n\tfor(var i = 0; i != 4; ++i) o.write_shift(4, 0);\n\twrite_XLWideString(\"SheetJS\", o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(\"7262\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.301 BrtBookView */\nfunction write_BrtBookView(idx, o) {\n\tif(!o) o = new_buf(29);\n\to.write_shift(-4, 0);\n\to.write_shift(-4, 460);\n\to.write_shift(4, 28800);\n\to.write_shift(4, 17600);\n\to.write_shift(4, 500);\n\to.write_shift(4, idx);\n\to.write_shift(4, idx);\n\tvar flags = 0x78;\n\to.write_shift(1, flags);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb/*::, opts*/) {\n\t/* required if hidden tab appears before visible tab */\n\tif(!wb.Workbook || !wb.Workbook.Sheets) return;\n\tvar sheets = wb.Workbook.Sheets;\n\tvar i = 0, vistab = -1, hidden = -1;\n\tfor(; i < sheets.length; ++i) {\n\t\tif(!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;\n\t\telse if(sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n\t}\n\tif(hidden > vistab) return;\n\twrite_record(ba, 0x0087 /* BrtBeginBookViews */);\n\twrite_record(ba, 0x009E /* BrtBookView */, write_BrtBookView(vistab));\n\t/* 1*(BrtBookView *FRT) */\n\twrite_record(ba, 0x0088 /* BrtEndBookViews */);\n}\n\nfunction write_BRTNAMES(ba, wb) {\n\tif(!wb.Workbook || !wb.Workbook.Names) return;\n\twb.Workbook.Names.forEach(function(name) { try {\n\t\tif(name.Flags & 0x0e) return; // TODO: macro name write\n\t\twrite_record(ba, 0x0027 /* BrtName */, write_BrtName(name, wb));\n\t} catch(e) {\n\t\tconsole.error(\"Could not serialize defined name \" + JSON.stringify(name));\n\t} });\n}\n\nfunction write_SELF_EXTERNS_xlsb(wb) {\n\tvar L = wb.SheetNames.length;\n\tvar o = new_buf(12 * L + 28);\n\to.write_shift(4, L + 2);\n\to.write_shift(4, 0); o.write_shift(4, -2); o.write_shift(4, -2); // workbook-level reference\n\to.write_shift(4, 0); o.write_shift(4, -1); o.write_shift(4, -1); // #REF!...\n\tfor(var i = 0; i < L; ++i) {\n\t\to.write_shift(4, 0); o.write_shift(4, i); o.write_shift(4, i);\n\t}\n\treturn o;\n}\nfunction write_EXTERNALS_xlsb(ba, wb) {\n\twrite_record(ba, 0x0161 /* BrtBeginExternals */);\n\twrite_record(ba, 0x0165 /* BrtSupSelf */);\n\twrite_record(ba, 0x016A /* BrtExternSheet */, write_SELF_EXTERNS_xlsb(wb, 0));\n\twrite_record(ba, 0x0162 /* BrtEndExternals */);\n}\n\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n/*function write_BrtCalcProp(data, o) {\n\tif(!o) o = new_buf(26);\n\to.write_shift(4,0); // force recalc\n\to.write_shift(4,1);\n\to.write_shift(4,0);\n\twrite_Xnum(0, o);\n\to.write_shift(-4, 1023);\n\to.write_shift(1, 0x33);\n\to.write_shift(1, 0x00);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.4.646 BrtFileRecover */\n/*function write_BrtFileRecover(data, o) {\n\tif(!o) o = new_buf(1);\n\to.write_shift(1,0);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction write_wb_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0083 /* BrtBeginBook */);\n\twrite_record(ba, 0x0080 /* BrtFileVersion */, write_BrtFileVersion());\n\t/* [[BrtFileSharingIso] BrtFileSharing] */\n\twrite_record(ba, 0x0099 /* BrtWbProp */, write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n\t/* [ACABSPATH] */\n\t/* [[BrtBookProtectionIso] BrtBookProtection] */\n\twrite_BOOKVIEWS(ba, wb, opts);\n\twrite_BUNDLESHS(ba, wb, opts);\n\t/* [FNGROUP] */\n\twrite_EXTERNALS_xlsb(ba, wb);\n\tif((wb.Workbook||{}).Names) write_BRTNAMES(ba, wb);\n\t/* write_record(ba, 0x009D BrtCalcProp, write_BrtCalcProp()); */\n\t/* [BrtOleSize] */\n\t/* *(BrtUserBookView *FRT) */\n\t/* [PIVOTCACHEIDS] */\n\t/* [BrtWbFactoid] */\n\t/* [SMARTTAGTYPES] */\n\t/* [BrtWebOpt] */\n\t/* write_record(ba, 0x009B BrtFileRecover, write_BrtFileRecover()); */\n\t/* [WEBPUBITEMS] */\n\t/* [CRERRS] */\n\t/* FRTWORKBOOK */\n\twrite_record(ba, 0x0084 /* BrtEndBook */);\n\n\treturn ba.end();\n}\nfunction parse_wb(data, name/*:string*/, opts)/*:WorkbookFile*/ {\n\tif(name.slice(-4)===\".bin\") return parse_wb_bin((data/*:any*/), opts);\n\treturn parse_wb_xml((data/*:any*/), opts);\n}\n\nfunction parse_ws(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ws_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ws_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_cs_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_cs_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ms_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ms_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ds_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ds_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name/*:string*/, themes, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sty_bin((data/*:any*/), themes, opts);\n\treturn parse_sty_xml((data/*:any*/), themes, opts);\n}\n\nfunction parse_sst(data, name/*:string*/, opts)/*:SST*/ {\n\tif(name.slice(-4)===\".bin\") return parse_sst_bin((data/*:any*/), opts);\n\treturn parse_sst_xml((data/*:any*/), opts);\n}\n\nfunction parse_cmnt(data, name/*:string*/, opts)/*:Array*/ {\n\tif(name.slice(-4)===\".bin\") return parse_comments_bin((data/*:any*/), opts);\n\treturn parse_comments_xml((data/*:any*/), opts);\n}\n\nfunction parse_cc(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_cc_bin((data/*:any*/), name, opts);\n\treturn parse_cc_xml((data/*:any*/), name, opts);\n}\n\nfunction parse_xlink(data, rel, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlink_bin((data/*:any*/), rel, name, opts);\n\treturn parse_xlink_xml((data/*:any*/), rel, name, opts);\n}\n\nfunction parse_xlmeta(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlmeta_bin((data/*:any*/), name, opts);\n\treturn parse_xlmeta_xml((data/*:any*/), name, opts);\n}\nvar attregexg2=/([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2=/([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\nfunction xlml_parsexmltag(tag/*:string*/, skip_root/*:?boolean*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z/*:any*/ = ([]/*:any*/); if(!skip_root) z[0] = words[0];\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\nfunction xlml_parsexmltagobj(tag/*:string*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = {};\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\n\n// ----\n\n/* map from xlml named formats to SSF TODO: localize */\nvar XLMLFormatMap/*: {[string]:string}*/;\n\nfunction xlml_format(format, value)/*:string*/ {\n\tvar fmt = XLMLFormatMap[format] || unescapexml(format);\n\tif(fmt === \"General\") return SSF_general(value);\n\treturn SSF_format(fmt, value);\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val/*:string*/) {\n\tvar oval/*:any*/ = val;\n\tswitch((cp[0].match(/dt:dt=\"([\\w.]+)\"/)||[\"\",\"\"])[1]) {\n\t\tcase \"boolean\": oval = parsexmlbool(val); break;\n\t\tcase \"i2\": case \"int\": oval = parseInt(val, 10); break;\n\t\tcase \"r4\": case \"float\": oval = parseFloat(val); break;\n\t\tcase \"date\": case \"dateTime.tz\": oval = parseDate(val); break;\n\t\tcase \"i8\": case \"string\": case \"fixed\": case \"uuid\": case \"bin.base64\": break;\n\t\tdefault: throw new Error(\"bad custprop:\" + cp[0]);\n\t}\n\tCustprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell/*:Cell*/, nf, o) {\n\tif(cell.t === 'z') return;\n\tif(!o || o.cellText !== false) try {\n\t\tif(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }\n\t\telse if(nf === \"General\") {\n\t\t\tif(cell.t === 'n') {\n\t\t\t\tif((cell.v|0) === cell.v) cell.w = cell.v.toString(10);\n\t\t\t\telse cell.w = SSF_general_num(cell.v);\n\t\t\t}\n\t\t\telse cell.w = SSF_general(cell.v);\n\t\t}\n\t\telse cell.w = xlml_format(nf||\"General\", cell.v);\n\t} catch(e) { if(o.WTF) throw e; }\n\ttry {\n\t\tvar z = XLMLFormatMap[nf]||nf||\"General\";\n\t\tif(o.cellNF) cell.z = z;\n\t\tif(o.cellDates && cell.t == 'n' && fmt_is_date(z)) {\n\t\t\tvar _d = SSF_parse_date_code(cell.v); if(_d) { cell.t = 'd'; cell.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t}\n\t} catch(e) { if(o.WTF) throw e; }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n\tif(opts.cellStyles) {\n\t\tif(stag.Interior) {\n\t\t\tvar I = stag.Interior;\n\t\t\tif(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n\t\t}\n\t}\n\tstyles[stag.ID] = stag;\n}\n\n/* TODO: there must exist some form of OSP-blessed spec */\nfunction parse_xlml_data(xml, ss, data, cell/*:any*/, base, styles, csty, row, arrayf, o) {\n\tvar nf = \"General\", sid = cell.StyleID, S = {}; o = o || {};\n\tvar interiors = [];\n\tvar i = 0;\n\tif(sid === undefined && row) sid = row.StyleID;\n\tif(sid === undefined && csty) sid = csty.StyleID;\n\twhile(styles[sid] !== undefined) {\n\t\tif(styles[sid].nf) nf = styles[sid].nf;\n\t\tif(styles[sid].Interior) interiors.push(styles[sid].Interior);\n\t\tif(!styles[sid].Parent) break;\n\t\tsid = styles[sid].Parent;\n\t}\n\tswitch(data.Type) {\n\t\tcase 'Boolean':\n\t\t\tcell.t = 'b';\n\t\t\tcell.v = parsexmlbool(xml);\n\t\t\tbreak;\n\t\tcase 'String':\n\t\t\tcell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));\n\t\t\tcell.v = (xml.indexOf(\"<\") > -1 ? unescapexml(ss||xml).replace(/<.*?>/g, \"\") : cell.r); // todo: BR etc\n\t\t\tbreak;\n\t\tcase 'DateTime':\n\t\t\tif(xml.slice(-1) != \"Z\") xml += \"Z\";\n\t\t\tcell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n\t\t\tif(cell.v !== cell.v) cell.v = unescapexml(xml);\n\t\t\telse if(cell.v<60) cell.v = cell.v -1;\n\t\t\tif(!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\t\t\t/* falls through */\n\t\tcase 'Number':\n\t\t\tif(cell.v === undefined) cell.v=+xml;\n\t\t\tif(!cell.t) cell.t = 'n';\n\t\t\tbreak;\n\t\tcase 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break;\n\t\tdefault:\n\t\t\tif(xml == \"\" && ss == \"\") { cell.t = 'z'; }\n\t\t\telse { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); }\n\t\t\tbreak;\n\t}\n\tsafe_format_xlml(cell, nf, o);\n\tif(o.cellFormula !== false) {\n\t\tif(cell.Formula) {\n\t\t\tvar fstr = unescapexml(cell.Formula);\n\t\t\t/* strictly speaking, the leading = is required but some writers omit */\n\t\t\tif(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1);\n\t\t\tcell.f = rc_to_a1(fstr, base);\n\t\t\tdelete cell.Formula;\n\t\t\tif(cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);\n\t\t\telse if(cell.ArrayRange) {\n\t\t\t\tcell.F = rc_to_a1(cell.ArrayRange, base);\n\t\t\t\tarrayf.push([safe_decode_range(cell.F), cell.F]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\tif(base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r)\n\t\t\t\t\tif(base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\tcell.F = arrayf[i][1];\n\t\t}\n\t}\n\tif(o.cellStyles) {\n\t\tinteriors.forEach(function(x) {\n\t\t\tif(!S.patternType && x.patternType) S.patternType = x.patternType;\n\t\t});\n\t\tcell.s = S;\n\t}\n\tif(cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_prefix_dname(dname) {\n\treturn XLSLblBuiltIn.indexOf(\"_xlnm.\" + dname) > -1 ? \"_xlnm.\" + dname : dname;\n}\n\nfunction xlml_clean_comment(comment/*:any*/) {\n\tcomment.t = comment.v || \"\";\n\tcomment.t = comment.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\tcomment.v = comment.w = comment.ixfe = undefined;\n}\n\n/* TODO: Everything */\nfunction parse_xlml_xml(d, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tmake_ssf();\n\tvar str = debom(xlml_normalize(d));\n\tif(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n\t\tif(typeof $cptable !== 'undefined') str = $cptable.utils.decode(65001, char_codes(str));\n\t\telse str = utf8read(str);\n\t}\n\tvar opening = str.slice(0, 1024).toLowerCase(), ishtml = false;\n\topening = opening.replace(/\".*?\"/g, \"\");\n\tif((opening.indexOf(\">\") & 1023) > Math.min((opening.indexOf(\",\") & 1023), (opening.indexOf(\";\")&1023))) { var _o = dup(opts); _o.type = \"string\"; return PRN.to_workbook(str, _o); }\n\tif(opening.indexOf(\"= 0) ishtml = true; });\n\tif(ishtml) return html_to_workbook(str, opts);\n\n\tXLMLFormatMap = ({\n\t\t\"General Number\": \"General\",\n\t\t\"General Date\": table_fmt[22],\n\t\t\"Long Date\": \"dddd, mmmm dd, yyyy\",\n\t\t\"Medium Date\": table_fmt[15],\n\t\t\"Short Date\": table_fmt[14],\n\t\t\"Long Time\": table_fmt[19],\n\t\t\"Medium Time\": table_fmt[18],\n\t\t\"Short Time\": table_fmt[20],\n\t\t\"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\t\"Fixed\": table_fmt[2],\n\t\t\"Standard\": table_fmt[4],\n\t\t\"Percent\": table_fmt[10],\n\t\t\"Scientific\": table_fmt[11],\n\t\t\"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n\t\t\"True/False\": '\"True\";\"True\";\"False\";@',\n\t\t\"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n\t}/*:any*/);\n\n\n\tvar Rn;\n\tvar state = [], tmp;\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar sheets = {}, sheetnames/*:Array*/ = [], cursheet/*:Worksheet*/ = ({}), sheetname = \"\"; if(opts.dense) cursheet[\"!data\"] = [];\n\tvar cell = ({}/*:any*/), row = {};// eslint-disable-line no-unused-vars\n\tvar dtag = xlml_parsexmltag(''), didx = 0;\n\tvar c = 0, r = 0;\n\tvar refguess/*:Range*/ = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\tvar styles = {}, stag = {};\n\tvar ss = \"\", fidx = 0;\n\tvar merges/*:Array*/ = [];\n\tvar Props = {}, Custprops = {}, pidx = 0, cp = [];\n\tvar comments/*:Array*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\tvar cstys = [], csty, seencol = false;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar rowinfo/*:Array*/ = [], rowobj = {}, cc = 0, rr = 0;\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false} }/*:any*/), wsprops = {};\n\txlmlregex.lastIndex = 0;\n\tstr = str.replace(//mg,\"\");\n\tvar raw_Rn3 = \"\";\n\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) {\n\t\tcase 'data' /*case 'Data'*/:\n\t\t\tif(raw_Rn3 == \"data\") {\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(state[state.length-1][1]) break;\n\t\t\tif(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*\"Comment\"*/\"comment\"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts);\n\t\t\telse { ss = \"\"; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }\n\t\t\tbreak;\n\t\tcase 'cell' /*case 'Cell'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif(comments.length > 0) cell.c = comments;\n\t\t\t\tif((!opts.sheetRows || opts.sheetRows > r) && cell.v !== void 0) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!cursheet[\"!data\"][r]) cursheet[\"!data\"][r] = [];\n\t\t\t\t\t\tcursheet[\"!data\"][r][c] = cell;\n\t\t\t\t\t} else cursheet[encode_col(c) + encode_row(r)] = cell;\n\t\t\t\t}\n\t\t\t\tif(cell.HRef) {\n\t\t\t\t\tcell.l = ({Target:unescapexml(cell.HRef)}/*:any*/);\n\t\t\t\t\tif(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n\t\t\t\t\tdelete cell.HRef; delete cell.HRefScreenTip;\n\t\t\t\t}\n\t\t\t\tif(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\tcc = c + (parseInt(cell.MergeAcross,10)|0);\n\t\t\t\t\trr = r + (parseInt(cell.MergeDown,10)|0);\n\t\t\t\t\tif(cc > c || rr > r) merges.push({s:{c:c,r:r},e:{c:cc,r:rr}});\n\t\t\t\t}\n\t\t\t\tif(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; }\n\t\t\t\telse if(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\t/*:: if(!cc) cc = 0; if(!rr) rr = 0; */\n\t\t\t\t\tfor(var cma = c; cma <= cc; ++cma) {\n\t\t\t\t\t\tfor(var cmd = r; cmd <= rr; ++cmd) {\n\t\t\t\t\t\t\tif(cma > c || cmd > r) {\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!cursheet[\"!data\"][cmd]) cursheet[\"!data\"][cmd] = [];\n\t\t\t\t\t\t\t\t\tcursheet[\"!data\"][cmd][cma] = {t:'z'};\n\t\t\t\t\t\t\t\t} else cursheet[encode_col(cma) + encode_row(cmd)] = {t:'z'};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tc = cc + 1;\n\t\t\t\t}\n\t\t\t\telse ++c;\n\t\t\t} else {\n\t\t\t\tcell = xlml_parsexmltagobj(Rn[0]);\n\t\t\t\tif(cell.Index) c = +cell.Index - 1;\n\t\t\t\tif(c < refguess.s.c) refguess.s.c = c;\n\t\t\t\tif(c > refguess.e.c) refguess.e.c = c;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") ++c;\n\t\t\t\tcomments = [];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'row' /*case 'Row'*/:\n\t\t\tif(Rn[1]==='/' || Rn[0].slice(-2) === \"/>\") {\n\t\t\t\tif(r < refguess.s.r) refguess.s.r = r;\n\t\t\t\tif(r > refguess.e.r) refguess.e.r = r;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") {\n\t\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\t}\n\t\t\t\tc = 0; ++r;\n\t\t\t} else {\n\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\trowobj = {};\n\t\t\t\tif(row.AutoFitHeight == \"0\" || row.Height) {\n\t\t\t\t\trowobj.hpx = parseInt(row.Height, 10); rowobj.hpt = px2pt(rowobj.hpx);\n\t\t\t\t\trowinfo[r] = rowobj;\n\t\t\t\t}\n\t\t\t\tif(row.Hidden == \"1\") { rowobj.hidden = true; rowinfo[r] = rowobj; }\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\tsheetnames.push(sheetname);\n\t\t\t\tif(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n\t\t\t\t\t\tcursheet[\"!fullref\"] = cursheet[\"!ref\"];\n\t\t\t\t\t\trefguess.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(merges.length) cursheet[\"!merges\"] = merges;\n\t\t\t\tif(cstys.length > 0) cursheet[\"!cols\"] = cstys;\n\t\t\t\tif(rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n\t\t\t\tsheets[sheetname] = cursheet;\n\t\t\t} else {\n\t\t\t\trefguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\t\t\t\tr = c = 0;\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tsheetname = unescapexml(tmp.Name);\n\t\t\t\tcursheet = ({}); if(opts.dense) cursheet[\"!data\"] = [];\n\t\t\t\tmerges = [];\n\t\t\t\tarrayf = [];\n\t\t\t\trowinfo = [];\n\t\t\t\twsprops = {name:sheetname, Hidden:0};\n\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'table' /*case 'Table'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].slice(-2) == \"/>\") break;\n\t\t\telse {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\tcstys = []; seencol = false;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'style' /*case 'Style'*/:\n\t\t\tif(Rn[1]==='/') process_style_xlml(styles, stag, opts);\n\t\t\telse stag = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\n\t\tcase 'numberformat' /*case 'NumberFormat'*/:\n\t\t\tstag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n\t\t\tif(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\t\t\tfor(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == stag.nf) break;\n\t\t\tif(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == null) { SSF__load(stag.nf, ssfidx); break; }\n\t\t\tbreak;\n\n\t\tcase 'column' /*case 'Column'*/:\n\t\t\tif(state[state.length-1][0] !== /*'Table'*/'table') break;\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tcsty = xlml_parsexmltag(Rn[0]);\n\t\t\tif(csty.Hidden) { csty.hidden = true; delete csty.Hidden; }\n\t\t\tif(csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\t\t\tif(!seencol && csty.wpx > 10) {\n\t\t\t\tseencol = true; MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\t\t\t\tfor(var _col = 0; _col < cstys.length; ++_col) if(cstys[_col]) process_col(cstys[_col]);\n\t\t\t}\n\t\t\tif(seencol) process_col(csty);\n\t\t\tcstys[(csty.Index-1||cstys.length)] = csty;\n\t\t\tfor(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);\n\t\t\tbreak;\n\n\t\tcase 'namedrange' /*case 'NamedRange'*/:\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tif(!Workbook.Names) Workbook.Names = [];\n\t\t\tvar _NamedRange = parsexmltag(Rn[0]);\n\t\t\tvar _DefinedName/*:DefinedName*/ = ({\n\t\t\t\tName: xlml_prefix_dname(_NamedRange.Name),\n\t\t\t\tRef: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0})\n\t\t\t}/*:any*/);\n\t\t\tif(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1;\n\t\t\t/*:: if(Workbook.Names) */Workbook.Names.push(_DefinedName);\n\t\t\tbreak;\n\n\t\tcase 'namedcell' /*case 'NamedCell'*/: break;\n\t\tcase 'b' /*case 'B'*/: break;\n\t\tcase 'i' /*case 'I'*/: break;\n\t\tcase 'u' /*case 'U'*/: break;\n\t\tcase 's' /*case 'S'*/: break;\n\t\tcase 'em' /*case 'EM'*/: break;\n\t\tcase 'h2' /*case 'H2'*/: break;\n\t\tcase 'h3' /*case 'H3'*/: break;\n\t\tcase 'sub' /*case 'Sub'*/: break;\n\t\tcase 'sup' /*case 'Sup'*/: break;\n\t\tcase 'span' /*case 'Span'*/: break;\n\t\tcase 'alignment' /*case 'Alignment'*/:\n\t\t\tbreak;\n\t\tcase 'borders' /*case 'Borders'*/: break;\n\t\tcase 'border' /*case 'Border'*/: break;\n\t\tcase 'font' /*case 'Font'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") ss += str.slice(fidx, Rn.index);\n\t\t\telse fidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'interior' /*case 'Interior'*/:\n\t\t\tif(!opts.cellStyles) break;\n\t\t\tstag.Interior = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\t\tcase 'protection' /*case 'Protection'*/: break;\n\n\t\tcase 'author' /*case 'Author'*/:\n\t\tcase 'title' /*case 'Title'*/:\n\t\tcase 'description' /*case 'Description'*/:\n\t\tcase 'created' /*case 'Created'*/:\n\t\tcase 'keywords' /*case 'Keywords'*/:\n\t\tcase 'subject' /*case 'Subject'*/:\n\t\tcase 'category' /*case 'Category'*/:\n\t\tcase 'company' /*case 'Company'*/:\n\t\tcase 'lastauthor' /*case 'LastAuthor'*/:\n\t\tcase 'lastsaved' /*case 'LastSaved'*/:\n\t\tcase 'lastprinted' /*case 'LastPrinted'*/:\n\t\tcase 'version' /*case 'Version'*/:\n\t\tcase 'revision' /*case 'Revision'*/:\n\t\tcase 'totaltime' /*case 'TotalTime'*/:\n\t\tcase 'hyperlinkbase' /*case 'HyperlinkBase'*/:\n\t\tcase 'manager' /*case 'Manager'*/:\n\t\tcase 'contentstatus' /*case 'ContentStatus'*/:\n\t\tcase 'identifier' /*case 'Identifier'*/:\n\t\tcase 'language' /*case 'Language'*/:\n\t\tcase 'appname' /*case 'AppName'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));\n\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'paragraphs' /*case 'Paragraphs'*/: break;\n\n\t\tcase 'styles' /*case 'Styles'*/:\n\t\tcase 'workbook' /*case 'Workbook'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse state.push([Rn[3], false]);\n\t\t\tbreak;\n\n\t\tcase 'comment' /*case 'Comment'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\txlml_clean_comment(comment);\n\t\t\t\tcomments.push(comment);\n\t\t\t} else {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcomment = ({a:tmp.Author}/*:any*/);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'autofilter' /*case 'AutoFilter'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tvar AutoFilter = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcursheet['!autofilter'] = { ref:rc_to_a1(AutoFilter.Range).replace(/\\$/g,\"\") };\n\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'name' /*case 'Name'*/: break;\n\n\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t} else {\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'pixelsperinch' /*case 'PixelsPerInch'*/:\n\t\t\tbreak;\n\t\tcase 'componentoptions' /*case 'ComponentOptions'*/:\n\t\tcase 'documentproperties' /*case 'DocumentProperties'*/:\n\t\tcase 'customdocumentproperties' /*case 'CustomDocumentProperties'*/:\n\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/:\n\t\tcase 'pivottable' /*case 'PivotTable'*/:\n\t\tcase 'pivotcache' /*case 'PivotCache'*/:\n\t\tcase 'names' /*case 'Names'*/:\n\t\tcase 'mapinfo' /*case 'MapInfo'*/:\n\t\tcase 'pagebreaks' /*case 'PageBreaks'*/:\n\t\tcase 'querytable' /*case 'QueryTable'*/:\n\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\tcase 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/:\n\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\tcase 'smarttagtype' /*case 'SmartTagType'*/:\n\t\tcase 'smarttags' /*case 'SmartTags'*/:\n\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/:\n\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/:\n\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\tbreak;\n\n\t\tcase 'null' /*case 'Null'*/: break;\n\n\t\tdefault:\n\t\t\t/* FODS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n\t\t\t/* UOS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"uof\"/*\"UOF\"*/) return parse_fods(str, opts);\n\n\t\t\tvar seen = true;\n\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t/* OfficeDocumentSettings */\n\t\t\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'allowpng' /*case 'AllowPNG'*/: break;\n\t\t\t\t\tcase 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break;\n\t\t\t\t\tcase 'downloadcomponents' /*case 'DownloadComponents'*/: break;\n\t\t\t\t\tcase 'locationofcomponents' /*case 'LocationOfComponents'*/: break;\n\t\t\t\t\tcase 'colors' /*case 'Colors'*/: break;\n\t\t\t\t\tcase 'color' /*case 'Color'*/: break;\n\t\t\t\t\tcase 'index' /*case 'Index'*/: break;\n\t\t\t\t\tcase 'rgb' /*case 'RGB'*/: break;\n\t\t\t\t\tcase 'targetscreensize' /*case 'TargetScreenSize'*/: break;\n\t\t\t\t\tcase 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ComponentOptions */\n\t\t\t\tcase 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'toolbar' /*case 'Toolbar'*/: break;\n\t\t\t\t\tcase 'hideofficelogo' /*case 'HideOfficeLogo'*/: break;\n\t\t\t\t\tcase 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break;\n\t\t\t\t\tcase 'label' /*case 'Label'*/: break;\n\t\t\t\t\tcase 'caption' /*case 'Caption'*/: break;\n\t\t\t\t\tcase 'maxheight' /*case 'MaxHeight'*/: break;\n\t\t\t\t\tcase 'maxwidth' /*case 'MaxWidth'*/: break;\n\t\t\t\t\tcase 'nextsheetnumber' /*case 'NextSheetNumber'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ExcelWorkbook */\n\t\t\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'date1904' /*case 'Date1904'*/:\n\t\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\t\tWorkbook.WBProps.date1904 = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'windowheight' /*case 'WindowHeight'*/: break;\n\t\t\t\t\tcase 'windowwidth' /*case 'WindowWidth'*/: break;\n\t\t\t\t\tcase 'windowtopx' /*case 'WindowTopX'*/: break;\n\t\t\t\t\tcase 'windowtopy' /*case 'WindowTopY'*/: break;\n\t\t\t\t\tcase 'tabratio' /*case 'TabRatio'*/: break;\n\t\t\t\t\tcase 'protectstructure' /*case 'ProtectStructure'*/: break;\n\t\t\t\t\tcase 'protectwindow' /*case 'ProtectWindow'*/: break;\n\t\t\t\t\tcase 'protectwindows' /*case 'ProtectWindows'*/: break;\n\t\t\t\t\tcase 'activesheet' /*case 'ActiveSheet'*/: break;\n\t\t\t\t\tcase 'displayinknotes' /*case 'DisplayInkNotes'*/: break;\n\t\t\t\t\tcase 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break;\n\t\t\t\t\tcase 'supbook' /*case 'SupBook'*/: break;\n\t\t\t\t\tcase 'sheetname' /*case 'SheetName'*/: break;\n\t\t\t\t\tcase 'sheetindex' /*case 'SheetIndex'*/: break;\n\t\t\t\t\tcase 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break;\n\t\t\t\t\tcase 'sheetindexlast' /*case 'SheetIndexLast'*/: break;\n\t\t\t\t\tcase 'dll' /*case 'Dll'*/: break;\n\t\t\t\t\tcase 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break;\n\t\t\t\t\tcase 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break;\n\t\t\t\t\tcase 'iteration' /*case 'Iteration'*/: break;\n\t\t\t\t\tcase 'maxiterations' /*case 'MaxIterations'*/: break;\n\t\t\t\t\tcase 'maxchange' /*case 'MaxChange'*/: break;\n\t\t\t\t\tcase 'path' /*case 'Path'*/: break;\n\t\t\t\t\tcase 'xct' /*case 'Xct'*/: break;\n\t\t\t\t\tcase 'count' /*case 'Count'*/: break;\n\t\t\t\t\tcase 'selectedsheets' /*case 'SelectedSheets'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tcase 'uncalced' /*case 'Uncalced'*/: break;\n\t\t\t\t\tcase 'startupprompt' /*case 'StartupPrompt'*/: break;\n\t\t\t\t\tcase 'crn' /*case 'Crn'*/: break;\n\t\t\t\t\tcase 'externname' /*case 'ExternName'*/: break;\n\t\t\t\t\tcase 'formula' /*case 'Formula'*/: break;\n\t\t\t\t\tcase 'colfirst' /*case 'ColFirst'*/: break;\n\t\t\t\t\tcase 'collast' /*case 'ColLast'*/: break;\n\t\t\t\t\tcase 'wantadvise' /*case 'WantAdvise'*/: break;\n\t\t\t\t\tcase 'boolean' /*case 'Boolean'*/: break;\n\t\t\t\t\tcase 'error' /*case 'Error'*/: break;\n\t\t\t\t\tcase 'text' /*case 'Text'*/: break;\n\t\t\t\t\tcase 'ole' /*case 'OLE'*/: break;\n\t\t\t\t\tcase 'noautorecover' /*case 'NoAutoRecover'*/: break;\n\t\t\t\t\tcase 'publishobjects' /*case 'PublishObjects'*/: break;\n\t\t\t\t\tcase 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'refmoder1c1' /*case 'RefModeR1C1'*/: break;\n\t\t\t\t\tcase 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorkbookOptions */\n\t\t\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'owcversion' /*case 'OWCVersion'*/: break;\n\t\t\t\t\tcase 'height' /*case 'Height'*/: break;\n\t\t\t\t\tcase 'width' /*case 'Width'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorksheetOptions */\n\t\t\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'visible' /*case 'Visible'*/:\n\t\t\t\t\t\tif(Rn[0].slice(-2) === \"/>\"){/* empty */}\n\t\t\t\t\t\telse if(Rn[1]===\"/\") switch(str.slice(pidx, Rn.index)) {\n\t\t\t\t\t\t\tcase \"SheetHidden\": wsprops.Hidden = 1; break;\n\t\t\t\t\t\t\tcase \"SheetVeryHidden\": wsprops.Hidden = 2; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'header' /*case 'Header'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].header = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'footer' /*case 'Footer'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].footer = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pagemargins' /*case 'PageMargins'*/:\n\t\t\t\t\t\tvar pagemargins = parsexmltag(Rn[0]);\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml');\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Top)) cursheet['!margins'].top = +pagemargins.Top;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Left)) cursheet['!margins'].left = +pagemargins.Left;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Right)) cursheet['!margins'].right = +pagemargins.Right;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Bottom)) cursheet['!margins'].bottom = +pagemargins.Bottom;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'displayrighttoleft' /*case 'DisplayRightToLeft'*/:\n\t\t\t\t\t\tif(!Workbook.Views) Workbook.Views = [];\n\t\t\t\t\t\tif(!Workbook.Views[0]) Workbook.Views[0] = {};\n\t\t\t\t\t\tWorkbook.Views[0].RTL = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'freezepanes' /*case 'FreezePanes'*/: break;\n\t\t\t\t\tcase 'frozennosplit' /*case 'FrozenNoSplit'*/: break;\n\n\t\t\t\t\tcase 'splithorizontal' /*case 'SplitHorizontal'*/:\n\t\t\t\t\tcase 'splitvertical' /*case 'SplitVertical'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'activerow' /*case 'ActiveRow'*/: break;\n\t\t\t\t\tcase 'activecol' /*case 'ActiveCol'*/: break;\n\t\t\t\t\tcase 'toprowbottompane' /*case 'TopRowBottomPane'*/: break;\n\t\t\t\t\tcase 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break;\n\n\t\t\t\t\tcase 'unsynced' /*case 'Unsynced'*/: break;\n\t\t\t\t\tcase 'print' /*case 'Print'*/: break;\n\t\t\t\t\tcase 'printerrors' /*case 'PrintErrors'*/: break;\n\t\t\t\t\tcase 'panes' /*case 'Panes'*/: break;\n\t\t\t\t\tcase 'scale' /*case 'Scale'*/: break;\n\t\t\t\t\tcase 'pane' /*case 'Pane'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'layout' /*case 'Layout'*/: break;\n\t\t\t\t\tcase 'pagesetup' /*case 'PageSetup'*/: break;\n\t\t\t\t\tcase 'selected' /*case 'Selected'*/: break;\n\t\t\t\t\tcase 'protectobjects' /*case 'ProtectObjects'*/: break;\n\t\t\t\t\tcase 'enableselection' /*case 'EnableSelection'*/: break;\n\t\t\t\t\tcase 'protectscenarios' /*case 'ProtectScenarios'*/: break;\n\t\t\t\t\tcase 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break;\n\t\t\t\t\tcase 'horizontalresolution' /*case 'HorizontalResolution'*/: break;\n\t\t\t\t\tcase 'verticalresolution' /*case 'VerticalResolution'*/: break;\n\t\t\t\t\tcase 'numberofcopies' /*case 'NumberofCopies'*/: break;\n\t\t\t\t\tcase 'activepane' /*case 'ActivePane'*/: break;\n\t\t\t\t\tcase 'toprowvisible' /*case 'TopRowVisible'*/: break;\n\t\t\t\t\tcase 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break;\n\t\t\t\t\tcase 'fittopage' /*case 'FitToPage'*/: break;\n\t\t\t\t\tcase 'rangeselection' /*case 'RangeSelection'*/: break;\n\t\t\t\t\tcase 'papersizeindex' /*case 'PaperSizeIndex'*/: break;\n\t\t\t\t\tcase 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'pagebreakzoom' /*case 'PageBreakZoom'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'fitwidth' /*case 'FitWidth'*/: break;\n\t\t\t\t\tcase 'fitheight' /*case 'FitHeight'*/: break;\n\t\t\t\t\tcase 'commentslayout' /*case 'CommentsLayout'*/: break;\n\t\t\t\t\tcase 'zoom' /*case 'Zoom'*/: break;\n\t\t\t\t\tcase 'lefttoright' /*case 'LeftToRight'*/: break;\n\t\t\t\t\tcase 'gridlines' /*case 'Gridlines'*/: break;\n\t\t\t\t\tcase 'allowsort' /*case 'AllowSort'*/: break;\n\t\t\t\t\tcase 'allowfilter' /*case 'AllowFilter'*/: break;\n\t\t\t\t\tcase 'allowinsertrows' /*case 'AllowInsertRows'*/: break;\n\t\t\t\t\tcase 'allowdeleterows' /*case 'AllowDeleteRows'*/: break;\n\t\t\t\t\tcase 'allowinsertcols' /*case 'AllowInsertCols'*/: break;\n\t\t\t\t\tcase 'allowdeletecols' /*case 'AllowDeleteCols'*/: break;\n\t\t\t\t\tcase 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break;\n\t\t\t\t\tcase 'allowformatcells' /*case 'AllowFormatCells'*/: break;\n\t\t\t\t\tcase 'allowsizecols' /*case 'AllowSizeCols'*/: break;\n\t\t\t\t\tcase 'allowsizerows' /*case 'AllowSizeRows'*/: break;\n\t\t\t\t\tcase 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].above = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'tabcolorindex' /*case 'TabColorIndex'*/: break;\n\t\t\t\t\tcase 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break;\n\t\t\t\t\tcase 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].left = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blackandwhite' /*case 'BlackAndWhite'*/: break;\n\t\t\t\t\tcase 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break;\n\t\t\t\t\tcase 'displaypagebreak' /*case 'DisplayPageBreak'*/: break;\n\t\t\t\t\tcase 'rowcolheadings' /*case 'RowColHeadings'*/: break;\n\t\t\t\t\tcase 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break;\n\t\t\t\t\tcase 'noorientation' /*case 'NoOrientation'*/: break;\n\t\t\t\t\tcase 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break;\n\t\t\t\t\tcase 'zeroheight' /*case 'ZeroHeight'*/: break;\n\t\t\t\t\tcase 'viewablerange' /*case 'ViewableRange'*/: break;\n\t\t\t\t\tcase 'selection' /*case 'Selection'*/: break;\n\t\t\t\t\tcase 'protectcontents' /*case 'ProtectContents'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break;\n\t\t\t\t\tcase 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break;\n\t\t\t\t\tcase 'compactrowindent' /*case 'CompactRowIndent'*/: break;\n\t\t\t\t\tcase 'location' /*case 'Location'*/: break;\n\t\t\t\t\tcase 'pivotfield' /*case 'PivotField'*/: break;\n\t\t\t\t\tcase 'orientation' /*case 'Orientation'*/: break;\n\t\t\t\t\tcase 'layoutform' /*case 'LayoutForm'*/: break;\n\t\t\t\t\tcase 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break;\n\t\t\t\t\tcase 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break;\n\t\t\t\t\tcase 'position' /*case 'Position'*/: break;\n\t\t\t\t\tcase 'pivotitem' /*case 'PivotItem'*/: break;\n\t\t\t\t\tcase 'datatype' /*case 'DataType'*/: break;\n\t\t\t\t\tcase 'datafield' /*case 'DataField'*/: break;\n\t\t\t\t\tcase 'sourcename' /*case 'SourceName'*/: break;\n\t\t\t\t\tcase 'parentfield' /*case 'ParentField'*/: break;\n\t\t\t\t\tcase 'ptlineitems' /*case 'PTLineItems'*/: break;\n\t\t\t\t\tcase 'ptlineitem' /*case 'PTLineItem'*/: break;\n\t\t\t\t\tcase 'countofsameitems' /*case 'CountOfSameItems'*/: break;\n\t\t\t\t\tcase 'item' /*case 'Item'*/: break;\n\t\t\t\t\tcase 'itemtype' /*case 'ItemType'*/: break;\n\t\t\t\t\tcase 'ptsource' /*case 'PTSource'*/: break;\n\t\t\t\t\tcase 'cacheindex' /*case 'CacheIndex'*/: break;\n\t\t\t\t\tcase 'consolidationreference' /*case 'ConsolidationReference'*/: break;\n\t\t\t\t\tcase 'filename' /*case 'FileName'*/: break;\n\t\t\t\t\tcase 'reference' /*case 'Reference'*/: break;\n\t\t\t\t\tcase 'nocolumngrand' /*case 'NoColumnGrand'*/: break;\n\t\t\t\t\tcase 'norowgrand' /*case 'NoRowGrand'*/: break;\n\t\t\t\t\tcase 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break;\n\t\t\t\t\tcase 'hidden' /*case 'Hidden'*/: break;\n\t\t\t\t\tcase 'subtotal' /*case 'Subtotal'*/: break;\n\t\t\t\t\tcase 'basefield' /*case 'BaseField'*/: break;\n\t\t\t\t\tcase 'mapchilditems' /*case 'MapChildItems'*/: break;\n\t\t\t\t\tcase 'function' /*case 'Function'*/: break;\n\t\t\t\t\tcase 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break;\n\t\t\t\t\tcase 'printsettitles' /*case 'PrintSetTitles'*/: break;\n\t\t\t\t\tcase 'mergelabels' /*case 'MergeLabels'*/: break;\n\t\t\t\t\tcase 'defaultversion' /*case 'DefaultVersion'*/: break;\n\t\t\t\t\tcase 'refreshname' /*case 'RefreshName'*/: break;\n\t\t\t\t\tcase 'refreshdate' /*case 'RefreshDate'*/: break;\n\t\t\t\t\tcase 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tcase 'versionlastupdate' /*case 'VersionLastUpdate'*/: break;\n\t\t\t\t\tcase 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break;\n\t\t\t\t\tcase 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PageBreaks */\n\t\t\t\tcase 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'colbreaks' /*case 'ColBreaks'*/: break;\n\t\t\t\t\tcase 'colbreak' /*case 'ColBreak'*/: break;\n\t\t\t\t\tcase 'rowbreaks' /*case 'RowBreaks'*/: break;\n\t\t\t\t\tcase 'rowbreak' /*case 'RowBreak'*/: break;\n\t\t\t\t\tcase 'colstart' /*case 'ColStart'*/: break;\n\t\t\t\t\tcase 'colend' /*case 'ColEnd'*/: break;\n\t\t\t\t\tcase 'rowend' /*case 'RowEnd'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* AutoFilter */\n\t\t\t\tcase 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break;\n\t\t\t\t\tcase 'autofiltercondition' /*case 'AutoFilterCondition'*/: break;\n\t\t\t\t\tcase 'autofilterand' /*case 'AutoFilterAnd'*/: break;\n\t\t\t\t\tcase 'autofilteror' /*case 'AutoFilterOr'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* QueryTable */\n\t\t\t\tcase 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'id' /*case 'Id'*/: break;\n\t\t\t\t\tcase 'autoformatfont' /*case 'AutoFormatFont'*/: break;\n\t\t\t\t\tcase 'autoformatpattern' /*case 'AutoFormatPattern'*/: break;\n\t\t\t\t\tcase 'querysource' /*case 'QuerySource'*/: break;\n\t\t\t\t\tcase 'querytype' /*case 'QueryType'*/: break;\n\t\t\t\t\tcase 'enableredirections' /*case 'EnableRedirections'*/: break;\n\t\t\t\t\tcase 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break;\n\t\t\t\t\tcase 'urlstring' /*case 'URLString'*/: break;\n\t\t\t\t\tcase 'htmltables' /*case 'HTMLTables'*/: break;\n\t\t\t\t\tcase 'connection' /*case 'Connection'*/: break;\n\t\t\t\t\tcase 'commandtext' /*case 'CommandText'*/: break;\n\t\t\t\t\tcase 'refreshinfo' /*case 'RefreshInfo'*/: break;\n\t\t\t\t\tcase 'notitles' /*case 'NoTitles'*/: break;\n\t\t\t\t\tcase 'nextid' /*case 'NextId'*/: break;\n\t\t\t\t\tcase 'columninfo' /*case 'ColumnInfo'*/: break;\n\t\t\t\t\tcase 'overwritecells' /*case 'OverwriteCells'*/: break;\n\t\t\t\t\tcase 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break;\n\t\t\t\t\tcase 'textwizardsettings' /*case 'TextWizardSettings'*/: break;\n\t\t\t\t\tcase 'source' /*case 'Source'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'decimal' /*case 'Decimal'*/: break;\n\t\t\t\t\tcase 'thousandseparator' /*case 'ThousandSeparator'*/: break;\n\t\t\t\t\tcase 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break;\n\t\t\t\t\tcase 'formatsettings' /*case 'FormatSettings'*/: break;\n\t\t\t\t\tcase 'fieldtype' /*case 'FieldType'*/: break;\n\t\t\t\t\tcase 'delimiters' /*case 'Delimiters'*/: break;\n\t\t\t\t\tcase 'tab' /*case 'Tab'*/: break;\n\t\t\t\t\tcase 'comma' /*case 'Comma'*/: break;\n\t\t\t\t\tcase 'autoformatname' /*case 'AutoFormatName'*/: break;\n\t\t\t\t\tcase 'versionlastedit' /*case 'VersionLastEdit'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\t\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* MapInfo (schema) */\n\t\t\t\tcase 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'map' /*case 'Map'*/: break;\n\t\t\t\t\tcase 'entry' /*case 'Entry'*/: break;\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'xpath' /*case 'XPath'*/: break;\n\t\t\t\t\tcase 'field' /*case 'Field'*/: break;\n\t\t\t\t\tcase 'xsdtype' /*case 'XSDType'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'aggregate' /*case 'Aggregate'*/: break;\n\t\t\t\t\tcase 'elementtype' /*case 'ElementType'*/: break;\n\t\t\t\t\tcase 'attributetype' /*case 'AttributeType'*/: break;\n\t\t\t\t/* These are from xsd (XML Schema Definition) */\n\t\t\t\t\tcase 'schema' /*case 'schema'*/:\n\t\t\t\t\tcase 'element' /*case 'element'*/:\n\t\t\t\t\tcase 'complextype' /*case 'complexType'*/:\n\t\t\t\t\tcase 'datatype' /*case 'datatype'*/:\n\t\t\t\t\tcase 'all' /*case 'all'*/:\n\t\t\t\t\tcase 'attribute' /*case 'attribute'*/:\n\t\t\t\t\tcase 'extends' /*case 'extends'*/: break;\n\n\t\t\t\t\tcase 'row' /*case 'row'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* SmartTags (can be anything) */\n\t\t\t\tcase 'smarttags' /*case 'SmartTags'*/: break;\n\n\t\t\t\tdefault: seen = false; break;\n\t\t\t}\n\t\t\tif(seen) break;\n\t\t\t/* CustomDocumentProperties */\n\t\t\tif(Rn[3].match(/!\\[CDATA/)) break;\n\t\t\tif(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t\t\tif(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') {\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));\n\t\t\t\telse { cp = Rn; pidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t}\n\tvar out = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n\tout.SheetNames = sheetnames;\n\tout.Workbook = Workbook;\n\tout.SSF = dup(table_fmt);\n\tout.Props = Props;\n\tout.Custprops = Custprops;\n\tout.bookType = \"xlml\";\n\treturn out;\n}\n\nfunction parse_xlml(data/*:RawBytes|string*/, opts)/*:Workbook*/ {\n\tfix_read_opts(opts=opts||{});\n\tswitch(opts.type||\"base64\") {\n\t\tcase \"base64\": return parse_xlml_xml(Base64_decode(data), opts);\n\t\tcase \"binary\": case \"buffer\": case \"file\": return parse_xlml_xml(data, opts);\n\t\tcase \"array\": return parse_xlml_xml(a2s(data), opts);\n\t}\n\t/*:: throw new Error(\"unsupported type \" + opts.type); */\n}\n\n/* TODO */\nfunction write_props_xlml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\t/* DocumentProperties */\n\tif(wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n\t/* CustomDocumentProperties */\n\tif(wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n\treturn o.join(\"\");\n}\n/* TODO */\nfunction write_wb_xlml(wb/*::, opts*/)/*:string*/ {\n\t/* OfficeDocumentSettings */\n\t/* ExcelWorkbook */\n\tif((((wb||{}).Workbook||{}).WBProps||{}).date1904) return '';\n\treturn \"\";\n}\n/* TODO */\nfunction write_sty_xlml(wb, opts)/*:string*/ {\n\t/* Styles */\n\tvar styles/*:Array*/ = [''];\n\topts.cellXfs.forEach(function(xf, id) {\n\t\tvar payload/*:Array*/ = [];\n\t\tpayload.push(writextag('NumberFormat', null, {\"ss:Format\": escapexml(table_fmt[xf.numFmtId])}));\n\n\t\tvar o = /*::(*/{\"ss:ID\": \"s\" + (21+id)}/*:: :any)*/;\n\t\tstyles.push(writextag('Style', payload.join(\"\"), o));\n\t});\n\treturn writextag(\"Styles\", styles.join(\"\"));\n}\nfunction write_name_xlml(n) { return writextag(\"NamedRange\", null, {\"ss:Name\": n.Name.slice(0,6) == \"_xlnm.\" ? n.Name.slice(6) : n.Name, \"ss:RefersTo\":\"=\" + a1_to_rc(n.Ref, {r:0,c:0})}); }\nfunction write_names_xlml(wb/*::, opts*/)/*:string*/ {\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array*/ = wb.Workbook.Names;\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != null) continue;\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn writextag(\"Names\", out.join(\"\"));\n}\nfunction write_ws_xlml_names(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array*/ = wb.Workbook.Names;\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != idx) continue;\n\t\t/*switch(n.Name) {\n\t\t\tcase \"_\": continue;\n\t\t}*/\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn out.join(\"\");\n}\n/* WorksheetOptions */\nfunction write_ws_xlml_wsopts(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tvar o/*:Array*/ = [];\n\t/* NOTE: spec technically allows any order, but stick with implied order */\n\n\t/* FitToPage */\n\t/* DoNotDisplayColHeaders */\n\t/* DoNotDisplayRowHeaders */\n\t/* ViewableRange */\n\t/* Selection */\n\t/* GridlineColor */\n\t/* Name */\n\t/* ExcelWorksheetType */\n\t/* IntlMacro */\n\t/* Unsynced */\n\t/* Selected */\n\t/* CodeName */\n\n\tif(ws['!margins']) {\n\t\to.push(\"\");\n\t\tif(ws['!margins'].header) o.push(writextag(\"Header\", null, {'x:Margin':ws['!margins'].header}));\n\t\tif(ws['!margins'].footer) o.push(writextag(\"Footer\", null, {'x:Margin':ws['!margins'].footer}));\n\t\to.push(writextag(\"PageMargins\", null, {\n\t\t\t'x:Bottom': ws['!margins'].bottom || \"0.75\",\n\t\t\t'x:Left': ws['!margins'].left || \"0.7\",\n\t\t\t'x:Right': ws['!margins'].right || \"0.7\",\n\t\t\t'x:Top': ws['!margins'].top || \"0.75\"\n\t\t}));\n\t\to.push(\"\");\n\t}\n\n\t/* PageSetup */\n\t/* DisplayPageBreak */\n\t/* TransitionExpressionEvaluation */\n\t/* TransitionFormulaEntry */\n\t/* Print */\n\t/* Zoom */\n\t/* PageLayoutZoom */\n\t/* PageBreakZoom */\n\t/* ShowPageBreakZoom */\n\t/* DefaultRowHeight */\n\t/* DefaultColumnWidth */\n\t/* StandardWidth */\n\n\tif(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n\t\t/* Visible */\n\t\tif(wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", (wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\"), {}));\n\t\telse {\n\t\t\t/* Selected */\n\t\t\tfor(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n\t\t\tif(i == idx) o.push(\"\");\n\t\t}\n\t}\n\n\t/* LeftColumnVisible */\n\n\tif(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(\"\");\n\n\t/* GridlineColorIndex */\n\t/* DisplayFormulas */\n\t/* DoNotDisplayGridlines */\n\t/* DoNotDisplayHeadings */\n\t/* DoNotDisplayOutline */\n\t/* ApplyAutomaticOutlineStyles */\n\t/* NoSummaryRowsBelowDetail */\n\t/* NoSummaryColumnsRightDetail */\n\t/* DoNotDisplayZeros */\n\t/* ActiveRow */\n\t/* ActiveColumn */\n\t/* FilterOn */\n\t/* RangeSelection */\n\t/* TopRowVisible */\n\t/* TopRowBottomPane */\n\t/* LeftColumnRightPane */\n\t/* ActivePane */\n\t/* SplitHorizontal */\n\t/* SplitVertical */\n\t/* FreezePanes */\n\t/* FrozenNoSplit */\n\t/* TabColorIndex */\n\t/* Panes */\n\n\t/* NOTE: Password not supported in XLML Format */\n\tif(ws['!protect']) {\n\t\to.push(writetag(\"ProtectContents\", \"True\"));\n\t\tif(ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n\t\tif(ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n\t\tif(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));\n\t\telse if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n\t[\n\t\t[ \"formatCells\", \"AllowFormatCells\" ],\n\t\t[ \"formatColumns\", \"AllowSizeCols\" ],\n\t\t[ \"formatRows\", \"AllowSizeRows\" ],\n\t\t[ \"insertColumns\", \"AllowInsertCols\" ],\n\t\t[ \"insertRows\", \"AllowInsertRows\" ],\n\t\t[ \"insertHyperlinks\", \"AllowInsertHyperlinks\" ],\n\t\t[ \"deleteColumns\", \"AllowDeleteCols\" ],\n\t\t[ \"deleteRows\", \"AllowDeleteRows\" ],\n\t\t[ \"sort\", \"AllowSort\" ],\n\t\t[ \"autoFilter\", \"AllowFilter\" ],\n\t\t[ \"pivotTables\", \"AllowUsePivotTables\" ]\n\t].forEach(function(x) { if(ws['!protect'][x[0]]) o.push(\"<\"+x[1]+\"/>\"); });\n\t}\n\n\tif(o.length == 0) return \"\";\n\treturn writextag(\"WorksheetOptions\", o.join(\"\"), {xmlns:XLMLNS.x});\n}\nfunction write_ws_xlml_comment(comments/*:Array*/)/*:string*/ {\n\treturn comments.map(function(c) {\n\t\t// TODO: formatted text\n\t\tvar t = xlml_unfixstr(c.t||\"\");\n\t\tvar d =writextag(\"ss:Data\", t, {\"xmlns\":\"http://www.w3.org/TR/REC-html40\"});\n\t\treturn writextag(\"Comment\", d, {\"ss:Author\":c.a});\n\t}).join(\"\");\n}\nfunction write_ws_xlml_cell(cell, ref/*:string*/, ws, opts, idx/*:number*/, wb, addr)/*:string*/{\n\tif(!cell || (cell.v == undefined && cell.f == undefined)) return \"\";\n\n\tvar attr = {};\n\tif(cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\tif(cell.F && cell.F.slice(0, ref.length) == ref) {\n\t\tvar end = decode_cell(cell.F.slice(ref.length + 1));\n\t\tattr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n\t}\n\n\tif(cell.l && cell.l.Target) {\n\t\tattr[\"ss:HRef\"] = escapexml(cell.l.Target);\n\t\tif(cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n\t}\n\n\tif(ws['!merges']) {\n\t\tvar marr = ws['!merges'];\n\t\tfor(var mi = 0; mi != marr.length; ++mi) {\n\t\t\tif(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n\t\t\tif(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n\t\t\tif(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n\t\t}\n\t}\n\n\tvar t = \"\", p = \"\";\n\tswitch(cell.t) {\n\t\tcase 'z': if(!opts.sheetStubs) return \"\"; break;\n\t\tcase 'n': t = 'Number'; p = String(cell.v); break;\n\t\tcase 'b': t = 'Boolean'; p = (cell.v ? \"1\" : \"0\"); break;\n\t\tcase 'e': t = 'Error'; p = BErr[cell.v]; break;\n\t\tcase 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || table_fmt[14]; break;\n\t\tcase 's': t = 'String'; p = escapexlml(cell.v||\"\"); break;\n\t}\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tattr[\"ss:StyleID\"] = \"s\" + (21+os);\n\tattr[\"ss:Index\"] = addr.c + 1;\n\tvar _v = (cell.v != null ? p : \"\");\n\tvar m = cell.t == 'z' ? \"\" : ('' + _v + '');\n\n\tif((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);\n\n\treturn writextag(\"Cell\", m, attr);\n}\nfunction write_ws_xlml_row(R/*:number*/, row)/*:string*/ {\n\tvar o = '';\n}\n/* TODO */\nfunction write_ws_xlml_table(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws['!ref']) return \"\";\n\tvar range/*:Range*/ = safe_decode_range(ws['!ref']);\n\tvar marr/*:Array*/ = ws['!merges'] || [], mi = 0;\n\tvar o/*:Array*/ = [];\n\tif(ws['!cols']) ws['!cols'].forEach(function(n, i) {\n\t\tprocess_col(n);\n\t\tvar w = !!n.width;\n\t\tvar p = col_obj_w(i, n);\n\t\tvar k/*:any*/ = {\"ss:Index\":i+1};\n\t\tif(w) k['ss:Width'] = width2px(p.width);\n\t\tif(n.hidden) k['ss:Hidden']=\"1\";\n\t\to.push(writextag(\"Column\",null,k));\n\t});\n\tvar dense = ws[\"!data\"] != null;\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tvar row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar skip = false;\n\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(skip) continue;\n\t\t\tvar addr = {r:R,c:C};\n\t\t\tvar ref = encode_col(C) + encode_row(R), cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[ref];\n\t\t\trow.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n\t\t}\n\t\trow.push(\"\");\n\t\tif(row.length > 2) o.push(row.join(\"\"));\n\t}\n\treturn o.join(\"\");\n}\nfunction write_ws_xlml(idx/*:number*/, opts, wb/*:Workbook*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tvar s = wb.SheetNames[idx];\n\tvar ws = wb.Sheets[s];\n\n\tvar t/*:string*/ = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"\");\n\n\t/* Table */\n\tt = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"
\" + t + \"
\");\n\n\t/* WorksheetOptions */\n\to.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n\n\tif(ws[\"!autofilter\"]) o.push('');\n\n\treturn o.join(\"\");\n}\nfunction write_xlml(wb, opts)/*:string*/ {\n\tif(!opts) opts = {};\n\tif(!wb.SSF) wb.SSF = dup(table_fmt);\n\tif(wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t\topts.cellXfs = [];\n\t\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\t}\n\tvar d/*:Array*/ = [];\n\td.push(write_props_xlml(wb, opts));\n\td.push(write_wb_xlml(wb, opts));\n\td.push(\"\");\n\td.push(\"\");\n\tfor(var i = 0; i < wb.SheetNames.length; ++i)\n\t\td.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\"ss:Name\":escapexml(wb.SheetNames[i])}));\n\td[2] = write_sty_xlml(wb, opts);\n\td[3] = write_names_xlml(wb, opts);\n\treturn XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n\t\t'xmlns': XLMLNS.ss,\n\t\t'xmlns:o': XLMLNS.o,\n\t\t'xmlns:x': XLMLNS.x,\n\t\t'xmlns:ss': XLMLNS.ss,\n\t\t'xmlns:dt': XLMLNS.dt,\n\t\t'xmlns:html': XLMLNS.html\n\t});\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\nfunction parse_compobj(obj/*:CFBEntry*/) {\n\tvar v = {};\n\tvar o = obj.content;\n\t/*:: if(o == null) return; */\n\n\t/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\to.l = 28;\n\n\tv.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n\tv.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n\n\tif(o.length - o.l <= 4) return v;\n\n\tvar m/*:number*/ = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n\n\tif(o.length - o.l <= 4) return v;\n\tm = o.read_shift(4);\n\tif(m !== 0x71b239f4) return v;\n\tv.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n\n\tm = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue 0x003c\n\t- 2.4.59 ContinueBigName 0x043c\n\t- 2.4.60 ContinueFrt 0x0812\n\t- 2.4.61 ContinueFrt11 0x0875\n\t- 2.4.62 ContinueFrt12 0x087f\n*/\nvar CONTINUE_RT = [ 0x003c, 0x043c, 0x0812, 0x0875, 0x087f ];\nfunction slurp(RecordType, R, blob, length/*:number*/, opts)/*:any*/ {\n\tvar l = length;\n\tvar bufs = [];\n\tvar d = blob.slice(blob.l,blob.l+l);\n\tif(opts && opts.enc && opts.enc.insitu && d.length > 0) switch(RecordType) {\n\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809/* BOF */: case 0x002F /* FilePass */: case 0x0195 /* FileLock */: case 0x00E1 /* InterfaceHdr */: case 0x0196 /* RRDInfo */: case 0x0138 /* RRDHead */: case 0x0194 /* UsrExcl */: case 0x000a /* EOF */:\n\t\tbreak;\n\tcase 0x0085 /* BoundSheet8 */:\n\t\tbreak;\n\tdefault:\n\t\topts.enc.insitu(d);\n\t}\n\tbufs.push(d);\n\tblob.l += l;\n\tvar nextrt = __readUInt16LE(blob,blob.l), next = XLSRecordEnum[nextrt];\n\tvar start = 0;\n\twhile(next != null && CONTINUE_RT.indexOf(nextrt) > -1) {\n\t\tl = __readUInt16LE(blob,blob.l+2);\n\t\tstart = blob.l + 4;\n\t\tif(nextrt == 0x0812 /* ContinueFrt */) start += 4;\n\t\telse if(nextrt == 0x0875 || nextrt == 0x087f) {\n\t\t\tstart += 12;\n\t\t}\n\t\td = blob.slice(start,blob.l+4+l);\n\t\tbufs.push(d);\n\t\tblob.l += 4+l;\n\t\tnext = (XLSRecordEnum[nextrt = __readUInt16LE(blob, blob.l)]);\n\t}\n\tvar b = (bconcat(bufs)/*:any*/);\n\tprep_blob(b, 0);\n\tvar ll = 0; b.lens = [];\n\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\n\tif(b.length < length) throw \"XLS Record 0x\" + RecordType.toString(16) + \" Truncated: \" + b.length + \" < \" + length;\n\treturn R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p/*:any*/, opts/*:ParseOpts*/, date1904/*:?boolean*/) {\n\tif(p.t === 'z') return;\n\tif(!p.XF) return;\n\tvar fmtid = 0;\n\ttry {\n\t\tfmtid = p.z || p.XF.numFmtId || 0;\n\t\tif(opts.cellNF) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\n\t\telse if(fmtid === 0 || fmtid == \"General\") {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse p.w = SSF_general(p.v);\n\t\t}\n\t\telse p.w = SSF_format(fmtid,p.v, {date1904:!!date1904, dateNF: opts && opts.dateNF});\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(opts.cellDates && fmtid && p.t == 'n' && fmt_is_date(table_fmt[fmtid] || String(fmtid))) {\n\t\tvar _d = SSF_parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t}\n}\n\nfunction make_cell(val, ixfe, t)/*:Cell*/ {\n\treturn ({v:val, ixfe:ixfe, t:t}/*:any*/);\n}\n\n// 2.3.2\nfunction parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {\n\tvar wb = ({opts:{}}/*:any*/);\n\tvar Sheets = {};\n\tif(DENSE != null && options.dense == null) options.dense = DENSE;\n\tvar out/*:Worksheet*/ = ({}/*:any*/); if(options.dense) out[\"!data\"] = [];\n\tvar Directory = {};\n\tvar range/*:Range*/ = ({}/*:any*/);\n\tvar last_formula = null;\n\tvar sst/*:SST*/ = ([]/*:any*/);\n\tvar cur_sheet = \"\";\n\tvar Preamble = {};\n\tvar lastcell, last_cell = \"\", cc/*:Cell*/, cmnt, rngC, rngR;\n\tvar sharedf = {};\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar temp_val/*:Cell*/;\n\tvar country;\n\tvar XFs = []; /* XF records */\n\tvar palette/*:Array<[number, number, number]>*/ = [];\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }/*:any*/), wsprops = {};\n\tvar get_rgb = function getrgb(icv/*:number*/)/*:[number, number, number]*/ {\n\t\tif(icv < 8) return XLSIcv[icv];\n\t\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\n\t\treturn XLSIcv[icv];\n\t};\n\tvar process_cell_style = function pcs(cell, line/*:any*/, options) {\n\t\tvar xfd = line.XF.data;\n\t\tif(!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n\t\tline.s = ({}/*:any*/);\n\t\tline.s.patternType = xfd.patternType;\n\t\tvar t;\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\n\t};\n\tvar addcell = function addcell(cell/*:any*/, line/*:any*/, options/*:any*/) {\n\t\tif(file_depth > 1) return;\n\t\tif(options.sheetRows && cell.r >= options.sheetRows) return;\n\t\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n\t\tdelete line.ixfe; delete line.XF;\n\t\tlastcell = cell;\n\t\tlast_cell = encode_cell(cell);\n\t\tif(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tif(cell.r < range.s.r) range.s.r = cell.r;\n\t\tif(cell.c < range.s.c) range.s.c = cell.c;\n\t\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n\t\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\t\tif(options.cellFormula && line.f) {\n\t\t\tfor(var afi = 0; afi < arrayf.length; ++afi) {\n\t\t\t\tif(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n\t\t\t\tif(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n\t\t\t\tline.F = encode_range(arrayf[afi][0]);\n\t\t\t\tif(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n\t\t\t\tif(line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tif(options.dense) {\n\t\t\t\tif(!out[\"!data\"][cell.r]) out[\"!data\"][cell.r] = [];\n\t\t\t\tout[\"!data\"][cell.r][cell.c] = line;\n\t\t\t} else out[last_cell] = line;\n\t\t}\n\t};\n\tvar opts = ({\n\t\tenc: false, // encrypted\n\t\tsbcch: 0, // cch in the preceding SupBook\n\t\tsnames: [], // sheetnames\n\t\tsharedf: sharedf, // shared formulae by address\n\t\tarrayf: arrayf, // array formulae array\n\t\trrtabid: [], // RRTabId\n\t\tlastuser: \"\", // Last User from WriteAccess\n\t\tbiff: 8, // BIFF version\n\t\tcodepage: 0, // CP from CodePage record\n\t\twinlocked: 0, // fLockWn from WinProtect\n\t\tcellStyles: !!options && !!options.cellStyles,\n\t\tWTF: !!options && !!options.wtf\n\t}/*:any*/);\n\tif(options.password) opts.password = options.password;\n\tvar themes;\n\tvar merges/*:Array*/ = [];\n\tvar objects = [];\n\tvar colinfo/*:Array*/ = [], rowinfo/*:Array*/ = [];\n\tvar seencol = false;\n\tvar supbooks = ([]/*:any*/); // 1-indexed, will hold extern names\n\tsupbooks.SheetNames = opts.snames;\n\tsupbooks.sharedf = opts.sharedf;\n\tsupbooks.arrayf = opts.arrayf;\n\tsupbooks.names = [];\n\tsupbooks.XTI = [];\n\tvar last_RT = 0;\n\tvar file_depth = 0; /* TODO: make a real stack */\n\tvar BIFF2Fmt = 0, BIFF2FmtTable/*:Array*/ = [];\n\tvar FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */\n\tvar last_lbl/*:?DefinedName*/;\n\n\t/* explicit override for some broken writers */\n\topts.codepage = 1200;\n\tset_cp(1200);\n\tvar seen_codepage = false;\n\twhile(blob.l < blob.length - 1) {\n\t\tvar s = blob.l;\n\t\tvar RecordType = blob.read_shift(2);\n\t\tif(RecordType === 0 && last_RT === 0x000a /* EOF */) break;\n\t\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2));\n\t\tvar R = XLSRecordEnum[RecordType];\n\t\tif(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(RecordType) == -1 /* BOF */) break;\n\t\t//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n\t\t//if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\t\tif(R && R.f) {\n\t\t\tif(options.bookSheets) {\n\t\t\t\tif(last_RT === 0x0085 /* BoundSheet8 */ && RecordType !== 0x0085 /* R.n !== 'BoundSheet8' */) break;\n\t\t\t}\n\t\t\tlast_RT = RecordType;\n\t\t\tif(R.r === 2 || R.r == 12) {\n\t\t\t\tvar rt = blob.read_shift(2); length -= 2;\n\t\t\t\tif(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\t\t\t\tif(R.r == 12){\n\t\t\t\t\tblob.l += 10; length -= 10;\n\t\t\t\t} // skip FRT\n\t\t\t}\n\t\t\t//console.error(R,blob.l,length,blob.length);\n\t\t\tvar val/*:any*/ = ({}/*:any*/);\n\t\t\tif(RecordType === 0x000a /* EOF */) val = /*::(*/R.f(blob, length, opts)/*:: :any)*/;\n\t\t\telse val = /*::(*/slurp(RecordType, R, blob, length, opts)/*:: :any)*/;\n\t\t\t/*:: val = (val:any); */\n\t\t\tif(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(last_RT) === -1 /* BOF */) continue;\n\t\t\tswitch(RecordType) {\n\t\t\t\tcase 0x0022 /* Date1904 */:\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\twb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;\n\t\t\t\tcase 0x0086 /* WriteProtect */: wb.opts.WriteProtect = true; break;\n\t\t\t\tcase 0x002f /* FilePass */:\n\t\t\t\t\tif(!opts.enc) blob.l = 0;\n\t\t\t\t\topts.enc = val;\n\t\t\t\t\tif(!options.password) throw new Error(\"File is password-protected\");\n\t\t\t\t\tif(val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n\t\t\t\t\tif(!val.valid) throw new Error(\"Password is incorrect\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x005c /* WriteAccess */: opts.lastuser = val; break;\n\t\t\t\tcase 0x0042 /* CodePage */:\n\t\t\t\t\tvar cpval = Number(val);\n\t\t\t\t\t/* overrides based on test cases */\n\t\t\t\t\tswitch(cpval) {\n\t\t\t\t\t\tcase 0x5212: cpval = 1200; break;\n\t\t\t\t\t\tcase 0x8000: cpval = 10000; break;\n\t\t\t\t\t\tcase 0x8001: cpval = 1252; break;\n\t\t\t\t\t}\n\t\t\t\t\tset_cp(opts.codepage = cpval);\n\t\t\t\t\tseen_codepage = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x013d /* RRTabId */: opts.rrtabid = val; break;\n\t\t\t\tcase 0x0019 /* WinProtect */: opts.winlocked = val; break;\n\t\t\t\tcase 0x01b7 /* RefreshAll */: wb.opts[\"RefreshAll\"] = val; break;\n\t\t\t\tcase 0x000c /* CalcCount */: wb.opts[\"CalcCount\"] = val; break;\n\t\t\t\tcase 0x0010 /* CalcDelta */: wb.opts[\"CalcDelta\"] = val; break;\n\t\t\t\tcase 0x0011 /* CalcIter */: wb.opts[\"CalcIter\"] = val; break;\n\t\t\t\tcase 0x000d /* CalcMode */: wb.opts[\"CalcMode\"] = val; break;\n\t\t\t\tcase 0x000e /* CalcPrecision */: wb.opts[\"CalcPrecision\"] = val; break;\n\t\t\t\tcase 0x005f /* CalcSaveRecalc */: wb.opts[\"CalcSaveRecalc\"] = val; break;\n\t\t\t\tcase 0x000f /* CalcRefMode */: opts.CalcRefMode = val; break; // TODO: implement R1C1\n\t\t\t\tcase 0x08a3 /* ForceFullCalculation */: wb.opts.FullCalc = val; break;\n\t\t\t\tcase 0x0081 /* WsBool */:\n\t\t\t\t\tif(val.fDialog) out[\"!type\"] = \"dialog\";\n\t\t\t\t\tif(!val.fBelow) (out[\"!outline\"] || (out[\"!outline\"] = {})).above = true;\n\t\t\t\t\tif(!val.fRight) (out[\"!outline\"] || (out[\"!outline\"] = {})).left = true;\n\t\t\t\t\tbreak; // TODO\n\t\t\t\tcase 0x00e0 /* XF */:\n\t\t\t\t\tXFs.push(val); break;\n\t\t\t\tcase 0x01ae /* SupBook */:\n\t\t\t\t\tsupbooks.push([val]);\n\t\t\t\t\tsupbooks[supbooks.length-1].XTI = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0023: case 0x0223 /* ExternName */:\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0018: case 0x0218 /* Lbl */:\n\t\t\t\t\tlast_lbl = ({\n\t\t\t\t\t\tName: val.Name,\n\t\t\t\t\t\tRef: stringify_formula(val.rgce,range,null,supbooks,opts)\n\t\t\t\t\t}/*:DefinedName*/);\n\t\t\t\t\tif(val.itab > 0) last_lbl.Sheet = val.itab - 1;\n\t\t\t\t\tsupbooks.names.push(last_lbl);\n\t\t\t\t\tif(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tif(val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0)\n\t\t\t\t\t\tif(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')\n\t\t\t\t\t\t\tFilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0016 /* ExternCount */: opts.ExternCount = val; break;\n\t\t\t\tcase 0x0017 /* ExternSheet */:\n\t\t\t\t\tif(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;\n\t\t\t\tcase 0x0894 /* NameCmt */:\n\t\t\t\t\t/* TODO: search for correct name */\n\t\t\t\t\tif(opts.biff < 8) break;\n\t\t\t\t\tif(last_lbl != null) last_lbl.Comment = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0012 /* Protect */: out[\"!protect\"] = val; break; /* for sheet or book */\n\t\t\t\tcase 0x0013 /* Password */: if(val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val); break;\n\t\t\t\tcase 0x0085 /* BoundSheet8 */: {\n\t\t\t\t\tDirectory[val.pos] = val;\n\t\t\t\t\topts.snames.push(val.name);\n\t\t\t\t} break;\n\t\t\t\tcase 0x000a /* EOF */: {\n\t\t\t\t\tif(--file_depth) break;\n\t\t\t\t\tif(range.e) {\n\t\t\t\t\t\tif(range.e.r > 0 && range.e.c > 0) {\n\t\t\t\t\t\t\trange.e.r--; range.e.c--;\n\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\tif(options.sheetRows && options.sheetRows <= range.e.r) {\n\t\t\t\t\t\t\t\tvar tmpri = range.e.r;\n\t\t\t\t\t\t\t\trange.e.r = options.sheetRows - 1;\n\t\t\t\t\t\t\t\tout[\"!fullref\"] = out[\"!ref\"];\n\t\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\t\trange.e.r = tmpri;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trange.e.r++; range.e.c++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(merges.length > 0) out[\"!merges\"] = merges;\n\t\t\t\t\t\tif(objects.length > 0) out[\"!objects\"] = objects;\n\t\t\t\t\t\tif(colinfo.length > 0) out[\"!cols\"] = colinfo;\n\t\t\t\t\t\tif(rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n\t\t\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t\t\t}\n\t\t\t\t\tif(cur_sheet === \"\") Preamble = out; else Sheets[cur_sheet] = out;\n\t\t\t\t\tout = ({}/*:any*/); if(options.dense) out[\"!data\"] = [];\n\t\t\t\t} break;\n\t\t\t\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809 /* BOF */: {\n\t\t\t\t\tif(opts.biff === 8) opts.biff = {\n\t\t\t\t\t\t/*::[*/0x0009/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0209/*::]*/:3,\n\t\t\t\t\t\t/*::[*/0x0409/*::]*/:4\n\t\t\t\t\t}[RecordType] || {\n\t\t\t\t\t\t/*::[*/0x0200/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0300/*::]*/:3,\n\t\t\t\t\t\t/*::[*/0x0400/*::]*/:4,\n\t\t\t\t\t\t/*::[*/0x0500/*::]*/:5,\n\t\t\t\t\t\t/*::[*/0x0600/*::]*/:8,\n\t\t\t\t\t\t/*::[*/0x0002/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0007/*::]*/:2\n\t\t\t\t\t}[val.BIFFVer] || 8;\n\t\t\t\t\topts.biffguess = val.BIFFVer == 0;\n\t\t\t\t\tif(val.BIFFVer == 0 && val.dt == 0x1000) { opts.biff = 5; seen_codepage = true; set_cp(opts.codepage = 28591); }\n\t\t\t\t\tif(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n\t\t\t\t\tif(file_depth++) break;\n\t\t\t\t\tout = ({}/*:any*/); if(options.dense) out[\"!data\"] = [];\n\n\t\t\t\t\tif(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }\n\n\t\t\t\t\tif(opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) {\n\t\t\t\t\t\tif(cur_sheet === \"\") cur_sheet = \"Sheet1\";\n\t\t\t\t\t\trange = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\t\t\t\t\t/* fake BoundSheet8 */\n\t\t\t\t\t\tvar fakebs8 = {pos: blob.l - length, name:cur_sheet};\n\t\t\t\t\t\tDirectory[fakebs8.pos] = fakebs8;\n\t\t\t\t\t\topts.snames.push(cur_sheet);\n\t\t\t\t\t}\n\t\t\t\t\telse cur_sheet = (Directory[s] || {name:\"\"}).name;\n\t\t\t\t\tif(val.dt == 0x20) out[\"!type\"] = \"chart\";\n\t\t\t\t\tif(val.dt == 0x40) out[\"!type\"] = \"macro\";\n\t\t\t\t\tmerges = [];\n\t\t\t\t\tobjects = [];\n\t\t\t\t\topts.arrayf = arrayf = [];\n\t\t\t\t\tcolinfo = []; rowinfo = [];\n\t\t\t\t\tseencol = false;\n\t\t\t\t\twsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };\n\t\t\t\t} break;\n\t\t\t\tcase 0x0203 /* Number */: case 0x0003 /* BIFF2NUM */: case 0x0002 /* BIFF2INT */: {\n\t\t\t\t\tif(out[\"!type\"] == \"chart\") if(options.dense ? (out[\"!data\"][val.r]||[])[val.c]: out[encode_col(val.c) + encode_row(val.r)]) ++val.c;\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x0005: case 0x0205 /* BoolErr */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x027e /* RK */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00bd /* MulRk */: {\n\t\t\t\t\tfor(var j = val.c; j <= val.C; ++j) {\n\t\t\t\t\t\tvar ixfe = val.rkrec[j-val.c][0];\n\t\t\t\t\t\ttemp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0006: case 0x0206: case 0x0406 /* Formula */: {\n\t\t\t\t\tif(val.val == 'String') { last_formula = val; break; }\n\t\t\t\t\ttemp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\tvar _f = val.formula;\n\t\t\t\t\t\tif(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n\t\t\t\t\t\t\tvar _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];\n\t\t\t\t\t\t\tvar _fe = encode_cell({r:_fr, c:_fc});\n\t\t\t\t\t\t\tif(sharedf[_fe]) temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t\t\telse temp_val.F = ((options.dense ? (out[\"!data\"][_fr]||[])[_fc]: out[_fe]) || {}).F;\n\t\t\t\t\t\t} else temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell(val.cell, temp_val, options);\n\t\t\t\t\tlast_formula = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x0007: case 0x0207 /* String */: {\n\t\t\t\t\tif(last_formula) { /* technically always true */\n\t\t\t\t\t\tlast_formula.val = val;\n\t\t\t\t\t\ttemp_val = make_cell(val, last_formula.cell.ixfe, 's');\n\t\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\t\ttemp_val.f = \"\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell(last_formula.cell, temp_val, options);\n\t\t\t\t\t\tlast_formula = null;\n\t\t\t\t\t} else throw new Error(\"String record expects Formula\");\n\t\t\t\t} break;\n\t\t\t\tcase 0x0021: case 0x0221 /* Array */: {\n\t\t\t\t\tarrayf.push(val);\n\t\t\t\t\tvar _arraystart = encode_cell(val[0].s);\n\t\t\t\t\tcc = options.dense ? (out[\"!data\"][val[0].s.r]||[])[val[0].s.c] : out[_arraystart];\n\t\t\t\t\tif(options.cellFormula && cc) {\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tif(!_arraystart || !cc) break;\n\t\t\t\t\t\tcc.f = \"\"+stringify_formula(val[1], range, val[0], supbooks, opts);\n\t\t\t\t\t\tcc.F = encode_range(val[0]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x04bc /* ShrFmla */: {\n\t\t\t\t\tif(!options.cellFormula) break;\n\t\t\t\t\tif(last_cell) {\n\t\t\t\t\t\t/* TODO: capture range */\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tsharedf[encode_cell(last_formula.cell)]= val[0];\n\t\t\t\t\t\tcc = options.dense ? (out[\"!data\"][last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n\t\t\t\t\t\t(cc||{}).f = \"\"+stringify_formula(val[0], range, lastcell, supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fd /* LabelSst */:\n\t\t\t\t\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\n\t\t\t\t\tif(sst[val.isst].h) temp_val.h = sst[val.isst].h;\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0201 /* Blank */: if(options.sheetStubs) {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00be /* MulBlank */: if(options.sheetStubs) {\n\t\t\t\t\tfor(var _j = val.c; _j <= val.C; ++_j) {\n\t\t\t\t\t\tvar _ixfe = val.ixfe[_j-val.c];\n\t\t\t\t\t\ttemp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:_j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00d6 /* RString */:\n\t\t\t\tcase 0x0204 /* Label */: case 0x0004 /* BIFF2STR */:\n\t\t\t\t\ttemp_val=make_cell(val.val, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 0x0000: case 0x0200 /* Dimensions */: {\n\t\t\t\t\tif(file_depth === 1) range = val; /* TODO: stack */\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fc /* SST */: {\n\t\t\t\t\tsst = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x041e /* Format */: { /* val = [id, fmt] */\n\t\t\t\t\tif(opts.biff == 4) {\n\t\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val[1];\n\t\t\t\t\t\tfor(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(table_fmt[b4idx] == val[1]) break;\n\t\t\t\t\t\tif(b4idx >= 163) SSF__load(val[1], BIFF2Fmt + 163);\n\t\t\t\t\t}\n\t\t\t\t\telse SSF__load(val[1], val[0]);\n\t\t\t\t} break;\n\t\t\t\tcase 0x001e /* BIFF2FORMAT */: {\n\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val;\n\t\t\t\t\tfor(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(table_fmt[b2idx] == val) break;\n\t\t\t\t\tif(b2idx >= 163) SSF__load(val, BIFF2Fmt + 163);\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x00e5 /* MergeCells */: merges = merges.concat(val); break;\n\n\t\t\t\tcase 0x005d /* Obj */: objects[val.cmo[0]] = opts.lastobj = val; break;\n\t\t\t\tcase 0x01b6 /* TxO */: opts.lastobj.TxO = val; break;\n\t\t\t\tcase 0x007f /* ImData */: opts.lastobj.ImData = val; break;\n\n\t\t\t\tcase 0x01b8 /* HLink */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[\"!data\"][rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc) cc.l = val[1];\n\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0800 /* HLinkTooltip */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[\"!data\"][rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc && cc.l) cc.l.Tooltip = val[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x001c /* Note */: {\n\t\t\t\t\tif(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */\n\t\t\t\t\tcc = options.dense ? (out[\"!data\"][val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];\n\t\t\t\t\tvar noteobj = objects[val[2]];\n\t\t\t\t\tif(!cc) {\n\t\t\t\t\t\tif(options.dense) {\n\t\t\t\t\t\t\tif(!out[\"!data\"][val[0].r]) out[\"!data\"][val[0].r] = [];\n\t\t\t\t\t\t\tcc = out[\"!data\"][val[0].r][val[0].c] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcc = out[encode_cell(val[0])] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trange.e.r = Math.max(range.e.r, val[0].r);\n\t\t\t\t\t\trange.s.r = Math.min(range.s.r, val[0].r);\n\t\t\t\t\t\trange.e.c = Math.max(range.e.c, val[0].c);\n\t\t\t\t\t\trange.s.c = Math.min(range.s.c, val[0].c);\n\t\t\t\t\t}\n\t\t\t\t\tif(!cc.c) cc.c = [];\n\t\t\t\t\tcmnt = {a:val[1],t:noteobj.TxO.t};\n\t\t\t\t\tcc.c.push(cmnt);\n\t\t\t\t} break;\n\t\t\t\tcase 0x087d /* XFExt */: update_xfext(XFs[val.ixfe], val.ext); break;\n\t\t\t\tcase 0x007d /* ColInfo */: {\n\t\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, level: (val.level || 0), hidden: !!(val.flags & 1) };\n\t\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0208 /* Row */: {\n\t\t\t\t\tvar rowobj = {};\n\t\t\t\t\tif(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }\n\t\t\t\t\tif(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }\n\t\t\t\t\tif(val.hpt) {\n\t\t\t\t\t\trowinfo[val.r] = rowobj;\n\t\t\t\t\t\trowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0026 /* LeftMargin */:\n\t\t\t\tcase 0x0027 /* RightMargin */:\n\t\t\t\tcase 0x0028 /* TopMargin */:\n\t\t\t\tcase 0x0029 /* BottomMargin */:\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'][({0x26: \"left\", 0x27:\"right\", 0x28:\"top\", 0x29:\"bottom\"})[RecordType]] = val;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00a1 /* Setup */: // TODO\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'].header = val.header;\n\t\t\t\t\tout['!margins'].footer = val.footer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x023e /* Window2 */: // TODO\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(val.RTL) Workbook.Views[0].RTL = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0092 /* Palette */: palette = val; break;\n\t\t\t\tcase 0x0896 /* Theme */: themes = val; break;\n\t\t\t\tcase 0x008c /* Country */: country = val; break;\n\t\t\t\tcase 0x01ba /* CodeName */: {\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\tif(!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";\n\t\t\t\t\telse wsprops.CodeName = val || wsprops.name;\n\t\t\t\t} break;\n\t\t\t}\n\t\t} else {\n\t\t\tif(!R) console.error(\"Missing Info for XLS Record 0x\" + RecordType.toString(16));\n\t\t\tblob.l += length;\n\t\t}\n\t}\n\twb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\n\tif(!options.bookSheets) wb.Sheets=Sheets;\n\tif(!wb.SheetNames.length && Preamble[\"!ref\"]) {\n\t\twb.SheetNames.push(\"Sheet1\");\n\t\t/*jshint -W069 */\n\t\tif(wb.Sheets) wb.Sheets[\"Sheet1\"] = Preamble;\n\t\t/*jshint +W069 */\n\t} else wb.Preamble=Preamble;\n\tif(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });\n\twb.Strings = sst;\n\twb.SSF = dup(table_fmt);\n\tif(opts.enc) wb.Encryption = opts.enc;\n\tif(themes) wb.Themes = themes;\n\twb.Metadata = {};\n\tif(country !== undefined) wb.Metadata.Country = country;\n\tif(supbooks.names.length > 0) Workbook.Names = supbooks.names;\n\twb.Workbook = Workbook;\n\treturn wb;\n}\n\n/* TODO: split props*/\nvar PSCLSID = {\n\tSI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n\tDSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n\tUDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\nfunction parse_xls_props(cfb/*:CFBContainer*/, props, o) {\n\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n\tvar DSI = CFB.find(cfb, '/!DocumentSummaryInformation');\n\tif(DSI && DSI.size > 0) try {\n\t\tvar DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\t\tfor(var d in DocSummary) props[d] = DocSummary[d];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\tvar SI = CFB.find(cfb, '/!SummaryInformation');\n\tif(SI && SI.size > 0) try {\n\t\tvar Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\t\tfor(var s in Summary) if(props[s] == null) props[s] = Summary[s];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\tif(props.HeadingPairs && props.TitlesOfParts) {\n\t\tload_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n\t\tdelete props.HeadingPairs; delete props.TitlesOfParts;\n\t}\n}\nfunction write_xls_props(wb/*:Workbook*/, cfb/*:CFBContainer*/) {\n\tvar DSEntries = [], SEntries = [], CEntries = [];\n\tvar i = 0, Keys;\n\tvar DocSummaryRE/*:{[key:string]:string}*/ = evert_key(DocSummaryPIDDSI, \"n\");\n\tvar SummaryRE/*:{[key:string]:string}*/ = evert_key(SummaryPIDSI, \"n\");\n\tif(wb.Props) {\n\t\tKeys = keys(wb.Props);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n\t}\n\tif(wb.Custprops) {\n\t\tKeys = keys(wb.Custprops);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n\t}\n\tvar CEntries2 = [];\n\tfor(i = 0; i < CEntries.length; ++i) {\n\t\tif(XLSPSSkip.indexOf(CEntries[i][0]) > -1 || PseudoPropsPairs.indexOf(CEntries[i][0]) > -1) continue;\n\t\tif(CEntries[i][1] == null) continue;\n\t\tCEntries2.push(CEntries[i]);\n\t}\n\tif(SEntries.length) CFB.utils.cfb_add(cfb, \"/\\u0005SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n\tif(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\u0005DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb/*:any*/, options/*:?ParseOpts*/)/*:Workbook*/ {\nif(!options) options = {};\nfix_read_opts(options);\nreset_cp();\nif(options.codepage) set_ansi(options.codepage);\nvar CompObj/*:?CFBEntry*/, WB/*:?any*/;\nif(cfb.FullPaths) {\n\tif(CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n\tCompObj = CFB.find(cfb, '!CompObj');\n\tWB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n} else {\n\tswitch(options.type) {\n\t\tcase 'base64': cfb = s2a(Base64_decode(cfb)); break;\n\t\tcase 'binary': cfb = s2a(cfb); break;\n\t\tcase 'buffer': break;\n\t\tcase 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;\n\t}\n\tprep_blob(cfb, 0);\n\tWB = ({content: cfb}/*:any*/);\n}\nvar /*::CompObjP, */WorkbookP/*:: :Workbook = XLSX.utils.book_new(); */;\n\nvar _data/*:?any*/;\nif(CompObj) /*::CompObjP = */parse_compobj(CompObj);\nif(options.bookProps && !options.bookSheets) WorkbookP = ({}/*:any*/);\nelse/*:: if(cfb instanceof CFBContainer) */ {\n\tvar T = has_buf ? 'buffer' : 'array';\n\tif(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n\t/* Quattro Pro 7-8 */\n\telse if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Quattro Pro 9 */\n\telse if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Works 4 for Mac */\n\telse if((_data=CFB.find(cfb, 'MN0')) && _data.content) throw new Error(\"Unsupported Works 4 for Mac file\");\n\telse throw new Error(\"Cannot find Workbook stream\");\n\tif(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n}\n\nvar props = {};\nif(cfb.FullPaths) parse_xls_props(/*::((*/cfb/*:: :any):CFBContainer)*/, props, options);\n\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\nif(options.bookFiles) WorkbookP.cfb = cfb;\n/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\nreturn WorkbookP;\n}\n\n\nfunction write_xlscfb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:CFBContainer*/ {\n\tvar o = opts || {};\n\tvar cfb = CFB.utils.cfb_new({root:\"R\"});\n\tvar wbpath = \"/Workbook\";\n\tswitch(o.bookType || \"xls\") {\n\t\tcase \"xls\": o.bookType = \"biff8\";\n\t\t/* falls through */\n\t\tcase \"xla\": if(!o.bookType) o.bookType = \"xla\";\n\t\t/* falls through */\n\t\tcase \"biff8\": wbpath = \"/Workbook\"; o.biff = 8; break;\n\t\tcase \"biff5\": wbpath = \"/Book\"; o.biff = 5; break;\n\t\tdefault: throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n\t}\n\tCFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n\tif(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);\n\t// TODO: SI, DSI, CO\n\tif(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"}));\n\treturn cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\nvar XLSBRecordEnum = {\n\t/*::[*/0x0000/*::]*/: { /* n:\"BrtRowHdr\", */ f:parse_BrtRowHdr },\n\t/*::[*/0x0001/*::]*/: { /* n:\"BrtCellBlank\", */ f:parse_BrtCellBlank },\n\t/*::[*/0x0002/*::]*/: { /* n:\"BrtCellRk\", */ f:parse_BrtCellRk },\n\t/*::[*/0x0003/*::]*/: { /* n:\"BrtCellError\", */ f:parse_BrtCellError },\n\t/*::[*/0x0004/*::]*/: { /* n:\"BrtCellBool\", */ f:parse_BrtCellBool },\n\t/*::[*/0x0005/*::]*/: { /* n:\"BrtCellReal\", */ f:parse_BrtCellReal },\n\t/*::[*/0x0006/*::]*/: { /* n:\"BrtCellSt\", */ f:parse_BrtCellSt },\n\t/*::[*/0x0007/*::]*/: { /* n:\"BrtCellIsst\", */ f:parse_BrtCellIsst },\n\t/*::[*/0x0008/*::]*/: { /* n:\"BrtFmlaString\", */ f:parse_BrtFmlaString },\n\t/*::[*/0x0009/*::]*/: { /* n:\"BrtFmlaNum\", */ f:parse_BrtFmlaNum },\n\t/*::[*/0x000A/*::]*/: { /* n:\"BrtFmlaBool\", */ f:parse_BrtFmlaBool },\n\t/*::[*/0x000B/*::]*/: { /* n:\"BrtFmlaError\", */ f:parse_BrtFmlaError },\n\t/*::[*/0x000C/*::]*/: { /* n:\"BrtShortBlank\", */ f:parse_BrtShortBlank },\n\t/*::[*/0x000D/*::]*/: { /* n:\"BrtShortRk\", */ f:parse_BrtShortRk },\n\t/*::[*/0x000E/*::]*/: { /* n:\"BrtShortError\", */ f:parse_BrtShortError },\n\t/*::[*/0x000F/*::]*/: { /* n:\"BrtShortBool\", */ f:parse_BrtShortBool },\n\t/*::[*/0x0010/*::]*/: { /* n:\"BrtShortReal\", */ f:parse_BrtShortReal },\n\t/*::[*/0x0011/*::]*/: { /* n:\"BrtShortSt\", */ f:parse_BrtShortSt },\n\t/*::[*/0x0012/*::]*/: { /* n:\"BrtShortIsst\", */ f:parse_BrtShortIsst },\n\t/*::[*/0x0013/*::]*/: { /* n:\"BrtSSTItem\", */ f:parse_RichStr },\n\t/*::[*/0x0014/*::]*/: { /* n:\"BrtPCDIMissing\" */ },\n\t/*::[*/0x0015/*::]*/: { /* n:\"BrtPCDINumber\" */ },\n\t/*::[*/0x0016/*::]*/: { /* n:\"BrtPCDIBoolean\" */ },\n\t/*::[*/0x0017/*::]*/: { /* n:\"BrtPCDIError\" */ },\n\t/*::[*/0x0018/*::]*/: { /* n:\"BrtPCDIString\" */ },\n\t/*::[*/0x0019/*::]*/: { /* n:\"BrtPCDIDatetime\" */ },\n\t/*::[*/0x001A/*::]*/: { /* n:\"BrtPCDIIndex\" */ },\n\t/*::[*/0x001B/*::]*/: { /* n:\"BrtPCDIAMissing\" */ },\n\t/*::[*/0x001C/*::]*/: { /* n:\"BrtPCDIANumber\" */ },\n\t/*::[*/0x001D/*::]*/: { /* n:\"BrtPCDIABoolean\" */ },\n\t/*::[*/0x001E/*::]*/: { /* n:\"BrtPCDIAError\" */ },\n\t/*::[*/0x001F/*::]*/: { /* n:\"BrtPCDIAString\" */ },\n\t/*::[*/0x0020/*::]*/: { /* n:\"BrtPCDIADatetime\" */ },\n\t/*::[*/0x0021/*::]*/: { /* n:\"BrtPCRRecord\" */ },\n\t/*::[*/0x0022/*::]*/: { /* n:\"BrtPCRRecordDt\" */ },\n\t/*::[*/0x0023/*::]*/: { /* n:\"BrtFRTBegin\", */ T:1 },\n\t/*::[*/0x0024/*::]*/: { /* n:\"BrtFRTEnd\", */ T:-1 },\n\t/*::[*/0x0025/*::]*/: { /* n:\"BrtACBegin\", */ T:1 },\n\t/*::[*/0x0026/*::]*/: { /* n:\"BrtACEnd\", */ T:-1 },\n\t/*::[*/0x0027/*::]*/: { /* n:\"BrtName\", */ f:parse_BrtName },\n\t/*::[*/0x0028/*::]*/: { /* n:\"BrtIndexRowBlock\" */ },\n\t/*::[*/0x002A/*::]*/: { /* n:\"BrtIndexBlock\" */ },\n\t/*::[*/0x002B/*::]*/: { /* n:\"BrtFont\", */ f:parse_BrtFont },\n\t/*::[*/0x002C/*::]*/: { /* n:\"BrtFmt\", */ f:parse_BrtFmt },\n\t/*::[*/0x002D/*::]*/: { /* n:\"BrtFill\", */ f:parse_BrtFill },\n\t/*::[*/0x002E/*::]*/: { /* n:\"BrtBorder\", */ f:parse_BrtBorder },\n\t/*::[*/0x002F/*::]*/: { /* n:\"BrtXF\", */ f:parse_BrtXF },\n\t/*::[*/0x0030/*::]*/: { /* n:\"BrtStyle\" */ },\n\t/*::[*/0x0031/*::]*/: { /* n:\"BrtCellMeta\", */ f:parse_Int32LE },\n\t/*::[*/0x0032/*::]*/: { /* n:\"BrtValueMeta\" */ },\n\t/*::[*/0x0033/*::]*/: { /* n:\"BrtMdb\" */ f:parse_BrtMdb },\n\t/*::[*/0x0034/*::]*/: { /* n:\"BrtBeginFmd\", */ T:1 },\n\t/*::[*/0x0035/*::]*/: { /* n:\"BrtEndFmd\", */ T:-1 },\n\t/*::[*/0x0036/*::]*/: { /* n:\"BrtBeginMdx\", */ T:1 },\n\t/*::[*/0x0037/*::]*/: { /* n:\"BrtEndMdx\", */ T:-1 },\n\t/*::[*/0x0038/*::]*/: { /* n:\"BrtBeginMdxTuple\", */ T:1 },\n\t/*::[*/0x0039/*::]*/: { /* n:\"BrtEndMdxTuple\", */ T:-1 },\n\t/*::[*/0x003A/*::]*/: { /* n:\"BrtMdxMbrIstr\" */ },\n\t/*::[*/0x003B/*::]*/: { /* n:\"BrtStr\" */ },\n\t/*::[*/0x003C/*::]*/: { /* n:\"BrtColInfo\", */ f:parse_ColInfo },\n\t/*::[*/0x003E/*::]*/: { /* n:\"BrtCellRString\", */ f:parse_BrtCellRString },\n\t/*::[*/0x003F/*::]*/: { /* n:\"BrtCalcChainItem$\", */ f:parse_BrtCalcChainItem$ },\n\t/*::[*/0x0040/*::]*/: { /* n:\"BrtDVal\", */ f:parse_BrtDVal },\n\t/*::[*/0x0041/*::]*/: { /* n:\"BrtSxvcellNum\" */ },\n\t/*::[*/0x0042/*::]*/: { /* n:\"BrtSxvcellStr\" */ },\n\t/*::[*/0x0043/*::]*/: { /* n:\"BrtSxvcellBool\" */ },\n\t/*::[*/0x0044/*::]*/: { /* n:\"BrtSxvcellErr\" */ },\n\t/*::[*/0x0045/*::]*/: { /* n:\"BrtSxvcellDate\" */ },\n\t/*::[*/0x0046/*::]*/: { /* n:\"BrtSxvcellNil\" */ },\n\t/*::[*/0x0080/*::]*/: { /* n:\"BrtFileVersion\" */ },\n\t/*::[*/0x0081/*::]*/: { /* n:\"BrtBeginSheet\", */ T:1 },\n\t/*::[*/0x0082/*::]*/: { /* n:\"BrtEndSheet\", */ T:-1 },\n\t/*::[*/0x0083/*::]*/: { /* n:\"BrtBeginBook\", */ T:1, f:parsenoop, p:0 },\n\t/*::[*/0x0084/*::]*/: { /* n:\"BrtEndBook\", */ T:-1 },\n\t/*::[*/0x0085/*::]*/: { /* n:\"BrtBeginWsViews\", */ T:1 },\n\t/*::[*/0x0086/*::]*/: { /* n:\"BrtEndWsViews\", */ T:-1 },\n\t/*::[*/0x0087/*::]*/: { /* n:\"BrtBeginBookViews\", */ T:1 },\n\t/*::[*/0x0088/*::]*/: { /* n:\"BrtEndBookViews\", */ T:-1 },\n\t/*::[*/0x0089/*::]*/: { /* n:\"BrtBeginWsView\", */ T:1, f:parse_BrtBeginWsView },\n\t/*::[*/0x008A/*::]*/: { /* n:\"BrtEndWsView\", */ T:-1 },\n\t/*::[*/0x008B/*::]*/: { /* n:\"BrtBeginCsViews\", */ T:1 },\n\t/*::[*/0x008C/*::]*/: { /* n:\"BrtEndCsViews\", */ T:-1 },\n\t/*::[*/0x008D/*::]*/: { /* n:\"BrtBeginCsView\", */ T:1 },\n\t/*::[*/0x008E/*::]*/: { /* n:\"BrtEndCsView\", */ T:-1 },\n\t/*::[*/0x008F/*::]*/: { /* n:\"BrtBeginBundleShs\", */ T:1 },\n\t/*::[*/0x0090/*::]*/: { /* n:\"BrtEndBundleShs\", */ T:-1 },\n\t/*::[*/0x0091/*::]*/: { /* n:\"BrtBeginSheetData\", */ T:1 },\n\t/*::[*/0x0092/*::]*/: { /* n:\"BrtEndSheetData\", */ T:-1 },\n\t/*::[*/0x0093/*::]*/: { /* n:\"BrtWsProp\", */ f:parse_BrtWsProp },\n\t/*::[*/0x0094/*::]*/: { /* n:\"BrtWsDim\", */ f:parse_BrtWsDim, p:16 },\n\t/*::[*/0x0097/*::]*/: { /* n:\"BrtPane\", */ f:parse_BrtPane },\n\t/*::[*/0x0098/*::]*/: { /* n:\"BrtSel\" */ },\n\t/*::[*/0x0099/*::]*/: { /* n:\"BrtWbProp\", */ f:parse_BrtWbProp },\n\t/*::[*/0x009A/*::]*/: { /* n:\"BrtWbFactoid\" */ },\n\t/*::[*/0x009B/*::]*/: { /* n:\"BrtFileRecover\" */ },\n\t/*::[*/0x009C/*::]*/: { /* n:\"BrtBundleSh\", */ f:parse_BrtBundleSh },\n\t/*::[*/0x009D/*::]*/: { /* n:\"BrtCalcProp\" */ },\n\t/*::[*/0x009E/*::]*/: { /* n:\"BrtBookView\" */ },\n\t/*::[*/0x009F/*::]*/: { /* n:\"BrtBeginSst\", */ T:1, f:parse_BrtBeginSst },\n\t/*::[*/0x00A0/*::]*/: { /* n:\"BrtEndSst\", */ T:-1 },\n\t/*::[*/0x00A1/*::]*/: { /* n:\"BrtBeginAFilter\", */ T:1, f:parse_UncheckedRfX },\n\t/*::[*/0x00A2/*::]*/: { /* n:\"BrtEndAFilter\", */ T:-1 },\n\t/*::[*/0x00A3/*::]*/: { /* n:\"BrtBeginFilterColumn\", */ T:1 },\n\t/*::[*/0x00A4/*::]*/: { /* n:\"BrtEndFilterColumn\", */ T:-1 },\n\t/*::[*/0x00A5/*::]*/: { /* n:\"BrtBeginFilters\", */ T:1 },\n\t/*::[*/0x00A6/*::]*/: { /* n:\"BrtEndFilters\", */ T:-1 },\n\t/*::[*/0x00A7/*::]*/: { /* n:\"BrtFilter\" */ },\n\t/*::[*/0x00A8/*::]*/: { /* n:\"BrtColorFilter\" */ },\n\t/*::[*/0x00A9/*::]*/: { /* n:\"BrtIconFilter\" */ },\n\t/*::[*/0x00AA/*::]*/: { /* n:\"BrtTop10Filter\" */ },\n\t/*::[*/0x00AB/*::]*/: { /* n:\"BrtDynamicFilter\" */ },\n\t/*::[*/0x00AC/*::]*/: { /* n:\"BrtBeginCustomFilters\", */ T:1 },\n\t/*::[*/0x00AD/*::]*/: { /* n:\"BrtEndCustomFilters\", */ T:-1 },\n\t/*::[*/0x00AE/*::]*/: { /* n:\"BrtCustomFilter\" */ },\n\t/*::[*/0x00AF/*::]*/: { /* n:\"BrtAFilterDateGroupItem\" */ },\n\t/*::[*/0x00B0/*::]*/: { /* n:\"BrtMergeCell\", */ f:parse_BrtMergeCell },\n\t/*::[*/0x00B1/*::]*/: { /* n:\"BrtBeginMergeCells\", */ T:1 },\n\t/*::[*/0x00B2/*::]*/: { /* n:\"BrtEndMergeCells\", */ T:-1 },\n\t/*::[*/0x00B3/*::]*/: { /* n:\"BrtBeginPivotCacheDef\", */ T:1 },\n\t/*::[*/0x00B4/*::]*/: { /* n:\"BrtEndPivotCacheDef\", */ T:-1 },\n\t/*::[*/0x00B5/*::]*/: { /* n:\"BrtBeginPCDFields\", */ T:1 },\n\t/*::[*/0x00B6/*::]*/: { /* n:\"BrtEndPCDFields\", */ T:-1 },\n\t/*::[*/0x00B7/*::]*/: { /* n:\"BrtBeginPCDField\", */ T:1 },\n\t/*::[*/0x00B8/*::]*/: { /* n:\"BrtEndPCDField\", */ T:-1 },\n\t/*::[*/0x00B9/*::]*/: { /* n:\"BrtBeginPCDSource\", */ T:1 },\n\t/*::[*/0x00BA/*::]*/: { /* n:\"BrtEndPCDSource\", */ T:-1 },\n\t/*::[*/0x00BB/*::]*/: { /* n:\"BrtBeginPCDSRange\", */ T:1 },\n\t/*::[*/0x00BC/*::]*/: { /* n:\"BrtEndPCDSRange\", */ T:-1 },\n\t/*::[*/0x00BD/*::]*/: { /* n:\"BrtBeginPCDFAtbl\", */ T:1 },\n\t/*::[*/0x00BE/*::]*/: { /* n:\"BrtEndPCDFAtbl\", */ T:-1 },\n\t/*::[*/0x00BF/*::]*/: { /* n:\"BrtBeginPCDIRun\", */ T:1 },\n\t/*::[*/0x00C0/*::]*/: { /* n:\"BrtEndPCDIRun\", */ T:-1 },\n\t/*::[*/0x00C1/*::]*/: { /* n:\"BrtBeginPivotCacheRecords\", */ T:1 },\n\t/*::[*/0x00C2/*::]*/: { /* n:\"BrtEndPivotCacheRecords\", */ T:-1 },\n\t/*::[*/0x00C3/*::]*/: { /* n:\"BrtBeginPCDHierarchies\", */ T:1 },\n\t/*::[*/0x00C4/*::]*/: { /* n:\"BrtEndPCDHierarchies\", */ T:-1 },\n\t/*::[*/0x00C5/*::]*/: { /* n:\"BrtBeginPCDHierarchy\", */ T:1 },\n\t/*::[*/0x00C6/*::]*/: { /* n:\"BrtEndPCDHierarchy\", */ T:-1 },\n\t/*::[*/0x00C7/*::]*/: { /* n:\"BrtBeginPCDHFieldsUsage\", */ T:1 },\n\t/*::[*/0x00C8/*::]*/: { /* n:\"BrtEndPCDHFieldsUsage\", */ T:-1 },\n\t/*::[*/0x00C9/*::]*/: { /* n:\"BrtBeginExtConnection\", */ T:1 },\n\t/*::[*/0x00CA/*::]*/: { /* n:\"BrtEndExtConnection\", */ T:-1 },\n\t/*::[*/0x00CB/*::]*/: { /* n:\"BrtBeginECDbProps\", */ T:1 },\n\t/*::[*/0x00CC/*::]*/: { /* n:\"BrtEndECDbProps\", */ T:-1 },\n\t/*::[*/0x00CD/*::]*/: { /* n:\"BrtBeginECOlapProps\", */ T:1 },\n\t/*::[*/0x00CE/*::]*/: { /* n:\"BrtEndECOlapProps\", */ T:-1 },\n\t/*::[*/0x00CF/*::]*/: { /* n:\"BrtBeginPCDSConsol\", */ T:1 },\n\t/*::[*/0x00D0/*::]*/: { /* n:\"BrtEndPCDSConsol\", */ T:-1 },\n\t/*::[*/0x00D1/*::]*/: { /* n:\"BrtBeginPCDSCPages\", */ T:1 },\n\t/*::[*/0x00D2/*::]*/: { /* n:\"BrtEndPCDSCPages\", */ T:-1 },\n\t/*::[*/0x00D3/*::]*/: { /* n:\"BrtBeginPCDSCPage\", */ T:1 },\n\t/*::[*/0x00D4/*::]*/: { /* n:\"BrtEndPCDSCPage\", */ T:-1 },\n\t/*::[*/0x00D5/*::]*/: { /* n:\"BrtBeginPCDSCPItem\", */ T:1 },\n\t/*::[*/0x00D6/*::]*/: { /* n:\"BrtEndPCDSCPItem\", */ T:-1 },\n\t/*::[*/0x00D7/*::]*/: { /* n:\"BrtBeginPCDSCSets\", */ T:1 },\n\t/*::[*/0x00D8/*::]*/: { /* n:\"BrtEndPCDSCSets\", */ T:-1 },\n\t/*::[*/0x00D9/*::]*/: { /* n:\"BrtBeginPCDSCSet\", */ T:1 },\n\t/*::[*/0x00DA/*::]*/: { /* n:\"BrtEndPCDSCSet\", */ T:-1 },\n\t/*::[*/0x00DB/*::]*/: { /* n:\"BrtBeginPCDFGroup\", */ T:1 },\n\t/*::[*/0x00DC/*::]*/: { /* n:\"BrtEndPCDFGroup\", */ T:-1 },\n\t/*::[*/0x00DD/*::]*/: { /* n:\"BrtBeginPCDFGItems\", */ T:1 },\n\t/*::[*/0x00DE/*::]*/: { /* n:\"BrtEndPCDFGItems\", */ T:-1 },\n\t/*::[*/0x00DF/*::]*/: { /* n:\"BrtBeginPCDFGRange\", */ T:1 },\n\t/*::[*/0x00E0/*::]*/: { /* n:\"BrtEndPCDFGRange\", */ T:-1 },\n\t/*::[*/0x00E1/*::]*/: { /* n:\"BrtBeginPCDFGDiscrete\", */ T:1 },\n\t/*::[*/0x00E2/*::]*/: { /* n:\"BrtEndPCDFGDiscrete\", */ T:-1 },\n\t/*::[*/0x00E3/*::]*/: { /* n:\"BrtBeginPCDSDTupleCache\", */ T:1 },\n\t/*::[*/0x00E4/*::]*/: { /* n:\"BrtEndPCDSDTupleCache\", */ T:-1 },\n\t/*::[*/0x00E5/*::]*/: { /* n:\"BrtBeginPCDSDTCEntries\", */ T:1 },\n\t/*::[*/0x00E6/*::]*/: { /* n:\"BrtEndPCDSDTCEntries\", */ T:-1 },\n\t/*::[*/0x00E7/*::]*/: { /* n:\"BrtBeginPCDSDTCEMembers\", */ T:1 },\n\t/*::[*/0x00E8/*::]*/: { /* n:\"BrtEndPCDSDTCEMembers\", */ T:-1 },\n\t/*::[*/0x00E9/*::]*/: { /* n:\"BrtBeginPCDSDTCEMember\", */ T:1 },\n\t/*::[*/0x00EA/*::]*/: { /* n:\"BrtEndPCDSDTCEMember\", */ T:-1 },\n\t/*::[*/0x00EB/*::]*/: { /* n:\"BrtBeginPCDSDTCQueries\", */ T:1 },\n\t/*::[*/0x00EC/*::]*/: { /* n:\"BrtEndPCDSDTCQueries\", */ T:-1 },\n\t/*::[*/0x00ED/*::]*/: { /* n:\"BrtBeginPCDSDTCQuery\", */ T:1 },\n\t/*::[*/0x00EE/*::]*/: { /* n:\"BrtEndPCDSDTCQuery\", */ T:-1 },\n\t/*::[*/0x00EF/*::]*/: { /* n:\"BrtBeginPCDSDTCSets\", */ T:1 },\n\t/*::[*/0x00F0/*::]*/: { /* n:\"BrtEndPCDSDTCSets\", */ T:-1 },\n\t/*::[*/0x00F1/*::]*/: { /* n:\"BrtBeginPCDSDTCSet\", */ T:1 },\n\t/*::[*/0x00F2/*::]*/: { /* n:\"BrtEndPCDSDTCSet\", */ T:-1 },\n\t/*::[*/0x00F3/*::]*/: { /* n:\"BrtBeginPCDCalcItems\", */ T:1 },\n\t/*::[*/0x00F4/*::]*/: { /* n:\"BrtEndPCDCalcItems\", */ T:-1 },\n\t/*::[*/0x00F5/*::]*/: { /* n:\"BrtBeginPCDCalcItem\", */ T:1 },\n\t/*::[*/0x00F6/*::]*/: { /* n:\"BrtEndPCDCalcItem\", */ T:-1 },\n\t/*::[*/0x00F7/*::]*/: { /* n:\"BrtBeginPRule\", */ T:1 },\n\t/*::[*/0x00F8/*::]*/: { /* n:\"BrtEndPRule\", */ T:-1 },\n\t/*::[*/0x00F9/*::]*/: { /* n:\"BrtBeginPRFilters\", */ T:1 },\n\t/*::[*/0x00FA/*::]*/: { /* n:\"BrtEndPRFilters\", */ T:-1 },\n\t/*::[*/0x00FB/*::]*/: { /* n:\"BrtBeginPRFilter\", */ T:1 },\n\t/*::[*/0x00FC/*::]*/: { /* n:\"BrtEndPRFilter\", */ T:-1 },\n\t/*::[*/0x00FD/*::]*/: { /* n:\"BrtBeginPNames\", */ T:1 },\n\t/*::[*/0x00FE/*::]*/: { /* n:\"BrtEndPNames\", */ T:-1 },\n\t/*::[*/0x00FF/*::]*/: { /* n:\"BrtBeginPName\", */ T:1 },\n\t/*::[*/0x0100/*::]*/: { /* n:\"BrtEndPName\", */ T:-1 },\n\t/*::[*/0x0101/*::]*/: { /* n:\"BrtBeginPNPairs\", */ T:1 },\n\t/*::[*/0x0102/*::]*/: { /* n:\"BrtEndPNPairs\", */ T:-1 },\n\t/*::[*/0x0103/*::]*/: { /* n:\"BrtBeginPNPair\", */ T:1 },\n\t/*::[*/0x0104/*::]*/: { /* n:\"BrtEndPNPair\", */ T:-1 },\n\t/*::[*/0x0105/*::]*/: { /* n:\"BrtBeginECWebProps\", */ T:1 },\n\t/*::[*/0x0106/*::]*/: { /* n:\"BrtEndECWebProps\", */ T:-1 },\n\t/*::[*/0x0107/*::]*/: { /* n:\"BrtBeginEcWpTables\", */ T:1 },\n\t/*::[*/0x0108/*::]*/: { /* n:\"BrtEndECWPTables\", */ T:-1 },\n\t/*::[*/0x0109/*::]*/: { /* n:\"BrtBeginECParams\", */ T:1 },\n\t/*::[*/0x010A/*::]*/: { /* n:\"BrtEndECParams\", */ T:-1 },\n\t/*::[*/0x010B/*::]*/: { /* n:\"BrtBeginECParam\", */ T:1 },\n\t/*::[*/0x010C/*::]*/: { /* n:\"BrtEndECParam\", */ T:-1 },\n\t/*::[*/0x010D/*::]*/: { /* n:\"BrtBeginPCDKPIs\", */ T:1 },\n\t/*::[*/0x010E/*::]*/: { /* n:\"BrtEndPCDKPIs\", */ T:-1 },\n\t/*::[*/0x010F/*::]*/: { /* n:\"BrtBeginPCDKPI\", */ T:1 },\n\t/*::[*/0x0110/*::]*/: { /* n:\"BrtEndPCDKPI\", */ T:-1 },\n\t/*::[*/0x0111/*::]*/: { /* n:\"BrtBeginDims\", */ T:1 },\n\t/*::[*/0x0112/*::]*/: { /* n:\"BrtEndDims\", */ T:-1 },\n\t/*::[*/0x0113/*::]*/: { /* n:\"BrtBeginDim\", */ T:1 },\n\t/*::[*/0x0114/*::]*/: { /* n:\"BrtEndDim\", */ T:-1 },\n\t/*::[*/0x0115/*::]*/: { /* n:\"BrtIndexPartEnd\" */ },\n\t/*::[*/0x0116/*::]*/: { /* n:\"BrtBeginStyleSheet\", */ T:1 },\n\t/*::[*/0x0117/*::]*/: { /* n:\"BrtEndStyleSheet\", */ T:-1 },\n\t/*::[*/0x0118/*::]*/: { /* n:\"BrtBeginSXView\", */ T:1 },\n\t/*::[*/0x0119/*::]*/: { /* n:\"BrtEndSXVI\", */ T:-1 },\n\t/*::[*/0x011A/*::]*/: { /* n:\"BrtBeginSXVI\", */ T:1 },\n\t/*::[*/0x011B/*::]*/: { /* n:\"BrtBeginSXVIs\", */ T:1 },\n\t/*::[*/0x011C/*::]*/: { /* n:\"BrtEndSXVIs\", */ T:-1 },\n\t/*::[*/0x011D/*::]*/: { /* n:\"BrtBeginSXVD\", */ T:1 },\n\t/*::[*/0x011E/*::]*/: { /* n:\"BrtEndSXVD\", */ T:-1 },\n\t/*::[*/0x011F/*::]*/: { /* n:\"BrtBeginSXVDs\", */ T:1 },\n\t/*::[*/0x0120/*::]*/: { /* n:\"BrtEndSXVDs\", */ T:-1 },\n\t/*::[*/0x0121/*::]*/: { /* n:\"BrtBeginSXPI\", */ T:1 },\n\t/*::[*/0x0122/*::]*/: { /* n:\"BrtEndSXPI\", */ T:-1 },\n\t/*::[*/0x0123/*::]*/: { /* n:\"BrtBeginSXPIs\", */ T:1 },\n\t/*::[*/0x0124/*::]*/: { /* n:\"BrtEndSXPIs\", */ T:-1 },\n\t/*::[*/0x0125/*::]*/: { /* n:\"BrtBeginSXDI\", */ T:1 },\n\t/*::[*/0x0126/*::]*/: { /* n:\"BrtEndSXDI\", */ T:-1 },\n\t/*::[*/0x0127/*::]*/: { /* n:\"BrtBeginSXDIs\", */ T:1 },\n\t/*::[*/0x0128/*::]*/: { /* n:\"BrtEndSXDIs\", */ T:-1 },\n\t/*::[*/0x0129/*::]*/: { /* n:\"BrtBeginSXLI\", */ T:1 },\n\t/*::[*/0x012A/*::]*/: { /* n:\"BrtEndSXLI\", */ T:-1 },\n\t/*::[*/0x012B/*::]*/: { /* n:\"BrtBeginSXLIRws\", */ T:1 },\n\t/*::[*/0x012C/*::]*/: { /* n:\"BrtEndSXLIRws\", */ T:-1 },\n\t/*::[*/0x012D/*::]*/: { /* n:\"BrtBeginSXLICols\", */ T:1 },\n\t/*::[*/0x012E/*::]*/: { /* n:\"BrtEndSXLICols\", */ T:-1 },\n\t/*::[*/0x012F/*::]*/: { /* n:\"BrtBeginSXFormat\", */ T:1 },\n\t/*::[*/0x0130/*::]*/: { /* n:\"BrtEndSXFormat\", */ T:-1 },\n\t/*::[*/0x0131/*::]*/: { /* n:\"BrtBeginSXFormats\", */ T:1 },\n\t/*::[*/0x0132/*::]*/: { /* n:\"BrtEndSxFormats\", */ T:-1 },\n\t/*::[*/0x0133/*::]*/: { /* n:\"BrtBeginSxSelect\", */ T:1 },\n\t/*::[*/0x0134/*::]*/: { /* n:\"BrtEndSxSelect\", */ T:-1 },\n\t/*::[*/0x0135/*::]*/: { /* n:\"BrtBeginISXVDRws\", */ T:1 },\n\t/*::[*/0x0136/*::]*/: { /* n:\"BrtEndISXVDRws\", */ T:-1 },\n\t/*::[*/0x0137/*::]*/: { /* n:\"BrtBeginISXVDCols\", */ T:1 },\n\t/*::[*/0x0138/*::]*/: { /* n:\"BrtEndISXVDCols\", */ T:-1 },\n\t/*::[*/0x0139/*::]*/: { /* n:\"BrtEndSXLocation\", */ T:-1 },\n\t/*::[*/0x013A/*::]*/: { /* n:\"BrtBeginSXLocation\", */ T:1 },\n\t/*::[*/0x013B/*::]*/: { /* n:\"BrtEndSXView\", */ T:-1 },\n\t/*::[*/0x013C/*::]*/: { /* n:\"BrtBeginSXTHs\", */ T:1 },\n\t/*::[*/0x013D/*::]*/: { /* n:\"BrtEndSXTHs\", */ T:-1 },\n\t/*::[*/0x013E/*::]*/: { /* n:\"BrtBeginSXTH\", */ T:1 },\n\t/*::[*/0x013F/*::]*/: { /* n:\"BrtEndSXTH\", */ T:-1 },\n\t/*::[*/0x0140/*::]*/: { /* n:\"BrtBeginISXTHRws\", */ T:1 },\n\t/*::[*/0x0141/*::]*/: { /* n:\"BrtEndISXTHRws\", */ T:-1 },\n\t/*::[*/0x0142/*::]*/: { /* n:\"BrtBeginISXTHCols\", */ T:1 },\n\t/*::[*/0x0143/*::]*/: { /* n:\"BrtEndISXTHCols\", */ T:-1 },\n\t/*::[*/0x0144/*::]*/: { /* n:\"BrtBeginSXTDMPS\", */ T:1 },\n\t/*::[*/0x0145/*::]*/: { /* n:\"BrtEndSXTDMPs\", */ T:-1 },\n\t/*::[*/0x0146/*::]*/: { /* n:\"BrtBeginSXTDMP\", */ T:1 },\n\t/*::[*/0x0147/*::]*/: { /* n:\"BrtEndSXTDMP\", */ T:-1 },\n\t/*::[*/0x0148/*::]*/: { /* n:\"BrtBeginSXTHItems\", */ T:1 },\n\t/*::[*/0x0149/*::]*/: { /* n:\"BrtEndSXTHItems\", */ T:-1 },\n\t/*::[*/0x014A/*::]*/: { /* n:\"BrtBeginSXTHItem\", */ T:1 },\n\t/*::[*/0x014B/*::]*/: { /* n:\"BrtEndSXTHItem\", */ T:-1 },\n\t/*::[*/0x014C/*::]*/: { /* n:\"BrtBeginMetadata\", */ T:1 },\n\t/*::[*/0x014D/*::]*/: { /* n:\"BrtEndMetadata\", */ T:-1 },\n\t/*::[*/0x014E/*::]*/: { /* n:\"BrtBeginEsmdtinfo\", */ T:1 },\n\t/*::[*/0x014F/*::]*/: { /* n:\"BrtMdtinfo\", */ f:parse_BrtMdtinfo },\n\t/*::[*/0x0150/*::]*/: { /* n:\"BrtEndEsmdtinfo\", */ T:-1 },\n\t/*::[*/0x0151/*::]*/: { /* n:\"BrtBeginEsmdb\", */ f:parse_BrtBeginEsmdb, T:1 },\n\t/*::[*/0x0152/*::]*/: { /* n:\"BrtEndEsmdb\", */ T:-1 },\n\t/*::[*/0x0153/*::]*/: { /* n:\"BrtBeginEsfmd\", */ T:1 },\n\t/*::[*/0x0154/*::]*/: { /* n:\"BrtEndEsfmd\", */ T:-1 },\n\t/*::[*/0x0155/*::]*/: { /* n:\"BrtBeginSingleCells\", */ T:1 },\n\t/*::[*/0x0156/*::]*/: { /* n:\"BrtEndSingleCells\", */ T:-1 },\n\t/*::[*/0x0157/*::]*/: { /* n:\"BrtBeginList\", */ T:1 },\n\t/*::[*/0x0158/*::]*/: { /* n:\"BrtEndList\", */ T:-1 },\n\t/*::[*/0x0159/*::]*/: { /* n:\"BrtBeginListCols\", */ T:1 },\n\t/*::[*/0x015A/*::]*/: { /* n:\"BrtEndListCols\", */ T:-1 },\n\t/*::[*/0x015B/*::]*/: { /* n:\"BrtBeginListCol\", */ T:1 },\n\t/*::[*/0x015C/*::]*/: { /* n:\"BrtEndListCol\", */ T:-1 },\n\t/*::[*/0x015D/*::]*/: { /* n:\"BrtBeginListXmlCPr\", */ T:1 },\n\t/*::[*/0x015E/*::]*/: { /* n:\"BrtEndListXmlCPr\", */ T:-1 },\n\t/*::[*/0x015F/*::]*/: { /* n:\"BrtListCCFmla\" */ },\n\t/*::[*/0x0160/*::]*/: { /* n:\"BrtListTrFmla\" */ },\n\t/*::[*/0x0161/*::]*/: { /* n:\"BrtBeginExternals\", */ T:1 },\n\t/*::[*/0x0162/*::]*/: { /* n:\"BrtEndExternals\", */ T:-1 },\n\t/*::[*/0x0163/*::]*/: { /* n:\"BrtSupBookSrc\", */ f:parse_RelID},\n\t/*::[*/0x0165/*::]*/: { /* n:\"BrtSupSelf\" */ },\n\t/*::[*/0x0166/*::]*/: { /* n:\"BrtSupSame\" */ },\n\t/*::[*/0x0167/*::]*/: { /* n:\"BrtSupTabs\" */ },\n\t/*::[*/0x0168/*::]*/: { /* n:\"BrtBeginSupBook\", */ T:1 },\n\t/*::[*/0x0169/*::]*/: { /* n:\"BrtPlaceholderName\" */ },\n\t/*::[*/0x016A/*::]*/: { /* n:\"BrtExternSheet\", */ f:parse_ExternSheet },\n\t/*::[*/0x016B/*::]*/: { /* n:\"BrtExternTableStart\" */ },\n\t/*::[*/0x016C/*::]*/: { /* n:\"BrtExternTableEnd\" */ },\n\t/*::[*/0x016E/*::]*/: { /* n:\"BrtExternRowHdr\" */ },\n\t/*::[*/0x016F/*::]*/: { /* n:\"BrtExternCellBlank\" */ },\n\t/*::[*/0x0170/*::]*/: { /* n:\"BrtExternCellReal\" */ },\n\t/*::[*/0x0171/*::]*/: { /* n:\"BrtExternCellBool\" */ },\n\t/*::[*/0x0172/*::]*/: { /* n:\"BrtExternCellError\" */ },\n\t/*::[*/0x0173/*::]*/: { /* n:\"BrtExternCellString\" */ },\n\t/*::[*/0x0174/*::]*/: { /* n:\"BrtBeginEsmdx\", */ T:1 },\n\t/*::[*/0x0175/*::]*/: { /* n:\"BrtEndEsmdx\", */ T:-1 },\n\t/*::[*/0x0176/*::]*/: { /* n:\"BrtBeginMdxSet\", */ T:1 },\n\t/*::[*/0x0177/*::]*/: { /* n:\"BrtEndMdxSet\", */ T:-1 },\n\t/*::[*/0x0178/*::]*/: { /* n:\"BrtBeginMdxMbrProp\", */ T:1 },\n\t/*::[*/0x0179/*::]*/: { /* n:\"BrtEndMdxMbrProp\", */ T:-1 },\n\t/*::[*/0x017A/*::]*/: { /* n:\"BrtBeginMdxKPI\", */ T:1 },\n\t/*::[*/0x017B/*::]*/: { /* n:\"BrtEndMdxKPI\", */ T:-1 },\n\t/*::[*/0x017C/*::]*/: { /* n:\"BrtBeginEsstr\", */ T:1 },\n\t/*::[*/0x017D/*::]*/: { /* n:\"BrtEndEsstr\", */ T:-1 },\n\t/*::[*/0x017E/*::]*/: { /* n:\"BrtBeginPRFItem\", */ T:1 },\n\t/*::[*/0x017F/*::]*/: { /* n:\"BrtEndPRFItem\", */ T:-1 },\n\t/*::[*/0x0180/*::]*/: { /* n:\"BrtBeginPivotCacheIDs\", */ T:1 },\n\t/*::[*/0x0181/*::]*/: { /* n:\"BrtEndPivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x0182/*::]*/: { /* n:\"BrtBeginPivotCacheID\", */ T:1 },\n\t/*::[*/0x0183/*::]*/: { /* n:\"BrtEndPivotCacheID\", */ T:-1 },\n\t/*::[*/0x0184/*::]*/: { /* n:\"BrtBeginISXVIs\", */ T:1 },\n\t/*::[*/0x0185/*::]*/: { /* n:\"BrtEndISXVIs\", */ T:-1 },\n\t/*::[*/0x0186/*::]*/: { /* n:\"BrtBeginColInfos\", */ T:1 },\n\t/*::[*/0x0187/*::]*/: { /* n:\"BrtEndColInfos\", */ T:-1 },\n\t/*::[*/0x0188/*::]*/: { /* n:\"BrtBeginRwBrk\", */ T:1 },\n\t/*::[*/0x0189/*::]*/: { /* n:\"BrtEndRwBrk\", */ T:-1 },\n\t/*::[*/0x018A/*::]*/: { /* n:\"BrtBeginColBrk\", */ T:1 },\n\t/*::[*/0x018B/*::]*/: { /* n:\"BrtEndColBrk\", */ T:-1 },\n\t/*::[*/0x018C/*::]*/: { /* n:\"BrtBrk\" */ },\n\t/*::[*/0x018D/*::]*/: { /* n:\"BrtUserBookView\" */ },\n\t/*::[*/0x018E/*::]*/: { /* n:\"BrtInfo\" */ },\n\t/*::[*/0x018F/*::]*/: { /* n:\"BrtCUsr\" */ },\n\t/*::[*/0x0190/*::]*/: { /* n:\"BrtUsr\" */ },\n\t/*::[*/0x0191/*::]*/: { /* n:\"BrtBeginUsers\", */ T:1 },\n\t/*::[*/0x0193/*::]*/: { /* n:\"BrtEOF\" */ },\n\t/*::[*/0x0194/*::]*/: { /* n:\"BrtUCR\" */ },\n\t/*::[*/0x0195/*::]*/: { /* n:\"BrtRRInsDel\" */ },\n\t/*::[*/0x0196/*::]*/: { /* n:\"BrtRREndInsDel\" */ },\n\t/*::[*/0x0197/*::]*/: { /* n:\"BrtRRMove\" */ },\n\t/*::[*/0x0198/*::]*/: { /* n:\"BrtRREndMove\" */ },\n\t/*::[*/0x0199/*::]*/: { /* n:\"BrtRRChgCell\" */ },\n\t/*::[*/0x019A/*::]*/: { /* n:\"BrtRREndChgCell\" */ },\n\t/*::[*/0x019B/*::]*/: { /* n:\"BrtRRHeader\" */ },\n\t/*::[*/0x019C/*::]*/: { /* n:\"BrtRRUserView\" */ },\n\t/*::[*/0x019D/*::]*/: { /* n:\"BrtRRRenSheet\" */ },\n\t/*::[*/0x019E/*::]*/: { /* n:\"BrtRRInsertSh\" */ },\n\t/*::[*/0x019F/*::]*/: { /* n:\"BrtRRDefName\" */ },\n\t/*::[*/0x01A0/*::]*/: { /* n:\"BrtRRNote\" */ },\n\t/*::[*/0x01A1/*::]*/: { /* n:\"BrtRRConflict\" */ },\n\t/*::[*/0x01A2/*::]*/: { /* n:\"BrtRRTQSIF\" */ },\n\t/*::[*/0x01A3/*::]*/: { /* n:\"BrtRRFormat\" */ },\n\t/*::[*/0x01A4/*::]*/: { /* n:\"BrtRREndFormat\" */ },\n\t/*::[*/0x01A5/*::]*/: { /* n:\"BrtRRAutoFmt\" */ },\n\t/*::[*/0x01A6/*::]*/: { /* n:\"BrtBeginUserShViews\", */ T:1 },\n\t/*::[*/0x01A7/*::]*/: { /* n:\"BrtBeginUserShView\", */ T:1 },\n\t/*::[*/0x01A8/*::]*/: { /* n:\"BrtEndUserShView\", */ T:-1 },\n\t/*::[*/0x01A9/*::]*/: { /* n:\"BrtEndUserShViews\", */ T:-1 },\n\t/*::[*/0x01AA/*::]*/: { /* n:\"BrtArrFmla\", */ f:parse_BrtArrFmla },\n\t/*::[*/0x01AB/*::]*/: { /* n:\"BrtShrFmla\", */ f:parse_BrtShrFmla },\n\t/*::[*/0x01AC/*::]*/: { /* n:\"BrtTable\" */ },\n\t/*::[*/0x01AD/*::]*/: { /* n:\"BrtBeginExtConnections\", */ T:1 },\n\t/*::[*/0x01AE/*::]*/: { /* n:\"BrtEndExtConnections\", */ T:-1 },\n\t/*::[*/0x01AF/*::]*/: { /* n:\"BrtBeginPCDCalcMems\", */ T:1 },\n\t/*::[*/0x01B0/*::]*/: { /* n:\"BrtEndPCDCalcMems\", */ T:-1 },\n\t/*::[*/0x01B1/*::]*/: { /* n:\"BrtBeginPCDCalcMem\", */ T:1 },\n\t/*::[*/0x01B2/*::]*/: { /* n:\"BrtEndPCDCalcMem\", */ T:-1 },\n\t/*::[*/0x01B3/*::]*/: { /* n:\"BrtBeginPCDHGLevels\", */ T:1 },\n\t/*::[*/0x01B4/*::]*/: { /* n:\"BrtEndPCDHGLevels\", */ T:-1 },\n\t/*::[*/0x01B5/*::]*/: { /* n:\"BrtBeginPCDHGLevel\", */ T:1 },\n\t/*::[*/0x01B6/*::]*/: { /* n:\"BrtEndPCDHGLevel\", */ T:-1 },\n\t/*::[*/0x01B7/*::]*/: { /* n:\"BrtBeginPCDHGLGroups\", */ T:1 },\n\t/*::[*/0x01B8/*::]*/: { /* n:\"BrtEndPCDHGLGroups\", */ T:-1 },\n\t/*::[*/0x01B9/*::]*/: { /* n:\"BrtBeginPCDHGLGroup\", */ T:1 },\n\t/*::[*/0x01BA/*::]*/: { /* n:\"BrtEndPCDHGLGroup\", */ T:-1 },\n\t/*::[*/0x01BB/*::]*/: { /* n:\"BrtBeginPCDHGLGMembers\", */ T:1 },\n\t/*::[*/0x01BC/*::]*/: { /* n:\"BrtEndPCDHGLGMembers\", */ T:-1 },\n\t/*::[*/0x01BD/*::]*/: { /* n:\"BrtBeginPCDHGLGMember\", */ T:1 },\n\t/*::[*/0x01BE/*::]*/: { /* n:\"BrtEndPCDHGLGMember\", */ T:-1 },\n\t/*::[*/0x01BF/*::]*/: { /* n:\"BrtBeginQSI\", */ T:1 },\n\t/*::[*/0x01C0/*::]*/: { /* n:\"BrtEndQSI\", */ T:-1 },\n\t/*::[*/0x01C1/*::]*/: { /* n:\"BrtBeginQSIR\", */ T:1 },\n\t/*::[*/0x01C2/*::]*/: { /* n:\"BrtEndQSIR\", */ T:-1 },\n\t/*::[*/0x01C3/*::]*/: { /* n:\"BrtBeginDeletedNames\", */ T:1 },\n\t/*::[*/0x01C4/*::]*/: { /* n:\"BrtEndDeletedNames\", */ T:-1 },\n\t/*::[*/0x01C5/*::]*/: { /* n:\"BrtBeginDeletedName\", */ T:1 },\n\t/*::[*/0x01C6/*::]*/: { /* n:\"BrtEndDeletedName\", */ T:-1 },\n\t/*::[*/0x01C7/*::]*/: { /* n:\"BrtBeginQSIFs\", */ T:1 },\n\t/*::[*/0x01C8/*::]*/: { /* n:\"BrtEndQSIFs\", */ T:-1 },\n\t/*::[*/0x01C9/*::]*/: { /* n:\"BrtBeginQSIF\", */ T:1 },\n\t/*::[*/0x01CA/*::]*/: { /* n:\"BrtEndQSIF\", */ T:-1 },\n\t/*::[*/0x01CB/*::]*/: { /* n:\"BrtBeginAutoSortScope\", */ T:1 },\n\t/*::[*/0x01CC/*::]*/: { /* n:\"BrtEndAutoSortScope\", */ T:-1 },\n\t/*::[*/0x01CD/*::]*/: { /* n:\"BrtBeginConditionalFormatting\", */ T:1 },\n\t/*::[*/0x01CE/*::]*/: { /* n:\"BrtEndConditionalFormatting\", */ T:-1 },\n\t/*::[*/0x01CF/*::]*/: { /* n:\"BrtBeginCFRule\", */ T:1 },\n\t/*::[*/0x01D0/*::]*/: { /* n:\"BrtEndCFRule\", */ T:-1 },\n\t/*::[*/0x01D1/*::]*/: { /* n:\"BrtBeginIconSet\", */ T:1 },\n\t/*::[*/0x01D2/*::]*/: { /* n:\"BrtEndIconSet\", */ T:-1 },\n\t/*::[*/0x01D3/*::]*/: { /* n:\"BrtBeginDatabar\", */ T:1 },\n\t/*::[*/0x01D4/*::]*/: { /* n:\"BrtEndDatabar\", */ T:-1 },\n\t/*::[*/0x01D5/*::]*/: { /* n:\"BrtBeginColorScale\", */ T:1 },\n\t/*::[*/0x01D6/*::]*/: { /* n:\"BrtEndColorScale\", */ T:-1 },\n\t/*::[*/0x01D7/*::]*/: { /* n:\"BrtCFVO\" */ },\n\t/*::[*/0x01D8/*::]*/: { /* n:\"BrtExternValueMeta\" */ },\n\t/*::[*/0x01D9/*::]*/: { /* n:\"BrtBeginColorPalette\", */ T:1 },\n\t/*::[*/0x01DA/*::]*/: { /* n:\"BrtEndColorPalette\", */ T:-1 },\n\t/*::[*/0x01DB/*::]*/: { /* n:\"BrtIndexedColor\" */ },\n\t/*::[*/0x01DC/*::]*/: { /* n:\"BrtMargins\", */ f:parse_BrtMargins },\n\t/*::[*/0x01DD/*::]*/: { /* n:\"BrtPrintOptions\" */ },\n\t/*::[*/0x01DE/*::]*/: { /* n:\"BrtPageSetup\" */ },\n\t/*::[*/0x01DF/*::]*/: { /* n:\"BrtBeginHeaderFooter\", */ T:1 },\n\t/*::[*/0x01E0/*::]*/: { /* n:\"BrtEndHeaderFooter\", */ T:-1 },\n\t/*::[*/0x01E1/*::]*/: { /* n:\"BrtBeginSXCrtFormat\", */ T:1 },\n\t/*::[*/0x01E2/*::]*/: { /* n:\"BrtEndSXCrtFormat\", */ T:-1 },\n\t/*::[*/0x01E3/*::]*/: { /* n:\"BrtBeginSXCrtFormats\", */ T:1 },\n\t/*::[*/0x01E4/*::]*/: { /* n:\"BrtEndSXCrtFormats\", */ T:-1 },\n\t/*::[*/0x01E5/*::]*/: { /* n:\"BrtWsFmtInfo\", */ f:parse_BrtWsFmtInfo },\n\t/*::[*/0x01E6/*::]*/: { /* n:\"BrtBeginMgs\", */ T:1 },\n\t/*::[*/0x01E7/*::]*/: { /* n:\"BrtEndMGs\", */ T:-1 },\n\t/*::[*/0x01E8/*::]*/: { /* n:\"BrtBeginMGMaps\", */ T:1 },\n\t/*::[*/0x01E9/*::]*/: { /* n:\"BrtEndMGMaps\", */ T:-1 },\n\t/*::[*/0x01EA/*::]*/: { /* n:\"BrtBeginMG\", */ T:1 },\n\t/*::[*/0x01EB/*::]*/: { /* n:\"BrtEndMG\", */ T:-1 },\n\t/*::[*/0x01EC/*::]*/: { /* n:\"BrtBeginMap\", */ T:1 },\n\t/*::[*/0x01ED/*::]*/: { /* n:\"BrtEndMap\", */ T:-1 },\n\t/*::[*/0x01EE/*::]*/: { /* n:\"BrtHLink\", */ f:parse_BrtHLink },\n\t/*::[*/0x01EF/*::]*/: { /* n:\"BrtBeginDCon\", */ T:1 },\n\t/*::[*/0x01F0/*::]*/: { /* n:\"BrtEndDCon\", */ T:-1 },\n\t/*::[*/0x01F1/*::]*/: { /* n:\"BrtBeginDRefs\", */ T:1 },\n\t/*::[*/0x01F2/*::]*/: { /* n:\"BrtEndDRefs\", */ T:-1 },\n\t/*::[*/0x01F3/*::]*/: { /* n:\"BrtDRef\" */ },\n\t/*::[*/0x01F4/*::]*/: { /* n:\"BrtBeginScenMan\", */ T:1 },\n\t/*::[*/0x01F5/*::]*/: { /* n:\"BrtEndScenMan\", */ T:-1 },\n\t/*::[*/0x01F6/*::]*/: { /* n:\"BrtBeginSct\", */ T:1 },\n\t/*::[*/0x01F7/*::]*/: { /* n:\"BrtEndSct\", */ T:-1 },\n\t/*::[*/0x01F8/*::]*/: { /* n:\"BrtSlc\" */ },\n\t/*::[*/0x01F9/*::]*/: { /* n:\"BrtBeginDXFs\", */ T:1 },\n\t/*::[*/0x01FA/*::]*/: { /* n:\"BrtEndDXFs\", */ T:-1 },\n\t/*::[*/0x01FB/*::]*/: { /* n:\"BrtDXF\" */ },\n\t/*::[*/0x01FC/*::]*/: { /* n:\"BrtBeginTableStyles\", */ T:1 },\n\t/*::[*/0x01FD/*::]*/: { /* n:\"BrtEndTableStyles\", */ T:-1 },\n\t/*::[*/0x01FE/*::]*/: { /* n:\"BrtBeginTableStyle\", */ T:1 },\n\t/*::[*/0x01FF/*::]*/: { /* n:\"BrtEndTableStyle\", */ T:-1 },\n\t/*::[*/0x0200/*::]*/: { /* n:\"BrtTableStyleElement\" */ },\n\t/*::[*/0x0201/*::]*/: { /* n:\"BrtTableStyleClient\" */ },\n\t/*::[*/0x0202/*::]*/: { /* n:\"BrtBeginVolDeps\", */ T:1 },\n\t/*::[*/0x0203/*::]*/: { /* n:\"BrtEndVolDeps\", */ T:-1 },\n\t/*::[*/0x0204/*::]*/: { /* n:\"BrtBeginVolType\", */ T:1 },\n\t/*::[*/0x0205/*::]*/: { /* n:\"BrtEndVolType\", */ T:-1 },\n\t/*::[*/0x0206/*::]*/: { /* n:\"BrtBeginVolMain\", */ T:1 },\n\t/*::[*/0x0207/*::]*/: { /* n:\"BrtEndVolMain\", */ T:-1 },\n\t/*::[*/0x0208/*::]*/: { /* n:\"BrtBeginVolTopic\", */ T:1 },\n\t/*::[*/0x0209/*::]*/: { /* n:\"BrtEndVolTopic\", */ T:-1 },\n\t/*::[*/0x020A/*::]*/: { /* n:\"BrtVolSubtopic\" */ },\n\t/*::[*/0x020B/*::]*/: { /* n:\"BrtVolRef\" */ },\n\t/*::[*/0x020C/*::]*/: { /* n:\"BrtVolNum\" */ },\n\t/*::[*/0x020D/*::]*/: { /* n:\"BrtVolErr\" */ },\n\t/*::[*/0x020E/*::]*/: { /* n:\"BrtVolStr\" */ },\n\t/*::[*/0x020F/*::]*/: { /* n:\"BrtVolBool\" */ },\n\t/*::[*/0x0210/*::]*/: { /* n:\"BrtBeginCalcChain$\", */ T:1 },\n\t/*::[*/0x0211/*::]*/: { /* n:\"BrtEndCalcChain$\", */ T:-1 },\n\t/*::[*/0x0212/*::]*/: { /* n:\"BrtBeginSortState\", */ T:1 },\n\t/*::[*/0x0213/*::]*/: { /* n:\"BrtEndSortState\", */ T:-1 },\n\t/*::[*/0x0214/*::]*/: { /* n:\"BrtBeginSortCond\", */ T:1 },\n\t/*::[*/0x0215/*::]*/: { /* n:\"BrtEndSortCond\", */ T:-1 },\n\t/*::[*/0x0216/*::]*/: { /* n:\"BrtBookProtection\" */ },\n\t/*::[*/0x0217/*::]*/: { /* n:\"BrtSheetProtection\" */ },\n\t/*::[*/0x0218/*::]*/: { /* n:\"BrtRangeProtection\" */ },\n\t/*::[*/0x0219/*::]*/: { /* n:\"BrtPhoneticInfo\" */ },\n\t/*::[*/0x021A/*::]*/: { /* n:\"BrtBeginECTxtWiz\", */ T:1 },\n\t/*::[*/0x021B/*::]*/: { /* n:\"BrtEndECTxtWiz\", */ T:-1 },\n\t/*::[*/0x021C/*::]*/: { /* n:\"BrtBeginECTWFldInfoLst\", */ T:1 },\n\t/*::[*/0x021D/*::]*/: { /* n:\"BrtEndECTWFldInfoLst\", */ T:-1 },\n\t/*::[*/0x021E/*::]*/: { /* n:\"BrtBeginECTwFldInfo\", */ T:1 },\n\t/*::[*/0x0224/*::]*/: { /* n:\"BrtFileSharing\" */ },\n\t/*::[*/0x0225/*::]*/: { /* n:\"BrtOleSize\" */ },\n\t/*::[*/0x0226/*::]*/: { /* n:\"BrtDrawing\", */ f:parse_RelID },\n\t/*::[*/0x0227/*::]*/: { /* n:\"BrtLegacyDrawing\" */ },\n\t/*::[*/0x0228/*::]*/: { /* n:\"BrtLegacyDrawingHF\" */ },\n\t/*::[*/0x0229/*::]*/: { /* n:\"BrtWebOpt\" */ },\n\t/*::[*/0x022A/*::]*/: { /* n:\"BrtBeginWebPubItems\", */ T:1 },\n\t/*::[*/0x022B/*::]*/: { /* n:\"BrtEndWebPubItems\", */ T:-1 },\n\t/*::[*/0x022C/*::]*/: { /* n:\"BrtBeginWebPubItem\", */ T:1 },\n\t/*::[*/0x022D/*::]*/: { /* n:\"BrtEndWebPubItem\", */ T:-1 },\n\t/*::[*/0x022E/*::]*/: { /* n:\"BrtBeginSXCondFmt\", */ T:1 },\n\t/*::[*/0x022F/*::]*/: { /* n:\"BrtEndSXCondFmt\", */ T:-1 },\n\t/*::[*/0x0230/*::]*/: { /* n:\"BrtBeginSXCondFmts\", */ T:1 },\n\t/*::[*/0x0231/*::]*/: { /* n:\"BrtEndSXCondFmts\", */ T:-1 },\n\t/*::[*/0x0232/*::]*/: { /* n:\"BrtBkHim\" */ },\n\t/*::[*/0x0234/*::]*/: { /* n:\"BrtColor\" */ },\n\t/*::[*/0x0235/*::]*/: { /* n:\"BrtBeginIndexedColors\", */ T:1 },\n\t/*::[*/0x0236/*::]*/: { /* n:\"BrtEndIndexedColors\", */ T:-1 },\n\t/*::[*/0x0239/*::]*/: { /* n:\"BrtBeginMRUColors\", */ T:1 },\n\t/*::[*/0x023A/*::]*/: { /* n:\"BrtEndMRUColors\", */ T:-1 },\n\t/*::[*/0x023C/*::]*/: { /* n:\"BrtMRUColor\" */ },\n\t/*::[*/0x023D/*::]*/: { /* n:\"BrtBeginDVals\", */ T:1 },\n\t/*::[*/0x023E/*::]*/: { /* n:\"BrtEndDVals\", */ T:-1 },\n\t/*::[*/0x0241/*::]*/: { /* n:\"BrtSupNameStart\" */ },\n\t/*::[*/0x0242/*::]*/: { /* n:\"BrtSupNameValueStart\" */ },\n\t/*::[*/0x0243/*::]*/: { /* n:\"BrtSupNameValueEnd\" */ },\n\t/*::[*/0x0244/*::]*/: { /* n:\"BrtSupNameNum\" */ },\n\t/*::[*/0x0245/*::]*/: { /* n:\"BrtSupNameErr\" */ },\n\t/*::[*/0x0246/*::]*/: { /* n:\"BrtSupNameSt\" */ },\n\t/*::[*/0x0247/*::]*/: { /* n:\"BrtSupNameNil\" */ },\n\t/*::[*/0x0248/*::]*/: { /* n:\"BrtSupNameBool\" */ },\n\t/*::[*/0x0249/*::]*/: { /* n:\"BrtSupNameFmla\" */ },\n\t/*::[*/0x024A/*::]*/: { /* n:\"BrtSupNameBits\" */ },\n\t/*::[*/0x024B/*::]*/: { /* n:\"BrtSupNameEnd\" */ },\n\t/*::[*/0x024C/*::]*/: { /* n:\"BrtEndSupBook\", */ T:-1 },\n\t/*::[*/0x024D/*::]*/: { /* n:\"BrtCellSmartTagProperty\" */ },\n\t/*::[*/0x024E/*::]*/: { /* n:\"BrtBeginCellSmartTag\", */ T:1 },\n\t/*::[*/0x024F/*::]*/: { /* n:\"BrtEndCellSmartTag\", */ T:-1 },\n\t/*::[*/0x0250/*::]*/: { /* n:\"BrtBeginCellSmartTags\", */ T:1 },\n\t/*::[*/0x0251/*::]*/: { /* n:\"BrtEndCellSmartTags\", */ T:-1 },\n\t/*::[*/0x0252/*::]*/: { /* n:\"BrtBeginSmartTags\", */ T:1 },\n\t/*::[*/0x0253/*::]*/: { /* n:\"BrtEndSmartTags\", */ T:-1 },\n\t/*::[*/0x0254/*::]*/: { /* n:\"BrtSmartTagType\" */ },\n\t/*::[*/0x0255/*::]*/: { /* n:\"BrtBeginSmartTagTypes\", */ T:1 },\n\t/*::[*/0x0256/*::]*/: { /* n:\"BrtEndSmartTagTypes\", */ T:-1 },\n\t/*::[*/0x0257/*::]*/: { /* n:\"BrtBeginSXFilters\", */ T:1 },\n\t/*::[*/0x0258/*::]*/: { /* n:\"BrtEndSXFilters\", */ T:-1 },\n\t/*::[*/0x0259/*::]*/: { /* n:\"BrtBeginSXFILTER\", */ T:1 },\n\t/*::[*/0x025A/*::]*/: { /* n:\"BrtEndSXFilter\", */ T:-1 },\n\t/*::[*/0x025B/*::]*/: { /* n:\"BrtBeginFills\", */ T:1 },\n\t/*::[*/0x025C/*::]*/: { /* n:\"BrtEndFills\", */ T:-1 },\n\t/*::[*/0x025D/*::]*/: { /* n:\"BrtBeginCellWatches\", */ T:1 },\n\t/*::[*/0x025E/*::]*/: { /* n:\"BrtEndCellWatches\", */ T:-1 },\n\t/*::[*/0x025F/*::]*/: { /* n:\"BrtCellWatch\" */ },\n\t/*::[*/0x0260/*::]*/: { /* n:\"BrtBeginCRErrs\", */ T:1 },\n\t/*::[*/0x0261/*::]*/: { /* n:\"BrtEndCRErrs\", */ T:-1 },\n\t/*::[*/0x0262/*::]*/: { /* n:\"BrtCrashRecErr\" */ },\n\t/*::[*/0x0263/*::]*/: { /* n:\"BrtBeginFonts\", */ T:1 },\n\t/*::[*/0x0264/*::]*/: { /* n:\"BrtEndFonts\", */ T:-1 },\n\t/*::[*/0x0265/*::]*/: { /* n:\"BrtBeginBorders\", */ T:1 },\n\t/*::[*/0x0266/*::]*/: { /* n:\"BrtEndBorders\", */ T:-1 },\n\t/*::[*/0x0267/*::]*/: { /* n:\"BrtBeginFmts\", */ T:1 },\n\t/*::[*/0x0268/*::]*/: { /* n:\"BrtEndFmts\", */ T:-1 },\n\t/*::[*/0x0269/*::]*/: { /* n:\"BrtBeginCellXFs\", */ T:1 },\n\t/*::[*/0x026A/*::]*/: { /* n:\"BrtEndCellXFs\", */ T:-1 },\n\t/*::[*/0x026B/*::]*/: { /* n:\"BrtBeginStyles\", */ T:1 },\n\t/*::[*/0x026C/*::]*/: { /* n:\"BrtEndStyles\", */ T:-1 },\n\t/*::[*/0x0271/*::]*/: { /* n:\"BrtBigName\" */ },\n\t/*::[*/0x0272/*::]*/: { /* n:\"BrtBeginCellStyleXFs\", */ T:1 },\n\t/*::[*/0x0273/*::]*/: { /* n:\"BrtEndCellStyleXFs\", */ T:-1 },\n\t/*::[*/0x0274/*::]*/: { /* n:\"BrtBeginComments\", */ T:1 },\n\t/*::[*/0x0275/*::]*/: { /* n:\"BrtEndComments\", */ T:-1 },\n\t/*::[*/0x0276/*::]*/: { /* n:\"BrtBeginCommentAuthors\", */ T:1 },\n\t/*::[*/0x0277/*::]*/: { /* n:\"BrtEndCommentAuthors\", */ T:-1 },\n\t/*::[*/0x0278/*::]*/: { /* n:\"BrtCommentAuthor\", */ f:parse_BrtCommentAuthor },\n\t/*::[*/0x0279/*::]*/: { /* n:\"BrtBeginCommentList\", */ T:1 },\n\t/*::[*/0x027A/*::]*/: { /* n:\"BrtEndCommentList\", */ T:-1 },\n\t/*::[*/0x027B/*::]*/: { /* n:\"BrtBeginComment\", */ T:1, f:parse_BrtBeginComment},\n\t/*::[*/0x027C/*::]*/: { /* n:\"BrtEndComment\", */ T:-1 },\n\t/*::[*/0x027D/*::]*/: { /* n:\"BrtCommentText\", */ f:parse_BrtCommentText },\n\t/*::[*/0x027E/*::]*/: { /* n:\"BrtBeginOleObjects\", */ T:1 },\n\t/*::[*/0x027F/*::]*/: { /* n:\"BrtOleObject\" */ },\n\t/*::[*/0x0280/*::]*/: { /* n:\"BrtEndOleObjects\", */ T:-1 },\n\t/*::[*/0x0281/*::]*/: { /* n:\"BrtBeginSxrules\", */ T:1 },\n\t/*::[*/0x0282/*::]*/: { /* n:\"BrtEndSxRules\", */ T:-1 },\n\t/*::[*/0x0283/*::]*/: { /* n:\"BrtBeginActiveXControls\", */ T:1 },\n\t/*::[*/0x0284/*::]*/: { /* n:\"BrtActiveX\" */ },\n\t/*::[*/0x0285/*::]*/: { /* n:\"BrtEndActiveXControls\", */ T:-1 },\n\t/*::[*/0x0286/*::]*/: { /* n:\"BrtBeginPCDSDTCEMembersSortBy\", */ T:1 },\n\t/*::[*/0x0288/*::]*/: { /* n:\"BrtBeginCellIgnoreECs\", */ T:1 },\n\t/*::[*/0x0289/*::]*/: { /* n:\"BrtCellIgnoreEC\" */ },\n\t/*::[*/0x028A/*::]*/: { /* n:\"BrtEndCellIgnoreECs\", */ T:-1 },\n\t/*::[*/0x028B/*::]*/: { /* n:\"BrtCsProp\", */ f:parse_BrtCsProp },\n\t/*::[*/0x028C/*::]*/: { /* n:\"BrtCsPageSetup\" */ },\n\t/*::[*/0x028D/*::]*/: { /* n:\"BrtBeginUserCsViews\", */ T:1 },\n\t/*::[*/0x028E/*::]*/: { /* n:\"BrtEndUserCsViews\", */ T:-1 },\n\t/*::[*/0x028F/*::]*/: { /* n:\"BrtBeginUserCsView\", */ T:1 },\n\t/*::[*/0x0290/*::]*/: { /* n:\"BrtEndUserCsView\", */ T:-1 },\n\t/*::[*/0x0291/*::]*/: { /* n:\"BrtBeginPcdSFCIEntries\", */ T:1 },\n\t/*::[*/0x0292/*::]*/: { /* n:\"BrtEndPCDSFCIEntries\", */ T:-1 },\n\t/*::[*/0x0293/*::]*/: { /* n:\"BrtPCDSFCIEntry\" */ },\n\t/*::[*/0x0294/*::]*/: { /* n:\"BrtBeginListParts\", */ T:1 },\n\t/*::[*/0x0295/*::]*/: { /* n:\"BrtListPart\" */ },\n\t/*::[*/0x0296/*::]*/: { /* n:\"BrtEndListParts\", */ T:-1 },\n\t/*::[*/0x0297/*::]*/: { /* n:\"BrtSheetCalcProp\" */ },\n\t/*::[*/0x0298/*::]*/: { /* n:\"BrtBeginFnGroup\", */ T:1 },\n\t/*::[*/0x0299/*::]*/: { /* n:\"BrtFnGroup\" */ },\n\t/*::[*/0x029A/*::]*/: { /* n:\"BrtEndFnGroup\", */ T:-1 },\n\t/*::[*/0x029B/*::]*/: { /* n:\"BrtSupAddin\" */ },\n\t/*::[*/0x029C/*::]*/: { /* n:\"BrtSXTDMPOrder\" */ },\n\t/*::[*/0x029D/*::]*/: { /* n:\"BrtCsProtection\" */ },\n\t/*::[*/0x029F/*::]*/: { /* n:\"BrtBeginWsSortMap\", */ T:1 },\n\t/*::[*/0x02A0/*::]*/: { /* n:\"BrtEndWsSortMap\", */ T:-1 },\n\t/*::[*/0x02A1/*::]*/: { /* n:\"BrtBeginRRSort\", */ T:1 },\n\t/*::[*/0x02A2/*::]*/: { /* n:\"BrtEndRRSort\", */ T:-1 },\n\t/*::[*/0x02A3/*::]*/: { /* n:\"BrtRRSortItem\" */ },\n\t/*::[*/0x02A4/*::]*/: { /* n:\"BrtFileSharingIso\" */ },\n\t/*::[*/0x02A5/*::]*/: { /* n:\"BrtBookProtectionIso\" */ },\n\t/*::[*/0x02A6/*::]*/: { /* n:\"BrtSheetProtectionIso\" */ },\n\t/*::[*/0x02A7/*::]*/: { /* n:\"BrtCsProtectionIso\" */ },\n\t/*::[*/0x02A8/*::]*/: { /* n:\"BrtRangeProtectionIso\" */ },\n\t/*::[*/0x02A9/*::]*/: { /* n:\"BrtDValList\" */ },\n\t/*::[*/0x0400/*::]*/: { /* n:\"BrtRwDescent\" */ },\n\t/*::[*/0x0401/*::]*/: { /* n:\"BrtKnownFonts\" */ },\n\t/*::[*/0x0402/*::]*/: { /* n:\"BrtBeginSXTupleSet\", */ T:1 },\n\t/*::[*/0x0403/*::]*/: { /* n:\"BrtEndSXTupleSet\", */ T:-1 },\n\t/*::[*/0x0404/*::]*/: { /* n:\"BrtBeginSXTupleSetHeader\", */ T:1 },\n\t/*::[*/0x0405/*::]*/: { /* n:\"BrtEndSXTupleSetHeader\", */ T:-1 },\n\t/*::[*/0x0406/*::]*/: { /* n:\"BrtSXTupleSetHeaderItem\" */ },\n\t/*::[*/0x0407/*::]*/: { /* n:\"BrtBeginSXTupleSetData\", */ T:1 },\n\t/*::[*/0x0408/*::]*/: { /* n:\"BrtEndSXTupleSetData\", */ T:-1 },\n\t/*::[*/0x0409/*::]*/: { /* n:\"BrtBeginSXTupleSetRow\", */ T:1 },\n\t/*::[*/0x040A/*::]*/: { /* n:\"BrtEndSXTupleSetRow\", */ T:-1 },\n\t/*::[*/0x040B/*::]*/: { /* n:\"BrtSXTupleSetRowItem\" */ },\n\t/*::[*/0x040C/*::]*/: { /* n:\"BrtNameExt\" */ },\n\t/*::[*/0x040D/*::]*/: { /* n:\"BrtPCDH14\" */ },\n\t/*::[*/0x040E/*::]*/: { /* n:\"BrtBeginPCDCalcMem14\", */ T:1 },\n\t/*::[*/0x040F/*::]*/: { /* n:\"BrtEndPCDCalcMem14\", */ T:-1 },\n\t/*::[*/0x0410/*::]*/: { /* n:\"BrtSXTH14\" */ },\n\t/*::[*/0x0411/*::]*/: { /* n:\"BrtBeginSparklineGroup\", */ T:1 },\n\t/*::[*/0x0412/*::]*/: { /* n:\"BrtEndSparklineGroup\", */ T:-1 },\n\t/*::[*/0x0413/*::]*/: { /* n:\"BrtSparkline\" */ },\n\t/*::[*/0x0414/*::]*/: { /* n:\"BrtSXDI14\" */ },\n\t/*::[*/0x0415/*::]*/: { /* n:\"BrtWsFmtInfoEx14\" */ },\n\t/*::[*/0x0416/*::]*/: { /* n:\"BrtBeginConditionalFormatting14\", */ T:1 },\n\t/*::[*/0x0417/*::]*/: { /* n:\"BrtEndConditionalFormatting14\", */ T:-1 },\n\t/*::[*/0x0418/*::]*/: { /* n:\"BrtBeginCFRule14\", */ T:1 },\n\t/*::[*/0x0419/*::]*/: { /* n:\"BrtEndCFRule14\", */ T:-1 },\n\t/*::[*/0x041A/*::]*/: { /* n:\"BrtCFVO14\" */ },\n\t/*::[*/0x041B/*::]*/: { /* n:\"BrtBeginDatabar14\", */ T:1 },\n\t/*::[*/0x041C/*::]*/: { /* n:\"BrtBeginIconSet14\", */ T:1 },\n\t/*::[*/0x041D/*::]*/: { /* n:\"BrtDVal14\", */ f: parse_BrtDVal14 },\n\t/*::[*/0x041E/*::]*/: { /* n:\"BrtBeginDVals14\", */ T:1 },\n\t/*::[*/0x041F/*::]*/: { /* n:\"BrtColor14\" */ },\n\t/*::[*/0x0420/*::]*/: { /* n:\"BrtBeginSparklines\", */ T:1 },\n\t/*::[*/0x0421/*::]*/: { /* n:\"BrtEndSparklines\", */ T:-1 },\n\t/*::[*/0x0422/*::]*/: { /* n:\"BrtBeginSparklineGroups\", */ T:1 },\n\t/*::[*/0x0423/*::]*/: { /* n:\"BrtEndSparklineGroups\", */ T:-1 },\n\t/*::[*/0x0425/*::]*/: { /* n:\"BrtSXVD14\" */ },\n\t/*::[*/0x0426/*::]*/: { /* n:\"BrtBeginSXView14\", */ T:1 },\n\t/*::[*/0x0427/*::]*/: { /* n:\"BrtEndSXView14\", */ T:-1 },\n\t/*::[*/0x0428/*::]*/: { /* n:\"BrtBeginSXView16\", */ T:1 },\n\t/*::[*/0x0429/*::]*/: { /* n:\"BrtEndSXView16\", */ T:-1 },\n\t/*::[*/0x042A/*::]*/: { /* n:\"BrtBeginPCD14\", */ T:1 },\n\t/*::[*/0x042B/*::]*/: { /* n:\"BrtEndPCD14\", */ T:-1 },\n\t/*::[*/0x042C/*::]*/: { /* n:\"BrtBeginExtConn14\", */ T:1 },\n\t/*::[*/0x042D/*::]*/: { /* n:\"BrtEndExtConn14\", */ T:-1 },\n\t/*::[*/0x042E/*::]*/: { /* n:\"BrtBeginSlicerCacheIDs\", */ T:1 },\n\t/*::[*/0x042F/*::]*/: { /* n:\"BrtEndSlicerCacheIDs\", */ T:-1 },\n\t/*::[*/0x0430/*::]*/: { /* n:\"BrtBeginSlicerCacheID\", */ T:1 },\n\t/*::[*/0x0431/*::]*/: { /* n:\"BrtEndSlicerCacheID\", */ T:-1 },\n\t/*::[*/0x0433/*::]*/: { /* n:\"BrtBeginSlicerCache\", */ T:1 },\n\t/*::[*/0x0434/*::]*/: { /* n:\"BrtEndSlicerCache\", */ T:-1 },\n\t/*::[*/0x0435/*::]*/: { /* n:\"BrtBeginSlicerCacheDef\", */ T:1 },\n\t/*::[*/0x0436/*::]*/: { /* n:\"BrtEndSlicerCacheDef\", */ T:-1 },\n\t/*::[*/0x0437/*::]*/: { /* n:\"BrtBeginSlicersEx\", */ T:1 },\n\t/*::[*/0x0438/*::]*/: { /* n:\"BrtEndSlicersEx\", */ T:-1 },\n\t/*::[*/0x0439/*::]*/: { /* n:\"BrtBeginSlicerEx\", */ T:1 },\n\t/*::[*/0x043A/*::]*/: { /* n:\"BrtEndSlicerEx\", */ T:-1 },\n\t/*::[*/0x043B/*::]*/: { /* n:\"BrtBeginSlicer\", */ T:1 },\n\t/*::[*/0x043C/*::]*/: { /* n:\"BrtEndSlicer\", */ T:-1 },\n\t/*::[*/0x043D/*::]*/: { /* n:\"BrtSlicerCachePivotTables\" */ },\n\t/*::[*/0x043E/*::]*/: { /* n:\"BrtBeginSlicerCacheOlapImpl\", */ T:1 },\n\t/*::[*/0x043F/*::]*/: { /* n:\"BrtEndSlicerCacheOlapImpl\", */ T:-1 },\n\t/*::[*/0x0440/*::]*/: { /* n:\"BrtBeginSlicerCacheLevelsData\", */ T:1 },\n\t/*::[*/0x0441/*::]*/: { /* n:\"BrtEndSlicerCacheLevelsData\", */ T:-1 },\n\t/*::[*/0x0442/*::]*/: { /* n:\"BrtBeginSlicerCacheLevelData\", */ T:1 },\n\t/*::[*/0x0443/*::]*/: { /* n:\"BrtEndSlicerCacheLevelData\", */ T:-1 },\n\t/*::[*/0x0444/*::]*/: { /* n:\"BrtBeginSlicerCacheSiRanges\", */ T:1 },\n\t/*::[*/0x0445/*::]*/: { /* n:\"BrtEndSlicerCacheSiRanges\", */ T:-1 },\n\t/*::[*/0x0446/*::]*/: { /* n:\"BrtBeginSlicerCacheSiRange\", */ T:1 },\n\t/*::[*/0x0447/*::]*/: { /* n:\"BrtEndSlicerCacheSiRange\", */ T:-1 },\n\t/*::[*/0x0448/*::]*/: { /* n:\"BrtSlicerCacheOlapItem\" */ },\n\t/*::[*/0x0449/*::]*/: { /* n:\"BrtBeginSlicerCacheSelections\", */ T:1 },\n\t/*::[*/0x044A/*::]*/: { /* n:\"BrtSlicerCacheSelection\" */ },\n\t/*::[*/0x044B/*::]*/: { /* n:\"BrtEndSlicerCacheSelections\", */ T:-1 },\n\t/*::[*/0x044C/*::]*/: { /* n:\"BrtBeginSlicerCacheNative\", */ T:1 },\n\t/*::[*/0x044D/*::]*/: { /* n:\"BrtEndSlicerCacheNative\", */ T:-1 },\n\t/*::[*/0x044E/*::]*/: { /* n:\"BrtSlicerCacheNativeItem\" */ },\n\t/*::[*/0x044F/*::]*/: { /* n:\"BrtRangeProtection14\" */ },\n\t/*::[*/0x0450/*::]*/: { /* n:\"BrtRangeProtectionIso14\" */ },\n\t/*::[*/0x0451/*::]*/: { /* n:\"BrtCellIgnoreEC14\" */ },\n\t/*::[*/0x0457/*::]*/: { /* n:\"BrtList14\" */ },\n\t/*::[*/0x0458/*::]*/: { /* n:\"BrtCFIcon\" */ },\n\t/*::[*/0x0459/*::]*/: { /* n:\"BrtBeginSlicerCachesPivotCacheIDs\", */ T:1 },\n\t/*::[*/0x045A/*::]*/: { /* n:\"BrtEndSlicerCachesPivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x045B/*::]*/: { /* n:\"BrtBeginSlicers\", */ T:1 },\n\t/*::[*/0x045C/*::]*/: { /* n:\"BrtEndSlicers\", */ T:-1 },\n\t/*::[*/0x045D/*::]*/: { /* n:\"BrtWbProp14\" */ },\n\t/*::[*/0x045E/*::]*/: { /* n:\"BrtBeginSXEdit\", */ T:1 },\n\t/*::[*/0x045F/*::]*/: { /* n:\"BrtEndSXEdit\", */ T:-1 },\n\t/*::[*/0x0460/*::]*/: { /* n:\"BrtBeginSXEdits\", */ T:1 },\n\t/*::[*/0x0461/*::]*/: { /* n:\"BrtEndSXEdits\", */ T:-1 },\n\t/*::[*/0x0462/*::]*/: { /* n:\"BrtBeginSXChange\", */ T:1 },\n\t/*::[*/0x0463/*::]*/: { /* n:\"BrtEndSXChange\", */ T:-1 },\n\t/*::[*/0x0464/*::]*/: { /* n:\"BrtBeginSXChanges\", */ T:1 },\n\t/*::[*/0x0465/*::]*/: { /* n:\"BrtEndSXChanges\", */ T:-1 },\n\t/*::[*/0x0466/*::]*/: { /* n:\"BrtSXTupleItems\" */ },\n\t/*::[*/0x0468/*::]*/: { /* n:\"BrtBeginSlicerStyle\", */ T:1 },\n\t/*::[*/0x0469/*::]*/: { /* n:\"BrtEndSlicerStyle\", */ T:-1 },\n\t/*::[*/0x046A/*::]*/: { /* n:\"BrtSlicerStyleElement\" */ },\n\t/*::[*/0x046B/*::]*/: { /* n:\"BrtBeginStyleSheetExt14\", */ T:1 },\n\t/*::[*/0x046C/*::]*/: { /* n:\"BrtEndStyleSheetExt14\", */ T:-1 },\n\t/*::[*/0x046D/*::]*/: { /* n:\"BrtBeginSlicerCachesPivotCacheID\", */ T:1 },\n\t/*::[*/0x046E/*::]*/: { /* n:\"BrtEndSlicerCachesPivotCacheID\", */ T:-1 },\n\t/*::[*/0x046F/*::]*/: { /* n:\"BrtBeginConditionalFormattings\", */ T:1 },\n\t/*::[*/0x0470/*::]*/: { /* n:\"BrtEndConditionalFormattings\", */ T:-1 },\n\t/*::[*/0x0471/*::]*/: { /* n:\"BrtBeginPCDCalcMemExt\", */ T:1 },\n\t/*::[*/0x0472/*::]*/: { /* n:\"BrtEndPCDCalcMemExt\", */ T:-1 },\n\t/*::[*/0x0473/*::]*/: { /* n:\"BrtBeginPCDCalcMemsExt\", */ T:1 },\n\t/*::[*/0x0474/*::]*/: { /* n:\"BrtEndPCDCalcMemsExt\", */ T:-1 },\n\t/*::[*/0x0475/*::]*/: { /* n:\"BrtPCDField14\" */ },\n\t/*::[*/0x0476/*::]*/: { /* n:\"BrtBeginSlicerStyles\", */ T:1 },\n\t/*::[*/0x0477/*::]*/: { /* n:\"BrtEndSlicerStyles\", */ T:-1 },\n\t/*::[*/0x0478/*::]*/: { /* n:\"BrtBeginSlicerStyleElements\", */ T:1 },\n\t/*::[*/0x0479/*::]*/: { /* n:\"BrtEndSlicerStyleElements\", */ T:-1 },\n\t/*::[*/0x047A/*::]*/: { /* n:\"BrtCFRuleExt\" */ },\n\t/*::[*/0x047B/*::]*/: { /* n:\"BrtBeginSXCondFmt14\", */ T:1 },\n\t/*::[*/0x047C/*::]*/: { /* n:\"BrtEndSXCondFmt14\", */ T:-1 },\n\t/*::[*/0x047D/*::]*/: { /* n:\"BrtBeginSXCondFmts14\", */ T:1 },\n\t/*::[*/0x047E/*::]*/: { /* n:\"BrtEndSXCondFmts14\", */ T:-1 },\n\t/*::[*/0x0480/*::]*/: { /* n:\"BrtBeginSortCond14\", */ T:1 },\n\t/*::[*/0x0481/*::]*/: { /* n:\"BrtEndSortCond14\", */ T:-1 },\n\t/*::[*/0x0482/*::]*/: { /* n:\"BrtEndDVals14\", */ T:-1 },\n\t/*::[*/0x0483/*::]*/: { /* n:\"BrtEndIconSet14\", */ T:-1 },\n\t/*::[*/0x0484/*::]*/: { /* n:\"BrtEndDatabar14\", */ T:-1 },\n\t/*::[*/0x0485/*::]*/: { /* n:\"BrtBeginColorScale14\", */ T:1 },\n\t/*::[*/0x0486/*::]*/: { /* n:\"BrtEndColorScale14\", */ T:-1 },\n\t/*::[*/0x0487/*::]*/: { /* n:\"BrtBeginSxrules14\", */ T:1 },\n\t/*::[*/0x0488/*::]*/: { /* n:\"BrtEndSxrules14\", */ T:-1 },\n\t/*::[*/0x0489/*::]*/: { /* n:\"BrtBeginPRule14\", */ T:1 },\n\t/*::[*/0x048A/*::]*/: { /* n:\"BrtEndPRule14\", */ T:-1 },\n\t/*::[*/0x048B/*::]*/: { /* n:\"BrtBeginPRFilters14\", */ T:1 },\n\t/*::[*/0x048C/*::]*/: { /* n:\"BrtEndPRFilters14\", */ T:-1 },\n\t/*::[*/0x048D/*::]*/: { /* n:\"BrtBeginPRFilter14\", */ T:1 },\n\t/*::[*/0x048E/*::]*/: { /* n:\"BrtEndPRFilter14\", */ T:-1 },\n\t/*::[*/0x048F/*::]*/: { /* n:\"BrtBeginPRFItem14\", */ T:1 },\n\t/*::[*/0x0490/*::]*/: { /* n:\"BrtEndPRFItem14\", */ T:-1 },\n\t/*::[*/0x0491/*::]*/: { /* n:\"BrtBeginCellIgnoreECs14\", */ T:1 },\n\t/*::[*/0x0492/*::]*/: { /* n:\"BrtEndCellIgnoreECs14\", */ T:-1 },\n\t/*::[*/0x0493/*::]*/: { /* n:\"BrtDxf14\" */ },\n\t/*::[*/0x0494/*::]*/: { /* n:\"BrtBeginDxF14s\", */ T:1 },\n\t/*::[*/0x0495/*::]*/: { /* n:\"BrtEndDxf14s\", */ T:-1 },\n\t/*::[*/0x0499/*::]*/: { /* n:\"BrtFilter14\" */ },\n\t/*::[*/0x049A/*::]*/: { /* n:\"BrtBeginCustomFilters14\", */ T:1 },\n\t/*::[*/0x049C/*::]*/: { /* n:\"BrtCustomFilter14\" */ },\n\t/*::[*/0x049D/*::]*/: { /* n:\"BrtIconFilter14\" */ },\n\t/*::[*/0x049E/*::]*/: { /* n:\"BrtPivotCacheConnectionName\" */ },\n\t/*::[*/0x0800/*::]*/: { /* n:\"BrtBeginDecoupledPivotCacheIDs\", */ T:1 },\n\t/*::[*/0x0801/*::]*/: { /* n:\"BrtEndDecoupledPivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x0802/*::]*/: { /* n:\"BrtDecoupledPivotCacheID\" */ },\n\t/*::[*/0x0803/*::]*/: { /* n:\"BrtBeginPivotTableRefs\", */ T:1 },\n\t/*::[*/0x0804/*::]*/: { /* n:\"BrtEndPivotTableRefs\", */ T:-1 },\n\t/*::[*/0x0805/*::]*/: { /* n:\"BrtPivotTableRef\" */ },\n\t/*::[*/0x0806/*::]*/: { /* n:\"BrtSlicerCacheBookPivotTables\" */ },\n\t/*::[*/0x0807/*::]*/: { /* n:\"BrtBeginSxvcells\", */ T:1 },\n\t/*::[*/0x0808/*::]*/: { /* n:\"BrtEndSxvcells\", */ T:-1 },\n\t/*::[*/0x0809/*::]*/: { /* n:\"BrtBeginSxRow\", */ T:1 },\n\t/*::[*/0x080A/*::]*/: { /* n:\"BrtEndSxRow\", */ T:-1 },\n\t/*::[*/0x080C/*::]*/: { /* n:\"BrtPcdCalcMem15\" */ },\n\t/*::[*/0x0813/*::]*/: { /* n:\"BrtQsi15\" */ },\n\t/*::[*/0x0814/*::]*/: { /* n:\"BrtBeginWebExtensions\", */ T:1 },\n\t/*::[*/0x0815/*::]*/: { /* n:\"BrtEndWebExtensions\", */ T:-1 },\n\t/*::[*/0x0816/*::]*/: { /* n:\"BrtWebExtension\" */ },\n\t/*::[*/0x0817/*::]*/: { /* n:\"BrtAbsPath15\" */ },\n\t/*::[*/0x0818/*::]*/: { /* n:\"BrtBeginPivotTableUISettings\", */ T:1 },\n\t/*::[*/0x0819/*::]*/: { /* n:\"BrtEndPivotTableUISettings\", */ T:-1 },\n\t/*::[*/0x081B/*::]*/: { /* n:\"BrtTableSlicerCacheIDs\" */ },\n\t/*::[*/0x081C/*::]*/: { /* n:\"BrtTableSlicerCacheID\" */ },\n\t/*::[*/0x081D/*::]*/: { /* n:\"BrtBeginTableSlicerCache\", */ T:1 },\n\t/*::[*/0x081E/*::]*/: { /* n:\"BrtEndTableSlicerCache\", */ T:-1 },\n\t/*::[*/0x081F/*::]*/: { /* n:\"BrtSxFilter15\" */ },\n\t/*::[*/0x0820/*::]*/: { /* n:\"BrtBeginTimelineCachePivotCacheIDs\", */ T:1 },\n\t/*::[*/0x0821/*::]*/: { /* n:\"BrtEndTimelineCachePivotCacheIDs\", */ T:-1 },\n\t/*::[*/0x0822/*::]*/: { /* n:\"BrtTimelineCachePivotCacheID\" */ },\n\t/*::[*/0x0823/*::]*/: { /* n:\"BrtBeginTimelineCacheIDs\", */ T:1 },\n\t/*::[*/0x0824/*::]*/: { /* n:\"BrtEndTimelineCacheIDs\", */ T:-1 },\n\t/*::[*/0x0825/*::]*/: { /* n:\"BrtBeginTimelineCacheID\", */ T:1 },\n\t/*::[*/0x0826/*::]*/: { /* n:\"BrtEndTimelineCacheID\", */ T:-1 },\n\t/*::[*/0x0827/*::]*/: { /* n:\"BrtBeginTimelinesEx\", */ T:1 },\n\t/*::[*/0x0828/*::]*/: { /* n:\"BrtEndTimelinesEx\", */ T:-1 },\n\t/*::[*/0x0829/*::]*/: { /* n:\"BrtBeginTimelineEx\", */ T:1 },\n\t/*::[*/0x082A/*::]*/: { /* n:\"BrtEndTimelineEx\", */ T:-1 },\n\t/*::[*/0x082B/*::]*/: { /* n:\"BrtWorkBookPr15\" */ },\n\t/*::[*/0x082C/*::]*/: { /* n:\"BrtPCDH15\" */ },\n\t/*::[*/0x082D/*::]*/: { /* n:\"BrtBeginTimelineStyle\", */ T:1 },\n\t/*::[*/0x082E/*::]*/: { /* n:\"BrtEndTimelineStyle\", */ T:-1 },\n\t/*::[*/0x082F/*::]*/: { /* n:\"BrtTimelineStyleElement\" */ },\n\t/*::[*/0x0830/*::]*/: { /* n:\"BrtBeginTimelineStylesheetExt15\", */ T:1 },\n\t/*::[*/0x0831/*::]*/: { /* n:\"BrtEndTimelineStylesheetExt15\", */ T:-1 },\n\t/*::[*/0x0832/*::]*/: { /* n:\"BrtBeginTimelineStyles\", */ T:1 },\n\t/*::[*/0x0833/*::]*/: { /* n:\"BrtEndTimelineStyles\", */ T:-1 },\n\t/*::[*/0x0834/*::]*/: { /* n:\"BrtBeginTimelineStyleElements\", */ T:1 },\n\t/*::[*/0x0835/*::]*/: { /* n:\"BrtEndTimelineStyleElements\", */ T:-1 },\n\t/*::[*/0x0836/*::]*/: { /* n:\"BrtDxf15\" */ },\n\t/*::[*/0x0837/*::]*/: { /* n:\"BrtBeginDxfs15\", */ T:1 },\n\t/*::[*/0x0838/*::]*/: { /* n:\"BrtEndDxfs15\", */ T:-1 },\n\t/*::[*/0x0839/*::]*/: { /* n:\"BrtSlicerCacheHideItemsWithNoData\" */ },\n\t/*::[*/0x083A/*::]*/: { /* n:\"BrtBeginItemUniqueNames\", */ T:1 },\n\t/*::[*/0x083B/*::]*/: { /* n:\"BrtEndItemUniqueNames\", */ T:-1 },\n\t/*::[*/0x083C/*::]*/: { /* n:\"BrtItemUniqueName\" */ },\n\t/*::[*/0x083D/*::]*/: { /* n:\"BrtBeginExtConn15\", */ T:1 },\n\t/*::[*/0x083E/*::]*/: { /* n:\"BrtEndExtConn15\", */ T:-1 },\n\t/*::[*/0x083F/*::]*/: { /* n:\"BrtBeginOledbPr15\", */ T:1 },\n\t/*::[*/0x0840/*::]*/: { /* n:\"BrtEndOledbPr15\", */ T:-1 },\n\t/*::[*/0x0841/*::]*/: { /* n:\"BrtBeginDataFeedPr15\", */ T:1 },\n\t/*::[*/0x0842/*::]*/: { /* n:\"BrtEndDataFeedPr15\", */ T:-1 },\n\t/*::[*/0x0843/*::]*/: { /* n:\"BrtTextPr15\" */ },\n\t/*::[*/0x0844/*::]*/: { /* n:\"BrtRangePr15\" */ },\n\t/*::[*/0x0845/*::]*/: { /* n:\"BrtDbCommand15\" */ },\n\t/*::[*/0x0846/*::]*/: { /* n:\"BrtBeginDbTables15\", */ T:1 },\n\t/*::[*/0x0847/*::]*/: { /* n:\"BrtEndDbTables15\", */ T:-1 },\n\t/*::[*/0x0848/*::]*/: { /* n:\"BrtDbTable15\" */ },\n\t/*::[*/0x0849/*::]*/: { /* n:\"BrtBeginDataModel\", */ T:1 },\n\t/*::[*/0x084A/*::]*/: { /* n:\"BrtEndDataModel\", */ T:-1 },\n\t/*::[*/0x084B/*::]*/: { /* n:\"BrtBeginModelTables\", */ T:1 },\n\t/*::[*/0x084C/*::]*/: { /* n:\"BrtEndModelTables\", */ T:-1 },\n\t/*::[*/0x084D/*::]*/: { /* n:\"BrtModelTable\" */ },\n\t/*::[*/0x084E/*::]*/: { /* n:\"BrtBeginModelRelationships\", */ T:1 },\n\t/*::[*/0x084F/*::]*/: { /* n:\"BrtEndModelRelationships\", */ T:-1 },\n\t/*::[*/0x0850/*::]*/: { /* n:\"BrtModelRelationship\" */ },\n\t/*::[*/0x0851/*::]*/: { /* n:\"BrtBeginECTxtWiz15\", */ T:1 },\n\t/*::[*/0x0852/*::]*/: { /* n:\"BrtEndECTxtWiz15\", */ T:-1 },\n\t/*::[*/0x0853/*::]*/: { /* n:\"BrtBeginECTWFldInfoLst15\", */ T:1 },\n\t/*::[*/0x0854/*::]*/: { /* n:\"BrtEndECTWFldInfoLst15\", */ T:-1 },\n\t/*::[*/0x0855/*::]*/: { /* n:\"BrtBeginECTWFldInfo15\", */ T:1 },\n\t/*::[*/0x0856/*::]*/: { /* n:\"BrtFieldListActiveItem\" */ },\n\t/*::[*/0x0857/*::]*/: { /* n:\"BrtPivotCacheIdVersion\" */ },\n\t/*::[*/0x0858/*::]*/: { /* n:\"BrtSXDI15\" */ },\n\t/*::[*/0x0859/*::]*/: { /* n:\"BrtBeginModelTimeGroupings\", */ T:1 },\n\t/*::[*/0x085A/*::]*/: { /* n:\"BrtEndModelTimeGroupings\", */ T:-1 },\n\t/*::[*/0x085B/*::]*/: { /* n:\"BrtBeginModelTimeGrouping\", */ T:1 },\n\t/*::[*/0x085C/*::]*/: { /* n:\"BrtEndModelTimeGrouping\", */ T:-1 },\n\t/*::[*/0x085D/*::]*/: { /* n:\"BrtModelTimeGroupingCalcCol\" */ },\n\t/*::[*/0x0C00/*::]*/: { /* n:\"BrtUid\" */ },\n\t/*::[*/0x0C01/*::]*/: { /* n:\"BrtRevisionPtr\" */ },\n\t/*::[*/0x1000/*::]*/: { /* n:\"BrtBeginDynamicArrayPr\", */ T:1 },\n\t/*::[*/0x1001/*::]*/: { /* n:\"BrtEndDynamicArrayPr\", */ T:-1 },\n\t/*::[*/0x138A/*::]*/: { /* n:\"BrtBeginRichValueBlock\", */ T:1 },\n\t/*::[*/0x138B/*::]*/: { /* n:\"BrtEndRichValueBlock\", */ T:-1 },\n\t/*::[*/0x13D9/*::]*/: { /* n:\"BrtBeginRichFilters\", */ T:1 },\n\t/*::[*/0x13DA/*::]*/: { /* n:\"BrtEndRichFilters\", */ T:-1 },\n\t/*::[*/0x13DB/*::]*/: { /* n:\"BrtRichFilter\" */ },\n\t/*::[*/0x13DC/*::]*/: { /* n:\"BrtBeginRichFilterColumn\", */ T:1 },\n\t/*::[*/0x13DD/*::]*/: { /* n:\"BrtEndRichFilterColumn\", */ T:-1 },\n\t/*::[*/0x13DE/*::]*/: { /* n:\"BrtBeginCustomRichFilters\", */ T:1 },\n\t/*::[*/0x13DF/*::]*/: { /* n:\"BrtEndCustomRichFilters\", */ T:-1 },\n\t/*::[*/0x13E0/*::]*/: { /* n:\"BrtCustomRichFilter\" */ },\n\t/*::[*/0x13E1/*::]*/: { /* n:\"BrtTop10RichFilter\" */ },\n\t/*::[*/0x13E2/*::]*/: { /* n:\"BrtDynamicRichFilter\" */ },\n\t/*::[*/0x13E4/*::]*/: { /* n:\"BrtBeginRichSortCondition\", */ T:1 },\n\t/*::[*/0x13E5/*::]*/: { /* n:\"BrtEndRichSortCondition\", */ T:-1 },\n\t/*::[*/0x13E6/*::]*/: { /* n:\"BrtRichFilterDateGroupItem\" */ },\n\t/*::[*/0x13E7/*::]*/: { /* n:\"BrtBeginCalcFeatures\", */ T:1 },\n\t/*::[*/0x13E8/*::]*/: { /* n:\"BrtEndCalcFeatures\", */ T:-1 },\n\t/*::[*/0x13E9/*::]*/: { /* n:\"BrtCalcFeature\" */ },\n\t/*::[*/0x13EB/*::]*/: { /* n:\"BrtExternalLinksPr\" */ },\n\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n};\n\n/* [MS-XLS] 2.3 Record Enumeration (and other sources) */\nvar XLSRecordEnum = {\n\t/* [MS-XLS] 2.3 Record Enumeration 2021-08-17 */\n\t/*::[*/0x0006/*::]*/: { /* n:\"Formula\", */ f:parse_Formula },\n\t/*::[*/0x000a/*::]*/: { /* n:\"EOF\", */ f:parsenoop2 },\n\t/*::[*/0x000c/*::]*/: { /* n:\"CalcCount\", */ f:parseuint16 }, //\n\t/*::[*/0x000d/*::]*/: { /* n:\"CalcMode\", */ f:parseuint16 }, //\n\t/*::[*/0x000e/*::]*/: { /* n:\"CalcPrecision\", */ f:parsebool }, //\n\t/*::[*/0x000f/*::]*/: { /* n:\"CalcRefMode\", */ f:parsebool }, //\n\t/*::[*/0x0010/*::]*/: { /* n:\"CalcDelta\", */ f:parse_Xnum }, //\n\t/*::[*/0x0011/*::]*/: { /* n:\"CalcIter\", */ f:parsebool }, //\n\t/*::[*/0x0012/*::]*/: { /* n:\"Protect\", */ f:parsebool },\n\t/*::[*/0x0013/*::]*/: { /* n:\"Password\", */ f:parseuint16 },\n\t/*::[*/0x0014/*::]*/: { /* n:\"Header\", */ f:parse_XLHeaderFooter },\n\t/*::[*/0x0015/*::]*/: { /* n:\"Footer\", */ f:parse_XLHeaderFooter },\n\t/*::[*/0x0017/*::]*/: { /* n:\"ExternSheet\", */ f:parse_ExternSheet },\n\t/*::[*/0x0018/*::]*/: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t/*::[*/0x0019/*::]*/: { /* n:\"WinProtect\", */ f:parsebool },\n\t/*::[*/0x001a/*::]*/: { /* n:\"VerticalPageBreaks\", */ },\n\t/*::[*/0x001b/*::]*/: { /* n:\"HorizontalPageBreaks\", */ },\n\t/*::[*/0x001c/*::]*/: { /* n:\"Note\", */ f:parse_Note },\n\t/*::[*/0x001d/*::]*/: { /* n:\"Selection\", */ },\n\t/*::[*/0x0022/*::]*/: { /* n:\"Date1904\", */ f:parsebool },\n\t/*::[*/0x0023/*::]*/: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t/*::[*/0x0026/*::]*/: { /* n:\"LeftMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x0027/*::]*/: { /* n:\"RightMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x0028/*::]*/: { /* n:\"TopMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x0029/*::]*/: { /* n:\"BottomMargin\", */ f:parse_Xnum }, // *\n\t/*::[*/0x002a/*::]*/: { /* n:\"PrintRowCol\", */ f:parsebool },\n\t/*::[*/0x002b/*::]*/: { /* n:\"PrintGrid\", */ f:parsebool },\n\t/*::[*/0x002f/*::]*/: { /* n:\"FilePass\", */ f:parse_FilePass },\n\t/*::[*/0x0031/*::]*/: { /* n:\"Font\", */ f:parse_Font },\n\t/*::[*/0x0033/*::]*/: { /* n:\"PrintSize\", */ f:parseuint16 },\n\t/*::[*/0x003c/*::]*/: { /* n:\"Continue\", */ },\n\t/*::[*/0x003d/*::]*/: { /* n:\"Window1\", */ f:parse_Window1 },\n\t/*::[*/0x0040/*::]*/: { /* n:\"Backup\", */ f:parsebool },\n\t/*::[*/0x0041/*::]*/: { /* n:\"Pane\", */ f:parse_Pane },\n\t/*::[*/0x0042/*::]*/: { /* n:\"CodePage\", */ f:parseuint16 },\n\t/*::[*/0x004d/*::]*/: { /* n:\"Pls\", */ },\n\t/*::[*/0x0050/*::]*/: { /* n:\"DCon\", */ },\n\t/*::[*/0x0051/*::]*/: { /* n:\"DConRef\", */ },\n\t/*::[*/0x0052/*::]*/: { /* n:\"DConName\", */ },\n\t/*::[*/0x0055/*::]*/: { /* n:\"DefColWidth\", */ f:parseuint16 },\n\t/*::[*/0x0059/*::]*/: { /* n:\"XCT\", */ },\n\t/*::[*/0x005a/*::]*/: { /* n:\"CRN\", */ },\n\t/*::[*/0x005b/*::]*/: { /* n:\"FileSharing\", */ },\n\t/*::[*/0x005c/*::]*/: { /* n:\"WriteAccess\", */ f:parse_WriteAccess },\n\t/*::[*/0x005d/*::]*/: { /* n:\"Obj\", */ f:parse_Obj },\n\t/*::[*/0x005e/*::]*/: { /* n:\"Uncalced\", */ },\n\t/*::[*/0x005f/*::]*/: { /* n:\"CalcSaveRecalc\", */ f:parsebool }, //\n\t/*::[*/0x0060/*::]*/: { /* n:\"Template\", */ },\n\t/*::[*/0x0061/*::]*/: { /* n:\"Intl\", */ },\n\t/*::[*/0x0063/*::]*/: { /* n:\"ObjProtect\", */ f:parsebool },\n\t/*::[*/0x007d/*::]*/: { /* n:\"ColInfo\", */ f:parse_ColInfo },\n\t/*::[*/0x0080/*::]*/: { /* n:\"Guts\", */ f:parse_Guts },\n\t/*::[*/0x0081/*::]*/: { /* n:\"WsBool\", */ f:parse_WsBool },\n\t/*::[*/0x0082/*::]*/: { /* n:\"GridSet\", */ f:parseuint16 },\n\t/*::[*/0x0083/*::]*/: { /* n:\"HCenter\", */ f:parsebool },\n\t/*::[*/0x0084/*::]*/: { /* n:\"VCenter\", */ f:parsebool },\n\t/*::[*/0x0085/*::]*/: { /* n:\"BoundSheet8\", */ f:parse_BoundSheet8 },\n\t/*::[*/0x0086/*::]*/: { /* n:\"WriteProtect\", */ },\n\t/*::[*/0x008c/*::]*/: { /* n:\"Country\", */ f:parse_Country },\n\t/*::[*/0x008d/*::]*/: { /* n:\"HideObj\", */ f:parseuint16 },\n\t/*::[*/0x0090/*::]*/: { /* n:\"Sort\", */ },\n\t/*::[*/0x0092/*::]*/: { /* n:\"Palette\", */ f:parse_Palette },\n\t/*::[*/0x0097/*::]*/: { /* n:\"Sync\", */ },\n\t/*::[*/0x0098/*::]*/: { /* n:\"LPr\", */ },\n\t/*::[*/0x0099/*::]*/: { /* n:\"DxGCol\", */ },\n\t/*::[*/0x009a/*::]*/: { /* n:\"FnGroupName\", */ },\n\t/*::[*/0x009b/*::]*/: { /* n:\"FilterMode\", */ },\n\t/*::[*/0x009c/*::]*/: { /* n:\"BuiltInFnGroupCount\", */ f:parseuint16 },\n\t/*::[*/0x009d/*::]*/: { /* n:\"AutoFilterInfo\", */ },\n\t/*::[*/0x009e/*::]*/: { /* n:\"AutoFilter\", */ },\n\t/*::[*/0x00a0/*::]*/: { /* n:\"Scl\", */ f:parse_Scl },\n\t/*::[*/0x00a1/*::]*/: { /* n:\"Setup\", */ f:parse_Setup },\n\t/*::[*/0x00ae/*::]*/: { /* n:\"ScenMan\", */ },\n\t/*::[*/0x00af/*::]*/: { /* n:\"SCENARIO\", */ },\n\t/*::[*/0x00b0/*::]*/: { /* n:\"SxView\", */ },\n\t/*::[*/0x00b1/*::]*/: { /* n:\"Sxvd\", */ },\n\t/*::[*/0x00b2/*::]*/: { /* n:\"SXVI\", */ },\n\t/*::[*/0x00b4/*::]*/: { /* n:\"SxIvd\", */ },\n\t/*::[*/0x00b5/*::]*/: { /* n:\"SXLI\", */ },\n\t/*::[*/0x00b6/*::]*/: { /* n:\"SXPI\", */ },\n\t/*::[*/0x00b8/*::]*/: { /* n:\"DocRoute\", */ },\n\t/*::[*/0x00b9/*::]*/: { /* n:\"RecipName\", */ },\n\t/*::[*/0x00bd/*::]*/: { /* n:\"MulRk\", */ f:parse_MulRk },\n\t/*::[*/0x00be/*::]*/: { /* n:\"MulBlank\", */ f:parse_MulBlank },\n\t/*::[*/0x00c1/*::]*/: { /* n:\"Mms\", */ f:parsenoop2 },\n\t/*::[*/0x00c5/*::]*/: { /* n:\"SXDI\", */ },\n\t/*::[*/0x00c6/*::]*/: { /* n:\"SXDB\", */ },\n\t/*::[*/0x00c7/*::]*/: { /* n:\"SXFDB\", */ },\n\t/*::[*/0x00c8/*::]*/: { /* n:\"SXDBB\", */ },\n\t/*::[*/0x00c9/*::]*/: { /* n:\"SXNum\", */ },\n\t/*::[*/0x00ca/*::]*/: { /* n:\"SxBool\", */ f:parsebool },\n\t/*::[*/0x00cb/*::]*/: { /* n:\"SxErr\", */ },\n\t/*::[*/0x00cc/*::]*/: { /* n:\"SXInt\", */ },\n\t/*::[*/0x00cd/*::]*/: { /* n:\"SXString\", */ },\n\t/*::[*/0x00ce/*::]*/: { /* n:\"SXDtr\", */ },\n\t/*::[*/0x00cf/*::]*/: { /* n:\"SxNil\", */ },\n\t/*::[*/0x00d0/*::]*/: { /* n:\"SXTbl\", */ },\n\t/*::[*/0x00d1/*::]*/: { /* n:\"SXTBRGIITM\", */ },\n\t/*::[*/0x00d2/*::]*/: { /* n:\"SxTbpg\", */ },\n\t/*::[*/0x00d3/*::]*/: { /* n:\"ObProj\", */ },\n\t/*::[*/0x00d5/*::]*/: { /* n:\"SXStreamID\", */ },\n\t/*::[*/0x00d7/*::]*/: { /* n:\"DBCell\", */ },\n\t/*::[*/0x00d8/*::]*/: { /* n:\"SXRng\", */ },\n\t/*::[*/0x00d9/*::]*/: { /* n:\"SxIsxoper\", */ },\n\t/*::[*/0x00da/*::]*/: { /* n:\"BookBool\", */ f:parseuint16 },\n\t/*::[*/0x00dc/*::]*/: { /* n:\"DbOrParamQry\", */ },\n\t/*::[*/0x00dd/*::]*/: { /* n:\"ScenarioProtect\", */ f:parsebool },\n\t/*::[*/0x00de/*::]*/: { /* n:\"OleObjectSize\", */ },\n\t/*::[*/0x00e0/*::]*/: { /* n:\"XF\", */ f:parse_XF },\n\t/*::[*/0x00e1/*::]*/: { /* n:\"InterfaceHdr\", */ f:parse_InterfaceHdr },\n\t/*::[*/0x00e2/*::]*/: { /* n:\"InterfaceEnd\", */ f:parsenoop2 },\n\t/*::[*/0x00e3/*::]*/: { /* n:\"SXVS\", */ },\n\t/*::[*/0x00e5/*::]*/: { /* n:\"MergeCells\", */ f:parse_MergeCells },\n\t/*::[*/0x00e9/*::]*/: { /* n:\"BkHim\", */ },\n\t/*::[*/0x00eb/*::]*/: { /* n:\"MsoDrawingGroup\", */ },\n\t/*::[*/0x00ec/*::]*/: { /* n:\"MsoDrawing\", */ },\n\t/*::[*/0x00ed/*::]*/: { /* n:\"MsoDrawingSelection\", */ },\n\t/*::[*/0x00ef/*::]*/: { /* n:\"PhoneticInfo\", */ },\n\t/*::[*/0x00f0/*::]*/: { /* n:\"SxRule\", */ },\n\t/*::[*/0x00f1/*::]*/: { /* n:\"SXEx\", */ },\n\t/*::[*/0x00f2/*::]*/: { /* n:\"SxFilt\", */ },\n\t/*::[*/0x00f4/*::]*/: { /* n:\"SxDXF\", */ },\n\t/*::[*/0x00f5/*::]*/: { /* n:\"SxItm\", */ },\n\t/*::[*/0x00f6/*::]*/: { /* n:\"SxName\", */ },\n\t/*::[*/0x00f7/*::]*/: { /* n:\"SxSelect\", */ },\n\t/*::[*/0x00f8/*::]*/: { /* n:\"SXPair\", */ },\n\t/*::[*/0x00f9/*::]*/: { /* n:\"SxFmla\", */ },\n\t/*::[*/0x00fb/*::]*/: { /* n:\"SxFormat\", */ },\n\t/*::[*/0x00fc/*::]*/: { /* n:\"SST\", */ f:parse_SST },\n\t/*::[*/0x00fd/*::]*/: { /* n:\"LabelSst\", */ f:parse_LabelSst },\n\t/*::[*/0x00ff/*::]*/: { /* n:\"ExtSST\", */ f:parse_ExtSST },\n\t/*::[*/0x0100/*::]*/: { /* n:\"SXVDEx\", */ },\n\t/*::[*/0x0103/*::]*/: { /* n:\"SXFormula\", */ },\n\t/*::[*/0x0122/*::]*/: { /* n:\"SXDBEx\", */ },\n\t/*::[*/0x0137/*::]*/: { /* n:\"RRDInsDel\", */ },\n\t/*::[*/0x0138/*::]*/: { /* n:\"RRDHead\", */ },\n\t/*::[*/0x013b/*::]*/: { /* n:\"RRDChgCell\", */ },\n\t/*::[*/0x013d/*::]*/: { /* n:\"RRTabId\", */ f:parseuint16a },\n\t/*::[*/0x013e/*::]*/: { /* n:\"RRDRenSheet\", */ },\n\t/*::[*/0x013f/*::]*/: { /* n:\"RRSort\", */ },\n\t/*::[*/0x0140/*::]*/: { /* n:\"RRDMove\", */ },\n\t/*::[*/0x014a/*::]*/: { /* n:\"RRFormat\", */ },\n\t/*::[*/0x014b/*::]*/: { /* n:\"RRAutoFmt\", */ },\n\t/*::[*/0x014d/*::]*/: { /* n:\"RRInsertSh\", */ },\n\t/*::[*/0x014e/*::]*/: { /* n:\"RRDMoveBegin\", */ },\n\t/*::[*/0x014f/*::]*/: { /* n:\"RRDMoveEnd\", */ },\n\t/*::[*/0x0150/*::]*/: { /* n:\"RRDInsDelBegin\", */ },\n\t/*::[*/0x0151/*::]*/: { /* n:\"RRDInsDelEnd\", */ },\n\t/*::[*/0x0152/*::]*/: { /* n:\"RRDConflict\", */ },\n\t/*::[*/0x0153/*::]*/: { /* n:\"RRDDefName\", */ },\n\t/*::[*/0x0154/*::]*/: { /* n:\"RRDRstEtxp\", */ },\n\t/*::[*/0x015f/*::]*/: { /* n:\"LRng\", */ },\n\t/*::[*/0x0160/*::]*/: { /* n:\"UsesELFs\", */ f:parsebool },\n\t/*::[*/0x0161/*::]*/: { /* n:\"DSF\", */ f:parsenoop2 },\n\t/*::[*/0x0191/*::]*/: { /* n:\"CUsr\", */ },\n\t/*::[*/0x0192/*::]*/: { /* n:\"CbUsr\", */ },\n\t/*::[*/0x0193/*::]*/: { /* n:\"UsrInfo\", */ },\n\t/*::[*/0x0194/*::]*/: { /* n:\"UsrExcl\", */ },\n\t/*::[*/0x0195/*::]*/: { /* n:\"FileLock\", */ },\n\t/*::[*/0x0196/*::]*/: { /* n:\"RRDInfo\", */ },\n\t/*::[*/0x0197/*::]*/: { /* n:\"BCUsrs\", */ },\n\t/*::[*/0x0198/*::]*/: { /* n:\"UsrChk\", */ },\n\t/*::[*/0x01a9/*::]*/: { /* n:\"UserBView\", */ },\n\t/*::[*/0x01aa/*::]*/: { /* n:\"UserSViewBegin\", */ },\n\t/*::[*/0x01ab/*::]*/: { /* n:\"UserSViewEnd\", */ },\n\t/*::[*/0x01ac/*::]*/: { /* n:\"RRDUserView\", */ },\n\t/*::[*/0x01ad/*::]*/: { /* n:\"Qsi\", */ },\n\t/*::[*/0x01ae/*::]*/: { /* n:\"SupBook\", */ f:parse_SupBook },\n\t/*::[*/0x01af/*::]*/: { /* n:\"Prot4Rev\", */ f:parsebool },\n\t/*::[*/0x01b0/*::]*/: { /* n:\"CondFmt\", */ },\n\t/*::[*/0x01b1/*::]*/: { /* n:\"CF\", */ },\n\t/*::[*/0x01b2/*::]*/: { /* n:\"DVal\", */ },\n\t/*::[*/0x01b5/*::]*/: { /* n:\"DConBin\", */ },\n\t/*::[*/0x01b6/*::]*/: { /* n:\"TxO\", */ f:parse_TxO },\n\t/*::[*/0x01b7/*::]*/: { /* n:\"RefreshAll\", */ f:parsebool }, //\n\t/*::[*/0x01b8/*::]*/: { /* n:\"HLink\", */ f:parse_HLink },\n\t/*::[*/0x01b9/*::]*/: { /* n:\"Lel\", */ },\n\t/*::[*/0x01ba/*::]*/: { /* n:\"CodeName\", */ f:parse_XLUnicodeString },\n\t/*::[*/0x01bb/*::]*/: { /* n:\"SXFDBType\", */ },\n\t/*::[*/0x01bc/*::]*/: { /* n:\"Prot4RevPass\", */ f:parseuint16 },\n\t/*::[*/0x01bd/*::]*/: { /* n:\"ObNoMacros\", */ },\n\t/*::[*/0x01be/*::]*/: { /* n:\"Dv\", */ },\n\t/*::[*/0x01c0/*::]*/: { /* n:\"Excel9File\", */ f:parsenoop2 },\n\t/*::[*/0x01c1/*::]*/: { /* n:\"RecalcId\", */ f:parse_RecalcId, r:2},\n\t/*::[*/0x01c2/*::]*/: { /* n:\"EntExU2\", */ f:parsenoop2 },\n\t/*::[*/0x0200/*::]*/: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t/*::[*/0x0201/*::]*/: { /* n:\"Blank\", */ f:parse_Blank },\n\t/*::[*/0x0203/*::]*/: { /* n:\"Number\", */ f:parse_Number },\n\t/*::[*/0x0204/*::]*/: { /* n:\"Label\", */ f:parse_Label },\n\t/*::[*/0x0205/*::]*/: { /* n:\"BoolErr\", */ f:parse_BoolErr },\n\t/*::[*/0x0207/*::]*/: { /* n:\"String\", */ f:parse_String },\n\t/*::[*/0x0208/*::]*/: { /* n:\"Row\", */ f:parse_Row },\n\t/*::[*/0x020b/*::]*/: { /* n:\"Index\", */ },\n\t/*::[*/0x0221/*::]*/: { /* n:\"Array\", */ f:parse_Array },\n\t/*::[*/0x0225/*::]*/: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t/*::[*/0x0236/*::]*/: { /* n:\"Table\", */ },\n\t/*::[*/0x023e/*::]*/: { /* n:\"Window2\", */ f:parse_Window2 },\n\t/*::[*/0x027e/*::]*/: { /* n:\"RK\", */ f:parse_RK },\n\t/*::[*/0x0293/*::]*/: { /* n:\"Style\", */ },\n\t/*::[*/0x0418/*::]*/: { /* n:\"BigName\", */ },\n\t/*::[*/0x041e/*::]*/: { /* n:\"Format\", */ f:parse_Format },\n\t/*::[*/0x043c/*::]*/: { /* n:\"ContinueBigName\", */ },\n\t/*::[*/0x04bc/*::]*/: { /* n:\"ShrFmla\", */ f:parse_ShrFmla },\n\t/*::[*/0x0800/*::]*/: { /* n:\"HLinkTooltip\", */ f:parse_HLinkTooltip },\n\t/*::[*/0x0801/*::]*/: { /* n:\"WebPub\", */ },\n\t/*::[*/0x0802/*::]*/: { /* n:\"QsiSXTag\", */ },\n\t/*::[*/0x0803/*::]*/: { /* n:\"DBQueryExt\", */ },\n\t/*::[*/0x0804/*::]*/: { /* n:\"ExtString\", */ },\n\t/*::[*/0x0805/*::]*/: { /* n:\"TxtQry\", */ },\n\t/*::[*/0x0806/*::]*/: { /* n:\"Qsir\", */ },\n\t/*::[*/0x0807/*::]*/: { /* n:\"Qsif\", */ },\n\t/*::[*/0x0808/*::]*/: { /* n:\"RRDTQSIF\", */ },\n\t/*::[*/0x0809/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x080a/*::]*/: { /* n:\"OleDbConn\", */ },\n\t/*::[*/0x080b/*::]*/: { /* n:\"WOpt\", */ },\n\t/*::[*/0x080c/*::]*/: { /* n:\"SXViewEx\", */ },\n\t/*::[*/0x080d/*::]*/: { /* n:\"SXTH\", */ },\n\t/*::[*/0x080e/*::]*/: { /* n:\"SXPIEx\", */ },\n\t/*::[*/0x080f/*::]*/: { /* n:\"SXVDTEx\", */ },\n\t/*::[*/0x0810/*::]*/: { /* n:\"SXViewEx9\", */ },\n\t/*::[*/0x0812/*::]*/: { /* n:\"ContinueFrt\", */ },\n\t/*::[*/0x0813/*::]*/: { /* n:\"RealTimeData\", */ },\n\t/*::[*/0x0850/*::]*/: { /* n:\"ChartFrtInfo\", */ },\n\t/*::[*/0x0851/*::]*/: { /* n:\"FrtWrapper\", */ },\n\t/*::[*/0x0852/*::]*/: { /* n:\"StartBlock\", */ },\n\t/*::[*/0x0853/*::]*/: { /* n:\"EndBlock\", */ },\n\t/*::[*/0x0854/*::]*/: { /* n:\"StartObject\", */ },\n\t/*::[*/0x0855/*::]*/: { /* n:\"EndObject\", */ },\n\t/*::[*/0x0856/*::]*/: { /* n:\"CatLab\", */ },\n\t/*::[*/0x0857/*::]*/: { /* n:\"YMult\", */ },\n\t/*::[*/0x0858/*::]*/: { /* n:\"SXViewLink\", */ },\n\t/*::[*/0x0859/*::]*/: { /* n:\"PivotChartBits\", */ },\n\t/*::[*/0x085a/*::]*/: { /* n:\"FrtFontList\", */ },\n\t/*::[*/0x0862/*::]*/: { /* n:\"SheetExt\", */ },\n\t/*::[*/0x0863/*::]*/: { /* n:\"BookExt\", */ r:12},\n\t/*::[*/0x0864/*::]*/: { /* n:\"SXAddl\", */ },\n\t/*::[*/0x0865/*::]*/: { /* n:\"CrErr\", */ },\n\t/*::[*/0x0866/*::]*/: { /* n:\"HFPicture\", */ },\n\t/*::[*/0x0867/*::]*/: { /* n:\"FeatHdr\", */ f:parsenoop2 },\n\t/*::[*/0x0868/*::]*/: { /* n:\"Feat\", */ },\n\t/*::[*/0x086a/*::]*/: { /* n:\"DataLabExt\", */ },\n\t/*::[*/0x086b/*::]*/: { /* n:\"DataLabExtContents\", */ },\n\t/*::[*/0x086c/*::]*/: { /* n:\"CellWatch\", */ },\n\t/*::[*/0x0871/*::]*/: { /* n:\"FeatHdr11\", */ },\n\t/*::[*/0x0872/*::]*/: { /* n:\"Feature11\", */ },\n\t/*::[*/0x0874/*::]*/: { /* n:\"DropDownObjIds\", */ },\n\t/*::[*/0x0875/*::]*/: { /* n:\"ContinueFrt11\", */ },\n\t/*::[*/0x0876/*::]*/: { /* n:\"DConn\", */ },\n\t/*::[*/0x0877/*::]*/: { /* n:\"List12\", */ },\n\t/*::[*/0x0878/*::]*/: { /* n:\"Feature12\", */ },\n\t/*::[*/0x0879/*::]*/: { /* n:\"CondFmt12\", */ },\n\t/*::[*/0x087a/*::]*/: { /* n:\"CF12\", */ },\n\t/*::[*/0x087b/*::]*/: { /* n:\"CFEx\", */ },\n\t/*::[*/0x087c/*::]*/: { /* n:\"XFCRC\", */ f:parse_XFCRC, r:12 },\n\t/*::[*/0x087d/*::]*/: { /* n:\"XFExt\", */ f:parse_XFExt, r:12 },\n\t/*::[*/0x087e/*::]*/: { /* n:\"AutoFilter12\", */ },\n\t/*::[*/0x087f/*::]*/: { /* n:\"ContinueFrt12\", */ },\n\t/*::[*/0x0884/*::]*/: { /* n:\"MDTInfo\", */ },\n\t/*::[*/0x0885/*::]*/: { /* n:\"MDXStr\", */ },\n\t/*::[*/0x0886/*::]*/: { /* n:\"MDXTuple\", */ },\n\t/*::[*/0x0887/*::]*/: { /* n:\"MDXSet\", */ },\n\t/*::[*/0x0888/*::]*/: { /* n:\"MDXProp\", */ },\n\t/*::[*/0x0889/*::]*/: { /* n:\"MDXKPI\", */ },\n\t/*::[*/0x088a/*::]*/: { /* n:\"MDB\", */ },\n\t/*::[*/0x088b/*::]*/: { /* n:\"PLV\", */ },\n\t/*::[*/0x088c/*::]*/: { /* n:\"Compat12\", */ f:parsebool, r:12 },\n\t/*::[*/0x088d/*::]*/: { /* n:\"DXF\", */ },\n\t/*::[*/0x088e/*::]*/: { /* n:\"TableStyles\", */ r:12 },\n\t/*::[*/0x088f/*::]*/: { /* n:\"TableStyle\", */ },\n\t/*::[*/0x0890/*::]*/: { /* n:\"TableStyleElement\", */ },\n\t/*::[*/0x0892/*::]*/: { /* n:\"StyleExt\", */ },\n\t/*::[*/0x0893/*::]*/: { /* n:\"NamePublish\", */ },\n\t/*::[*/0x0894/*::]*/: { /* n:\"NameCmt\", */ f:parse_NameCmt, r:12 },\n\t/*::[*/0x0895/*::]*/: { /* n:\"SortData\", */ },\n\t/*::[*/0x0896/*::]*/: { /* n:\"Theme\", */ f:parse_Theme, r:12 },\n\t/*::[*/0x0897/*::]*/: { /* n:\"GUIDTypeLib\", */ },\n\t/*::[*/0x0898/*::]*/: { /* n:\"FnGrp12\", */ },\n\t/*::[*/0x0899/*::]*/: { /* n:\"NameFnGrp12\", */ },\n\t/*::[*/0x089a/*::]*/: { /* n:\"MTRSettings\", */ f:parse_MTRSettings, r:12 },\n\t/*::[*/0x089b/*::]*/: { /* n:\"CompressPictures\", */ f:parsenoop2 },\n\t/*::[*/0x089c/*::]*/: { /* n:\"HeaderFooter\", */ },\n\t/*::[*/0x089d/*::]*/: { /* n:\"CrtLayout12\", */ },\n\t/*::[*/0x089e/*::]*/: { /* n:\"CrtMlFrt\", */ },\n\t/*::[*/0x089f/*::]*/: { /* n:\"CrtMlFrtContinue\", */ },\n\t/*::[*/0x08a3/*::]*/: { /* n:\"ForceFullCalculation\", */ f:parse_ForceFullCalculation },\n\t/*::[*/0x08a4/*::]*/: { /* n:\"ShapePropsStream\", */ },\n\t/*::[*/0x08a5/*::]*/: { /* n:\"TextPropsStream\", */ },\n\t/*::[*/0x08a6/*::]*/: { /* n:\"RichTextStream\", */ },\n\t/*::[*/0x08a7/*::]*/: { /* n:\"CrtLayout12A\", */ },\n\t/*::[*/0x1001/*::]*/: { /* n:\"Units\", */ },\n\t/*::[*/0x1002/*::]*/: { /* n:\"Chart\", */ },\n\t/*::[*/0x1003/*::]*/: { /* n:\"Series\", */ },\n\t/*::[*/0x1006/*::]*/: { /* n:\"DataFormat\", */ },\n\t/*::[*/0x1007/*::]*/: { /* n:\"LineFormat\", */ },\n\t/*::[*/0x1009/*::]*/: { /* n:\"MarkerFormat\", */ },\n\t/*::[*/0x100a/*::]*/: { /* n:\"AreaFormat\", */ },\n\t/*::[*/0x100b/*::]*/: { /* n:\"PieFormat\", */ },\n\t/*::[*/0x100c/*::]*/: { /* n:\"AttachedLabel\", */ },\n\t/*::[*/0x100d/*::]*/: { /* n:\"SeriesText\", */ },\n\t/*::[*/0x1014/*::]*/: { /* n:\"ChartFormat\", */ },\n\t/*::[*/0x1015/*::]*/: { /* n:\"Legend\", */ },\n\t/*::[*/0x1016/*::]*/: { /* n:\"SeriesList\", */ },\n\t/*::[*/0x1017/*::]*/: { /* n:\"Bar\", */ },\n\t/*::[*/0x1018/*::]*/: { /* n:\"Line\", */ },\n\t/*::[*/0x1019/*::]*/: { /* n:\"Pie\", */ },\n\t/*::[*/0x101a/*::]*/: { /* n:\"Area\", */ },\n\t/*::[*/0x101b/*::]*/: { /* n:\"Scatter\", */ },\n\t/*::[*/0x101c/*::]*/: { /* n:\"CrtLine\", */ },\n\t/*::[*/0x101d/*::]*/: { /* n:\"Axis\", */ },\n\t/*::[*/0x101e/*::]*/: { /* n:\"Tick\", */ },\n\t/*::[*/0x101f/*::]*/: { /* n:\"ValueRange\", */ },\n\t/*::[*/0x1020/*::]*/: { /* n:\"CatSerRange\", */ },\n\t/*::[*/0x1021/*::]*/: { /* n:\"AxisLine\", */ },\n\t/*::[*/0x1022/*::]*/: { /* n:\"CrtLink\", */ },\n\t/*::[*/0x1024/*::]*/: { /* n:\"DefaultText\", */ },\n\t/*::[*/0x1025/*::]*/: { /* n:\"Text\", */ },\n\t/*::[*/0x1026/*::]*/: { /* n:\"FontX\", */ f:parseuint16 },\n\t/*::[*/0x1027/*::]*/: { /* n:\"ObjectLink\", */ },\n\t/*::[*/0x1032/*::]*/: { /* n:\"Frame\", */ },\n\t/*::[*/0x1033/*::]*/: { /* n:\"Begin\", */ },\n\t/*::[*/0x1034/*::]*/: { /* n:\"End\", */ },\n\t/*::[*/0x1035/*::]*/: { /* n:\"PlotArea\", */ },\n\t/*::[*/0x103a/*::]*/: { /* n:\"Chart3d\", */ },\n\t/*::[*/0x103c/*::]*/: { /* n:\"PicF\", */ },\n\t/*::[*/0x103d/*::]*/: { /* n:\"DropBar\", */ },\n\t/*::[*/0x103e/*::]*/: { /* n:\"Radar\", */ },\n\t/*::[*/0x103f/*::]*/: { /* n:\"Surf\", */ },\n\t/*::[*/0x1040/*::]*/: { /* n:\"RadarArea\", */ },\n\t/*::[*/0x1041/*::]*/: { /* n:\"AxisParent\", */ },\n\t/*::[*/0x1043/*::]*/: { /* n:\"LegendException\", */ },\n\t/*::[*/0x1044/*::]*/: { /* n:\"ShtProps\", */ f:parse_ShtProps },\n\t/*::[*/0x1045/*::]*/: { /* n:\"SerToCrt\", */ },\n\t/*::[*/0x1046/*::]*/: { /* n:\"AxesUsed\", */ },\n\t/*::[*/0x1048/*::]*/: { /* n:\"SBaseRef\", */ },\n\t/*::[*/0x104a/*::]*/: { /* n:\"SerParent\", */ },\n\t/*::[*/0x104b/*::]*/: { /* n:\"SerAuxTrend\", */ },\n\t/*::[*/0x104e/*::]*/: { /* n:\"IFmtRecord\", */ },\n\t/*::[*/0x104f/*::]*/: { /* n:\"Pos\", */ },\n\t/*::[*/0x1050/*::]*/: { /* n:\"AlRuns\", */ },\n\t/*::[*/0x1051/*::]*/: { /* n:\"BRAI\", */ },\n\t/*::[*/0x105b/*::]*/: { /* n:\"SerAuxErrBar\", */ },\n\t/*::[*/0x105c/*::]*/: { /* n:\"ClrtClient\", */ f:parse_ClrtClient },\n\t/*::[*/0x105d/*::]*/: { /* n:\"SerFmt\", */ },\n\t/*::[*/0x105f/*::]*/: { /* n:\"Chart3DBarShape\", */ },\n\t/*::[*/0x1060/*::]*/: { /* n:\"Fbi\", */ },\n\t/*::[*/0x1061/*::]*/: { /* n:\"BopPop\", */ },\n\t/*::[*/0x1062/*::]*/: { /* n:\"AxcExt\", */ },\n\t/*::[*/0x1063/*::]*/: { /* n:\"Dat\", */ },\n\t/*::[*/0x1064/*::]*/: { /* n:\"PlotGrowth\", */ },\n\t/*::[*/0x1065/*::]*/: { /* n:\"SIIndex\", */ },\n\t/*::[*/0x1066/*::]*/: { /* n:\"GelFrame\", */ },\n\t/*::[*/0x1067/*::]*/: { /* n:\"BopPopCustom\", */ },\n\t/*::[*/0x1068/*::]*/: { /* n:\"Fbi2\", */ },\n\n\t/*::[*/0x0000/*::]*/: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t/*::[*/0x0001/*::]*/: { /* n:\"BIFF2BLANK\", */ },\n\t/*::[*/0x0002/*::]*/: { /* n:\"BIFF2INT\", */ f:parse_BIFF2INT },\n\t/*::[*/0x0003/*::]*/: { /* n:\"BIFF2NUM\", */ f:parse_BIFF2NUM },\n\t/*::[*/0x0004/*::]*/: { /* n:\"BIFF2STR\", */ f:parse_BIFF2STR },\n\t/*::[*/0x0005/*::]*/: { /* n:\"BoolErr\", */ f:parse_BoolErr },\n\t/*::[*/0x0007/*::]*/: { /* n:\"String\", */ f:parse_BIFF2STRING },\n\t/*::[*/0x0008/*::]*/: { /* n:\"BIFF2ROW\", */ },\n\t/*::[*/0x0009/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x000b/*::]*/: { /* n:\"Index\", */ },\n\t/*::[*/0x0016/*::]*/: { /* n:\"ExternCount\", */ f:parseuint16 },\n\t/*::[*/0x001e/*::]*/: { /* n:\"BIFF2FORMAT\", */ f:parse_BIFF2Format },\n\t/*::[*/0x001f/*::]*/: { /* n:\"BIFF2FMTCNT\", */ }, /* 16-bit cnt of BIFF2FORMAT records */\n\t/*::[*/0x0020/*::]*/: { /* n:\"BIFF2COLINFO\", */ },\n\t/*::[*/0x0021/*::]*/: { /* n:\"Array\", */ f:parse_Array },\n\t/*::[*/0x0024/*::]*/: { /* n:\"COLWIDTH\", */ },\n\t/*::[*/0x0025/*::]*/: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t// 0x2c ??\n\t// 0x2d ??\n\t// 0x2e ??\n\t// 0x30 FONTCOUNT: number of fonts\n\t/*::[*/0x0032/*::]*/: { /* n:\"BIFF2FONTXTRA\", */ f:parse_BIFF2FONTXTRA },\n\t// 0x35: INFOOPTS\n\t// 0x36: TABLE (BIFF2 only)\n\t// 0x37: TABLE2 (BIFF2 only)\n\t// 0x38: WNDESK\n\t// 0x39 ??\n\t// 0x3a: BEGINPREF\n\t// 0x3b: ENDPREF\n\t/*::[*/0x003e/*::]*/: { /* n:\"BIFF2WINDOW2\", */ },\n\t// 0x3f ??\n\t// 0x46: SHOWSCROLL\n\t// 0x47: SHOWFORMULA\n\t// 0x48: STATUSBAR\n\t// 0x49: SHORTMENUS\n\t// 0x4A:\n\t// 0x4B:\n\t// 0x4C:\n\t// 0x4E:\n\t// 0x4F:\n\t// 0x58: TOOLBAR (BIFF3)\n\n\t/* - - - */\n\t/*::[*/0x0034/*::]*/: { /* n:\"DDEObjName\", */ },\n\t/*::[*/0x0043/*::]*/: { /* n:\"BIFF2XF\", */ },\n\t/*::[*/0x0044/*::]*/: { /* n:\"BIFF2XFINDEX\", */ f:parseuint16 },\n\t/*::[*/0x0045/*::]*/: { /* n:\"BIFF2FONTCLR\", */ },\n\t/*::[*/0x0056/*::]*/: { /* n:\"BIFF4FMTCNT\", */ }, /* 16-bit cnt, similar to BIFF2 */\n\t/*::[*/0x007e/*::]*/: { /* n:\"RK\", */ }, /* Not necessarily same as 0x027e */\n\t/*::[*/0x007f/*::]*/: { /* n:\"ImData\", */ f:parse_ImData },\n\t/*::[*/0x0087/*::]*/: { /* n:\"Addin\", */ },\n\t/*::[*/0x0088/*::]*/: { /* n:\"Edg\", */ },\n\t/*::[*/0x0089/*::]*/: { /* n:\"Pub\", */ },\n\t// 0x8A\n\t// 0x8B LH: alternate menu key flag (BIFF3/4)\n\t// 0x8E\n\t// 0x8F\n\t/*::[*/0x0091/*::]*/: { /* n:\"Sub\", */ },\n\t// 0x93 STYLE\n\t/*::[*/0x0094/*::]*/: { /* n:\"LHRecord\", */ },\n\t/*::[*/0x0095/*::]*/: { /* n:\"LHNGraph\", */ },\n\t/*::[*/0x0096/*::]*/: { /* n:\"Sound\", */ },\n\t// 0xA2 FNPROTO: function prototypes (BIFF4)\n\t// 0xA3\n\t// 0xA8\n\t/*::[*/0x00a9/*::]*/: { /* n:\"CoordList\", */ },\n\t/*::[*/0x00ab/*::]*/: { /* n:\"GCW\", */ },\n\t/*::[*/0x00bc/*::]*/: { /* n:\"ShrFmla\", */ }, /* Not necessarily same as 0x04bc */\n\t/*::[*/0x00bf/*::]*/: { /* n:\"ToolbarHdr\", */ },\n\t/*::[*/0x00c0/*::]*/: { /* n:\"ToolbarEnd\", */ },\n\t/*::[*/0x00c2/*::]*/: { /* n:\"AddMenu\", */ },\n\t/*::[*/0x00c3/*::]*/: { /* n:\"DelMenu\", */ },\n\t/*::[*/0x00d6/*::]*/: { /* n:\"RString\", */ f:parse_RString },\n\t/*::[*/0x00df/*::]*/: { /* n:\"UDDesc\", */ },\n\t/*::[*/0x00ea/*::]*/: { /* n:\"TabIdConf\", */ },\n\t/*::[*/0x0162/*::]*/: { /* n:\"XL5Modify\", */ },\n\t/*::[*/0x01a5/*::]*/: { /* n:\"FileSharing2\", */ },\n\t/*::[*/0x0206/*::]*/: { /* n:\"Formula\", */ f:parse_Formula },\n\t/*::[*/0x0209/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x0218/*::]*/: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t/*::[*/0x0223/*::]*/: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t/*::[*/0x0231/*::]*/: { /* n:\"Font\", */ },\n\t/*::[*/0x0243/*::]*/: { /* n:\"BIFF3XF\", */ },\n\t/*::[*/0x0406/*::]*/: { /* n:\"Formula\", */ f:parse_Formula },\n\t/*::[*/0x0409/*::]*/: { /* n:\"BOF\", */ f:parse_BOF },\n\t/*::[*/0x0443/*::]*/: { /* n:\"BIFF4XF\", */ },\n\t/*::[*/0x086d/*::]*/: { /* n:\"FeatInfo\", */ },\n\t/*::[*/0x0873/*::]*/: { /* n:\"FeatInfo11\", */ },\n\t/*::[*/0x0881/*::]*/: { /* n:\"SXAddl12\", */ },\n\t/*::[*/0x08c0/*::]*/: { /* n:\"AutoWebPub\", */ },\n\t/*::[*/0x08c1/*::]*/: { /* n:\"ListObj\", */ },\n\t/*::[*/0x08c2/*::]*/: { /* n:\"ListField\", */ },\n\t/*::[*/0x08c3/*::]*/: { /* n:\"ListDV\", */ },\n\t/*::[*/0x08c4/*::]*/: { /* n:\"ListCondFmt\", */ },\n\t/*::[*/0x08c5/*::]*/: { /* n:\"ListCF\", */ },\n\t/*::[*/0x08c6/*::]*/: { /* n:\"FMQry\", */ },\n\t/*::[*/0x08c7/*::]*/: { /* n:\"FMSQry\", */ },\n\t/*::[*/0x08c8/*::]*/: { /* n:\"PLV\", */ },\n\t/*::[*/0x08c9/*::]*/: { /* n:\"LnExt\", */ },\n\t/*::[*/0x08ca/*::]*/: { /* n:\"MkrExt\", */ },\n\t/*::[*/0x08cb/*::]*/: { /* n:\"CrtCoopt\", */ },\n\t/*::[*/0x08d6/*::]*/: { /* n:\"FRTArchId$\", */ r:12 },\n\n\t/* --- multiplan 4 records --- */\n\t/*::[*/0x0065/*::]*/: { /* n:\"\", */ }, // one per window\n\t/*::[*/0x0066/*::]*/: { /* n:\"\", */ }, // calc settings\n\t/*::[*/0x0069/*::]*/: { /* n:\"\", */ }, // print header\n\t/*::[*/0x006a/*::]*/: { /* n:\"\", */ }, // print footer\n\t/*::[*/0x006b/*::]*/: { /* n:\"\", */ }, // print settings\n\t/*::[*/0x006d/*::]*/: { /* n:\"\", */ }, // one per window\n\t/*::[*/0x0070/*::]*/: { /* n:\"\", */ }, // includes default col width\n\t/*::[*/0x0072/*::]*/: { /* n:\"\", */ }, // includes selected cell\n\n\t/*::[*/0x7262/*::]*/: {}\n};\n\nfunction write_biff_rec(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar t/*:number*/ = type;\n\tif(isNaN(t)) return;\n\tvar len = length || (payload||[]).length || 0;\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, len);\n\tif(/*:: len != null &&*/len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar len = length || (payload||[]).length || 0;\n\tif(len <= 8224) return write_biff_rec(ba, type, payload, len);\n\tvar t = type;\n\tif(isNaN(t)) return;\n\tvar parts = payload.parts || [], sidx = 0;\n\tvar i = 0, w = 0;\n\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, w);\n\tba.push(payload.slice(i, i + w));\n\ti += w;\n\twhile(i < len) {\n\t\to = ba.next(4);\n\t\to.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\t\tw = 0;\n\t\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\t\to.write_shift(2, w);\n\t\tba.push(payload.slice(i, i+w)); i+= w;\n\t}\n}\n\nfunction write_BIFF2Cell(out, r/*:number*/, c/*:number*/) {\n\tif(!out) out = new_buf(7);\n\tout.write_shift(2, r);\n\tout.write_shift(2, c);\n\tout.write_shift(2, 0);\n\tout.write_shift(1, 0);\n\treturn out;\n}\n\nfunction write_BIFF2BERR(r/*:number*/, c/*:number*/, val, t/*:?string*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\twrite_Bes(val, t || 'b', out);\n\treturn out;\n}\n\n/* TODO: codepage, large strings */\nfunction write_BIFF2LABEL(r/*:number*/, c/*:number*/, val) {\n\tvar out = new_buf(8 + 2*val.length);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(1, val.length);\n\tout.write_shift(val.length, val, 'sbcs');\n\treturn out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*//*::, opts*/) {\n\tif(cell.v != null) switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n\t\t\tif((v == (v|0)) && (v >= 0) && (v < 65536))\n\t\t\t\twrite_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));\n\t\t\telse\n\t\t\t\twrite_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v));\n\t\t\treturn;\n\t\tcase 'b': case 'e': write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\twrite_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, cell.v == null ? \"\" : String(cell.v).slice(0,255)));\n\t\t\treturn;\n\t}\n\twrite_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba/*:BufArray*/, ws/*:Worksheet*/, idx/*:number*/, opts/*::, wb:Workbook*/) {\n\tvar dense = ws[\"!data\"] != null;\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref/*:string*/, rr = \"\", cols/*:Array*/ = [];\n\tif(range.e.c > 0xFF || range.e.r > 0x3FFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, 0x3FFF);\n\t}\n\tvar row = [];\n\tfor(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tif(dense) row = ws[\"!data\"][R] || [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar cell = dense ? row[C] : ws[cols[C] + rr];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff2_cell(ba, cell, R, C, opts);\n\t\t}\n\t}\n}\n\n/* Based on test files */\nfunction write_biff2_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tvar ba = buf_array();\n\tvar idx = 0;\n\tfor(var i=0;i*/ = [];\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\");\n\tvar MAX_ROWS = b8 ? 65536 : 16384;\n\tif(range.e.c > 0xFF || range.e.r >= MAX_ROWS) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, MAX_ROWS-1);\n\t}\n\n\twrite_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n\t/* [Uncalced] Index */\n\twrite_biff_rec(ba, 0x000d /* CalcMode */, writeuint16(1));\n\twrite_biff_rec(ba, 0x000c /* CalcCount */, writeuint16(100));\n\twrite_biff_rec(ba, 0x000f /* CalcRefMode */, writebool(true));\n\twrite_biff_rec(ba, 0x0011 /* CalcIter */, writebool(false));\n\twrite_biff_rec(ba, 0x0010 /* CalcDelta */, write_Xnum(0.001));\n\twrite_biff_rec(ba, 0x005f /* CalcSaveRecalc */, writebool(true));\n\twrite_biff_rec(ba, 0x002a /* PrintRowCol */, writebool(false));\n\twrite_biff_rec(ba, 0x002b /* PrintGrid */, writebool(false));\n\twrite_biff_rec(ba, 0x0082 /* GridSet */, writeuint16(1));\n\twrite_biff_rec(ba, 0x0080 /* Guts */, write_Guts([0,0]));\n\t/* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\t/* Header (string) */\n\t/* Footer (string) */\n\twrite_biff_rec(ba, 0x0083 /* HCenter */, writebool(false));\n\twrite_biff_rec(ba, 0x0084 /* VCenter */, writebool(false));\n\t/* ... */\n\tif(b8) write_ws_cols_biff8(ba, ws[\"!cols\"]);\n\t/* ... */\n\twrite_biff_rec(ba, 0x0200 /* Dimensions */, write_Dimensions(range, opts));\n\t/* ... */\n\n\tif(b8) ws['!links'] = [];\n\tvar comments = [];\n\tvar row = [];\n\tfor(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tif(dense) row = ws[\"!data\"][R] || [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? row[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff8_cell(ba, cell, R, C, opts);\n\t\t\tif(b8 && cell.l) ws['!links'].push([ref, cell.l]);\n\t\t\tif(b8 && cell.c) comments.push([ref, cell.c]);\n\t\t}\n\t}\n\tvar cname/*:string*/ = _sheet.CodeName || _sheet.name || s;\n\t/* ... */\n\t// if(b8) comments.forEach(function(comment) { write_biff_rec(ba, 0x001c /* Note */, write_NoteSh(comment)); });\n\t/* ... */\n\tif(b8) write_biff_rec(ba, 0x023e /* Window2 */, write_Window2((_WB.Views||[])[0]));\n\t/* ... */\n\tif(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, 0x00e5 /* MergeCells */, write_MergeCells(ws['!merges']));\n\t/* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\tif(b8) write_ws_biff8_hlinks(ba, ws);\n\t/* [DVAL] */\n\twrite_biff_rec(ba, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t/* *WebPub *CellWatch [SheetExt] */\n\tif(b8) write_FEAT(ba, ws);\n\t/* *FEAT11 *RECORD12 */\n\twrite_biff_rec(ba, 0x000a /* EOF */);\n\treturn ba.end();\n}\n\n/* [MS-XLS] 2.1.7.20.3 */\nfunction write_biff8_global(wb/*:Workbook*/, bufs, opts/*:WriteOpts*/) {\n\tvar A = buf_array();\n\tvar _WB/*:WBWBProps*/ = ((wb||{}).Workbook||{}/*:any*/);\n\tvar _sheets/*:Array*/ = (_WB.Sheets||[]);\n\tvar _wb/*:WBProps*/ = /*::((*/_WB.WBProps||{/*::CodeName:\"ThisWorkbook\"*/}/*:: ):any)*/;\n\tvar b8 = opts.biff == 8, b5 = opts.biff == 5;\n\twrite_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n\tif(opts.bookType == \"xla\") write_biff_rec(A, 0x0087 /* Addin */);\n\twrite_biff_rec(A, 0x00e1 /* InterfaceHdr */, b8 ? writeuint16(0x04b0) : null);\n\twrite_biff_rec(A, 0x00c1 /* Mms */, writezeroes(2));\n\tif(b5) write_biff_rec(A, 0x00bf /* ToolbarHdr */);\n\tif(b5) write_biff_rec(A, 0x00c0 /* ToolbarEnd */);\n\twrite_biff_rec(A, 0x00e2 /* InterfaceEnd */);\n\twrite_biff_rec(A, 0x005c /* WriteAccess */, write_WriteAccess(\"SheetJS\", opts));\n\t/* [FileSharing] */\n\twrite_biff_rec(A, 0x0042 /* CodePage */, writeuint16(b8 ? 0x04b0 : 0x04E4));\n\t/* *2047 Lel */\n\tif(b8) write_biff_rec(A, 0x0161 /* DSF */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01c0 /* Excel9File */);\n\twrite_biff_rec(A, 0x013d /* RRTabId */, write_RRTabId(wb.SheetNames.length));\n\tif(b8 && wb.vbaraw) write_biff_rec(A, 0x00d3 /* ObProj */);\n\t/* [ObNoMacros] */\n\tif(b8 && wb.vbaraw) {\n\t\tvar cname/*:string*/ = _wb.CodeName || \"ThisWorkbook\";\n\t\twrite_biff_rec(A, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t}\n\twrite_biff_rec(A, 0x009c /* BuiltInFnGroupCount */, writeuint16(0x11));\n\t/* *FnGroupName *FnGrp12 */\n\t/* *Lbl */\n\t/* [OleObjectSize] */\n\twrite_biff_rec(A, 0x0019 /* WinProtect */, writebool(false));\n\twrite_biff_rec(A, 0x0012 /* Protect */, writebool(false));\n\twrite_biff_rec(A, 0x0013 /* Password */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01af /* Prot4Rev */, writebool(false));\n\tif(b8) write_biff_rec(A, 0x01bc /* Prot4RevPass */, writeuint16(0));\n\twrite_biff_rec(A, 0x003d /* Window1 */, write_Window1(opts));\n\twrite_biff_rec(A, 0x0040 /* Backup */, writebool(false));\n\twrite_biff_rec(A, 0x008d /* HideObj */, writeuint16(0));\n\twrite_biff_rec(A, 0x0022 /* Date1904 */, writebool(safe1904(wb)==\"true\"));\n\twrite_biff_rec(A, 0x000e /* CalcPrecision */, writebool(true));\n\tif(b8) write_biff_rec(A, 0x01b7 /* RefreshAll */, writebool(false));\n\twrite_biff_rec(A, 0x00DA /* BookBool */, writeuint16(0));\n\t/* ... */\n\twrite_FONTS_biff8(A, wb, opts);\n\twrite_FMTS_biff8(A, wb.SSF, opts);\n\twrite_CELLXFS_biff8(A, opts);\n\t/* ... */\n\tif(b8) write_biff_rec(A, 0x0160 /* UsesELFs */, writebool(false));\n\tvar a = A.end();\n\n\tvar C = buf_array();\n\t/* METADATA [MTRSettings] [ForceFullCalculation] */\n\tif(b8) write_biff_rec(C, 0x008C /* Country */, write_Country());\n\t/* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */\n\n\t/* BIFF8: [SST *Continue] ExtSST */\n\tif(b8 && opts.Strings) write_biff_continue(C, 0x00FC /* SST */, write_SST(opts.Strings, opts));\n\n\t/* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\twrite_biff_rec(C, 0x000A /* EOF */);\n\tvar c = C.end();\n\n\tvar B = buf_array();\n\tvar blen = 0, j = 0;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n\tvar start = a.length + blen + c.length;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) {\n\t\tvar _sheet/*:WBWSProp*/ = _sheets[j] || ({}/*:any*/);\n\t\twrite_biff_rec(B, 0x0085 /* BoundSheet8 */, write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));\n\t\tstart += bufs[j].length;\n\t}\n\t/* 1*BoundSheet8 */\n\tvar b = B.end();\n\tif(blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n\n\tvar out = [];\n\tif(a.length) out.push(a);\n\tif(b.length) out.push(b);\n\tif(c.length) out.push(c);\n\treturn bconcat(out);\n}\n\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\nfunction write_biff8_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tvar bufs = [];\n\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\to.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;\n\t\to.ssf = wb.SSF;\n\t}\n\n\to.Strings = /*::((*/[]/*:: :any):SST)*/; o.Strings.Count = 0; o.Strings.Unique = 0;\n\tfix_write_opts(o);\n\n\to.cellXfs = [];\n\tget_cell_style(o.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);\n\tbufs.unshift(write_biff8_global(wb, bufs, o));\n\treturn bconcat(bufs);\n}\n\nfunction write_biff_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tfor(var i = 0; i <= wb.SheetNames.length; ++i) {\n\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\tif(range.e.c > 255) { // note: 255 is IV\n\t\t\tif(typeof console != \"undefined\" && console.error) console.error(\"Worksheet '\" + wb.SheetNames[i] + \"' extends beyond column IV (255). Data may be lost.\");\n\t\t}\n\t}\n\n\tvar o = opts || {};\n\tswitch(o.biff || 2) {\n\t\tcase 8: case 5: return write_biff8_buf(wb, opts);\n\t\tcase 4: case 3: case 2: return write_biff2_buf(wb, opts);\n\t}\n\tthrow new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\nfunction html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tvar dense = (opts.dense != null) ? opts.dense : DENSE;\n\tvar ws/*:Worksheet*/ = ({}/*:any*/); if(dense) ws[\"!data\"] = [];\n\tstr = str.replace(//g, \"\");\n\tvar mtch/*:any*/ = str.match(/\");\n\tvar mtch2/*:any*/ = str.match(/<\\/table/i);\n\tvar i/*:number*/ = mtch.index, j/*:number*/ = mtch2 && mtch2.index || str.length;\n\tvar rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"\");\n\tvar R = -1, C = 0, RS = 0, CS = 0;\n\tvar range/*:Range*/ = {s:{r:10000000, c:10000000},e:{r:0,c:0}};\n\tvar merges/*:Array*/ = [];\n\tfor(i = 0; i < rows.length; ++i) {\n\t\tvar row = rows[i].trim();\n\t\tvar hd = row.slice(0,3).toLowerCase();\n\t\tif(hd == \"/i);\n\t\tfor(j = 0; j < cells.length; ++j) {\n\t\t\tvar cell = cells[j].trim();\n\t\t\tif(!cell.match(/\")) > -1) m = m.slice(cc+1);\n\t\t\tfor(var midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar _merge/*:Range*/ = merges[midx];\n\t\t\t\tif(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; }\n\t\t\t}\n\t\t\tvar tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n\t\t\tCS = tag.colspan ? +tag.colspan : 1;\n\t\t\tif((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\tvar _t/*:string*/ = tag.t || tag[\"data-t\"] || \"\";\n\t\t\t/* TODO: generate stub cells */\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tm = htmldecode(m);\n\t\t\tif(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;\n\t\t\tif(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tvar o/*:Cell*/ = {t:'s', v:m};\n\t\t\tif(opts.raw || !m.trim().length || _t == 's'){}\n\t\t\telse if(m === 'TRUE') o = {t:'b', v:true};\n\t\t\telse if(m === 'FALSE') o = {t:'b', v:false};\n\t\t\telse if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};\n\t\t\telse if(!isNaN(fuzzydate(m).getDate())) {\n\t\t\t\to = ({t:'d', v:parseDate(m)}/*:any*/);\n\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t}\n\t\t\tif(dense) { if(!ws[\"!data\"][R]) ws[\"!data\"][R] = []; ws[\"!data\"][R][C] = o; }\n\t\t\telse ws[encode_cell({r:R, c:C})] = o;\n\t\t\tC += CS;\n\t\t}\n\t}\n\tws['!ref'] = encode_range(range);\n\tif(merges.length) ws[\"!merges\"] = merges;\n\treturn ws;\n}\nfunction make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar M/*:Array*/ = (ws['!merges'] ||[]);\n\tvar oo/*:Array*/ = [];\n\tvar sp = ({}/*:any*/);\n\tvar dense = ws[\"!data\"] != null;\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar RS = 0, CS = 0;\n\t\tfor(var j = 0; j < M.length; ++j) {\n\t\t\tif(M[j].s.r > R || M[j].s.c > C) continue;\n\t\t\tif(M[j].e.r < R || M[j].e.c < C) continue;\n\t\t\tif(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }\n\t\t\tRS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;\n\t\t}\n\t\tif(RS < 0) continue;\n\t\tvar coord = encode_col(C) + encode_row(R);\n\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[coord];\n\t\t/* TODO: html entities */\n\t\tvar w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n\t\tsp = ({}/*:any*/);\n\t\tif(RS > 1) sp.rowspan = RS;\n\t\tif(CS > 1) sp.colspan = CS;\n\t\tif(o.editable) w = '' + w + '';\n\t\telse if(cell) {\n\t\t\tsp[\"data-t\"] = cell && cell.t || 'z';\n\t\t\tif(cell.v != null) sp[\"data-v\"] = cell.v;\n\t\t\tif(cell.z != null) sp[\"data-z\"] = cell.z;\n\t\t\tif(cell.l && (cell.l.Target || \"#\").charAt(0) != \"#\") w = '' + w + '';\n\t\t}\n\t\tsp.id = (o.id || \"sjs\") + \"-\" + coord;\n\t\too.push(writextag('td', w, sp));\n\t}\n\tvar preamble = \"\";\n\treturn preamble + oo.join(\"\") + \"\";\n}\n\nvar HTML_BEGIN = 'SheetJS Table Export';\nvar HTML_END = '';\n\nfunction html_to_workbook(str/*:string*/, opts)/*:Workbook*/ {\n\tvar mtch = str.match(/[\\s\\S]*?<\\/table>/gi);\n\tif(!mtch || mtch.length == 0) throw new Error(\"Invalid HTML: could not find
\");\n\tif(mtch.length == 1) {\n\t\tvar w = sheet_to_workbook(html_to_sheet(mtch[0], opts), opts);\n\t\tw.bookType = \"html\";\n\t\treturn w;\n\t}\n\tvar wb = book_new();\n\tmtch.forEach(function(s, idx) { book_append_sheet(wb, html_to_sheet(s, opts), \"Sheet\" + (idx+1)); });\n\twb.bookType = \"html\";\n\treturn wb;\n}\n\nfunction make_html_preamble(ws/*:Worksheet*/, R/*:Range*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar out/*:Array*/ = [];\n\treturn out.join(\"\") + '';\n}\n\nfunction sheet_to_html(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*//*, wb:?Workbook*/)/*:string*/ {\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tvar out/*:Array*/ = [header];\n\tvar r = decode_range(ws['!ref']);\n\tout.push(make_html_preamble(ws, r, o));\n\tfor(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));\n\tout.push(\"
\" + footer);\n\treturn out.join(\"\");\n}\n\nfunction sheet_add_dom(ws/*:Worksheet*/, table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar rows/*:HTMLCollection*/ = table.rows;\n\tif(!rows) {\n\t\t/* not an HTML TABLE */\n\t\tthrow \"Unsupported origin when \" + table.tagName + \" is not a TABLE\";\n\t}\n\n\tvar opts = _opts || {};\n\tvar dense = ws[\"!data\"] != null;\n\tvar or_R = 0, or_C = 0;\n\tif(opts.origin != null) {\n\t\tif(typeof opts.origin == 'number') or_R = opts.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\t\t\tor_R = _origin.r; or_C = _origin.c;\n\t\t}\n\t}\n\n\tvar sheetRows = Math.min(opts.sheetRows||10000000, rows.length);\n\tvar range/*:Range*/ = {s:{r:0,c:0},e:{r:or_R,c:or_C}};\n\tif(ws[\"!ref\"]) {\n\t\tvar _range/*:Range*/ = decode_range(ws[\"!ref\"]);\n\t\trange.s.r = Math.min(range.s.r, _range.s.r);\n\t\trange.s.c = Math.min(range.s.c, _range.s.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\tif(or_R == -1) range.e.r = or_R = _range.e.r + 1;\n\t}\n\tvar merges/*:Array*/ = [], midx = 0;\n\tvar rowinfo/*:Array*/ = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n\tvar _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;\n\tif(!ws[\"!cols\"]) ws['!cols'] = [];\n\tfor(; _R < rows.length && R < sheetRows; ++_R) {\n\t\tvar row/*:HTMLTableRowElement*/ = rows[_R];\n\t\tif (is_dom_element_hidden(row)) {\n\t\t\tif (opts.display) continue;\n\t\t\trowinfo[R] = {hidden: true};\n\t\t}\n\t\tvar elts/*:HTMLCollection*/ = (row.cells);\n\t\tfor(_C = C = 0; _C < elts.length; ++_C) {\n\t\t\tvar elt/*:HTMLTableCellElement*/ = elts[_C];\n\t\t\tif (opts.display && is_dom_element_hidden(elt)) continue;\n\t\t\tvar v/*:?string*/ = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n\t\t\tvar z/*:?string*/ = elt.getAttribute('data-z') || elt.getAttribute('z');\n\t\t\tfor(midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar m/*:Range*/ = merges[midx];\n\t\t\t\tif(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; }\n\t\t\t}\n\t\t\t/* TODO: figure out how to extract nonstandard mso- style */\n\t\t\tCS = +elt.getAttribute(\"colspan\") || 1;\n\t\t\tif( ((RS = (+elt.getAttribute(\"rowspan\") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}});\n\t\t\tvar o/*:Cell*/ = {t:'s', v:v};\n\t\t\tvar _t/*:string*/ = elt.getAttribute(\"data-t\") || elt.getAttribute(\"t\") || \"\";\n\t\t\tif(v != null) {\n\t\t\t\tif(v.length == 0) o.t = _t || 'z';\n\t\t\t\telse if(opts.raw || v.trim().length == 0 || _t == \"s\"){}\n\t\t\t\telse if(v === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(v === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};\n\t\t\t\telse if(!isNaN(fuzzydate(v).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(v)}/*:any*/);\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o.z === undefined && z != null) o.z = z;\n\t\t\t/* The first link is used. Links are assumed to be fully specified.\n\t\t\t * TODO: The right way to process relative links is to make a new */\n\t\t\tvar l = \"\", Aelts = elt.getElementsByTagName(\"A\");\n\t\t\tif(Aelts && Aelts.length) for(var Aelti = 0; Aelti < Aelts.length; ++Aelti)\tif(Aelts[Aelti].hasAttribute(\"href\")) {\n\t\t\t\tl = Aelts[Aelti].getAttribute(\"href\"); if(l.charAt(0) != \"#\") break;\n\t\t\t}\n\t\t\tif(l && l.charAt(0) != \"#\" &&\tl.slice(0, 11).toLowerCase() != 'javascript:') o.l = ({ Target: l });\n\t\t\tif(dense) { if(!ws[\"!data\"][R + or_R]) ws[\"!data\"][R + or_R] = []; ws[\"!data\"][R + or_R][C + or_C] = o; }\n\t\t\telse ws[encode_cell({c:C + or_C, r:R + or_R})] = o;\n\t\t\tif(range.e.c < C + or_C) range.e.c = C + or_C;\n\t\t\tC += CS;\n\t\t}\n\t\t++R;\n\t}\n\tif(merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n\trange.e.r = Math.max(range.e.r, R - 1 + or_R);\n\tws['!ref'] = encode_range(range);\n\tif(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance\n\treturn ws;\n}\n\nfunction parse_dom_table(table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar opts = _opts || {};\n\tvar ws/*:Worksheet*/ = ({}/*:any*/); if(opts.dense) ws[\"!data\"] = [];\n\treturn sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table/*:HTMLElement*/, opts/*:?any*/)/*:Workbook*/ {\n\tvar o = sheet_to_workbook(parse_dom_table(table, opts), opts);\n\t//o.bookType = \"dom\"; // TODO: define a type for this\n\treturn o;\n}\n\nfunction is_dom_element_hidden(element/*:HTMLElement*/)/*:boolean*/ {\n\tvar display/*:string*/ = '';\n\tvar get_computed_style/*:?function*/ = get_get_computed_style_function(element);\n\tif(get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n\tif(!display) display = element.style && element.style.display;\n\treturn display === 'none';\n}\n\n/* global getComputedStyle */\nfunction get_get_computed_style_function(element/*:HTMLElement*/)/*:?function*/ {\n\t// The proper getComputedStyle implementation is the one defined in the element window\n\tif(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;\n\t// If it is not available, try to get one from the global namespace\n\tif(typeof getComputedStyle === 'function') return getComputedStyle;\n\treturn null;\n}\n/* OpenDocument */\nfunction parse_text_p(text/*:string*//*::, tag*/)/*:Array*/ {\n\t/* 6.1.2 White Space Characters */\n\tvar fixed = text\n\t\t.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \")\n\t\t.replace(//g,\" \")\n\t\t.replace(//g, function($$,$1) { return Array(parseInt($1,10)+1).join(\" \"); })\n\t\t.replace(/]*\\/>/g,\"\\t\")\n\t\t.replace(//g,\"\\n\");\n\tvar v = unescapexml(fixed.replace(/<[^>]*>/g,\"\"));\n\n\treturn [v];\n}\n\n/* Note: ODS can stick styles in content.xml or styles.xml, FODS blurs lines */\nfunction parse_ods_styles(d/*:string*/, _opts, _nfm) {\n\tvar number_format_map = _nfm || {};\n\tvar str = xlml_normalize(d);\n\txlmlregex.lastIndex = 0;\n\tstr = str.replace(//mg,\"\").replace(//gm,\"\");\n\tvar Rn, NFtag, NF = \"\", tNF = \"\", y, etpos = 0, tidx = -1, infmt = false, payload = \"\";\n\twhile((Rn = xlmlregex.exec(str))) {\n\t\tswitch((Rn[3]=Rn[3].replace(/_.*$/,\"\"))) {\n\t\t/* Number Format Definitions */\n\t\tcase 'number-style': // 16.29.2\n\t\tcase 'currency-style': // 16.29.8\n\t\tcase 'percentage-style': // 16.29.10\n\t\tcase 'date-style': // 16.29.11\n\t\tcase 'time-style': // 16.29.19\n\t\tcase 'text-style': // 16.29.26\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tinfmt = false;\n\t\t\t\tif(NFtag['truncate-on-overflow'] == \"false\") {\n\t\t\t\t\tif(NF.match(/h/)) NF = NF.replace(/h+/, \"[$&]\");\n\t\t\t\t\telse if(NF.match(/m/)) NF = NF.replace(/m+/, \"[$&]\");\n\t\t\t\t\telse if(NF.match(/s/)) NF = NF.replace(/s+/, \"[$&]\");\n\t\t\t\t}\n\t\t\t\tnumber_format_map[NFtag.name] = NF;\n\t\t\t\tNF = \"\";\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tinfmt = true;\n\t\t\t\tNF = \"\";\n\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t} break;\n\n\t\t// LibreOffice bug https://bugs.documentfoundation.org/show_bug.cgi?id=149484\n\t\tcase 'boolean-style': // 16.29.24\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tinfmt = false;\n\t\t\t\tnumber_format_map[NFtag.name] = \"General\";\n\t\t\t\tNF = \"\";\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tinfmt = true;\n\t\t\t\tNF = \"\";\n\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t} break;\n\n\t\t/* Number Format Elements */\n\t\tcase 'boolean': // 16.29.25\n\t\t\tNF += \"General\"; // ODF spec is unfortunately underspecified here\n\t\t\tbreak;\n\n\t\tcase 'text': // 16.29.27\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tpayload = str.slice(tidx, xlmlregex.lastIndex - Rn[0].length);\n\t\t\t\t// NOTE: Excel has a different interpretation of \"%%\" and friends\n\t\t\t\tif(payload == \"%\" && NFtag[0] == ' 16.29.12\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"d\"; break;\n\t\t\t\tcase \"long\": NF += \"dd\"; break;\n\t\t\t\tdefault: NF += \"dd\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'day-of-week': { // 16.29.16\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"ddd\"; break;\n\t\t\t\tcase \"long\": NF += \"dddd\"; break;\n\t\t\t\tdefault: NF += \"ddd\"; break;\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'era': { // 16.29.15 TODO: proper mapping\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"ee\"; break;\n\t\t\t\tcase \"long\": NF += \"eeee\"; break;\n\t\t\t\tdefault: NF += \"eeee\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'hours': { // 16.29.20\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"h\"; break;\n\t\t\t\tcase \"long\": NF += \"hh\"; break;\n\t\t\t\tdefault: NF += \"hh\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'minutes': { // 16.29.21\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"m\"; break;\n\t\t\t\tcase \"long\": NF += \"mm\"; break;\n\t\t\t\tdefault: NF += \"mm\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'month': { // 16.29.13\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tif(y[\"textual\"]) NF += \"mm\";\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"m\"; break;\n\t\t\t\tcase \"long\": NF += \"mm\"; break;\n\t\t\t\tdefault: NF += \"m\"; break;\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'seconds': { // 16.29.22\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"s\"; break;\n\t\t\t\tcase \"long\": NF += \"ss\"; break;\n\t\t\t\tdefault: NF += \"ss\"; break; // TODO: error condition\n\t\t\t}\n\t\t\tif(y[\"decimal-places\"]) NF += \".\" + fill(\"0\", +y[\"decimal-places\"]);\n\t\t} break;\n\n\t\tcase 'year': { // 16.29.14\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"yy\"; break;\n\t\t\t\tcase \"long\": NF += \"yyyy\"; break;\n\t\t\t\tdefault: NF += \"yy\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'am-pm': // 16.29.23\n\t\t\tNF += \"AM/PM\"; // LO autocorrects A/P -> AM/PM\n\t\t\tbreak;\n\n\t\tcase 'week-of-year': // 16.29.17\n\t\tcase 'quarter': // 16.29.18\n\t\t\tconsole.error(\"Excel does not support ODS format token \" + Rn[3]);\n\t\t\tbreak;\n\n\t\tcase 'fill-character': // 16.29.5\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tpayload = str.slice(tidx, xlmlregex.lastIndex - Rn[0].length);\n\t\t\t\t// NOTE: Excel has a different interpretation of \"%%\" and friends\n\t\t\t\tNF += '\"' + payload.replace(/\"/g, '\"\"') + '\"*';\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t} break;\n\n\t\tcase 'scientific-number': // 16.29.6\n\t\t\t// TODO: find a mapping for all parameters\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tNF += \"0.\" + fill(\"0\", +y[\"min-decimal-places\"] || +y[\"decimal-places\"] || 2) + fill(\"?\", +y[\"decimal-places\"] - +y[\"min-decimal-places\"] || 0) + \"E\" + (parsexmlbool(y[\"forced-exponent-sign\"]) ? \"+\" : \"\") + fill(\"0\", +y[\"min-exponent-digits\"] || 2);\n\t\t\tbreak;\n\n\t\tcase 'fraction': // 16.29.7\n\t\t\t// TODO: find a mapping for all parameters\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tif(!+y[\"min-integer-digits\"]) NF += \"#\";\n\t\t\telse NF += fill(\"0\", +y[\"min-integer-digits\"]);\n\t\t\tNF += \" \";\n\t\t\tNF += fill(\"?\", +y[\"min-numerator-digits\"] || 1);\n\t\t\tNF += \"/\";\n\t\t\tif(+y[\"denominator-value\"]) NF += y[\"denominator-value\"];\n\t\t\telse NF += fill(\"?\", +y[\"min-denominator-digits\"] || 1);\n\t\t\tbreak;\n\n\t\tcase 'currency-symbol': // 16.29.9\n\t\t\t// TODO: localization with [$-...]\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tNF += '\"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/\"/g, '\"\"') + '\"';\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t} else NF += \"$\";\n\t\t\tbreak;\n\n\t\tcase 'text-properties': // 16.29.29\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch((y[\"color\"]||\"\").toLowerCase().replace(\"#\", \"\")) {\n\t\t\t\tcase \"ff0000\": case \"red\": NF = \"[Red]\" + NF; break;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'text-content': // 16.29.28\n\t\t\tNF += \"@\";\n\t\t\tbreak;\n\n\t\tcase 'map': // 16.3\n\t\t\t// TODO: handle more complex maps\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tif(unescapexml(y[\"condition\"]) == \"value()>=0\") NF = number_format_map[y[\"apply-style-name\"]] + \";\" + NF;\n\t\t\telse console.error(\"ODS number format may be incorrect: \" + y[\"condition\"]);\n\t\t\tbreak;\n\n\t\tcase 'number': // 16.29.3\n\t\t\t// TODO: handle all the attributes\n\t\t\tif(Rn[1]==='/') break;\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\ttNF = \"\";\n\t\t\ttNF += fill(\"0\", +y[\"min-integer-digits\"] || 1);\n\t\t\tif(parsexmlbool(y[\"grouping\"])) tNF = commaify(fill(\"#\", Math.max(0, 4 - tNF.length)) + tNF);\n\t\t\tif(+y[\"min-decimal-places\"] || +y[\"decimal-places\"]) tNF += \".\";\n\t\t\tif(+y[\"min-decimal-places\"]) tNF += fill(\"0\", +y[\"min-decimal-places\"] || 1);\n\t\t\tif(+y[\"decimal-places\"] - (+y[\"min-decimal-places\"]||0)) tNF += fill(\"0\", +y[\"decimal-places\"] - (+y[\"min-decimal-places\"]||0)); // TODO: should this be \"#\" ?\n\t\t\tNF += tNF;\n\t\t\tbreak;\n\n\t\tcase 'embedded-text': // 16.29.4\n\t\t\t// TODO: verify interplay with grouping et al\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tif(etpos == 0) NF += '\"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/\"/g, '\"\"') + '\"';\n\t\t\t\telse NF = NF.slice(0, etpos) + '\"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/\"/g, '\"\"') + '\"' + NF.slice(etpos);\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t\tetpos = -+parsexmltag(Rn[0], false)[\"position\"] || 0;\n\t\t\t} break;\n\n\t}}\n\treturn number_format_map;\n}\n\nfunction parse_content_xml(d/*:string*/, _opts, _nfm)/*:Workbook*/ {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar str = xlml_normalize(d);\n\t\tvar state/*:Array*/ = [], tmp;\n\t\tvar tag/*:: = {}*/;\n\t\tvar nfidx, NF = \"\", pidx = 0;\n\t\tvar sheetag/*:: = {name:\"\", '名称':\"\"}*/;\n\t\tvar rowtag/*:: = {'行号':\"\"}*/;\n\t\tvar Sheets = {}, SheetNames/*:Array*/ = [];\n\t\tvar ws = ({}/*:any*/); if(opts.dense) ws[\"!data\"] = [];\n\t\tvar Rn, q/*:: :any = ({t:\"\", v:null, z:null, w:\"\",c:[],}:any)*/;\n\t\tvar ctag = ({value:\"\"}/*:any*/);\n\t\tvar textp = \"\", textpidx = 0, textptag/*:: = {}*/;\n\t\tvar textR = [];\n\t\tvar R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};\n\t\tvar row_ol = 0;\n\t\tvar number_format_map = _nfm || {}, styles = {};\n\t\tvar merges/*:Array*/ = [], mrange = {}, mR = 0, mC = 0;\n\t\tvar rowinfo/*:Array*/ = [], rowpeat = 1, colpeat = 1;\n\t\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\t\tvar WB = {Names:[], WBProps:{}};\n\t\tvar atag = ({}/*:any*/);\n\t\tvar _Ref/*:[string, string]*/ = [\"\", \"\"];\n\t\tvar comments/*:Array*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\t\tvar creator = \"\", creatoridx = 0;\n\t\tvar isstub = false, intable = false;\n\t\tvar i = 0;\n\t\tvar baddate = 0;\n\t\txlmlregex.lastIndex = 0;\n\t\tstr = str.replace(//mg,\"\").replace(//gm,\"\");\n\t\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_.*$/,\"\"))) {\n\n\t\t\tcase 'table': case '工作表': // 9.1.2 \n\t\t\t\tif(Rn[1]==='/') {\n\t\t\t\t\tif(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);\n\t\t\t\t\telse ws['!ref'] = \"A1:A1\";\n\t\t\t\t\tif(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n\t\t\t\t\t\tws['!fullref'] = ws['!ref'];\n\t\t\t\t\t\trange.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tws['!ref'] = encode_range(range);\n\t\t\t\t\t}\n\t\t\t\t\tif(merges.length) ws['!merges'] = merges;\n\t\t\t\t\tif(rowinfo.length) ws[\"!rows\"] = rowinfo;\n\t\t\t\t\tsheetag.name = sheetag['名称'] || sheetag.name;\n\t\t\t\t\tif(typeof JSON !== 'undefined') JSON.stringify(sheetag);\n\t\t\t\t\tSheetNames.push(sheetag.name);\n\t\t\t\t\tSheets[sheetag.name] = ws;\n\t\t\t\t\tintable = false;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tsheetag = parsexmltag(Rn[0], false);\n\t\t\t\t\tR = C = -1;\n\t\t\t\t\trange.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;\n\t\t\t\t\tws = ({}/*:any*/); if(opts.dense) ws[\"!data\"] = []; merges = [];\n\t\t\t\t\trowinfo = [];\n\t\t\t\t\tintable = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'table-row-group': // 9.1.9 \n\t\t\t\tif(Rn[1] === \"/\") --row_ol; else ++row_ol;\n\t\t\t\tbreak;\n\t\t\tcase 'table-row': case '行': // 9.1.3 \n\t\t\t\tif(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }\n\t\t\t\trowtag = parsexmltag(Rn[0], false);\n\t\t\t\tif(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;\n\t\t\t\trowpeat = +rowtag['number-rows-repeated'] || 1;\n\t\t\t\t/* TODO: remove magic */\n\t\t\t\tif(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};\n\t\t\t\tC = -1; break;\n\t\t\tcase 'covered-table-cell': // 9.1.5 \n\t\t\t\tif(Rn[1] !== '/') ++C;\n\t\t\t\tif(opts.sheetStubs) {\n\t\t\t\t\tif(opts.dense) { if(!ws[\"!data\"][R]) ws[\"!data\"][R] = []; ws[\"!data\"][R][C] = {t:'z'}; }\n\t\t\t\t\telse ws[encode_cell({r:R,c:C})] = {t:'z'};\n\t\t\t\t}\n\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\tbreak; /* stub */\n\t\t\tcase 'table-cell': case '数据':\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) === '/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tq = ({t:'z', v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\t\t\t\t\tif(ctag[\"style-name\"] && styles[ctag[\"style-name\"]]) q.z = styles[ctag[\"style-name\"]];\n\t\t\t\t\tif((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n\t\t\t\t\t\tq.t = \"s\"; q.v = unescapexml(ctag['string-value'] || \"\");\n\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\tif(!ws[\"!data\"][R]) ws[\"!data\"][R] = [];\n\t\t\t\t\t\t\tws[\"!data\"][R][C] = q;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tws[encode_col(C) + encode_row(R)] = q;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tC+= colpeat-1;\n\t\t\t\t} else if(Rn[1]!=='/') {\n\t\t\t\t\t++C;\n\t\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\t\tcolpeat = 1;\n\t\t\t\t\tvar rptR = rowpeat ? R + rowpeat - 1 : R;\n\t\t\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t\t\t\tif(C < range.s.c) range.s.c = C;\n\t\t\t\t\tif(R < range.s.r) range.s.r = R;\n\t\t\t\t\tif(rptR > range.e.r) range.e.r = rptR;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcomments = []; comment = ({}/*:any*/);\n\t\t\t\t\tq = ({t:ctag['数据类型'] || ctag['value-type'], v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(ctag[\"style-name\"] && styles[ctag[\"style-name\"]]) q.z = styles[ctag[\"style-name\"]];\n\t\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\t\tif(ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\t\t\t\t\t\tif(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n\t\t\t\t\t\t\tmR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;\n\t\t\t\t\t\t\tmC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;\n\t\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\t\tq.F = encode_range(mrange);\n\t\t\t\t\t\t\tarrayf.push([mrange, q.F]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);\n\t\t\t\t\t\telse for(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\t\t\tif(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)\n\t\t\t\t\t\t\t\tif(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\t\t\tq.F = arrayf[i][1];\n\t\t\t\t\t}\n\t\t\t\t\tif(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n\t\t\t\t\t\tmR = parseInt(ctag['number-rows-spanned'],10) || 0;\n\t\t\t\t\t\tmC = parseInt(ctag['number-columns-spanned'],10) || 0;\n\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\tmerges.push(mrange);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* 19.675.2 table:number-columns-repeated */\n\t\t\t\t\tif(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n\n\t\t\t\t\t/* 19.385 office:value-type */\n\t\t\t\t\tswitch(q.t) {\n\t\t\t\t\t\tcase 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']) || (+ctag['boolean-value'] >= 1); break;\n\t\t\t\t\t\tcase 'float': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'date': q.t = 'd'; q.v = parseDate(ctag['date-value']);\n\t\t\t\t\t\t\tif(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v, WB.WBProps.date1904) - baddate; }\n\t\t\t\t\t\t\tif(!q.z) q.z = 'm/d/yy'; break;\n\t\t\t\t\t\tcase 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400;\n\t\t\t\t\t\t\tif(opts.cellDates) { q.t = 'd'; q.v = numdate(q.v); }\n\t\t\t\t\t\t\tif(!q.z) q.z = 'HH:MM:SS'; break;\n\t\t\t\t\t\tcase 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(q.t === 'string' || q.t === 'text' || !q.t) {\n\t\t\t\t\t\t\t\tq.t = 's';\n\t\t\t\t\t\t\t\tif(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; }\n\t\t\t\t\t\t\t} else throw new Error('Unsupported value type ' + q.t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tisstub = false;\n\t\t\t\t\tif(q.t === 's') {\n\t\t\t\t\t\tq.v = textp || '';\n\t\t\t\t\t\tif(textR.length) q.R = textR;\n\t\t\t\t\t\tisstub = textpidx == 0;\n\t\t\t\t\t}\n\t\t\t\t\tif(atag.Target) q.l = atag;\n\t\t\t\t\tif(comments.length > 0) { q.c = comments; comments = []; }\n\t\t\t\t\tif(textp && opts.cellText !== false) q.w = textp;\n\t\t\t\t\tif(isstub) { q.t = \"z\"; delete q.v; }\n\t\t\t\t\tif(!isstub || opts.sheetStubs) {\n\t\t\t\t\t\tif(!(opts.sheetRows && opts.sheetRows <= R)) {\n\t\t\t\t\t\t\tfor(var rpt = 0; rpt < rowpeat; ++rpt) {\n\t\t\t\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!ws[\"!data\"][R + rpt]) ws[\"!data\"][R + rpt] = [];\n\t\t\t\t\t\t\t\t\tws[\"!data\"][R + rpt][C] = rpt == 0 ? q : dup(q);\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[\"!data\"][R + rpt][C + colpeat] = dup(q);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tws[encode_cell({r:R + rpt,c:C})] = q;\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(range.e.c <= C) range.e.c = C;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tC += colpeat-1; colpeat = 0;\n\t\t\t\t\tq = {/*:: t:\"\", v:null, z:null, w:\"\",c:[]*/};\n\t\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\t}\n\t\t\t\tatag = ({}/*:any*/);\n\t\t\t\tbreak; // 9.1.4 \n\n\t\t\t/* pure state */\n\t\t\tcase 'document': // TODO: is the root for FODS\n\t\t\tcase 'document-content': case '电子表格文档': // 3.1.3.2 \n\t\t\tcase 'spreadsheet': case '主体': // 3.7 \n\t\t\tcase 'scripts': // 3.12 \n\t\t\tcase 'styles': // TODO \n\t\t\tcase 'font-face-decls': // 3.14 \n\t\t\tcase 'master-styles': // 3.15.4 -- relevant for FODS\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'annotation': // 14.1 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t\tcomment.t = textp;\n\t\t\t\t\tif(textR.length) /*::(*/comment/*:: :any)*/.R = textR;\n\t\t\t\t\tcomment.a = creator;\n\t\t\t\t\tcomments.push(comment);\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {state.push([Rn[3], false]);}\n\t\t\t\tcreator = \"\"; creatoridx = 0;\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'creator': // 4.3.2.7 \n\t\t\t\tif(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }\n\t\t\t\telse creatoridx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\t/* ignore state */\n\t\t\tcase 'meta': case '元数据': // TODO: FODS/UOF\n\t\t\tcase 'settings': // TODO: \n\t\t\tcase 'config-item-set': // TODO: \n\t\t\tcase 'config-item-map-indexed': // TODO: \n\t\t\tcase 'config-item-map-entry': // TODO: \n\t\t\tcase 'config-item-map-named': // TODO: \n\t\t\tcase 'shapes': // 9.2.8 \n\t\t\tcase 'frame': // 10.4.2 \n\t\t\tcase 'text-box': // 10.4.3 \n\t\t\tcase 'image': // 10.4.4 \n\t\t\tcase 'data-pilot-tables': // 9.6.2 \n\t\t\tcase 'list-style': // 16.30 \n\t\t\tcase 'form': // 13.13 \n\t\t\tcase 'dde-links': // 9.8 \n\t\t\tcase 'event-listeners': // TODO\n\t\t\tcase 'chart': // TODO\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'scientific-number': // \n\t\t\tcase 'currency-symbol': // \n\t\t\tcase 'fill-character': // 16.29.5 \n\t\t\t\tbreak;\n\n\t\t\tcase 'text-style': // 16.27.25 \n\t\t\tcase 'boolean-style': // 16.27.23 \n\t\t\tcase 'number-style': // 16.27.2 \n\t\t\tcase 'currency-style': // 16.29.8 \n\t\t\tcase 'percentage-style': // 16.27.9 \n\t\t\tcase 'date-style': // 16.27.10 \n\t\t\tcase 'time-style': // 16.27.18 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tvar xlmlidx = xlmlregex.lastIndex;\n\t\t\t\t\tparse_ods_styles(str.slice(nfidx, xlmlregex.lastIndex), _opts, number_format_map);\n\t\t\t\t\txlmlregex.lastIndex = xlmlidx;\n\t\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tnfidx = xlmlregex.lastIndex - Rn[0].length;\n\t\t\t\t} break;\n\n\t\t\tcase 'script': break; // 3.13 \n\t\t\tcase 'libraries': break; // TODO: \n\t\t\tcase 'automatic-styles': break; // 3.15.3 \n\n\t\t\tcase 'default-style': // TODO: \n\t\t\tcase 'page-layout': break; // TODO: \n\t\t\tcase 'style': { // 16.2 \n\t\t\t\tvar styletag = parsexmltag(Rn[0], false);\n\t\t\t\tif(styletag[\"family\"] == \"table-cell\" && number_format_map[styletag[\"data-style-name\"]]) styles[styletag[\"name\"]] = number_format_map[styletag[\"data-style-name\"]];\n\t\t\t} break;\n\t\t\tcase 'map': break; // 16.3 \n\t\t\tcase 'font-face': break; // 16.21 \n\n\t\t\tcase 'paragraph-properties': break; // 17.6 \n\t\t\tcase 'table-properties': break; // 17.15 \n\t\t\tcase 'table-column-properties': break; // 17.16 \n\t\t\tcase 'table-row-properties': break; // 17.17 \n\t\t\tcase 'table-cell-properties': break; // 17.18 \n\n\t\t\tcase 'number': // 16.27.3 \n\t\t\t\tbreak;\n\n\t\t\tcase 'fraction': break; // TODO 16.27.6 \n\n\t\t\tcase 'day': // 16.27.11 \n\t\t\tcase 'month': // 16.27.12 \n\t\t\tcase 'year': // 16.27.13 \n\t\t\tcase 'era': // 16.27.14 \n\t\t\tcase 'day-of-week': // 16.27.15 \n\t\t\tcase 'week-of-year': // 16.27.16 \n\t\t\tcase 'quarter': // 16.27.17 \n\t\t\tcase 'hours': // 16.27.19 \n\t\t\tcase 'minutes': // 16.27.20 \n\t\t\tcase 'seconds': // 16.27.21 \n\t\t\tcase 'am-pm': // 16.27.22 \n\t\t\t\tbreak;\n\n\t\t\tcase 'boolean': break; // 16.27.24 \n\t\t\tcase 'text': // 16.27.26 \n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") switch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'number-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\t\tNF += str.slice(pidx, Rn.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\tcase 'named-range': // 9.4.12 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t_Ref = ods_to_csf_3D(tag['cell-range-address']);\n\t\t\t\tvar nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]}/*:any*/);\n\t\t\t\tif(intable) nrange.Sheet = SheetNames.length;\n\t\t\t\tWB.Names.push(nrange);\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-content': break; // 16.27.27 \n\t\t\tcase 'text-properties': break; // 16.27.27 \n\t\t\tcase 'embedded-text': break; // 16.27.4 \n\n\t\t\tcase 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3\n\n\t\t\tcase 'forms': break; // 12.25.2 13.2\n\t\t\tcase 'table-column': break; // 9.1.6 \n\t\t\tcase 'table-header-rows': break; // 9.1.7 \n\t\t\tcase 'table-rows': break; // 9.1.12 \n\t\t\t/* TODO: outline levels */\n\t\t\tcase 'table-column-group': break; // 9.1.10 \n\t\t\tcase 'table-header-columns': break; // 9.1.11 \n\t\t\tcase 'table-columns': break; // 9.1.12 \n\n\t\t\tcase 'null-date': // 9.4.2 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\tswitch(tag[\"date-value\"]) {\n\t\t\t\t\tcase \"1904-01-01\": WB.WBProps.date1904 = true;\n\t\t\t\t\t/* falls through */\n\t\t\t\t\tcase \"1900-01-01\": baddate = 0;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'graphic-properties': break; // 17.21 \n\t\t\tcase 'calculation-settings': break; // 9.4.1 \n\t\t\tcase 'named-expressions': break; // 9.4.11 \n\t\t\tcase 'label-range': break; // 9.4.9 \n\t\t\tcase 'label-ranges': break; // 9.4.10 \n\t\t\tcase 'named-expression': break; // 9.4.13 \n\t\t\tcase 'sort': break; // 9.4.19 \n\t\t\tcase 'sort-by': break; // 9.4.20 \n\t\t\tcase 'sort-groups': break; // 9.4.22 \n\n\t\t\tcase 'tab': break; // 6.1.4 \n\t\t\tcase 'line-break': break; // 6.1.5 \n\t\t\tcase 'span': break; // 6.1.7 \n\t\t\tcase 'p': case '文本串': // 5.1.3 \n\t\t\t\tif(['master-styles'].indexOf(state[state.length-1][0]) > -1) break;\n\t\t\t\tif(Rn[1]==='/' && (!ctag || !ctag['string-value'])) {\n\t\t\t\t\tvar ptp = parse_text_p(str.slice(textpidx,Rn.index), textptag);\n\t\t\t\t\ttextp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n\t\t\t\t} else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak; // \n\t\t\tcase 's': break; // \n\n\t\t\tcase 'database-range': // 9.4.15 \n\t\t\t\tif(Rn[1]==='/') break;\n\t\t\t\ttry {\n\t\t\t\t\t_Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n\t\t\t\t\tSheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] };\n\t\t\t\t} catch(e) {/* empty */}\n\t\t\t\tbreak;\n\n\t\t\tcase 'date': break; // <*:date>\n\n\t\t\tcase 'object': break; // 10.4.6.2 \n\t\t\tcase 'title': case '标题': break; // <*:title> OR \n\t\t\tcase 'desc': break; // <*:desc>\n\t\t\tcase 'binary-data': break; // 10.4.5 TODO: b64 blob\n\n\t\t\t/* 9.2 Advanced Tables */\n\t\t\tcase 'table-source': break; // 9.2.6\n\t\t\tcase 'scenario': break; // 9.2.6\n\n\t\t\tcase 'iteration': break; // 9.4.3 \n\t\t\tcase 'content-validations': break; // 9.4.4 \n\t\t\tcase 'filter': break; // 9.5.2 \n\t\t\tcase 'filter-and': break; // 9.5.3 \n\t\t\tcase 'filter-or': break; // 9.5.4 \n\t\t\tcase 'filter-condition': break; // 9.5.5 \n\n\t\t\tcase 'list-level-style-bullet': break; // 16.31 \n\t\t\tcase 'page-count': break; // TODO \n\t\t\tcase 'time': break; // TODO \n\n\t\t\t/* 9.3 Advanced Table Cells */\n\t\t\tcase 'cell-range-source': break; // 9.3.1 \n\t\t\tcase 'property': break; // 13.8 \n\n\t\t\tcase 'a': // 6.1.8 hyperlink\n\t\t\t\tif(Rn[1]!== '/') {\n\t\t\t\t\tatag = parsexmltag(Rn[0], false);\n\t\t\t\t\tif(!atag.href) break;\n\t\t\t\t\tatag.Target = unescapexml(atag.href); delete atag.href;\n\t\t\t\t\tif(atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n\t\t\t\t\t\t_Ref = ods_to_csf_3D(atag.Target.slice(1));\n\t\t\t\t\t\tatag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n\t\t\t\t\t} else if(atag.Target.match(/^\\.\\.[\\\\\\/]/)) atag.Target = atag.Target.slice(3);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t/* non-standard */\n\t\t\tcase 'table-protection': break;\n\t\t\tcase 'data-pilot-grand-total': break; // ',\n\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t'',\n\t\t''\n\t].join(\"\");\n\n\tvar payload = '' + master_styles + '';\n\n\treturn function wso(/*::wb, opts*/) {\n\t\treturn XML_HEADER + payload;\n\t};\n})();\n\n// TODO: find out if anyone actually read the spec. LO has some wild errors\nfunction write_number_format_ods(nf/*:string*/, nfidx/*:string*/)/*:string*/ {\n\tvar type = \"number\", payload = \"\", nopts = { \"style:name\": nfidx }, c = \"\", i = 0;\n\tnf = nf.replace(/\"[$]\"/g, \"$\");\n\t/* TODO: replace with an actual parser based on a real grammar */\n\tj: {\n\t\t// TODO: support style maps\n\t\tif(nf.indexOf(\";\") > -1) {\n\t\t\tconsole.error(\"Unsupported ODS Style Map exported. Using first branch of \" + nf);\n\t\t\tnf = nf.slice(0, nf.indexOf(\";\"));\n\t\t}\n\n\t\tif(nf == \"@\") { type = \"text\"; payload = \"\"; break j; }\n\n\t\t/* currency flag */\n\t\tif(nf.indexOf(/\\$/) > -1) { type = \"currency\"; }\n\n\t\t/* opening string literal */\n\t\tif(nf[i] == '\"') {\n\t\t\tc = \"\";\n\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\tif(nf[i+1] == \"*\") {\n\t\t\t\ti++;\n\t\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t\t} else {\n\t\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t\t}\n\t\t\tnf = nf.slice(i+1); i = 0;\n\t\t}\n\n\t\t/* fractions */\n\t\tvar t = nf.match(/# (\\?+)\\/(\\?+)/);\n\t\tif(t) { payload += writextag(\"number:fraction\", null, {\"number:min-integer-digits\":0, \"number:min-numerator-digits\": t[1].length, \"number:max-denominator-value\": Math.max(+(t[1].replace(/./g, \"9\")), +(t[2].replace(/./g, \"9\"))) }); break j; }\n\t\tif((t=nf.match(/# (\\?+)\\/(\\d+)/))) { payload += writextag(\"number:fraction\", null, {\"number:min-integer-digits\":0, \"number:min-numerator-digits\": t[1].length, \"number:denominator-value\": +t[2]}); break j; }\n\n\t\t/* percentages */\n\t\tif((t=nf.match(/(\\d+)(|\\.\\d+)%/))) { type = \"percentage\"; payload += writextag(\"number:number\", null, {\"number:decimal-places\": t[2] && t.length - 1 || 0, \"number:min-decimal-places\": t[2] && t.length - 1 || 0, \"number:min-integer-digits\": t[1].length }) + \"%\"; break j; }\n\n\t\t/* datetime */\n\t\tvar has_time = false;\n\t\tif([\"y\",\"m\",\"d\"].indexOf(nf[0]) > -1) {\n\t\t\ttype = \"date\";\n\t\t\tk: for(; i < nf.length; ++i) switch((c = nf[i].toLowerCase())) {\n\t\t\t\tcase \"h\": case \"s\": has_time = true; --i; break k;\n\t\t\t\tcase \"m\":\n\t\t\t\t\tl: for(var h = i+1; h < nf.length; ++h) switch(nf[h]) {\n\t\t\t\t\t\tcase \"y\": case \"d\": break l;\n\t\t\t\t\t\tcase \"h\": case \"s\": has_time = true; --i; break k;\n\t\t\t\t\t}\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase \"y\": case \"d\":\n\t\t\t\t\twhile((nf[++i]||\"\").toLowerCase() == c[0]) c += c[0]; --i;\n\t\t\t\t\tswitch(c) {\n\t\t\t\t\t\tcase \"y\": case \"yy\": payload += \"\"; break;\n\t\t\t\t\t\tcase \"yyy\": case \"yyyy\": payload += ''; break;\n\t\t\t\t\t\tcase \"mmmmm\": console.error(\"ODS has no equivalent of format |mmmmm|\");\n\t\t\t\t\t\t\t/* falls through */\n\t\t\t\t\t\tcase \"m\": case \"mm\": case \"mmm\": case \"mmmm\":\n\t\t\t\t\t\t\tpayload += '= 3 ? \"true\" : \"false\") + '\"/>';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"d\": case \"dd\": payload += ''; break;\n\t\t\t\t\t\tcase \"ddd\": case \"dddd\": payload += ''; break;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '\"':\n\t\t\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\t\t\tpayload += '' + escapexml(c.slice(1).replace(/\"\"/g, '\"')) + '';\n\t\t\t\t\tbreak;\n\t\t\t\tcase '/': payload += '' + escapexml(c) + ''; break;\n\t\t\t\tdefault: console.error(\"unrecognized character \" + c + \" in ODF format \" + nf);\n\t\t\t}\n\t\t\tif(!has_time) break j;\n\t\t\tnf = nf.slice(i+1); i = 0;\n\t\t}\n\t\tif(nf.match(/^\\[?[hms]/)) {\n\t\t\tif(type == \"number\") type = \"time\";\n\t\t\tif(nf.match(/\\[/)) {\n\t\t\t\tnf = nf.replace(/[\\[\\]]/g, \"\");\n\t\t\t\tnopts['number:truncate-on-overflow'] = \"false\";\n\t\t\t}\n\t\t\tfor(; i < nf.length; ++i) switch((c = nf[i].toLowerCase())) {\n\t\t\t\tcase \"h\": case \"m\": case \"s\":\n\t\t\t\t\twhile((nf[++i]||\"\").toLowerCase() == c[0]) c += c[0]; --i;\n\t\t\t\t\tswitch(c) {\n\t\t\t\t\t\tcase \"h\": case \"hh\": payload += ''; break;\n\t\t\t\t\t\tcase \"m\": case \"mm\": payload += ''; break;\n\t\t\t\t\t\tcase \"s\": case \"ss\":\n\t\t\t\t\t\t\tif(nf[i+1] == \".\") do { c += nf[i+1]; ++i; } while(nf[i+1] == \"0\");\n\t\t\t\t\t\t\tpayload += ''; break;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '\"':\n\t\t\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\t\t\tpayload += '' + escapexml(c.slice(1).replace(/\"\"/g, '\"')) + '';\n\t\t\t\t\tbreak;\n\t\t\t\tcase '/': payload += '' + escapexml(c) + ''; break;\n\t\t\t\tcase \"a\":\n\t\t\t\t\tif(nf.slice(i, i+3).toLowerCase() == \"a/p\") { payload += ''; i += 2; break; } // Note: ODF does not support A/P\n\t\t\t\t\tif(nf.slice(i, i+5).toLowerCase() == \"am/pm\") { payload += ''; i += 4; break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: console.error(\"unrecognized character \" + c + \" in ODF format \" + nf);\n\t\t\t}\n\t\t\tbreak j;\n\t\t}\n\n\t\t/* currency flag */\n\t\tif(nf.indexOf(/\\$/) > -1) { type = \"currency\"; }\n\n\t\t/* should be in a char loop */\n\t\tif(nf[0] == \"$\") { payload += '$'; nf = nf.slice(1); i = 0; }\n\t\ti = 0; if(nf[i] == '\"') {\n\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\tif(nf[i+1] == \"*\") {\n\t\t\t\ti++;\n\t\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t\t} else {\n\t\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t\t}\n\t\t\tnf = nf.slice(i+1); i = 0;\n\t\t}\n\n\t\t/* number TODO: interstitial text e.g. 000)000-0000 */\n\t\tvar np = nf.match(/([#0][0#,]*)(\\.[0#]*|)(E[+]?0*|)/i);\n\t\tif(!np || !np[0]) console.error(\"Could not find numeric part of \" + nf);\n\t\telse {\n\t\t\tvar base = np[1].replace(/,/g, \"\");\n\t\t\tpayload += ' -1 ? ' number:grouping=\"true\"' : \"\") +\n\t\t\t\t(np[2] && ' number:decimal-places=\"' + (np[2].length - 1) + '\"' || ' number:decimal-places=\"0\"') +\n\t\t\t\t(np[3] && np[3].indexOf(\"+\") > -1 ? ' number:forced-exponent-sign=\"true\"' : \"\" ) +\n\t\t\t\t(np[3] ? ' number:min-exponent-digits=\"' + np[3].match(/0+/)[0].length + '\"' : \"\" ) +\n\t\t\t\t'>' +\n\t\t\t\t/* TODO: interstitial text placeholders */\n\t\t\t\t'';\n\t\t\ti = np.index + np[0].length;\n\t\t}\n\n\t\t/* residual text */\n\t\tif(nf[i] == '\"') {\n\t\t\tc = \"\";\n\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t}\n\t}\n\n\tif(!payload) { console.error(\"Could not generate ODS number format for |\" + nf + \"|\"); return \"\"; }\n\treturn writextag(\"number:\" + type + \"-style\", payload, nopts);\n}\n\nfunction write_names_ods(Names, SheetNames, idx) {\n\tvar scoped = Names.filter(function(name) { return name.Sheet == (idx == -1 ? null : idx); });\n\tif(!scoped.length) return \"\";\n\treturn \" \\n\" + scoped.map(function(name) {\n\t\tvar odsref = csf_to_ods_3D(name.Ref);\n\t\treturn \" \" + writextag(\"table:named-range\", null, {\n\t\t\t\"table:name\": name.Name,\n\t\t\t\"table:cell-range-address\": odsref,\n\t\t\t\"table:base-cell-address\": odsref.replace(/[\\.]?[^\\.]*$/, \".$A$1\")\n\t\t});\n\t}).join(\"\\n\") + \"\\n \\n\";\n}\nvar write_content_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function() {\n\t/* 6.1.2 White Space Characters */\n\tvar write_text_p = function(text/*:string*/)/*:string*/ {\n\t\treturn escapexml(text)\n\t\t\t.replace(/ +/g, function($$){return '';})\n\t\t\t.replace(/\\t/g, \"\")\n\t\t\t.replace(/\\n/g, \"\")\n\t\t\t.replace(/^ /, \"\").replace(/ $/, \"\");\n\t};\n\n\tvar null_cell_xml = ' \\n';\n\tvar covered_cell_xml = ' \\n';\n\tvar write_ws = function(ws, wb/*:Workbook*/, i/*:number*/, opts, nfs)/*:string*/ {\n\t\t/* Section 9 Tables */\n\t\tvar o/*:Array*/ = [];\n\t\to.push(' \\n');\n\t\tvar R=0,C=0, range = decode_range(ws['!ref']||\"A1\");\n\t\tvar marr/*:Array*/ = ws['!merges'] || [], mi = 0;\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tif(ws[\"!cols\"]) {\n\t\t\tfor(C = 0; C <= range.e.c; ++C) o.push(' \\n');\n\t\t}\n\t\tvar H = \"\", ROWS = ws[\"!rows\"]||[];\n\t\tfor(R = 0; R < range.s.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push(' \\n');\n\t\t}\n\t\tfor(; R <= range.e.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push(' \\n');\n\t\t\tfor(C=0; C < range.s.c; ++C) o.push(null_cell_xml);\n\t\t\tfor(; C <= range.e.c; ++C) {\n\t\t\t\tvar skip = false, ct = {}, textp = \"\";\n\t\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\t\tct['table:number-columns-spanned'] = (marr[mi].e.c - marr[mi].s.c + 1);\n\t\t\t\t\tct['table:number-rows-spanned'] = (marr[mi].e.r - marr[mi].s.r + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(skip) { o.push(covered_cell_xml); continue; }\n\t\t\t\tvar ref = encode_cell({r:R, c:C}), cell = dense ? (ws[\"!data\"][R]||[])[C]: ws[ref];\n\t\t\t\tif(cell && cell.f) {\n\t\t\t\t\tct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\t\t\t\t\tif(cell.F) {\n\t\t\t\t\t\tif(cell.F.slice(0, ref.length) == ref) {\n\t\t\t\t\t\t\tvar _Fref = decode_range(cell.F);\n\t\t\t\t\t\t\tct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1);\n\t\t\t\t\t\t\tct['table:number-matrix-rows-spanned'] = (_Fref.e.r - _Fref.s.r + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!cell) { o.push(null_cell_xml); continue; }\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\ttextp = (cell.v ? 'TRUE' : 'FALSE');\n\t\t\t\t\t\tct['office:value-type'] = \"boolean\";\n\t\t\t\t\t\tct['office:boolean-value'] = (cell.v ? 'true' : 'false');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\ttextp = (cell.w||String(cell.v||0));\n\t\t\t\t\t\tct['office:value-type'] = \"float\";\n\t\t\t\t\t\tct['office:value'] = (cell.v||0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's': case 'str':\n\t\t\t\t\t\ttextp = cell.v == null ? \"\" : cell.v;\n\t\t\t\t\t\tct['office:value-type'] = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\ttextp = (cell.w||(parseDate(cell.v).toISOString()));\n\t\t\t\t\t\tct['office:value-type'] = \"date\";\n\t\t\t\t\t\tct['office:date-value'] = (parseDate(cell.v).toISOString());\n\t\t\t\t\t\tct['table:style-name'] = \"ce1\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'e':\n\t\t\t\t\tdefault: o.push(null_cell_xml); continue;\n\t\t\t\t}\n\t\t\t\tvar text_p = write_text_p(textp);\n\t\t\t\tif(cell.l && cell.l.Target) {\n\t\t\t\t\tvar _tgt = cell.l.Target;\n\t\t\t\t\t_tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;\n\t\t\t\t\t// TODO: choose correct parent path format based on link delimiters\n\t\t\t\t\tif(_tgt.charAt(0) != \"#\" && !_tgt.match(/^\\w+:/)) _tgt = '../' + _tgt;\n\t\t\t\t\ttext_p = writextag('text:a', text_p, {'xlink:href': _tgt.replace(/&/g, \"&\")});\n\t\t\t\t}\n\t\t\t\tif(nfs[cell.z]) ct[\"table:style-name\"] = \"ce\" + nfs[cell.z].slice(1);\n\t\t\t\to.push(' ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\\n');\n\t\t\t}\n\t\t\to.push(' \\n');\n\t\t}\n\t\tif((wb.Workbook||{}).Names) o.push(write_names_ods(wb.Workbook.Names, wb.SheetNames, i));\n\t\to.push(' \\n');\n\t\treturn o.join(\"\");\n\t};\n\n\tvar write_automatic_styles_ods = function(o/*:Array*/, wb) {\n\t\to.push(' \\n');\n\n\t\t/* column styles */\n\t\tvar cidx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!cols\"]) {\n\t\t\t\tfor(var C = 0; C < ws[\"!cols\"].length; ++C) if(ws[\"!cols\"][C]) {\n\t\t\t\t\tvar colobj = ws[\"!cols\"][C];\n\t\t\t\t\tif(colobj.width == null && colobj.wpx == null && colobj.wch == null) continue;\n\t\t\t\t\tprocess_col(colobj);\n\t\t\t\t\tcolobj.ods = cidx;\n\t\t\t\t\tvar w = ws[\"!cols\"][C].wpx + \"px\";\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\t++cidx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* row styles */\n\t\tvar ridx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!rows\"]) {\n\t\t\t\tfor(var R = 0; R < ws[\"!rows\"].length; ++R) if(ws[\"!rows\"][R]) {\n\t\t\t\t\tws[\"!rows\"][R].ods = ridx;\n\t\t\t\t\tvar h = ws[\"!rows\"][R].hpx + \"px\";\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\t++ridx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* table */\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* number formats, table cells, text */\n\t\tvar nfs = {};\n\t\tvar nfi = 69;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tvar dense = (ws[\"!data\"] != null);\n\t\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\t\tfor(var R = 0; R <= range.e.r; ++R) for(var C = 0; C <= range.e.c; ++C) {\n\t\t\t\tvar c = dense ? (ws[\"!data\"][R]||[])[C] : ws[encode_cell({r:R,c:C})];\n\t\t\t\tif(!c || !c.z || c.z.toLowerCase() == \"general\") continue;\n\t\t\t\tif(!nfs[c.z]) {\n\t\t\t\t\tvar out = write_number_format_ods(c.z, \"N\" + nfi);\n\t\t\t\t\tif(out) { nfs[c.z] = \"N\" + nfi; ++nfi; o.push(out + \"\\n\"); }\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\to.push(' \\n');\n\t\tkeys(nfs).forEach(function(nf) {\n\t\t\to.push('\\n');\n\t\t});\n\n\t\t/* page-layout */\n\n\t\to.push(' \\n');\n\t\treturn nfs;\n\t};\n\n\treturn function wcx(wb, opts) {\n\t\tvar o = [XML_HEADER];\n\t\t/* 3.1.3.2 */\n\t\tvar attr = wxt_helper({\n\t\t\t'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t\t'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t\t'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t\t'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t\t'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t\t'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t\t'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n\t\t\t'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n\t\t\t'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n\t\t\t'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t\t'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n\t\t\t'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t\t'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n\t\t\t'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n\t\t\t'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n\t\t\t'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n\t\t\t'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n\t\t\t'xmlns:ooo': \"http://openoffice.org/2004/office\",\n\t\t\t'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n\t\t\t'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n\t\t\t'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n\t\t\t'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n\t\t\t'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n\t\t\t'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n\t\t\t'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n\t\t\t'xmlns:rpt': \"http://openoffice.org/2005/report\",\n\t\t\t'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t\t'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n\t\t\t'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n\t\t\t'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n\t\t\t'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n\t\t\t'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n\t\t\t'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n\t\t\t'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n\t\t\t'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n\t\t\t'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n\t\t\t'office:version': \"1.2\"\n\t\t});\n\n\t\tvar fods = wxt_helper({\n\t\t\t'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n\t\t\t'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n\t\t});\n\n\t\tif(opts.bookType == \"fods\") {\n\t\t\to.push('\\n');\n\t\t\to.push(write_meta_ods().replace(//, \"\").replace(/<\\/office:document-meta>/, \"\") + \"\\n\");\n\t\t\t// TODO: settings (equiv of settings.xml for ODS)\n\t\t} else o.push('\\n');\n\t\t// o.push(' \\n');\n\t\tvar nfs = write_automatic_styles_ods(o, wb);\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tif(((wb.Workbook||{}).WBProps||{}).date1904) o.push(' \\n \\n \\n');\n\t\tfor(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts, nfs));\n\t\tif((wb.Workbook||{}).Names) o.push(write_names_ods(wb.Workbook.Names, wb.SheetNames, -1));\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tif(opts.bookType == \"fods\") o.push('');\n\t\telse o.push('');\n\t\treturn o.join(\"\");\n\t};\n})();\n\nfunction write_ods(wb/*:any*/, opts/*:any*/) {\n\tif(opts.bookType == \"fods\") return write_content_ods(wb, opts);\n\n\tvar zip = zip_new();\n\tvar f = \"\";\n\n\tvar manifest/*:Array >*/ = [];\n\tvar rdf/*:Array<[string, string]>*/ = [];\n\n\t/* Part 3 Section 3.3 MIME Media Type */\n\tf = \"mimetype\";\n\tzip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n\n\t/* Part 1 Section 2.2 Documents */\n\tf = \"content.xml\";\n\tzip_add_file(zip, f, write_content_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"ContentFile\"]);\n\n\t/* TODO: these are hard-coded styles to satiate excel */\n\tf = \"styles.xml\";\n\tzip_add_file(zip, f, write_styles_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"StylesFile\"]);\n\n\t/* TODO: this is hard-coded to satiate excel */\n\tf = \"meta.xml\";\n\tzip_add_file(zip, f, XML_HEADER + write_meta_ods(/*::wb, opts*/));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"MetadataFile\"]);\n\n\t/* Part 3 Section 6 Metadata Manifest File */\n\tf = \"manifest.rdf\";\n\tzip_add_file(zip, f, write_rdf(rdf/*, opts*/));\n\tmanifest.push([f, \"application/rdf+xml\"]);\n\n\t/* Part 3 Section 4 Manifest File */\n\tf = \"META-INF/manifest.xml\";\n\tzip_add_file(zip, f, write_manifest(manifest/*, opts*/));\n\n\treturn zip;\n}\n\n/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */\nvar subarray = function() {\n try {\n if (typeof Uint8Array == \"undefined\")\n return \"slice\";\n if (typeof Uint8Array.prototype.subarray == \"undefined\")\n return \"slice\";\n if (typeof Buffer !== \"undefined\") {\n if (typeof Buffer.prototype.subarray == \"undefined\")\n return \"slice\";\n if ((typeof Buffer.from == \"function\" ? Buffer.from([72, 62]) : new Buffer([72, 62])) instanceof Uint8Array)\n return \"subarray\";\n return \"slice\";\n }\n return \"subarray\";\n } catch (e) {\n return \"slice\";\n }\n}();\nfunction u8_to_dataview(array) {\n return new DataView(array.buffer, array.byteOffset, array.byteLength);\n}\nfunction u8str(u8) {\n return typeof TextDecoder != \"undefined\" ? new TextDecoder().decode(u8) : utf8read(a2s(u8));\n}\nfunction stru8(str) {\n return typeof TextEncoder != \"undefined\" ? new TextEncoder().encode(str) : s2a(utf8write(str));\n}\nfunction u8concat(u8a) {\n var len = 0;\n for (var i = 0; i < u8a.length; ++i)\n len += u8a[i].length;\n var out = new Uint8Array(len);\n var off = 0;\n for (i = 0; i < u8a.length; ++i) {\n var u8 = u8a[i], L = u8.length;\n if (L < 250) {\n for (var j = 0; j < L; ++j)\n out[off++] = u8[j];\n } else {\n out.set(u8, off);\n off += L;\n }\n }\n return out;\n}\nfunction popcnt(x) {\n x -= x >> 1 & 1431655765;\n x = (x & 858993459) + (x >> 2 & 858993459);\n return (x + (x >> 4) & 252645135) * 16843009 >>> 24;\n}\nfunction readDecimal128LE(buf, offset) {\n var exp = (buf[offset + 15] & 127) << 7 | buf[offset + 14] >> 1;\n var mantissa = buf[offset + 14] & 1;\n for (var j = offset + 13; j >= offset; --j)\n mantissa = mantissa * 256 + buf[j];\n return (buf[offset + 15] & 128 ? -mantissa : mantissa) * Math.pow(10, exp - 6176);\n}\nfunction writeDecimal128LE(buf, offset, value) {\n var exp = Math.floor(value == 0 ? 0 : Math.LOG10E * Math.log(Math.abs(value))) + 6176 - 16;\n var mantissa = value / Math.pow(10, exp - 6176);\n buf[offset + 15] |= exp >> 7;\n buf[offset + 14] |= (exp & 127) << 1;\n for (var i = 0; mantissa >= 1; ++i, mantissa /= 256)\n buf[offset + i] = mantissa & 255;\n buf[offset + 15] |= value >= 0 ? 0 : 128;\n}\nfunction parse_varint49(buf, ptr) {\n var l = ptr.l;\n var usz = buf[l] & 127;\n varint:\n if (buf[l++] >= 128) {\n usz |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n break varint;\n usz |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n break varint;\n usz |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 28);\n ++l;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 35);\n ++l;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 42);\n ++l;\n if (buf[l++] < 128)\n break varint;\n }\n ptr.l = l;\n return usz;\n}\nfunction write_varint49(v) {\n var usz = new Uint8Array(7);\n usz[0] = v & 127;\n var L = 1;\n sz:\n if (v > 127) {\n usz[L - 1] |= 128;\n usz[L] = v >> 7 & 127;\n ++L;\n if (v <= 16383)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v >> 14 & 127;\n ++L;\n if (v <= 2097151)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v >> 21 & 127;\n ++L;\n if (v <= 268435455)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 256 >>> 21 & 127;\n ++L;\n if (v <= 34359738367)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 65536 >>> 21 & 127;\n ++L;\n if (v <= 4398046511103)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 16777216 >>> 21 & 127;\n ++L;\n }\n return usz[subarray](0, L);\n}\nfunction parse_packed_varints(buf) {\n var ptr = { l: 0 };\n var out = [];\n while (ptr.l < buf.length)\n out.push(parse_varint49(buf, ptr));\n return out;\n}\nfunction write_packed_varints(nums) {\n return u8concat(nums.map(function(x) {\n return write_varint49(x);\n }));\n}\nfunction varint_to_i32(buf) {\n var l = 0, i32 = buf[l] & 127;\n varint:\n if (buf[l++] >= 128) {\n i32 |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n break varint;\n i32 |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n break varint;\n i32 |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n break varint;\n i32 |= (buf[l] & 127) << 28;\n }\n return i32;\n}\nfunction varint_to_u64(buf) {\n var l = 0, lo = buf[l] & 127, hi = 0;\n varint:\n if (buf[l++] >= 128) {\n lo |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n break varint;\n lo |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n break varint;\n lo |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n break varint;\n lo |= (buf[l] & 127) << 28;\n hi = buf[l] >> 4 & 7;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 3;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 10;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 17;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 24;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 31;\n }\n return [lo >>> 0, hi >>> 0];\n}\nfunction parse_shallow(buf) {\n var out = [], ptr = { l: 0 };\n while (ptr.l < buf.length) {\n var off = ptr.l;\n var num = parse_varint49(buf, ptr);\n var type = num & 7;\n num = num / 8 | 0;\n var data;\n var l = ptr.l;\n switch (type) {\n case 0:\n {\n while (buf[l++] >= 128)\n ;\n data = buf[subarray](ptr.l, l);\n ptr.l = l;\n }\n break;\n case 1:\n {\n data = buf[subarray](l, l + 8);\n ptr.l = l + 8;\n }\n break;\n case 2:\n {\n var len = parse_varint49(buf, ptr);\n data = buf[subarray](ptr.l, ptr.l + len);\n ptr.l += len;\n }\n break;\n case 5:\n {\n data = buf[subarray](l, l + 4);\n ptr.l = l + 4;\n }\n break;\n default:\n throw new Error(\"PB Type \".concat(type, \" for Field \").concat(num, \" at offset \").concat(off));\n }\n var v = { data: data, type: type };\n if (out[num] == null)\n out[num] = [];\n out[num].push(v);\n }\n return out;\n}\nfunction write_shallow(proto) {\n var out = [];\n proto.forEach(function(field, idx) {\n if (idx == 0)\n return;\n field.forEach(function(item) {\n if (!item.data)\n return;\n out.push(write_varint49(idx * 8 + item.type));\n if (item.type == 2)\n out.push(write_varint49(item.data.length));\n out.push(item.data);\n });\n });\n return u8concat(out);\n}\nfunction mappa(data, cb) {\n return (data == null ? void 0 : data.map(function(d) {\n return cb(d.data);\n })) || [];\n}\nfunction parse_iwa_file(buf) {\n var _a;\n var out = [], ptr = { l: 0 };\n while (ptr.l < buf.length) {\n var len = parse_varint49(buf, ptr);\n var ai = parse_shallow(buf[subarray](ptr.l, ptr.l + len));\n ptr.l += len;\n var res = {\n id: varint_to_i32(ai[1][0].data),\n messages: []\n };\n ai[2].forEach(function(b) {\n var mi = parse_shallow(b.data);\n var fl = varint_to_i32(mi[3][0].data);\n res.messages.push({\n meta: mi,\n data: buf[subarray](ptr.l, ptr.l + fl)\n });\n ptr.l += fl;\n });\n if ((_a = ai[3]) == null ? void 0 : _a[0])\n res.merge = varint_to_i32(ai[3][0].data) >>> 0 > 0;\n out.push(res);\n }\n return out;\n}\nfunction write_iwa_file(ias) {\n var bufs = [];\n ias.forEach(function(ia) {\n var ai = [\n [],\n [{ data: write_varint49(ia.id), type: 0 }],\n []\n ];\n if (ia.merge != null)\n ai[3] = [{ data: write_varint49(+!!ia.merge), type: 0 }];\n var midata = [];\n ia.messages.forEach(function(mi) {\n midata.push(mi.data);\n mi.meta[3] = [{ type: 0, data: write_varint49(mi.data.length) }];\n ai[2].push({ data: write_shallow(mi.meta), type: 2 });\n });\n var aipayload = write_shallow(ai);\n bufs.push(write_varint49(aipayload.length));\n bufs.push(aipayload);\n midata.forEach(function(mid) {\n return bufs.push(mid);\n });\n });\n return u8concat(bufs);\n}\nfunction parse_snappy_chunk(type, buf) {\n if (type != 0)\n throw new Error(\"Unexpected Snappy chunk type \".concat(type));\n var ptr = { l: 0 };\n var usz = parse_varint49(buf, ptr);\n var chunks = [];\n var l = ptr.l;\n while (l < buf.length) {\n var tag = buf[l] & 3;\n if (tag == 0) {\n var len = buf[l++] >> 2;\n if (len < 60)\n ++len;\n else {\n var c = len - 59;\n len = buf[l];\n if (c > 1)\n len |= buf[l + 1] << 8;\n if (c > 2)\n len |= buf[l + 2] << 16;\n if (c > 3)\n len |= buf[l + 3] << 24;\n len >>>= 0;\n len++;\n l += c;\n }\n chunks.push(buf[subarray](l, l + len));\n l += len;\n continue;\n } else {\n var offset = 0, length = 0;\n if (tag == 1) {\n length = (buf[l] >> 2 & 7) + 4;\n offset = (buf[l++] & 224) << 3;\n offset |= buf[l++];\n } else {\n length = (buf[l++] >> 2) + 1;\n if (tag == 2) {\n offset = buf[l] | buf[l + 1] << 8;\n l += 2;\n } else {\n offset = (buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16 | buf[l + 3] << 24) >>> 0;\n l += 4;\n }\n }\n if (offset == 0)\n throw new Error(\"Invalid offset 0\");\n var j = chunks.length - 1, off = offset;\n while (j >= 0 && off >= chunks[j].length) {\n off -= chunks[j].length;\n --j;\n }\n if (j < 0) {\n if (off == 0)\n off = chunks[j = 0].length;\n else\n throw new Error(\"Invalid offset beyond length\");\n }\n if (length < off)\n chunks.push(chunks[j][subarray](chunks[j].length - off, chunks[j].length - off + length));\n else {\n if (off > 0) {\n chunks.push(chunks[j][subarray](chunks[j].length - off));\n length -= off;\n }\n ++j;\n while (length >= chunks[j].length) {\n chunks.push(chunks[j]);\n length -= chunks[j].length;\n ++j;\n }\n if (length)\n chunks.push(chunks[j][subarray](0, length));\n }\n if (chunks.length > 25)\n chunks = [u8concat(chunks)];\n }\n }\n var clen = 0;\n for (var u8i = 0; u8i < chunks.length; ++u8i)\n clen += chunks[u8i].length;\n if (clen != usz)\n throw new Error(\"Unexpected length: \".concat(clen, \" != \").concat(usz));\n return chunks;\n}\nfunction decompress_iwa_file(buf) {\n if (Array.isArray(buf))\n buf = new Uint8Array(buf);\n var out = [];\n var l = 0;\n while (l < buf.length) {\n var t = buf[l++];\n var len = buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16;\n l += 3;\n out.push.apply(out, parse_snappy_chunk(t, buf[subarray](l, l + len)));\n l += len;\n }\n if (l !== buf.length)\n throw new Error(\"data is not a valid framed stream!\");\n return out.length == 1 ? out[0] : u8concat(out);\n}\nfunction compress_iwa_file(buf) {\n var out = [];\n var l = 0;\n while (l < buf.length) {\n var c = Math.min(buf.length - l, 268435455);\n var frame = new Uint8Array(4);\n out.push(frame);\n var usz = write_varint49(c);\n var L = usz.length;\n out.push(usz);\n if (c <= 60) {\n L++;\n out.push(new Uint8Array([c - 1 << 2]));\n } else if (c <= 256) {\n L += 2;\n out.push(new Uint8Array([240, c - 1 & 255]));\n } else if (c <= 65536) {\n L += 3;\n out.push(new Uint8Array([244, c - 1 & 255, c - 1 >> 8 & 255]));\n } else if (c <= 16777216) {\n L += 4;\n out.push(new Uint8Array([248, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255]));\n } else if (c <= 4294967296) {\n L += 5;\n out.push(new Uint8Array([252, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255, c - 1 >>> 24 & 255]));\n }\n out.push(buf[subarray](l, l + c));\n L += c;\n frame[0] = 0;\n frame[1] = L & 255;\n frame[2] = L >> 8 & 255;\n frame[3] = L >> 16 & 255;\n l += c;\n }\n return u8concat(out);\n}\nvar numbers_lut_new = function() {\n return { sst: [], rsst: [], ofmt: [], nfmt: [] };\n};\nfunction numbers_format_cell(cell, t, flags, ofmt, nfmt) {\n var _a, _b, _c, _d;\n var ctype = t & 255, ver = t >> 8;\n var fmt = ver >= 5 ? nfmt : ofmt;\n dur:\n if (flags & (ver > 4 ? 8 : 4) && cell.t == \"n\" && ctype == 7) {\n var dstyle = ((_a = fmt[7]) == null ? void 0 : _a[0]) ? varint_to_i32(fmt[7][0].data) : -1;\n if (dstyle == -1)\n break dur;\n var dmin = ((_b = fmt[15]) == null ? void 0 : _b[0]) ? varint_to_i32(fmt[15][0].data) : -1;\n var dmax = ((_c = fmt[16]) == null ? void 0 : _c[0]) ? varint_to_i32(fmt[16][0].data) : -1;\n var auto = ((_d = fmt[40]) == null ? void 0 : _d[0]) ? varint_to_i32(fmt[40][0].data) : -1;\n var d = cell.v, dd = d;\n autodur:\n if (auto) {\n if (d == 0) {\n dmin = dmax = 2;\n break autodur;\n }\n if (d >= 604800)\n dmin = 1;\n else if (d >= 86400)\n dmin = 2;\n else if (d >= 3600)\n dmin = 4;\n else if (d >= 60)\n dmin = 8;\n else if (d >= 1)\n dmin = 16;\n else\n dmin = 32;\n if (Math.floor(d) != d)\n dmax = 32;\n else if (d % 60)\n dmax = 16;\n else if (d % 3600)\n dmax = 8;\n else if (d % 86400)\n dmax = 4;\n else if (d % 604800)\n dmax = 2;\n if (dmax < dmin)\n dmax = dmin;\n }\n if (dmin == -1 || dmax == -1)\n break dur;\n var dstr = [], zstr = [];\n if (dmin == 1) {\n dd = d / 604800;\n if (dmax == 1) {\n zstr.push('d\"d\"');\n } else {\n dd |= 0;\n d -= 604800 * dd;\n }\n dstr.push(dd + (dstyle == 2 ? \" week\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"w\" : \"\"));\n }\n if (dmin <= 2 && dmax >= 2) {\n dd = d / 86400;\n if (dmax > 2) {\n dd |= 0;\n d -= 86400 * dd;\n }\n zstr.push('d\"d\"');\n dstr.push(dd + (dstyle == 2 ? \" day\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"d\" : \"\"));\n }\n if (dmin <= 4 && dmax >= 4) {\n dd = d / 3600;\n if (dmax > 4) {\n dd |= 0;\n d -= 3600 * dd;\n }\n zstr.push((dmin >= 4 ? \"[h]\" : \"h\") + '\"h\"');\n dstr.push(dd + (dstyle == 2 ? \" hour\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"h\" : \"\"));\n }\n if (dmin <= 8 && dmax >= 8) {\n dd = d / 60;\n if (dmax > 8) {\n dd |= 0;\n d -= 60 * dd;\n }\n zstr.push((dmin >= 8 ? \"[m]\" : \"m\") + '\"m\"');\n if (dstyle == 0)\n dstr.push((dmin == 8 && dmax == 8 || dd >= 10 ? \"\" : \"0\") + dd);\n else\n dstr.push(dd + (dstyle == 2 ? \" minute\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"m\" : \"\"));\n }\n if (dmin <= 16 && dmax >= 16) {\n dd = d;\n if (dmax > 16) {\n dd |= 0;\n d -= dd;\n }\n zstr.push((dmin >= 16 ? \"[s]\" : \"s\") + '\"s\"');\n if (dstyle == 0)\n dstr.push((dmax == 16 && dmin == 16 || dd >= 10 ? \"\" : \"0\") + dd);\n else\n dstr.push(dd + (dstyle == 2 ? \" second\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"s\" : \"\"));\n }\n if (dmax >= 32) {\n dd = Math.round(1e3 * d);\n if (dmin < 32)\n zstr.push('.000\"ms\"');\n if (dstyle == 0)\n dstr.push((dd >= 100 ? \"\" : dd >= 10 ? \"0\" : \"00\") + dd);\n else\n dstr.push(dd + (dstyle == 2 ? \" millisecond\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"ms\" : \"\"));\n }\n cell.w = dstr.join(dstyle == 0 ? \":\" : \" \");\n cell.z = zstr.join(dstyle == 0 ? '\":\"' : \" \");\n if (dstyle == 0)\n cell.w = cell.w.replace(/:(\\d\\d\\d)$/, \".$1\");\n }\n}\nfunction parse_old_storage(buf, lut, v) {\n var dv = u8_to_dataview(buf);\n var flags = dv.getUint32(4, true);\n var ridx = -1, sidx = -1, zidx = -1, ieee = NaN, dt = new Date(2001, 0, 1);\n var doff = v > 1 ? 12 : 8;\n if (flags & 2) {\n zidx = dv.getUint32(doff, true);\n doff += 4;\n }\n doff += popcnt(flags & (v > 1 ? 3468 : 396)) * 4;\n if (flags & 512) {\n ridx = dv.getUint32(doff, true);\n doff += 4;\n }\n doff += popcnt(flags & (v > 1 ? 12288 : 4096)) * 4;\n if (flags & 16) {\n sidx = dv.getUint32(doff, true);\n doff += 4;\n }\n if (flags & 32) {\n ieee = dv.getFloat64(doff, true);\n doff += 8;\n }\n if (flags & 64) {\n dt.setTime(dt.getTime() + dv.getFloat64(doff, true) * 1e3);\n doff += 8;\n }\n if (v > 1) {\n flags = dv.getUint32(8, true) >>> 16;\n if (flags & 255) {\n if (zidx == -1)\n zidx = dv.getUint32(doff, true);\n doff += 4;\n }\n }\n var ret;\n var t = buf[v >= 4 ? 1 : 2];\n switch (t) {\n case 0:\n return void 0;\n case 2:\n ret = { t: \"n\", v: ieee };\n break;\n case 3:\n ret = { t: \"s\", v: lut.sst[sidx] };\n break;\n case 5:\n ret = { t: \"d\", v: dt };\n break;\n case 6:\n ret = { t: \"b\", v: ieee > 0 };\n break;\n case 7:\n ret = { t: \"n\", v: ieee };\n break;\n case 8:\n ret = { t: \"e\", v: 0 };\n break;\n case 9:\n {\n if (ridx > -1)\n ret = { t: \"s\", v: lut.rsst[ridx] };\n else\n throw new Error(\"Unsupported cell type \".concat(buf[subarray](0, 4)));\n }\n break;\n default:\n throw new Error(\"Unsupported cell type \".concat(buf[subarray](0, 4)));\n }\n if (zidx > -1)\n numbers_format_cell(ret, t | v << 8, flags, lut.ofmt[zidx], lut.nfmt[zidx]);\n if (t == 7)\n ret.v /= 86400;\n return ret;\n}\nfunction parse_new_storage(buf, lut) {\n var dv = u8_to_dataview(buf);\n var flags = dv.getUint32(4, true);\n var fields = dv.getUint32(8, true);\n var doff = 12;\n var ridx = -1, sidx = -1, zidx = -1, d128 = NaN, ieee = NaN, dt = new Date(2001, 0, 1);\n if (fields & 1) {\n d128 = readDecimal128LE(buf, doff);\n doff += 16;\n }\n if (fields & 2) {\n ieee = dv.getFloat64(doff, true);\n doff += 8;\n }\n if (fields & 4) {\n dt.setTime(dt.getTime() + dv.getFloat64(doff, true) * 1e3);\n doff += 8;\n }\n if (fields & 8) {\n sidx = dv.getUint32(doff, true);\n doff += 4;\n }\n if (fields & 16) {\n ridx = dv.getUint32(doff, true);\n doff += 4;\n }\n var ret;\n var t = buf[1];\n switch (t) {\n case 0:\n return void 0;\n case 2:\n ret = { t: \"n\", v: d128 };\n break;\n case 3:\n ret = { t: \"s\", v: lut.sst[sidx] };\n break;\n case 5:\n ret = { t: \"d\", v: dt };\n break;\n case 6:\n ret = { t: \"b\", v: ieee > 0 };\n break;\n case 7:\n ret = { t: \"n\", v: ieee };\n break;\n case 8:\n ret = { t: \"e\", v: 0 };\n break;\n case 9:\n ret = { t: \"s\", v: lut.rsst[ridx] };\n break;\n case 10:\n ret = { t: \"n\", v: d128 };\n break;\n default:\n throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(fields & 31, \" : \").concat(buf[subarray](0, 4)));\n }\n doff += popcnt(fields & 8160) * 4;\n if (fields & 516096) {\n if (zidx == -1)\n zidx = dv.getUint32(doff, true);\n doff += 4;\n }\n if (zidx > -1)\n numbers_format_cell(ret, t | 5 << 8, fields >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);\n if (t == 7)\n ret.v /= 86400;\n return ret;\n}\nfunction write_new_storage(cell, sst) {\n var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;\n out[0] = 5;\n switch (cell.t) {\n case \"n\":\n out[1] = 2;\n writeDecimal128LE(out, l, cell.v);\n flags |= 1;\n l += 16;\n break;\n case \"b\":\n out[1] = 6;\n dv.setFloat64(l, cell.v ? 1 : 0, true);\n flags |= 2;\n l += 8;\n break;\n case \"s\":\n var s = cell.v == null ? \"\" : String(cell.v);\n var isst = sst.indexOf(s);\n if (isst == -1)\n sst[isst = sst.length] = s;\n out[1] = 3;\n dv.setUint32(l, isst, true);\n flags |= 8;\n l += 4;\n break;\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n dv.setUint32(8, flags, true);\n return out[subarray](0, l);\n}\nfunction write_old_storage(cell, sst) {\n var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;\n out[0] = 4;\n switch (cell.t) {\n case \"n\":\n out[2] = 2;\n dv.setFloat64(l, cell.v, true);\n flags |= 32;\n l += 8;\n break;\n case \"b\":\n out[2] = 6;\n dv.setFloat64(l, cell.v ? 1 : 0, true);\n flags |= 32;\n l += 8;\n break;\n case \"s\":\n var s = cell.v == null ? \"\" : String(cell.v);\n var isst = sst.indexOf(s);\n if (isst == -1)\n sst[isst = sst.length] = s;\n out[2] = 3;\n dv.setUint32(l, isst, true);\n flags |= 16;\n l += 4;\n break;\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n dv.setUint32(8, flags, true);\n return out[subarray](0, l);\n}\nfunction parse_cell_storage(buf, lut) {\n switch (buf[0]) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n return parse_old_storage(buf, lut, buf[0]);\n case 5:\n return parse_new_storage(buf, lut);\n default:\n throw new Error(\"Unsupported payload version \".concat(buf[0]));\n }\n}\nfunction parse_TSP_Reference(buf) {\n var pb = parse_shallow(buf);\n return varint_to_i32(pb[1][0].data);\n}\nfunction write_TSP_Reference(idx) {\n return write_shallow([\n [],\n [{ type: 0, data: write_varint49(idx) }]\n ]);\n}\nfunction numbers_add_oref(iwa, ref) {\n var _a;\n var orefs = ((_a = iwa.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(iwa.messages[0].meta[5][0].data) : [];\n var orefidx = orefs.indexOf(ref);\n if (orefidx == -1) {\n orefs.push(ref);\n iwa.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];\n }\n}\nfunction numbers_del_oref(iwa, ref) {\n var _a;\n var orefs = ((_a = iwa.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(iwa.messages[0].meta[5][0].data) : [];\n iwa.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs.filter(function(r) {\n return r != ref;\n })) }];\n}\nfunction parse_TST_TableDataList(M, root) {\n var pb = parse_shallow(root.data);\n var type = varint_to_i32(pb[1][0].data);\n var entries = pb[3];\n var data = [];\n (entries || []).forEach(function(entry) {\n var le = parse_shallow(entry.data);\n if (!le[1])\n return;\n var key = varint_to_i32(le[1][0].data) >>> 0;\n switch (type) {\n case 1:\n data[key] = u8str(le[3][0].data);\n break;\n case 8:\n {\n var rt = M[parse_TSP_Reference(le[9][0].data)][0];\n var rtp = parse_shallow(rt.data);\n var rtpref = M[parse_TSP_Reference(rtp[1][0].data)][0];\n var mtype = varint_to_i32(rtpref.meta[1][0].data);\n if (mtype != 2001)\n throw new Error(\"2000 unexpected reference to \".concat(mtype));\n var tswpsa = parse_shallow(rtpref.data);\n data[key] = tswpsa[3].map(function(x) {\n return u8str(x.data);\n }).join(\"\");\n }\n break;\n case 2:\n data[key] = parse_shallow(le[6][0].data);\n break;\n default:\n throw type;\n }\n });\n return data;\n}\nfunction parse_TST_TileRowInfo(u8, type) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;\n var pb = parse_shallow(u8);\n var R = varint_to_i32(pb[1][0].data) >>> 0;\n var cnt = varint_to_i32(pb[2][0].data) >>> 0;\n var wide_offsets = ((_b = (_a = pb[8]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data) && varint_to_i32(pb[8][0].data) > 0 || false;\n var used_storage_u8, used_storage;\n if (((_d = (_c = pb[7]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && type != 0) {\n used_storage_u8 = (_f = (_e = pb[7]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data;\n used_storage = (_h = (_g = pb[6]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data;\n } else if (((_j = (_i = pb[4]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data) && type != 1) {\n used_storage_u8 = (_l = (_k = pb[4]) == null ? void 0 : _k[0]) == null ? void 0 : _l.data;\n used_storage = (_n = (_m = pb[3]) == null ? void 0 : _m[0]) == null ? void 0 : _n.data;\n } else\n throw \"NUMBERS Tile missing \".concat(type, \" cell storage\");\n var width = wide_offsets ? 4 : 1;\n var used_storage_offsets = u8_to_dataview(used_storage_u8);\n var offsets = [];\n for (var C = 0; C < used_storage_u8.length / 2; ++C) {\n var off = used_storage_offsets.getUint16(C * 2, true);\n if (off < 65535)\n offsets.push([C, off]);\n }\n if (offsets.length != cnt)\n throw \"Expected \".concat(cnt, \" cells, found \").concat(offsets.length);\n var cells = [];\n for (C = 0; C < offsets.length - 1; ++C)\n cells[offsets[C][0]] = used_storage[subarray](offsets[C][1] * width, offsets[C + 1][1] * width);\n if (offsets.length >= 1)\n cells[offsets[offsets.length - 1][0]] = used_storage[subarray](offsets[offsets.length - 1][1] * width);\n return { R: R, cells: cells };\n}\nfunction parse_TST_Tile(M, root) {\n var _a;\n var pb = parse_shallow(root.data);\n var storage = -1;\n if ((_a = pb == null ? void 0 : pb[7]) == null ? void 0 : _a[0]) {\n if (varint_to_i32(pb[7][0].data) >>> 0)\n storage = 1;\n else\n storage = 0;\n }\n var ri = mappa(pb[5], function(u8) {\n return parse_TST_TileRowInfo(u8, storage);\n });\n return {\n nrows: varint_to_i32(pb[4][0].data) >>> 0,\n data: ri.reduce(function(acc, x) {\n if (!acc[x.R])\n acc[x.R] = [];\n x.cells.forEach(function(cell, C) {\n if (acc[x.R][C])\n throw new Error(\"Duplicate cell r=\".concat(x.R, \" c=\").concat(C));\n acc[x.R][C] = cell;\n });\n return acc;\n }, [])\n };\n}\nfunction parse_TST_TableModelArchive(M, root, ws) {\n var _a, _b, _c, _d, _e, _f;\n var pb = parse_shallow(root.data);\n var range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };\n range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1;\n if (range.e.r < 0)\n throw new Error(\"Invalid row varint \".concat(pb[6][0].data));\n range.e.c = (varint_to_i32(pb[7][0].data) >>> 0) - 1;\n if (range.e.c < 0)\n throw new Error(\"Invalid col varint \".concat(pb[7][0].data));\n ws[\"!ref\"] = encode_range(range);\n var dense = ws[\"!data\"] != null, dws = ws;\n var store = parse_shallow(pb[4][0].data);\n var lut = numbers_lut_new();\n if ((_a = store[4]) == null ? void 0 : _a[0])\n lut.sst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[4][0].data)][0]);\n if ((_b = store[11]) == null ? void 0 : _b[0])\n lut.ofmt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[11][0].data)][0]);\n if ((_c = store[17]) == null ? void 0 : _c[0])\n lut.rsst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[17][0].data)][0]);\n if ((_d = store[22]) == null ? void 0 : _d[0])\n lut.nfmt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[22][0].data)][0]);\n var tile = parse_shallow(store[3][0].data);\n var _R = 0;\n tile[1].forEach(function(t) {\n var tl = parse_shallow(t.data);\n var ref2 = M[parse_TSP_Reference(tl[2][0].data)][0];\n var mtype2 = varint_to_i32(ref2.meta[1][0].data);\n if (mtype2 != 6002)\n throw new Error(\"6001 unexpected reference to \".concat(mtype2));\n var _tile = parse_TST_Tile(M, ref2);\n _tile.data.forEach(function(row, R) {\n row.forEach(function(buf, C) {\n var res = parse_cell_storage(buf, lut);\n if (res) {\n if (dense) {\n if (!dws[\"!data\"][_R + R])\n dws[\"!data\"][_R + R] = [];\n dws[\"!data\"][_R + R][C] = res;\n } else {\n ws[encode_col(C) + encode_row(_R + R)] = res;\n }\n }\n });\n });\n _R += _tile.nrows;\n });\n if ((_e = store[13]) == null ? void 0 : _e[0]) {\n var ref = M[parse_TSP_Reference(store[13][0].data)][0];\n var mtype = varint_to_i32(ref.meta[1][0].data);\n if (mtype != 6144)\n throw new Error(\"Expected merge type 6144, found \".concat(mtype));\n ws[\"!merges\"] = (_f = parse_shallow(ref.data)) == null ? void 0 : _f[1].map(function(pi) {\n var merge = parse_shallow(pi.data);\n var origin = u8_to_dataview(parse_shallow(merge[1][0].data)[1][0].data), size = u8_to_dataview(parse_shallow(merge[2][0].data)[1][0].data);\n return {\n s: { r: origin.getUint16(0, true), c: origin.getUint16(2, true) },\n e: {\n r: origin.getUint16(0, true) + size.getUint16(0, true) - 1,\n c: origin.getUint16(2, true) + size.getUint16(2, true) - 1\n }\n };\n });\n }\n}\nfunction parse_TST_TableInfoArchive(M, root, opts) {\n var pb = parse_shallow(root.data);\n var out = { \"!ref\": \"A1\" };\n if (opts == null ? void 0 : opts.dense)\n out[\"!data\"] = [];\n var tableref = M[parse_TSP_Reference(pb[2][0].data)];\n var mtype = varint_to_i32(tableref[0].meta[1][0].data);\n if (mtype != 6001)\n throw new Error(\"6000 unexpected reference to \".concat(mtype));\n parse_TST_TableModelArchive(M, tableref[0], out);\n return out;\n}\nfunction parse_TN_SheetArchive(M, root, opts) {\n var _a;\n var pb = parse_shallow(root.data);\n var out = {\n name: ((_a = pb[1]) == null ? void 0 : _a[0]) ? u8str(pb[1][0].data) : \"\",\n sheets: []\n };\n var shapeoffs = mappa(pb[2], parse_TSP_Reference);\n shapeoffs.forEach(function(off) {\n M[off].forEach(function(m) {\n var mtype = varint_to_i32(m.meta[1][0].data);\n if (mtype == 6e3)\n out.sheets.push(parse_TST_TableInfoArchive(M, m, opts));\n });\n });\n return out;\n}\nfunction parse_TN_DocumentArchive(M, root, opts) {\n var _a;\n var out = book_new();\n var pb = parse_shallow(root.data);\n if ((_a = pb[2]) == null ? void 0 : _a[0])\n throw new Error(\"Keynote presentations are not supported\");\n var sheetoffs = mappa(pb[1], parse_TSP_Reference);\n sheetoffs.forEach(function(off) {\n M[off].forEach(function(m) {\n var mtype = varint_to_i32(m.meta[1][0].data);\n if (mtype == 2) {\n var root2 = parse_TN_SheetArchive(M, m, opts);\n root2.sheets.forEach(function(sheet, idx) {\n book_append_sheet(out, sheet, idx == 0 ? root2.name : root2.name + \"_\" + idx, true);\n });\n }\n });\n });\n if (out.SheetNames.length == 0)\n throw new Error(\"Empty NUMBERS file\");\n out.bookType = \"numbers\";\n return out;\n}\nfunction parse_numbers_iwa(cfb, opts) {\n var _a, _b, _c, _d, _e, _f, _g;\n var M = {}, indices = [];\n cfb.FullPaths.forEach(function(p) {\n if (p.match(/\\.iwpv2/))\n throw new Error(\"Unsupported password protection\");\n });\n cfb.FileIndex.forEach(function(s) {\n if (!s.name.match(/\\.iwa$/))\n return;\n if (s.content[0] == 98)\n return;\n var o;\n try {\n o = decompress_iwa_file(s.content);\n } catch (e) {\n return console.log(\"?? \" + s.content.length + \" \" + (e.message || e));\n }\n var packets;\n try {\n packets = parse_iwa_file(o);\n } catch (e) {\n return console.log(\"## \" + (e.message || e));\n }\n packets.forEach(function(packet) {\n M[packet.id] = packet.messages;\n indices.push(packet.id);\n });\n });\n if (!indices.length)\n throw new Error(\"File has no messages\");\n if (((_c = (_b = (_a = M == null ? void 0 : M[1]) == null ? void 0 : _a[0].meta) == null ? void 0 : _b[1]) == null ? void 0 : _c[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1e4)\n throw new Error(\"Pages documents are not supported\");\n var docroot = ((_g = (_f = (_e = (_d = M == null ? void 0 : M[1]) == null ? void 0 : _d[0]) == null ? void 0 : _e.meta) == null ? void 0 : _f[1]) == null ? void 0 : _g[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1 && M[1][0];\n if (!docroot)\n indices.forEach(function(idx) {\n M[idx].forEach(function(iwam) {\n var mtype = varint_to_i32(iwam.meta[1][0].data) >>> 0;\n if (mtype == 1) {\n if (!docroot)\n docroot = iwam;\n else\n throw new Error(\"Document has multiple roots\");\n }\n });\n });\n if (!docroot)\n throw new Error(\"Cannot find Document root\");\n return parse_TN_DocumentArchive(M, docroot, opts);\n}\nfunction write_TST_TileRowInfo(data, SST, wide) {\n var _a, _b;\n var tri = [\n [],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 2, data: new Uint8Array([]) }],\n [{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {\n return 255;\n })) }],\n [{ type: 0, data: write_varint49(5) }],\n [{ type: 2, data: new Uint8Array([]) }],\n [{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {\n return 255;\n })) }],\n [{ type: 0, data: write_varint49(1) }]\n ];\n if (!((_a = tri[6]) == null ? void 0 : _a[0]) || !((_b = tri[7]) == null ? void 0 : _b[0]))\n throw \"Mutation only works on post-BNC storages!\";\n var cnt = 0;\n if (tri[7][0].data.length < 2 * data.length) {\n var new_7 = new Uint8Array(2 * data.length);\n new_7.set(tri[7][0].data);\n tri[7][0].data = new_7;\n }\n if (tri[4][0].data.length < 2 * data.length) {\n var new_4 = new Uint8Array(2 * data.length);\n new_4.set(tri[4][0].data);\n tri[4][0].data = new_4;\n }\n var dv = u8_to_dataview(tri[7][0].data), last_offset = 0, cell_storage = [];\n var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage = [];\n var width = wide ? 4 : 1;\n for (var C = 0; C < data.length; ++C) {\n if (data[C] == null) {\n dv.setUint16(C * 2, 65535, true);\n _dv.setUint16(C * 2, 65535);\n continue;\n }\n dv.setUint16(C * 2, last_offset / width, true);\n _dv.setUint16(C * 2, _last_offset / width, true);\n var celload, _celload;\n switch (typeof data[C]) {\n case \"string\":\n celload = write_new_storage({ t: \"s\", v: data[C] }, SST);\n _celload = write_old_storage({ t: \"s\", v: data[C] }, SST);\n break;\n case \"number\":\n celload = write_new_storage({ t: \"n\", v: data[C] }, SST);\n _celload = write_old_storage({ t: \"n\", v: data[C] }, SST);\n break;\n case \"boolean\":\n celload = write_new_storage({ t: \"b\", v: data[C] }, SST);\n _celload = write_old_storage({ t: \"b\", v: data[C] }, SST);\n break;\n default:\n if (data[C] instanceof Date) {\n celload = write_new_storage({ t: \"s\", v: data[C].toISOString() }, SST);\n _celload = write_old_storage({ t: \"s\", v: data[C].toISOString() }, SST);\n break;\n }\n throw new Error(\"Unsupported value \" + data[C]);\n }\n cell_storage.push(celload);\n last_offset += celload.length;\n {\n _cell_storage.push(_celload);\n _last_offset += _celload.length;\n }\n ++cnt;\n }\n tri[2][0].data = write_varint49(cnt);\n tri[5][0].data = write_varint49(5);\n for (; C < tri[7][0].data.length / 2; ++C) {\n dv.setUint16(C * 2, 65535, true);\n _dv.setUint16(C * 2, 65535, true);\n }\n tri[6][0].data = u8concat(cell_storage);\n tri[3][0].data = u8concat(_cell_storage);\n tri[8] = [{ type: 0, data: write_varint49(wide ? 1 : 0) }];\n return tri;\n}\nfunction write_iwam(type, payload) {\n return {\n meta: [\n [],\n [{ type: 0, data: write_varint49(type) }]\n ],\n data: payload\n };\n}\nfunction get_unique_msgid(dep, dependents) {\n if (!dependents.last)\n dependents.last = 927262;\n for (var i = dependents.last; i < 2e6; ++i)\n if (!dependents[i]) {\n dependents[dependents.last = i] = dep;\n return i;\n }\n throw new Error(\"Too many messages\");\n}\nfunction build_numbers_deps(cfb) {\n var dependents = {};\n var indices = [];\n cfb.FileIndex.map(function(fi, idx) {\n return [fi, cfb.FullPaths[idx]];\n }).forEach(function(row) {\n var fi = row[0], fp = row[1];\n if (fi.type != 2)\n return;\n if (!fi.name.match(/\\.iwa/))\n return;\n if (fi.name.match(/OperationStorage/))\n return;\n parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(packet) {\n indices.push(packet.id);\n dependents[packet.id] = { deps: [], location: fp, type: varint_to_i32(packet.messages[0].meta[1][0].data) };\n });\n });\n cfb.FileIndex.forEach(function(fi) {\n if (!fi.name.match(/\\.iwa/))\n return;\n if (fi.name.match(/OperationStorage/))\n return;\n parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(ia) {\n ia.messages.forEach(function(mess) {\n [5, 6].forEach(function(f) {\n if (!mess.meta[f])\n return;\n mess.meta[f].forEach(function(x) {\n dependents[ia.id].deps.push(varint_to_i32(x.data));\n });\n });\n });\n });\n });\n return dependents;\n}\nfunction write_numbers_iwa(wb, opts) {\n if (!opts || !opts.numbers)\n throw new Error(\"Must pass a `numbers` option -- check the README\");\n var cfb = CFB.read(opts.numbers, { type: \"base64\" });\n var deps = build_numbers_deps(cfb);\n var docroot = numbers_iwa_find(cfb, deps, 1);\n if (docroot == null)\n throw \"Could not find message \".concat(1, \" in Numbers template\");\n var sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);\n if (sheetrefs.length > 1)\n throw new Error(\"Template NUMBERS file must have exactly one sheet\");\n wb.SheetNames.forEach(function(name, idx) {\n if (idx >= 1) {\n numbers_add_ws(cfb, deps, idx + 1);\n docroot = numbers_iwa_find(cfb, deps, 1);\n sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);\n }\n write_numbers_ws(cfb, deps, wb.Sheets[name], name, idx, sheetrefs[idx]);\n });\n return cfb;\n}\nfunction numbers_iwa_doit(cfb, deps, id, cb) {\n var entry = CFB.find(cfb, deps[id].location);\n if (!entry)\n throw \"Could not find \".concat(deps[id].location, \" in Numbers template\");\n var x = parse_iwa_file(decompress_iwa_file(entry.content));\n var ainfo = x.find(function(packet) {\n return packet.id == id;\n });\n cb(ainfo, x);\n entry.content = compress_iwa_file(write_iwa_file(x));\n entry.size = entry.content.length;\n}\nfunction numbers_iwa_find(cfb, deps, id) {\n var entry = CFB.find(cfb, deps[id].location);\n if (!entry)\n throw \"Could not find \".concat(deps[id].location, \" in Numbers template\");\n var x = parse_iwa_file(decompress_iwa_file(entry.content));\n var ainfo = x.find(function(packet) {\n return packet.id == id;\n });\n return ainfo;\n}\nfunction numbers_add_ws(cfb, deps, wsidx) {\n var sheetref = -1, newsheetref = -1;\n var remap = {};\n numbers_iwa_doit(cfb, deps, 1, function(docroot, arch) {\n var doc = parse_shallow(docroot.messages[0].data);\n sheetref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);\n newsheetref = get_unique_msgid({ deps: [1], location: deps[sheetref].location, type: 2 }, deps);\n remap[sheetref] = newsheetref;\n numbers_add_oref(docroot, newsheetref);\n doc[1].push({ type: 2, data: write_TSP_Reference(newsheetref) });\n var sheet = numbers_iwa_find(cfb, deps, sheetref);\n sheet.id = newsheetref;\n if (deps[1].location == deps[newsheetref].location)\n arch.push(sheet);\n else\n numbers_iwa_doit(cfb, deps, newsheetref, function(_, x) {\n return x.push(sheet);\n });\n docroot.messages[0].data = write_shallow(doc);\n });\n var tiaref = -1;\n numbers_iwa_doit(cfb, deps, newsheetref, function(sheetroot, arch) {\n var sa = parse_shallow(sheetroot.messages[0].data);\n for (var i = 3; i <= 69; ++i)\n delete sa[i];\n var drawables = mappa(sa[2], parse_TSP_Reference);\n drawables.forEach(function(n) {\n return numbers_del_oref(sheetroot, n);\n });\n tiaref = get_unique_msgid({ deps: [newsheetref], location: deps[drawables[0]].location, type: deps[drawables[0]].type }, deps);\n numbers_add_oref(sheetroot, tiaref);\n remap[drawables[0]] = tiaref;\n sa[2] = [{ type: 2, data: write_TSP_Reference(tiaref) }];\n var tia = numbers_iwa_find(cfb, deps, drawables[0]);\n tia.id = tiaref;\n if (deps[drawables[0]].location == deps[newsheetref].location)\n arch.push(tia);\n else {\n var loc2 = deps[newsheetref].location;\n loc2 = loc2.replace(/^Root Entry\\//, \"\");\n loc2 = loc2.replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n var parentidx = mlist[3].findIndex(function(m) {\n var _a, _b;\n var mm = parse_shallow(m.data);\n if ((_a = mm[3]) == null ? void 0 : _a[0])\n return u8str(mm[3][0].data) == loc2;\n if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc2)\n return true;\n return false;\n });\n var parent = parse_shallow(mlist[3][parentidx].data);\n if (!parent[6])\n parent[6] = [];\n parent[6].push({\n type: 2,\n data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(tiaref) }]\n ])\n });\n mlist[3][parentidx].data = write_shallow(parent);\n ai.messages[0].data = write_shallow(mlist);\n });\n numbers_iwa_doit(cfb, deps, tiaref, function(_, x) {\n return x.push(tia);\n });\n }\n sheetroot.messages[0].data = write_shallow(sa);\n });\n var tmaref = -1;\n numbers_iwa_doit(cfb, deps, tiaref, function(tiaroot, arch) {\n var tia = parse_shallow(tiaroot.messages[0].data);\n var da = parse_shallow(tia[1][0].data);\n for (var i = 3; i <= 69; ++i)\n delete da[i];\n var dap = parse_TSP_Reference(da[2][0].data);\n da[2][0].data = write_TSP_Reference(remap[dap]);\n tia[1][0].data = write_shallow(da);\n var oldtmaref = parse_TSP_Reference(tia[2][0].data);\n numbers_del_oref(tiaroot, oldtmaref);\n tmaref = get_unique_msgid({ deps: [tiaref], location: deps[oldtmaref].location, type: deps[oldtmaref].type }, deps);\n numbers_add_oref(tiaroot, tmaref);\n remap[oldtmaref] = tmaref;\n tia[2][0].data = write_TSP_Reference(tmaref);\n var tma = numbers_iwa_find(cfb, deps, oldtmaref);\n tma.id = tmaref;\n if (deps[tiaref].location == deps[tmaref].location)\n arch.push(tma);\n else\n numbers_iwa_doit(cfb, deps, tmaref, function(_, x) {\n return x.push(tma);\n });\n tiaroot.messages[0].data = write_shallow(tia);\n });\n var loc = deps[tmaref].location;\n loc = loc.replace(/^Root Entry\\//, \"\");\n loc = loc.replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n numbers_iwa_doit(cfb, deps, tmaref, function(tmaroot, arch) {\n var _a, _b;\n var tma = parse_shallow(tmaroot.messages[0].data);\n var uuid = u8str(tma[1][0].data), new_uuid = uuid.replace(/-[A-Z0-9]*/, \"-\".concat(wsidx.toString(16).padStart(4, \"0\")));\n tma[1][0].data = stru8(new_uuid);\n [12, 13, 29, 31, 32, 33, 39, 44, 47, 81, 82, 84].forEach(function(n) {\n return delete tma[n];\n });\n if (tma[45]) {\n var srrta = parse_shallow(tma[45][0].data);\n var ref = parse_TSP_Reference(srrta[1][0].data);\n numbers_del_oref(tmaroot, ref);\n delete tma[45];\n }\n if (tma[70]) {\n var hsoa = parse_shallow(tma[70][0].data);\n (_a = hsoa[2]) == null ? void 0 : _a.forEach(function(item) {\n var hsa = parse_shallow(item.data);\n [2, 3].map(function(n) {\n return hsa[n][0];\n }).forEach(function(hseadata) {\n var hsea = parse_shallow(hseadata.data);\n if (!hsea[8])\n return;\n var ref2 = parse_TSP_Reference(hsea[8][0].data);\n numbers_del_oref(tmaroot, ref2);\n });\n });\n delete tma[70];\n }\n [\n 46,\n 30,\n 34,\n 35,\n 36,\n 38,\n 48,\n 49,\n 60,\n 61,\n 62,\n 63,\n 64,\n 71,\n 72,\n 73,\n 74,\n 75,\n 85,\n 86,\n 87,\n 88,\n 89\n ].forEach(function(n) {\n if (!tma[n])\n return;\n var ref2 = parse_TSP_Reference(tma[n][0].data);\n delete tma[n];\n numbers_del_oref(tmaroot, ref2);\n });\n var store = parse_shallow(tma[4][0].data);\n {\n [2, 4, 5, 6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22].forEach(function(n) {\n var _a2;\n if (!((_a2 = store[n]) == null ? void 0 : _a2[0]))\n return;\n var oldref = parse_TSP_Reference(store[n][0].data);\n var newref = get_unique_msgid({ deps: [tmaref], location: deps[oldref].location, type: deps[oldref].type }, deps);\n numbers_del_oref(tmaroot, oldref);\n numbers_add_oref(tmaroot, newref);\n remap[oldref] = newref;\n var msg = numbers_iwa_find(cfb, deps, oldref);\n msg.id = newref;\n if (deps[oldref].location == deps[tmaref].location)\n arch.push(msg);\n else {\n deps[newref].location = deps[oldref].location.replace(oldref.toString(), newref.toString());\n if (deps[newref].location == deps[oldref].location)\n deps[newref].location = deps[newref].location.replace(/\\.iwa/, \"-\".concat(newref, \".iwa\"));\n CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));\n var newloc = deps[newref].location;\n newloc = newloc.replace(/^Root Entry\\//, \"\");\n newloc = newloc.replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n mlist[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newref) }],\n [{ type: 2, data: stru8(newloc.replace(/-.*$/, \"\")) }],\n [{ type: 2, data: stru8(newloc) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [],\n [],\n [],\n [],\n [{ type: 0, data: write_varint49(0) }],\n [],\n [{ type: 0, data: write_varint49(0) }]\n ]) });\n mlist[1] = [{ type: 0, data: write_varint49(Math.max(newref + 1, varint_to_i32(mlist[1][0].data))) }];\n var parentidx = mlist[3].findIndex(function(m) {\n var _a3, _b2;\n var mm = parse_shallow(m.data);\n if ((_a3 = mm[3]) == null ? void 0 : _a3[0])\n return u8str(mm[3][0].data) == loc;\n if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)\n return true;\n return false;\n });\n var parent = parse_shallow(mlist[3][parentidx].data);\n if (!parent[6])\n parent[6] = [];\n parent[6].push({\n type: 2,\n data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newref) }]\n ])\n });\n mlist[3][parentidx].data = write_shallow(parent);\n ai.messages[0].data = write_shallow(mlist);\n });\n }\n store[n][0].data = write_TSP_Reference(newref);\n });\n var row_headers = parse_shallow(store[1][0].data);\n {\n (_b = row_headers[2]) == null ? void 0 : _b.forEach(function(tspref) {\n var oldref = parse_TSP_Reference(tspref.data);\n var newref = get_unique_msgid({ deps: [tmaref], location: deps[oldref].location, type: deps[oldref].type }, deps);\n numbers_del_oref(tmaroot, oldref);\n numbers_add_oref(tmaroot, newref);\n remap[oldref] = newref;\n var msg = numbers_iwa_find(cfb, deps, oldref);\n msg.id = newref;\n if (deps[oldref].location == deps[tmaref].location) {\n arch.push(msg);\n } else {\n deps[newref].location = deps[oldref].location.replace(oldref.toString(), newref.toString());\n if (deps[newref].location == deps[oldref].location)\n deps[newref].location = deps[newref].location.replace(/\\.iwa/, \"-\".concat(newref, \".iwa\"));\n CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));\n var newloc = deps[newref].location;\n newloc = newloc.replace(/^Root Entry\\//, \"\");\n newloc = newloc.replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n mlist[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newref) }],\n [{ type: 2, data: stru8(newloc.replace(/-.*$/, \"\")) }],\n [{ type: 2, data: stru8(newloc) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [],\n [],\n [],\n [],\n [{ type: 0, data: write_varint49(0) }],\n [],\n [{ type: 0, data: write_varint49(0) }]\n ]) });\n mlist[1] = [{ type: 0, data: write_varint49(Math.max(newref + 1, varint_to_i32(mlist[1][0].data))) }];\n var parentidx = mlist[3].findIndex(function(m) {\n var _a2, _b2;\n var mm = parse_shallow(m.data);\n if ((_a2 = mm[3]) == null ? void 0 : _a2[0])\n return u8str(mm[3][0].data) == loc;\n if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)\n return true;\n return false;\n });\n var parent = parse_shallow(mlist[3][parentidx].data);\n if (!parent[6])\n parent[6] = [];\n parent[6].push({\n type: 2,\n data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newref) }]\n ])\n });\n mlist[3][parentidx].data = write_shallow(parent);\n ai.messages[0].data = write_shallow(mlist);\n });\n }\n tspref.data = write_TSP_Reference(newref);\n });\n }\n store[1][0].data = write_shallow(row_headers);\n var tiles = parse_shallow(store[3][0].data);\n {\n tiles[1].forEach(function(t) {\n var tst = parse_shallow(t.data);\n var oldtileref = parse_TSP_Reference(tst[2][0].data);\n var newtileref = remap[oldtileref];\n if (!remap[oldtileref]) {\n newtileref = get_unique_msgid({ deps: [tmaref], location: \"\", type: deps[oldtileref].type }, deps);\n deps[newtileref].location = \"Root Entry/Index/Tables/Tile-\".concat(newtileref, \".iwa\");\n remap[oldtileref] = newtileref;\n var oldtile = numbers_iwa_find(cfb, deps, oldtileref);\n oldtile.id = newtileref;\n numbers_del_oref(tmaroot, oldtileref);\n numbers_add_oref(tmaroot, newtileref);\n CFB.utils.cfb_add(cfb, \"/Index/Tables/Tile-\".concat(newtileref, \".iwa\"), compress_iwa_file(write_iwa_file([oldtile])));\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n mlist[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newtileref) }],\n [{ type: 2, data: stru8(\"Tables/Tile\") }],\n [{ type: 2, data: stru8(\"Tables/Tile-\".concat(newtileref)) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [],\n [],\n [],\n [],\n [{ type: 0, data: write_varint49(0) }],\n [],\n [{ type: 0, data: write_varint49(0) }]\n ]) });\n mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileref + 1, varint_to_i32(mlist[1][0].data))) }];\n var parentidx = mlist[3].findIndex(function(m) {\n var _a2, _b2;\n var mm = parse_shallow(m.data);\n if ((_a2 = mm[3]) == null ? void 0 : _a2[0])\n return u8str(mm[3][0].data) == loc;\n if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)\n return true;\n return false;\n });\n var parent = parse_shallow(mlist[3][parentidx].data);\n if (!parent[6])\n parent[6] = [];\n parent[6].push({\n type: 2,\n data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newtileref) }]\n ])\n });\n mlist[3][parentidx].data = write_shallow(parent);\n ai.messages[0].data = write_shallow(mlist);\n });\n }\n tst[2][0].data = write_TSP_Reference(newtileref);\n t.data = write_shallow(tst);\n });\n }\n store[3][0].data = write_shallow(tiles);\n }\n tma[4][0].data = write_shallow(store);\n tmaroot.messages[0].data = write_shallow(tma);\n });\n}\nfunction write_numbers_ws(cfb, deps, ws, wsname, sheetidx, rootref) {\n var drawables = [];\n numbers_iwa_doit(cfb, deps, rootref, function(docroot) {\n var sheetref = parse_shallow(docroot.messages[0].data);\n {\n sheetref[1] = [{ type: 2, data: stru8(wsname) }];\n drawables = mappa(sheetref[2], parse_TSP_Reference);\n }\n docroot.messages[0].data = write_shallow(sheetref);\n });\n var tia = numbers_iwa_find(cfb, deps, drawables[0]);\n var tmaref = parse_TSP_Reference(parse_shallow(tia.messages[0].data)[2][0].data);\n numbers_iwa_doit(cfb, deps, tmaref, function(docroot, x) {\n return write_numbers_tma(cfb, deps, ws, docroot, x, tmaref);\n });\n}\nvar USE_WIDE_ROWS = true;\nfunction write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {\n var range = decode_range(ws[\"!ref\"]);\n range.s.r = range.s.c = 0;\n var trunc = false;\n if (range.e.c > 999) {\n trunc = true;\n range.e.c = 999;\n }\n if (range.e.r > 999999) {\n trunc = true;\n range.e.r = 999999;\n }\n if (trunc)\n console.error(\"Truncating to \".concat(encode_range(range)));\n var data = sheet_to_json(ws, { range: range, header: 1 });\n var SST = [\"~Sh33tJ5~\"];\n var loc = deps[tmaref].location;\n loc = loc.replace(/^Root Entry\\//, \"\");\n loc = loc.replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n var pb = parse_shallow(tmaroot.messages[0].data);\n {\n pb[6][0].data = write_varint49(range.e.r + 1);\n pb[7][0].data = write_varint49(range.e.c + 1);\n delete pb[46];\n var store = parse_shallow(pb[4][0].data);\n {\n var row_header_ref = parse_TSP_Reference(parse_shallow(store[1][0].data)[2][0].data);\n numbers_iwa_doit(cfb, deps, row_header_ref, function(rowhead, _x) {\n var _a;\n var base_bucket = parse_shallow(rowhead.messages[0].data);\n if ((_a = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a[0])\n for (var R2 = 0; R2 < data.length; ++R2) {\n var _bucket = parse_shallow(base_bucket[2][0].data);\n _bucket[1][0].data = write_varint49(R2);\n _bucket[4][0].data = write_varint49(data[R2].length);\n base_bucket[2][R2] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n }\n rowhead.messages[0].data = write_shallow(base_bucket);\n });\n var col_header_ref = parse_TSP_Reference(store[2][0].data);\n numbers_iwa_doit(cfb, deps, col_header_ref, function(colhead, _x) {\n var base_bucket = parse_shallow(colhead.messages[0].data);\n for (var C = 0; C <= range.e.c; ++C) {\n var _bucket = parse_shallow(base_bucket[2][0].data);\n _bucket[1][0].data = write_varint49(C);\n _bucket[4][0].data = write_varint49(range.e.r + 1);\n base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n }\n colhead.messages[0].data = write_shallow(base_bucket);\n });\n var rbtree = parse_shallow(store[9][0].data);\n rbtree[1] = [];\n var tilestore = parse_shallow(store[3][0].data);\n {\n var tstride = 256;\n tilestore[2] = [{ type: 0, data: write_varint49(tstride) }];\n var tileref = parse_TSP_Reference(parse_shallow(tilestore[1][0].data)[2][0].data);\n var save_token = function() {\n var metadata = numbers_iwa_find(cfb, deps, 2);\n var mlist = parse_shallow(metadata.messages[0].data);\n var mlst = mlist[3].filter(function(m) {\n return varint_to_i32(parse_shallow(m.data)[1][0].data) == tileref;\n });\n return (mlst == null ? void 0 : mlst.length) ? varint_to_i32(parse_shallow(mlst[0].data)[12][0].data) : 0;\n }();\n {\n CFB.utils.cfb_del(cfb, deps[tileref].location);\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n mlist[3] = mlist[3].filter(function(m) {\n return varint_to_i32(parse_shallow(m.data)[1][0].data) != tileref;\n });\n var parentidx = mlist[3].findIndex(function(m) {\n var _a, _b;\n var mm = parse_shallow(m.data);\n if ((_a = mm[3]) == null ? void 0 : _a[0])\n return u8str(mm[3][0].data) == loc;\n if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)\n return true;\n return false;\n });\n var parent = parse_shallow(mlist[3][parentidx].data);\n if (!parent[6])\n parent[6] = [];\n parent[6] = parent[6].filter(function(m) {\n return varint_to_i32(parse_shallow(m.data)[1][0].data) != tileref;\n });\n mlist[3][parentidx].data = write_shallow(parent);\n ai.messages[0].data = write_shallow(mlist);\n });\n numbers_del_oref(tmaroot, tileref);\n }\n tilestore[1] = [];\n var ntiles = Math.ceil((range.e.r + 1) / tstride);\n for (var tidx = 0; tidx < ntiles; ++tidx) {\n var newtileid = get_unique_msgid({\n deps: [],\n location: \"\",\n type: 6002\n }, deps);\n deps[newtileid].location = \"Root Entry/Index/Tables/Tile-\".concat(newtileid, \".iwa\");\n var tiledata = [\n [],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 0, data: write_varint49(Math.min(range.e.r + 1, (tidx + 1) * tstride)) }],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 0, data: write_varint49(Math.min((tidx + 1) * tstride, range.e.r + 1) - tidx * tstride) }],\n [],\n [{ type: 0, data: write_varint49(5) }],\n [{ type: 0, data: write_varint49(1) }],\n [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }]\n ];\n for (var R = tidx * tstride; R <= Math.min(range.e.r, (tidx + 1) * tstride - 1); ++R) {\n var tilerow = write_TST_TileRowInfo(data[R], SST, USE_WIDE_ROWS);\n tilerow[1][0].data = write_varint49(R - tidx * tstride);\n tiledata[5].push({ data: write_shallow(tilerow), type: 2 });\n }\n tilestore[1].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(tidx) }],\n [{ type: 2, data: write_TSP_Reference(newtileid) }]\n ]) });\n var newtile = {\n id: newtileid,\n messages: [write_iwam(6002, write_shallow(tiledata))]\n };\n var tilecontent = compress_iwa_file(write_iwa_file([newtile]));\n CFB.utils.cfb_add(cfb, \"/Index/Tables/Tile-\".concat(newtileid, \".iwa\"), tilecontent);\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n mlist[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newtileid) }],\n [{ type: 2, data: stru8(\"Tables/Tile\") }],\n [{ type: 2, data: stru8(\"Tables/Tile-\".concat(newtileid)) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [],\n [],\n [],\n [],\n [{ type: 0, data: write_varint49(0) }],\n [],\n [{ type: 0, data: write_varint49(save_token) }]\n ]) });\n mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileid + 1, varint_to_i32(mlist[1][0].data))) }];\n var parentidx = mlist[3].findIndex(function(m) {\n var _a, _b;\n var mm = parse_shallow(m.data);\n if ((_a = mm[3]) == null ? void 0 : _a[0])\n return u8str(mm[3][0].data) == loc;\n if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)\n return true;\n return false;\n });\n var parent = parse_shallow(mlist[3][parentidx].data);\n if (!parent[6])\n parent[6] = [];\n parent[6].push({\n type: 2,\n data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newtileid) }]\n ])\n });\n mlist[3][parentidx].data = write_shallow(parent);\n ai.messages[0].data = write_shallow(mlist);\n });\n numbers_add_oref(tmaroot, newtileid);\n rbtree[1].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(tidx * tstride) }],\n [{ type: 0, data: write_varint49(tidx) }]\n ]) });\n }\n }\n store[3][0].data = write_shallow(tilestore);\n store[9][0].data = write_shallow(rbtree);\n store[10] = [{ type: 2, data: new Uint8Array([]) }];\n if (ws[\"!merges\"]) {\n var mergeid = get_unique_msgid({\n type: 6144,\n deps: [tmaref],\n location: deps[tmaref].location\n }, deps);\n tmafile.push({\n id: mergeid,\n messages: [write_iwam(6144, write_shallow([\n [],\n ws[\"!merges\"].map(function(m) {\n return { type: 2, data: write_shallow([\n [],\n [{ type: 2, data: write_shallow([\n [],\n [{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]\n ]) }],\n [{ type: 2, data: write_shallow([\n [],\n [{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]\n ]) }]\n ]) };\n })\n ]))]\n });\n store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n var parentidx = mlist[3].findIndex(function(m) {\n var _a, _b;\n var mm = parse_shallow(m.data);\n if ((_a = mm[3]) == null ? void 0 : _a[0])\n return u8str(mm[3][0].data) == loc;\n if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)\n return true;\n return false;\n });\n var parent = parse_shallow(mlist[3][parentidx].data);\n if (!parent[6])\n parent[6] = [];\n parent[6].push({\n type: 2,\n data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(mergeid) }]\n ])\n });\n mlist[3][parentidx].data = write_shallow(parent);\n ai.messages[0].data = write_shallow(mlist);\n });\n numbers_add_oref(tmaroot, mergeid);\n } else\n delete store[13];\n var sstref = parse_TSP_Reference(store[4][0].data);\n numbers_iwa_doit(cfb, deps, sstref, function(sstroot) {\n var sstdata = parse_shallow(sstroot.messages[0].data);\n {\n sstdata[3] = [];\n SST.forEach(function(str, i) {\n if (i == 0)\n return;\n sstdata[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(i) }],\n [{ type: 0, data: write_varint49(1) }],\n [{ type: 2, data: stru8(str) }]\n ]) });\n });\n }\n sstroot.messages[0].data = write_shallow(sstdata);\n });\n }\n pb[4][0].data = write_shallow(store);\n }\n tmaroot.messages[0].data = write_shallow(pb);\n}\nfunction fix_opts_func(defaults/*:Array >*/)/*:{(o:any):void}*/ {\n\treturn function fix_opts(opts) {\n\t\tfor(var i = 0; i != defaults.length; ++i) {\n\t\t\tvar d = defaults[i];\n\t\t\tif(opts[d[0]] === undefined) opts[d[0]] = d[1];\n\t\t\tif(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n\t\t}\n\t};\n}\n\nfunction fix_read_opts(opts) {\nfix_opts_func([\n\t['cellNF', false], /* emit cell number format string as .z */\n\t['cellHTML', true], /* emit html string as .h */\n\t['cellFormula', true], /* emit formulae as .f */\n\t['cellStyles', false], /* emits style/theme as .s */\n\t['cellText', true], /* emit formatted text as .w */\n\t['cellDates', false], /* emit date cells with type `d` */\n\n\t['sheetStubs', false], /* emit empty cells */\n\t['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */\n\n\t['bookDeps', false], /* parse calculation chains */\n\t['bookSheets', false], /* only try to get sheet names (no Sheets) */\n\t['bookProps', false], /* only try to get properties (no Sheets) */\n\t['bookFiles', false], /* include raw file structure (keys, files, cfb) */\n\t['bookVBA', false], /* include vba raw data (vbaraw) */\n\n\t['password',''], /* password */\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\n\nfunction fix_write_opts(opts) {\nfix_opts_func([\n\t['cellDates', false], /* write date cells with type `d` */\n\n\t['bookSST', false], /* Generate Shared String Table */\n\n\t['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */\n\n\t['compression', false], /* Use file compression */\n\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\nfunction get_sheet_type(n/*:string*/)/*:string*/ {\n\tif(RELS.WS.indexOf(n) > -1) return \"sheet\";\n\tif(RELS.CS && n == RELS.CS) return \"chart\";\n\tif(RELS.DS && n == RELS.DS) return \"dialog\";\n\tif(RELS.MS && n == RELS.MS) return \"macro\";\n\treturn (n && n.length) ? n : \"sheet\";\n}\nfunction safe_parse_wbrels(wbrels, sheets) {\n\tif(!wbrels) return 0;\n\ttry {\n\t\twbrels = sheets.map(function pwbr(w) { if(!w.id) w.id = w.strRelID; return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)]; });\n\t} catch(e) { return null; }\n\treturn !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, sheet, idx/*:number*/, sheetRels, sheets, stype/*:string*/, opts, wb, themes, styles) {\n\ttry {\n\t\tsheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path);\n\t\tvar data = getzipdata(zip, path);\n\t\tvar _ws;\n\t\tswitch(stype) {\n\t\t\tcase 'sheet': _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'chart': _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n\t\t\t\tif(!_ws || !_ws['!drawel']) break;\n\t\t\t\tvar dfile = resolve_path(_ws['!drawel'].Target, path);\n\t\t\t\tvar drelsp = get_rels_path(dfile);\n\t\t\t\tvar draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n\t\t\t\tvar chartp = resolve_path(draw, dfile);\n\t\t\t\tvar crelsp = get_rels_path(chartp);\n\t\t\t\t_ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n\t\t\t\tbreak;\n\t\t\tcase 'macro': _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tdefault: throw new Error(\"Unrecognized sheet type \" + stype);\n\t\t}\n\t\tsheets[sheet] = _ws;\n\n\t\t/* scan rels for comments and threaded comments */\n\t\tvar comments = [], tcomments = [];\n\t\tif(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {\n\t\t\tvar dfile = \"\";\n\t\t\tif(sheetRels[sheet][n].Type == RELS.CMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\tcomments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n\t\t\t\tif(!comments || !comments.length) return;\n\t\t\t\tsheet_insert_comments(_ws, comments, false);\n\t\t\t}\n\t\t\tif(sheetRels[sheet][n].Type == RELS.TCMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\ttcomments = tcomments.concat(parse_tcmnt_xml(getzipdata(zip, dfile, true), opts));\n\t\t\t}\n\t\t});\n\t\tif(tcomments && tcomments.length) sheet_insert_comments(_ws, tcomments, true, opts.people || []);\n\t} catch(e) { if(opts.WTF) throw e; }\n}\n\nfunction strip_front_slash(x/*:string*/)/*:string*/ { return x.charAt(0) == '/' ? x.slice(1) : x; }\n\nfunction parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tmake_ssf();\n\topts = opts || {};\n\tfix_read_opts(opts);\n\n\t/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n\t/* UOC */\n\tif(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n\t/* Numbers */\n\tif(safegetzipfile(zip, 'Index/Document.iwa')) {\n\t\tif(typeof Uint8Array == \"undefined\") throw new Error('NUMBERS file parsing requires Uint8Array support');\n\t\tif(typeof parse_numbers_iwa != \"undefined\") {\n\t\t\tif(zip.FileIndex) return parse_numbers_iwa(zip, opts);\n\t\t\tvar _zip = CFB.utils.cfb_new();\n\t\t\tzipentries(zip).forEach(function(e) { zip_add_file(_zip, e, getzipbin(zip, e)); });\n\t\t\treturn parse_numbers_iwa(_zip, opts);\n\t\t}\n\t\tthrow new Error('Unsupported NUMBERS file');\n\t}\n\tif(!safegetzipfile(zip, '[Content_Types].xml')) {\n\t\tif(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');\n\t\tif(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');\n\t\tvar index_zip = CFB.find(zip, 'Index.zip');\n\t\tif(index_zip) {\n\t\t\topts = dup(opts);\n\t\t\tdelete opts.type;\n\t\t\tif(typeof index_zip.content == \"string\") opts.type = \"binary\";\n\t\t\t// TODO: Bun buffer bug\n\t\t\tif(typeof Bun !== \"undefined\" && Buffer.isBuffer(index_zip.content)) return readSync(new Uint8Array(index_zip.content), opts);\n\t\t\treturn readSync(index_zip.content, opts);\n\t\t}\n\t\tthrow new Error('Unsupported ZIP file');\n\t}\n\n\tvar entries = zipentries(zip);\n\tvar dir = parse_ct((getzipstr(zip, '[Content_Types].xml')/*:?any*/));\n\tvar xlsb = false;\n\tvar sheets, binname;\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.xml\";\n\t\tif(getzipdata(zip,binname, true)) dir.workbooks.push(binname);\n\t}\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.bin\";\n\t\tif(!getzipdata(zip,binname,true)) throw new Error(\"Could not find workbook\");\n\t\tdir.workbooks.push(binname);\n\t\txlsb = true;\n\t}\n\tif(dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n\n\tvar themes = ({}/*:any*/);\n\tvar styles = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) {\n\t\tstrs = [];\n\t\tif(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }\n\n\t\tif(opts.cellStyles && dir.themes.length) themes = parse_theme_xml(getzipstr(zip, dir.themes[0].replace(/^\\//,''), true)||\"\", opts);\n\n\t\tif(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n\t}\n\n\t/*var externbooks = */dir.links.map(function(link) {\n\t\ttry {\n\t\t\tvar rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n\t\t\treturn parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n\t\t} catch(e) {}\n\t});\n\n\tvar wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n\n\tvar props = {}, propdata = \"\";\n\n\tif(dir.coreprops.length) {\n\t\tpropdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n\t\tif(propdata) props = parse_core_props(propdata);\n\t\tif(dir.extprops.length !== 0) {\n\t\t\tpropdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n\t\t\tif(propdata) parse_ext_props(propdata, props, opts);\n\t\t}\n\t}\n\n\tvar custprops = {};\n\tif(!opts.bookSheets || opts.bookProps) {\n\t\tif (dir.custprops.length !== 0) {\n\t\t\tpropdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n\t\t\tif(propdata) custprops = parse_cust_props(propdata, opts);\n\t\t}\n\t}\n\n\tvar out = ({}/*:any*/);\n\tif(opts.bookSheets || opts.bookProps) {\n\t\tif(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });\n\t\telse if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;\n\t\tif(opts.bookProps) { out.Props = props; out.Custprops = custprops; }\n\t\tif(opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n\t\tif(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n\t}\n\tsheets = {};\n\n\tvar deps = {};\n\tif(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts);\n\n\tvar i=0;\n\tvar sheetRels = ({}/*:any*/);\n\tvar path, relsPath;\n\n\t{\n\t\tvar wbsheets = wb.Sheets;\n\t\tprops.Worksheets = wbsheets.length;\n\t\tprops.SheetNames = [];\n\t\tfor(var j = 0; j != wbsheets.length; ++j) {\n\t\t\tprops.SheetNames[j] = wbsheets[j].name;\n\t\t}\n\t}\n\n\tvar wbext = xlsb ? \"bin\" : \"xml\";\n\tvar wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n\tvar wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi+1) + \".rels\").replace(/^\\//,\"\");\n\tif(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n\tvar wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile.replace(/_rels.*/, \"s5s\"));\n\n\tif((dir.metadata || []).length >= 1) {\n\t\t/* TODO: MDX and other types of metadata */\n\t\topts.xlmeta = parse_xlmeta(getzipdata(zip, strip_front_slash(dir.metadata[0])),dir.metadata[0],opts);\n\t}\n\n\tif((dir.people || []).length >= 1) {\n\t\topts.people = parse_people_xml(getzipdata(zip, strip_front_slash(dir.people[0])),opts);\n\t}\n\n\tif(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n\n\t/* Numbers iOS hack */\n\tvar nmode = (getzipdata(zip,\"xl/worksheets/sheet.xml\",true))?1:0;\n\twsloop: for(i = 0; i != props.Worksheets; ++i) {\n\t\tvar stype = \"sheet\";\n\t\tif(wbrels && wbrels[i]) {\n\t\t\tpath = 'xl/' + (wbrels[i][1]).replace(/[\\/]?xl\\//, \"\");\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrels[i][1];\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/.*$/,\"\") + wbrels[i][1];\n\t\t\tstype = wbrels[i][2];\n\t\t} else {\n\t\t\tpath = 'xl/worksheets/sheet'+(i+1-nmode)+\".\" + wbext;\n\t\t\tpath = path.replace(/sheet0\\./,\"sheet.\");\n\t\t}\n\t\trelsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n\t\tif(opts && opts.sheets != null) switch(typeof opts.sheets) {\n\t\t\tcase \"number\": if(i != opts.sheets) continue wsloop; break;\n\t\t\tcase \"string\": if(props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop; break;\n\t\t\tdefault: if(Array.isArray && Array.isArray(opts.sheets)) {\n\t\t\t\tvar snjseen = false;\n\t\t\t\tfor(var snj = 0; snj != opts.sheets.length; ++snj) {\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen=1;\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n\t\t\t\t}\n\t\t\t\tif(!snjseen) continue wsloop;\n\t\t\t}\n\t\t}\n\t\tsafe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n\t}\n\n\tout = ({\n\t\tDirectory: dir,\n\t\tWorkbook: wb,\n\t\tProps: props,\n\t\tCustprops: custprops,\n\t\tDeps: deps,\n\t\tSheets: sheets,\n\t\tSheetNames: props.SheetNames,\n\t\tStrings: strs,\n\t\tStyles: styles,\n\t\tThemes: themes,\n\t\tSSF: dup(table_fmt)\n\t}/*:any*/);\n\tif(opts && opts.bookFiles) {\n\t\tif(zip.files) {\n\t\t\tout.keys = entries;\n\t\t\tout.files = zip.files;\n\t\t} else {\n\t\t\tout.keys = [];\n\t\t\tout.files = {};\n\t\t\tzip.FullPaths.forEach(function(p, idx) {\n\t\t\t\tp = p.replace(/^Root Entry[\\/]/, \"\");\n\t\t\t\tout.keys.push(p);\n\t\t\t\tout.files[p] = zip.FileIndex[idx];\n\t\t\t});\n\t\t}\n\t}\n\tif(opts && opts.bookVBA) {\n\t\tif(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true);\n\t\telse if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true);\n\t}\n\t// TODO: pass back content types metdata for xlsm/xlsx resolution\n\tout.bookType = xlsb ? \"xlsb\" : \"xlsx\";\n\treturn out;\n}\n\n/* [MS-OFFCRYPTO] 2.1.1 */\nfunction parse_xlsxcfb(cfb, _opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tvar f = 'Workbook', data = CFB.find(cfb, f);\n\ttry {\n\tf = '/!DataSpaces/Version';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var version = */parse_DataSpaceVersionInfo(data.content);\n\n\t/* 2.3.4.1 */\n\tf = '/!DataSpaces/DataSpaceMap';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar dsm = parse_DataSpaceMap(data.content);\n\tif(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.2 */\n\tf = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar seds = parse_DataSpaceDefinition(data.content);\n\tif(seds.length != 1 || seds[0] != \"StrongEncryptionTransform\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.3 */\n\tf = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var hdr = */parse_Primary(data.content);\n\t} catch(e) {}\n\n\tf = '/EncryptionInfo';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar einfo = parse_EncryptionInfo(data.content);\n\n\t/* 2.3.4.4 */\n\tf = '/EncryptedPackage';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\n/*global decrypt_agile */\n/*:: declare var decrypt_agile:any; */\n\tif(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n/*global decrypt_std76 */\n/*:: declare var decrypt_std76:any; */\n\tif(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n\tthrow new Error(\"File is password-protected\");\n}\n\nfunction write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = \"bin\";\n\tvar vbafmt = true;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws_bin(rId-1, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_comments_bin(comments, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst_bin(opts.Strings, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb_bin(wb, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tvar ww = write_theme(wb.Themes, opts);\n\tzip_add_file(zip, f, ww);\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty_bin(wb, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta_bin());\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction write_zip_xlsx(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tvar people = [\"SheetJ5\"];\n\topts.tcid = 0;\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws_xml(rId-1, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar needtc = false;\n\t\t\t\tcomments.forEach(function(carr) {\n\t\t\t\t\tcarr[1].forEach(function(c) { if(c.T == true) needtc = true; });\n\t\t\t\t});\n\t\t\t\tif(needtc) {\n\t\t\t\t\tcf = \"xl/threadedComments/threadedComment\" + rId + \".xml\";\n\t\t\t\t\tzip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));\n\t\t\t\t\tct.threadedcomments.push(cf);\n\t\t\t\t\tadd_rels(wsrels, -1, \"../threadedComments/threadedComment\" + rId + \".xml\", RELS.TCMNT);\n\t\t\t\t}\n\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_comments_xml(comments, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst_xml(opts.Strings, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb_xml(wb, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty_xml(wb, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta_xml());\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tif(people.length > 1) {\n\t\tf = \"xl/persons/person.xml\";\n\t\tzip_add_file(zip, f, write_people_xml(people, opts));\n\t\tct.people.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"persons/person.xml\", RELS.PEOPLE);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction firstbyte(f/*:RawData*/,o/*:?TypeOpts*/)/*:Array*/ {\n\tvar x = \"\";\n\tswitch((o||{}).type || \"base64\") {\n\t\tcase 'buffer': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tcase 'base64': x = Base64_decode(f.slice(0,12)); break;\n\t\tcase 'binary': x = f; break;\n\t\tcase 'array': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tdefault: throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n\t}\n\treturn [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];\n}\n\nfunction read_cfb(cfb/*:CFBContainer*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tif(CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n\treturn parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar zip, d = data;\n\tvar o = opts||{};\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tzip = zip_read(d, o);\n\treturn parse_zip(zip, o);\n}\n\nfunction read_plaintext(data/*:string*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar i = 0;\n\tmain: while(i < data.length) switch(data.charCodeAt(i)) {\n\t\tcase 0x0A: case 0x0D: case 0x20: ++i; break;\n\t\tcase 0x3C: return parse_xlml(data.slice(i),o);\n\t\tdefault: break main;\n\t}\n\treturn PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar str = \"\", bytes = firstbyte(data, o);\n\tswitch(o.type) {\n\t\tcase 'base64': str = Base64_decode(data); break;\n\t\tcase 'binary': str = data; break;\n\t\tcase 'buffer': str = data.toString('binary'); break;\n\t\tcase 'array': str = cc2str(data); break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n\to.type = \"binary\";\n\treturn read_plaintext(str, o);\n}\n\nfunction read_utf16(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar d = data;\n\tif(o.type == 'base64') d = Base64_decode(d);\n\td = typeof $cptable !== \"undefined\" ? $cptable.utils.decode(1200, d.slice(2), 'str') : utf16leread(d.slice(2));\n\to.type = \"binary\";\n\treturn read_plaintext(d, o);\n}\n\nfunction bstrify(data/*:string*/)/*:string*/ {\n\treturn !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n\tif(str) { o.type = \"string\"; return PRN.to_workbook(data, o); }\n\treturn PRN.to_workbook(d, o);\n}\n\nfunction readSync(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\treset_cp();\n\tvar o = opts||{};\n\tif(o.codepage && typeof $cptable === \"undefined\") console.error(\"Codepage tables are not loaded. Non-ASCII characters may not give expected results\");\n\tif(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = \"array\", o));\n\tif(typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && !o.type) o.type = typeof Deno !== \"undefined\" ? \"buffer\" : \"array\";\n\tvar d = data, n = [0,0,0,0], str = false;\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\t_ssfopts = {};\n\tif(o.dateNF) _ssfopts.dateNF = o.dateNF;\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tif(o.type == \"file\") { o.type = has_buf ? \"buffer\" : \"binary\"; d = read_binary(data); if(typeof Uint8Array !== 'undefined' && !has_buf) o.type = \"array\"; }\n\tif(o.type == \"string\") { str = true; o.type = \"binary\"; o.codepage = 65001; d = bstrify(data); }\n\tif(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n\t\t// $FlowIgnore\n\t\tvar ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo=\"bar\";\n\t\t// $FlowIgnore\n\t\tif(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);}\n\t}\n\tswitch((n = firstbyte(d, o))[0]) {\n\t\tcase 0xD0: if(n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o); break;\n\t\tcase 0x09: if(n[1] <= 0x08) return parse_xlscfb(d, o); break;\n\t\tcase 0x3C: return parse_xlml(d, o);\n\t\tcase 0x49:\n\t\t\tif(n[1] === 0x49 && n[2] === 0x2a && n[3] === 0x00) throw new Error(\"TIFF Image File is not a spreadsheet\");\n\t\t\tif(n[1] === 0x44) return read_wb_ID(d, o);\n\t\t\tbreak;\n\t\tcase 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break;\n\t\tcase 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xFF:\n\t\t\tif(n[1] === 0xFE) { return read_utf16(d, o); }\n\t\t\telse if(n[1] === 0x00 && n[2] === 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\tbreak;\n\t\tcase 0x00:\n\t\t\tif(n[1] === 0x00) {\n\t\t\t\tif(n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\t\tif(n[2] === 0x00 && (n[3] === 0x08 || n[3] === 0x09)) return WK_.to_workbook(d, o);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o);\n\t\tcase 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return rtf_to_workbook(d, o); break;\n\t\tcase 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o);\n\t\tcase 0x89: if(n[1] === 0x50 && n[2] === 0x4E && n[3] === 0x47) throw new Error(\"PNG Image File is not a spreadsheet\"); break;\n\t\tcase 0x08: if(n[1] === 0xE7) throw new Error(\"Unsupported Multiplan 1.x file!\"); break;\n\t\tcase 0x0C:\n\t\t\tif(n[1] === 0xEC) throw new Error(\"Unsupported Multiplan 2.x file!\");\n\t\t\tif(n[1] === 0xED) throw new Error(\"Unsupported Multiplan 3.x file!\");\n\t\t\tbreak;\n\t}\n\tif(DBF_SUPPORTED_VERSIONS.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n\treturn read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar o = opts||{}; o.type = 'file';\n\treturn readSync(filename, o);\n}\nfunction write_cfb_ctr(cfb/*:CFBContainer*/, o/*:WriteOpts*/)/*:any*/ {\n\tswitch(o.type) {\n\t\tcase \"base64\": case \"binary\": break;\n\t\tcase \"buffer\": case \"array\": o.type = \"\"; break;\n\t\tcase \"file\": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : \"\"}));\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\treturn CFB.write(cfb, o);\n}\n\nfunction write_zip(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tswitch(opts.bookType) {\n\t\tcase \"ods\": return write_ods(wb, opts);\n\t\tcase \"numbers\": return write_numbers_iwa(wb, opts);\n\t\tcase \"xlsb\": return write_zip_xlsb(wb, opts);\n\t\tdefault: return write_zip_xlsx(wb, opts);\n\t}\n}\n\n/*:: declare var encrypt_agile:any; */\nfunction write_zip_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_typeXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip_xlsx(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_denouement(z/*:any*/, o/*:?WriteOpts*/)/*:any*/ {\n\tvar oopts = {};\n\tvar ftype = has_buf ? \"nodebuffer\" : (typeof Uint8Array !== \"undefined\" ? \"array\" : \"string\");\n\tif(o.compression) oopts.compression = 'DEFLATE';\n\tif(o.password) oopts.type = ftype;\n\telse switch(o.type) {\n\t\tcase \"base64\": oopts.type = \"base64\"; break;\n\t\tcase \"binary\": oopts.type = \"string\"; break;\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tcase \"buffer\":\n\t\tcase \"file\": oopts.type = ftype; break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tvar out = z.FullPaths ? CFB.write(z, {fileType:\"zip\", type: /*::(*/{\"nodebuffer\": \"buffer\", \"string\": \"binary\"}/*:: :any)*/[oopts.type] || oopts.type, compression: !!o.compression}) : z.generate(oopts);\n\tif(typeof Deno !== \"undefined\") {\n\t\tif(typeof out == \"string\") {\n\t\t\tif(o.type == \"binary\" || o.type == \"base64\") return out;\n\t\t\tout = new Uint8Array(s2ab(out));\n\t\t}\n\t}\n/*jshint -W083 */\n\tif(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n/*jshint +W083 */\n\tif(o.type === \"file\") return write_dl(o.file, out);\n\treturn o.type == \"string\" ? utf8read(/*::(*/out/*:: :any)*/) : out;\n}\n\nfunction write_cfb_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = opts||{};\n\tvar cfb/*:CFBContainer*/ = write_xlscfb(wb, o);\n\treturn write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out/*:string*/, opts/*:WriteOpts*/, bom/*:?string*/)/*:any*/ {\n\tif(!bom) bom = \"\";\n\tvar o = bom + out;\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode(utf8write(o));\n\t\tcase \"binary\": return utf8write(o);\n\t\tcase \"string\": return out;\n\t\tcase \"file\": return write_dl(opts.file, o, 'utf8');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(o, 'utf8');\n\t\t\telse if(typeof TextEncoder !== \"undefined\") return new TextEncoder().encode(o);\n\t\t\telse return write_string_type(o, {type:'binary'}).split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out/*:string*/, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode_pass(out);\n\t\tcase \"binary\": return out;\n\t\tcase \"string\": return out; /* override in sheet_to_txt */\n\t\tcase \"file\": return write_dl(opts.file, out, 'binary');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(out, 'binary');\n\t\t\telse return out.split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\n/* TODO: test consistency */\nfunction write_binary_type(out, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"string\":\n\t\tcase \"base64\":\n\t\tcase \"binary\":\n\t\t\tvar bstr = \"\";\n\t\t\t// $FlowIgnore\n\t\t\tfor(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);\n\t\t\treturn opts.type == 'base64' ? Base64_encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\t\tcase \"file\": return write_dl(opts.file, out);\n\t\tcase \"buffer\": return out;\n\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t}\n}\n\nfunction writeSyncXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSyncXLSX(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\treturn write_zip_typeXLSX(wb, o);\n}\n\nfunction writeSync(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSync(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\tvar idx = 0;\n\tif(o.sheet) {\n\t\tif(typeof o.sheet == \"number\") idx = o.sheet;\n\t\telse idx = wb.SheetNames.indexOf(o.sheet);\n\t\tif(!wb.SheetNames[idx]) throw new Error(\"Sheet not found: \" + o.sheet + \" : \" + (typeof o.sheet));\n\t}\n\tswitch(o.bookType || 'xlsb') {\n\t\tcase 'xml':\n\t\tcase 'xlml': return write_string_type(write_xlml(wb, o), o);\n\t\tcase 'slk':\n\t\tcase 'sylk': return write_string_type(SYLK.from_sheet(wb.Sheets[wb.SheetNames[idx]], o, wb), o);\n\t\tcase 'htm':\n\t\tcase 'html': return write_string_type(sheet_to_html(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'txt': return write_stxt_type(sheet_to_txt(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'csv': return write_string_type(sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o), o, \"\\ufeff\");\n\t\tcase 'dif': return write_string_type(DIF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'dbf': return write_binary_type(DBF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'prn': return write_string_type(PRN.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'rtf': return write_string_type(sheet_to_rtf(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'eth': return write_string_type(ETH.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'fods': return write_string_type(write_ods(wb, o), o);\n\t\tcase 'wk1': return write_binary_type(WK_.sheet_to_wk1(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'wk3': return write_binary_type(WK_.book_to_wk3(wb, o), o);\n\t\tcase 'biff2': if(!o.biff) o.biff = 2; /* falls through */\n\t\tcase 'biff3': if(!o.biff) o.biff = 3; /* falls through */\n\t\tcase 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o);\n\t\tcase 'biff5': if(!o.biff) o.biff = 5; /* falls through */\n\t\tcase 'biff8':\n\t\tcase 'xla':\n\t\tcase 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o);\n\t\tcase 'xlsx':\n\t\tcase 'xlsm':\n\t\tcase 'xlam':\n\t\tcase 'xlsb':\n\t\tcase 'numbers':\n\t\tcase 'ods': return write_zip_type(wb, o);\n\t\tdefault: throw new Error (\"Unrecognized bookType |\" + o.bookType + \"|\");\n\t}\n}\n\nfunction resolve_book_type(o/*:WriteFileOpts*/) {\n\tif(o.bookType) return;\n\tvar _BT = {\n\t\t\"xls\": \"biff8\",\n\t\t\"htm\": \"html\",\n\t\t\"slk\": \"sylk\",\n\t\t\"socialcalc\": \"eth\",\n\t\t\"Sh33tJS\": \"WTF\"\n\t};\n\tvar ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n\tif(ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n\to.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSync(wb, o);\n}\n\nfunction writeFileSyncXLSX(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSyncXLSX(wb, o);\n}\n\n\nfunction writeFileAsync(filename/*:string*/, wb/*:Workbook*/, opts/*:?WriteFileOpts*/, cb/*:?(e?:ErrnoError)=>void*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\to.type = 'buffer';\n\tvar _cb = cb; if(!(_cb instanceof Function)) _cb = (opts/*:any*/);\n\treturn _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\n/*::\ntype MJRObject = {\n\trow: any;\n\tisempty: boolean;\n};\n*/\nfunction make_json_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array*/, header/*:number*/, hdr/*:Array*/, o/*:Sheet2JSONOpts*/)/*:MJRObject*/ {\n\tvar rr = encode_row(R);\n\tvar defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n\tvar isempty = true, dense = (sheet[\"!data\"] != null);\n\tvar row/*:any*/ = (header === 1) ? [] : {};\n\tif(header !== 1) {\n\t\tif(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; }\n\t\telse row.__rowNum__ = R;\n\t}\n\tif(!dense || sheet[\"!data\"][R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar val = dense ? (sheet[\"!data\"][R]||[])[C] : sheet[cols[C] + rr];\n\t\tif(val === undefined || val.t === undefined) {\n\t\t\tif(defval === undefined) continue;\n\t\t\tif(hdr[C] != null) { row[hdr[C]] = defval; }\n\t\t\tcontinue;\n\t\t}\n\t\tvar v = val.v;\n\t\tswitch(val.t){\n\t\t\tcase 'z': if(v == null) break; continue;\n\t\t\tcase 'e': v = (v == 0 ? null : void 0); break;\n\t\t\tcase 's': case 'd': case 'b': case 'n': break;\n\t\t\tdefault: throw new Error('unrecognized type ' + val.t);\n\t\t}\n\t\tif(hdr[C] != null) {\n\t\t\tif(v == null) {\n\t\t\t\tif(val.t == \"e\" && v === null) row[hdr[C]] = null;\n\t\t\t\telse if(defval !== undefined) row[hdr[C]] = defval;\n\t\t\t\telse if(raw && v === null) row[hdr[C]] = null;\n\t\t\t\telse continue;\n\t\t\t} else {\n\t\t\t\trow[hdr[C]] = raw && (val.t !== \"n\" || (val.t === \"n\" && o.rawNumbers !== false)) ? v : format_cell(val,v,o);\n\t\t\t}\n\t\t\tif(v != null) isempty = false;\n\t\t}\n\t}\n\treturn { row: row, isempty: isempty };\n}\n\n\nfunction sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) {\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\telse if(o.header == null) header = 0;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array*/ = [];\n\tvar out/*:Array*/ = [];\n\tvar outi = 0, counter = 0;\n\tvar dense = sheet[\"!data\"] != null;\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[\"!data\"][R]) sheet[\"!data\"][R] = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[\"!data\"][R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tfor (R = r.s.r + offset; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, o);\n\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n\t}\n\tout.length = outi;\n\treturn out;\n}\n\nvar qreg = /\"/g;\nfunction make_csv_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array*/, fs/*:number*/, rs/*:number*/, FS/*:string*/, o/*:Sheet2CSVOpts*/)/*:?string*/ {\n\tvar isempty = true;\n\tvar row/*:Array*/ = [], txt = \"\", rr = encode_row(R);\n\tvar dense = sheet[\"!data\"] != null;\n\tvar datarow = dense && sheet[\"!data\"][R] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tif (!cols[C]) continue;\n\t\tvar val = dense ? datarow[C]: sheet[cols[C] + rr];\n\t\tif(val == null) txt = \"\";\n\t\telse if(val.v != null) {\n\t\t\tisempty = false;\n\t\t\ttxt = ''+(o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\t\t\tfor(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\"; break; }\n\t\t\tif(txt == \"ID\") txt = '\"ID\"';\n\t\t} else if(val.f != null && !val.F) {\n\t\t\tisempty = false;\n\t\t\ttxt = '=' + val.f; if(txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n\t\t} else txt = \"\";\n\t\t/* NOTE: Excel CSV does not support array formulae */\n\t\trow.push(txt);\n\t}\n\tif(o.blankrows === false && isempty) return null;\n\treturn row.join(FS);\n}\n\nfunction sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:string*/ {\n\tvar out/*:Array*/ = [];\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) return \"\";\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\tvar row = \"\", cols/*:Array*/ = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar w = 0;\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\trow = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\t\tif(row == null) { continue; }\n\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\tif(row || (o.blankrows !== false)) out.push((w++ ? RS : \"\") + row);\n\t}\n\treturn out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tif(!opts) opts = {}; opts.FS = \"\\t\"; opts.RS = \"\\n\";\n\tvar s = sheet_to_csv(sheet, opts);\n\tif(typeof $cptable == 'undefined' || opts.type == 'string') return s;\n\tvar o = $cptable.utils.encode(1200, s, 'str');\n\treturn String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet/*:Worksheet*/)/*:Array*/ {\n\tvar y = \"\", x, val=\"\";\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar r = safe_decode_range(sheet['!ref']), rr = \"\", cols/*:Array*/ = [], C;\n\tvar cmds/*:Array*/ = [];\n\tvar dense = sheet[\"!data\"] != null;\n\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\ty = cols[C] + rr;\n\t\t\tx = dense ? (sheet[\"!data\"][R]||[])[C] : sheet[y];\n\t\t\tval = \"\";\n\t\t\tif(x === undefined) continue;\n\t\t\telse if(x.F != null) {\n\t\t\t\ty = x.F;\n\t\t\t\tif(!x.f) continue;\n\t\t\t\tval = x.f;\n\t\t\t\tif(y.indexOf(\":\") == -1) y = y + \":\" + y;\n\t\t\t}\n\t\t\tif(x.f != null) val = x.f;\n\t\t\telse if(x.t == 'z') continue;\n\t\t\telse if(x.t == 'n' && x.v != null) val = \"\" + x.v;\n\t\t\telse if(x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";\n\t\t\telse if(x.w !== undefined) val = \"'\" + x.w;\n\t\t\telse if(x.v === undefined) continue;\n\t\t\telse if(x.t == 's') val = \"'\" + x.v;\n\t\t\telse val = \"\"+x.v;\n\t\t\tcmds[cmds.length] = y + \"=\" + val;\n\t\t}\n\t}\n\treturn cmds;\n}\n\nfunction sheet_add_json(_ws/*:?Worksheet*/, js/*:Array*/, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar dense = _ws ? (_ws[\"!data\"] != null) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar offset = +!o.skipHeader;\n\tvar ws/*:Worksheet*/ = _ws || ({});\n\tif(!_ws && dense) ws[\"!data\"] = [];\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}}/*:any*/);\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) { _R = _range.e.r + 1; range.e.r = _R + js.length - 1 + offset; }\n\t} else {\n\t\tif(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }\n\t}\n\tvar hdr/*:Array*/ = o.header || [], C = 0;\n\tvar ROW = [];\n\tjs.forEach(function (JS, R/*:number*/) {\n\t\tif(dense && !ws[\"!data\"][_R + R + offset]) ws[\"!data\"][_R + R + offset] = [];\n\t\tif(dense) ROW = ws[\"!data\"][_R + R + offset];\n\t\tkeys(JS).forEach(function(k) {\n\t\t\tif((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;\n\t\t\tvar v = JS[k];\n\t\t\tvar t = 'z';\n\t\t\tvar z = \"\";\n\t\t\tvar ref = dense ? \"\" : (encode_col(_C + C) + encode_row(_R + R + offset));\n\t\t\tvar cell/*:Cell*/ = dense ? ROW[_C + C] : ws[ref];\n\t\t\tif(v && typeof v === 'object' && !(v instanceof Date)){\n\t\t\t\tif(dense) ROW[_C + C] = v;\n\t\t\t\telse ws[ref] = v;\n\t\t\t} else {\n\t\t\t\tif(typeof v == 'number') t = 'n';\n\t\t\t\telse if(typeof v == 'boolean') t = 'b';\n\t\t\t\telse if(typeof v == 'string') t = 's';\n\t\t\t\telse if(v instanceof Date) {\n\t\t\t\t\tt = 'd';\n\t\t\t\t\tif(!o.cellDates) { t = 'n'; v = datenum(v); }\n\t\t\t\t\tz = (cell != null && cell.z && fmt_is_date(cell.z)) ? cell.z : (o.dateNF || table_fmt[14]);\n\t\t\t\t}\n\t\t\t\telse if(v === null && o.nullError) { t = 'e'; v = 0; }\n\t\t\t\tif(!cell) {\n\t\t\t\t\tif(!dense) ws[ref] = cell = ({t:t, v:v}/*:any*/);\n\t\t\t\t\telse ROW[_C + C] = cell = ({t:t, v:v}/*:any*/);\n\t\t\t\t} else {\n\t\t\t\t\tcell.t = t; cell.v = v;\n\t\t\t\t\tdelete cell.w; delete cell.R;\n\t\t\t\t\tif(z) cell.z = z;\n\t\t\t\t}\n\t\t\t\tif(z) cell.z = z;\n\t\t\t}\n\t\t});\n\t});\n\trange.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\tvar __R = encode_row(_R);\n\tif(dense && !ws[\"!data\"][_R]) ws[\"!data\"][_R] = [];\n\tif(offset) for(C = 0; C < hdr.length; ++C) {\n\t\tif(dense) ws[\"!data\"][_R][C + _C] = {t:'s', v:hdr[C]};\n\t\telse ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]};\n\t}\n\tws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction json_to_sheet(js/*:Array*/, opts)/*:Worksheet*/ { return sheet_add_json(null, js, opts); }\n\n/* get cell, creating a stub if necessary */\nfunction ws_get_cell_stub(ws/*:Worksheet*/, R, C/*:?number*/)/*:Cell*/ {\n\t/* A1 cell address */\n\tif(typeof R == \"string\") {\n\t\tif(ws[\"!data\"] != null) {\n\t\t\tvar RC = decode_cell(R);\n\t\t\tif(!ws[\"!data\"][RC.r]) ws[\"!data\"][RC.r] = [];\n\t\t\treturn ws[\"!data\"][RC.r][RC.c] || (ws[\"!data\"][RC.r][RC.c] = {t:'z'});\n\t\t}\n\t\treturn ws[R] || (ws[R] = {t:'z'});\n\t}\n\t/* cell address object */\n\tif(typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n\t/* R and C are 0-based indices */\n\treturn ws_get_cell_stub(ws, encode_col(C||0) + encode_row(R));\n}\n\n/* find sheet index for given name / validate index */\nfunction wb_sheet_idx(wb/*:Workbook*/, sh/*:number|string*/) {\n\tif(typeof sh == \"number\") {\n\t\tif(sh >= 0 && wb.SheetNames.length > sh) return sh;\n\t\tthrow new Error(\"Cannot find sheet # \" + sh);\n\t} else if(typeof sh == \"string\") {\n\t\tvar idx = wb.SheetNames.indexOf(sh);\n\t\tif(idx > -1) return idx;\n\t\tthrow new Error(\"Cannot find sheet name |\" + sh + \"|\");\n\t} else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n\n/* simple blank workbook object */\nfunction book_new()/*:Workbook*/ {\n\treturn { SheetNames: [], Sheets: {} };\n}\n\n/* add a worksheet to the end of a given workbook */\nfunction book_append_sheet(wb/*:Workbook*/, ws/*:Worksheet*/, name/*:?string*/, roll/*:?boolean*/)/*:string*/ {\n\tvar i = 1;\n\tif(!name) for(; i <= 0xFFFF; ++i, name = undefined) if(wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n\tif(!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n\tif(roll && wb.SheetNames.indexOf(name) >= 0) {\n\t\tvar m = name.match(/(^.*?)(\\d+)$/);\n\t\ti = m && +m[2] || 0;\n\t\tvar root = m && m[1] || name;\n\t\tfor(++i; i <= 0xFFFF; ++i) if(wb.SheetNames.indexOf(name = root + i) == -1) break;\n\t}\n\tcheck_ws_name(name);\n\tif(wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n\n\twb.SheetNames.push(name);\n\twb.Sheets[name] = ws;\n\treturn name;\n}\n\n/* set sheet visibility (visible/hidden/very hidden) */\nfunction book_set_sheet_visibility(wb/*:Workbook*/, sh/*:number|string*/, vis/*:number*/) {\n\tif(!wb.Workbook) wb.Workbook = {};\n\tif(!wb.Workbook.Sheets) wb.Workbook.Sheets = [];\n\n\tvar idx = wb_sheet_idx(wb, sh);\n\t// $FlowIgnore\n\tif(!wb.Workbook.Sheets[idx]) wb.Workbook.Sheets[idx] = {};\n\n\tswitch(vis) {\n\t\tcase 0: case 1: case 2: break;\n\t\tdefault: throw new Error(\"Bad sheet visibility setting \" + vis);\n\t}\n\t// $FlowIgnore\n\twb.Workbook.Sheets[idx].Hidden = vis;\n}\n\n/* set number format */\nfunction cell_set_number_format(cell/*:Cell*/, fmt/*:string|number*/) {\n\tcell.z = fmt;\n\treturn cell;\n}\n\n/* set cell hyperlink */\nfunction cell_set_hyperlink(cell/*:Cell*/, target/*:string*/, tooltip/*:?string*/) {\n\tif(!target) {\n\t\tdelete cell.l;\n\t} else {\n\t\tcell.l = ({ Target: target }/*:Hyperlink*/);\n\t\tif(tooltip) cell.l.Tooltip = tooltip;\n\t}\n\treturn cell;\n}\nfunction cell_set_internal_link(cell/*:Cell*/, range/*:string*/, tooltip/*:?string*/) { return cell_set_hyperlink(cell, \"#\" + range, tooltip); }\n\n/* add to cell comments */\nfunction cell_add_comment(cell/*:Cell*/, text/*:string*/, author/*:?string*/) {\n\tif(!cell.c) cell.c = [];\n\tcell.c.push({t:text, a:author||\"SheetJS\"});\n}\n\n/* set array formula and flush related cells */\nfunction sheet_set_array_formula(ws/*:Worksheet*/, range, formula/*:string*/, dynamic/*:boolean*/) {\n\tvar rng = typeof range != \"string\" ? range : safe_decode_range(range);\n\tvar rngstr = typeof range == \"string\" ? range : encode_range(range);\n\tfor(var R = rng.s.r; R <= rng.e.r; ++R) for(var C = rng.s.c; C <= rng.e.c; ++C) {\n\t\tvar cell = ws_get_cell_stub(ws, R, C);\n\t\tcell.t = 'n';\n\t\tcell.F = rngstr;\n\t\tdelete cell.v;\n\t\tif(R == rng.s.r && C == rng.s.c) {\n\t\t\tcell.f = formula;\n\t\t\tif(dynamic) cell.D = true;\n\t\t}\n\t}\n\tvar wsr = decode_range(ws[\"!ref\"]);\n\tif(wsr.s.r > rng.s.r) wsr.s.r = rng.s.r;\n\tif(wsr.s.c > rng.s.c) wsr.s.c = rng.s.c;\n\tif(wsr.e.r < rng.e.r) wsr.e.r = rng.e.r;\n\tif(wsr.e.c < rng.e.c) wsr.e.c = rng.e.c;\n\tws[\"!ref\"] = encode_range(wsr);\n\treturn ws;\n}\n\nvar utils/*:any*/ = {\n\tencode_col: encode_col,\n\tencode_row: encode_row,\n\tencode_cell: encode_cell,\n\tencode_range: encode_range,\n\tdecode_col: decode_col,\n\tdecode_row: decode_row,\n\tsplit_cell: split_cell,\n\tdecode_cell: decode_cell,\n\tdecode_range: decode_range,\n\tformat_cell: format_cell,\n\tsheet_add_aoa: sheet_add_aoa,\n\tsheet_add_json: sheet_add_json,\n\tsheet_add_dom: sheet_add_dom,\n\taoa_to_sheet: aoa_to_sheet,\n\tjson_to_sheet: json_to_sheet,\n\ttable_to_sheet: parse_dom_table,\n\ttable_to_book: table_to_book,\n\tsheet_to_csv: sheet_to_csv,\n\tsheet_to_txt: sheet_to_txt,\n\tsheet_to_json: sheet_to_json,\n\tsheet_to_html: sheet_to_html,\n\tsheet_to_formulae: sheet_to_formulae,\n\tsheet_to_row_object_array: sheet_to_json,\n\tsheet_get_cell: ws_get_cell_stub,\n\tbook_new: book_new,\n\tbook_append_sheet: book_append_sheet,\n\tbook_set_sheet_visibility: book_set_sheet_visibility,\n\tcell_set_number_format: cell_set_number_format,\n\tcell_set_hyperlink: cell_set_hyperlink,\n\tcell_set_internal_link: cell_set_internal_link,\n\tcell_add_comment: cell_add_comment,\n\tsheet_set_array_formula: sheet_set_array_formula,\n\tconsts: {\n\t\tSHEET_VISIBLE: 0,\n\t\tSHEET_HIDDEN: 1,\n\t\tSHEET_VERY_HIDDEN: 2\n\t}\n};\n\nvar _Readable;\nfunction set_readable(R) { _Readable = R; }\n\nfunction write_csv_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable();\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\tvar row/*:?string*/ = \"\", cols/*:Array*/ = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar R = r.s.r;\n\tvar BOM = false, w = 0;\n\tstream._read = function() {\n\t\tif(!BOM) { BOM = true; return stream.push(\"\\uFEFF\"); }\n\t\twhile(R <= r.e.r) {\n\t\t\t++R;\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\trow = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o);\n\t\t\tif(row != null) {\n\t\t\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\t\t\tif(row || (o.blankrows !== false)) return stream.push((w++ ? RS : \"\") + row);\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nfunction write_html_stream(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) {\n\tvar stream = _Readable();\n\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tstream.push(header);\n\tvar r = decode_range(ws['!ref']);\n\tstream.push(make_html_preamble(ws, r, o));\n\tvar R = r.s.r;\n\tvar end = false;\n\tstream._read = function() {\n\t\tif(R > r.e.r) {\n\t\t\tif(!end) { end = true; stream.push(\"\" + footer); }\n\t\t\treturn stream.push(null);\n\t\t}\n\t\twhile(R <= r.e.r) {\n\t\t\tstream.push(make_html_row(ws, r, R, o));\n\t\t\t++R;\n\t\t\tbreak;\n\t\t}\n\t};\n\treturn stream;\n}\n\nfunction write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable({objectMode:true});\n\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array*/ = [];\n\tvar counter = 0;\n\tvar dense = sheet[\"!data\"] != null;\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[\"!data\"][R]) sheet[\"!data\"][R] = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[\"!data\"][R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tR = r.s.r + offset;\n\tstream._read = function() {\n\t\twhile(R <= r.e.r) {\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, o);\n\t\t\t++R;\n\t\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n\t\t\t\tstream.push(row.row);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nvar __stream = {\n\tto_json: write_json_stream,\n\tto_html: write_html_stream,\n\tto_csv: write_csv_stream,\n\tset_readable: set_readable\n};\nexport const version = XLSX.version;\nexport {\n\tparse_xlscfb,\n\tparse_zip,\n\treadSync as read,\n\treadFileSync as readFile,\n\treadFileSync,\n\twriteSync as write,\n\twriteFileSync as writeFile,\n\twriteFileSync,\n\twriteFileAsync,\n\twriteSyncXLSX as writeXLSX,\n\twriteFileSyncXLSX as writeFileXLSX,\n\tutils,\n\tset_fs,\n\tset_cptable,\n\t__stream as stream,\n\tSSF,\n\tCFB\n};\nexport default {\n\tparse_xlscfb,\n\tparse_zip,\n\tread: readSync,\n\treadFile: readFileSync,\n\treadFileSync,\n\twrite: writeSync,\n\twriteFile: writeFileSync,\n\twriteFileSync,\n\twriteFileAsync,\n\twriteXLSX: writeSyncXLSX,\n\twriteFileXLSX: writeFileSyncXLSX,\n\tutils,\n\tset_fs,\n\tset_cptable,\n\tstream: __stream,\n\tSSF,\n\tCFB\n}\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param {Uint8Array} p1 Polynomial\n * @param {Uint8Array} p2 Polynomial\n * @return {Uint8Array} Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n for (let i = 0; i < p1.length; i++) {\n for (let j = 0; j < p2.length; j++) {\n coeff[i + j] ^= GF.mul(p1[i], p2[j])\n }\n }\n\n return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param {Uint8Array} divident Polynomial\n * @param {Uint8Array} divisor Polynomial\n * @return {Uint8Array} Remainder\n */\nexports.mod = function mod (divident, divisor) {\n let result = new Uint8Array(divident)\n\n while ((result.length - divisor.length) >= 0) {\n const coeff = result[0]\n\n for (let i = 0; i < divisor.length; i++) {\n result[i] ^= GF.mul(divisor[i], coeff)\n }\n\n // remove all zeros from buffer head\n let offset = 0\n while (offset < result.length && result[offset] === 0) offset++\n result = result.slice(offset)\n }\n\n return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param {Number} degree Degree of the generator polynomial\n * @return {Uint8Array} Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n let poly = new Uint8Array([1])\n for (let i = 0; i < degree; i++) {\n poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n }\n\n return poly\n}\n","/**\n * Check if QR Code version is valid\n *\n * @param {Number} version QR Code version\n * @return {Boolean} true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n return !isNaN(version) && version >= 1 && version <= 40\n}\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n this.mode = Mode.KANJI\n this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n let i\n\n // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n // These byte values are shifted from the JIS X 0208 values.\n // JIS X 0208 gives details of the shift coded representation.\n for (i = 0; i < this.data.length; i++) {\n let value = Utils.toSJIS(this.data[i])\n\n // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n if (value >= 0x8140 && value <= 0x9FFC) {\n // Subtract 0x8140 from Shift JIS value\n value -= 0x8140\n\n // For characters with Shift JIS values from 0xE040 to 0xEBBF\n } else if (value >= 0xE040 && value <= 0xEBBF) {\n // Subtract 0xC140 from Shift JIS value\n value -= 0xC140\n } else {\n throw new Error(\n 'Invalid SJIS character: ' + this.data[i] + '\\n' +\n 'Make sure your charset is UTF-8')\n }\n\n // Multiply most significant byte of result by 0xC0\n // and add least significant byte to product\n value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n // Convert result to a 13-bit binary string\n bitBuffer.put(value, 13)\n }\n}\n\nmodule.exports = KanjiData\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L M Q H\r\n 1, 1, 1, 1,\r\n 1, 1, 1, 1,\r\n 1, 1, 2, 2,\r\n 1, 2, 2, 4,\r\n 1, 2, 4, 4,\r\n 2, 4, 4, 4,\r\n 2, 4, 6, 5,\r\n 2, 4, 6, 6,\r\n 2, 5, 8, 8,\r\n 4, 5, 8, 8,\r\n 4, 5, 8, 11,\r\n 4, 8, 10, 11,\r\n 4, 9, 12, 16,\r\n 4, 9, 16, 16,\r\n 6, 10, 12, 18,\r\n 6, 10, 17, 16,\r\n 6, 11, 16, 19,\r\n 6, 13, 18, 21,\r\n 7, 14, 21, 25,\r\n 8, 16, 20, 25,\r\n 8, 17, 23, 25,\r\n 9, 17, 23, 34,\r\n 9, 18, 25, 30,\r\n 10, 20, 27, 32,\r\n 12, 21, 29, 35,\r\n 12, 23, 34, 37,\r\n 12, 25, 34, 40,\r\n 13, 26, 35, 42,\r\n 14, 28, 38, 45,\r\n 15, 29, 40, 48,\r\n 16, 31, 43, 51,\r\n 17, 33, 45, 54,\r\n 18, 35, 48, 57,\r\n 19, 37, 51, 60,\r\n 19, 38, 53, 63,\r\n 20, 40, 56, 66,\r\n 21, 43, 59, 70,\r\n 22, 45, 62, 74,\r\n 24, 47, 65, 77,\r\n 25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L M Q H\r\n 7, 10, 13, 17,\r\n 10, 16, 22, 28,\r\n 15, 26, 36, 44,\r\n 20, 36, 52, 64,\r\n 26, 48, 72, 88,\r\n 36, 64, 96, 112,\r\n 40, 72, 108, 130,\r\n 48, 88, 132, 156,\r\n 60, 110, 160, 192,\r\n 72, 130, 192, 224,\r\n 80, 150, 224, 264,\r\n 96, 176, 260, 308,\r\n 104, 198, 288, 352,\r\n 120, 216, 320, 384,\r\n 132, 240, 360, 432,\r\n 144, 280, 408, 480,\r\n 168, 308, 448, 532,\r\n 180, 338, 504, 588,\r\n 196, 364, 546, 650,\r\n 224, 416, 600, 700,\r\n 224, 442, 644, 750,\r\n 252, 476, 690, 816,\r\n 270, 504, 750, 900,\r\n 300, 560, 810, 960,\r\n 312, 588, 870, 1050,\r\n 336, 644, 952, 1110,\r\n 360, 700, 1020, 1200,\r\n 390, 728, 1050, 1260,\r\n 420, 784, 1140, 1350,\r\n 450, 812, 1200, 1440,\r\n 480, 868, 1290, 1530,\r\n 510, 924, 1350, 1620,\r\n 540, 980, 1440, 1710,\r\n 570, 1036, 1530, 1800,\r\n 570, 1064, 1590, 1890,\r\n 600, 1120, 1680, 1980,\r\n 630, 1204, 1770, 2100,\r\n 660, 1260, 1860, 2220,\r\n 720, 1316, 1950, 2310,\r\n 750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n","'use strict';\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toOffset = require('../internals/to-offset');\nvar toIndexedObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar $set = Int8ArrayPrototype && Int8ArrayPrototype.set;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS = !fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n var array = new Uint8ClampedArray(2);\n call($set, array, { length: 1, 0: 3 }, 1);\n return array[1] !== 3;\n});\n\n// https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other\nvar TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {\n var array = new Int8Array(2);\n array.set(1);\n array.set('2', 1);\n return array[0] !== 0 || array[1] !== 2;\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var src = toIndexedObject(arrayLike);\n if (WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS) return call($set, this, src, offset);\n var length = this.length;\n var len = lengthOfArrayLike(src);\n var index = 0;\n if (len + offset > length) throw RangeError('Wrong length');\n while (index < len) this[offset + index] = src[index++];\n}, !WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n const alpha = color.a / 255\n const str = attrib + '=\"' + color.hex + '\"'\n\n return alpha < 1\n ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n : str\n}\n\nfunction svgCmd (cmd, x, y) {\n let str = cmd + x\n if (typeof y !== 'undefined') str += ' ' + y\n\n return str\n}\n\nfunction qrToPath (data, size, margin) {\n let path = ''\n let moveBy = 0\n let newRow = false\n let lineLength = 0\n\n for (let i = 0; i < data.length; i++) {\n const col = Math.floor(i % size)\n const row = Math.floor(i / size)\n\n if (!col && !newRow) newRow = true\n\n if (data[i]) {\n lineLength++\n\n if (!(i > 0 && col > 0 && data[i - 1])) {\n path += newRow\n ? svgCmd('M', col + margin, 0.5 + row + margin)\n : svgCmd('m', moveBy, 0)\n\n moveBy = 0\n newRow = false\n }\n\n if (!(col + 1 < size && data[i + 1])) {\n path += svgCmd('h', lineLength)\n lineLength = 0\n }\n } else {\n moveBy++\n }\n }\n\n return path\n}\n\nexports.render = function render (qrData, options, cb) {\n const opts = Utils.getOptions(options)\n const size = qrData.modules.size\n const data = qrData.modules.data\n const qrcodesize = size + opts.margin * 2\n\n const bg = !opts.color.light.a\n ? ''\n : ''\n\n const path =\n ''\n\n const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n const svgTag = '' + bg + path + '\\n'\n\n if (typeof cb === 'function') {\n cb(null, svgTag)\n }\n\n return svgTag\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n if (!canvas.style) canvas.style = {}\n canvas.height = size\n canvas.width = size\n canvas.style.height = size + 'px'\n canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n try {\n return document.createElement('canvas')\n } catch (e) {\n throw new Error('You need to specify a canvas element')\n }\n}\n\nexports.render = function render (qrData, canvas, options) {\n let opts = options\n let canvasEl = canvas\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!canvas) {\n canvasEl = getCanvasElement()\n }\n\n opts = Utils.getOptions(opts)\n const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n const ctx = canvasEl.getContext('2d')\n const image = ctx.createImageData(size, size)\n Utils.qrToImageData(image.data, qrData, opts)\n\n clearCanvas(ctx, canvasEl, size)\n ctx.putImageData(image, 0, 0)\n\n return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n let opts = options\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!opts) opts = {}\n\n const canvasEl = exports.render(qrData, canvas, opts)\n\n const type = opts.type || 'image/png'\n const rendererOpts = opts.rendererOpts || {}\n\n return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","function hex2rgba (hex) {\n if (typeof hex === 'number') {\n hex = hex.toString()\n }\n\n if (typeof hex !== 'string') {\n throw new Error('Color should be defined as hex string')\n }\n\n let hexCode = hex.slice().replace('#', '').split('')\n if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n throw new Error('Invalid hex color: ' + hex)\n }\n\n // Convert from short to long form (fff -> ffffff)\n if (hexCode.length === 3 || hexCode.length === 4) {\n hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n return [c, c]\n }))\n }\n\n // Add default alpha value\n if (hexCode.length === 6) hexCode.push('F', 'F')\n\n const hexValue = parseInt(hexCode.join(''), 16)\n\n return {\n r: (hexValue >> 24) & 255,\n g: (hexValue >> 16) & 255,\n b: (hexValue >> 8) & 255,\n a: hexValue & 255,\n hex: '#' + hexCode.slice(0, 6).join('')\n }\n}\n\nexports.getOptions = function getOptions (options) {\n if (!options) options = {}\n if (!options.color) options.color = {}\n\n const margin = typeof options.margin === 'undefined' ||\n options.margin === null ||\n options.margin < 0\n ? 4\n : options.margin\n\n const width = options.width && options.width >= 21 ? options.width : undefined\n const scale = options.scale || 4\n\n return {\n width: width,\n scale: width ? 4 : scale,\n margin: margin,\n color: {\n dark: hex2rgba(options.color.dark || '#000000ff'),\n light: hex2rgba(options.color.light || '#ffffffff')\n },\n type: options.type,\n rendererOpts: options.rendererOpts || {}\n }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n return opts.width && opts.width >= qrSize + opts.margin * 2\n ? opts.width / (qrSize + opts.margin * 2)\n : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n const scale = exports.getScale(qrSize, opts)\n return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n const size = qr.modules.size\n const data = qr.modules.data\n const scale = exports.getScale(size, opts)\n const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n const scaledMargin = opts.margin * scale\n const palette = [opts.color.light, opts.color.dark]\n\n for (let i = 0; i < symbolSize; i++) {\n for (let j = 0; j < symbolSize; j++) {\n let posDst = (i * symbolSize + j) * 4\n let pxColor = opts.color.light\n\n if (i >= scaledMargin && j >= scaledMargin &&\n i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n const iSrc = Math.floor((i - scaledMargin) / scale)\n const jSrc = Math.floor((j - scaledMargin) / scale)\n pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n }\n\n imgData[posDst++] = pxColor.r\n imgData[posDst++] = pxColor.g\n imgData[posDst++] = pxColor.b\n imgData[posDst] = pxColor.a\n }\n }\n}\n","// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('center',[(_vm.x)?_c('figure',{staticClass:\"qrcode\"},[_c('qrcode',{attrs:{\"value\":_vm.value,\"color\":_vm.color,\"type\":_vm.type,\"quality\":1,\"width\":200,\"scale\":1,\"margin\":1},on:{\"change\":_vm.onDataUrlChange}}),(_vm.dataUrl)?_c('v-img',{attrs:{\"src\":_vm.dataUrl}}):_vm._e(),_c('img',{staticClass:\"qrcode__image\",attrs:{\"src\":require('../assets/xicon.png'),\"alt\":\"Chen Fengyuan\"}})],1):_vm._e(),_c('p',[_c('a',{attrs:{\"href\":_vm.value,\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.Desc))]),_vm._v(\" | \"),_c('a',{attrs:{\"download\":\"Barcode.png\",\"href\":_vm.dataUrl,\"target\":\"_blank\"}},[_vm._v(\"[ Barcode ]\")])])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { __rest } from \"tslib\";\nimport QRCode from 'qrcode';\nimport { defineComponent, h, ref, watch } from 'vue';\nexport const LEVELS = [\n 'low',\n 'medium',\n 'quartile',\n 'high',\n 'L',\n 'M',\n 'Q',\n 'H',\n];\nexport const MASK_PATTERNS = [0, 1, 2, 3, 4, 5, 6, 7];\nexport const MODES = ['alphanumeric', 'numeric', 'kanji', 'byte'];\nexport const TYPES = ['image/png', 'image/jpeg', 'image/webp'];\nconst MAX_QR_VERSION = 40;\nexport default defineComponent({\n props: {\n version: {\n type: Number,\n validator: (version) => version === Number.parseInt(String(version), 10) &&\n version >= 1 &&\n version <= MAX_QR_VERSION,\n },\n errorCorrectionLevel: {\n type: String,\n validator: (level) => LEVELS.includes(level),\n },\n maskPattern: {\n type: Number,\n validator: (maskPattern) => MASK_PATTERNS.includes(maskPattern),\n },\n toSJISFunc: Function,\n margin: Number,\n scale: Number,\n width: Number,\n color: {\n type: Object,\n validator: (color) => ['dark', 'light'].every(c => ['string', 'undefined'].includes(typeof color[c])),\n required: true,\n },\n type: {\n type: String,\n validator: (type) => TYPES.includes(type),\n required: true,\n },\n quality: {\n type: Number,\n validator: (quality) => quality === Number.parseFloat(String(quality)) &&\n quality >= 0 &&\n quality <= 1,\n required: false,\n },\n value: {\n type: [String, Array],\n required: true,\n validator(value) {\n if (typeof value === 'string') {\n return true;\n }\n return value.every(it => typeof it.data === 'string' &&\n 'mode' in it &&\n MODES.includes(it.mode));\n },\n },\n },\n setup(props, { attrs, emit }) {\n const dataUrlRef = ref();\n const toDataURL = () => {\n const { quality, value } = props, rest = __rest(props, [\"quality\", \"value\"]);\n QRCode.toDataURL(value, Object.assign(rest, quality == null || { renderOptions: { quality } }))\n .then(dataUrl => {\n dataUrlRef.value = dataUrl;\n emit('change', dataUrl);\n })\n .catch((err) => emit('error', err));\n };\n watch(props, toDataURL, { immediate: true });\n return () => h('img', Object.assign(Object.assign({}, attrs), { src: dataUrlRef.value }));\n },\n});\n//# sourceMappingURL=index.js.map","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Barcode.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Barcode.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Barcode.vue?vue&type=template&id=aef5175a&scoped=true&\"\nimport script from \"./Barcode.vue?vue&type=script&lang=js&\"\nexport * from \"./Barcode.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Barcode.vue?vue&type=style&index=0&id=aef5175a&prod&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"aef5175a\",\n null\n \n)\n\nexport default component.exports","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n if (!size || size < 1) {\n throw new Error('BitMatrix size must be defined and greater than 0')\n }\n\n this.size = size\n this.data = new Uint8Array(size * size)\n this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n const index = row * this.size + col\n this.data[index] = value\n if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","'use strict'\n\nmodule.exports = function encodeUtf8 (input) {\n var result = []\n var size = input.length\n\n for (var index = 0; index < size; index++) {\n var point = input.charCodeAt(index)\n\n if (point >= 0xD800 && point <= 0xDBFF && size > index + 1) {\n var second = input.charCodeAt(index + 1)\n\n if (second >= 0xDC00 && second <= 0xDFFF) {\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n point = (point - 0xD800) * 0x400 + second - 0xDC00 + 0x10000\n index += 1\n }\n }\n\n // US-ASCII\n if (point < 0x80) {\n result.push(point)\n continue\n }\n\n // 2-byte UTF-8\n if (point < 0x800) {\n result.push((point >> 6) | 192)\n result.push((point & 63) | 128)\n continue\n }\n\n // 3-byte UTF-8\n if (point < 0xD800 || (point >= 0xE000 && point < 0x10000)) {\n result.push((point >> 12) | 224)\n result.push(((point >> 6) & 63) | 128)\n result.push((point & 63) | 128)\n continue\n }\n\n // 4-byte UTF-8\n if (point >= 0x10000 && point <= 0x10FFFF) {\n result.push((point >> 18) | 240)\n result.push(((point >> 12) & 63) | 128)\n result.push(((point >> 6) & 63) | 128)\n result.push((point & 63) | 128)\n continue\n }\n\n // Invalid character\n result.push(0xEF, 0xBF, 0xBD)\n }\n\n return new Uint8Array(result).buffer\n}\n","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n let x = 1\n for (let i = 0; i < 255; i++) {\n EXP_TABLE[i] = x\n LOG_TABLE[x] = i\n\n x <<= 1 // multiply by 2\n\n // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n x ^= 0x11D\n }\n }\n\n // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n // stay inside the bounds (because we will mainly use this table for the multiplication of\n // two GF numbers, no more).\n // @see {@link mul}\n for (let i = 255; i < 512; i++) {\n EXP_TABLE[i] = EXP_TABLE[i - 255]\n }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n if (n < 1) throw new Error('log(' + n + ')')\n return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param {Number} x\n * @param {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n if (x === 0 || y === 0) return 0\n\n // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n // @see {@link initTables}\n return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n PATTERN000: 0,\n PATTERN001: 1,\n PATTERN010: 2,\n PATTERN011: 3,\n PATTERN100: 4,\n PATTERN101: 5,\n PATTERN110: 6,\n PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n N1: 3,\n N2: 3,\n N3: 40,\n N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param {Number} mask Mask pattern\n * @return {Boolean} true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param {Number|String} value Mask pattern value\n * @return {Number} Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n const size = data.size\n let points = 0\n let sameCountCol = 0\n let sameCountRow = 0\n let lastCol = null\n let lastRow = null\n\n for (let row = 0; row < size; row++) {\n sameCountCol = sameCountRow = 0\n lastCol = lastRow = null\n\n for (let col = 0; col < size; col++) {\n let module = data.get(row, col)\n if (module === lastCol) {\n sameCountCol++\n } else {\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n lastCol = module\n sameCountCol = 1\n }\n\n module = data.get(col, row)\n if (module === lastRow) {\n sameCountRow++\n } else {\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n lastRow = module\n sameCountRow = 1\n }\n }\n\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n }\n\n return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n const size = data.size\n let points = 0\n\n for (let row = 0; row < size - 1; row++) {\n for (let col = 0; col < size - 1; col++) {\n const last = data.get(row, col) +\n data.get(row, col + 1) +\n data.get(row + 1, col) +\n data.get(row + 1, col + 1)\n\n if (last === 4 || last === 0) points++\n }\n }\n\n return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n const size = data.size\n let points = 0\n let bitsCol = 0\n let bitsRow = 0\n\n for (let row = 0; row < size; row++) {\n bitsCol = bitsRow = 0\n for (let col = 0; col < size; col++) {\n bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n }\n }\n\n return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n let darkCount = 0\n const modulesCount = data.data.length\n\n for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param {Number} maskPattern Pattern reference value\n * @param {Number} i Row\n * @param {Number} j Column\n * @return {Boolean} Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n switch (maskPattern) {\n case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n case exports.Patterns.PATTERN001: return i % 2 === 0\n case exports.Patterns.PATTERN010: return j % 3 === 0\n case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n default: throw new Error('bad maskPattern:' + maskPattern)\n }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param {Number} pattern Pattern reference number\n * @param {BitMatrix} data BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n const size = data.size\n\n for (let col = 0; col < size; col++) {\n for (let row = 0; row < size; row++) {\n if (data.isReserved(row, col)) continue\n data.xor(row, col, getMaskAt(pattern, row, col))\n }\n }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n const numPatterns = Object.keys(exports.Patterns).length\n let bestPattern = 0\n let lowerPenalty = Infinity\n\n for (let p = 0; p < numPatterns; p++) {\n setupFormatFunc(p)\n exports.applyMask(p, data)\n\n // Calculate penalty\n const penalty =\n exports.getPenaltyN1(data) +\n exports.getPenaltyN2(data) +\n exports.getPenaltyN3(data) +\n exports.getPenaltyN4(data)\n\n // Undo previously applied mask\n exports.applyMask(p, data)\n\n if (penalty < lowerPenalty) {\n lowerPenalty = penalty\n bestPattern = p\n }\n }\n\n return bestPattern\n}\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'l':\n case 'low':\n return exports.L\n\n case 'm':\n case 'medium':\n return exports.M\n\n case 'q':\n case 'quartile':\n return exports.Q\n\n case 'h':\n case 'high':\n return exports.H\n\n default:\n throw new Error('Unknown EC Level: ' + string)\n }\n}\n\nexports.isValid = function isValid (level) {\n return level && typeof level.bit !== 'undefined' &&\n level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","function BitBuffer () {\n this.buffer = []\n this.length = 0\n}\n\nBitBuffer.prototype = {\n\n get: function (index) {\n const bufIndex = Math.floor(index / 8)\n return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n },\n\n put: function (num, length) {\n for (let i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n }\n },\n\n getLengthInBits: function () {\n return this.length\n },\n\n putBit: function (bit) {\n const bufIndex = Math.floor(this.length / 8)\n if (this.buffer.length <= bufIndex) {\n this.buffer.push(0)\n }\n\n if (bit) {\n this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n }\n\n this.length++\n }\n}\n\nmodule.exports = BitBuffer\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n 0, // Not used\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param {Number} version QR Code version\n * @return {Number} size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n if (!version) throw new Error('\"version\" cannot be null or undefined')\n if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param {Number} version QR Code version\n * @return {Number} Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param {Number} data Value to encode\n * @return {Number} Encoded value\n */\nexports.getBCHDigit = function (data) {\n let digit = 0\n\n while (data !== 0) {\n digit++\n data >>>= 1\n }\n\n return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n if (typeof f !== 'function') {\n throw new Error('\"toSJISFunc\" is not a valid function.')\n }\n\n toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n return toSJISFunction(kanji)\n}\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n this.genPoly = undefined\n this.degree = degree\n\n if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n // create an irreducible generator polynomial\n this.degree = degree\n this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param {Uint8Array} data Buffer containing input data\n * @return {Uint8Array} Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n if (!this.genPoly) {\n throw new Error('Encoder not initialized')\n }\n\n // Calculate EC for this data block\n // extends data size to data+genPoly size\n const paddedData = new Uint8Array(data.length + this.degree)\n paddedData.set(data)\n\n // The error correction codewords are the remainder after dividing the data codewords\n // by a generator polynomial\n const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n // return EC data blocks (last n byte, where n is the degree of genPoly)\n // If coefficients number in remainder are less than genPoly degree,\n // pad with 0s to the left to reach the needed number of coefficients\n const start = this.degree - remainder.length\n if (start > 0) {\n const buff = new Uint8Array(this.degree)\n buff.set(remainder, start)\n\n return buff\n }\n\n return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.at` method\n// https://github.com/tc39/proposal-relative-indexing-method\nexportTypedArrayMethod('at', function at(index) {\n var O = aTypedArray(this);\n var len = lengthOfArrayLike(O);\n var relativeIndex = toIntegerOrInfinity(index);\n var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n return (k < 0 || k >= len) ? undefined : O[k];\n});\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.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","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const size = getSymbolSize(version)\n\n return [\n // top-left\n [0, 0],\n // top-right\n [size - FINDER_PATTERN_SIZE, 0],\n // bottom-left\n [0, size - FINDER_PATTERN_SIZE]\n ]\n}\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Number} mask Mask pattern\n * @return {Number} Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n const data = ((errorCorrectionLevel.bit << 3) | mask)\n let d = data << 10\n\n while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n }\n\n // xor final data with mask pattern in order to ensure that\n // no combination of Error Correction Level and data mask pattern\n // will result in an all-zero data string\n return ((data << 10) | d) ^ G15_MASK\n}\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findLast = require('../internals/array-iteration-from-last').findLast;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findLast` method\n// https://github.com/tc39/proposal-array-find-from-last\nexportTypedArrayMethod('findLast', function findLast(predicate /* , thisArg */) {\n return $findLast(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n this.mode = Mode.ALPHANUMERIC\n this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n let i\n\n // Input data characters are divided into groups of two characters\n // and encoded as 11-bit binary codes.\n for (i = 0; i + 2 <= this.data.length; i += 2) {\n // The character value of the first character is multiplied by 45\n let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n // The character value of the second digit is added to the product\n value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n // The sum is then stored as 11-bit binary number\n bitBuffer.put(value, 11)\n }\n\n // If the number of input data characters is not a multiple of two,\n // the character value of the final character is encoded as a 6-bit binary number.\n if (this.data.length % 2) {\n bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n }\n}\n\nmodule.exports = AlphanumericData\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ findLast, findLastIndex }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_FIND_LAST_INDEX = TYPE == 1;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var index = lengthOfArrayLike(self);\n var value, result;\n while (index-- > 0) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (result) switch (TYPE) {\n case 0: return value; // findLast\n case 1: return index; // findLastIndex\n }\n }\n return IS_FIND_LAST_INDEX ? -1 : undefined;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.findLast` method\n // https://github.com/tc39/proposal-array-find-from-last\n findLast: createMethod(0),\n // `Array.prototype.findLastIndex` method\n // https://github.com/tc39/proposal-array-find-from-last\n findLastIndex: createMethod(1)\n};\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n const size = matrix.size\n const pos = FinderPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -1; r <= 7; r++) {\n if (row + r <= -1 || size <= row + r) continue\n\n for (let c = -1; c <= 7; c++) {\n if (col + c <= -1 || size <= col + c) continue\n\n if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n const size = matrix.size\n\n for (let r = 8; r < size - 8; r++) {\n const value = r % 2 === 0\n matrix.set(r, 6, value, true)\n matrix.set(6, r, value, true)\n }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n const pos = AlignmentPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n if (r === -2 || r === 2 || c === -2 || c === 2 ||\n (r === 0 && c === 0)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n const size = matrix.size\n const bits = Version.getEncodedBits(version)\n let row, col, mod\n\n for (let i = 0; i < 18; i++) {\n row = Math.floor(i / 3)\n col = i % 3 + size - 8 - 3\n mod = ((bits >> i) & 1) === 1\n\n matrix.set(row, col, mod, true)\n matrix.set(col, row, mod, true)\n }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {Number} maskPattern Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n const size = matrix.size\n const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n let i, mod\n\n for (i = 0; i < 15; i++) {\n mod = ((bits >> i) & 1) === 1\n\n // vertical\n if (i < 6) {\n matrix.set(i, 8, mod, true)\n } else if (i < 8) {\n matrix.set(i + 1, 8, mod, true)\n } else {\n matrix.set(size - 15 + i, 8, mod, true)\n }\n\n // horizontal\n if (i < 8) {\n matrix.set(8, size - i - 1, mod, true)\n } else if (i < 9) {\n matrix.set(8, 15 - i - 1 + 1, mod, true)\n } else {\n matrix.set(8, 15 - i - 1, mod, true)\n }\n }\n\n // fixed module\n matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Uint8Array} data Data codewords\n */\nfunction setupData (matrix, data) {\n const size = matrix.size\n let inc = -1\n let row = size - 1\n let bitIndex = 7\n let byteIndex = 0\n\n for (let col = size - 1; col > 0; col -= 2) {\n if (col === 6) col--\n\n while (true) {\n for (let c = 0; c < 2; c++) {\n if (!matrix.isReserved(row, col - c)) {\n let dark = false\n\n if (byteIndex < data.length) {\n dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n }\n\n matrix.set(row, col - c, dark)\n bitIndex--\n\n if (bitIndex === -1) {\n byteIndex++\n bitIndex = 7\n }\n }\n }\n\n row += inc\n\n if (row < 0 || size <= row) {\n row -= inc\n inc = -inc\n break\n }\n }\n }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {ByteData} data Data input\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n // Prepare data buffer\n const buffer = new BitBuffer()\n\n segments.forEach(function (data) {\n // prefix data with mode indicator (4 bits)\n buffer.put(data.mode.bit, 4)\n\n // Prefix data with character count indicator.\n // The character count indicator is a string of bits that represents the\n // number of characters that are being encoded.\n // The character count indicator must be placed after the mode indicator\n // and must be a certain number of bits long, depending on the QR version\n // and data mode\n // @see {@link Mode.getCharCountIndicator}.\n buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n // add binary data sequence to buffer\n data.write(buffer)\n })\n\n // Calculate required number of bits\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n // Add a terminator.\n // If the bit string is shorter than the total number of required bits,\n // a terminator of up to four 0s must be added to the right side of the string.\n // If the bit string is more than four bits shorter than the required number of bits,\n // add four 0s to the end.\n if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n buffer.put(0, 4)\n }\n\n // If the bit string is fewer than four bits shorter, add only the number of 0s that\n // are needed to reach the required number of bits.\n\n // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n // pad the string on the right with 0s to make the string's length a multiple of 8.\n while (buffer.getLengthInBits() % 8 !== 0) {\n buffer.putBit(0)\n }\n\n // Add pad bytes if the string is still shorter than the total number of required bits.\n // Extend the buffer to fill the data capacity of the symbol corresponding to\n // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n // and 00010001 (0x11) alternately.\n const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n for (let i = 0; i < remainingByte; i++) {\n buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n }\n\n return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param {BitBuffer} bitBuffer Data to encode\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n // Total number of blocks\n const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n // Calculate how many blocks each group should contain\n const blocksInGroup2 = totalCodewords % ecTotalBlocks\n const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n // Number of EC codewords is the same for both groups\n const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n const rs = new ReedSolomonEncoder(ecCount)\n\n let offset = 0\n const dcData = new Array(ecTotalBlocks)\n const ecData = new Array(ecTotalBlocks)\n let maxDataSize = 0\n const buffer = new Uint8Array(bitBuffer.buffer)\n\n // Divide the buffer into the required number of blocks\n for (let b = 0; b < ecTotalBlocks; b++) {\n const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n // extract a block of data from buffer\n dcData[b] = buffer.slice(offset, offset + dataSize)\n\n // Calculate EC codewords for this data block\n ecData[b] = rs.encode(dcData[b])\n\n offset += dataSize\n maxDataSize = Math.max(maxDataSize, dataSize)\n }\n\n // Create final data\n // Interleave the data and error correction codewords from each block\n const data = new Uint8Array(totalCodewords)\n let index = 0\n let i, r\n\n // Add data codewords\n for (i = 0; i < maxDataSize; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n if (i < dcData[r].length) {\n data[index++] = dcData[r][i]\n }\n }\n }\n\n // Apped EC codewords\n for (i = 0; i < ecCount; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n data[index++] = ecData[r][i]\n }\n }\n\n return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @param {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param {MaskPattern} maskPattern Mask pattern\n * @return {Object} Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n let segments\n\n if (Array.isArray(data)) {\n segments = Segments.fromArray(data)\n } else if (typeof data === 'string') {\n let estimatedVersion = version\n\n if (!estimatedVersion) {\n const rawSegments = Segments.rawSplit(data)\n\n // Estimate best version that can contain raw splitted segments\n estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n }\n\n // Build optimized segments\n // If estimated version is undefined, try with the highest version\n segments = Segments.fromString(data, estimatedVersion || 40)\n } else {\n throw new Error('Invalid data')\n }\n\n // Get the min version that can contain data\n const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n // If no version is found, data cannot be stored\n if (!bestVersion) {\n throw new Error('The amount of data is too big to be stored in a QR Code')\n }\n\n // If not specified, use min version as default\n if (!version) {\n version = bestVersion\n\n // Check if the specified version can contain the data\n } else if (version < bestVersion) {\n throw new Error('\\n' +\n 'The chosen QR Code version cannot contain this amount of data.\\n' +\n 'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n )\n }\n\n const dataBits = createData(version, errorCorrectionLevel, segments)\n\n // Allocate matrix buffer\n const moduleCount = Utils.getSymbolSize(version)\n const modules = new BitMatrix(moduleCount)\n\n // Add function modules\n setupFinderPattern(modules, version)\n setupTimingPattern(modules)\n setupAlignmentPattern(modules, version)\n\n // Add temporary dummy bits for format info just to set them as reserved.\n // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n // since the masking operation must be performed only on the encoding region.\n // These blocks will be replaced with correct values later in code.\n setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n if (version >= 7) {\n setupVersionInfo(modules, version)\n }\n\n // Add data codewords\n setupData(modules, dataBits)\n\n if (isNaN(maskPattern)) {\n // Find best mask pattern\n maskPattern = MaskPattern.getBestMask(modules,\n setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n }\n\n // Apply mask pattern\n MaskPattern.applyMask(maskPattern, modules)\n\n // Replace format info bits with correct values\n setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n return {\n modules: modules,\n version: version,\n errorCorrectionLevel: errorCorrectionLevel,\n maskPattern: maskPattern,\n segments: segments\n }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data Input data\n * @param {Object} options Optional configurations\n * @param {Number} options.version QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n if (typeof data === 'undefined' || data === '') {\n throw new Error('No input text')\n }\n\n let errorCorrectionLevel = ECLevel.M\n let version\n let mask\n\n if (typeof options !== 'undefined') {\n // Use higher error correction level as default\n errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n version = Version.from(options.version)\n mask = MaskPattern.from(options.maskPattern)\n\n if (options.toSJISFunc) {\n Utils.setToSJISFunction(options.toSJISFunc)\n }\n }\n\n return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Barcode.vue?vue&type=style&index=0&id=aef5175a&prod&scoped=true&lang=css&\"","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n id: 'Numeric',\n bit: 1 << 0,\n ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n * 26 alphabetic characters (A - Z),\n * and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n id: 'Alphanumeric',\n bit: 1 << 1,\n ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n id: 'Byte',\n bit: 1 << 2,\n ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n id: 'Kanji',\n bit: 1 << 3,\n ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param {Mode} mode Data mode\n * @param {Number} version QR Code version\n * @return {Number} Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid version: ' + version)\n }\n\n if (version >= 1 && version < 10) return mode.ccBits[0]\n else if (version < 27) return mode.ccBits[1]\n return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param {String} dataStr Input data string\n * @return {Mode} Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n else if (Regex.testKanji(dataStr)) return exports.KANJI\n else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String} Mode name\n */\nexports.toString = function toString (mode) {\n if (mode && mode.id) return mode.id\n throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param {Mode} mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param {String} string Mode name\n * @returns {Mode} Mode object\n */\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'numeric':\n return exports.NUMERIC\n case 'alphanumeric':\n return exports.ALPHANUMERIC\n case 'kanji':\n return exports.KANJI\n case 'byte':\n return exports.BYTE\n default:\n throw new Error('Unknown mode: ' + string)\n }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param {Mode|String} value Encoding mode\n * @param {Mode} defaultValue Fallback value\n * @return {Mode} Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param {String} str Input string\n * @return {Number} Number of byte\n */\nfunction getStringByteLength (str) {\n return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param {Mode} mode Segment mode\n * @param {String} str String to process\n * @return {Array} Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n const segments = []\n let result\n\n while ((result = regex.exec(str)) !== null) {\n segments.push({\n data: result[0],\n index: result.index,\n mode: mode,\n length: result[0].length\n })\n }\n\n return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param {String} dataStr Input string\n * @return {Array} Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n let byteSegs\n let kanjiSegs\n\n if (Utils.isKanjiModeEnabled()) {\n byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n } else {\n byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n kanjiSegs = []\n }\n\n const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n return segs\n .sort(function (s1, s2) {\n return s1.index - s2.index\n })\n .map(function (obj) {\n return {\n data: obj.data,\n mode: obj.mode,\n length: obj.length\n }\n })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param {Number} length String length\n * @param {Mode} mode Segment mode\n * @return {Number} Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n switch (mode) {\n case Mode.NUMERIC:\n return NumericData.getBitsLength(length)\n case Mode.ALPHANUMERIC:\n return AlphanumericData.getBitsLength(length)\n case Mode.KANJI:\n return KanjiData.getBitsLength(length)\n case Mode.BYTE:\n return ByteData.getBitsLength(length)\n }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction mergeSegments (segs) {\n return segs.reduce(function (acc, curr) {\n const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n if (prevSeg && prevSeg.mode === curr.mode) {\n acc[acc.length - 1].data += curr.data\n return acc\n }\n\n acc.push(curr)\n return acc\n }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction buildNodes (segs) {\n const nodes = []\n for (let i = 0; i < segs.length; i++) {\n const seg = segs[i]\n\n switch (seg.mode) {\n case Mode.NUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.ALPHANUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.KANJI:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n break\n case Mode.BYTE:\n nodes.push([\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n }\n }\n\n return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param {Array} nodes Array of object with segments data\n * @param {Number} version QR Code version\n * @return {Object} Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n const table = {}\n const graph = { start: {} }\n let prevNodeIds = ['start']\n\n for (let i = 0; i < nodes.length; i++) {\n const nodeGroup = nodes[i]\n const currentNodeIds = []\n\n for (let j = 0; j < nodeGroup.length; j++) {\n const node = nodeGroup[j]\n const key = '' + i + j\n\n currentNodeIds.push(key)\n table[key] = { node: node, lastCount: 0 }\n graph[key] = {}\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n const prevNodeId = prevNodeIds[n]\n\n if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n graph[prevNodeId][key] =\n getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n table[prevNodeId].lastCount += node.length\n } else {\n if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n 4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n }\n }\n }\n\n prevNodeIds = currentNodeIds\n }\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n graph[prevNodeIds[n]].end = 0\n }\n\n return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param {String} data Input data\n * @param {Mode | String} modesHint Data mode\n * @return {Segment} Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n let mode\n const bestMode = Mode.getBestModeForData(data)\n\n mode = Mode.from(modesHint, bestMode)\n\n // Make sure data can be encoded\n if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n throw new Error('\"' + data + '\"' +\n ' cannot be encoded with mode ' + Mode.toString(mode) +\n '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n }\n\n // Use Mode.BYTE if Kanji support is disabled\n if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n mode = Mode.BYTE\n }\n\n switch (mode) {\n case Mode.NUMERIC:\n return new NumericData(data)\n\n case Mode.ALPHANUMERIC:\n return new AlphanumericData(data)\n\n case Mode.KANJI:\n return new KanjiData(data)\n\n case Mode.BYTE:\n return new ByteData(data)\n }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param {Array} array Array of objects with segments data\n * @return {Array} Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n return array.reduce(function (acc, seg) {\n if (typeof seg === 'string') {\n acc.push(buildSingleSegment(seg, null))\n } else if (seg.data) {\n acc.push(buildSingleSegment(seg.data, seg.mode))\n }\n\n return acc\n }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @return {Array} Array of segments\n */\nexports.fromString = function fromString (data, version) {\n const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n const nodes = buildNodes(segs)\n const graph = buildGraph(nodes, version)\n const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n const optimizedSegs = []\n for (let i = 1; i < path.length - 1; i++) {\n optimizedSegs.push(graph.table[path[i]].node)\n }\n\n return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param {string} data Input string\n * @return {Array} Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n return exports.fromArray(\n getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n )\n}\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n // Character count indicator + mode indicator bits\n return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n let totalBits = 0\n\n segments.forEach(function (data) {\n const reservedBits = getReservedBitsCount(data.mode, version)\n totalBits += reservedBits + data.getBitsLength()\n })\n\n return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n const length = getTotalBitsFromDataArray(segments, currentVersion)\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param {Number|String} value QR Code version\n * @param {Number} defaultValue Fallback value\n * @return {Number} QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n if (VersionCheck.isValid(value)) {\n return parseInt(value, 10)\n }\n\n return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param {Number} version QR Code version (1-40)\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid QR Code version')\n }\n\n // Use Byte mode as default\n if (typeof mode === 'undefined') mode = Mode.BYTE\n\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n // Return max number of storable codewords\n switch (mode) {\n case Mode.NUMERIC:\n return Math.floor((usableBits / 10) * 3)\n\n case Mode.ALPHANUMERIC:\n return Math.floor((usableBits / 11) * 2)\n\n case Mode.KANJI:\n return Math.floor(usableBits / 13)\n\n case Mode.BYTE:\n default:\n return Math.floor(usableBits / 8)\n }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param {Segment} data Segment of data\n * @param {Number} [errorCorrectionLevel=H] Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n let seg\n\n const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n if (Array.isArray(data)) {\n if (data.length > 1) {\n return getBestVersionForMixedData(data, ecl)\n }\n\n if (data.length === 0) {\n return 1\n }\n\n seg = data[0]\n } else {\n seg = data\n }\n\n return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param {Number} version QR Code version\n * @return {Number} Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n if (!VersionCheck.isValid(version) || version < 7) {\n throw new Error('Invalid QR Code version')\n }\n\n let d = version << 12\n\n while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n }\n\n return (version << 12) | d\n}\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n const args = [].slice.call(arguments, 1)\n const argsNum = args.length\n const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n if (!isLastArgCb && !canPromise()) {\n throw new Error('Callback required as last argument')\n }\n\n if (isLastArgCb) {\n if (argsNum < 2) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 2) {\n cb = text\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 3) {\n if (canvas.getContext && typeof cb === 'undefined') {\n cb = opts\n opts = undefined\n } else {\n cb = opts\n opts = text\n text = canvas\n canvas = undefined\n }\n }\n } else {\n if (argsNum < 1) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 1) {\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 2 && !canvas.getContext) {\n opts = text\n text = canvas\n canvas = undefined\n }\n\n return new Promise(function (resolve, reject) {\n try {\n const data = QRCode.create(text, opts)\n resolve(renderFunc(data, canvas, opts))\n } catch (e) {\n reject(e)\n }\n })\n }\n\n try {\n const data = QRCode.create(text, opts)\n cb(null, renderFunc(data, canvas, opts))\n } catch (e) {\n cb(e)\n }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n return SvgRenderer.render(data, opts)\n})\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n if (version === 1) return []\n\n const posCount = Math.floor(version / 7) + 2\n const size = getSymbolSize(version)\n const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n const positions = [size - 7] // Last coord is always (size - 7)\n\n for (let i = 1; i < posCount - 1; i++) {\n positions[i] = positions[i - 1] - intervals\n }\n\n positions.push(6) // First coord is always 6\n\n return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const coords = []\n const pos = exports.getRowColCoords(version)\n const posLength = pos.length\n\n for (let i = 0; i < posLength; i++) {\n for (let j = 0; j < posLength; j++) {\n // Skip if position is occupied by finder patterns\n if ((i === 0 && j === 0) || // top-left\n (i === 0 && j === posLength - 1) || // bottom-left\n (i === posLength - 1 && j === 0)) { // top-right\n continue\n }\n\n coords.push([pos[i], pos[j]])\n }\n }\n\n return coords\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n this.mode = Mode.NUMERIC\n this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n let i, group, value\n\n // The input data string is divided into groups of three digits,\n // and each group is converted to its 10-bit binary equivalent.\n for (i = 0; i + 3 <= this.data.length; i += 3) {\n group = this.data.substr(i, 3)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, 10)\n }\n\n // If the number of input digits is not an exact multiple of three,\n // the final one or two digits are converted to 4 or 7 bits respectively.\n const remainingNum = this.data.length - i\n if (remainingNum > 0) {\n group = this.data.substr(i)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, remainingNum * 3 + 1)\n }\n}\n\nmodule.exports = NumericData\n","var hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('Doughnut',{attrs:{\"chart-data\":_vm.chartData}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction noop() {}\nconst uid = (function() {\n let id = 0;\n return function() {\n return id++;\n };\n}());\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : value / dimension;\nconst toDimension = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\nfunction _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\nfunction clone$1(source) {\n if (isArray(source)) {\n return source.map(clone$1);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for (; k < klen; ++k) {\n target[keys[k]] = clone$1(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n merge(tval, sval, options);\n } else {\n target[key] = clone$1(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n for (let i = 0; i < ilen; ++i) {\n source = sources[i];\n if (!isObject(source)) {\n continue;\n }\n const keys = Object.keys(source);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, source, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone$1(sval);\n }\n}\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\nconst keyResolvers = {\n '': v => v,\n x: o => o.x,\n y: o => o.y\n};\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return obj => {\n for (const k of keys) {\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts) {\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\nfunction _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b) => a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < (-0.5 * PI)) {\n angle += TAU;\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {lo, hi};\n}\nconst _lookupByKey = (table, key, value, last) =>\n _lookup(table, value, last\n ? index => table[index][key] <= value\n : index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n const set = new Set();\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n set.add(items[i]);\n }\n if (set.size === ilen) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n let ticking = false;\n let args = [];\n return function(...rest) {\n args = updateArgs(rest);\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\nfunction debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const {iScale, _parsed} = meta;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(\n _lookupByKey(_parsed, iScale.axis, min).lo,\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),\n start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {start, count};\n}\nfunction _scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n linear: t => t,\n easeInQuad: t => t * t,\n easeOutQuad: t => -t * (t - 2),\n easeInOutQuad: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n easeInCubic: t => t * t * t,\n easeOutCubic: t => (t -= 1) * t * t + 1,\n easeInOutCubic: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: t => t * t * t * t,\n easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n easeInOutQuart: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: t => t * t * t * t * t,\n easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n easeInOutQuint: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n easeOutSine: t => Math.sin(t * HALF_PI),\n easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: t => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic(t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack(t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack(t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n easeOutBounce(t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n easeInOutBounce: t => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.2.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\nfunction index_esm(input) {\n return new Color(input);\n}\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n constructor(_descriptors) {\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n}\nvar defaults = new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false,\n }\n});\n\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n drawPointLegend(ctx, options, x, y, null);\n}\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch (style) {\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\nfunction _isPointInArea(point, area, margin) {\n margin = margin || 0.5;\n return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction addRoundedRectPath(ctx, rect) {\n const {x, y, w, h, radius} = rect;\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n ctx.lineTo(x, y + h - radius.bottomLeft);\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n ctx.lineTo(x + w, y + radius.topRight);\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\nfunction toTRBL(value) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = '';\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\nfunction resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: rootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get(target, prop) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n set(target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value;\n delete target._keys;\n return true;\n }\n });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get(target, prop, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n set(target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop];\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n value = value(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n return value;\n }\n return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (defined(value)) {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (defined(value)) {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const {iScale} = meta;\n const {key = 'r'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01;\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const {offsetX, offsetY} = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n if ('native' in evt) {\n return evt;\n }\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(evt, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect();\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n height = round1(width / 2);\n }\n return {\n width,\n height\n };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = deviceHeight / pixelRatio;\n chart.width = deviceWidth / pixelRatio;\n const canvas = chart.canvas;\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\nconst supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n }\n return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x(x) {\n return x;\n },\n setWidth(w) {\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) {\n return x;\n },\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle,\n };\n }\n return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n let {start, end, loop} = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n return result;\n}\nfunction _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n while (start < count && points[start].skip) {\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while (end > start && points[end % count].skip) {\n end--;\n }\n end %= count;\n return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _isPointInArea as $, _factorize as A, finiteOrDefault as B, callback as C, _addGrace as D, _limitValue as E, toDegrees as F, _measureText as G, HALF_PI as H, _int16Range as I, _alignPixel as J, toPadding as K, clipArea as L, renderText as M, unclipArea as N, toFont as O, PI as P, each as Q, _toLeftRightCenter as R, _alignStartEnd as S, TAU as T, overrides as U, merge as V, _capitalize as W, getRelativePosition as X, _rlookupByKey as Y, _lookupByKey as Z, _arrayUnique as _, resolve as a, toLineHeight as a$, getAngleFromPoint as a0, getMaximumSize as a1, _getParentNode as a2, readUsedSize as a3, throttled as a4, supportsEventListenerOptions as a5, _isDomSupported as a6, descriptors as a7, isFunction as a8, _attachContext as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, noop as aF, distanceBetweenPoints as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, _longestText as aM, _filterBetween as aN, _lookup as aO, isPatternOrGradient as aP, getHoverColor as aQ, clone$1 as aR, _merger as aS, _mergerIf as aT, _deprecated as aU, _splitKey as aV, toFontString as aW, splineCurve as aX, splineCurveMonotone as aY, getStyle as aZ, fontString as a_, _createResolver as aa, _descriptors as ab, mergeIf as ac, uid as ad, debounce as ae, retinaScale as af, clearCanvas as ag, setsEqual as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _readValueToProps as al, _updateBezierControlPoints as am, _computeSegments as an, _boundSegments as ao, _steppedInterpolation as ap, _bezierInterpolation as aq, _pointInLine as ar, _steppedLineTo as as, _bezierCurveTo as at, drawPoint as au, addRoundedRectPath as av, toTRBL as aw, toTRBLCorners as ax, _boundSegment as ay, _normalizeAngle as az, isArray as b, PITAU as b0, INFINITY as b1, RAD_PER_DEG as b2, QUARTER_PI as b3, TWO_THIRDS_PI as b4, _angleDiff as b5, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, log10 as z };\n","/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as log10, A as _factorize, B as finiteOrDefault, C as callback, D as _addGrace, E as _limitValue, F as toDegrees, G as _measureText, I as _int16Range, J as _alignPixel, K as toPadding, L as clipArea, M as renderText, N as unclipArea, O as toFont, Q as each, R as _toLeftRightCenter, S as _alignStartEnd, U as overrides, V as merge, W as _capitalize, X as getRelativePosition, Y as _rlookupByKey, Z as _lookupByKey, $ as _isPointInArea, a0 as getAngleFromPoint, a1 as getMaximumSize, a2 as _getParentNode, a3 as readUsedSize, a4 as throttled, a5 as supportsEventListenerOptions, a6 as _isDomSupported, a7 as descriptors, a8 as isFunction, a9 as _attachContext, aa as _createResolver, ab as _descriptors, ac as mergeIf, ad as uid, ae as debounce, af as retinaScale, ag as clearCanvas, ah as setsEqual, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _readValueToProps, am as _updateBezierControlPoints, an as _computeSegments, ao as _boundSegments, ap as _steppedInterpolation, aq as _bezierInterpolation, ar as _pointInLine, as as _steppedLineTo, at as _bezierCurveTo, au as drawPoint, av as addRoundedRectPath, aw as toTRBL, ax as toTRBLCorners, ay as _boundSegment, az as _normalizeAngle, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as noop, aG as distanceBetweenPoints, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as _longestText, aN as _filterBetween, aO as _lookup } from './chunks/helpers.segment.mjs';\nexport { d as defaults } from './chunks/helpers.segment.mjs';\n\nclass Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for (; i >= 0; --i) {\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color(from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || (elapsed < duration));\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = (elapsed / duration) % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n },\n});\ndefaults.describe('animations', {\n _fallback: 'animation',\n});\ndefaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n },\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: v => v | 0\n },\n }\n }\n});\nclass Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n }\n );\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n constructor(chart, datasetIndex) {\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = () => this.getContext(index, active);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {sharedOptions, includeOptions};\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {top: true, right: true, bottom: true, left: true};\n return;\n }\n const {start, end, reverse, top, bottom} = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\nclass BarController extends DatasetController {\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const {iScale} = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type)\n .filter(meta => meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const skipNull = (meta) => {\n const parsed = meta.controller.getParsed(dataIndex);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets) {\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 ||\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1;\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n};\nBarController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true,\n }\n }\n};\n\nclass BubbleController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n};\nBubbleController.overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n },\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n _scriptable: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(tooltipItem) {\n let dataLabel = tooltipItem.label;\n const value = ': ' + tooltipItem.formattedValue;\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n return dataLabel;\n }\n }\n }\n }\n};\n\nclass LineController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\nLineController.id = 'line';\nLineController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false,\n};\nLineController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n },\n _value_: {\n type: 'linear',\n },\n }\n};\n\nclass PolarAreaController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n },\n },\n indexAxis: 'r',\n startAngle: 0,\n};\nPolarAreaController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(context) {\n return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n }\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n },\n};\nRadarController.overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear',\n }\n }\n};\n\nclass Element {\n constructor() {\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n tooltipPosition(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n return this;\n }\n const ret = {};\n props.forEach(prop => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\n offset: false,\n borderDash: [],\n borderDashOffset: 0.0,\n borderWidth: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2,\n }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n _fallback: false,\n _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n constructor(cfg) {\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {min, max};\n }\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = this.ticks.length;\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [this]);\n }\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const {min, max} = this;\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const optsAtIndex = grid.setContext(this.getContext(i));\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndex.borderDash || [];\n const borderDashOffset = optsAtIndex.borderDashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = y + textOffset - labelPadding.top;\n let left = x - labelPadding.left;\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor,\n };\n }\n items.push({\n rotation,\n label,\n font,\n color,\n strokeColor,\n strokeWidth,\n textOffset,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += (widest / 2);\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= (widest / 2);\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {textAlign, x};\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, y: item.ty2},\n {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n }\n );\n }\n }\n }\n }\n drawBorder() {\n const {chart, ctx, options: {grid}} = this;\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.borderWidth;\n ctx.strokeStyle = borderOpts.borderColor;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n const tickFont = item.font;\n const label = item.label;\n if (item.backdrop) {\n ctx.fillStyle = item.backdrop.color;\n ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n }\n let y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor() {\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n each(arg, item => {\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = new Registry();\n\nclass ScatterController extends DatasetController {\n update(mode) {\n const meta = this._cachedMeta;\n const {data: points = []} = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n const {dataset: line, _dataset} = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const {showLine} = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(item) {\n return '(' + item.label + ', ' + item.formattedValue + ')';\n }\n }\n }\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n constructor(options) {\n this.options = options || {};\n }\n init(chartOptions) {}\n formats() {\n return abstract();\n }\n parse(value, format) {\n return abstract();\n }\n format(timestamp, format) {\n return abstract();\n }\n add(timestamp, amount, unit) {\n return abstract();\n }\n diff(a, b, unit) {\n return abstract();\n }\n startOf(timestamp, unit, weekday) {\n return abstract();\n }\n endOf(timestamp, unit) {\n return abstract();\n }\n}\nDateAdapter.override = function(members) {\n Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n return {lo: 0, hi: data.length - 1};\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({element, datasetIndex, index});\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\nvar Interaction = {\n evaluateInteractionItems,\n modes: {\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n return elements;\n },\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n return items;\n },\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\ndefaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n});\nvar layouts = {\n addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n chart.boxes.push(item);\n },\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w,\n };\n each(boxes.chartArea, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, (args) => {\n const event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\nclass DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass PluginService {\n constructor() {\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\nfunction allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {plugins, localIds};\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, {plugins, localIds}, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins) {\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, {plugin, local}, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [''], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const firstIDs = Object.create(null);\n const scales = Object.create(null);\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const {options, type} = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {type},\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"3.9.1\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nclass Chart {\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.'\n );\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {size: newSize});\n callback(options.onResize, [this, newSize], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n })\n );\n }\n each(items, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\n Object.assign(ControllerClass.prototype, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {mode});\n this._layers.sort(compare2Level('z', '_idx'));\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({chart: this});\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = this.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n this.notifyPlugins('destroy');\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type) => _add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = () => {\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = () => {\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [e, active, this], this);\n if (isClick) {\n callback(options.onClick, [e, active, this], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable,\n value: defaults\n },\n instances: {\n enumerable,\n value: instances\n },\n overrides: {\n enumerable,\n value: overrides\n },\n registry: {\n enumerable,\n value: registry\n },\n version: {\n enumerable,\n value: version\n },\n getChart: {\n enumerable,\n value: getChart\n },\n register: {\n enumerable,\n value: (...items) => {\n registry.add(...items);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable,\n value: (...items) => {\n registry.remove(...items);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n };\n}\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\nfunction pathArc(ctx, element, offset, spacing, end, circular) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU, circular);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n const {x, y, startAngle, pixelMargin, fullCircles} = element;\n const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n const innerRadius = element.innerRadius + pixelMargin;\n let i;\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle, circular) {\n const {options} = element;\n const {borderWidth, borderJoinStyle} = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n}\nclass ArcElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = this.options.spacing / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return (betweenAngles && withinRadius);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference',\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 2;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n let radiusOffset = 0;\n if (offset) {\n radiusOffset = offset / 2;\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n if (this.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n const endAngle = drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, endAngle, circular);\n ctx.restore();\n }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true,\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let {move = true, reverse} = params || {};\n let i, point, prev;\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n constructor(cfg) {\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || (this.points.length - start);\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n return options.radius + options.hitRadius;\n }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {x: pointAx, y: pointAy} = data[a];\n maxArea = area = -1;\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs(\n (pointAx - avgX) * (data[j].y - pointAy) -\n (pointAx - data[j].x) * (avgY - pointAy)\n );\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX,\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {value: data});\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset) => {\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const {iScale} = meta;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {start, count};\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false,\n },\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {_data, indexAxis} = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments) {\n let {start, end} = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\nfunction _pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n if (!propagate) {\n return fill;\n }\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\nfunction _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\nfunction _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\n\nclass simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const {chart, fill, line} = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {line, target, color: below, scale, property});\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config) {\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const {options, ctx} = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {color: fontColor, padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n\nclass Title extends Element {\n constructor(config) {\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold',\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst positioners = {\n average(items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {width, height};\n}\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n constructor(config) {\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart || config._chart;\n this._chart = this.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const {callbacks} = options;\n const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n const title = callbacks.title.apply(this, [context]);\n const afterTitle = callbacks.afterTitle.apply(this, [context]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n const footer = callbacks.footer.apply(this, [tooltipItems]);\n const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(this, context));\n labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n labelTextColors.push(scoped.labelTextColor.call(this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColors = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : (labelColors.borderWidth || 1);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n const borderRadius = toTRBLCorners(labelColors.borderRadius);\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent(chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold',\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {\n },\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold',\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart',\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: {\n beforeTitle: noop,\n title(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0,\n };\n },\n labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n }\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false,\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for (; j < numSpaces; ++j) {\n ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = 1;\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n const endExp = Math.floor(log10(dataRange.max));\n const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n const ticks = [];\n let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n let exp = Math.floor(log10(tickVal));\n let significand = Math.floor(tickVal / Math.pow(10, exp));\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n do {\n ticks.push({value: tickVal, major: isMajor(tickVal)});\n ++significand;\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || (exp === endExp && significand < endSignificand));\n const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({value: lastTick, major: isMajor(tickVal)});\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(exp(min, -1));\n setMax(exp(max, +1));\n }\n }\n if (min <= 0) {\n setMin(exp(max, -1));\n }\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n setMin(exp(min, -1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n};\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - (size / 2),\n end: pos + (size / 2)\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\nfunction fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const extra = getTickBackdropHeight(opts) / 2;\n const outerDistance = scale.drawingArea;\n const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const size = labelSizes[i];\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= (h / 2);\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n for (let i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n const {backdropColor} = optsAtIndex;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some(v => v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius,\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const {color, lineWidth} = gridLineOpts;\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(gridLineOpts.borderDash);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n constructor(cfg) {\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid} = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const optsAtIndex = grid.setContext(this.getContext(index - 1));\n drawRadiusLine(this, optsAtIndex, offset, labelCount);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index) => {\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n tickFont.size + padding.height\n );\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback(label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\n\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n return a - b;\n}\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n constructor(props) {\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n initOffsets(timestamps) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n const formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], this) : label;\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return (this._cache.data = this.normalize(timestamps));\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n constructor(props) {\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","import { Chart, BarController, DoughnutController, LineController, PieController, PolarAreaController, RadarController, BubbleController, ScatterController } from 'chart.js';\nimport { defineComponent, shallowRef, ref, watch, onMounted, onBeforeUnmount, toRaw, h, isProxy } from 'vue';\n\nvar ChartEmits;\n(function(ChartEmits) {\n ChartEmits[\"ChartRendered\"] = \"chart:rendered\";\n ChartEmits[\"ChartUpdated\"] = \"chart:updated\";\n ChartEmits[\"ChartDestroyed\"] = \"chart:destroyed\";\n ChartEmits[\"LabelsUpdated\"] = \"labels:updated\";\n})(ChartEmits || (ChartEmits = {}));\nfunction chartCreate(createChartFunction, chartData, chartOptions, context) {\n createChartFunction(chartData, chartOptions);\n if (context !== undefined) {\n context.emit(ChartEmits.ChartRendered);\n }\n}\nfunction chartUpdate(chart, context) {\n chart.update();\n if (context !== undefined) {\n context.emit(ChartEmits.ChartUpdated);\n }\n}\nfunction chartDestroy(chart, context) {\n chart.destroy();\n if (context !== undefined) {\n context.emit(ChartEmits.ChartDestroyed);\n }\n}\nfunction getChartData(data, datasetIdKey) {\n const nextData = {\n labels: typeof data.labels === \"undefined\" ? [] : [\n ...data.labels\n ],\n datasets: []\n };\n setChartDatasets(nextData, {\n ...data\n }, datasetIdKey);\n return nextData;\n}\nfunction setChartDatasets(oldData, newData, datasetIdKey) {\n const addedDatasets = [];\n oldData.datasets = newData.datasets.map((nextDataset)=>{\n // given the new set, find it's current match\n const currentDataset = oldData.datasets.find((dataset)=>dataset[datasetIdKey] === nextDataset[datasetIdKey]);\n // There is no original to update, so simply add new one\n if (!currentDataset || !nextDataset.data || addedDatasets.includes(currentDataset)) {\n return {\n ...nextDataset\n };\n }\n addedDatasets.push(currentDataset);\n Object.assign(currentDataset, nextDataset);\n return currentDataset;\n });\n}\nfunction setChartLabels(chart, labels, context) {\n chart.data.labels = labels;\n if (context !== undefined) {\n context.emit(ChartEmits.LabelsUpdated);\n }\n}\nfunction setChartOptions(chart, options) {\n chart.options = {\n ...options\n };\n}\nfunction compareData(newData, oldData) {\n // Get new and old DataSet Labels\n const newDatasetLabels = newData.datasets.map((dataset)=>{\n return dataset.label;\n });\n const oldDatasetLabels = oldData.datasets.map((dataset)=>{\n return dataset.label;\n });\n // Check if Labels are equal and if dataset length is equal\n return oldData.datasets.length === newData.datasets.length && newDatasetLabels.every((value, index)=>value === oldDatasetLabels[index]);\n}\nconst templateError = \"Please remove the tags from your chart component. See https://vue-chartjs.org/guide/#vue-single-file-components\";\nconst chartUpdateError = \"Update ERROR: chart instance not found\";\n\nconst generateChart = (chartId, chartType, chartController)=>{\n return defineComponent({\n props: {\n chartData: {\n type: Object,\n required: true\n },\n chartOptions: {\n type: Object,\n default: ()=>{}\n },\n datasetIdKey: {\n type: String,\n default: \"label\"\n },\n chartId: {\n type: String,\n default: chartId\n },\n width: {\n type: Number,\n default: 400\n },\n height: {\n type: Number,\n default: 400\n },\n cssClasses: {\n type: String,\n default: \"\"\n },\n styles: {\n type: Object,\n default: ()=>{}\n },\n plugins: {\n type: Array,\n default: ()=>[]\n }\n },\n setup (props, context) {\n Chart.register(chartController);\n const _chart = shallowRef(null);\n const canvasEl = ref(null);\n function renderChart(data, options) {\n if (_chart.value !== null) {\n chartDestroy(toRaw(_chart.value), context);\n }\n if (canvasEl.value === null) {\n throw new Error(templateError);\n } else {\n const chartData = getChartData(data, props.datasetIdKey);\n const canvasEl2DContext = canvasEl.value.getContext(\"2d\");\n if (canvasEl2DContext !== null) {\n _chart.value = new Chart(canvasEl2DContext, {\n type: chartType,\n data: isProxy(data) ? new Proxy(chartData, {}) : chartData,\n options,\n plugins: props.plugins\n });\n }\n }\n }\n function chartDataHandler(newValue, oldValue) {\n const newData = isProxy(newValue) ? toRaw(newValue) : {\n ...newValue\n };\n const oldData = isProxy(oldValue) ? toRaw(oldValue) : {\n ...oldValue\n };\n if (Object.keys(oldData).length > 0) {\n const chart = toRaw(_chart.value);\n const isEqualLabelsAndDatasetsLength = compareData(newData, oldData);\n if (isEqualLabelsAndDatasetsLength && chart !== null) {\n setChartDatasets(chart === null || chart === void 0 ? void 0 : chart.data, newData, props.datasetIdKey);\n if (newData.labels !== undefined) {\n setChartLabels(chart, newData.labels, context);\n }\n updateChart();\n } else {\n if (chart !== null) {\n chartDestroy(chart, context);\n }\n chartCreate(renderChart, props.chartData, props.chartOptions, context);\n }\n } else {\n if (_chart.value !== null) {\n chartDestroy(toRaw(_chart.value), context);\n }\n chartCreate(renderChart, props.chartData, props.chartOptions, context);\n }\n }\n function chartOptionsHandler(options) {\n const chart = toRaw(_chart.value);\n if (chart !== null) {\n setChartOptions(chart, options);\n updateChart();\n } else {\n chartCreate(renderChart, props.chartData, props.chartOptions, context);\n }\n }\n function updateChart() {\n const chart = toRaw(_chart.value);\n if (chart !== null) {\n chartUpdate(chart, context);\n } else {\n console.error(chartUpdateError);\n }\n }\n watch(()=>props.chartData, (newValue, oldValue)=>chartDataHandler(newValue, oldValue), {\n deep: true\n });\n watch(()=>props.chartOptions, (newValue)=>chartOptionsHandler(newValue), {\n deep: true\n });\n onMounted(()=>{\n if (\"datasets\" in props.chartData && props.chartData.datasets.length > 0) {\n chartCreate(renderChart, props.chartData, props.chartOptions, context);\n }\n });\n onBeforeUnmount(()=>{\n if (_chart.value !== null) {\n chartDestroy(toRaw(_chart.value), context);\n }\n });\n context.expose({\n chart: _chart,\n updateChart\n });\n return ()=>h(\"div\", {\n style: props.styles,\n class: props.cssClasses\n }, [\n h(\"canvas\", {\n id: props.chartId,\n width: props.width,\n height: props.height,\n ref: canvasEl\n })\n ]);\n }\n });\n};\nconst Bar = /* #__PURE__ */ generateChart(\"bar-chart\", \"bar\", BarController);\nconst Doughnut = /* #__PURE__ */ generateChart(\"doughnut-chart\", \"doughnut\", DoughnutController);\nconst Line = /* #__PURE__ */ generateChart(\"line-chart\", \"line\", LineController);\nconst Pie = /* #__PURE__ */ generateChart(\"pie-chart\", \"pie\", PieController);\nconst PolarArea = /* #__PURE__ */ generateChart(\"polar-chart\", \"polarArea\", PolarAreaController);\nconst Radar = /* #__PURE__ */ generateChart(\"radar-chart\", \"radar\", RadarController);\nconst Bubble = /* #__PURE__ */ generateChart(\"bubble-chart\", \"bubble\", BubbleController);\nconst Scatter = /* #__PURE__ */ generateChart(\"scatter-chart\", \"scatter\", ScatterController);\n\nexport { Bar, Bubble, Doughnut, Line, Pie, PolarArea, Radar, Scatter, generateChart };\n//# sourceMappingURL=index.js.map\n","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chart.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chart.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./chart.vue?vue&type=template&id=07966156&\"\nimport script from \"./chart.vue?vue&type=script&lang=js&\"\nexport * from \"./chart.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/xicon.f581be52.png\";","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-basic-detection');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar tryToString = require('../internals/try-to-string');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineProperty = require('../internals/object-define-property').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = global.TypeError;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQUIRED = false;\nvar NAME, Constructor, Prototype;\n\nvar TypedArrayConstructorsList = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n BigInt64Array: 8,\n BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return klass === 'DataView'\n || hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar getTypedArrayConstructor = function (it) {\n var proto = getPrototypeOf(it);\n if (!isObject(proto)) return;\n var state = getInternalState(proto);\n return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);\n};\n\nvar isTypedArray = function (it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n if (isTypedArray(it)) return it;\n throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n throw TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced, options) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n delete TypedArrayConstructor.prototype[KEY];\n } catch (error) {\n // old WebKit bug - some methods are non-configurable\n try {\n TypedArrayConstructor.prototype[KEY] = property;\n } catch (error2) { /* empty */ }\n }\n }\n if (!TypedArrayPrototype[KEY] || forced) {\n defineBuiltIn(TypedArrayPrototype, KEY, forced ? property\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);\n }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n delete TypedArrayConstructor[KEY];\n } catch (error) { /* empty */ }\n }\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n } catch (error) { /* empty */ }\n } else return;\n }\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n defineBuiltIn(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n // eslint-disable-next-line no-shadow -- safe\n TypedArray = function TypedArray() {\n throw TypeError('Incorrect invocation');\n };\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n TypedArrayPrototype = TypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQUIRED = true;\n defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n } });\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n}\n\nmodule.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n getTypedArrayConstructor: getTypedArrayConstructor,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n var result = toIntegerOrInfinity(it);\n if (result < 0) throw $RangeError(\"The argument can't be less than 0\");\n return result;\n};\n"],"sourceRoot":""}